icn3d 3.28.10 → 3.28.11
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 +179 -119
- package/icn3d.min.js +4 -4
- package/icn3d.module.js +179 -119
- package/package.json +1 -1
package/icn3d.module.js
CHANGED
|
@@ -7370,7 +7370,7 @@ class ClickMenu {
|
|
|
7370
7370
|
ic.resid2specCls.selectProperty('polar');
|
|
7371
7371
|
});
|
|
7372
7372
|
me.myEventCls.onIds("#" + me.pre + "mn2_propBfactor", "click", function(e) { me.icn3d; //e.preventDefault();
|
|
7373
|
-
me.htmlCls.dialogCls.openDlg('dl_propbybfactor', 'Select residue based on B-factor');
|
|
7373
|
+
me.htmlCls.dialogCls.openDlg('dl_propbybfactor', 'Select residue based on B-factor/pLDDT');
|
|
7374
7374
|
});
|
|
7375
7375
|
me.myEventCls.onIds("#" + me.pre + "mn2_propSolAcc", "click", function(e) { me.icn3d; //e.preventDefault();
|
|
7376
7376
|
me.htmlCls.dialogCls.openDlg('dl_propbypercentout', 'Select residue based on the percentage of solvent accessilbe surface area');
|
|
@@ -8497,7 +8497,8 @@ class ClickMenu {
|
|
|
8497
8497
|
// alert("The url is more than 4000 characters and may not work.");
|
|
8498
8498
|
//}
|
|
8499
8499
|
//else {
|
|
8500
|
-
url = url.replace("full.html", "full2.html");
|
|
8500
|
+
url = url.replace("icn3d/full.html?", "icn3d/full2.html?");
|
|
8501
|
+
url = url.replace("icn3d/?", "icn3d/full2.html?");
|
|
8501
8502
|
url += '&closepopup=1';
|
|
8502
8503
|
let urlTarget = (ic.structures && Object.keys(ic.structures).length > 0) ? '_blank' : '_self';
|
|
8503
8504
|
window.open(url, urlTarget);
|
|
@@ -8826,6 +8827,14 @@ class ClickMenu {
|
|
|
8826
8827
|
let pos = str.indexOf('|||');
|
|
8827
8828
|
if(pos !== -1) str = str.substr(0, pos);
|
|
8828
8829
|
let transformation = {};
|
|
8830
|
+
|
|
8831
|
+
if(!ic.quaternion) {
|
|
8832
|
+
// reset parameters
|
|
8833
|
+
ic._zoomFactor = 1.0;
|
|
8834
|
+
ic.mouseChange = new THREE.Vector2(0,0);
|
|
8835
|
+
ic.quaternion = new THREE.Quaternion(0,0,0,1);
|
|
8836
|
+
}
|
|
8837
|
+
|
|
8829
8838
|
transformation.factor = ic._zoomFactor;
|
|
8830
8839
|
transformation.mouseChange = ic.mouseChange;
|
|
8831
8840
|
transformation.quaternion = {};
|
|
@@ -9541,7 +9550,9 @@ class SetMenu {
|
|
|
9541
9550
|
|
|
9542
9551
|
html += this.getLink('mn1_exportPdbRes', 'PDB', 1, 2);
|
|
9543
9552
|
html += this.getLink('profixpdb', 'PDB with Missing Atoms', undefined, 2);
|
|
9544
|
-
|
|
9553
|
+
|
|
9554
|
+
// the quality is not good to add hydrogen
|
|
9555
|
+
//html += this.getLink('profixpdbh', 'PDB with Hydrogens', undefined, 2);
|
|
9545
9556
|
|
|
9546
9557
|
if(me.cfg.cid === undefined) {
|
|
9547
9558
|
html += this.getLink('mn1_exportSecondary', 'Secondary Structure', undefined, 2);
|
|
@@ -10392,7 +10403,7 @@ class SetMenu {
|
|
|
10392
10403
|
|
|
10393
10404
|
//if(me.cfg.afid) html += this.getRadio('mn4_clr', 'mn4_clrConfidence', 'AF Confidence');
|
|
10394
10405
|
//if(!me.cfg.mmtfid && !me.cfg.pdbid && !me.cfg.opmid && !me.cfg.mmdbid && !me.cfg.gi && !me.cfg.uniprotid && !me.cfg.blast_rep_id && !me.cfg.cid && !me.cfg.mmcifid && !me.cfg.align && !me.cfg.chainalign) {
|
|
10395
|
-
html += this.getRadio('mn4_clr', 'mn4_clrConfidence', '
|
|
10406
|
+
html += this.getRadio('mn4_clr', 'mn4_clrConfidence', 'pLDDT', undefined, 1, 1);
|
|
10396
10407
|
//}
|
|
10397
10408
|
|
|
10398
10409
|
//!!!
|
|
@@ -12713,10 +12724,10 @@ class SetDialog {
|
|
|
12713
12724
|
html += "</div>";
|
|
12714
12725
|
|
|
12715
12726
|
html += me.htmlCls.divStr + "dl_propbybfactor' class='" + dialogClass + "'>";
|
|
12716
|
-
html += this.addNotebookTitle('dl_propbybfactor', 'Select residues basen on B-factor');
|
|
12717
|
-
html += "<div style='width:400px'>Select residue based on B-factor. The values are in the range of 0-100.</div><br>";
|
|
12718
|
-
html += "<b>Min B-factor</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "minbfactor' value='0' size='10'>% <br>";
|
|
12719
|
-
html += "<b>Max B-factor</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "maxbfactor' value='100' size='10'>% <br>";
|
|
12727
|
+
html += this.addNotebookTitle('dl_propbybfactor', 'Select residues basen on B-factor/pLDDT');
|
|
12728
|
+
html += "<div style='width:400px'>Select residue based on B-factor/pLDDT. The values are in the range of 0-100.</div><br>";
|
|
12729
|
+
html += "<b>Min B-factor/pLDDT</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "minbfactor' value='0' size='10'>% <br>";
|
|
12730
|
+
html += "<b>Max B-factor/pLDDT</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "maxbfactor' value='100' size='10'>% <br>";
|
|
12720
12731
|
html += "<button style='white-space:nowrap;' id='" + me.pre + "applypropbybfactor'>Apply</button><br/><br/>";
|
|
12721
12732
|
html += "</div>";
|
|
12722
12733
|
|
|
@@ -16357,10 +16368,11 @@ class SetHtml {
|
|
|
16357
16368
|
|
|
16358
16369
|
let pdbstr = '';
|
|
16359
16370
|
|
|
16360
|
-
|
|
16371
|
+
let bMergeIntoOne = true;
|
|
16372
|
+
pdbstr += ic.saveFileCls.getAtomPDB(atomHash, undefined, undefined, undefined, undefined, undefined, bMergeIntoOne);
|
|
16361
16373
|
pdbstr += ic.saveFileCls.getAtomPDB(ionHash, true, undefined, true);
|
|
16362
16374
|
|
|
16363
|
-
let url =
|
|
16375
|
+
let url = me.htmlCls.baseUrl + "delphi/delphi.cgi";
|
|
16364
16376
|
|
|
16365
16377
|
let pdbid =(me.cfg.cid) ? me.cfg.cid : Object.keys(ic.structures).toString();
|
|
16366
16378
|
|
|
@@ -33401,7 +33413,7 @@ class Alternate {
|
|
|
33401
33413
|
// change the display atom when alternating
|
|
33402
33414
|
//Show structures one by one.
|
|
33403
33415
|
alternateStructures() { let ic = this.icn3d, me = ic.icn3dui;
|
|
33404
|
-
ic.
|
|
33416
|
+
ic.bAlternate = true;
|
|
33405
33417
|
|
|
33406
33418
|
//ic.transformCls.zoominSelection();
|
|
33407
33419
|
|
|
@@ -33498,14 +33510,14 @@ class Alternate {
|
|
|
33498
33510
|
ic.applyMapCls.removeEmmaps();
|
|
33499
33511
|
ic.applyMapCls.applyEmmapOptions();
|
|
33500
33512
|
|
|
33501
|
-
//
|
|
33513
|
+
// allow the alternation of DelPhi map
|
|
33502
33514
|
ic.applyMapCls.removePhimaps();
|
|
33503
|
-
|
|
33515
|
+
ic.applyMapCls.applyPhimapOptions();
|
|
33504
33516
|
// should recalculate the potential
|
|
33505
33517
|
//ic.loadDelphiFileBase('delphi');
|
|
33506
33518
|
|
|
33507
|
-
|
|
33508
|
-
|
|
33519
|
+
ic.applyMapCls.removeSurfaces();
|
|
33520
|
+
ic.applyMapCls.applyphisurfaceOptions();
|
|
33509
33521
|
// should recalculate the potential
|
|
33510
33522
|
//ic.loadDelphiFileBase('delphi2');
|
|
33511
33523
|
|
|
@@ -36635,7 +36647,7 @@ class SetOption {
|
|
|
36635
36647
|
|
|
36636
36648
|
let colorLabel = colorType.substr(0, 1).toUpperCase() + colorType.substr(1);
|
|
36637
36649
|
if(colorType == 'confidence') {
|
|
36638
|
-
colorLabel = '
|
|
36650
|
+
colorLabel = 'pLDDT';
|
|
36639
36651
|
}
|
|
36640
36652
|
else if(colorType == 'normalized hydrophobic') {
|
|
36641
36653
|
colorLabel = 'Normalized Hydrophobicity';
|
|
@@ -36930,7 +36942,7 @@ class SetOption {
|
|
|
36930
36942
|
"C' Strand": "6495ED",
|
|
36931
36943
|
"C'' Strand": "006400",
|
|
36932
36944
|
"D Strand": "00FF00",
|
|
36933
|
-
"E Strand": "FFFF00", //"F0E68C",
|
|
36945
|
+
"E Strand": "F7DC6F", //"FFFF00", //"F0E68C",
|
|
36934
36946
|
"F Strand": "FFA500",
|
|
36935
36947
|
"G Strand": "FF0000",
|
|
36936
36948
|
//"G+ Strand": "8B0000",
|
|
@@ -36958,14 +36970,14 @@ class SetOption {
|
|
|
36958
36970
|
"<b>Protodomain 1</b>": "",
|
|
36959
36971
|
"A Strand": "0000FF",
|
|
36960
36972
|
"B Strand": "006400",
|
|
36961
|
-
"C Strand": "FFFF00", //"F0E68C",
|
|
36973
|
+
"C Strand": "F7DC6F", //"FFFF00", //"F0E68C",
|
|
36962
36974
|
"C' Strand": "FFA500",
|
|
36963
36975
|
"<br><b>Linker</b>": "",
|
|
36964
36976
|
"C'' Strand": "FF0000",
|
|
36965
36977
|
"<br><b>Protodomain 2</b>": "",
|
|
36966
36978
|
"D Strand": "0000FF",
|
|
36967
36979
|
"E Strand": "006400",
|
|
36968
|
-
"F Strand": "FFFF00", //"F0E68C",
|
|
36980
|
+
"F Strand": "F7DC6F", //"FFFF00", //"F0E68C",
|
|
36969
36981
|
"G Strand": "FFA500",
|
|
36970
36982
|
"": "",
|
|
36971
36983
|
"Loop": "CCCCCC"
|
|
@@ -43125,7 +43137,7 @@ class ShowAnno {
|
|
|
43125
43137
|
let proteinName = fullProteinName;
|
|
43126
43138
|
//if(proteinName.length > 40) proteinName = proteinName.substr(0, 40) + "...";
|
|
43127
43139
|
let categoryStr =(index == 0) ? "<span class='icn3d-annoLargeTitle'><b>Proteins</b>: </span><br><br>" : "";
|
|
43128
|
-
let geneLink =(ic.chainsGene[chnid] && ic.chainsGene[chnid].geneId) ? "(Gene: <a href='https://www.ncbi.nlm.nih.gov/gene/" + ic.chainsGene[chnid].geneId + "?report=gene_table' target='_blank' title='" + ic.chainsGene[chnid].geneDesc + "'>" + ic.chainsGene[chnid].geneSymbol + "</a>)" : '';
|
|
43140
|
+
let geneLink =(ic.chainsGene[chnid] && ic.chainsGene[chnid].geneId && ic.chainsGene[chnid].geneDesc) ? "(Gene: <a href='https://www.ncbi.nlm.nih.gov/gene/" + ic.chainsGene[chnid].geneId + "?report=gene_table' target='_blank' title='" + ic.chainsGene[chnid].geneDesc + "'>" + ic.chainsGene[chnid].geneSymbol + "</a>)" : '';
|
|
43129
43141
|
let structure = chnid.substr(0, chnid.indexOf('_'));
|
|
43130
43142
|
let chainLink = (structure.length > 5) ? '<a href="https://alphafold.ebi.ac.uk/entry/' + structure + '" target="_blank">' + chnid + '</a>' : chnid;
|
|
43131
43143
|
let chainHtml = "<div id='" + ic.pre + "anno_" + chnid + "' class='icn3d-annotation'>" + categoryStr
|
|
@@ -43802,7 +43814,7 @@ class ShowSeq {
|
|
|
43802
43814
|
html += '<span>-</span>'; //'<span>-</span>';
|
|
43803
43815
|
}
|
|
43804
43816
|
}
|
|
43805
|
-
|
|
43817
|
+
|
|
43806
43818
|
if(ic.seqStartLen && ic.seqStartLen[chnid]) html += this.insertMulGap(ic.seqEndLen[chnid], '-');
|
|
43807
43819
|
|
|
43808
43820
|
html += '<span class="icn3d-residueNum"></span>';
|
|
@@ -44021,7 +44033,7 @@ class ShowSeq {
|
|
|
44021
44033
|
html += '</div>';
|
|
44022
44034
|
html2 += '</div>';
|
|
44023
44035
|
html3 += '</div>';
|
|
44024
|
-
|
|
44036
|
+
|
|
44025
44037
|
//if(Object.keys(ic.chains[chnid]).length > 10) {
|
|
44026
44038
|
if(ic.giSeq[chnid].length > 10) {
|
|
44027
44039
|
let atom = ic.firstAtomObjCls.getFirstCalphaAtomObj(ic.chains[chnid]);
|
|
@@ -44070,8 +44082,9 @@ class ShowSeq {
|
|
|
44070
44082
|
html3 += '</div></div>';
|
|
44071
44083
|
}
|
|
44072
44084
|
|
|
44073
|
-
if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
|
|
44085
|
+
if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
|
|
44074
44086
|
let result = this.showAllRefNum(giSeq, chnid);
|
|
44087
|
+
|
|
44075
44088
|
html += result.html;
|
|
44076
44089
|
html3 += result.html3;
|
|
44077
44090
|
}
|
|
@@ -44083,7 +44096,7 @@ class ShowSeq {
|
|
|
44083
44096
|
html3 += result.html3;
|
|
44084
44097
|
}
|
|
44085
44098
|
}
|
|
44086
|
-
|
|
44099
|
+
|
|
44087
44100
|
// highlight reference numbers
|
|
44088
44101
|
if(ic.bShowRefnum) {
|
|
44089
44102
|
// comment out so that this process didn't change the selection
|
|
@@ -44092,7 +44105,7 @@ class ShowSeq {
|
|
|
44092
44105
|
// commented out because it produced too many commands
|
|
44093
44106
|
// let name = 'refnum_anchors';
|
|
44094
44107
|
// ic.selectionCls.saveSelection(name, name);
|
|
44095
|
-
|
|
44108
|
+
|
|
44096
44109
|
ic.hlUpdateCls.updateHlAll();
|
|
44097
44110
|
}
|
|
44098
44111
|
|
|
@@ -44123,7 +44136,7 @@ class ShowSeq {
|
|
|
44123
44136
|
//ic.setColorCls.setColorByOptions(ic.opts, ic.atoms);
|
|
44124
44137
|
ic.setColorCls.setColorByOptions(ic.opts, ic.dAtoms);
|
|
44125
44138
|
|
|
44126
|
-
ic.selectionCls.selectAll_base();
|
|
44139
|
+
//ic.selectionCls.selectAll_base();
|
|
44127
44140
|
ic.hlUpdateCls.updateHlAll();
|
|
44128
44141
|
//ic.drawCls.draw();
|
|
44129
44142
|
ic.drawCls.draw();
|
|
@@ -44243,8 +44256,10 @@ class ShowSeq {
|
|
|
44243
44256
|
|
|
44244
44257
|
postfix = strandPostfix + '_' + index;
|
|
44245
44258
|
|
|
44259
|
+
let firstTwo = parseInt(refnum.toString().substr(0, 2)); // A- strand
|
|
44260
|
+
|
|
44246
44261
|
if(currStrand && currStrand != ' ') {
|
|
44247
|
-
if(refnum3c.substr(0,1) != '9') {
|
|
44262
|
+
if(refnum3c.substr(0,1) != '9' || firstTwo == 10) {
|
|
44248
44263
|
let lastTwo = parseInt(refnum.toString().substr(refnum.toString().length - 2, 2));
|
|
44249
44264
|
|
|
44250
44265
|
if(currStrand != prevStrand) { // reset currCnt
|
|
@@ -44271,6 +44286,10 @@ class ShowSeq {
|
|
|
44271
44286
|
resCntAtAnchor = 0;
|
|
44272
44287
|
}
|
|
44273
44288
|
|
|
44289
|
+
if(firstTwo == 10) {
|
|
44290
|
+
strandArray[strandCnt].anchorRefnum = 0;
|
|
44291
|
+
}
|
|
44292
|
+
|
|
44274
44293
|
strandArray[strandCnt].strandPostfix = strandPostfix; // a in A1250a
|
|
44275
44294
|
strandArray[strandCnt].strand = currStrand; // A in A1250a
|
|
44276
44295
|
|
|
@@ -44293,6 +44312,10 @@ class ShowSeq {
|
|
|
44293
44312
|
resCntAtAnchor = 0;
|
|
44294
44313
|
}
|
|
44295
44314
|
|
|
44315
|
+
if(firstTwo == 10) {
|
|
44316
|
+
strandArray[strandCnt - 1].anchorRefnum = 0;
|
|
44317
|
+
}
|
|
44318
|
+
|
|
44296
44319
|
strandArray[strandCnt - 1].endResi = currResi;
|
|
44297
44320
|
strandArray[strandCnt - 1].endRefnum = refnum; // 1250a
|
|
44298
44321
|
strandArray[strandCnt - 1].resCntAtAnchor = resCntAtAnchor;
|
|
@@ -44627,13 +44650,13 @@ class ShowSeq {
|
|
|
44627
44650
|
|
|
44628
44651
|
let html = '';
|
|
44629
44652
|
|
|
44630
|
-
if(refnumLabel && lastTwo == 50 && !bLoop) {
|
|
44653
|
+
if(refnumLabel && (lastTwo == 50 || refnum == 1094) && !bLoop) {
|
|
44631
44654
|
// highlight the anchor residues
|
|
44632
44655
|
ic.hAtomsRefnum = me.hashUtilsCls.unionHash(ic.hAtomsRefnum, ic.residues[residueid]);
|
|
44633
44656
|
|
|
44634
44657
|
html += '<span ' + colorStr + ' title="' + refnumLabel + '"><b>' + refnumLabel.substr(0, 1) + '</b>' + refnumLabel.substr(1) + '</span>';
|
|
44635
44658
|
}
|
|
44636
|
-
else if(refnumLabel && lastTwo % 2 == 0 && lastTwo != 52 && !bHidelabel) { // don't show label for the first, middle, and last loop residues
|
|
44659
|
+
else if(refnumLabel && lastTwo % 2 == 0 && lastTwo != 52 && refnum != 1096 && !bHidelabel) { // don't show label for the first, middle, and last loop residues
|
|
44637
44660
|
// e.g., 2152a
|
|
44638
44661
|
lastTwoStr = isNaN(refnumStr) ? lastTwoStr + refnumStr.substr(refnumStr.length - 1, 1) : lastTwoStr;
|
|
44639
44662
|
html += '<span ' + colorStr + ' title="' + refnumLabel + '">' + lastTwoStr + '</span>';
|
|
@@ -44675,7 +44698,8 @@ class ShowSeq {
|
|
|
44675
44698
|
return '#00FF00';
|
|
44676
44699
|
}
|
|
44677
44700
|
else if(currStrand == "E") {
|
|
44678
|
-
return (bText) ? "#F7DC6F" : "#FFFF00";
|
|
44701
|
+
//return (bText) ? "#F7DC6F" : "#FFFF00";
|
|
44702
|
+
return "#F7DC6F";
|
|
44679
44703
|
}
|
|
44680
44704
|
else if(currStrand == "F") {
|
|
44681
44705
|
return '#FFA500';
|
|
@@ -44699,7 +44723,7 @@ class ShowSeq {
|
|
|
44699
44723
|
return '#006400';
|
|
44700
44724
|
}
|
|
44701
44725
|
else if(currStrand == "C" || currStrand == "F") {
|
|
44702
|
-
return "#FFFF00"; //'#F0E68C';
|
|
44726
|
+
return "#F7DC6F"; //"#FFFF00"; //'#F0E68C';
|
|
44703
44727
|
}
|
|
44704
44728
|
else if(currStrand == "C'" || (currStrand && currStrand.substr(0, 1) == "G")) {
|
|
44705
44729
|
return '#FFA500';
|
|
@@ -46402,27 +46426,27 @@ class LineGraph {
|
|
|
46402
46426
|
let thisClass = this;
|
|
46403
46427
|
|
|
46404
46428
|
// round 1, 16 templates
|
|
46405
|
-
ic.refpdbArray = ['1InsulinR_8guyE_human_FN3-n1', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1CoAtomerGamma1_1r4xA_human', '1C3_2qkiD_human_n1', '1CuZnSuperoxideDismutase_1hl5C_human', '1ASF1A_2iijA_human', '1FAB-LIGHT_5esv_C1-n2', '1CD2_1hnfA_human_C2-n2', '1NaCaExchanger_2fwuA_dog_n2', '1FAB-HEAVY_5esv_V-n1', '1PDL1_4z18B_human_V-n1', '1BTLA_2aw2A_human_Iset', '1LaminAC_1ifrA_human', '
|
|
46429
|
+
ic.refpdbArray = ['1InsulinR_8guyE_human_FN3-n1', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1CoAtomerGamma1_1r4xA_human', '1C3_2qkiD_human_n1', '1CuZnSuperoxideDismutase_1hl5C_human', '1ASF1A_2iijA_human', '1FAB-LIGHT_5esv_C1-n2', '1CD2_1hnfA_human_C2-n2', '1NaCaExchanger_2fwuA_dog_n2', '1NaKATPaseTransporterBeta_2zxeB_spurdogshark', '1FAB-HEAVY_5esv_V-n1', '1PDL1_4z18B_human_V-n1', '1BTLA_2aw2A_human_Iset', '1LaminAC_1ifrA_human', '1CD3g_6jxrg_human_Iset', '1CD28_1yjdC_human_V', '1CD19_6al5A_human_C2orV-n1'];
|
|
46406
46430
|
|
|
46407
46431
|
// round 2
|
|
46408
46432
|
ic.refpdbHash = {};
|
|
46409
46433
|
ic.refpdbHash['1InsulinR_8guyE_human_FN3-n1'] = ['InsulinR_8guyE_human_FN3-n1', 'IL6Rb_1bquB_human_FN3-n3', 'Sidekick2_1wf5A_human_FN3-n7', 'InsulinR_8guyE_human_FN3-n2', 'Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n2'];
|
|
46410
46434
|
ic.refpdbHash['1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'ICOS_6x4gA_human_V'];
|
|
46411
|
-
ic.refpdbHash['1CoAtomerGamma1_1r4xA_human'] = ['CoAtomerGamma1_1r4xA_human', 'TP34_2o6cA_bacteria'
|
|
46435
|
+
ic.refpdbHash['1CoAtomerGamma1_1r4xA_human'] = ['CoAtomerGamma1_1r4xA_human', 'TP34_2o6cA_bacteria'];
|
|
46412
46436
|
ic.refpdbHash['1C3_2qkiD_human_n1'] = ['C3_2qkiD_human_n1', 'BArrestin1_4jqiA_rat_n1', 'RBPJ_6py8C_human_Unk-n1'];
|
|
46413
46437
|
ic.refpdbHash['1CuZnSuperoxideDismutase_1hl5C_human'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'TEAD1_3kysC_human'];
|
|
46414
|
-
ic.refpdbHash['1ASF1A_2iijA_human'] = ['ASF1A_2iijA_human', '
|
|
46438
|
+
ic.refpdbHash['1ASF1A_2iijA_human'] = ['ASF1A_2iijA_human', 'RBPJ_6py8C_human_Unk-n2', 'TP47_1o75A_bacteria'];
|
|
46415
46439
|
ic.refpdbHash['1FAB-LIGHT_5esv_C1-n2'] = ['FAB-LIGHT_5esv_C1-n2', 'GHR_1axiB_human_FN3-n1', 'VTCN1_Q7Z7D3_human_V-n2', 'B2Microglobulin_7phrL_human_C1', 'FAB-HEAVY_5esv_C1-n2', 'MHCIa_7phrH_human_C1'];
|
|
46416
46440
|
ic.refpdbHash['1CD2_1hnfA_human_C2-n2'] = ['CD2_1hnfA_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2'];
|
|
46417
|
-
ic.refpdbHash['1NaCaExchanger_2fwuA_dog_n2'] = ['NaCaExchanger_2fwuA_dog_n2', 'ORF7a_1xakA_virus', 'ECadherin_4zt1A_human_n2'
|
|
46441
|
+
ic.refpdbHash['1NaCaExchanger_2fwuA_dog_n2'] = ['NaCaExchanger_2fwuA_dog_n2', 'ORF7a_1xakA_virus', 'ECadherin_4zt1A_human_n2'];
|
|
46442
|
+
ic.refpdbHash['1NaKATPaseTransporterBeta_2zxeB_spurdogshark'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
|
|
46418
46443
|
ic.refpdbHash['1FAB-HEAVY_5esv_V-n1'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'VNAR_1t6vN_shark_V', 'TCRa_6jxrm_human_V-n1', 'VISTA_6oilA_human_V', 'CD8a_1cd8A_human_V', 'PD1_4zqkB_human_V'];
|
|
46419
46444
|
ic.refpdbHash['1PDL1_4z18B_human_V-n1'] = ['PDL1_4z18B_human_V-n1', 'CD2_1hnfA_human_V-n1', 'LAG3_7tzgD_human_V-n1'];
|
|
46420
46445
|
ic.refpdbHash['1BTLA_2aw2A_human_Iset'] = ['BTLA_2aw2A_human_Iset', 'Palladin_2dm3A_human_Iset-n1', 'Titin_4uowM_human_Unk-n152', 'LAG3_7tzgD_human_C2-n2', 'JAM1_1nbqA_human_VorIset-n2', 'Contactin1_3s97C_human_C2-n2'];
|
|
46421
|
-
ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human'];
|
|
46422
|
-
ic.refpdbHash['
|
|
46423
|
-
ic.refpdbHash['
|
|
46424
|
-
ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
|
|
46425
|
-
ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V'];
|
|
46446
|
+
ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human', 'CD3d_6jxrd_human_Iset'];
|
|
46447
|
+
ic.refpdbHash['1CD3g_6jxrg_human_Iset'] = ['CD3g_6jxrg_human_Iset', 'TCRa_6jxrm_human_C1-n2', 'IsdA_2iteA_bacteria'];
|
|
46448
|
+
ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V', 'MPT63_1lmiA_bacteria', 'CD3e_6jxrf_human_Iset'];
|
|
46449
|
+
ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
|
|
46426
46450
|
|
|
46427
46451
|
// use known ref structure
|
|
46428
46452
|
ic.refpdbHash['5ESV_C'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2'];
|
|
@@ -46470,11 +46494,14 @@ class LineGraph {
|
|
|
46470
46494
|
ic.refpdbHash['6A15_A'] = ['CD19_6al5A_human_C2orV-n1'];
|
|
46471
46495
|
ic.refpdbHash['2QKI_D'] = ['C3_2qkiD_human_n1'];
|
|
46472
46496
|
ic.refpdbHash['1YJD_C'] = ['CD28_1yjdC_human_V'];
|
|
46497
|
+
ic.refpdbHash['6JXR_d'] = ['CD3d_6jxrd_human_Iset'];
|
|
46498
|
+
ic.refpdbHash['6JXR_f'] = ['CD3e_6jxrf_human_Iset'];
|
|
46499
|
+
ic.refpdbHash['6JXR_g'] = ['CD3g_6jxrg_human_Iset'];
|
|
46473
46500
|
|
|
46474
46501
|
let pdbAjaxArray = [];
|
|
46475
46502
|
for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
|
|
46476
|
-
|
|
46477
|
-
let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refjsonid=" + ic.refpdbArray[k];
|
|
46503
|
+
let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refpdbid=" + ic.refpdbArray[k];
|
|
46504
|
+
//let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refjsonid=" + ic.refpdbArray[k];
|
|
46478
46505
|
|
|
46479
46506
|
let pdbAjax = me.getAjaxPromise(urlpdb, 'text');
|
|
46480
46507
|
|
|
@@ -46505,8 +46532,8 @@ class LineGraph {
|
|
|
46505
46532
|
let ajaxArray = [];
|
|
46506
46533
|
let domainidpairArray = [];
|
|
46507
46534
|
|
|
46508
|
-
me.htmlCls.baseUrl + "tmalign/tmalign.cgi";
|
|
46509
|
-
|
|
46535
|
+
let urltmalign = me.htmlCls.baseUrl + "tmalign/tmalign.cgi";
|
|
46536
|
+
me.htmlCls.baseUrl + "vastdyn/vastdyn.cgi";
|
|
46510
46537
|
|
|
46511
46538
|
if(!ic.resid2domainid) ic.resid2domainid = {};
|
|
46512
46539
|
//ic.resid2domainid = {};
|
|
@@ -46544,7 +46571,7 @@ class LineGraph {
|
|
|
46544
46571
|
|
|
46545
46572
|
let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(currAtoms);
|
|
46546
46573
|
let atomLast = ic.firstAtomObjCls.getLastAtomObj(currAtoms);
|
|
46547
|
-
let resiSum =
|
|
46574
|
+
let resiSum = atomFirst.resi + ':' + atomLast.resi;
|
|
46548
46575
|
|
|
46549
46576
|
for(let n = 0, nl = residueArray.length; n < nl; ++n) {
|
|
46550
46577
|
let resid = residueArray[n];
|
|
@@ -46580,7 +46607,7 @@ class LineGraph {
|
|
|
46580
46607
|
|
|
46581
46608
|
let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtoms);
|
|
46582
46609
|
let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtoms);
|
|
46583
|
-
let resiSum =
|
|
46610
|
+
let resiSum = atomFirst.resi + ':' + atomLast.resi;
|
|
46584
46611
|
|
|
46585
46612
|
for(let m = 0, ml = segArray.length; m < ml; m += 2) {
|
|
46586
46613
|
let startResi = segArray[m];
|
|
@@ -46598,31 +46625,30 @@ class LineGraph {
|
|
|
46598
46625
|
|
|
46599
46626
|
for(let k = 0, kl = domainAtomsArray.length; k < kl; ++k) {
|
|
46600
46627
|
let pdb_target = ic.saveFileCls.getAtomPDB(domainAtomsArray[k], undefined, undefined, undefined, undefined, struct);
|
|
46601
|
-
let bForceOneDomain = true;
|
|
46602
|
-
let jsonStr_t = ic.domain3dCls.getDomainJsonForAlign(domainAtomsArray[k], bForceOneDomain);
|
|
46628
|
+
//let bForceOneDomain = true;
|
|
46629
|
+
//let jsonStr_t = ic.domain3dCls.getDomainJsonForAlign(domainAtomsArray[k], bForceOneDomain);
|
|
46603
46630
|
|
|
46604
46631
|
// ig strand for any subset will have the same k, use the number of residue to separate them
|
|
46605
46632
|
let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtomsArray[k]);
|
|
46606
46633
|
let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtomsArray[k]);
|
|
46607
|
-
let resiSum =
|
|
46634
|
+
let resiSum = atomFirst.resi + ':' + atomLast.resi;
|
|
46608
46635
|
//let domainid = chainid + '-' + k + '_' + Object.keys(domainAtomsArray[k]).length;
|
|
46609
46636
|
let domainid = chainid + '-' + k + '_' + resiSum;
|
|
46610
46637
|
ic.domainid2pdb[domainid] = pdb_target;
|
|
46611
46638
|
|
|
46612
46639
|
if(!template) {
|
|
46613
46640
|
for(let index = 0, indexl = dataArray.length; index < indexl; ++index) {
|
|
46614
|
-
|
|
46615
|
-
|
|
46616
|
-
|
|
46617
|
-
|
|
46618
|
-
let jsonStr_q = dataArray[index].value; //[0];
|
|
46641
|
+
let struct2 = ic.defaultPdbId + index;
|
|
46642
|
+
let pdb_query = dataArray[index].value; //[0];
|
|
46643
|
+
let header = 'HEADER ' + struct2 + '\n';
|
|
46644
|
+
pdb_query = header + pdb_query;
|
|
46645
|
+
//let jsonStr_q = dataArray[index].value; //[0];
|
|
46619
46646
|
|
|
46620
|
-
|
|
46621
|
-
|
|
46622
|
-
// let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
|
|
46647
|
+
let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": ic.refpdbArray[index]};
|
|
46648
|
+
let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
|
|
46623
46649
|
|
|
46624
|
-
let dataObj = {'domains1': jsonStr_q, 'domains2': jsonStr_t};
|
|
46625
|
-
let alignAjax = me.getAjaxPostPromise(urlalign, dataObj);
|
|
46650
|
+
// let dataObj = {'domains1': jsonStr_q, 'domains2': jsonStr_t};
|
|
46651
|
+
// let alignAjax = me.getAjaxPostPromise(urlalign, dataObj);
|
|
46626
46652
|
|
|
46627
46653
|
ajaxArray.push(alignAjax);
|
|
46628
46654
|
|
|
@@ -46644,8 +46670,8 @@ class LineGraph {
|
|
|
46644
46670
|
// let allPromise = Promise.allSettled(ajaxArray);
|
|
46645
46671
|
// dataArray2 = await allPromise;
|
|
46646
46672
|
|
|
46647
|
-
//split arrays into chunks of
|
|
46648
|
-
let n = (me.cfg.maxajax) ? me.cfg.maxajax :
|
|
46673
|
+
//split arrays into chunks of 48 jobs or me.cfg.maxajax jobs
|
|
46674
|
+
let n = (me.cfg.maxajax) ? me.cfg.maxajax : ic.refpdbArray.length * 6;
|
|
46649
46675
|
|
|
46650
46676
|
for(let i = 0, il = parseInt((ajaxArray.length - 1) / n + 1); i < il; ++i) {
|
|
46651
46677
|
let currAjaxArray = [];
|
|
@@ -46752,7 +46778,6 @@ class LineGraph {
|
|
|
46752
46778
|
let thisClass = this;
|
|
46753
46779
|
|
|
46754
46780
|
let tmscoreThreshold = 0.4; // 0.4; //0.5;
|
|
46755
|
-
let rmsdThreshold = 10;
|
|
46756
46781
|
|
|
46757
46782
|
// find the best alignment for each chain
|
|
46758
46783
|
let domainid2score = {}, domainid2segs = {}, chainid2segs = {};
|
|
@@ -46786,7 +46811,10 @@ class LineGraph {
|
|
|
46786
46811
|
}
|
|
46787
46812
|
}
|
|
46788
46813
|
else {
|
|
46789
|
-
if(queryData[0].super_rmsd > rmsdThreshold || queryData[0].num_res < minResidues) {
|
|
46814
|
+
// if(queryData[0].super_rmsd > rmsdThreshold || queryData[0].num_res < minResidues) {
|
|
46815
|
+
// continue;
|
|
46816
|
+
// }
|
|
46817
|
+
if(queryData[0].score < tmscoreThreshold || queryData[0].num_res < minResidues) {
|
|
46790
46818
|
continue;
|
|
46791
46819
|
}
|
|
46792
46820
|
}
|
|
@@ -46801,7 +46829,8 @@ class LineGraph {
|
|
|
46801
46829
|
if(!me.bNode) console.log("refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
|
|
46802
46830
|
}
|
|
46803
46831
|
else {
|
|
46804
|
-
if(!me.bNode) console.log("domainid: " + domainid + " refpdbname " + refpdbname + " RMSD: " + queryData[0].super_rmsd + ",
|
|
46832
|
+
// if(!me.bNode) console.log("domainid: " + domainid + " refpdbname " + refpdbname + " RMSD: " + queryData[0].super_rmsd + ", num_seg: " + queryData[0].num_seg + ", 10/RMSD + num_seg/5: " + (10 / queryData[0].super_rmsd + queryData[0].num_seg / 5).toFixed(1));
|
|
46833
|
+
if(!me.bNode) console.log("domainid: " + domainid + " refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
|
|
46805
46834
|
}
|
|
46806
46835
|
|
|
46807
46836
|
// Ig-like domains: B (2150, 2150a, 2150b), C (3150, 3250), E (7150, 7250), F (8150, 8250) strands
|
|
@@ -46849,7 +46878,8 @@ class LineGraph {
|
|
|
46849
46878
|
}
|
|
46850
46879
|
}
|
|
46851
46880
|
else {
|
|
46852
|
-
let mixScore = 10 / queryData[0].super_rmsd + queryData[0].num_seg / 5;
|
|
46881
|
+
//let mixScore = 10 / queryData[0].super_rmsd + queryData[0].num_seg / 5;
|
|
46882
|
+
let mixScore = queryData[0].score;
|
|
46853
46883
|
|
|
46854
46884
|
if(!domainid2score.hasOwnProperty(domainid) || mixScore > domainid2score[domainid]) {
|
|
46855
46885
|
domainid2score[domainid] = mixScore;
|
|
@@ -46920,8 +46950,8 @@ class LineGraph {
|
|
|
46920
46950
|
//let allPromise = Promise.allSettled(ajaxArray);
|
|
46921
46951
|
//dataArray3 = await allPromise;
|
|
46922
46952
|
|
|
46923
|
-
//split arrays into chunks of
|
|
46924
|
-
let n = (me.cfg.maxajax) ? me.cfg.maxajax :
|
|
46953
|
+
//split arrays into chunks of 48 jobs or me.cfg.maxajax jobs
|
|
46954
|
+
let n = (me.cfg.maxajax) ? me.cfg.maxajax : ic.refpdbArray.length * 6;
|
|
46925
46955
|
|
|
46926
46956
|
for(let i = 0, il = parseInt((ajaxArray.length - 1) / n + 1); i < il; ++i) {
|
|
46927
46957
|
let currAjaxArray = [];
|
|
@@ -47038,7 +47068,7 @@ class LineGraph {
|
|
|
47038
47068
|
else {
|
|
47039
47069
|
await ic.showAnnoCls.showAnnotations();
|
|
47040
47070
|
}
|
|
47041
|
-
|
|
47071
|
+
|
|
47042
47072
|
ic.annotationCls.setAnnoViewAndDisplay('detailed view');
|
|
47043
47073
|
}
|
|
47044
47074
|
else {
|
|
@@ -50450,7 +50480,7 @@ class ChainalignParser {
|
|
|
50450
50480
|
//hAtoms = me.hashUtilsCls.unionHash(hAtoms, ic.chains[chainidArray[0]]);
|
|
50451
50481
|
//hAtoms = me.hashUtilsCls.unionHash(hAtoms, ic.chains[chainidArray[1]]);
|
|
50452
50482
|
}
|
|
50453
|
-
|
|
50483
|
+
|
|
50454
50484
|
// set up the view of sequence alignment for each pair
|
|
50455
50485
|
for(let mmdbidpair in mmdbidpairFinalHash) {
|
|
50456
50486
|
if(ic.q_rotation !== undefined) {
|
|
@@ -50881,7 +50911,11 @@ class ChainalignParser {
|
|
|
50881
50911
|
if(me.cfg.aligntool == 'tmalign') logStr += "; TM-score: " + align[0].score.toPrecision(4);
|
|
50882
50912
|
me.htmlCls.clickMenuCls.setLogCmd(logStr, false);
|
|
50883
50913
|
let html = "<br><b>Alignment RMSD</b>: " + rmsd.toPrecision(4) + " Å<br>";
|
|
50884
|
-
if(me.cfg.aligntool == 'tmalign')
|
|
50914
|
+
if(me.cfg.aligntool == 'tmalign') {
|
|
50915
|
+
html += "<b>TM-score</b>: " + align[0].score.toPrecision(4) + "<br><br>";
|
|
50916
|
+
ic.tmscore = align[0].score.toPrecision(4);
|
|
50917
|
+
}
|
|
50918
|
+
|
|
50885
50919
|
$("#" + ic.pre + "dl_rmsd_html").html(html);
|
|
50886
50920
|
if(!me.cfg.bSidebyside) me.htmlCls.dialogCls.openDlg('dl_rmsd', 'RMSD of alignment');
|
|
50887
50921
|
|
|
@@ -52944,7 +52978,7 @@ class PdbParser {
|
|
|
52944
52978
|
|
|
52945
52979
|
if(me.cfg.rotate !== undefined) ic.resizeCanvasCls.rotStruc(me.cfg.rotate, true);
|
|
52946
52980
|
|
|
52947
|
-
if(bAppend) {
|
|
52981
|
+
if(bAppend && !me.bNode) {
|
|
52948
52982
|
// show all
|
|
52949
52983
|
ic.definedSetsCls.setModeAndDisplay('all');
|
|
52950
52984
|
}
|
|
@@ -55262,16 +55296,20 @@ class ParserUtils {
|
|
|
55262
55296
|
|
|
55263
55297
|
getMissingResidues(seqArray, type, chainid) { let ic = this.icn3d, me = ic.icn3dui;
|
|
55264
55298
|
ic.chainsSeq[chainid] = [];
|
|
55299
|
+
|
|
55300
|
+
// find the offset of MMDB sequence
|
|
55301
|
+
let offset = 0;
|
|
55265
55302
|
if(type === 'mmdbid' || type === 'align') {
|
|
55266
55303
|
for(let i = 0, il = seqArray.length; i < il; ++i) {
|
|
55267
55304
|
if(seqArray[i][0] != 0) {
|
|
55268
|
-
seqArray[i][0] - (i + 1);
|
|
55305
|
+
offset = seqArray[i][0] - (i + 1);
|
|
55269
55306
|
break;
|
|
55270
55307
|
}
|
|
55271
55308
|
}
|
|
55272
55309
|
}
|
|
55273
55310
|
|
|
55274
|
-
let prevResi = 0;
|
|
55311
|
+
//let prevResi = 0;
|
|
55312
|
+
let prevResi = offset;
|
|
55275
55313
|
for(let i = 0, il = seqArray.length; i < il; ++i) {
|
|
55276
55314
|
let seqName, resiPos;
|
|
55277
55315
|
// mmdbid: ["0","R","ARG"],["502","V","VAL"]; mmcifid: [1, "ARG"]; align: ["0","R","ARG"] //align: [1, "0","R","ARG"]
|
|
@@ -56160,6 +56198,7 @@ class LoadAtomData {
|
|
|
56160
56198
|
let CSerial, prevCSerial, OSerial, prevOSerial;
|
|
56161
56199
|
|
|
56162
56200
|
let biopolymerChainsHash = {};
|
|
56201
|
+
|
|
56163
56202
|
for(let i in atoms) {
|
|
56164
56203
|
++serial;
|
|
56165
56204
|
|
|
@@ -56189,21 +56228,21 @@ class LoadAtomData {
|
|
|
56189
56228
|
atm.chain = ic.molid2chain[molid].substr(pos + 1);
|
|
56190
56229
|
}
|
|
56191
56230
|
else {
|
|
56192
|
-
|
|
56231
|
+
let miscName = 'Misc';
|
|
56193
56232
|
|
|
56194
|
-
|
|
56195
|
-
|
|
56196
|
-
|
|
56197
|
-
|
|
56198
|
-
|
|
56199
|
-
|
|
56233
|
+
//if(atm.resn != prevResn || chainid2kind[chainNum] === 'solvent' || atm.resn === 'HOH' || atm.name == atm.elem) {
|
|
56234
|
+
if((chainid2kind[chainNum] === 'protein' && chainid2kind[chainNum] === 'nucleotide' && atm.resi != prevResiOri)
|
|
56235
|
+
||(chainid2kind[chainNum] !== 'protein' && chainid2kind[chainNum] !== 'nucleotide'
|
|
56236
|
+
&&(atm.resn.substr(0,3) != prevResn.substr(0,3) || atm.resi != prevResiOri || chainid2kind[chainNum] === 'solvent' || atm.resn === 'HOH')) ) {
|
|
56237
|
+
++miscCnt;
|
|
56238
|
+
}
|
|
56200
56239
|
|
|
56201
|
-
|
|
56202
|
-
|
|
56203
|
-
|
|
56240
|
+
atm.resi_ori = atm.resi;
|
|
56241
|
+
atm.resi = miscCnt;
|
|
56242
|
+
bSetResi = true;
|
|
56204
56243
|
|
|
56205
|
-
|
|
56206
|
-
|
|
56244
|
+
//if all are defined in the chain section, no "Misc" should appear
|
|
56245
|
+
atm.chain = miscName;
|
|
56207
56246
|
}
|
|
56208
56247
|
|
|
56209
56248
|
//if(ic.mmdbid_q !== undefined && ic.mmdbid_q === ic.mmdbid_t && alignType === 'query') {
|
|
@@ -58654,10 +58693,7 @@ class LoadPDB {
|
|
|
58654
58693
|
|
|
58655
58694
|
if(ic.atoms[oriSerial2NewSerial[from]] !== undefined) ic.atoms[oriSerial2NewSerial[from]].bonds.push(oriSerial2NewSerial[to]);
|
|
58656
58695
|
}
|
|
58657
|
-
} else if (record.substr(0,3) === 'TER')
|
|
58658
|
-
// Concatenation of two pdbs will have several atoms for the same serial
|
|
58659
|
-
++serial;
|
|
58660
|
-
}
|
|
58696
|
+
} else if (record.substr(0,3) === 'TER') ;
|
|
58661
58697
|
}
|
|
58662
58698
|
|
|
58663
58699
|
// add the last residue set
|
|
@@ -60231,24 +60267,28 @@ class ApplyCommand {
|
|
|
60231
60267
|
else if(command == 'rotate left') {
|
|
60232
60268
|
ic.bStopRotate = false;
|
|
60233
60269
|
ic.ROT_DIR = 'left';
|
|
60270
|
+
ic.transformCls.rotateCountMax = 6000;
|
|
60234
60271
|
|
|
60235
60272
|
ic.resizeCanvasCls.rotStruc('left');
|
|
60236
60273
|
}
|
|
60237
60274
|
else if(command == 'rotate right') {
|
|
60238
60275
|
ic.bStopRotate = false;
|
|
60239
60276
|
ic.ROT_DIR = 'right';
|
|
60277
|
+
ic.transformCls.rotateCountMax = 6000;
|
|
60240
60278
|
|
|
60241
60279
|
ic.resizeCanvasCls.rotStruc('right');
|
|
60242
60280
|
}
|
|
60243
60281
|
else if(command == 'rotate up') {
|
|
60244
60282
|
ic.bStopRotate = false;
|
|
60245
60283
|
ic.ROT_DIR = 'up';
|
|
60284
|
+
ic.transformCls.rotateCountMax = 6000;
|
|
60246
60285
|
|
|
60247
60286
|
ic.resizeCanvasCls.rotStruc('up');
|
|
60248
60287
|
}
|
|
60249
60288
|
else if(command == 'rotate down') {
|
|
60250
60289
|
ic.bStopRotate = false;
|
|
60251
60290
|
ic.ROT_DIR = 'down';
|
|
60291
|
+
ic.transformCls.rotateCountMax = 6000;
|
|
60252
60292
|
|
|
60253
60293
|
ic.resizeCanvasCls.rotStruc('down');
|
|
60254
60294
|
}
|
|
@@ -64947,7 +64987,8 @@ class Delphi {
|
|
|
64947
64987
|
let pdbstr = '';
|
|
64948
64988
|
/// pdbstr += ic.saveFileCls.getPDBHeader();
|
|
64949
64989
|
|
|
64950
|
-
|
|
64990
|
+
let bMergeIntoOne = true;
|
|
64991
|
+
pdbstr +=(me.cfg.cid) ? ic.saveFileCls.getAtomPDB(atomHash, true, undefined, undefined, undefined, undefined, bMergeIntoOne) : ic.saveFileCls.getAtomPDB(atomHash, undefined, undefined, undefined, undefined, undefined, bMergeIntoOne);
|
|
64951
64992
|
pdbstr += ic.saveFileCls.getAtomPDB(ionHash, true, undefined, true);
|
|
64952
64993
|
|
|
64953
64994
|
return pdbstr;
|
|
@@ -65920,7 +65961,8 @@ console.log("free energy: " + energy + " kcal/mol");
|
|
|
65920
65961
|
}
|
|
65921
65962
|
else {
|
|
65922
65963
|
let atoms = me.hashUtilsCls.intHash(ic.dAtoms, ic.hAtoms);
|
|
65923
|
-
|
|
65964
|
+
let bMergeIntoOne = true;
|
|
65965
|
+
pdbStr = ic.saveFileCls.getAtomPDB(atoms, undefined, undefined, undefined, undefined, undefined, bMergeIntoOne);
|
|
65924
65966
|
}
|
|
65925
65967
|
|
|
65926
65968
|
let url = me.htmlCls.baseUrl + "scap/scap.cgi";
|
|
@@ -69841,7 +69883,7 @@ class SaveFile {
|
|
|
69841
69883
|
}
|
|
69842
69884
|
|
|
69843
69885
|
//getAtomPDB: function(atomHash, bPqr, bPdb, bNoChem) { let ic = this.icn3d, me = ic.icn3dui;
|
|
69844
|
-
getAtomPDB(atomHash, bPqr, bNoChem, bNoHeader, chainResi2pdb, pdbid) { let ic = this.icn3d, me = ic.icn3dui;
|
|
69886
|
+
getAtomPDB(atomHash, bPqr, bNoChem, bNoHeader, chainResi2pdb, pdbid, bMergeIntoOne) { let ic = this.icn3d, me = ic.icn3dui;
|
|
69845
69887
|
let pdbStr = '';
|
|
69846
69888
|
|
|
69847
69889
|
// get all phosphate groups in lipids
|
|
@@ -69994,6 +70036,7 @@ class SaveFile {
|
|
|
69994
70036
|
let bMulStruc =(struArray.length > 1) ? true : false;
|
|
69995
70037
|
|
|
69996
70038
|
let molNum = 1, prevStru = '', prevChain = '';
|
|
70039
|
+
let chainIndex = 0, fakeChain = '', chainNameArray = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
69997
70040
|
|
|
69998
70041
|
let addedChainResiHash = {};
|
|
69999
70042
|
for(let i in atomHash) {
|
|
@@ -70004,20 +70047,22 @@ class SaveFile {
|
|
|
70004
70047
|
|
|
70005
70048
|
//if(bMulStruc && atom.structure != prevStru) {
|
|
70006
70049
|
if(atom.structure != prevStru) {
|
|
70007
|
-
|
|
70008
|
-
|
|
70050
|
+
if(!bMergeIntoOne || !bMulStruc) {
|
|
70051
|
+
pdbStr += connStr;
|
|
70052
|
+
connStr = '';
|
|
70009
70053
|
|
|
70010
|
-
|
|
70054
|
+
if(molNum > 1) pdbStr += '\nENDMDL\n';
|
|
70011
70055
|
|
|
70012
|
-
|
|
70056
|
+
if(bMulStruc) pdbStr += 'MODEL ' + molNum + '\n';
|
|
70057
|
+
}
|
|
70013
70058
|
|
|
70014
70059
|
// add header
|
|
70015
70060
|
let mutantInfo = (chainResi2pdb) ? "Mutated chain_residue " + Object.keys(chainResi2pdb) + '; ' : '';
|
|
70016
70061
|
if(!bNoHeader) {
|
|
70017
70062
|
//pdbStr += this.getPDBHeader(molNum - 1, stru2header, mutantInfo, pdbid);
|
|
70018
70063
|
|
|
70019
|
-
// make
|
|
70020
|
-
pdbStr += this.getPDBHeader(molNum - 1, stru2header, mutantInfo, atom.structure);
|
|
70064
|
+
// make sure the PDB ID is correct
|
|
70065
|
+
if(!bMergeIntoOne || !bMulStruc) pdbStr += this.getPDBHeader(molNum - 1, stru2header, mutantInfo, atom.structure);
|
|
70021
70066
|
|
|
70022
70067
|
//pdbStr += '\n'; // separate from incomplete secondary structures
|
|
70023
70068
|
}
|
|
@@ -70025,6 +70070,7 @@ class SaveFile {
|
|
|
70025
70070
|
//prevStru = atom.structure;
|
|
70026
70071
|
++molNum;
|
|
70027
70072
|
}
|
|
70073
|
+
|
|
70028
70074
|
//else {
|
|
70029
70075
|
//if(atom.chain != prevChain) {
|
|
70030
70076
|
if(atom.chain != prevChain && atom.structure == prevStru) {
|
|
@@ -70098,17 +70144,28 @@ class SaveFile {
|
|
|
70098
70144
|
*/
|
|
70099
70145
|
|
|
70100
70146
|
line +=(resn.length <= 3) ? resn.padStart(3, ' ') : resn.substr(0, 3);
|
|
70101
|
-
|
|
70102
|
-
|
|
70103
|
-
|
|
70104
|
-
|
|
70105
|
-
|
|
70106
|
-
|
|
70107
|
-
|
|
70108
|
-
line += ' ' +
|
|
70147
|
+
|
|
70148
|
+
if(bMergeIntoOne && molNum > 2 && (ic.proteins.hasOwnProperty(atom.serial) || ic.nucleotides.hasOwnProperty(atom.serial))) {
|
|
70149
|
+
if(atom.structure != prevStru || atom.chain != prevChain) {
|
|
70150
|
+
fakeChain = (chainIndex < 36) ? chainNameArray[chainIndex] : '?';
|
|
70151
|
+
++chainIndex;
|
|
70152
|
+
}
|
|
70153
|
+
|
|
70154
|
+
line += ' ' + fakeChain;
|
|
70109
70155
|
}
|
|
70110
|
-
else
|
|
70111
|
-
line += '
|
|
70156
|
+
else {
|
|
70157
|
+
//line += ' ';
|
|
70158
|
+
//line +=(atom.chain.length <= 1) ? atom.chain.padStart(1, ' ') : atom.chain.substr(0, 1);
|
|
70159
|
+
if(atom.chain.length >= 2) {
|
|
70160
|
+
let chainTmp = atom.chain.replace(/_/gi, '').substr(0, 2);
|
|
70161
|
+
line += chainTmp;
|
|
70162
|
+
}
|
|
70163
|
+
else if(atom.chain.length == 1) {
|
|
70164
|
+
line += ' ' + atom.chain.substr(0, 1);
|
|
70165
|
+
}
|
|
70166
|
+
else if(atom.chain.length == 0) {
|
|
70167
|
+
line += ' A';
|
|
70168
|
+
}
|
|
70112
70169
|
}
|
|
70113
70170
|
|
|
70114
70171
|
let resi = atom.resi;
|
|
@@ -70204,9 +70261,11 @@ class SaveFile {
|
|
|
70204
70261
|
prevChain = atom.chain;
|
|
70205
70262
|
}
|
|
70206
70263
|
|
|
70207
|
-
|
|
70208
|
-
|
|
70209
|
-
|
|
70264
|
+
if(!bMergeIntoOne || !bMulStruc) {
|
|
70265
|
+
pdbStr += connStr;
|
|
70266
|
+
|
|
70267
|
+
if(bMulStruc) pdbStr += '\nENDMDL\n';
|
|
70268
|
+
}
|
|
70210
70269
|
|
|
70211
70270
|
return pdbStr;
|
|
70212
70271
|
}
|
|
@@ -73691,7 +73750,7 @@ class iCn3DUI {
|
|
|
73691
73750
|
//even when multiple iCn3D viewers are shown together.
|
|
73692
73751
|
this.pre = this.cfg.divid + "_";
|
|
73693
73752
|
|
|
73694
|
-
this.REVISION = '3.28.
|
|
73753
|
+
this.REVISION = '3.28.4';
|
|
73695
73754
|
|
|
73696
73755
|
// In nodejs, iCn3D defines "window = {navigator: {}}"
|
|
73697
73756
|
this.bNode = (Object.keys(window).length < 2) ? true : false;
|
|
@@ -73898,16 +73957,17 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
|
|
|
73898
73957
|
}
|
|
73899
73958
|
}
|
|
73900
73959
|
|
|
73901
|
-
//
|
|
73902
|
-
ic.chainidArray = [chain_t].concat(chainidArray);
|
|
73903
|
-
ic.chainidArray = ic.chainalignParserCls.addPostfixForChainids(ic.chainidArray);
|
|
73904
|
-
|
|
73960
|
+
// get the matched structures, do not include the template
|
|
73905
73961
|
let mmdbafid = '';
|
|
73906
|
-
for(let i = 0, il =
|
|
73962
|
+
for(let i = 0, il = chainidArray.length; i < il; ++i) {
|
|
73907
73963
|
if(i > 0) mmdbafid += ',';
|
|
73908
|
-
mmdbafid +=
|
|
73964
|
+
mmdbafid += chainidArray[i].substr(0, chainidArray[i].indexOf('_'));
|
|
73909
73965
|
}
|
|
73910
73966
|
|
|
73967
|
+
// realign, include the template
|
|
73968
|
+
ic.chainidArray = [chain_t].concat(chainidArray);
|
|
73969
|
+
ic.chainidArray = ic.chainalignParserCls.addPostfixForChainids(ic.chainidArray);
|
|
73970
|
+
|
|
73911
73971
|
me.htmlCls.clickMenuCls.setLogCmd('resdef ' + me.cfg.resdef, true);
|
|
73912
73972
|
|
|
73913
73973
|
ic.loadCmd = 'vast_search_chainid ' + ic.chainidArray;
|
|
@@ -74123,7 +74183,7 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
|
|
|
74123
74183
|
// ic.bNCBI = true;
|
|
74124
74184
|
|
|
74125
74185
|
// remove space
|
|
74126
|
-
me.cfg.mmdbafid = me.cfg.mmdbafid.replace(/\s+/g, '');
|
|
74186
|
+
me.cfg.mmdbafid = me.cfg.mmdbafid.replace(/\s+/g, '').toUpperCase();
|
|
74127
74187
|
|
|
74128
74188
|
ic.bMmdbafid = true;
|
|
74129
74189
|
ic.inputid = me.cfg.mmdbafid;
|