icn3d 3.26.9 → 3.27.0
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 +338 -174
- package/icn3d.min.js +3 -3
- package/icn3d.module.js +338 -174
- package/package.json +1 -1
package/icn3d.module.js
CHANGED
|
@@ -5357,23 +5357,23 @@ class ParasCls {
|
|
|
5357
5357
|
//this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * ( + 0.81)/(1.14 + 0.81)),
|
|
5358
5358
|
// hydrophobic
|
|
5359
5359
|
// https://en.m.wikipedia.org/wiki/Hydrophobicity_scales#Wimley%E2%80%93White_whole_residue_hydrophobicity_scales
|
|
5360
|
-
'TRP': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-
|
|
5361
|
-
'PHE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.
|
|
5362
|
-
'
|
|
5363
|
-
'
|
|
5364
|
-
'
|
|
5365
|
-
'
|
|
5366
|
-
'
|
|
5360
|
+
'TRP': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-2.09 + 2.09) / (0 + 2.09)),
|
|
5361
|
+
'PHE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.71 + 2.09) / (0 + 2.09)),
|
|
5362
|
+
'LEU': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.25 + 2.09) / (0 + 2.09)),
|
|
5363
|
+
'ILE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.12 + 2.09) / (0 + 2.09)),
|
|
5364
|
+
'TYR': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.71 + 2.09) / (0 + 2.09)),
|
|
5365
|
+
'MET': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.67 + 2.09) / (0 + 2.09)),
|
|
5366
|
+
'VAL': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.46 + 2.09) / (0 + 2.09)),
|
|
5367
|
+
'CYS': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.02 + 2.09) / (0 + 2.09)),
|
|
5367
5368
|
|
|
5368
5369
|
// polar
|
|
5369
|
-
'
|
|
5370
|
-
'
|
|
5371
|
-
'SER': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.
|
|
5372
|
-
'
|
|
5373
|
-
'
|
|
5374
|
-
'ASN': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.
|
|
5375
|
-
'
|
|
5376
|
-
'GLN': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.58 + 0.58)/(0 + 0.58))
|
|
5370
|
+
'PRO': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.14 + 1.15) / (0 + 1.15)),
|
|
5371
|
+
'THR': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.25 + 1.15) / (0 + 1.15)),
|
|
5372
|
+
'SER': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.46 + 1.15) / (0 + 1.15)),
|
|
5373
|
+
'ALA': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.50 + 1.15) / (0 + 1.15)),
|
|
5374
|
+
'GLN': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.77 + 1.15) / (0 + 1.15)),
|
|
5375
|
+
'ASN': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-0.85 + 1.15) / (0 + 1.15)),
|
|
5376
|
+
'GLY': this.thr().setHSL(1/6.0, 1, 0.5 + 0.5 * (-1.15 + 1.15) / (0 + 1.15))
|
|
5377
5377
|
};
|
|
5378
5378
|
|
|
5379
5379
|
this.normalizedHPColors = {
|
|
@@ -5391,59 +5391,58 @@ class ParasCls {
|
|
|
5391
5391
|
//this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * ( + 0.81)/(1.14 + 0.81)),
|
|
5392
5392
|
// hydrophobic
|
|
5393
5393
|
// https://en.m.wikipedia.org/wiki/Hydrophobicity_scales#Wimley%E2%80%93White_whole_residue_hydrophobicity_scales
|
|
5394
|
-
//
|
|
5395
|
-
'TRP': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-
|
|
5396
|
-
'PHE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.
|
|
5397
|
-
'
|
|
5398
|
-
'
|
|
5399
|
-
'
|
|
5400
|
-
'
|
|
5401
|
-
'
|
|
5394
|
+
// 1.15 ~ -2.09: white ~ green
|
|
5395
|
+
'TRP': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-2.09 + 2.09) / 3.24),
|
|
5396
|
+
'PHE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.71 + 2.09) / 3.24),
|
|
5397
|
+
'LEU': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.25 + 2.09) / 3.24),
|
|
5398
|
+
'ILE': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-1.12 + 2.09) / 3.24),
|
|
5399
|
+
'TYR': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.71 + 2.09) / 3.24),
|
|
5400
|
+
'MET': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.67 + 2.09) / 3.24),
|
|
5401
|
+
'VAL': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.46 + 2.09) / 3.24),
|
|
5402
|
+
'CYS': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (-0.02 + 2.09) / 3.24),
|
|
5402
5403
|
|
|
5403
5404
|
// polar
|
|
5404
|
-
'
|
|
5405
|
-
'
|
|
5406
|
-
'SER': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.
|
|
5407
|
-
'
|
|
5408
|
-
'
|
|
5409
|
-
'ASN': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.
|
|
5410
|
-
'
|
|
5411
|
-
'GLN': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.58 + 1.85)/2.5)
|
|
5405
|
+
'PRO': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.14 + 2.09) / 3.24),
|
|
5406
|
+
'THR': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.25 + 2.09) / 3.24),
|
|
5407
|
+
'SER': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.46 + 2.09) / 3.24),
|
|
5408
|
+
'ALA': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.50 + 2.09) / 3.24),
|
|
5409
|
+
'GLN': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.77 + 2.09) / 3.24),
|
|
5410
|
+
'ASN': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.85 + 2.09) / 3.24),
|
|
5411
|
+
'GLY': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (1.15 + 2.09) / 3.24)
|
|
5412
5412
|
};
|
|
5413
5413
|
|
|
5414
5414
|
this.hydrophobicValues = {
|
|
5415
|
-
// charged residues
|
|
5415
|
+
// charged residues, larger than max polar (1.15)
|
|
5416
5416
|
' G': 3, ' A': 3, ' T': 3,
|
|
5417
5417
|
' C': 3, ' U': 3, ' DG': 3,
|
|
5418
5418
|
' DA': 3, ' DT': 3, ' DC': 3,
|
|
5419
5419
|
' DU': 3, 'G': 3, 'A': 3,
|
|
5420
5420
|
'T': 3, 'C': 3, 'U': 3,
|
|
5421
5421
|
'DG': 3, 'DA': 3, 'DT': 3,
|
|
5422
|
-
'DC': 3, 'DU': 3, 'ARG': 1,
|
|
5423
|
-
'LYS': 1, 'ASP': 3, 'GLU': 3,
|
|
5422
|
+
'DC': 3, 'DU': 3, 'ARG': 1.5,
|
|
5423
|
+
'LYS': 1.5, 'ASP': 3, 'GLU': 3,
|
|
5424
5424
|
'HIS': 2,
|
|
5425
5425
|
|
|
5426
|
-
// + 0.81)/(1.14 + 0.81)),
|
|
5427
5426
|
// hydrophobic
|
|
5428
5427
|
// https://en.m.wikipedia.org/wiki/Hydrophobicity_scales#Wimley%E2%80%93White_whole_residue_hydrophobicity_scales
|
|
5429
|
-
//
|
|
5430
|
-
'TRP': -
|
|
5431
|
-
'PHE': -1.
|
|
5432
|
-
'
|
|
5433
|
-
'
|
|
5434
|
-
'
|
|
5435
|
-
'
|
|
5436
|
-
'
|
|
5428
|
+
// 1.15 ~ -2.09: white ~ green
|
|
5429
|
+
'TRP': -2.09,
|
|
5430
|
+
'PHE': -1.71,
|
|
5431
|
+
'LEU': -1.25,
|
|
5432
|
+
'ILE': -1.12,
|
|
5433
|
+
'TYR': -0.71,
|
|
5434
|
+
'MET': -0.67,
|
|
5435
|
+
'VAL': -0.46,
|
|
5436
|
+
'CYS': -0.02,
|
|
5437
5437
|
|
|
5438
5438
|
// polar
|
|
5439
|
-
'
|
|
5440
|
-
'
|
|
5441
|
-
'SER': 0.
|
|
5442
|
-
'
|
|
5443
|
-
'
|
|
5444
|
-
'ASN': 0.
|
|
5445
|
-
'
|
|
5446
|
-
'GLN': 0.58
|
|
5439
|
+
'PRO': 0.14,
|
|
5440
|
+
'THR': 0.25,
|
|
5441
|
+
'SER': 0.46,
|
|
5442
|
+
'ALA': 0.50,
|
|
5443
|
+
'GLN': 0.77,
|
|
5444
|
+
'ASN': 0.85,
|
|
5445
|
+
'GLY': 1.15
|
|
5447
5446
|
};
|
|
5448
5447
|
|
|
5449
5448
|
this.residueAbbrev = {
|
|
@@ -6829,8 +6828,8 @@ class ClickMenu {
|
|
|
6829
6828
|
me.htmlCls.dialogCls.openDlg('dl_esmfold', 'Sequence to structure prediction with ESMFold');
|
|
6830
6829
|
});
|
|
6831
6830
|
|
|
6832
|
-
me.myEventCls.onIds("#" + me.pre + "
|
|
6833
|
-
me.htmlCls.dialogCls.openDlg('
|
|
6831
|
+
me.myEventCls.onIds("#" + me.pre + "mn1_proteinname", "click", function(e) { me.icn3d; //e.preventDefault();
|
|
6832
|
+
me.htmlCls.dialogCls.openDlg('dl_proteinname', 'Please input protein or gene name');
|
|
6834
6833
|
});
|
|
6835
6834
|
|
|
6836
6835
|
me.myEventCls.onIds("#" + me.pre + "mn1_cid", "click", function(e) { me.icn3d; //e.preventDefault();
|
|
@@ -9355,10 +9354,16 @@ class SetMenu {
|
|
|
9355
9354
|
let html = "";
|
|
9356
9355
|
|
|
9357
9356
|
html += "<ul class='icn3d-mn-item'>";
|
|
9358
|
-
|
|
9359
|
-
html += this.
|
|
9357
|
+
|
|
9358
|
+
html += this.getMenuText('mn1_searchgrooup', 'Search Structure ' + me.htmlCls.wifiStr, undefined, 1, 1);
|
|
9359
|
+
html += "<ul>";
|
|
9360
|
+
html += this.getMenuUrl('mn1_searchstru', 'https://www.ncbi.nlm.nih.gov/structure', 'PDB Structures ' + me.htmlCls.wifiStr, undefined, 2);
|
|
9361
|
+
html += this.getLink('mn1_proteinname', 'AlphaFold Structures ' + me.htmlCls.wifiStr, undefined, 2);
|
|
9362
|
+
html += this.getMenuUrl('mn1_afdatabase', 'https://alphafold.ebi.ac.uk', 'AlphaFold UniProt Database ' + me.htmlCls.wifiStr, undefined, 2);
|
|
9363
|
+
html += "</ul>";
|
|
9364
|
+
html += "</li>";
|
|
9360
9365
|
|
|
9361
|
-
html += this.getMenuText('mn1_searchsimilar', 'Search Similar', undefined, undefined, 1);
|
|
9366
|
+
html += this.getMenuText('mn1_searchsimilar', 'Search Similar' + me.htmlCls.wifiStr, undefined, undefined, 1);
|
|
9362
9367
|
html += "<ul>";
|
|
9363
9368
|
html += this.getLink('mn1_vastplus', 'NCBI VAST+ (PDB Complex)' + me.htmlCls.wifiStr, undefined, 2);
|
|
9364
9369
|
html += this.getLink('mn1_vast', 'NCBI VAST (PDB Chain)' + me.htmlCls.wifiStr, undefined, 2);
|
|
@@ -9379,7 +9384,6 @@ class SetMenu {
|
|
|
9379
9384
|
|
|
9380
9385
|
html += this.getLink('mn1_afid', 'UniProt ID ' + me.htmlCls.wifiStr, undefined, 3);
|
|
9381
9386
|
html += this.getLink('mn1_refseqid', 'NCBI Protein Accession ' + me.htmlCls.wifiStr, undefined, 3);
|
|
9382
|
-
// html += this.getLink('mn1_proteinname', 'Protein Name ' + me.htmlCls.wifiStr, undefined, 3);
|
|
9383
9387
|
html += "</ul>";
|
|
9384
9388
|
|
|
9385
9389
|
|
|
@@ -9421,10 +9425,11 @@ class SetMenu {
|
|
|
9421
9425
|
html += "</ul>";
|
|
9422
9426
|
html += "</li>";
|
|
9423
9427
|
|
|
9424
|
-
html += this.getMenuText('mn1_fold', 'AlphaFold/ESM', undefined, undefined, 1);
|
|
9428
|
+
//html += this.getMenuText('mn1_fold', 'AlphaFold/ESM', undefined, undefined, 1);
|
|
9429
|
+
html += this.getMenuText('mn1_fold', 'Predict by Seq.', undefined, undefined, 1);
|
|
9425
9430
|
html += "<ul>";
|
|
9426
|
-
html += this.getLink('mn1_alphafold', 'AlphaFold2 via ColabFold', undefined, 2);
|
|
9427
9431
|
html += this.getLink('mn1_esmfold', 'ESMFold', undefined, 2);
|
|
9432
|
+
html += this.getLink('mn1_alphafold', 'AlphaFold2 via ColabFold', undefined, 2);
|
|
9428
9433
|
html += "</ul>";
|
|
9429
9434
|
|
|
9430
9435
|
|
|
@@ -11242,6 +11247,9 @@ class Dialog {
|
|
|
11242
11247
|
if(me.cfg.align) {
|
|
11243
11248
|
position ={ my: "left top", at: "left top+90", of: "#" + me.pre + "canvas", collision: "none" };
|
|
11244
11249
|
}
|
|
11250
|
+
else if(id === me.pre + 'dl_mmdbafid') {
|
|
11251
|
+
position ={ my: "left top", at: "left top+130", of: "#" + me.pre + "canvas", collision: "none" };
|
|
11252
|
+
}
|
|
11245
11253
|
else {
|
|
11246
11254
|
position ={ my: "left top", at: "left top+50", of: "#" + me.pre + "canvas", collision: "none" };
|
|
11247
11255
|
}
|
|
@@ -11775,7 +11783,7 @@ class SetDialog {
|
|
|
11775
11783
|
|
|
11776
11784
|
html += me.htmlCls.divStr + "dl_esmfold' style='max-width:600px;' class='" + dialogClass + "'>";
|
|
11777
11785
|
html += this.addNotebookTitle('dl_esmfold', 'Sequence to structure prediction with ESMFold');
|
|
11778
|
-
html += "The sequence to structure prediction is done via <a href='https://esmatlas.com/resources?action=fold' target='_blank'>ESM Metagenomic Atlas</a>.
|
|
11786
|
+
html += "The sequence to structure prediction is done via <a href='https://esmatlas.com/resources?action=fold' target='_blank'>ESM Metagenomic Atlas</a>. The sequence should be less than 400 characters. For any sequence longer than 400, please see the discussion <a href='https://github.com/facebookresearch/esm/issues/21' target='_blank'>here</a>.<br><br> ";
|
|
11779
11787
|
html += "FASTA sequence: <br><textarea id='" + me.pre + "esmfold_fasta' rows='5' style='width: 100%; height: " +(me.htmlCls.LOG_HEIGHT) + "px; padding: 0px; border: 0px;'></textarea><br><br>";
|
|
11780
11788
|
html += me.htmlCls.buttonStr + "run_esmfold'>ESMFold</button> ";
|
|
11781
11789
|
html += "</div>";
|
|
@@ -11787,10 +11795,10 @@ class SetDialog {
|
|
|
11787
11795
|
html += me.htmlCls.buttonStr + "applyyournote'>Save</button>";
|
|
11788
11796
|
html += "</div>";
|
|
11789
11797
|
|
|
11790
|
-
html += me.htmlCls.divStr + "
|
|
11791
|
-
html += this.addNotebookTitle('
|
|
11792
|
-
html += "Protein
|
|
11793
|
-
html += me.htmlCls.buttonStr + "
|
|
11798
|
+
html += me.htmlCls.divStr + "dl_proteinname' class='" + dialogClass + "'>";
|
|
11799
|
+
html += this.addNotebookTitle('dl_proteinname', 'Please input a protein/gene name');
|
|
11800
|
+
html += "Protein/Gene name: " + me.htmlCls.inputTextStr + "id='" + me.pre + "proteinname' value='TP53' size=8> ";
|
|
11801
|
+
html += me.htmlCls.buttonStr + "reload_proteinname'>Search</button>";
|
|
11794
11802
|
html += "</div>";
|
|
11795
11803
|
|
|
11796
11804
|
html += me.htmlCls.divStr + "dl_cid' class='" + dialogClass + "'>";
|
|
@@ -13780,12 +13788,19 @@ class Events {
|
|
|
13780
13788
|
}
|
|
13781
13789
|
|
|
13782
13790
|
let esmfold_fasta = $("#" + me.pre + "esmfold_fasta").val();
|
|
13783
|
-
let pdbid;
|
|
13791
|
+
let pdbid = 'stru--';
|
|
13784
13792
|
|
|
13785
13793
|
if(esmfold_fasta.indexOf('>') != -1) { //FASTA with header
|
|
13786
13794
|
let pos = esmfold_fasta.indexOf('\n');
|
|
13787
13795
|
ic.esmTitle = esmfold_fasta.substr(1, pos - 1).trim();
|
|
13788
|
-
|
|
13796
|
+
if(ic.esmTitle.indexOf('|') != -1) { // uniprot
|
|
13797
|
+
let idArray = ic.esmTitle.split('|');
|
|
13798
|
+
pdbid = (idArray.length > 2) ? idArray[1] : ic.esmTitle;
|
|
13799
|
+
}
|
|
13800
|
+
else { // NCBI
|
|
13801
|
+
pdbid = (ic.esmTitle.indexOf(' ') != -1) ? ic.esmTitle.substr(0, ic.esmTitle.indexOf(' ')) : ic.esmTitle;
|
|
13802
|
+
}
|
|
13803
|
+
|
|
13789
13804
|
if(pdbid.length < 6) pdbid = pdbid.padEnd(6, '-');
|
|
13790
13805
|
|
|
13791
13806
|
esmfold_fasta = esmfold_fasta.substr(pos + 1);
|
|
@@ -13794,8 +13809,8 @@ class Events {
|
|
|
13794
13809
|
// remove new lines
|
|
13795
13810
|
esmfold_fasta = esmfold_fasta.replace(/\s/g, '');
|
|
13796
13811
|
|
|
13797
|
-
if(esmfold_fasta.length >
|
|
13798
|
-
alert("Your
|
|
13812
|
+
if(esmfold_fasta.length > 400) {
|
|
13813
|
+
alert("Your sequence is larger than 400 characters. Please consider to split it as described at https://github.com/facebookresearch/esm/issues/21.");
|
|
13799
13814
|
return;
|
|
13800
13815
|
}
|
|
13801
13816
|
|
|
@@ -13804,6 +13819,11 @@ class Events {
|
|
|
13804
13819
|
thisClass.setLogCmd("Run ESMFold with the sequence " + esmfold_fasta, false);
|
|
13805
13820
|
|
|
13806
13821
|
let esmData = await me.getAjaxPostPromise(esmUrl, esmfold_fasta, true, alertMess, undefined, true, 'text');
|
|
13822
|
+
|
|
13823
|
+
ic.bInputfile = true;
|
|
13824
|
+
ic.InputfileType = 'pdb';
|
|
13825
|
+
ic.InputfileData = (ic.InputfileData) ? ic.InputfileData + '\nENDMDL\n' + esmData : esmData;
|
|
13826
|
+
|
|
13807
13827
|
ic.bEsmfold = true;
|
|
13808
13828
|
let bAppend = true;
|
|
13809
13829
|
await ic.pdbParserCls.loadPdbData(esmData, pdbid, undefined, bAppend, undefined, undefined, undefined, ic.bEsmfold);
|
|
@@ -13842,12 +13862,12 @@ class Events {
|
|
|
13842
13862
|
});
|
|
13843
13863
|
|
|
13844
13864
|
|
|
13845
|
-
me.myEventCls.onIds("#" + me.pre + "
|
|
13865
|
+
me.myEventCls.onIds("#" + me.pre + "reload_proteinname", "click", function(e) { let ic = me.icn3d;
|
|
13846
13866
|
e.preventDefault();
|
|
13847
13867
|
if(!me.cfg.notebook) dialog.dialog( "close" );
|
|
13848
|
-
thisClass.setLogCmd("load
|
|
13868
|
+
thisClass.setLogCmd("load protein " + $("#" + me.pre + "proteinname").val(), false);
|
|
13849
13869
|
let urlTarget = (ic.structures && Object.keys(ic.structures).length > 0) ? '_blank' : '_self';
|
|
13850
|
-
window.open(hostUrl + '?
|
|
13870
|
+
window.open(hostUrl + '?protein=' + $("#" + me.pre + "proteinname").val(), urlTarget);
|
|
13851
13871
|
});
|
|
13852
13872
|
|
|
13853
13873
|
me.myEventCls.onIds("#" + me.pre + "reload_refseq", "click", function(e) { let ic = me.icn3d;
|
|
@@ -15429,8 +15449,17 @@ class AlignSeq {
|
|
|
15429
15449
|
|
|
15430
15450
|
let chainHash = {};
|
|
15431
15451
|
if (alignChainArray !== undefined) {
|
|
15452
|
+
|
|
15432
15453
|
for (let i = 0, il = alignChainArray.length; i < il; ++i) {
|
|
15433
|
-
|
|
15454
|
+
let chainid = alignChainArray[i];
|
|
15455
|
+
|
|
15456
|
+
// make sure some residues are aligned
|
|
15457
|
+
if(ic.alnChainsSeq[chainid] && ic.alnChainsSeq[chainid].length > 0) {
|
|
15458
|
+
chainHash[chainid] = 1;
|
|
15459
|
+
}
|
|
15460
|
+
else {
|
|
15461
|
+
return { "sequencesHtml": sequencesHtml, "maxSeqCnt": maxSeqCnt };
|
|
15462
|
+
}
|
|
15434
15463
|
}
|
|
15435
15464
|
}
|
|
15436
15465
|
|
|
@@ -15445,7 +15474,7 @@ class AlignSeq {
|
|
|
15445
15474
|
let bHighlightChain;
|
|
15446
15475
|
let index = 0, prevResCnt2nd = 0;
|
|
15447
15476
|
let firstChainid, oriChainid;
|
|
15448
|
-
|
|
15477
|
+
console.log("alignChainArray.length: " + alignChainArray.length);
|
|
15449
15478
|
// for(let i in ic.alnChains) {
|
|
15450
15479
|
for (let m = 0, ml = alignChainArray.length; m < ml; ++m) {
|
|
15451
15480
|
let i = alignChainArray[m];
|
|
@@ -15622,7 +15651,7 @@ class AlignSeq {
|
|
|
15622
15651
|
//sequencesHtml += "<div class='icn3d-residueLine' style='white-space:nowrap;'><div class='icn3d-seqTitle' chain='" + i + "' anno='" + j + "'>" + annotitle + "</div>" + resiHtmlArray[j] + "<br/></div>";
|
|
15623
15652
|
sequencesHtml += "<div class='icn3d-residueLine' style='white-space:nowrap;'><div class='icn3d-seqTitle' anno='" + j + "'>" + annotitle + "</div>" + resiHtmlArray[j] + "<br/></div>";
|
|
15624
15653
|
}
|
|
15625
|
-
|
|
15654
|
+
|
|
15626
15655
|
sequencesHtml += '<div class="icn3d-seqTitle icn3d-link icn3d-blue" chain="' + i + '" anno="sequence" title="' + title + '">' + chainidTmp + ' </div><span class="icn3d-seqLine">' + seqHtml + '</span><br/>';
|
|
15627
15656
|
|
|
15628
15657
|
if (index > 0) prevResCnt2nd += seqLength;
|
|
@@ -36461,13 +36490,13 @@ class SetOption {
|
|
|
36461
36490
|
html += "<div>";
|
|
36462
36491
|
|
|
36463
36492
|
if(colorType == 'normalized hydrophobic') {
|
|
36464
|
-
html += "Dark green (W, F,
|
|
36465
|
-
html += "Light green (
|
|
36493
|
+
html += "Dark green (W, F, L, I, Y, M, V, C): Hydrophobic<br>";
|
|
36494
|
+
html += "Light green (P, T, S, A, Q, N, G): Polar<br>";
|
|
36466
36495
|
html += "Grey: Charged, not hydrophobic<br><br>";
|
|
36467
36496
|
}
|
|
36468
36497
|
else {
|
|
36469
|
-
html += "Green (W, F,
|
|
36470
|
-
html += "Yellow (
|
|
36498
|
+
html += "Green (W, F, L, I, Y, M, V, C): Hydrophobic<br>";
|
|
36499
|
+
html += "Yellow (P, T, S, A, Q, N, G): Polar<br>";
|
|
36471
36500
|
html += "Red: Negatively Charged<br>";
|
|
36472
36501
|
html += "Blue: Positively Charged<br><br>";
|
|
36473
36502
|
}
|
|
@@ -40026,7 +40055,7 @@ class Domain3d {
|
|
|
40026
40055
|
return {subdomains: subdomains, substruct: substruct, pos2resi: pos2resi };
|
|
40027
40056
|
} // end c2b_NewSplitChain
|
|
40028
40057
|
|
|
40029
|
-
getDomainJsonForAlign(atoms) { let ic = this.icn3d, me = ic.icn3dui;
|
|
40058
|
+
getDomainJsonForAlign(atoms, bForceOneDomain) { let ic = this.icn3d, me = ic.icn3dui;
|
|
40030
40059
|
let result = this.c2b_NewSplitChain(atoms);
|
|
40031
40060
|
|
|
40032
40061
|
let subdomains = result.subdomains;
|
|
@@ -40037,6 +40066,8 @@ class Domain3d {
|
|
|
40037
40066
|
let residueArray = Object.keys(residueHash);
|
|
40038
40067
|
let chnid = residueArray[0].substr(0, residueArray[0].lastIndexOf('_'));
|
|
40039
40068
|
|
|
40069
|
+
if(bForceOneDomain) subdomains = [];
|
|
40070
|
+
|
|
40040
40071
|
//the whole structure is also considered as a large domain
|
|
40041
40072
|
//if(subdomains.length == 0) {
|
|
40042
40073
|
//subdomains.push([parseInt(ic.chainsSeq[chnid][0].resi), parseInt(ic.chainsSeq[chnid][ic.chainsSeq[chnid].length - 1].resi)]);
|
|
@@ -41894,7 +41925,7 @@ class ShowAnno {
|
|
|
41894
41925
|
dataObj['targets'] = me.cfg.blast_rep_id + ':' + target_from_to_array.join(':');
|
|
41895
41926
|
}
|
|
41896
41927
|
|
|
41897
|
-
// get
|
|
41928
|
+
// get sequence
|
|
41898
41929
|
if(ic.blastAcxn) {
|
|
41899
41930
|
let chainid = me.cfg.afid + '_A';
|
|
41900
41931
|
let seq = '';
|
|
@@ -41925,7 +41956,7 @@ class ShowAnno {
|
|
|
41925
41956
|
idArray.push(me.cfg.query_id);
|
|
41926
41957
|
}
|
|
41927
41958
|
|
|
41928
|
-
// get
|
|
41959
|
+
// get sequence
|
|
41929
41960
|
if(ic.blastAcxn) {
|
|
41930
41961
|
let chainid = me.cfg.afid + '_A';
|
|
41931
41962
|
let seq = '';
|
|
@@ -42252,7 +42283,7 @@ class ShowAnno {
|
|
|
42252
42283
|
let data = ic.seqStructAlignData;
|
|
42253
42284
|
if(data.data !== undefined) {
|
|
42254
42285
|
query = data.data[0].query;
|
|
42255
|
-
// if target is
|
|
42286
|
+
// if target is sequence, the key is not chnid
|
|
42256
42287
|
//target = data.data[0].targets[chnid];
|
|
42257
42288
|
let keys = Object.keys(data.data[0].targets);
|
|
42258
42289
|
target = data.data[0].targets[keys[0]];
|
|
@@ -42264,7 +42295,7 @@ class ShowAnno {
|
|
|
42264
42295
|
evalue = target.scores.e_value.toPrecision(2);
|
|
42265
42296
|
if(evalue > 1e-200) evalue = parseFloat(evalue).toExponential();
|
|
42266
42297
|
target.scores.bit_score;
|
|
42267
|
-
// if target is
|
|
42298
|
+
// if target is sequence, the key is not chnid
|
|
42268
42299
|
// targetSeq = data.targets[chnid].seqdata;
|
|
42269
42300
|
let keys = Object.keys(data.targets);
|
|
42270
42301
|
targetSeq = data.targets[keys[0]].seqdata;
|
|
@@ -43708,7 +43739,7 @@ class HlSeq {
|
|
|
43708
43739
|
//});
|
|
43709
43740
|
|
|
43710
43741
|
// remove possible text selection
|
|
43711
|
-
// the following code caused the scroll of
|
|
43742
|
+
// the following code caused the scroll of sequence window to the top, remove it for now
|
|
43712
43743
|
/*
|
|
43713
43744
|
if(window.getSelection) {
|
|
43714
43745
|
if(window.getSelection().empty) { // Chrome
|
|
@@ -45296,26 +45327,22 @@ class LineGraph {
|
|
|
45296
45327
|
|
|
45297
45328
|
let pdbAjaxArray = [];
|
|
45298
45329
|
for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
|
|
45299
|
-
//let urlpdb = me.htmlCls.baseUrl + "
|
|
45300
|
-
let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?
|
|
45330
|
+
//let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refpdbid=" + ic.refpdbArray[k];
|
|
45331
|
+
let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refjsonid=" + ic.refpdbArray[k];
|
|
45301
45332
|
|
|
45302
45333
|
let pdbAjax = me.getAjaxPromise(urlpdb, 'text');
|
|
45303
45334
|
|
|
45304
45335
|
pdbAjaxArray.push(pdbAjax);
|
|
45305
45336
|
}
|
|
45306
45337
|
|
|
45307
|
-
try {
|
|
45338
|
+
// try {
|
|
45308
45339
|
let allPromise = Promise.allSettled(pdbAjaxArray);
|
|
45309
45340
|
ic.pdbDataArray = await allPromise;
|
|
45310
45341
|
await thisClass.parseRefPdbData(ic.pdbDataArray);
|
|
45311
|
-
}
|
|
45312
|
-
catch(err) {
|
|
45313
|
-
if(!me.bNode) alert("Error in retrieveing reference PDB data...");
|
|
45314
|
-
//alert("Error in retrieveing reference PDB data...");
|
|
45315
|
-
return;
|
|
45316
|
-
}
|
|
45317
|
-
|
|
45318
45342
|
// }
|
|
45343
|
+
// catch(err) {
|
|
45344
|
+
// if(!me.bNode) alert("Error in retrieveing reference PDB data...");
|
|
45345
|
+
// return;
|
|
45319
45346
|
// }
|
|
45320
45347
|
}
|
|
45321
45348
|
|
|
@@ -45327,7 +45354,8 @@ class LineGraph {
|
|
|
45327
45354
|
let ajaxArray = [];
|
|
45328
45355
|
let domainidpairArray = [];
|
|
45329
45356
|
|
|
45330
|
-
|
|
45357
|
+
me.htmlCls.baseUrl + "tmalign/tmalign.cgi";
|
|
45358
|
+
let urlalign = me.htmlCls.baseUrl + "vastdyn/vastdyn.cgi";
|
|
45331
45359
|
|
|
45332
45360
|
if(!ic.resid2domainid) ic.resid2domainid = {};
|
|
45333
45361
|
//ic.resid2domainid = {};
|
|
@@ -45407,6 +45435,9 @@ class LineGraph {
|
|
|
45407
45435
|
|
|
45408
45436
|
for(let k = 0, kl = domainAtomsArray.length; k < kl; ++k) {
|
|
45409
45437
|
let pdb_target = ic.saveFileCls.getAtomPDB(domainAtomsArray[k], undefined, undefined, undefined, undefined, struct);
|
|
45438
|
+
let bForceOneDomain = true;
|
|
45439
|
+
let jsonStr_t = ic.domain3dCls.getDomainJsonForAlign(domainAtomsArray[k], bForceOneDomain);
|
|
45440
|
+
|
|
45410
45441
|
// ig strand for any subset will have the same k, use the number of residue to separate them
|
|
45411
45442
|
let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtomsArray[k]);
|
|
45412
45443
|
let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtomsArray[k]);
|
|
@@ -45416,14 +45447,19 @@ class LineGraph {
|
|
|
45416
45447
|
ic.domainid2pdb[domainid] = pdb_target;
|
|
45417
45448
|
|
|
45418
45449
|
for(let index = 0, indexl = dataArray.length; index < indexl; ++index) {
|
|
45419
|
-
let struct2 = ic.defaultPdbId + index;
|
|
45420
|
-
//let pdb_query =
|
|
45421
|
-
let
|
|
45422
|
-
|
|
45423
|
-
|
|
45424
|
-
|
|
45425
|
-
|
|
45426
|
-
let
|
|
45450
|
+
// let struct2 = ic.defaultPdbId + index;
|
|
45451
|
+
// let pdb_query = dataArray[index].value; //[0];
|
|
45452
|
+
// let header = 'HEADER ' + struct2 + '\n';
|
|
45453
|
+
// pdb_query = header + pdb_query;
|
|
45454
|
+
let jsonStr_q = dataArray[index].value; //[0];
|
|
45455
|
+
|
|
45456
|
+
// TM-align is not good when you align a full structure with the strand-only structure. VAST is better in this case.
|
|
45457
|
+
// let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": ic.refpdbArray[index]};
|
|
45458
|
+
// let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
|
|
45459
|
+
|
|
45460
|
+
let dataObj = {'domains1': jsonStr_q, 'domains2': jsonStr_t};
|
|
45461
|
+
let alignAjax = me.getAjaxPostPromise(urlalign, dataObj);
|
|
45462
|
+
|
|
45427
45463
|
ajaxArray.push(alignAjax);
|
|
45428
45464
|
|
|
45429
45465
|
domainidpairArray.push(domainid + "|" + ic.refpdbArray[index]);
|
|
@@ -45502,6 +45538,7 @@ class LineGraph {
|
|
|
45502
45538
|
let thisClass = this;
|
|
45503
45539
|
|
|
45504
45540
|
let tmscoreThreshold = 0.4; // 0.4; //0.5;
|
|
45541
|
+
let rmsdThreshold = 10;
|
|
45505
45542
|
|
|
45506
45543
|
// find the best alignment for each chain
|
|
45507
45544
|
let domainid2score = {}, domainid2segs = {}, chainid2segs = {};
|
|
@@ -45529,8 +45566,15 @@ class LineGraph {
|
|
|
45529
45566
|
|
|
45530
45567
|
if(queryData.length == 0) continue;
|
|
45531
45568
|
|
|
45532
|
-
if(
|
|
45533
|
-
|
|
45569
|
+
if(!bRound1) {
|
|
45570
|
+
if(queryData[0].score < tmscoreThreshold || queryData[0].num_res < minResidues) {
|
|
45571
|
+
continue;
|
|
45572
|
+
}
|
|
45573
|
+
}
|
|
45574
|
+
else {
|
|
45575
|
+
if(queryData[0].super_rmsd > rmsdThreshold || queryData[0].num_res < minResidues) {
|
|
45576
|
+
continue;
|
|
45577
|
+
}
|
|
45534
45578
|
}
|
|
45535
45579
|
|
|
45536
45580
|
//let domainid_index = domainidpairArray[i].split(',');
|
|
@@ -45539,44 +45583,63 @@ class LineGraph {
|
|
|
45539
45583
|
let refpdbname = domainidpairArray[i].substr(domainidpairArray[i].indexOf('|') + 1);
|
|
45540
45584
|
//let chainid = domainid.split('-')[0];
|
|
45541
45585
|
|
|
45542
|
-
if(!
|
|
45586
|
+
if(!bRound1) {
|
|
45587
|
+
if(!me.bNode) console.log("refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
|
|
45588
|
+
}
|
|
45589
|
+
else {
|
|
45590
|
+
if(!me.bNode) console.log("refpdbname " + refpdbname + " RMSD: " + queryData[0].super_rmsd);
|
|
45591
|
+
}
|
|
45543
45592
|
|
|
45544
45593
|
// Ig-like domains: B (2150, 2150a, 2150b), C (3150, 3250), E (7150, 7250), F (8150, 8250) strands
|
|
45545
45594
|
// Ig domain may require G (7050). But we'll leave that out for now.
|
|
45546
|
-
|
|
45547
|
-
|
|
45548
|
-
let
|
|
45595
|
+
if(!bRound1) {
|
|
45596
|
+
let bBstrand = false, bCstrand = false, bEstrand = false, bFstrand = false;
|
|
45597
|
+
for(let i = 0, il = queryData[0].segs.length; i < il; ++i) {
|
|
45598
|
+
let seg = queryData[0].segs[i];
|
|
45549
45599
|
|
|
45550
|
-
|
|
45551
|
-
|
|
45552
|
-
|
|
45553
|
-
|
|
45554
|
-
|
|
45555
|
-
|
|
45556
|
-
|
|
45557
|
-
|
|
45558
|
-
|
|
45559
|
-
|
|
45560
|
-
|
|
45600
|
+
if(seg.q_start.indexOf('2150') != -1 || seg.q_start.indexOf('2250') != -1) {
|
|
45601
|
+
bBstrand = true;
|
|
45602
|
+
}
|
|
45603
|
+
else if(seg.q_start.indexOf('3150') != -1 || seg.q_start.indexOf('3250') != -1) {
|
|
45604
|
+
bCstrand = true;
|
|
45605
|
+
}
|
|
45606
|
+
else if(seg.q_start.indexOf('7150') != -1 || seg.q_start.indexOf('7250') != -1) {
|
|
45607
|
+
bEstrand = true;
|
|
45608
|
+
}
|
|
45609
|
+
else if(seg.q_start.indexOf('8150') != -1 || seg.q_start.indexOf('8250') != -1) {
|
|
45610
|
+
bFstrand = true;
|
|
45611
|
+
}
|
|
45612
|
+
|
|
45613
|
+
//if(bBstrand && bCstrand && bEstrand && bFstrand && bGstrand) break;
|
|
45614
|
+
if(bBstrand && bCstrand && bEstrand && bFstrand) break;
|
|
45561
45615
|
}
|
|
45562
45616
|
|
|
45563
|
-
//if(bBstrand && bCstrand && bEstrand && bFstrand && bGstrand)
|
|
45564
|
-
if(bBstrand && bCstrand && bEstrand && bFstrand)
|
|
45617
|
+
//if(!(bBstrand && bCstrand && bEstrand && bFstrand && bGstrand)) continue;
|
|
45618
|
+
if(!(bBstrand && bCstrand && bEstrand && bFstrand)) {
|
|
45619
|
+
if(!me.bNode) console.log("Some of the Ig strands B, C, E, F are missing in the domain " + domainid + "...");
|
|
45620
|
+
continue;
|
|
45621
|
+
}
|
|
45565
45622
|
}
|
|
45566
45623
|
|
|
45567
|
-
|
|
45568
|
-
|
|
45569
|
-
|
|
45570
|
-
|
|
45624
|
+
if(!bRound1) {
|
|
45625
|
+
if(!domainid2score.hasOwnProperty(domainid) || queryData[0].score > domainid2score[domainid]) {
|
|
45626
|
+
domainid2score[domainid] = queryData[0].score;
|
|
45627
|
+
|
|
45628
|
+
ic.domainid2refpdbname[domainid] = refpdbname;
|
|
45629
|
+
domainid2segs[domainid] = queryData[0].segs;
|
|
45630
|
+
ic.domainid2ig2kabat[domainid] = queryData[0].ig2kabat;
|
|
45631
|
+
ic.domainid2ig2imgt[domainid] = queryData[0].ig2imgt;
|
|
45632
|
+
}
|
|
45571
45633
|
}
|
|
45572
|
-
|
|
45573
|
-
|
|
45574
|
-
|
|
45575
|
-
|
|
45576
|
-
|
|
45577
|
-
|
|
45578
|
-
|
|
45579
|
-
|
|
45634
|
+
else {
|
|
45635
|
+
if(!domainid2score.hasOwnProperty(domainid) || queryData[0].super_rmsd < domainid2score[domainid]) {
|
|
45636
|
+
domainid2score[domainid] = queryData[0].super_rmsd;
|
|
45637
|
+
|
|
45638
|
+
ic.domainid2refpdbname[domainid] = refpdbname;
|
|
45639
|
+
domainid2segs[domainid] = queryData[0].segs;
|
|
45640
|
+
ic.domainid2ig2kabat[domainid] = queryData[0].ig2kabat;
|
|
45641
|
+
ic.domainid2ig2imgt[domainid] = queryData[0].ig2imgt;
|
|
45642
|
+
}
|
|
45580
45643
|
}
|
|
45581
45644
|
}
|
|
45582
45645
|
|
|
@@ -48993,7 +49056,7 @@ class ChainalignParser {
|
|
|
48993
49056
|
let hAtomsAll = {};
|
|
48994
49057
|
|
|
48995
49058
|
if(ic.bFullUi && ic.q_rotation !== undefined && !me.cfg.resnum && !me.cfg.resdef) {
|
|
48996
|
-
// set multiple
|
|
49059
|
+
// set multiple sequence alignment from ic.qt_start_end
|
|
48997
49060
|
hAtomsAll = this.setMsa(chainidArray);
|
|
48998
49061
|
}
|
|
48999
49062
|
|
|
@@ -49053,7 +49116,7 @@ class ChainalignParser {
|
|
|
49053
49116
|
ic.qt_start_end = [];
|
|
49054
49117
|
|
|
49055
49118
|
let mmdbid2cnt = {}, mmdbidpairHash = {};
|
|
49056
|
-
|
|
49119
|
+
|
|
49057
49120
|
let bFoundAlignment = false;
|
|
49058
49121
|
for(let i = 0, il = dataArray.length; i < il; ++i) {
|
|
49059
49122
|
// let align = (me.bNode) ? dataArray[i] : dataArray[i].value;//[0];
|
|
@@ -49533,6 +49596,7 @@ class ChainalignParser {
|
|
|
49533
49596
|
|
|
49534
49597
|
processAlign(align, index, queryData, bEqualMmdbid, bEqualChain, bNoAlert) { let ic = this.icn3d, me = ic.icn3dui;
|
|
49535
49598
|
let bAligned = false;
|
|
49599
|
+
|
|
49536
49600
|
if((!align || align.length == 0) && !bNoAlert) {
|
|
49537
49601
|
let serverName = (me.cfg.aligntool == 'tmalign') ? 'TM-align' : 'VAST';
|
|
49538
49602
|
|
|
@@ -49717,14 +49781,14 @@ class ChainalignParser {
|
|
|
49717
49781
|
ic.ParserUtilsCls.showLoading();
|
|
49718
49782
|
|
|
49719
49783
|
let allPromise = Promise.allSettled(ajaxArray);
|
|
49720
|
-
try {
|
|
49784
|
+
// try {
|
|
49721
49785
|
let dataArray = await allPromise;
|
|
49722
49786
|
await thisClass.parseMMdbAfData(dataArray, structArray, bQuery, vastplusAtype);
|
|
49723
49787
|
if(vastplusAtype === undefined) ic.ParserUtilsCls.hideLoading();
|
|
49724
|
-
}
|
|
49725
|
-
catch(err) {
|
|
49726
|
-
|
|
49727
|
-
}
|
|
49788
|
+
// }
|
|
49789
|
+
// catch(err) {
|
|
49790
|
+
// alert("There are some problems in retrieving the coordinates...");
|
|
49791
|
+
// }
|
|
49728
49792
|
// });
|
|
49729
49793
|
|
|
49730
49794
|
// return ic.deferredMmdbaf.promise();
|
|
@@ -50363,6 +50427,73 @@ class MmdbParser {
|
|
|
50363
50427
|
//await ic.loadScriptCls.loadScript(me.cfg.command, undefined, true);
|
|
50364
50428
|
}
|
|
50365
50429
|
|
|
50430
|
+
async downloadProteinname(protein) { let ic = this.icn3d, me = ic.icn3dui;
|
|
50431
|
+
me.icn3d.bCid = undefined;
|
|
50432
|
+
|
|
50433
|
+
// get RefSeq ID from protein name
|
|
50434
|
+
let url = me.htmlCls.baseUrl + "vastdyn/vastdyn.cgi?protein2acc=" + protein;
|
|
50435
|
+
|
|
50436
|
+
let accJson = await me.getAjaxPromise(url, 'jsonp');
|
|
50437
|
+
|
|
50438
|
+
let accArray = accJson.acc;
|
|
50439
|
+
|
|
50440
|
+
if(accArray.length == 0) {
|
|
50441
|
+
if(!me.bNode) alert('The protein/gene name ' + protein + ' can not be mapped to RefSeq proteins...');
|
|
50442
|
+
return;
|
|
50443
|
+
}
|
|
50444
|
+
|
|
50445
|
+
let ajaxArray = [];
|
|
50446
|
+
for(let index = 0, indexl = accArray.length; index < indexl; ++index) {
|
|
50447
|
+
let refseqid = accArray[index];
|
|
50448
|
+
url = me.htmlCls.baseUrl + "vastdyn/vastdyn.cgi?refseq2uniprot=" + refseqid;
|
|
50449
|
+
|
|
50450
|
+
let ajax = me.getAjaxPromise(url, 'jsonp');
|
|
50451
|
+
|
|
50452
|
+
ajaxArray.push(ajax);
|
|
50453
|
+
}
|
|
50454
|
+
|
|
50455
|
+
let allPromise = Promise.allSettled(ajaxArray);
|
|
50456
|
+
let dataArray = await allPromise;
|
|
50457
|
+
|
|
50458
|
+
ajaxArray = [];
|
|
50459
|
+
let afidArray = [];
|
|
50460
|
+
for(let i = 0, il = dataArray.length; i < il; ++i) {
|
|
50461
|
+
let data = dataArray[i].value;
|
|
50462
|
+
|
|
50463
|
+
if(data && data.uniprot) {
|
|
50464
|
+
let afid = data.uniprot;
|
|
50465
|
+
url = "https://alphafold.ebi.ac.uk/files/AF-" + afid + "-F1-model_" + ic.AFUniprotVersion + ".pdb";
|
|
50466
|
+
ic.ParserUtilsCls.setYourNote(me.cfg.protein + '(NCBI Protein/Gene) in iCn3D');
|
|
50467
|
+
|
|
50468
|
+
let ajax = me.getAjaxPromise(url, 'text', true);
|
|
50469
|
+
ajaxArray.push(ajax);
|
|
50470
|
+
afidArray.push(afid);
|
|
50471
|
+
}
|
|
50472
|
+
}
|
|
50473
|
+
|
|
50474
|
+
allPromise = Promise.allSettled(ajaxArray);
|
|
50475
|
+
dataArray = await allPromise;
|
|
50476
|
+
|
|
50477
|
+
for(let i = 0, il = dataArray.length; i < il; ++i) {
|
|
50478
|
+
let data = dataArray[i].value;
|
|
50479
|
+
me.cfg.afid = afidArray[i];
|
|
50480
|
+
|
|
50481
|
+
if(data) {
|
|
50482
|
+
// add UniProt ID into the header
|
|
50483
|
+
let header = 'HEADER ' + me.cfg.afid + '\n';
|
|
50484
|
+
data = header + data;
|
|
50485
|
+
await ic.opmParserCls.parseAtomData(data, me.cfg.afid, undefined, 'pdb', undefined);
|
|
50486
|
+
|
|
50487
|
+
break;
|
|
50488
|
+
}
|
|
50489
|
+
}
|
|
50490
|
+
|
|
50491
|
+
if(!me.cfg.afid) {
|
|
50492
|
+
if(!me.bNode) alert('The protein/gene name ' + protein + ' can not be mapped to AlphaFold structures...');
|
|
50493
|
+
return;
|
|
50494
|
+
}
|
|
50495
|
+
}
|
|
50496
|
+
|
|
50366
50497
|
getNoData(mmdbid, bGi) { let ic = this.icn3d, me = ic.icn3dui;
|
|
50367
50498
|
if(bGi) {
|
|
50368
50499
|
alert("This gi " + mmdbid + " has no corresponding 3D structure...");
|
|
@@ -51439,6 +51570,9 @@ class PdbParser {
|
|
|
51439
51570
|
if(me.cfg.refseqid) {
|
|
51440
51571
|
ic.ParserUtilsCls.setYourNote(me.cfg.refseqid.toUpperCase() + '(NCBI Protein Acc.) in iCn3D');
|
|
51441
51572
|
}
|
|
51573
|
+
else if(me.cfg.protein) {
|
|
51574
|
+
ic.ParserUtilsCls.setYourNote(me.cfg.protein + '(NCBI Protein/Gene) in iCn3D');
|
|
51575
|
+
}
|
|
51442
51576
|
else {
|
|
51443
51577
|
ic.ParserUtilsCls.setYourNote(pdbid.toUpperCase() + '(AlphaFold) in iCn3D');
|
|
51444
51578
|
}
|
|
@@ -52374,6 +52508,7 @@ class RealignParser {
|
|
|
52374
52508
|
async realignOnStructAlign(bReverse) { let ic = this.icn3d, me = ic.icn3dui;
|
|
52375
52509
|
// each 3D domain should have at least 3 secondary structures
|
|
52376
52510
|
let minSseCnt = (me.cfg.aligntool != 'tmalign') ? 3 : 0;
|
|
52511
|
+
|
|
52377
52512
|
let struct2domain = {};
|
|
52378
52513
|
for(let struct in ic.structures) {
|
|
52379
52514
|
struct2domain[struct] = {};
|
|
@@ -52384,7 +52519,7 @@ class RealignParser {
|
|
|
52384
52519
|
let sseCnt = 0;
|
|
52385
52520
|
for(let serial in atoms) {
|
|
52386
52521
|
if(ic.atoms[serial].ssbegin) ++sseCnt;
|
|
52387
|
-
if(sseCnt
|
|
52522
|
+
if(sseCnt > minSseCnt) {
|
|
52388
52523
|
struct2domain[struct][chainid] = atoms;
|
|
52389
52524
|
break;
|
|
52390
52525
|
}
|
|
@@ -52416,7 +52551,6 @@ class RealignParser {
|
|
|
52416
52551
|
let chainid2 = chainidArray2[j];
|
|
52417
52552
|
|
|
52418
52553
|
let alignAjax;
|
|
52419
|
-
|
|
52420
52554
|
if(me.cfg.aligntool != 'tmalign') {
|
|
52421
52555
|
let jsonStr_q = ic.domain3dCls.getDomainJsonForAlign(struct2domain[struct2][chainid2]);
|
|
52422
52556
|
|
|
@@ -52455,7 +52589,7 @@ class RealignParser {
|
|
|
52455
52589
|
|
|
52456
52590
|
async realignOnStructAlignMsa(nameArray) { let ic = this.icn3d, me = ic.icn3dui;
|
|
52457
52591
|
// each 3D domain should have at least 3 secondary structures
|
|
52458
|
-
let minSseCnt = 3;
|
|
52592
|
+
let minSseCnt = (me.cfg.aligntool != 'tmalign') ? 3 : 0;
|
|
52459
52593
|
let chainid2domain = {};
|
|
52460
52594
|
|
|
52461
52595
|
for(let i = 0, il = nameArray.length; i < il; ++i) {
|
|
@@ -52464,7 +52598,7 @@ class RealignParser {
|
|
|
52464
52598
|
let sseCnt = 0;
|
|
52465
52599
|
for(let serial in atoms) {
|
|
52466
52600
|
if(ic.atoms[serial].ssbegin) ++sseCnt;
|
|
52467
|
-
if(sseCnt
|
|
52601
|
+
if(sseCnt > minSseCnt) {
|
|
52468
52602
|
chainid2domain[chainid] = atoms;
|
|
52469
52603
|
break;
|
|
52470
52604
|
}
|
|
@@ -54585,7 +54719,7 @@ class ParserUtils {
|
|
|
54585
54719
|
if(ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
|
|
54586
54720
|
}
|
|
54587
54721
|
|
|
54588
|
-
// Realign by
|
|
54722
|
+
// Realign by sequence alignment with the residues in "segment", i.e., transmembrane helix
|
|
54589
54723
|
let segment = data.segment; // e.g., " 361- 379 ( 359- 384)", the first range is trnasmembrane range,
|
|
54590
54724
|
//the second range is the range of the helix
|
|
54591
54725
|
let range = segment.replace(/ /gi, '').split('(')[0]; //361-379
|
|
@@ -56399,7 +56533,7 @@ class SetSeqAlign {
|
|
|
56399
56533
|
|
|
56400
56534
|
//mmdbid1 = ic.mmdbid_t;
|
|
56401
56535
|
mmdbid1 = chainidArray[0].substr(0, pos1); //.toUpperCase();
|
|
56402
|
-
mmdbid2 = chainid.substr(0, pos2); //.toUpperCase();
|
|
56536
|
+
mmdbid2 = chainid.substr(0, pos2); //.toUpperCase()mergeTwoSeqForAll;
|
|
56403
56537
|
|
|
56404
56538
|
chain1 = chainidArray[0].substr(pos1 + 1);
|
|
56405
56539
|
chain2 = chainid.substr(pos2 + 1);
|
|
@@ -56794,7 +56928,7 @@ class LoadPDB {
|
|
|
56794
56928
|
getStructureId(id, moleculeNum, bMutation) { let ic = this.icn3d; ic.icn3dui;
|
|
56795
56929
|
let structure = id;
|
|
56796
56930
|
|
|
56797
|
-
if(id == ic.defaultPdbId || bMutation) { // bMutation: side chain prediction
|
|
56931
|
+
if(id == ic.defaultPdbId || bMutation || ic.structures.hasOwnProperty(id)) { // bMutation: side chain prediction
|
|
56798
56932
|
structure = (moleculeNum === 1) ? id : id + moleculeNum.toString();
|
|
56799
56933
|
}
|
|
56800
56934
|
|
|
@@ -56862,7 +56996,7 @@ class LoadPDB {
|
|
|
56862
56996
|
let prevMissingChain = '';
|
|
56863
56997
|
let CSerial, prevCSerial, OSerial, prevOSerial;
|
|
56864
56998
|
|
|
56865
|
-
let bHeader = false;
|
|
56999
|
+
let bHeader = false, bFirstAtom = true;
|
|
56866
57000
|
|
|
56867
57001
|
for (let i in lines) {
|
|
56868
57002
|
let line = lines[i];
|
|
@@ -57023,7 +57157,11 @@ class LoadPDB {
|
|
|
57023
57157
|
ic.pmid = line.substr(19).trim();
|
|
57024
57158
|
}
|
|
57025
57159
|
} else if (record === 'ATOM ' || record === 'HETATM') {
|
|
57026
|
-
|
|
57160
|
+
if(bFirstAtom) {
|
|
57161
|
+
structure = this.getStructureId(id, moleculeNum, bMutation);
|
|
57162
|
+
|
|
57163
|
+
bFirstAtom = false;
|
|
57164
|
+
}
|
|
57027
57165
|
|
|
57028
57166
|
let alt = line.substr(16, 1);
|
|
57029
57167
|
//if (alt !== " " && alt !== "A") continue;
|
|
@@ -57914,7 +58052,7 @@ class Vastplus {
|
|
|
57914
58052
|
|
|
57915
58053
|
// reinitialize the alignment
|
|
57916
58054
|
$("#" + ic.pre + "dl_sequence2").html('');
|
|
57917
|
-
|
|
58055
|
+
|
|
57918
58056
|
for(let j = 0, jl = nodeArray.length; j < jl; ++j) {
|
|
57919
58057
|
let node = parseInt(nodeArray[j]);
|
|
57920
58058
|
let segs = queryDataArray[node][0].segs;
|
|
@@ -57991,7 +58129,7 @@ class Vastplus {
|
|
|
57991
58129
|
for(let j = 0, jl = nodeArray.length; j < jl; ++j) {
|
|
57992
58130
|
chainpairStr += chainidpairArray[parseInt(nodeArray[j])] + '; ';
|
|
57993
58131
|
}
|
|
57994
|
-
console.log("Selected the alignment: " + chainpairStr);
|
|
58132
|
+
if(!me.bNode) console.log("Selected the alignment: " + chainpairStr);
|
|
57995
58133
|
|
|
57996
58134
|
break;
|
|
57997
58135
|
}
|
|
@@ -58000,7 +58138,7 @@ class Vastplus {
|
|
|
58000
58138
|
for(let j = 0, jl = nodeArray.length; j < jl; ++j) {
|
|
58001
58139
|
chainpairStr += chainidpairArray[parseInt(nodeArray[j])] + '; ';
|
|
58002
58140
|
}
|
|
58003
|
-
console.log("skipped the alignment: " + chainpairStr);
|
|
58141
|
+
if(!me.bNode) console.log("skipped the alignment: " + chainpairStr);
|
|
58004
58142
|
}
|
|
58005
58143
|
}
|
|
58006
58144
|
}
|
|
@@ -61385,6 +61523,10 @@ class LoadScript {
|
|
|
61385
61523
|
me.cfg.refseqid = id;
|
|
61386
61524
|
await ic.mmdbParserCls.downloadRefseq(id);
|
|
61387
61525
|
}
|
|
61526
|
+
else if(command.indexOf('load protein') !== -1) {
|
|
61527
|
+
me.cfg.protein = id;
|
|
61528
|
+
await ic.mmdbParserCls.downloadProteinname(id);
|
|
61529
|
+
}
|
|
61388
61530
|
else if(command.indexOf('load seq_struct_ids ') !== -1) {
|
|
61389
61531
|
ic.bSmithwm = false;
|
|
61390
61532
|
ic.bLocalSmithwm = false;
|
|
@@ -62480,6 +62622,8 @@ class Selection {
|
|
|
62480
62622
|
ic.graphStr = this.getGraphDataForDisplayed();
|
|
62481
62623
|
}
|
|
62482
62624
|
|
|
62625
|
+
ic.saveFileCls.showTitle();
|
|
62626
|
+
|
|
62483
62627
|
// don not redraw graphs after the selection changes
|
|
62484
62628
|
/*
|
|
62485
62629
|
if(ic.bGraph) ic.drawGraphCls.drawGraph(ic.graphStr, ic.pre + 'dl_graph');
|
|
@@ -67719,7 +67863,7 @@ class ResizeCanvas {
|
|
|
67719
67863
|
//let itemArray = ['dl_selectannotations', 'dl_alignment', 'dl_2ddgm', 'dl_definedsets', 'dl_graph',
|
|
67720
67864
|
// 'dl_linegraph', 'dl_scatterplot', 'dl_contactmap', 'dl_allinteraction', 'dl_copyurl',
|
|
67721
67865
|
// 'dl_symmetry', 'dl_symd', 'dl_rmsd', 'dl_legend', 'dl_disttable'];
|
|
67722
|
-
let itemArray = ['dl_2ddgm', 'dl_2dctn', 'dl_alignment', 'dl_sequence2', 'dl_definedsets', 'dl_setsmenu', 'dl_command', 'dl_setoperations', 'dl_vast', 'dl_foldseek', 'dl_mmtfid', 'dl_pdbid', 'dl_afid', 'dl_opmid', 'dl_pdbfile', 'dl_pdbfile_app', 'dl_rescolorfile', 'dl_customcolor', 'dl_align', 'dl_alignaf', 'dl_chainalign', 'dl_chainalign2', 'dl_chainalign3', 'dl_mutation', 'dl_mol2file', 'dl_sdffile', 'dl_xyzfile', 'dl_afmapfile', 'dl_urlfile', 'dl_mmciffile', 'dl_mmcifid', 'dl_mmdbid', 'dl_mmdbafid', 'dl_blast_rep_id', 'dl_yournote', '
|
|
67866
|
+
let itemArray = ['dl_2ddgm', 'dl_2dctn', 'dl_alignment', 'dl_sequence2', 'dl_definedsets', 'dl_setsmenu', 'dl_command', 'dl_setoperations', 'dl_vast', 'dl_foldseek', 'dl_mmtfid', 'dl_pdbid', 'dl_afid', 'dl_opmid', 'dl_pdbfile', 'dl_pdbfile_app', 'dl_rescolorfile', 'dl_customcolor', 'dl_align', 'dl_alignaf', 'dl_chainalign', 'dl_chainalign2', 'dl_chainalign3', 'dl_mutation', 'dl_mol2file', 'dl_sdffile', 'dl_xyzfile', 'dl_afmapfile', 'dl_urlfile', 'dl_mmciffile', 'dl_mmcifid', 'dl_mmdbid', 'dl_mmdbafid', 'dl_blast_rep_id', 'dl_yournote', 'dl_proteinname', 'dl_refseqid', 'dl_cid', 'dl_pngimage', 'dl_state', 'dl_fixedversion', 'dl_selection', 'dl_dsn6', 'dl_dsn6url', 'dl_clr', 'dl_symmetry', 'dl_symd', 'dl_contact', 'dl_hbonds', 'dl_realign', 'dl_realignbystruct', 'dl_allinteracton', 'dl_interactionsorted', 'dl_linegraph', 'dl_linegraphcolor', 'dl_scatterplot', 'dl_scatterploitcolor', 'dl_contactmap', 'dl_alignerrormap', 'dl_elecmap2fofc', 'dl_elecmapfofc', 'dl_emmap', 'dl_aroundsphere', 'dl_adjustmem', 'dl_selectplane', 'dl_addlabel', 'dl_addlabelselection', 'dl_labelColor', 'dl_distance', 'dl_stabilizer', 'dl_disttwosets', 'dl_distmanysets', 'dl_stabilizer_rm', 'dl_thickness', 'dl_thickness2', 'dl_addtrack', 'dl_addtrack_tabs', 'dl_saveselection', 'dl_copyurl', 'dl_selectannotations', 'dl_annotations_tabs', 'dl_anno_view_tabs', 'dl_annotations', 'dl_graph', 'dl_svgcolor', 'dl_area', 'dl_colorbyarea', 'dl_rmsd', 'dl_buriedarea', 'dl_propbypercentout', 'dl_propbybfactor', 'dl_legend', 'dl_disttable'];
|
|
67723
67867
|
|
|
67724
67868
|
for(let i in itemArray) {
|
|
67725
67869
|
let item = itemArray[i];
|
|
@@ -68853,13 +68997,13 @@ class SaveFile {
|
|
|
68853
68997
|
|
|
68854
68998
|
//Show the title and PDB ID of the PDB structure at the beginning of the viewer.
|
|
68855
68999
|
showTitle() {var ic = this.icn3d, me = ic.icn3dui;
|
|
68856
|
-
if(ic.molTitle !== undefined && ic.molTitle !== '') {
|
|
68857
|
-
let title = ic.molTitle;
|
|
69000
|
+
// if(ic.molTitle !== undefined && ic.molTitle !== '') {
|
|
69001
|
+
let title = (ic.molTitle) ? ic.molTitle : '';
|
|
68858
69002
|
|
|
68859
69003
|
let titlelinkColor =(ic.opts['background'] == 'black') ? me.htmlCls.GREYD : 'black';
|
|
68860
69004
|
|
|
68861
69005
|
if(ic.inputid === undefined) {
|
|
68862
|
-
if(
|
|
69006
|
+
if(title.length > 40) title = title.substr(0, 40) + "...";
|
|
68863
69007
|
|
|
68864
69008
|
$("#" + ic.pre + "title").html(title);
|
|
68865
69009
|
}
|
|
@@ -68879,31 +69023,38 @@ class SaveFile {
|
|
|
68879
69023
|
|
|
68880
69024
|
$("#" + ic.pre + "title").html(title);
|
|
68881
69025
|
}
|
|
68882
|
-
else if(me.cfg.mmdbafid !== undefined) {
|
|
68883
|
-
let structureArray = Object.keys(ic.structures); //me.cfg.mmdbafid.split(',');
|
|
69026
|
+
else { //if(me.cfg.mmdbafid !== undefined) {
|
|
69027
|
+
//let structureArray = Object.keys(ic.structures); //me.cfg.mmdbafid.split(',');
|
|
69028
|
+
let structureArray = Object.keys(me.utilsCls.getStructures(ic.dAtoms));
|
|
69029
|
+
|
|
68884
69030
|
if(structureArray.length > 1) {
|
|
68885
|
-
title = 'Multiple structures: '
|
|
69031
|
+
title = 'Multiple structures: ';
|
|
69032
|
+
for(let i = 0, il = structureArray.length; i < il; ++i) {
|
|
69033
|
+
let url = (isNaN(structureArray[i]) && structureArray[i].length > 5) ? 'https://alphafold.ebi.ac.uk/entry/' + structureArray[i] : 'https://www.ncbi.nlm.nih.gov/structure/?term=' + structureArray[i];
|
|
69034
|
+
title += '<a href="' + url + '" style="color:' + titlelinkColor + '" target="_blank">' + structureArray[i] + '</a>';
|
|
69035
|
+
if(i < il - 1) title += ', ';
|
|
69036
|
+
}
|
|
68886
69037
|
$("#" + ic.pre + "title").html(title);
|
|
68887
69038
|
}
|
|
68888
69039
|
else if(structureArray.length == 1) {
|
|
68889
69040
|
//let url = this.getLinkToStructureSummary();
|
|
68890
|
-
let url = (isNaN(
|
|
69041
|
+
let url = (isNaN(structureArray[0]) && structureArray[0].length > 5) ? 'https://alphafold.ebi.ac.uk/entry/' + structureArray[0] : 'https://www.ncbi.nlm.nih.gov/structure/?term=' + structureArray[0];
|
|
68891
69042
|
|
|
68892
69043
|
this.setStructureTitle(url, title, titlelinkColor);
|
|
68893
69044
|
}
|
|
68894
69045
|
}
|
|
68895
|
-
else {
|
|
68896
|
-
|
|
68897
|
-
|
|
68898
|
-
}
|
|
68899
|
-
}
|
|
68900
|
-
else {
|
|
68901
|
-
|
|
68902
|
-
}
|
|
69046
|
+
// else {
|
|
69047
|
+
// let url = this.getLinkToStructureSummary();
|
|
69048
|
+
// this.setStructureTitle(url, title, titlelinkColor);
|
|
69049
|
+
// }
|
|
69050
|
+
// }
|
|
69051
|
+
// else {
|
|
69052
|
+
// $("#" + ic.pre + "title").html("");
|
|
69053
|
+
// }
|
|
68903
69054
|
}
|
|
68904
69055
|
|
|
68905
69056
|
setStructureTitle(url, title, titlelinkColor) {var ic = this.icn3d, me = ic.icn3dui;
|
|
68906
|
-
if(
|
|
69057
|
+
if(title.length > 40) title = title.substr(0, 40) + "...";
|
|
68907
69058
|
|
|
68908
69059
|
let inputid = ic.inputid;
|
|
68909
69060
|
|
|
@@ -68929,7 +69080,7 @@ class SaveFile {
|
|
|
68929
69080
|
let structureidArray = Object.keys(idHash);
|
|
68930
69081
|
inputid = structureidArray.join(',');
|
|
68931
69082
|
|
|
68932
|
-
text = (me.cfg.refseqid) ? ic.inputid : inputid.toUpperCase();
|
|
69083
|
+
text = (me.cfg.refseqid || me.cfg.protein) ? ic.inputid : inputid.toUpperCase();
|
|
68933
69084
|
|
|
68934
69085
|
//idName = (isNaN(inputid) && inputid.length > 5) ? "AlphaFold ID" : "PDB ID";
|
|
68935
69086
|
if(bPdb && bAlphaFold) {
|
|
@@ -68955,7 +69106,12 @@ class SaveFile {
|
|
|
68955
69106
|
}
|
|
68956
69107
|
}
|
|
68957
69108
|
|
|
68958
|
-
if(me.cfg.refseqid)
|
|
69109
|
+
if(me.cfg.refseqid) {
|
|
69110
|
+
idName = 'NCBI Protein Acc.';
|
|
69111
|
+
}
|
|
69112
|
+
else if(me.cfg.protein) {
|
|
69113
|
+
idName = 'Protein/Gene Name';
|
|
69114
|
+
}
|
|
68959
69115
|
|
|
68960
69116
|
if(!inputid || inputid.substr(0, 4) == ic.defaultPdbId) {
|
|
68961
69117
|
$("#" + ic.pre + "title").html(title);
|
|
@@ -72227,7 +72383,7 @@ class iCn3DUI {
|
|
|
72227
72383
|
//even when multiple iCn3D viewers are shown together.
|
|
72228
72384
|
this.pre = this.cfg.divid + "_";
|
|
72229
72385
|
|
|
72230
|
-
this.REVISION = '3.
|
|
72386
|
+
this.REVISION = '3.27.0';
|
|
72231
72387
|
|
|
72232
72388
|
// In nodejs, iCn3D defines "window = {navigator: {}}"
|
|
72233
72389
|
this.bNode = (Object.keys(window).length < 2) ? true : false;
|
|
@@ -72520,6 +72676,14 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
|
|
|
72520
72676
|
me.htmlCls.clickMenuCls.setLogCmd(ic.loadCmd, true);
|
|
72521
72677
|
await ic.mmdbParserCls.downloadRefseq(me.cfg.refseqid);
|
|
72522
72678
|
}
|
|
72679
|
+
else if(me.cfg.protein !== undefined) {
|
|
72680
|
+
ic.inputid = me.cfg.protein;
|
|
72681
|
+
|
|
72682
|
+
// ic.bNCBI = true;
|
|
72683
|
+
ic.loadCmd = 'load protein ' + me.cfg.protein;
|
|
72684
|
+
me.htmlCls.clickMenuCls.setLogCmd(ic.loadCmd, true);
|
|
72685
|
+
await ic.mmdbParserCls.downloadProteinname(me.cfg.protein);
|
|
72686
|
+
}
|
|
72523
72687
|
else if(me.cfg.blast_rep_id !== undefined) {
|
|
72524
72688
|
// ic.bNCBI = true;
|
|
72525
72689
|
ic.inputid = me.cfg.query_id + ',' + me.cfg.blast_rep_id;
|
|
@@ -72527,7 +72691,7 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
|
|
|
72527
72691
|
me.cfg.oriQuery_id = me.cfg.query_id;
|
|
72528
72692
|
me.cfg.oriBlast_rep_id = me.cfg.blast_rep_id;
|
|
72529
72693
|
|
|
72530
|
-
// custom
|
|
72694
|
+
// custom sequence has query_id such as "Query_78989" in BLAST
|
|
72531
72695
|
if(me.cfg.query_id.substr(0,5) !== 'Query' && me.cfg.rid === undefined) {
|
|
72532
72696
|
// make it backward compatible for figure 2 in iCn3D paper: https://academic.oup.com/bioinformatics/article/36/1/131/5520951
|
|
72533
72697
|
if(me.cfg.from == 'icn3d' && me.cfg.blast_rep_id == '1TSR_A' && me.cfg.query_id == 'NP_001108451.1') {
|