icn3d 3.31.9 → 3.31.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icn3d.js +240 -87
- package/icn3d.min.js +5 -5
- package/icn3d.module.js +240 -87
- package/package.json +1 -1
package/icn3d.module.js
CHANGED
|
@@ -9963,9 +9963,9 @@ class ClickMenu {
|
|
|
9963
9963
|
});
|
|
9964
9964
|
|
|
9965
9965
|
me.myEventCls.onIds("#" + me.pre + "mn1_collection", "click", function (e) { me.icn3d; //e.preventDefault();
|
|
9966
|
-
|
|
9967
|
-
|
|
9968
|
-
|
|
9966
|
+
me.htmlCls.dialogCls.openDlg("dl_selectCollections", "Select Collections");
|
|
9967
|
+
});
|
|
9968
|
+
|
|
9969
9969
|
me.myEventCls.onIds("#" + me.pre + "mn1_dsn6", "click", function(e) { me.icn3d; //e.preventDefault();
|
|
9970
9970
|
me.htmlCls.dialogCls.openDlg('dl_dsn6', 'Please input the map file to display electron density map');
|
|
9971
9971
|
});
|
|
@@ -15032,18 +15032,18 @@ class SetDialog {
|
|
|
15032
15032
|
html += me.htmlCls.buttonStr + "reload_selectionfile' style='margin-top: 6px;'>Load</button>";
|
|
15033
15033
|
html += "</div>";
|
|
15034
15034
|
|
|
15035
|
-
html += me.htmlCls.divStr + "
|
|
15036
|
-
html +=
|
|
15035
|
+
html += me.htmlCls.divStr + "dl_selectCollections' class='" + dialogClass + "'>";
|
|
15036
|
+
html += me.htmlCls.divStr + "dl_collectionsMenu'>";
|
|
15037
|
+
html += '<b>Collection File</b>: <div style="width:20px; margin-top:6px; display:inline-block;"><span id="' + me.pre + 'dl_collection_file_expand" class="ui-icon ui-icon-plus icn3d-expand icn3d-link" style="display:none; width:15px;" title="Expand"></span><span id="' + me.pre + 'dl_collection_file_shrink" class="ui-icon ui-icon-minus icn3d-shrink icn3d-link" style="width:15px;" title="Shrink"></span></div><br>';
|
|
15038
|
+
html += me.htmlCls.divStr + "dl_collection_file' style=''>";
|
|
15037
15039
|
html += "You can load a collection of structures via a file. Here is <a href='https://github.com/ncbi/icn3d/blob/master/example/collection.json' target='_blank'>one example file</a><br><br>";
|
|
15038
15040
|
html += "Collection file: " + me.htmlCls.inputFileStr + "id='" + me.pre + "collectionfile'><br/>";
|
|
15039
15041
|
html += me.htmlCls.buttonStr + "reload_collectionfile' style='margin-top: 6px;'>Load</button>";
|
|
15040
15042
|
html += "</div>";
|
|
15041
|
-
|
|
15042
|
-
html += me.
|
|
15043
|
-
html += me.htmlCls.divStr + "
|
|
15044
|
-
html += "<
|
|
15045
|
-
html += "<select id='" + me.pre + "collections_menu' multiple size='6' style='min-width:130px;'>";
|
|
15046
|
-
html += "</select>";
|
|
15043
|
+
html += "</div>";
|
|
15044
|
+
html += '<br/><b>Structures</b>: <div style="width:20px; margin-top:6px; display:inline-block;"><span id="' + me.pre + 'dl_collection_structures_expand" class="ui-icon ui-icon-plus icn3d-expand icn3d-link" style="width:15px;" title="Expand"></span><span id="' + me.pre + 'dl_collection_structures_shrink" class="ui-icon ui-icon-minus icn3d-shrink icn3d-link" style="display:none; width:15px;" title="Shrink"></span></div><br>';
|
|
15045
|
+
html += me.htmlCls.divStr + "dl_collection_structures' style='display: none'>";
|
|
15046
|
+
html += "<select id='" + me.pre + "collections_menu'multiple size='6' style='min-width:300px;'></select>";
|
|
15047
15047
|
html += "</div>";
|
|
15048
15048
|
html += "</div>";
|
|
15049
15049
|
|
|
@@ -17406,17 +17406,13 @@ class Events {
|
|
|
17406
17406
|
ic.resizeCanvasCls.closeDialogs();
|
|
17407
17407
|
}
|
|
17408
17408
|
me.htmlCls.setHtmlCls.fileSupport();
|
|
17409
|
-
|
|
17410
|
-
|
|
17409
|
+
let reader = new FileReader();
|
|
17410
|
+
|
|
17411
|
+
reader.onload = async function (e) {
|
|
17411
17412
|
let dataStr = JSON.parse(e.target.result);
|
|
17412
17413
|
let collection = [dataStr["structures"].map(({ id }) => id), dataStr["structures"].map(({ title }) => title)];
|
|
17413
17414
|
let collectionHtml = ic.selectCollectionsCls.setAtomMenu(collection[0], collection[1]);
|
|
17414
|
-
|
|
17415
|
-
await ic.chainalignParserCls.downloadMmdbAf(collection[0][0], undefined, undefined, bNoDuplicate);
|
|
17416
|
-
|
|
17417
|
-
ic.opts["color"] = "structure";
|
|
17418
|
-
ic.setColorCls.setColorByOptions(ic.opts, ic.dAtoms);
|
|
17419
|
-
|
|
17415
|
+
|
|
17420
17416
|
$("#" + ic.pre + "collections_menu").html(collectionHtml);
|
|
17421
17417
|
ic.selectCollectionsCls.clickStructure();
|
|
17422
17418
|
|
|
@@ -17427,8 +17423,27 @@ class Events {
|
|
|
17427
17423
|
$("#" + me.pre + "collectionfile").val(),
|
|
17428
17424
|
false
|
|
17429
17425
|
);
|
|
17426
|
+
|
|
17430
17427
|
};
|
|
17431
17428
|
reader.readAsText(file);
|
|
17429
|
+
|
|
17430
|
+
if (Object.keys(me.utilsCls.getStructures(ic.dAtoms))){
|
|
17431
|
+
$("#" + me.pre + "dl_collection_file").hide();
|
|
17432
|
+
$("#" + me.pre + "dl_collection_structures").show();
|
|
17433
|
+
$("#" + me.pre + "dl_collection_file_expand").show();
|
|
17434
|
+
$("#" + me.pre + "dl_collection_file_shrink").hide();
|
|
17435
|
+
$("#" + me.pre + "dl_collection_structures_expand").hide();
|
|
17436
|
+
$("#" + me.pre + "dl_collection_structures_shrink").show();
|
|
17437
|
+
|
|
17438
|
+
} else {
|
|
17439
|
+
$("#" + me.pre + "dl_collection_file").show();
|
|
17440
|
+
$("#" + me.pre + "dl_collection_structures").hide();
|
|
17441
|
+
$("#" + me.pre + "dl_collection_file_expand").hide();
|
|
17442
|
+
$("#" + me.pre + "dl_collection_file_shrink").hide();
|
|
17443
|
+
$("#" + me.pre + "dl_collection_structures_expand").show();
|
|
17444
|
+
$("#" + me.pre + "dl_collection_structures_shrink").hide();
|
|
17445
|
+
}
|
|
17446
|
+
|
|
17432
17447
|
me.htmlCls.dialogCls.openDlg("dl_selectCollections", "Select Collections");
|
|
17433
17448
|
}
|
|
17434
17449
|
});
|
|
@@ -41766,8 +41781,10 @@ class AnnoIg {
|
|
|
41766
41781
|
}
|
|
41767
41782
|
|
|
41768
41783
|
showRefNum(giSeq, chnid, kabat_or_imgt, bCustom) { let ic = this.icn3d; ic.icn3dui;
|
|
41769
|
-
|
|
41770
|
-
|
|
41784
|
+
if(ic.chainid2igtrack) {
|
|
41785
|
+
let bResult = ic.chainid2igtrack[chnid];
|
|
41786
|
+
if(!bResult) return {html: '', html2: '', html3: ''};
|
|
41787
|
+
}
|
|
41771
41788
|
|
|
41772
41789
|
let html = this.getIgAnnoHtml(chnid, giSeq, bCustom, kabat_or_imgt);
|
|
41773
41790
|
|
|
@@ -41834,12 +41851,13 @@ class AnnoIg {
|
|
|
41834
41851
|
ic.chain2igArray[chnid] = [];
|
|
41835
41852
|
this.setChain2igArray(chnid, giSeq, bCustom);
|
|
41836
41853
|
|
|
41837
|
-
|
|
41838
41854
|
// remove Igs without BCEF strands one more time
|
|
41839
41855
|
let igArray = ic.chain2igArray[chnid];
|
|
41840
41856
|
|
|
41841
41857
|
for(let i = 0, il = igArray.length; i < il; ++i) {
|
|
41842
41858
|
let domainid = igArray[i].domainid;
|
|
41859
|
+
|
|
41860
|
+
if(!ic.domainid2info) continue;
|
|
41843
41861
|
let info = ic.domainid2info[domainid];
|
|
41844
41862
|
if(!info) continue;
|
|
41845
41863
|
|
|
@@ -41907,7 +41925,6 @@ class AnnoIg {
|
|
|
41907
41925
|
}
|
|
41908
41926
|
}
|
|
41909
41927
|
|
|
41910
|
-
|
|
41911
41928
|
// reset ic.chain2igArray
|
|
41912
41929
|
ic.chain2igArray[chnid] = [];
|
|
41913
41930
|
this.setChain2igArray(chnid, giSeq, bCustom);
|
|
@@ -41926,7 +41943,7 @@ class AnnoIg {
|
|
|
41926
41943
|
// htmlIg += '<span></span>';
|
|
41927
41944
|
//}
|
|
41928
41945
|
//else {
|
|
41929
|
-
refnumLabel = ic.resid2refnum[residueid];
|
|
41946
|
+
refnumLabel = (bCustom) ? ic.chainsMapping[chnid][residueid] : ic.resid2refnum[residueid];
|
|
41930
41947
|
let bHidelabel = false;
|
|
41931
41948
|
|
|
41932
41949
|
if(refnumLabel) {
|
|
@@ -42051,9 +42068,14 @@ class AnnoIg {
|
|
|
42051
42068
|
html3 += htmlTmp + '<br>';
|
|
42052
42069
|
html += htmlTmp + '<span class="icn3d-seqLine">';
|
|
42053
42070
|
|
|
42071
|
+
if(ic.seqStartLen && ic.seqStartLen[chnid]) html += ic.showSeqCls.insertMulGap(ic.seqStartLen[chnid], '-');
|
|
42072
|
+
|
|
42054
42073
|
html += htmlIg;
|
|
42055
42074
|
|
|
42056
|
-
html +=
|
|
42075
|
+
if(ic.seqStartLen && ic.seqStartLen[chnid]) html += ic.showSeqCls.insertMulGap(ic.seqEndLen[chnid], '-');
|
|
42076
|
+
|
|
42077
|
+
if(!bCustom) html += htmlCnt;
|
|
42078
|
+
|
|
42057
42079
|
html += '</span>';
|
|
42058
42080
|
html += '<br>';
|
|
42059
42081
|
html += '</div>';
|
|
@@ -42067,6 +42089,8 @@ class AnnoIg {
|
|
|
42067
42089
|
|
|
42068
42090
|
for(let i = 0, il = igArray.length; i < il; ++i) {
|
|
42069
42091
|
let domainid = igArray[i].domainid;
|
|
42092
|
+
if(!ic.domainid2info) continue;
|
|
42093
|
+
|
|
42070
42094
|
let info = ic.domainid2info[domainid];
|
|
42071
42095
|
if(!info) continue;
|
|
42072
42096
|
|
|
@@ -42095,6 +42119,8 @@ class AnnoIg {
|
|
|
42095
42119
|
html2 += htmlTitle;
|
|
42096
42120
|
html2 += htmlCnt + '<span class="icn3d-seqLine">';
|
|
42097
42121
|
|
|
42122
|
+
if(ic.seqStartLen && ic.seqStartLen[chnid]) html2 += ic.showSeqCls.insertMulGapOverview(chnid, ic.seqStartLen[chnid]);
|
|
42123
|
+
|
|
42098
42124
|
let prevDomainindex, color;
|
|
42099
42125
|
for(let i = 0, il = fromArray.length; i < il; ++i) {
|
|
42100
42126
|
let resi = ic.ParserUtilsCls.getResi(chnid, fromArray[i]);
|
|
@@ -42526,7 +42552,7 @@ class AnnoDomain {
|
|
|
42526
42552
|
|
|
42527
42553
|
if(ic.seqStartLen && ic.seqStartLen[chnid]) html2 += ic.showSeqCls.insertMulGapOverview(chnid, ic.seqStartLen[chnid]);
|
|
42528
42554
|
|
|
42529
|
-
if(me.cfg.blast_rep_id != chnid) { // regular
|
|
42555
|
+
if(me.cfg.blast_rep_id != chnid) { // regular
|
|
42530
42556
|
for(let i = 0, il = posFromArray.length; i < il; ++i) {
|
|
42531
42557
|
// let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i] - ic.baseResi[chnid] - 1) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
|
|
42532
42558
|
let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(posFromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(posFromArray[i] - posToArray[i-1] - 1) / ic.maxAnnoLength);
|
|
@@ -42535,7 +42561,7 @@ class AnnoDomain {
|
|
|
42535
42561
|
html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(posToArray[i] - posFromArray[i] + 1) / ic.maxAnnoLength) + 'px;" class="icn3d-seqTitle icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' + posFromArray + '" to="' + posToArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + chnid + '_3d_domain_' +(index+1).toString() + '" id="' + chnid + '_3d_domain_' + index + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">3D domain ' +(index+1).toString() + '</div>';
|
|
42536
42562
|
}
|
|
42537
42563
|
}
|
|
42538
|
-
else { // with potential gaps
|
|
42564
|
+
else { // with potential gaps
|
|
42539
42565
|
let fromArray2 = [], toArray2 = [];
|
|
42540
42566
|
for(let i = 0, il = fromArray.length; i < il; ++i) {
|
|
42541
42567
|
fromArray2.push(fromArray[i]);
|
|
@@ -48458,6 +48484,7 @@ class ShowSeq {
|
|
|
48458
48484
|
let bCustom = true;
|
|
48459
48485
|
let result = ic.annoIgCls.showRefNum(giSeq, chnid, undefined, bCustom);
|
|
48460
48486
|
html += result.html;
|
|
48487
|
+
// html2 += result.html2;
|
|
48461
48488
|
html3 += result.html3;
|
|
48462
48489
|
}
|
|
48463
48490
|
}
|
|
@@ -61894,13 +61921,15 @@ class SetSeqAlign {
|
|
|
61894
61921
|
ic.alnChains = {};
|
|
61895
61922
|
ic.alnChains[chainid1] = {};
|
|
61896
61923
|
|
|
61897
|
-
let
|
|
61924
|
+
let resid2range_t = {}; // accumulative aligned residues in the template chain
|
|
61898
61925
|
// start and end of MSA
|
|
61899
61926
|
let start_t = 9999, end_t = -1;
|
|
61900
61927
|
|
|
61901
61928
|
let baseResi = ic.chainsSeq[chainid1][0].resi - 1;
|
|
61929
|
+
|
|
61902
61930
|
for(let index = 1, indexl = chainidArray.length; index < indexl; ++index) {
|
|
61903
61931
|
let chainIndex = index - 1;
|
|
61932
|
+
chainidArray[index];
|
|
61904
61933
|
if(!ic.qt_start_end[chainIndex]) continue;
|
|
61905
61934
|
|
|
61906
61935
|
for(let i = 0, il = ic.qt_start_end[chainIndex].length; i < il; ++i) {
|
|
@@ -61911,11 +61940,12 @@ class SetSeqAlign {
|
|
|
61911
61940
|
// end1 = ic.qt_start_end[chainIndex][i].t_end;
|
|
61912
61941
|
// }
|
|
61913
61942
|
// else {
|
|
61943
|
+
//ic.qt_start_end is zero-based
|
|
61914
61944
|
start1 = parseInt(ic.qt_start_end[chainIndex][i].t_start) - 1;
|
|
61915
61945
|
end1 = parseInt(ic.qt_start_end[chainIndex][i].t_end) - 1;
|
|
61916
61946
|
// }
|
|
61917
61947
|
for(let j = start1; j <= end1; ++j) {
|
|
61918
|
-
let resi;
|
|
61948
|
+
let resi, resid;
|
|
61919
61949
|
|
|
61920
61950
|
// if(me.cfg.aligntool == 'tmalign') { // tmalign: just one residue in this for loop
|
|
61921
61951
|
// resi = ic.qt_start_end[chainIndex][i].t_start;
|
|
@@ -61927,53 +61957,56 @@ class SetSeqAlign {
|
|
|
61927
61957
|
resiPos = j - baseResi;
|
|
61928
61958
|
}
|
|
61929
61959
|
else {
|
|
61930
|
-
resiPos = (bRealign) ? j : j - baseResi;
|
|
61960
|
+
// resiPos = (bRealign) ? j : j - baseResi;
|
|
61961
|
+
resiPos = j;
|
|
61931
61962
|
}
|
|
61932
61963
|
resi = ic.ParserUtilsCls.getResi(chainidArray[0], resiPos);
|
|
61964
|
+
resid = chainidArray[0] + '_' + resi;
|
|
61933
61965
|
// }
|
|
61934
61966
|
|
|
61935
|
-
|
|
61967
|
+
resid2range_t[resid] = 1;
|
|
61936
61968
|
if(j < start_t) start_t = j;
|
|
61937
61969
|
if(j > end_t) end_t = j;
|
|
61938
61970
|
}
|
|
61939
61971
|
}
|
|
61940
61972
|
}
|
|
61941
|
-
|
|
61973
|
+
|
|
61942
61974
|
// TM-align should use "start1 = ic.qt_start_end[chainIndex][i].t_start - 1", but the rest are the same as ""bRealign"
|
|
61943
61975
|
if(me.cfg.aligntool == 'tmalign') bRealign = true; // real residue numbers are stored
|
|
61944
61976
|
|
|
61945
|
-
let
|
|
61946
|
-
|
|
61947
|
-
return parseInt(a) - parseInt(b);
|
|
61977
|
+
let resid2rangeArray = Object.keys(resid2range_t);
|
|
61978
|
+
resid2rangeArray.sort(function(a, b) {
|
|
61979
|
+
return parseInt(a.split('_')[2]) - parseInt(b.split('_')[2]);
|
|
61948
61980
|
});
|
|
61949
61981
|
|
|
61950
61982
|
// assign range to each resi
|
|
61951
|
-
let prevResi = -999, start = 0, end = 0,
|
|
61952
|
-
for(let i = 0, il =
|
|
61953
|
-
let
|
|
61983
|
+
let prevResi = -999, start = 0, end = 0, residArray = [], prevEnd = 0;
|
|
61984
|
+
for(let i = 0, il = resid2rangeArray.length; i < il; ++i) {
|
|
61985
|
+
let resid = resid2rangeArray[i];
|
|
61986
|
+
let resi = resid.split('_')[2];
|
|
61954
61987
|
|
|
61955
61988
|
if(i == 0) {
|
|
61956
61989
|
start = resi;
|
|
61957
61990
|
}
|
|
61958
61991
|
else if(i > 0 && ic.resid2ncbi[resi] != ic.resid2ncbi[prevResi] + 1 && ic.resid2ncbi[resi] != ic.resid2ncbi[prevResi]) { // new start
|
|
61959
61992
|
end = prevResi;
|
|
61960
|
-
for(let j = 0, jl =
|
|
61961
|
-
|
|
61993
|
+
for(let j = 0, jl = residArray.length; j < jl; ++j) {
|
|
61994
|
+
resid2range_t[residArray[j]] = {resiStart: start, resiEnd: end, prevResiEnd: prevEnd};
|
|
61962
61995
|
}
|
|
61963
61996
|
|
|
61964
|
-
|
|
61997
|
+
residArray = [];
|
|
61965
61998
|
start = resi;
|
|
61966
61999
|
prevEnd = end;
|
|
61967
62000
|
}
|
|
61968
62001
|
|
|
61969
|
-
|
|
62002
|
+
residArray.push(resid);
|
|
61970
62003
|
|
|
61971
62004
|
prevResi = resi;
|
|
61972
62005
|
}
|
|
61973
62006
|
|
|
61974
62007
|
end = prevResi;
|
|
61975
|
-
for(let j = 0, jl =
|
|
61976
|
-
|
|
62008
|
+
for(let j = 0, jl = residArray.length; j < jl; ++j) {
|
|
62009
|
+
resid2range_t[residArray[j]] = {resiStart: start, resiEnd: end, prevResiEnd: prevEnd};
|
|
61977
62010
|
}
|
|
61978
62011
|
|
|
61979
62012
|
for(let i = 0, il = chainidArray.length; i < il; ++i) {
|
|
@@ -61987,6 +62020,7 @@ class SetSeqAlign {
|
|
|
61987
62020
|
// fill the template ic.alnChainsSeq[chainid1]
|
|
61988
62021
|
for(let j = 0, jl = ic.chainsSeq[chainid1].length; j < jl; ++j) {
|
|
61989
62022
|
let resi = ic.chainsSeq[chainid1][j].resi;
|
|
62023
|
+
let resid = chainid1 + '_' + resi;
|
|
61990
62024
|
|
|
61991
62025
|
let jAdjusted = (me.cfg.aligntool != 'tmalign') ? j : j + baseResi;
|
|
61992
62026
|
|
|
@@ -62000,15 +62034,15 @@ class SetSeqAlign {
|
|
|
62000
62034
|
resObject.mmdbid = chainid1.substr(0, pos);
|
|
62001
62035
|
resObject.chain = chainid1.substr(pos+1);
|
|
62002
62036
|
resObject.resi = resi;
|
|
62003
|
-
resObject.resn = (
|
|
62004
|
-
resObject.aligned = (
|
|
62005
|
-
resObject.color = (
|
|
62006
|
-
resObject.color2 = (
|
|
62007
|
-
resObject.class = (
|
|
62037
|
+
resObject.resn = (resid2range_t[resid]) ? ic.chainsSeq[chainid1][j].name.toUpperCase() : ic.chainsSeq[chainid1][j].name.toLowerCase();
|
|
62038
|
+
resObject.aligned = (resid2range_t[resid]) ? true : false;
|
|
62039
|
+
resObject.color = (resid2range_t[resid]) ? '#FF0000' : me.htmlCls.GREYC; // color by identity
|
|
62040
|
+
resObject.color2 = (resid2range_t[resid]) ? '#FF0000' : me.htmlCls.GREYC; // color by conservation
|
|
62041
|
+
resObject.class = (resid2range_t[resid]) ? 'icn3d-align' : 'icn3d-nalign';
|
|
62008
62042
|
|
|
62009
62043
|
ic.alnChainsSeq[chainid1].push(resObject);
|
|
62010
62044
|
|
|
62011
|
-
if(
|
|
62045
|
+
if(resid2range_t[resid]) {
|
|
62012
62046
|
$.extend(ic.alnChains[chainid1], ic.residues[chainid1 + '_' + resObject.resi] );
|
|
62013
62047
|
hAtoms = me.hashUtilsCls.unionHash(hAtoms, ic.residues[chainid1 + '_' + resObject.resi]);
|
|
62014
62048
|
}
|
|
@@ -62020,7 +62054,7 @@ class SetSeqAlign {
|
|
|
62020
62054
|
for(let arrayIndex = 0, arrayIndexl = index_alignLen.length; arrayIndex < arrayIndexl; ++arrayIndex) {
|
|
62021
62055
|
let index = index_alignLen[arrayIndex].index;
|
|
62022
62056
|
alignedChainIndice.push(index);
|
|
62023
|
-
let hAtomsTmp = this.mergeTwoSeqForAll(chainidArray, index, alignedChainIndice,
|
|
62057
|
+
let hAtomsTmp = this.mergeTwoSeqForAll(chainidArray, index, alignedChainIndice, resid2range_t, start_t, end_t, bRealign);
|
|
62024
62058
|
|
|
62025
62059
|
hAtoms = me.hashUtilsCls.unionHash(hAtoms, hAtomsTmp);
|
|
62026
62060
|
}
|
|
@@ -62193,7 +62227,7 @@ class SetSeqAlign {
|
|
|
62193
62227
|
return {"pos1": result1.pos, "pos2": result2.pos};
|
|
62194
62228
|
}
|
|
62195
62229
|
|
|
62196
|
-
mergeTwoSeqForAll(chainidArray, index, alignedChainIndice,
|
|
62230
|
+
mergeTwoSeqForAll(chainidArray, index, alignedChainIndice, resid2range_t, start_t, end_t, bRealign) { let ic = this.icn3d, me = ic.icn3dui;
|
|
62197
62231
|
let hAtoms = {};
|
|
62198
62232
|
|
|
62199
62233
|
let chainid = chainidArray[index];
|
|
@@ -62282,7 +62316,7 @@ class SetSeqAlign {
|
|
|
62282
62316
|
start1Pos = start1;
|
|
62283
62317
|
end1Pos = end1;
|
|
62284
62318
|
}
|
|
62285
|
-
//let range =
|
|
62319
|
+
//let range = resid2range_t[chainid1 + '_' + resiStart1];
|
|
62286
62320
|
|
|
62287
62321
|
// if the mapping does not start from start_t, add gaps to the query seq
|
|
62288
62322
|
if(i == 0) {
|
|
@@ -67750,70 +67784,181 @@ class SelectCollections {
|
|
|
67750
67784
|
return html;
|
|
67751
67785
|
}
|
|
67752
67786
|
|
|
67787
|
+
reset() {
|
|
67788
|
+
let ic = this.icn3d;
|
|
67789
|
+
|
|
67790
|
+
ic.atoms = {};
|
|
67791
|
+
|
|
67792
|
+
ic.proteins = {};
|
|
67793
|
+
ic.nucleotides = {};
|
|
67794
|
+
ic.chemicals = {};
|
|
67795
|
+
ic.ions = {};
|
|
67796
|
+
ic.water = {};
|
|
67797
|
+
|
|
67798
|
+
ic.structures = {};
|
|
67799
|
+
ic.chains = {};
|
|
67800
|
+
ic.chainsSeq = {};
|
|
67801
|
+
ic.residues = {};
|
|
67802
|
+
|
|
67803
|
+
ic.defNames2Atoms = {};
|
|
67804
|
+
ic.defNames2Residues = {};
|
|
67805
|
+
|
|
67806
|
+
ic.ssbondpnts = {};
|
|
67807
|
+
|
|
67808
|
+
ic.bShowHighlight = false;
|
|
67809
|
+
ic.bResetSets = true;
|
|
67810
|
+
}
|
|
67811
|
+
|
|
67812
|
+
dictionaryDifference(dict1, dict2) {
|
|
67813
|
+
const difference = {};
|
|
67814
|
+
|
|
67815
|
+
for (let key in dict2) {
|
|
67816
|
+
if (!(key in dict1)) {
|
|
67817
|
+
difference[key] = dict2[key];
|
|
67818
|
+
}
|
|
67819
|
+
}
|
|
67820
|
+
|
|
67821
|
+
return difference;
|
|
67822
|
+
}
|
|
67823
|
+
|
|
67753
67824
|
clickStructure() {
|
|
67754
67825
|
let ic = this.icn3d,
|
|
67755
67826
|
me = ic.icn3dui;
|
|
67756
67827
|
let thisClass = this;
|
|
67757
67828
|
|
|
67829
|
+
if (ic.allData == undefined) {
|
|
67830
|
+
ic.allData = {};
|
|
67831
|
+
ic.allData['all'] = {
|
|
67832
|
+
'atoms': {},
|
|
67833
|
+
'proteins': {},
|
|
67834
|
+
'nucleotides': {},
|
|
67835
|
+
'chemicals': {},
|
|
67836
|
+
'ions': {},
|
|
67837
|
+
'water': {},
|
|
67838
|
+
'structures': {}, // getSSExpandedAtoms
|
|
67839
|
+
'ssbondpnts': {},
|
|
67840
|
+
'residues': {}, // getSSExpandedAtoms
|
|
67841
|
+
'chains': {},
|
|
67842
|
+
'chainsSeq': {}, //Sequences and Annotation
|
|
67843
|
+
'defNames2Atoms': {},
|
|
67844
|
+
'defNames2Residues': {}
|
|
67845
|
+
};
|
|
67846
|
+
ic.allData['prev'] = {};
|
|
67847
|
+
}
|
|
67848
|
+
|
|
67758
67849
|
//me.myEventCls.onIds("#" + ic.pre + "atomsCustom", "change", function(e) { let ic = thisClass.icn3d;
|
|
67759
67850
|
$("#" + ic.pre + "collections_menu").change(async function (e) {
|
|
67760
67851
|
let ic = thisClass.icn3d;
|
|
67761
|
-
|
|
67852
|
+
|
|
67762
67853
|
let nameArray = $(this).val();
|
|
67763
67854
|
let nameStructure = $(this).find("option:selected").text();
|
|
67764
67855
|
|
|
67765
67856
|
ic.nameArray = nameArray;
|
|
67766
67857
|
if (nameArray !== null) {
|
|
67767
|
-
|
|
67858
|
+
// let chainIdHash = {};
|
|
67859
|
+
|
|
67768
67860
|
let bNoDuplicate = true;
|
|
67769
|
-
|
|
67861
|
+
thisClass.reset();
|
|
67862
|
+
for (const name of nameArray) {
|
|
67863
|
+
if (!(name in ic.allData)) {
|
|
67864
|
+
ic.allData['prev'] = JSON.parse(JSON.stringify(ic.allData['all']));//me.hashUtilsCls.cloneHash(ic.allData['all']);
|
|
67770
67865
|
|
|
67771
|
-
|
|
67772
|
-
|
|
67773
|
-
|
|
67774
|
-
|
|
67775
|
-
|
|
67776
|
-
|
|
67777
|
-
|
|
67778
|
-
|
|
67779
|
-
|
|
67780
|
-
|
|
67781
|
-
|
|
67782
|
-
|
|
67783
|
-
|
|
67784
|
-
|
|
67785
|
-
|
|
67786
|
-
|
|
67787
|
-
|
|
67788
|
-
|
|
67789
|
-
|
|
67866
|
+
ic.atoms = ic.allData['all']['atoms'];
|
|
67867
|
+
|
|
67868
|
+
ic.proteins = ic.allData['all']['proteins'];
|
|
67869
|
+
ic.nucleotides = ic.allData['all']['nucleotides'];
|
|
67870
|
+
ic.chemicals = ic.allData['all']['chemicals'];
|
|
67871
|
+
ic.ions = ic.allData['all']['ions'];
|
|
67872
|
+
ic.water = ic.allData['all']['water'];
|
|
67873
|
+
|
|
67874
|
+
ic.structures = ic.allData['all']['structures'];
|
|
67875
|
+
ic.ssbondpnts = ic.allData['all']['ssbondpnts'];
|
|
67876
|
+
ic.residues = ic.allData['all']['residues'];
|
|
67877
|
+
ic.chains = ic.allData['all']['chains'];
|
|
67878
|
+
ic.chainsSeq = ic.allData['all']['chainsSeq'];
|
|
67879
|
+
ic.defalls2Atoms = ic.allData['all']['defalls2Atoms'];
|
|
67880
|
+
ic.defalls2Residues = ic.allData['all']['defalls2Residues'];
|
|
67881
|
+
await ic.chainalignParserCls.downloadMmdbAf(name, undefined, undefined, bNoDuplicate).then(() => {
|
|
67882
|
+
ic.allData['all'] = {
|
|
67883
|
+
'atoms': ic.atoms,
|
|
67884
|
+
'proteins': ic.proteins,
|
|
67885
|
+
'nucleotides': ic.nucleotides,
|
|
67886
|
+
'chemicals': ic.chemicals,
|
|
67887
|
+
'ions': ic.ions,
|
|
67888
|
+
'water': ic.water,
|
|
67889
|
+
'structures': ic.structures, // getSSExpandedAtoms
|
|
67890
|
+
'ssbondpnts': ic.ssbondpnts,
|
|
67891
|
+
'residues': ic.residues, // getSSExpandedAtoms
|
|
67892
|
+
'chains': ic.chains,
|
|
67893
|
+
'chainsSeq': ic.chainsSeq, //Sequences and Annotation
|
|
67894
|
+
'defNames2Atoms': ic.defNames2Atoms,
|
|
67895
|
+
'defNames2Residues': ic.defNames2Residues
|
|
67896
|
+
};
|
|
67897
|
+
|
|
67898
|
+
ic.allData[name] = {
|
|
67899
|
+
'atoms': thisClass.dictionaryDifference(ic.allData['prev']['atoms'], ic.atoms),
|
|
67900
|
+
'proteins': thisClass.dictionaryDifference(ic.allData['prev']['proteins'], ic.proteins),
|
|
67901
|
+
'nucleotides': thisClass.dictionaryDifference(ic.allData['prev']['nucleotides'], ic.nucleotides),
|
|
67902
|
+
'chemicals': thisClass.dictionaryDifference(ic.allData['prev']['chemicals'], ic.chemicals),
|
|
67903
|
+
'ions': thisClass.dictionaryDifference(ic.allData['prev']['ions'], ic.ions),
|
|
67904
|
+
'water': thisClass.dictionaryDifference(ic.allData['prev']['water'], ic.water),
|
|
67905
|
+
'structures': thisClass.dictionaryDifference(ic.allData['prev']['structures'], ic.structures), // getSSExpandedAtoms
|
|
67906
|
+
'ssbondpnts': thisClass.dictionaryDifference(ic.allData['prev']['ssbondpnts'], ic.ssbondpnts),
|
|
67907
|
+
'residues': thisClass.dictionaryDifference(ic.allData['prev']['residues'], ic.residues), // getSSExpandedAtoms
|
|
67908
|
+
'chains': thisClass.dictionaryDifference(ic.allData['prev']['chains'], ic.chains),
|
|
67909
|
+
'chainsSeq': thisClass.dictionaryDifference(ic.allData['prev']['chainsSeq'], ic.chainsSeq), //Sequences and Annotation
|
|
67910
|
+
'defNames2Atoms': thisClass.dictionaryDifference(ic.allData['prev']['defNames2Atoms'], ic.defNames2Atoms),
|
|
67911
|
+
'defNames2Residues': thisClass.dictionaryDifference(ic.allData['prev']['defNames2Residues'], ic.defNames2Residues)
|
|
67912
|
+
};
|
|
67913
|
+
|
|
67914
|
+
// ic.atoms = Object.assign(ic.atoms, ic.atomsTemp);
|
|
67915
|
+
thisClass.reset();
|
|
67916
|
+
});
|
|
67790
67917
|
}
|
|
67791
67918
|
}
|
|
67919
|
+
for (const name of nameArray) {
|
|
67920
|
+
ic.atoms = Object.assign(ic.atoms, ic.allData[name]['atoms']);
|
|
67921
|
+
|
|
67922
|
+
ic.proteins = Object.assign(ic.proteins, ic.allData[name]['proteins']);
|
|
67923
|
+
ic.nucleotides = Object.assign(ic.nucleotides, ic.allData[name]['nucleotides']);
|
|
67924
|
+
ic.chemicals = Object.assign(ic.chemicals, ic.allData[name]['chemicals']);
|
|
67925
|
+
ic.ions = Object.assign(ic.ions, ic.allData[name]['ions']);
|
|
67926
|
+
ic.water = Object.assign(ic.water, ic.allData[name]['water']);
|
|
67927
|
+
|
|
67928
|
+
ic.structures = Object.assign(ic.structures, ic.allData[name]['structures']);
|
|
67929
|
+
ic.ssbondpnts = Object.assign(ic.ssbondpnts, ic.allData[name]['ssbondpnts']);
|
|
67930
|
+
ic.residues = Object.assign(ic.residues, ic.allData[name]['residues']);
|
|
67931
|
+
ic.chains = Object.assign(ic.chains, ic.allData[name]['chains']);
|
|
67932
|
+
ic.chainsSeq = Object.assign(ic.chainsSeq, ic.allData[name]['chainsSeq']);
|
|
67933
|
+
ic.defNames2Atoms = Object.assign(ic.defNames2Atoms, ic.allData[name]['defNames2Atoms']);
|
|
67934
|
+
ic.defNames2Residues = Object.assign(ic.defNames2Residues, ic.allData[name]['defNames2Residues']);
|
|
67935
|
+
ic.dAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
|
|
67936
|
+
ic.hAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
|
|
67937
|
+
}
|
|
67938
|
+
|
|
67939
|
+
ic.opts["color"] = "structure";
|
|
67940
|
+
ic.setStyleCls.setAtomStyleByOptions();
|
|
67941
|
+
ic.setColorCls.setColorByOptions(ic.opts, ic.atoms);
|
|
67792
67942
|
|
|
67793
67943
|
ic.transformCls.zoominSelection();
|
|
67794
67944
|
ic.definedSetsCls.showSets();
|
|
67795
67945
|
|
|
67796
|
-
await ic.drawCls.draw();
|
|
67797
|
-
ic.saveFileCls.showTitle();
|
|
67798
|
-
|
|
67799
67946
|
ic.bResetAnno = true;
|
|
67800
67947
|
if(ic.bAnnoShown) {
|
|
67801
|
-
// show annotations just fo the displayed atoms
|
|
67802
|
-
// await ic.showAnnoCls.showAnnotations(ic.dAtoms);
|
|
67803
67948
|
await ic.showAnnoCls.showAnnotations();
|
|
67804
67949
|
|
|
67805
67950
|
ic.hlUpdateCls.updateHlAll(nameArray);
|
|
67806
67951
|
// show selected chains in annotation window
|
|
67807
67952
|
ic.annotationCls.showAnnoSelectedChains();
|
|
67808
67953
|
}
|
|
67809
|
-
|
|
67954
|
+
|
|
67955
|
+
await ic.drawCls.draw();
|
|
67956
|
+
ic.saveFileCls.showTitle();
|
|
67957
|
+
|
|
67810
67958
|
me.htmlCls.clickMenuCls.setLogCmd(
|
|
67811
67959
|
"select structure " + "[" + nameStructure + "]",
|
|
67812
67960
|
true
|
|
67813
67961
|
);
|
|
67814
|
-
ic.bSelectResidue = false;
|
|
67815
|
-
|
|
67816
|
-
ic.bShowHighlight = true; // reset
|
|
67817
67962
|
}
|
|
67818
67963
|
});
|
|
67819
67964
|
|
|
@@ -68368,7 +68513,10 @@ class LoadScript {
|
|
|
68368
68513
|
let idArray = id.split(',');
|
|
68369
68514
|
let idNew = '';
|
|
68370
68515
|
for(let i = 0, il = idArray.length; i < il; ++i) {
|
|
68371
|
-
if(!(ic.structures && ic.structures.hasOwnProperty(idArray[i])
|
|
68516
|
+
if(!(ic.structures && (ic.structures.hasOwnProperty(idArray[i])
|
|
68517
|
+
|| ic.structures.hasOwnProperty(idArray[i].toLowerCase())
|
|
68518
|
+
|| ic.structures.hasOwnProperty(idArray[i].toUpperCase())
|
|
68519
|
+
) )) {
|
|
68372
68520
|
if(idNew) idNew += ',';
|
|
68373
68521
|
idNew += idArray[i];
|
|
68374
68522
|
}
|
|
@@ -72393,7 +72541,12 @@ class Dssp {
|
|
|
72393
72541
|
}
|
|
72394
72542
|
|
|
72395
72543
|
rmStrandFromRefnumlabel(refnumLabel) { let ic = this.icn3d; ic.icn3dui;
|
|
72396
|
-
|
|
72544
|
+
if(isNaN(refnumLabel.substr(0,1))) {
|
|
72545
|
+
return (!refnumLabel) ? refnumLabel : refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
|
|
72546
|
+
}
|
|
72547
|
+
else { // custom ref numbers
|
|
72548
|
+
return refnumLabel;
|
|
72549
|
+
}
|
|
72397
72550
|
}
|
|
72398
72551
|
|
|
72399
72552
|
exportRefnum(type, bNoArraySymbol) { let ic = this.icn3d, me = ic.icn3dui;
|
|
@@ -81238,7 +81391,7 @@ class iCn3DUI {
|
|
|
81238
81391
|
//even when multiple iCn3D viewers are shown together.
|
|
81239
81392
|
this.pre = this.cfg.divid + "_";
|
|
81240
81393
|
|
|
81241
|
-
this.REVISION = '3.31.
|
|
81394
|
+
this.REVISION = '3.31.3';
|
|
81242
81395
|
|
|
81243
81396
|
// In nodejs, iCn3D defines "window = {navigator: {}}"
|
|
81244
81397
|
this.bNode = (Object.keys(window).length < 2) ? true : false;
|