icn3d 3.14.0 → 3.14.3

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 CHANGED
@@ -7487,15 +7487,16 @@ class Strand {
7487
7487
  }
7488
7488
 
7489
7489
  let maxDist = 6.0;
7490
- //let bBrokenSs = (prevCoorCA && Math.abs(currentCA.x - prevCoorCA.x) > maxDist) || (prevCoorCA && Math.abs(currentCA.y - prevCoorCA.y) > maxDist) || (prevCoorCA && Math.abs(currentCA.z - prevCoorCA.z) > maxDist);
7491
- let bBrokenSs = !atoms.hasOwnProperty(atom.serial) || (prevCoorCA && Math.abs(currentCA.x - prevCoorCA.x) > maxDist) || (prevCoorCA && Math.abs(currentCA.y - prevCoorCA.y) > maxDist) || (prevCoorCA && Math.abs(currentCA.z - prevCoorCA.z) > maxDist);
7490
+ let bBrokenSs = (prevCoorCA && Math.abs(currentCA.x - prevCoorCA.x) > maxDist) || (prevCoorCA && Math.abs(currentCA.y - prevCoorCA.y) > maxDist) || (prevCoorCA && Math.abs(currentCA.z - prevCoorCA.z) > maxDist);
7491
+ // The following code didn't work to select one residue
7492
+ // let bBrokenSs = !atoms.hasOwnProperty(atom.serial) || (prevCoorCA && Math.abs(currentCA.x - prevCoorCA.x) > maxDist) || (prevCoorCA && Math.abs(currentCA.y - prevCoorCA.y) > maxDist) || (prevCoorCA && Math.abs(currentCA.z - prevCoorCA.z) > maxDist);
7492
7493
 
7493
- if(bBrokenSs && atom.ss === 'sheet') {
7494
- bSheetSegment = true;
7495
- }
7496
- else if(bBrokenSs && atom.ss === 'helix') {
7497
- bHelixSegment = true;
7498
- }
7494
+ // if(bBrokenSs && atom.ss === 'sheet') {
7495
+ // bSheetSegment = true;
7496
+ // }
7497
+ // else if(bBrokenSs && atom.ss === 'helix') {
7498
+ // bHelixSegment = true;
7499
+ // }
7499
7500
 
7500
7501
  if ((atom.ssbegin || atom.ssend || (drawnResidueCount === totalResidueCount - 1) || bBrokenSs) && pnts[0].length > 0 && bSameChain) {
7501
7502
  let atomName = 'CA';
@@ -13782,7 +13783,10 @@ class DefinedSets {
13782
13783
  ic.hAtoms = {};
13783
13784
  this.setHAtomsFromSets(orArray, 'or');
13784
13785
 
13785
- if(Object.keys(ic.hAtoms).length == 0) ic.hAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
13786
+ if(Object.keys(ic.hAtoms).length == 0) {
13787
+ //ic.hAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
13788
+ ic.hAtoms = me.hashUtilsCls.cloneHash(ic.dAtoms);
13789
+ }
13786
13790
  this.setHAtomsFromSets(andArray, 'and');
13787
13791
 
13788
13792
  this.setHAtomsFromSets(notArray, 'not');
@@ -17862,7 +17866,7 @@ class SetColor {
17862
17866
  break;
17863
17867
 
17864
17868
  case 'chain':
17865
- if(ic.chainsColor !== undefined && Object.keys(ic.chainsColor).length > 0) { // mmdb input
17869
+ if(ic.chainsColor !== undefined && Object.keys(ic.chainsColor).length > 0) { // mmdb input
17866
17870
  this.setMmdbChainColor();
17867
17871
  }
17868
17872
  else {
@@ -22656,7 +22660,7 @@ class Dssp {
22656
22660
 
22657
22661
  ic.pdbParserCls.loadPdbDataRender(bAppend);
22658
22662
 
22659
- if(ic.deferredMmdbaf !== undefined) ic.deferredMmdbaf.resolve();
22663
+ //if(ic.deferredMmdbaf !== undefined) ic.deferredMmdbaf.resolve();
22660
22664
  if(ic.deferredSecondary !== undefined) ic.deferredSecondary.resolve();
22661
22665
  });
22662
22666
  }
@@ -22775,7 +22779,7 @@ class Dssp {
22775
22779
 
22776
22780
  ic.pdbParserCls.loadPdbDataRender(bAppend);
22777
22781
 
22778
- if(ic.deferredMmdbaf !== undefined) ic.deferredMmdbaf.resolve();
22782
+ //if(ic.deferredMmdbaf !== undefined) ic.deferredMmdbaf.resolve();
22779
22783
  if(ic.deferredSecondary !== undefined) ic.deferredSecondary.resolve();
22780
22784
  }
22781
22785
  }
@@ -22796,7 +22800,7 @@ class PdbParser {
22796
22800
  let url, dataType;
22797
22801
 
22798
22802
  if(bAf) {
22799
- url = "https://alphafold.ebi.ac.uk/files/AF-" + pdbid + "-F1-model_v2.pdb";
22803
+ url = "https://alphafold.ebi.ac.uk/files/AF-" + pdbid + "-F1-model_v3.pdb";
22800
22804
  ic.ParserUtilsCls.setYourNote(pdbid.toUpperCase() + '(AlphaFold) in iCn3D');
22801
22805
  }
22802
22806
  else {
@@ -24087,7 +24091,7 @@ class MmdbParser {
24087
24091
 
24088
24092
  let molid2rescount = data.moleculeInfor;
24089
24093
  let molid2color = {}, chain2molid = {}, molid2chain = {};
24090
- let chainNameHash = {};
24094
+ let chainNameHash = {};
24091
24095
  for(let i in molid2rescount) {
24092
24096
  if(Object.keys(molid2rescount[i]).length === 0) continue;
24093
24097
 
@@ -24107,7 +24111,7 @@ class MmdbParser {
24107
24111
  chain2molid[chain] = i;
24108
24112
  molid2chain[i] = chain;
24109
24113
 
24110
- ic.chainsColor[chain] =(type !== undefined) ? me.parasCls.thr(me.htmlCls.GREY8) : me.parasCls.thr(color);
24114
+ ic.chainsColor[chain] = (type !== undefined && !me.cfg.mmdbafid) ? me.parasCls.thr(me.htmlCls.GREY8) : me.parasCls.thr(color);
24111
24115
 
24112
24116
  let geneId =(molid2rescount[i].geneId === undefined) ? '' : molid2rescount[i].geneId;
24113
24117
  let geneSymbol =(molid2rescount[i].geneSymbol === undefined) ? '' : molid2rescount[i].geneSymbol;
@@ -25679,7 +25683,7 @@ class ChainalignParser {
25679
25683
 
25680
25684
  let url_t;
25681
25685
  if(ic.mmdbid_t.length > 5) {
25682
- url_t = "https://alphafold.ebi.ac.uk/files/AF-" + ic.mmdbid_t + "-F1-model_v2.pdb";
25686
+ url_t = "https://alphafold.ebi.ac.uk/files/AF-" + ic.mmdbid_t + "-F1-model_v3.pdb";
25683
25687
 
25684
25688
  targetAjax = $.ajax({
25685
25689
  url: url_t,
@@ -25717,7 +25721,7 @@ class ChainalignParser {
25717
25721
 
25718
25722
  let url_q, queryAjax;
25719
25723
  if(ic.mmdbid_q.length > 5) {
25720
- url_q = "https://alphafold.ebi.ac.uk/files/AF-" + ic.mmdbid_q + "-F1-model_v2.pdb";
25724
+ url_q = "https://alphafold.ebi.ac.uk/files/AF-" + ic.mmdbid_q + "-F1-model_v3.pdb";
25721
25725
 
25722
25726
  queryAjax = $.ajax({
25723
25727
  url: url_q,
@@ -26020,7 +26024,7 @@ class ChainalignParser {
26020
26024
  let structure = ic.structArray[i];
26021
26025
 
26022
26026
  if(isNaN(structure) && structure.length > 5) {
26023
- url_t = "https://alphafold.ebi.ac.uk/files/AF-" + ic.structArray[i] + "-F1-model_v2.pdb";
26027
+ url_t = "https://alphafold.ebi.ac.uk/files/AF-" + ic.structArray[i] + "-F1-model_v3.pdb";
26024
26028
 
26025
26029
  targetAjax = $.ajax({
26026
26030
  url: url_t,
@@ -26085,6 +26089,8 @@ class ChainalignParser {
26085
26089
  let hAtoms = {}, hAtomsTmp = {};
26086
26090
  let bLastQuery = false;
26087
26091
 
26092
+ ic.opts['color'] = (structArray.length == 1) ? 'chain' : 'structure';
26093
+
26088
26094
  for(let i = 0, il = structArray.length; i < il; ++i) {
26089
26095
  if(i == structArray.length - 1) bLastQuery = true;
26090
26096
 
@@ -26097,10 +26103,11 @@ class ChainalignParser {
26097
26103
  targetOrQuery = 'query';
26098
26104
  bAppend = true;
26099
26105
  }
26100
-
26106
+
26101
26107
  //if(structArray[i].length > 4) {
26102
26108
  if(structArray[i].length > 5) { // PDB ID plus postfix could be 5
26103
- let bNoDssp = true;
26109
+ //let bNoDssp = true;
26110
+ let bNoDssp = false; // get secondary structure info
26104
26111
  hAtomsTmp = ic.pdbParserCls.loadPdbData(queryDataArray[i], structArray[i], false, bAppend, targetOrQuery, bLastQuery, bNoDssp);
26105
26112
  }
26106
26113
  else {
@@ -26113,7 +26120,7 @@ class ChainalignParser {
26113
26120
 
26114
26121
  // calculate secondary structures with applyCommandDssp
26115
26122
  if(bQuery && me.cfg.matchedchains) {
26116
- $.when(ic.pdbParserCls.applyCommandDssp(true)).then(function() {
26123
+ // $.when(ic.pdbParserCls.applyCommandDssp(true)).then(function() {
26117
26124
  let bRealign = true, bPredefined = true;
26118
26125
  ic.realignParserCls.realignChainOnSeqAlign(undefined, ic.chainidArray, bRealign, bPredefined);
26119
26126
  // reset annotations
@@ -26122,11 +26129,10 @@ class ChainalignParser {
26122
26129
  if($('#' + ic.pre + 'dl_selectannotations').dialog( 'isOpen' )) {
26123
26130
  $('#' + ic.pre + 'dl_selectannotations').dialog( 'close' );
26124
26131
  }
26125
- });
26126
- }
26127
- else {
26128
- ic.pdbParserCls.applyCommandDssp(true);
26132
+ //});
26129
26133
  }
26134
+
26135
+ if(ic.deferredMmdbaf !== undefined) ic.deferredMmdbaf.resolve();
26130
26136
  }
26131
26137
  }
26132
26138
 
@@ -34172,7 +34178,7 @@ class ApplyCommand {
34172
34178
  else if(cmd.indexOf('realign on seq align') == 0) return 'File > Realign Selection > on Sequence Alignment';
34173
34179
  else if(cmd.indexOf('realign') == 0) return 'File > Realign Selection > Residue by Residue';
34174
34180
  else if(cmd.indexOf('graph interaction pairs') == 0) return hbondIntStr + ' > 2D Graph(Force-Directed)';
34175
- else if(cmd.indexOf('export canvas') == 0) return 'File > Save Files > iCn3D PNG Image';
34181
+ else if(cmd.indexOf('export canvas') == 0) return 'File > Save File > iCn3D PNG Image';
34176
34182
  else if(cmd == 'export stl file') return printStr + 'STL';
34177
34183
  else if(cmd == 'export vrml file') return printStr + 'VRML(Color)';
34178
34184
  else if(cmd == 'export stl stabilizer file') return printStr + 'STL W/ Stabilizers';
@@ -34507,7 +34513,9 @@ class SelectByCommand {
34507
34513
  bResidueId = true;
34508
34514
  }
34509
34515
  else {
34510
- if(residueStrArray[j][0] === '3' && residueStrArray[j].length > 1 &&(residueStrArray[j].length - 1) % 3 === 0) { // three letter residue string, such as :3LysArg
34516
+ //if(residueStrArray[j].length > 1 && residueStrArray[j][0] === '3' && (residueStrArray[j].length - 1) % 3 === 0) { // three letter residue string, such as :3LysArg
34517
+ if(residueStrArray[j].length > 1 && residueStrArray[j][0] === '3'
34518
+ && isNaN(residueStrArray[j][1]) && residueStrArray[j][0] !== '-') { // three letter residue string, such as :3LysArg or :3ZN, but not :30 neither :3-10
34511
34519
  let tmpStr = residueStrArray[j].toUpperCase();
34512
34520
  threeLetterResidueStr = tmpStr.substr(1);
34513
34521
  bResidueArrayThree = true;
@@ -34623,7 +34631,8 @@ class SelectByCommand {
34623
34631
  }
34624
34632
  else if(bResidueArrayThree) {
34625
34633
  let threeLetter = me.utilsCls.residueAbbr2Name(ic.chainsSeq[molecule_chain][s].name);
34626
- chainSeq +=(threeLetter.length == 3) ? threeLetter : ' ';
34634
+
34635
+ chainSeq +=(threeLetter.length == 3) ? threeLetter : threeLetter.padEnd(3, '_');
34627
34636
  }
34628
34637
  resiArray.push(ic.chainsSeq[molecule_chain][s].resi);
34629
34638
  }
@@ -42516,9 +42525,12 @@ class Selection {
42516
42525
 
42517
42526
  //Show the selection.
42518
42527
  showSelection() { let ic = this.icn3d, me = ic.icn3dui;
42519
- ic.dAtoms = {};
42528
+ //ic.dAtoms = {};
42520
42529
 
42521
- if(Object.keys(ic.hAtoms).length == 0) this.selectAll_base();
42530
+ if(Object.keys(ic.hAtoms).length == 0) {
42531
+ //this.selectAll_base();
42532
+ ic.hAtoms = me.hashUtilsCls.cloneHash(ic.dAtoms);
42533
+ }
42522
42534
 
42523
42535
  ic.dAtoms = me.hashUtilsCls.cloneHash(ic.hAtoms);
42524
42536
  ic.viewSelectionAtoms = me.hashUtilsCls.cloneHash(ic.hAtoms);
@@ -43159,11 +43171,14 @@ class SetStyle {
43159
43171
  console.log("WebGL context was lost. Reset WebGLRenderer and launch iCn3D again.");
43160
43172
 
43161
43173
  ic.renderer = new THREE.WebGLRenderer({
43162
- canvas: ic.container.get(0),
43163
- antialias: true,
43164
- preserveDrawingBuffer: true,
43165
- alpha: true
43174
+ canvas: ic.oriContainer.get(0), //this.container.get(0),
43175
+ antialias: true,
43176
+ preserveDrawingBuffer: true,
43177
+ sortObjects: false,
43178
+ alpha: true
43166
43179
  });
43180
+ // Enable VR
43181
+ ic.renderer.xr.enabled = true;
43167
43182
 
43168
43183
  ic.drawCls.draw();
43169
43184
 
@@ -44372,7 +44387,8 @@ class ApplySymd {
44372
44387
  }
44373
44388
  else { // bSymd, subset, and one chain
44374
44389
  if(Object.keys(ic.hAtoms).length == 0) {
44375
- ic.hAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
44390
+ //ic.hAtoms = me.hashUtilsCls.cloneHash(ic.atoms);
44391
+ ic.hAtoms = me.hashUtilsCls.cloneHash(ic.dAtoms);
44376
44392
  }
44377
44393
 
44378
44394
  // pick the first 1/order of selection
@@ -56360,11 +56376,12 @@ class SetMenu {
56360
56376
 
56361
56377
  html += "<li><span>Retrieve by ID</span>";
56362
56378
  html += "<ul>";
56379
+
56380
+ html += me.htmlCls.setHtmlCls.getLink('mn1_mmdbafid', 'PDB/MMDB/AlphaFold IDs' + me.htmlCls.wifiStr);
56363
56381
  html += me.htmlCls.setHtmlCls.getLink('mn1_mmdbid', 'MMDB ID ' + me.htmlCls.wifiStr);
56364
56382
  html += me.htmlCls.setHtmlCls.getLink('mn1_mmtfid', 'MMTF ID ' + me.htmlCls.wifiStr);
56365
56383
  html += me.htmlCls.setHtmlCls.getLink('mn1_pdbid', 'PDB ID ' + me.htmlCls.wifiStr);
56366
56384
  html += me.htmlCls.setHtmlCls.getLink('mn1_afid', 'AlphaFold UniProt ID ' + me.htmlCls.wifiStr);
56367
- html += me.htmlCls.setHtmlCls.getLink('mn1_mmdbafid', 'MMDB or AlphaFold IDs' + me.htmlCls.wifiStr);
56368
56385
  if(!me.cfg.simplemenu) {
56369
56386
  html += me.htmlCls.setHtmlCls.getLink('mn1_opmid', 'OPM PDB ID ' + me.htmlCls.wifiStr);
56370
56387
  html += me.htmlCls.setHtmlCls.getLink('mn1_mmcifid', 'mmCIF ID ' + me.htmlCls.wifiStr);
@@ -56466,7 +56483,7 @@ class SetMenu {
56466
56483
  html += "</ul>";
56467
56484
  html += "</li>";
56468
56485
 
56469
- html += "<li><span>Save Files</span>";
56486
+ html += "<li><span>Save File</span>";
56470
56487
  html += "<ul>";
56471
56488
  //html += me.htmlCls.setHtmlCls.getLink('mn1_exportCanvas', 'iCn3D PNG Image');
56472
56489
 
@@ -57653,17 +57670,29 @@ class SetMenu {
57653
57670
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#about' target='_blank'>About iCn3D<span style='font-size:0.9em'> " + me.REVISION + "</span></a></li>";
57654
57671
 
57655
57672
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#gallery' target='_blank'>Live Gallery " + me.htmlCls.wifiStr + "</a></li>";
57673
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#videos' target='_blank'>iCn3D Videos</a></li>";
57674
+
57675
+ html += "<li><span>FAQ</span>";
57656
57676
 
57657
- html += "<li><span>Tutorial</span>";
57658
57677
  html += "<ul>";
57659
- html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#useicn3d' target='_blank'>Use iCn3D</a></li>";
57660
- html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#videos' target='_blank'>iCn3D Videos</a></li>";
57661
- html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#parameters' target='_blank'>URL Parameters</a></li>";
57662
- html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#commands' target='_blank'>Commands</a></li>";
57678
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#viewstru' target='_blank'><span>View structure</span></a></li>";
57679
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#tfstru' target='_blank'><span>Transform Structure</span></a></li>";
57680
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#selsubset' target='_blank'><span>Select Subsets</span></a></li>";
57681
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#changestylecolor' target='_blank'><span>Change Style/Color</span></a></li>";
57682
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#saveview' target='_blank'><span>Save Work</span></a></li>";
57683
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#showanno' target='_blank'><span>Show Annotations</span></a></li>";
57684
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#exportanno' target='_blank'><span>Export Annotations</span></a></li>";
57685
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#interanalysis' target='_blank'><span>Interactions Analysis</span></a></li>";
57686
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#mutationanalysis' target='_blank'><span>Mutation Analysis</span></a></li>";
57687
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#elecpot' target='_blank'><span>Electrostatic Pot.</span></a></li>";
57688
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#simivast' target='_blank'><span>Similar PDB</span></a></li>";
57689
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#simifoldseek' target='_blank'><span>Similar AlphaFold/PDB</span></a></li>";
57690
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#alignmul' target='_blank'><span>Align Multiple Structures</span></a></li>";
57691
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#batchanalysis' target='_blank'><span>Batch Analysis</span></a></li>";
57692
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#embedicn3d' target='_blank'><span>Embed iCn3D</span></a></li>";
57663
57693
  html += "</ul>";
57664
- html += "</li>";
57665
57694
 
57666
- html += liStr + "https://www.ncbi.nlm.nih.gov/structure' target='_blank'>Search Structure " + me.htmlCls.wifiStr + "</a></li>";
57695
+ //html += liStr + "https://www.ncbi.nlm.nih.gov/structure' target='_blank'>Search Structure " + me.htmlCls.wifiStr + "</a></li>";
57667
57696
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#citing' target='_blank'>Citing iCn3D</a></li>";
57668
57697
 
57669
57698
  html += "<li><span>Source Code</span>";
@@ -57677,7 +57706,10 @@ class SetMenu {
57677
57706
  if(!me.cfg.simplemenu) {
57678
57707
  html += "<li><span>Develop</span>";
57679
57708
  html += "<ul>";
57680
- html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#HowToUse' target='_blank'>How to Embed</a></li>";
57709
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#HowToUse' target='_blank'>Embed iCn3D</a></li>";
57710
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#parameters' target='_blank'>URL Parameters</a></li>";
57711
+ html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#commands' target='_blank'>Commands</a></li>";
57712
+
57681
57713
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#datastructure' target='_blank'>Data Structure</a></li>";
57682
57714
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#classstructure' target='_blank'>Class Structure</a></li>";
57683
57715
  html += liStr + me.htmlCls.baseUrl + "icn3d/icn3d.html#addclass' target='_blank'>Add New Classes</a></li>";
@@ -58445,8 +58477,8 @@ class SetDialog {
58445
58477
  html += "</div>";
58446
58478
 
58447
58479
  html += me.htmlCls.divStr + "dl_foldseek' class='" + dialogClass + "' style='max-width:500px'>";
58448
- html += 'Note: You can search similar PDB or AlphaFold structures for any structure at the fast <a href="https://search.foldseek.com/search" target="_blank">Foldseek</a> web server. <br><br>Once you see the structure neighbors, you can view the alignment in iCn3D by inputing a list of chain IDs below. <br><br>The PDB chain IDs are the same as the record names such as "1hho_A". The AlphaFold chain IDs are the UniProt ID plus "_A". For example, the UniProt ID for the record name "AF-P69905-F1-model_v2" is "P69905".<br><br>';
58449
- html += "Chain ID List: " + me.htmlCls.inputTextStr + "id='" + me.pre + "foldseekchainids' value='P69905_A,P01942_A,1HHO_A' size=30> ";
58480
+ html += 'Note: You can search similar PDB or AlphaFold structures for any structure at the fast <a href="https://search.foldseek.com/search" target="_blank">Foldseek</a> web server. <br><br>Once you see the structure neighbors, you can view the alignment in iCn3D by inputing a list of PDB chain IDs or AlphaFold UniProt IDs below. <br><br>The PDB chain IDs are the same as the record names such as "1hho_A". The UniProt ID is the text between "AF-" and "-F1". For example, the UniProt ID for the record name "AF-P69905-F1-model_v3" is "P69905".<br><br>';
58481
+ html += "Chain ID List: " + me.htmlCls.inputTextStr + "id='" + me.pre + "foldseekchainids' value='P69905,P01942,1hho_A' size=30> ";
58450
58482
  html += me.htmlCls.buttonStr + "reload_foldseek'>Align</button>";
58451
58483
  html += "</div>";
58452
58484
 
@@ -58568,11 +58600,19 @@ class SetDialog {
58568
58600
  html += 'Please specify the mutations with a comma separated mutation list. Each mutation can be specified as "[PDB ID or AlphaFold UniProt ID]_[Chain ID]_[Residue Number]_[One Letter Mutatnt Residue]". E.g., the mutation of N501Y in the E chain of PDB 6M0J can be specified as "6M0J_E_501_Y". For AlphaFold structures, the "Chain ID" is "A".<br/><br/>';
58569
58601
  html += "<div style='display:inline-block; width:110px'>Mutations: </div>" + me.htmlCls.inputTextStr + "id='" + me.pre + "mutationids' value='6M0J_E_484_K,6M0J_E_501_Y,6M0J_E_417_N' size=50><br/><br/>";
58570
58602
 
58571
- html += "<b>Data Source</b>: <select id='" + me.pre + "idsource'>";
58572
- html += "<option value='mmdbid' selected>PDB ID</option>";
58573
- html += "<option value='afid'>AlphaFold UniProt ID</option>";
58574
- html += "</select><br/><br/>";
58575
-
58603
+ // html += "<b>Data Source</b>: <select id='" + me.pre + "idsource'>";
58604
+ // html += "<option value='mmdbid' selected>PDB ID</option>";
58605
+ // html += "<option value='afid'>AlphaFold UniProt ID</option>";
58606
+ // html += "</select><br/><br/>";
58607
+
58608
+ html += '<b>ID Type</b>: ';
58609
+ html += '<input type="radio" name="' + me.pre + 'idsource" id="' + me.pre + 'type_mmdbid" value="mmdbid" checked>PDB ID';
58610
+ html += '<input type="radio" name="' + me.pre + 'idsource" id="' + me.pre + 'type_afid" value="afid" style="margin-left:20px">AlphaFold UniProt ID<br><br>';
58611
+
58612
+ html += '<b>Show Mutation in</b>: ';
58613
+ html += '<input type="radio" name="' + me.pre + 'pdbsource" id="' + me.pre + 'showin_currentpage" value="currentpage">Current Page';
58614
+ html += '<input type="radio" name="' + me.pre + 'pdbsource" id="' + me.pre + 'showin_newpage" value="newpage" style="margin-left:20px" checked>New Page<br><br>';
58615
+
58576
58616
  html += me.htmlCls.buttonStr + "reload_mutation_3d' title='Show the mutations in 3D using the scap program'>3D with scap</button>";
58577
58617
  html += me.htmlCls.buttonStr + "reload_mutation_inter' style='margin-left:20px' title='Show the mutations in 3D and the change of interactions'>Interactions</button>";
58578
58618
  html += me.htmlCls.buttonStr + "reload_mutation_pdb' style='margin-left:20px' title='Show the mutations in 3D and export the PDB of the mutant within 10 angstrom'>PDB</button>";
@@ -58656,7 +58696,7 @@ class SetDialog {
58656
58696
  html += "</div>";
58657
58697
 
58658
58698
  html += me.htmlCls.divStr + "dl_yournote' class='" + dialogClass + "'>";
58659
- html += "Your note will be saved in the HTML file when you click \"File > Save Files > iCn3D PNG Image\".<br><br>";
58699
+ html += "Your note will be saved in the HTML file when you click \"File > Save File > iCn3D PNG Image\".<br><br>";
58660
58700
  html += "<textarea id='" + me.pre + "yournote' rows='5' style='width: 100%; height: " +(me.htmlCls.LOG_HEIGHT) + "px; padding: 0px; border: 0px;' placeholder='Enter your note here'></textarea><br>";
58661
58701
  html += me.htmlCls.buttonStr + "applyyournote'>Save</button>";
58662
58702
  html += "</div>";
@@ -59460,6 +59500,17 @@ class Events {
59460
59500
  }
59461
59501
  }
59462
59502
 
59503
+ convertUniProtInChains(alignment) { let me = this.icn3dui; me.icn3d;
59504
+ let idArray = alignment.split(',');
59505
+ let alignment_final = '';
59506
+ for(let i = 0, il = idArray.length; i < il; ++i) {
59507
+ alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
59508
+ if(i < il - 1) alignment_final += ',';
59509
+ }
59510
+
59511
+ return alignment_final;
59512
+ }
59513
+
59463
59514
  searchSeq() { let me = this.icn3dui, ic = me.icn3d;
59464
59515
  let select = $("#" + me.pre + "search_seq").val();
59465
59516
  if(isNaN(select) && select.indexOf('$') == -1 && select.indexOf('.') == -1 && select.indexOf(':') == -1 && select.indexOf('@') == -1) {
@@ -59930,8 +59981,16 @@ class Events {
59930
59981
  me.myEventCls.onIds("#" + me.pre + "reload_foldseek", "click", function(e) { me.icn3d;
59931
59982
  e.preventDefault();
59932
59983
  if(!me.cfg.notebook) dialog.dialog( "close" );
59933
- me.htmlCls.clickMenuCls.setLogCmd("load chainalignment " + $("#" + me.pre + "foldseekchainids").val(), true);
59934
- window.open(hostUrl + '?chainalign=' + $("#" + me.pre + "foldseekchainids").val(), '_self');
59984
+
59985
+ // me.htmlCls.clickMenuCls.setLogCmd("load chainalignment " + $("#" + me.pre + "foldseekchainids").val(), true);
59986
+ // window.open(hostUrl + '?chainalign=' + $("#" + me.pre + "foldseekchainids").val(), '_self');
59987
+
59988
+
59989
+ let alignment = $("#" + me.pre + "foldseekchainids").val();
59990
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
59991
+
59992
+ me.htmlCls.clickMenuCls.setLogCmd("load chainalignment " + alignment_final, true);
59993
+ window.open(hostUrl + '?chainalign=' + alignment_final + '&aligntool=tmalign&showalignseq=1&bu=0', '_self');
59935
59994
  });
59936
59995
 
59937
59996
  me.myEventCls.onIds("#" + me.pre + "reload_mmtf", "click", function(e) { me.icn3d;
@@ -60073,12 +60132,7 @@ class Events {
60073
60132
  if(!me.cfg.notebook) dialog.dialog( "close" );
60074
60133
 
60075
60134
  let alignment = $("#" + me.pre + "chainalignids").val();
60076
- let idArray = alignment.split(',');
60077
- let alignment_final = '';
60078
- for(let i = 0, il = idArray.length; i < il; ++i) {
60079
- alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
60080
- if(i < il - 1) alignment_final += ',';
60081
- }
60135
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
60082
60136
  let resalign = $("#" + me.pre + "resalignids").val();
60083
60137
  let predefinedres = $("#" + me.pre + "predefinedres").val().trim().replace(/\n/g, '; ');
60084
60138
  if(predefinedres && alignment_final.split(',').length - 1 != predefinedres.split('; ').length) {
@@ -60096,12 +60150,7 @@ class Events {
60096
60150
  if(!me.cfg.notebook) dialog.dialog( "close" );
60097
60151
 
60098
60152
  let alignment = $("#" + me.pre + "chainalignids").val();
60099
- let idArray = alignment.split(',');
60100
- let alignment_final = '';
60101
- for(let i = 0, il = idArray.length; i < il; ++i) {
60102
- alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
60103
- if(i < il - 1) alignment_final += ',';
60104
- }
60153
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
60105
60154
 
60106
60155
  me.htmlCls.clickMenuCls.setLogCmd("load chains " + alignment_final + " on asymmetric unit | residues | resdef ", false);
60107
60156
  window.open(hostUrl + '?chainalign=' + alignment_final + '&resnum=&resdef=&showalignseq=1&bu=0', '_blank');
@@ -60112,12 +60161,7 @@ class Events {
60112
60161
  if(!me.cfg.notebook) dialog.dialog( "close" );
60113
60162
 
60114
60163
  let alignment = $("#" + me.pre + "chainalignids2").val();
60115
- let idArray = alignment.split(',');
60116
- let alignment_final = '';
60117
- for(let i = 0, il = idArray.length; i < il; ++i) {
60118
- alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
60119
- if(i < il - 1) alignment_final += ',';
60120
- }
60164
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
60121
60165
  let resalign = $("#" + me.pre + "resalignids").val();
60122
60166
 
60123
60167
  me.htmlCls.clickMenuCls.setLogCmd("load chains " + alignment_final + " on asymmetric unit | residues " + resalign + " | resdef ", false);
@@ -60129,12 +60173,7 @@ class Events {
60129
60173
  if(!me.cfg.notebook) dialog.dialog( "close" );
60130
60174
 
60131
60175
  let alignment = $("#" + me.pre + "chainalignids3").val();
60132
- let idArray = alignment.split(',');
60133
- let alignment_final = '';
60134
- for(let i = 0, il = idArray.length; i < il; ++i) {
60135
- alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
60136
- if(i < il - 1) alignment_final += ',';
60137
- }
60176
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
60138
60177
 
60139
60178
  let predefinedres = $("#" + me.pre + "predefinedres").val().trim().replace(/\n/g, '; ');
60140
60179
  if(predefinedres && alignment_final.split(',').length - 1 != predefinedres.split('; ').length) {
@@ -60151,66 +60190,133 @@ class Events {
60151
60190
  if(!me.cfg.notebook) dialog.dialog( "close" );
60152
60191
 
60153
60192
  let alignment = $("#" + me.pre + "chainalignids").val();
60154
- let idArray = alignment.split(',');
60155
- let alignment_final = '';
60156
- for(let i = 0, il = idArray.length; i < il; ++i) {
60157
- alignment_final += (idArray[i].indexOf('_') != -1) ? idArray[i] : idArray[i] + '_A'; // AlphaFold ID
60158
- if(i < il - 1) alignment_final += ',';
60159
- }
60193
+ let alignment_final = thisClass.convertUniProtInChains(alignment);
60160
60194
 
60161
60195
  me.htmlCls.clickMenuCls.setLogCmd("load chains " + alignment_final + " on asymmetric unit | residues | resdef | align tmalign", false);
60162
60196
  window.open(hostUrl + '?chainalign=' + alignment_final + '&aligntool=tmalign&resnum=&resdef=&showalignseq=1&bu=0', '_blank');
60163
60197
  });
60164
60198
 
60165
- me.myEventCls.onIds("#" + me.pre + "reload_mutation_3d", "click", function(e) { me.icn3d;
60199
+ me.myEventCls.onIds("#" + me.pre + "reload_mutation_3d", "click", function(e) { let ic = me.icn3d;
60166
60200
  e.preventDefault();
60167
60201
  if(!me.cfg.notebook) dialog.dialog( "close" );
60168
60202
  let mutationids = $("#" + me.pre + "mutationids").val();
60169
- let idsource = $("#" + me.pre + "idsource").val();
60170
- let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60171
- me.htmlCls.clickMenuCls.setLogCmd("3d of mutation " + mutationids, false);
60172
- //window.open(me.htmlCls.baseUrl + 'icn3d/full.html?mmdbid=' + mmdbid + '&command=scap 3d ' + mutationids + '; select displayed set', '_blank');
60173
- window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap 3d ' + mutationids + '; select displayed set', '_blank');
60203
+ //let idsource = $("#" + me.pre + "idsource").val();
60204
+ let idsource, pdbsource;
60205
+ if($("#" + me.pre + "type_mmdbid").is(":checked")) {
60206
+ idsource = 'mmdbid';
60207
+ }
60208
+ else {
60209
+ idsource = 'afid';
60210
+ }
60211
+ if($("#" + me.pre + "showin_currentpage").is(":checked")) {
60212
+ pdbsource = 'currentpage';
60213
+ }
60214
+ else {
60215
+ pdbsource = 'newpage';
60216
+ }
60217
+
60218
+ if(pdbsource == 'currentpage') {
60219
+ let snp = mutationids;
60220
+
60221
+ ic.scapCls.retrieveScap(snp);
60222
+ me.htmlCls.clickMenuCls.setLogCmd('scap 3d ' + snp, true);
60223
+ me.htmlCls.clickMenuCls.setLogCmd("select displayed set", true);
60224
+ }
60225
+ else {
60226
+ let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60227
+ me.htmlCls.clickMenuCls.setLogCmd("3d of mutation " + mutationids, false);
60228
+ window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap 3d ' + mutationids + '; select displayed set', '_blank');
60229
+ }
60174
60230
  });
60175
60231
 
60176
- me.myEventCls.onIds("#" + me.pre + "reload_mutation_pdb", "click", function(e) { me.icn3d;
60232
+ me.myEventCls.onIds("#" + me.pre + "reload_mutation_pdb", "click", function(e) { let ic = me.icn3d;
60177
60233
  e.preventDefault();
60178
60234
  if(!me.cfg.notebook) dialog.dialog( "close" );
60179
60235
  let mutationids = $("#" + me.pre + "mutationids").val();
60180
- let idsource = $("#" + me.pre + "idsource").val();
60181
- let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60182
- me.htmlCls.clickMenuCls.setLogCmd("pdb of mutation " + mutationids, false);
60183
- //window.open(me.htmlCls.baseUrl + 'icn3d/full.html?mmdbid=' + mmdbid + '&command=scap pdb ' + mutationids + '; select displayed set', '_blank');
60184
- window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap pdb ' + mutationids + '; select displayed set', '_blank');
60236
+ //let idsource = $("#" + me.pre + "idsource").val();
60237
+ let idsource, pdbsource;
60238
+ if($("#" + me.pre + "type_mmdbid").is(":checked")) {
60239
+ idsource = 'mmdbid';
60240
+ }
60241
+ else {
60242
+ idsource = 'afid';
60243
+ }
60244
+ if($("#" + me.pre + "showin_currentpage").is(":checked")) {
60245
+ pdbsource = 'currentpage';
60246
+ }
60247
+ else {
60248
+ pdbsource = 'newpage';
60249
+ }
60250
+
60251
+ if(pdbsource == 'currentpage') {
60252
+ let snp = mutationids;
60253
+
60254
+ let bPdb = true;
60255
+ ic.scapCls.retrieveScap(snp, undefined, bPdb);
60256
+ me.htmlCls.clickMenuCls.setLogCmd('scap pdb ' + snp, true);
60257
+ }
60258
+ else {
60259
+ let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60260
+ me.htmlCls.clickMenuCls.setLogCmd("pdb of mutation " + mutationids, false);
60261
+ window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap pdb ' + mutationids + '; select displayed set', '_blank');
60262
+ }
60185
60263
  });
60186
60264
 
60187
60265
  me.myEventCls.onIds("#" + me.pre + "reload_mutation_inter", "click", function(e) { let ic = me.icn3d;
60188
60266
  e.preventDefault();
60189
60267
  if(!me.cfg.notebook) dialog.dialog( "close" );
60190
60268
  let mutationids = $("#" + me.pre + "mutationids").val();
60191
- let idsource = $("#" + me.pre + "idsource").val();
60192
-
60193
- let mutationArray = mutationids.split(',');
60194
- let residArray = [];
60195
- for(let i = 0, il = mutationArray.length; i < il; ++i) {
60196
- let pos = mutationArray[i].lastIndexOf('_');
60197
- let resid = mutationArray[i].substr(0, pos);
60198
- residArray.push(resid);
60269
+ //let idsource = $("#" + me.pre + "idsource").val();
60270
+ let idsource, pdbsource;
60271
+ if($("#" + me.pre + "type_mmdbid").is(":checked")) {
60272
+ idsource = 'mmdbid';
60273
+ }
60274
+ else {
60275
+ idsource = 'afid';
60199
60276
  }
60277
+ if($("#" + me.pre + "showin_currentpage").is(":checked")) {
60278
+ pdbsource = 'currentpage';
60279
+ }
60280
+ else {
60281
+ pdbsource = 'newpage';
60282
+ }
60200
60283
 
60201
- let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60284
+ if(pdbsource == 'currentpage') {
60285
+ let snp = mutationids;
60202
60286
 
60203
- // if no structures are loaded yet
60204
- if(!ic.structures) {
60205
- ic.structures = {};
60206
- ic.structures[mmdbid] = 1;
60287
+ let bInteraction = true;
60288
+ ic.scapCls.retrieveScap(snp, bInteraction);
60289
+ me.htmlCls.clickMenuCls.setLogCmd('scap interaction ' + snp, true);
60290
+
60291
+ let idArray = snp.split('_'); //stru_chain_resi_snp
60292
+ let select = '.' + idArray[1] + ':' + idArray[2];
60293
+ let name = 'snp_' + idArray[1] + '_' + idArray[2];
60294
+ me.htmlCls.clickMenuCls.setLogCmd("select " + select + " | name " + name, true);
60295
+ me.htmlCls.clickMenuCls.setLogCmd("line graph interaction pairs | selected non-selected | hbonds,salt bridge,interactions,halogen,pi-cation,pi-stacking | false | threshold 3.8 6 4 3.8 6 5.5", true);
60296
+ me.htmlCls.clickMenuCls.setLogCmd("adjust dialog dl_linegraph", true);
60297
+ me.htmlCls.clickMenuCls.setLogCmd("select displayed set", true);
60207
60298
  }
60208
- ic.resid2specCls.residueids2spec(residArray);
60299
+ else {
60300
+ let mutationArray = mutationids.split(',');
60301
+ let residArray = [];
60302
+ for(let i = 0, il = mutationArray.length; i < il; ++i) {
60303
+ let pos = mutationArray[i].lastIndexOf('_');
60304
+ let resid = mutationArray[i].substr(0, pos);
60305
+ residArray.push(resid);
60306
+ }
60307
+
60308
+ let mmdbid = mutationids.substr(0, mutationids.indexOf('_'));
60209
60309
 
60210
- me.htmlCls.clickMenuCls.setLogCmd("interaction change of mutation " + mutationids, false);
60211
- //window.open(me.htmlCls.baseUrl + 'icn3d/full.html?mmdbid=' + mmdbid + '&command=scap interaction ' + mutationids + '; select ' + selectSpec + ' | name test; line graph interaction pairs | selected non-selected | hbonds,salt bridge,interactions,halogen,pi-cation,pi-stacking | false | threshold 3.8 6 4 3.8 6 5.5; adjust dialog dl_linegraph; select displayed set', '_blank');
60212
- //window.open(me.htmlCls.baseUrl + 'icn3d/full.html?mmdbid=' + mmdbid + '&command=scap interaction ' + mutationids, '_blank');
60213
- window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap interaction ' + mutationids, '_blank');
60310
+ // if no structures are loaded yet
60311
+ if(!ic.structures) {
60312
+ ic.structures = {};
60313
+ ic.structures[mmdbid] = 1;
60314
+ }
60315
+ ic.resid2specCls.residueids2spec(residArray);
60316
+
60317
+ me.htmlCls.clickMenuCls.setLogCmd("interaction change of mutation " + mutationids, false);
60318
+ window.open(hostUrl + '?' + idsource + '=' + mmdbid + '&command=scap interaction ' + mutationids, '_blank');
60319
+ }
60214
60320
  });
60215
60321
 
60216
60322
  // },
@@ -65893,7 +65999,7 @@ class iCn3D {
65893
65999
  if(bWebGL){
65894
66000
  //https://discourse.threejs.org/t/three-js-r128-ext-frag-depth-and-angle-instanced-arrays-extensions-are-not-supported/26037
65895
66001
  //this.renderer = new THREE.WebGL1Renderer({
65896
- if ( bWebGL2 && bVR) {
66002
+ if ( bWebGL2 && bVR) {
65897
66003
  this.renderer = new THREE.WebGLRenderer({
65898
66004
  canvas: this.oriContainer.get(0), //this.container.get(0),
65899
66005
  antialias: true,
@@ -66508,7 +66614,7 @@ iCn3D.prototype.resetConfig = function () { let ic = this, me = ic.icn3dui;
66508
66614
  }
66509
66615
 
66510
66616
  if(me.cfg.blast_rep_id !== undefined) this.opts['color'] = 'conservation';
66511
- if(me.cfg.mmdbafid !== undefined) this.opts['color'] = 'structure';
66617
+ if(me.cfg.mmdbafid !== undefined && ic.structures) ic.opts['color'] = (Object.keys(ic.structures).length == 1) ? 'chain' : 'structure';
66512
66618
 
66513
66619
  if(me.cfg.options !== undefined) $.extend(this.opts, me.cfg.options);
66514
66620
  };
@@ -66525,7 +66631,7 @@ class iCn3DUI {
66525
66631
  //even when multiple iCn3D viewers are shown together.
66526
66632
  this.pre = this.cfg.divid + "_";
66527
66633
 
66528
- this.REVISION = '3.14.0';
66634
+ this.REVISION = '3.14.3';
66529
66635
 
66530
66636
  // In nodejs, iCn3D defines "window = {navigator: {}}"
66531
66637
  this.bNode = (Object.keys(window).length < 2) ? true : false;