icn3d 3.28.5 → 3.28.7

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.module.js CHANGED
@@ -6666,7 +6666,7 @@ class ClickMenu {
6666
6666
  continue;
6667
6667
  }
6668
6668
 
6669
- if(id == 'mn1_searchstru') {
6669
+ if(id == 'mn1_searchgrooup') {
6670
6670
  html += "<td valign='top'>";
6671
6671
  }
6672
6672
  else if(id == 'mn2_definedsets') {
@@ -9429,11 +9429,11 @@ class SetMenu {
9429
9429
  html += this.getMenuText('mn1_fold', 'Predict by Seq.', undefined, undefined, 1);
9430
9430
  html += "<ul>";
9431
9431
  html += this.getLink('mn1_esmfold', 'ESMFold', undefined, 2);
9432
- html += this.getLink('mn1_alphafold', 'AlphaFold2 via ColabFold', undefined, 2);
9432
+ //html += this.getMenuUrl('mn1_esmfold_link', "https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/ESMFold.ipynb", "ESMFold via ColabFold" + me.htmlCls.wifiStr, undefined, 2);
9433
+ html += this.getLink('mn1_alphafold', 'AlphaFold2 via ColabFold' + me.htmlCls.wifiStr, undefined, 2);
9433
9434
  html += "</ul>";
9434
9435
 
9435
9436
 
9436
-
9437
9437
  html += this.getMenuText('mn1_alignwrap', 'Align', undefined, 1, 1);
9438
9438
  html += "<ul>";
9439
9439
 
@@ -10672,7 +10672,7 @@ class SetMenu {
10672
10672
  html += this.getMenuUrl('abouticn3d', me.htmlCls.baseUrl + "icn3d/icn3d.html#about", "About iCn3D<span style='font-size:0.9em'> " + me.REVISION + "</span>", 1, 1);
10673
10673
 
10674
10674
  html += this.getMenuUrl('gallery', me.htmlCls.baseUrl + "icn3d/icn3d.html#gallery", "Live Gallery " + me.htmlCls.wifiStr, 1, 1);
10675
- html += this.getMenuUrl('video', me.htmlCls.baseUrl + "icn3d/icn3d.html#videos", "iCn3D Videos", 1, 1);
10675
+ html += this.getMenuUrl('video', me.htmlCls.baseUrl + "icn3d/icn3d.html#videos", "Videos & Tutorials", 1, 1);
10676
10676
 
10677
10677
  html += this.getMenuText('mn6_faq', 'FAQ', undefined, 1, 1);
10678
10678
 
@@ -11489,7 +11489,7 @@ class SetDialog {
11489
11489
  html += 'Note: <b>VAST</b> identifies 3D domains (substructures) within each protein structure in the Molecular Modeling Database (MMDB), and then finds other protein structures that have one or more similar 3D domains, using purely geometric criteria. You have two ways to do a VAST search.<br><br>';
11490
11490
 
11491
11491
  html += '<b>Option 1</b>, search with your selection (all residues are selected by default) in the loaded structures:<br>';
11492
- html += '<form method=post enctype=multipart/form-data action="https://www.ncbi.nlm.nih.gov/Structure/vast/VSMmdb.cgi" id="' + me.pre + 'newvs2" name="newvs2" target="_blank">';
11492
+ html += '<form data-ncbi-sg-search="true" method=post enctype=multipart/form-data action="https://www.ncbi.nlm.nih.gov/Structure/vast/VSMmdb.cgi" id="' + me.pre + 'newvs2" name="newvs2" target="_blank">';
11493
11493
  html += '<input type=hidden id="' + me.pre + 'pdbstr" name="pdbstr">';
11494
11494
  html += "Searching against: <input type='radio' name='dataset' value='Non-redundant subset' checked> Medium-redundancy Subset of PDB <a href='https://www.ncbi.nlm.nih.gov/Structure/VAST/vasthelp.html#VASTNR' title='Medium-redundancy Subset' target='_blank'>?</a> <input type='radio' name='dataset' value='All'>All of PDB <br>";
11495
11495
  // the submit value has to be "Submit" in order to make the backend cgi works
@@ -11503,12 +11503,12 @@ class SetDialog {
11503
11503
  html += me.htmlCls.buttonStr + "reload_vast'>VAST</button><br><br>";
11504
11504
 
11505
11505
  html += '<b>Option 3</b>, search with a PDB file:<br>';
11506
- html += '<form method=post enctype=multipart/form-data action="https://www.ncbi.nlm.nih.gov/Structure/vast/VSMmdb.cgi" id="' + me.pre + 'newvs" name="newvs" target="_blank">';
11506
+ html += '<form data-ncbi-sg-search="true" method=post enctype=multipart/form-data action="https://www.ncbi.nlm.nih.gov/Structure/vast/VSMmdb.cgi" id="' + me.pre + 'newvs" name="newvs" target="_blank">';
11507
11507
  html += "PDB File: " + me.htmlCls.inputFileStr + " name='pdbfile' size=8><br>";
11508
11508
  html += "Searching against: <input type='radio' name='dataset' value='Non-redundant subset' checked> Medium-redundancy Subset of PDB <a href='https://www.ncbi.nlm.nih.gov/Structure/VAST/vasthelp.html#VASTNR' title='Medium-redundancy Subset' target='_blank'>?</a> <input type='radio' name='dataset' value='All'>All of PDB <br>";
11509
11509
  // the submit value has to be "Submit" in order to make the backend cgi works
11510
11510
  //html += '<input type="submit" name="' + me.pre + 'cmdVSMmdb" value="VAST Search"></input>';
11511
- html += '<input type="submit" name="cmdVSMmdb" value="Submit"></input>';
11511
+ html += '<input type="submit" id="' + me.pre + 'cmdVSMmdb" name="cmdVSMmdb" value="Submit"></input>';
11512
11512
  html += "</form><br>";
11513
11513
 
11514
11514
  html += "</div>";
@@ -11744,7 +11744,7 @@ class SetDialog {
11744
11744
  html += me.htmlCls.divStr + "dl_mmdbid' class='" + dialogClass + "' style='max-width:500px'>";
11745
11745
  html += this.addNotebookTitle('dl_mmdbid', 'Please input an MMDB ID');
11746
11746
  html += "MMDB or PDB ID: " + me.htmlCls.inputTextStr + "id='" + me.pre + "mmdbid' value='1TUP' size=8> <br><br>";
11747
- html += me.htmlCls.buttonStr + "reload_mmdb_asym'>Load Asymmetric Unit (All Chains)</button>" + me.htmlCls.buttonStr + "reload_mmdb' style='margin-left:30px'>Load Biological Unit</button><br/><br/><br>";
11747
+ html += me.htmlCls.buttonStr + "reload_mmdb'>Load Biological Unit</button>" + me.htmlCls.buttonStr + "reload_mmdb_asym' style='margin-left:30px'>Load Asymmetric Unit (All Chains)</button><br/><br/><br/>";
11748
11748
  html += '<b>Note</b>: The "<b>biological unit</b>" is the <b>biochemically active form of a biomolecule</b>, <div style="width:20px; margin:6px 0 0 20px; display:inline-block;"><span id="'
11749
11749
  + me.pre + 'asu_bu_expand" class="ui-icon ui-icon-plus icn3d-expand icn3d-link" style="width:15px;" title="Expand"></span><span id="'
11750
11750
  + me.pre + 'asu_bu_shrink" class="ui-icon ui-icon-minus icn3d-shrink icn3d-link" style="display:none; width:15px;" title="Shrink"></span></div>';
@@ -15704,7 +15704,7 @@ class SetHtml {
15704
15704
  if(selType) me.htmlCls.allMenusSel[id] = selType;
15705
15705
  if(bSimpleMenu) me.htmlCls.simpleMenus[id] = 1;
15706
15706
 
15707
- return "<li><span id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span></li>";
15707
+ return "<li><span data-pinger id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span></li>";
15708
15708
  }
15709
15709
 
15710
15710
  // a group of menus
@@ -15716,7 +15716,7 @@ class SetHtml {
15716
15716
  let styleStr = (classname == 'icn3d-menupd') ? " style='padding-left:1.5em!important;'" : "";
15717
15717
 
15718
15718
  // no ending "</li>"" since this is usually the start of a group of menus
15719
- return "<li><span id='" + me.pre + id + "'" + styleStr + ">" + text + "</span>";
15719
+ return "<li><span data-pinger id='" + me.pre + id + "'" + styleStr + ">" + text + "</span>";
15720
15720
  }
15721
15721
 
15722
15722
  getMenuUrl(id, url, text, bSimpleMenu, selType) { let me = this.icn3dui; me.icn3d;
@@ -15737,7 +15737,7 @@ class SetHtml {
15737
15737
  if(bSimpleMenu) me.htmlCls.simpleMenus[id] = 1;
15738
15738
 
15739
15739
  let hideStr = (bHide) ? ' style="display:none"' : '';
15740
- return "<li id='" + me.pre + wrapper + "'" + hideStr + "><span id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span></li>";
15740
+ return "<li id='" + me.pre + wrapper + "'" + hideStr + "><span data-pinger id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span></li>";
15741
15741
  }
15742
15742
 
15743
15743
  getLinkWrapper2(id, text, wrapper, bSimpleMenu, selType) { let me = this.icn3dui; me.icn3d;
@@ -15745,7 +15745,7 @@ class SetHtml {
15745
15745
  if(selType) me.htmlCls.allMenusSel[id] = selType;
15746
15746
  if(bSimpleMenu) me.htmlCls.simpleMenus[id] = 1;
15747
15747
 
15748
- return "<li id='" + me.pre + wrapper + "'><span id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span>";
15748
+ return "<li id='" + me.pre + wrapper + "'><span data-pinger id='" + me.pre + id + "' class='icn3d-link'>" + text + "</span>";
15749
15749
  }
15750
15750
 
15751
15751
  getRadio(radioid, id, text, bChecked, bSimpleMenu, selType) { let me = this.icn3dui; me.icn3d;
@@ -15756,8 +15756,7 @@ class SetHtml {
15756
15756
  let checkedStr =(bChecked) ? ' checked' : '';
15757
15757
 
15758
15758
  //https://stackoverflow.com/questions/17541614/use-images-instead-of-radio-buttons/17541916
15759
- //return "<li><label for='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "' " + "class='" + me.pre + radioid + "' " + "v='" + text + "' id='" + me.pre + id + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-rad-text'>" + text + "</span></label></li>";
15760
- return "<li><label id='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "' " + "class='" + me.pre + radioid + "' " + "v='" + text + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-rad-text'>" + text + "</span></label></li>";
15759
+ return "<li><label data-pinger id='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "' " + "class='" + me.pre + radioid + "' " + "v='" + text + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-rad-text'>" + text + "</span></label></li>";
15761
15760
  }
15762
15761
 
15763
15762
  getRadioColor(radioid, id, text, color, bChecked, bSimpleMenu, selType) { let me = this.icn3dui; me.icn3d;
@@ -15768,8 +15767,7 @@ class SetHtml {
15768
15767
  let checkedStr =(bChecked) ? ' checked' : '';
15769
15768
 
15770
15769
  //https://stackoverflow.com/questions/17541614/use-images-instead-of-radio-buttons/17541916
15771
- //return "<li><label for='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "' id='" + me.pre + id + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-color-rad-text' color='" + color + "'><span style='background-color:#" + color + "'>" + me.htmlCls.space3 + "</span> " + text + "</span></label></li>";
15772
- return "<li><label id='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-color-rad-text' color='" + color + "'><span style='background-color:#" + color + "'>" + me.htmlCls.space3 + "</span> " + text + "</span></label></li>";
15770
+ return "<li><label data-pinger id='" + me.pre + id + "' class='icn3d-rad'>" + me.htmlCls.inputRadioStr + "name='" + me.pre + radioid + "'" + checkedStr + "><span class='ui-icon ui-icon-blank'></span> <span class='icn3d-color-rad-text' color='" + color + "'><span style='background-color:#" + color + "'>" + me.htmlCls.space3 + "</span> " + text + "</span></label></li>";
15773
15771
  }
15774
15772
 
15775
15773
  setAdvanced(index) { let me = this.icn3dui; me.icn3d;
@@ -16124,7 +16122,7 @@ class SetHtml {
16124
16122
  html += "</ul>";
16125
16123
 
16126
16124
  html += me.htmlCls.divStr + name1 + "tab1'>";
16127
- if(type == 'delphi') html += this.addGsizeSalt(name1) + "<br>";
16125
+ if(type == 'delphi') html += this.addGsizeSalt(name1 + "1") + "<br>";
16128
16126
 
16129
16127
  html += "<span style='white-space:nowrap;font-weight:bold;'>Potential contour at: <select id='" + me.pre + name1 + "contour'>";
16130
16128
 
@@ -16189,7 +16187,7 @@ class SetHtml {
16189
16187
  html += "</div>";
16190
16188
 
16191
16189
  html += me.htmlCls.divStr + name1 + "tab2'>";
16192
- if(type == 'delphi') html += this.addGsizeSalt(name1) + "<br>";
16190
+ if(type == 'delphi') html += this.addGsizeSalt(name1 + "2") + "<br>";
16193
16191
 
16194
16192
  html += "<span style='white-space:nowrap;font-weight:bold;'>Surface with max potential at: <select id='" + me.pre + name1 + "contour2'>";
16195
16193
 
@@ -36823,7 +36821,7 @@ class AnnoCddSite {
36823
36821
  //if(me.cfg.afid) {
36824
36822
 
36825
36823
  // use precalculated CDD annotation if
36826
- if( (Object.keys(ic.structures).length == 1 && (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))
36824
+ if( (Object.keys(ic.structures).length == 1 && !me.cfg.afid && (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))
36827
36825
  || (Object.keys(ic.structures).length == 2 && me.cfg.align) ) {
36828
36826
  let data = {};
36829
36827
  try {
@@ -40660,7 +40658,7 @@ class AddTrack {
40660
40658
  if(exonArray) {
40661
40659
  for(let j = 0, jl = exonArray.length; j < jl; ++j) {
40662
40660
  let start = exonArray[j].resStart, end = exonArray[j].resEnd;
40663
- let genStart = exonArray[j].genomeRange.split('-')[0];
40661
+ let genStart = parseInt(exonArray[j].genomeRange.split('-')[0]);
40664
40662
 
40665
40663
  for(let k = 0, kl = end - start + 1; k < kl; ++k) {
40666
40664
  let colorStr = this.getExonColor(start, end, cnt);
@@ -42925,7 +42923,7 @@ class ShowAnno {
42925
42923
  url = "https://rest.uniprot.org/uniprotkb/search?format=json&fields=xref_geneid,gene_names&query=" + structure;
42926
42924
  let geneData = await me.getAjaxPromise(url, 'json');
42927
42925
  let geneId = (geneData.results[0] && geneData.results[0].uniProtKBCrossReferences && geneData.results[0].uniProtKBCrossReferences[0]) ? geneData.results[0].uniProtKBCrossReferences[0].id : undefined;
42928
- let geneSymbol = (geneData.results[0] && geneData.results[0].genes && geneData.results[0].genes[0] && geneData.results[0].genes[0].geneName) ? geneData.results[0].genes[0].geneName.value : undefined;
42926
+ let geneSymbol = (geneData.results[0] && geneData.results[0].genes && geneData.results[0].genes[0] && geneData.results[0].genes[0].geneName) ? geneData.results[0].genes[0].geneName.value : 'ID ' + geneId;
42929
42927
  ic.chainsGene[chnid] = {geneId: geneId, geneSymbol: geneSymbol};
42930
42928
  }
42931
42929
  }
@@ -46206,7 +46204,7 @@ class LineGraph {
46206
46204
  let thisClass = this;
46207
46205
 
46208
46206
  // round 1, 16 templates
46209
- 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', '1IsdA_2iteA_bacteria', '1TCRa_6jxrm_human_C1-n2', '1CD19_6al5A_human_C2orV-n1'];
46207
+ 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', '1IsdA_2iteA_bacteria', '1TCRa_6jxrm_human_C1-n2', '1CD19_6al5A_human_C2orV-n1', '1CD28_1yjdC_human_V'];
46210
46208
 
46211
46209
  // round 2
46212
46210
  ic.refpdbHash = {};
@@ -46225,52 +46223,55 @@ class LineGraph {
46225
46223
  ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human'];
46226
46224
  ic.refpdbHash['1IsdA_2iteA_bacteria'] = ['IsdA_2iteA_bacteria'];
46227
46225
  ic.refpdbHash['1TCRa_6jxrm_human_C1-n2'] = ['TCRa_6jxrm_human_C1-n2'];
46228
- ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
46226
+ ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
46227
+ ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V'];
46229
46228
 
46230
46229
  // use known ref structure
46231
- ic.refpdbHash['5ESV'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2', 'FAB-LIGHT_5esv_C1-n2'];
46232
- ic.refpdbHash['8GUY'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
46233
- ic.refpdbHash['6JXR'] = ['TCRa_6jxrm_human_V-n1', 'TCRa_6jxrm_human_C1-n2'];
46234
- ic.refpdbHash['1HNF'] = ['CD2_1hnfA_human_V-n1', 'CD2_1hnfA_human_C2-n2'];
46235
- ic.refpdbHash['7TZG'] = ['LAG3_7tzgD_human_V-n1', 'LAG3_7tzgD_human_C2-n2'];
46236
- ic.refpdbHash['6PY8'] = ['RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
46237
- ic.refpdbHash['1BQU'] = ['IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3'];
46238
-
46239
- ic.refpdbHash['1R4X'] = ['CoAtomerGamma1_1r4xA_human'];
46240
- ic.refpdbHash['6OIL'] = ['VISTA_6oilA_human_V'];
46241
- ic.refpdbHash['2ZXE'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
46242
- ic.refpdbHash['1I8A'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
46243
- ic.refpdbHash['2FWU'] = ['NaCaExchanger_2fwuA_dog_n2'];
46244
- ic.refpdbHash['4JQI'] = ['BArrestin1_4jqiA_rat_n1'];
46245
- ic.refpdbHash['1NBQ'] = ['JAM1_1nbqA_human_VorIset-n2'];
46246
- ic.refpdbHash['1O75'] = ['TP47_1o75A_bacteria'];
46247
- ic.refpdbHash['7PHR'] = ['MHCIa_7phrH_human_C1'];
46248
- ic.refpdbHash['2IIJ'] = ['ASF1A_2iijA_human'];
46249
- ic.refpdbHash['4Z18'] = ['PDL1_4z18B_human_V-n1'];
46250
- ic.refpdbHash['1T6V'] = ['VNAR_1t6vN_shark_V'];
46251
- ic.refpdbHash['2O6C'] = ['TP34_2o6cA_bacteria'];
46252
- ic.refpdbHash['3KYS'] = ['TEAD1_3kysC_human'];
46253
- ic.refpdbHash['7PHR'] = ['B2Microglobulin_7phrL_human_C1'];
46254
- ic.refpdbHash['2AW2'] = ['BTLA_2aw2A_human_Iset'];
46255
- ic.refpdbHash['1HL5'] = ['CuZnSuperoxideDismutase_1hl5C_human'];
46256
- ic.refpdbHash['1WF5'] = ['Sidekick2_1wf5A_human_FN3-n7'];
46257
- ic.refpdbHash['5J0B'] = ['Siglec3_5j0bB_human_C2-n2'];
46258
- ic.refpdbHash['1IFR'] = ['LaminAC_1ifrA_human'];
46259
- ic.refpdbHash['Q7Z7D3'] = ['VTCN1_Q7Z7D3_human_V-n2'];
46260
- ic.refpdbHash['4ZQK'] = ['PD1_4zqkB_human_V'];
46261
- ic.refpdbHash['2DM3'] = ['Palladin_2dm3A_human_Iset-n1'];
46262
- ic.refpdbHash['2ITE'] = ['IsdA_2iteA_bacteria'];
46263
- ic.refpdbHash['1XAK'] = ['ORF7a_1xakA_virus'];
46264
- ic.refpdbHash['4ZT1'] = ['ECadherin_4zt1A_human_n2'];
46265
- ic.refpdbHash['1LMI'] = ['MPT63_1lmiA_bacteria'];
46266
- ic.refpdbHash['1CD8'] = ['CD8a_1cd8A_human_V'];
46267
- ic.refpdbHash['3S97'] = ['Contactin1_3s97C_human_C2-n2'];
46268
- ic.refpdbHash['1AXI'] = ['GHR_1axiB_human_FN3-n1'];
46269
- ic.refpdbHash['6X4G'] = ['ICOS_6x4gA_human_V'];
46270
- ic.refpdbHash['2EE2'] = ['Contactin1_2ee2A_human_FN3-n9'];
46271
- ic.refpdbHash['4UOW'] = ['Titin_4uowM_human_Unk-n152'];
46272
- ic.refpdbHash['6A15'] = ['CD19_6al5A_human_C2orV-n1'];
46273
- ic.refpdbHash['2QKI'] = ['C3_2qkiD_human_n1'];
46230
+ ic.refpdbHash['5ESV_C'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2'];
46231
+ ic.refpdbHash['5ESV_D'] = ['FAB-LIGHT_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2'];
46232
+ ic.refpdbHash['8GUY_E'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
46233
+ ic.refpdbHash['6JXR_m'] = ['TCRa_6jxrm_human_V-n1', 'TCRa_6jxrm_human_C1-n2'];
46234
+ ic.refpdbHash['1HNF_A'] = ['CD2_1hnfA_human_V-n1', 'CD2_1hnfA_human_C2-n2'];
46235
+ ic.refpdbHash['7TZG_D'] = ['LAG3_7tzgD_human_V-n1', 'LAG3_7tzgD_human_C2-n2'];
46236
+ ic.refpdbHash['6PY8_C'] = ['RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
46237
+ ic.refpdbHash['1BQU_B'] = ['IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3'];
46238
+
46239
+ ic.refpdbHash['1R4X_A'] = ['CoAtomerGamma1_1r4xA_human'];
46240
+ ic.refpdbHash['6OIL_A'] = ['VISTA_6oilA_human_V'];
46241
+ ic.refpdbHash['2ZXE_B'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
46242
+ ic.refpdbHash['1I8A_A'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
46243
+ ic.refpdbHash['2FWU_A'] = ['NaCaExchanger_2fwuA_dog_n2'];
46244
+ ic.refpdbHash['4JQI_A'] = ['BArrestin1_4jqiA_rat_n1'];
46245
+ ic.refpdbHash['1NBQ_A'] = ['JAM1_1nbqA_human_VorIset-n2'];
46246
+ ic.refpdbHash['1O75_A'] = ['TP47_1o75A_bacteria'];
46247
+ ic.refpdbHash['7PHR_H'] = ['MHCIa_7phrH_human_C1'];
46248
+ ic.refpdbHash['2IIJ_A'] = ['ASF1A_2iijA_human'];
46249
+ ic.refpdbHash['4Z18_B'] = ['PDL1_4z18B_human_V-n1'];
46250
+ ic.refpdbHash['1T6V_N'] = ['VNAR_1t6vN_shark_V'];
46251
+ ic.refpdbHash['2O6C_A'] = ['TP34_2o6cA_bacteria'];
46252
+ ic.refpdbHash['3KYS_C'] = ['TEAD1_3kysC_human'];
46253
+ ic.refpdbHash['7PHR_L'] = ['B2Microglobulin_7phrL_human_C1'];
46254
+ ic.refpdbHash['2AW2_A'] = ['BTLA_2aw2A_human_Iset'];
46255
+ ic.refpdbHash['1HL5_C'] = ['CuZnSuperoxideDismutase_1hl5C_human'];
46256
+ ic.refpdbHash['1WF5_A'] = ['Sidekick2_1wf5A_human_FN3-n7'];
46257
+ ic.refpdbHash['5J0B_B'] = ['Siglec3_5j0bB_human_C2-n2'];
46258
+ ic.refpdbHash['1IFR_A'] = ['LaminAC_1ifrA_human'];
46259
+ ic.refpdbHash['Q7Z7D3_A'] = ['VTCN1_Q7Z7D3_human_V-n2'];
46260
+ ic.refpdbHash['4ZQK_B'] = ['PD1_4zqkB_human_V'];
46261
+ ic.refpdbHash['2DM3_A'] = ['Palladin_2dm3A_human_Iset-n1'];
46262
+ ic.refpdbHash['2ITE_A'] = ['IsdA_2iteA_bacteria'];
46263
+ ic.refpdbHash['1XAK_A'] = ['ORF7a_1xakA_virus'];
46264
+ ic.refpdbHash['4ZT1_A'] = ['ECadherin_4zt1A_human_n2'];
46265
+ ic.refpdbHash['1LMI_A'] = ['MPT63_1lmiA_bacteria'];
46266
+ ic.refpdbHash['1CD8_A'] = ['CD8a_1cd8A_human_V'];
46267
+ ic.refpdbHash['3S97_C'] = ['Contactin1_3s97C_human_C2-n2'];
46268
+ ic.refpdbHash['1AXI_B'] = ['GHR_1axiB_human_FN3-n1'];
46269
+ ic.refpdbHash['6X4G_A'] = ['ICOS_6x4gA_human_V'];
46270
+ ic.refpdbHash['2EE2_A'] = ['Contactin1_2ee2A_human_FN3-n9'];
46271
+ ic.refpdbHash['4UOW_M'] = ['Titin_4uowM_human_Unk-n152'];
46272
+ ic.refpdbHash['6A15_A'] = ['CD19_6al5A_human_C2orV-n1'];
46273
+ ic.refpdbHash['2QKI_D'] = ['C3_2qkiD_human_n1'];
46274
+ ic.refpdbHash['1YJD_C'] = ['CD28_1yjdC_human_V'];
46274
46275
 
46275
46276
  let pdbAjaxArray = [];
46276
46277
  for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
@@ -46564,11 +46565,14 @@ class LineGraph {
46564
46565
  //if(!(bBstrand && bCstrand && bEstrand && bFstrand && bGstrand)) continue;
46565
46566
  if(!(bBstrand && bCstrand && bEstrand && bFstrand)) {
46566
46567
  if(!me.bNode) console.log("Some of the Ig strands B, C, E, F are missing in the domain " + domainid + "...");
46568
+ if(ic.domainid2refpdbname[domainid]) delete ic.domainid2refpdbname[domainid];
46567
46569
  continue;
46568
46570
  }
46569
46571
  }
46570
46572
 
46571
46573
  if(!bRound1) {
46574
+ console.log("domainid: " + domainid);
46575
+
46572
46576
  if(!domainid2score.hasOwnProperty(domainid) || queryData[0].score > domainid2score[domainid]) {
46573
46577
  domainid2score[domainid] = queryData[0].score;
46574
46578
 
@@ -46600,11 +46604,14 @@ class LineGraph {
46600
46604
  for(let domainid in ic.domainid2refpdbname) {
46601
46605
  let pdbAjaxArray = [];
46602
46606
  let refpdbname = ic.domainid2refpdbname[domainid];
46603
- let pdbid = domainid.substr(0, domainid.indexOf('_'));
46607
+ //let pdbid = domainid.substr(0, domainid.indexOf('_'));
46608
+ let chainid = domainid.substr(0, domainid.indexOf('-'));
46604
46609
 
46605
- if(ic.refpdbHash.hasOwnProperty(pdbid)) {
46610
+ //if(ic.refpdbHash.hasOwnProperty(pdbid)) {
46611
+ if(ic.refpdbHash.hasOwnProperty(chainid)) {
46606
46612
  // use itself as the ref structure
46607
- refpdbname = pdbid;
46613
+ //refpdbname = pdbid;
46614
+ refpdbname = chainid;
46608
46615
 
46609
46616
  if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
46610
46617
  }
@@ -46646,11 +46653,11 @@ class LineGraph {
46646
46653
  dataArray3 = await allPromise;
46647
46654
 
46648
46655
  await thisClass.parseAlignData(dataArray3, domainidpairArray3);
46649
-
46656
+
46650
46657
  // end of round 2
46651
46658
  return;
46652
46659
  }
46653
-
46660
+
46654
46661
  // combine domainid into chainid
46655
46662
  let processedChainid = {};
46656
46663
  for(let domainid in ic.domainid2refpdbname) {
@@ -46757,17 +46764,18 @@ class LineGraph {
46757
46764
 
46758
46765
  // A-: 10xx
46759
46766
  // A: 11xx
46767
+ // A+ continue A
46760
46768
  // A': 12xx
46761
- // A+: 13xx
46762
46769
  // B: 21xx
46763
46770
  // C: 32xx
46764
46771
  // C': 42xx
46765
46772
  // C'': 51xx, 52xx
46766
46773
  // D: 61xx
46767
46774
  // E: 71xx
46775
+ // E+: continue E
46768
46776
  // F: 82xx
46769
46777
  // G: 91xx, 92xx
46770
- // G+: 94xx
46778
+ // G+: continue G
46771
46779
 
46772
46780
  // if(refnum < 100) return " " + oriRefnum;
46773
46781
  // else if(refnum >= 100 && refnum < 1000) {
@@ -46777,11 +46785,10 @@ class LineGraph {
46777
46785
  if(refnum < 900) return undefined;
46778
46786
  else if(refnum >= 900 && refnum < 1000) return " " + oriRefnum;
46779
46787
  else if(refnum >= 1000 && refnum < 1100) return "A-" + oriRefnum;
46780
- else if(refnum >= 1100 && refnum < 1200) return "A" + oriRefnum;
46788
+ else if(refnum >= 1100 && refnum < 1200) return "A" + oriRefnum; // could be A+
46781
46789
  else if(refnum >= 1200 && refnum < 1300) return "A'" + oriRefnum;
46782
- //else if(refnum >= 1300 && refnum < 1400) return "A*" + oriRefnum;
46783
- else if(refnum >= 1300 && refnum < 1400) return "A+" + oriRefnum;
46784
- else if(refnum >= 1400 && refnum < 2000) {
46790
+ //else if(refnum >= 1300 && refnum < 1400) return "A+" + oriRefnum;
46791
+ else if(refnum >= 1300 && refnum < 2000) {
46785
46792
  if(prevStrand && prevStrand.substr(0, 1) == 'A') {
46786
46793
  return prevStrand + oriRefnum;
46787
46794
  }
@@ -46794,12 +46801,11 @@ class LineGraph {
46794
46801
  else if(refnum >= 4000 && refnum < 5000) return "C'" + oriRefnum;
46795
46802
  else if(refnum >= 5000 && refnum < 6000) return "C''" + oriRefnum;
46796
46803
  else if(refnum >= 6000 && refnum < 7000) return "D" + oriRefnum;
46797
- else if(refnum >= 7000 && refnum < 8000) return "E" + oriRefnum;
46804
+ else if(refnum >= 7000 && refnum < 8000) return "E" + oriRefnum; // could be E+
46798
46805
  else if(refnum >= 8000 && refnum < 9000) return "F" + oriRefnum;
46799
- else if(refnum >= 9000 && refnum < 9400) return "G" + oriRefnum;
46800
- //else if(refnum >= 9400 && refnum < 9500) return "G*" + oriRefnum;
46801
- else if(refnum >= 9400 && refnum < 9500) return "G+" + oriRefnum;
46802
- else if(refnum >= 9500) return "G" + oriRefnum;
46806
+ else if(refnum >= 9000 && refnum < 9300) return "G" + oriRefnum; // could be G+
46807
+ //else if(refnum >= 9400 && refnum < 9500) return "G+" + oriRefnum;
46808
+ else if(refnum >= 9300) return "G" + oriRefnum;
46803
46809
  }
46804
46810
 
46805
46811
  async parseCustomRefFile(data) { let ic = this.icn3d; ic.icn3dui;
@@ -50713,7 +50719,12 @@ class ChainalignParser {
50713
50719
  targetAjax = me.getAjaxPromise(url_t, 'text');
50714
50720
  }
50715
50721
  else {
50716
- url_t = me.htmlCls.baseUrl + "mmdb/mmdb_strview.cgi?v=2&program=icn3d&b=1&s=1&ft=1&bu=" + me.cfg.bu + "&uid=" + structure;
50722
+ let structureTmp = structure;
50723
+ if(structure.length == 5) {
50724
+ structureTmp = structure.substr(0,4);
50725
+ }
50726
+
50727
+ url_t = me.htmlCls.baseUrl + "mmdb/mmdb_strview.cgi?v=2&program=icn3d&b=1&s=1&ft=1&bu=" + me.cfg.bu + "&uid=" + structureTmp;
50717
50728
  if(me.cfg.inpara !== undefined) url_t += me.cfg.inpara;
50718
50729
 
50719
50730
  targetAjax = me.getAjaxPromise(url_t, 'jsonp');
@@ -50790,7 +50801,8 @@ class ChainalignParser {
50790
50801
  }
50791
50802
  else {
50792
50803
  let bNoSeqalign = true;
50793
- hAtomsTmp = await ic.mmdbParserCls.parseMmdbData(queryDataArray[i], targetOrQuery, undefined, undefined, bLastQuery, bNoSeqalign);
50804
+ let pdbid = structArray[i];
50805
+ hAtomsTmp = await ic.mmdbParserCls.parseMmdbData(queryDataArray[i], targetOrQuery, undefined, undefined, bLastQuery, bNoSeqalign, pdbid);
50794
50806
  }
50795
50807
 
50796
50808
  hAtoms = me.hashUtilsCls.unionHash(hAtoms, hAtomsTmp);
@@ -51287,7 +51299,7 @@ class MmdbParser {
51287
51299
  if(Object.keys(data.atoms).length == 0) { // for large structures such as 3J3Q
51288
51300
  // use mmtfid
51289
51301
  let pdbid = data.pdbId;
51290
- ic.mmtfParserCls.downloadMmtf(pdbid);
51302
+ await ic.mmtfParserCls.downloadMmtf(pdbid);
51291
51303
 
51292
51304
  return;
51293
51305
  }
@@ -51452,9 +51464,10 @@ class MmdbParser {
51452
51464
  }
51453
51465
  }
51454
51466
 
51455
- async parseMmdbData(data, type, chainid, chainIndex, bLastQuery, bNoTransformNoSeqalign) { let ic = this.icn3d, me = ic.icn3dui;
51467
+ async parseMmdbData(data, type, chainid, chainIndex, bLastQuery, bNoTransformNoSeqalign, pdbidIn) { let ic = this.icn3d, me = ic.icn3dui;
51456
51468
  let hAtoms;
51457
- let pdbid =(data.pdbId !== undefined) ? data.pdbId : data.mmdbId;
51469
+ let pdbid = (data.pdbId !== undefined) ? data.pdbId : data.mmdbId;
51470
+ if(pdbidIn) pdbid = pdbidIn;
51458
51471
 
51459
51472
  this.parseMmdbDataPart1(data, type);
51460
51473
 
@@ -51679,7 +51692,7 @@ class MmdbParser {
51679
51692
  url = me.htmlCls.baseUrl + "mmdb/mmdb_strview.cgi?v=2&program=icn3d&b=1&s=1&ft=1&bu=" + me.cfg.bu + "&simple=1&uid=" + mmdbid;
51680
51693
  }
51681
51694
 
51682
- // use asymmetric unit for BLAST search, e.g., https://www.ncbi.nlm.nih.gov/Structure/icn3d/full.html?from=blast&blast_rep_id=5XZC_B&query_id=1TUP_A&command=view+annotations;set+annotation+cdd;set+annotation+site;set+view+detailed+view;select+chain+5XZC_B;show+selection&log$=align&blast_rank=1&RID=EPUCYNVV014&bu=0
51695
+ // use asymmetric unit for BLAST search, e.g., https://www.ncbi.nlm.nih.gov/Structure/icn3d/?from=blast&blast_rep_id=5XZC_B&query_id=1TUP_A&command=view+annotations;set+annotation+cdd;set+annotation+site;set+view+detailed+view;select+chain+5XZC_B;show+selection&log$=align&blast_rank=1&RID=EPUCYNVV014&bu=0
51683
51696
  if(me.cfg.blast_rep_id !== undefined) url += '&bu=0';
51684
51697
 
51685
51698
  //ic.bCid = undefined;
@@ -51711,57 +51724,31 @@ class MmtfParser {
51711
51724
 
51712
51725
  //MMTF is a new binary data format besides the previous PDB and mmCIF formats for 3D structures.
51713
51726
  //The JavaScript Methods at http://mmtf.rcsb.org/ was used to load and parse the data.
51714
- downloadMmtf(mmtfid) { let ic = this.icn3d; ic.icn3dui;
51727
+ async downloadMmtf(mmtfid) { let ic = this.icn3d, me = ic.icn3dui;
51715
51728
  ic.ParserUtilsCls.setYourNote(mmtfid.toUpperCase() + '(MMTF) in iCn3D');
51716
51729
  //ic.bCid = undefined;
51717
51730
 
51718
- MMTF.fetchReduced(
51719
- mmtfid,
51720
- // onLoad callback
51721
- async function( mmtfData ){
51722
- if(mmtfData.numAtoms * 10 > ic.maxatomcnt) {
51723
- let bFull = false;
51724
- if(Object.keys(mmtfData).length == 0) {
51725
- alert('This PDB structure is not found at RCSB...');
51726
- return;
51727
- }
51731
+ let mmtfData = await me.getMmtfReducedPromise(mmtfid);
51732
+ if(mmtfData.numAtoms * 10 > ic.maxatomcnt) {
51733
+ let bFull = false;
51734
+ if(Object.keys(mmtfData).length == 0) {
51735
+ alert('This PDB structure is not found at RCSB...');
51736
+ return;
51737
+ }
51728
51738
 
51729
- await ic.opmParserCls.loadOpmData(mmtfData, mmtfid, bFull, 'mmtf');
51730
- }
51731
- else {
51732
- mmtfData = null;
51733
-
51734
- MMTF.fetch(
51735
- mmtfid,
51736
- // onLoad callback
51737
- async function( mmtfData2 ){
51738
- let bFull = true;
51739
- if(Object.keys(mmtfData2).length == 0) {
51740
- alert('This PDB structure is not found at RCSB...');
51741
- return;
51742
- }
51743
- // ic.deferredOpm = $.Deferred(function() {
51744
- // ic.opmParserCls.loadOpmData(mmtfData2, mmtfid, bFull, 'mmtf');
51745
- // });
51746
-
51747
- // return ic.deferredOpm.promise();
51748
-
51749
- await ic.opmParserCls.loadOpmData(mmtfData2, mmtfid, bFull, 'mmtf');
51750
- },
51751
- // onError callback
51752
- function( error ){
51753
- //alert('This PDB structure is not found at RCSB...');
51754
- //console.error( error )
51755
- }
51756
- );
51757
- }
51758
- },
51759
- // onError callback
51760
- function( error ){
51761
- //alert('This PDB structure is not found at RCSB...');
51762
- //console.error( error )
51739
+ await ic.opmParserCls.loadOpmData(mmtfData, mmtfid, bFull, 'mmtf');
51740
+ }
51741
+ else {
51742
+ let mmtfData2 = await me.getMmtfPromise(mmtfid);
51743
+
51744
+ let bFull = true;
51745
+ if(Object.keys(mmtfData2).length == 0) {
51746
+ alert('This PDB structure is not found at RCSB...');
51747
+ return;
51763
51748
  }
51764
- );
51749
+
51750
+ await ic.opmParserCls.loadOpmData(mmtfData2, mmtfid, bFull, 'mmtf');
51751
+ }
51765
51752
  }
51766
51753
 
51767
51754
  async parseMmtfData(mmtfData, mmtfid, bFull) { let ic = this.icn3d, me = ic.icn3dui;
@@ -59646,7 +59633,6 @@ class ApplyCommand {
59646
59633
  let command = commandOri.toLowerCase();
59647
59634
 
59648
59635
  // exact match =============
59649
-
59650
59636
  //var file_pref =(ic.inputid) ? ic.inputid : "custom";
59651
59637
  if(command == 'share link') {
59652
59638
  await ic.shareLinkCls.shareLink();
@@ -62560,6 +62546,7 @@ class LoadScript {
62560
62546
  ic.inputid = id;
62561
62547
  if(command.indexOf('load mmtf') !== -1) {
62562
62548
  me.cfg.mmtfid = id;
62549
+
62563
62550
  await ic.mmtfParserCls.downloadMmtf(id);
62564
62551
  }
62565
62552
  else if(command.indexOf('load pdb') !== -1) {
@@ -65050,8 +65037,11 @@ class Delphi {
65050
65037
  let salt = saltArray[1]; //parseFloat(saltArray[1]);
65051
65038
 
65052
65039
  // The values should be string
65053
- $("#" + ic.pre + "delphigsize").val(gsize);
65054
- $("#" + ic.pre + "delphisalt").val(salt);
65040
+ $("#" + ic.pre + "delphi1gsize").val(gsize);
65041
+ $("#" + ic.pre + "delphi1salt").val(salt);
65042
+
65043
+ $("#" + ic.pre + "delphi2gsize").val(gsize);
65044
+ $("#" + ic.pre + "delphi2salt").val(salt);
65055
65045
 
65056
65046
  if(paraArray.length == 7) {
65057
65047
  let surfaceArray = paraArray[4].split(" ");
@@ -65076,11 +65066,11 @@ class Delphi {
65076
65066
  }
65077
65067
 
65078
65068
  async loadDelphiFile(type) { let ic = this.icn3d, me = ic.icn3dui;
65079
- let gsize = $("#" + ic.pre + "delphigsize").val();
65080
- let salt = $("#" + ic.pre + "delphisalt").val();
65081
- let contour =(type == 'delphi2') ? $("#" + ic.pre + "delphicontour2").val() : $("#" + ic.pre + "delphicontour").val();
65069
+ let gsize = (type == 'delphi2') ? $("#" + ic.pre + "delphi2gsize").val() : $("#" + ic.pre + "delphi1gsize").val();
65070
+ let salt = (type == 'delphi2') ? $("#" + ic.pre + "delphi2salt").val() : $("#" + ic.pre + "delphi1gsize").val();
65071
+ let contour = (type == 'delphi2') ? $("#" + ic.pre + "delphicontour2").val() : $("#" + ic.pre + "delphicontour").val();
65082
65072
 
65083
- let bSurface =(type == 'delphi2') ? true: false;
65073
+ let bSurface = (type == 'delphi2') ? true: false;
65084
65074
 
65085
65075
  await this.CalcPhi(gsize, salt, contour, bSurface);
65086
65076
 
@@ -68808,7 +68798,7 @@ class ResizeCanvas {
68808
68798
 
68809
68799
  ic.applyCenterCls.setWidthHeight(width, heightTmp);
68810
68800
 
68811
- if(bDraw === undefined || bDraw) {
68801
+ if(ic.structures && Object.keys(ic.structures).length > 0 && (bDraw === undefined || bDraw)) {
68812
68802
  ic.drawCls.draw();
68813
68803
  }
68814
68804
  }
@@ -70306,7 +70296,8 @@ class ShareLink {
70306
70296
  let url = this.shareLinkUrl();
70307
70297
 
70308
70298
  let bTooLong =(url.length > 4000 || url.indexOf('http') !== 0) ? true : false;
70309
- if(bPngHtml) url += "&random=" + parseInt(Math.random() * 1000); // generate a new shorten URL and thus image name everytime
70299
+ //if(bPngHtml) url += "&random=" + parseInt(Math.random() * 1000); // generate a new shorten URL and thus image name everytime
70300
+
70310
70301
  //var inputid =(ic.inputid) ? ic.inputid : "custom";
70311
70302
  let inputid = Object.keys(ic.structures).join('_');
70312
70303
  if(inputid == ic.defaultPdbId) {
@@ -70414,7 +70405,7 @@ class ShareLink {
70414
70405
  }
70415
70406
 
70416
70407
  shareLinkUrl(bAllCommands, bOutputCmd) { let ic = this.icn3d, me = ic.icn3dui;
70417
- let url = me.htmlCls.baseUrl + "icn3d/full.html?";
70408
+ let url = me.htmlCls.baseUrl + "icn3d/?";
70418
70409
  let outputCmd = '';
70419
70410
  if(me.cfg.bSidebyside) url = me.htmlCls.baseUrl + "icn3d/full2.html?";
70420
70411
 
@@ -73479,7 +73470,7 @@ class iCn3DUI {
73479
73470
  //even when multiple iCn3D viewers are shown together.
73480
73471
  this.pre = this.cfg.divid + "_";
73481
73472
 
73482
- this.REVISION = '3.28.0';
73473
+ this.REVISION = '3.28.1';
73483
73474
 
73484
73475
  // In nodejs, iCn3D defines "window = {navigator: {}}"
73485
73476
  this.bNode = (Object.keys(window).length < 2) ? true : false;
@@ -73685,17 +73676,17 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
73685
73676
  chainidArray.push(domainidArray[i]);
73686
73677
  }
73687
73678
  }
73688
-
73689
- let mmdbafid = '';
73690
- for(let i = 0, il = chainidArray.length; i < il; ++i) {
73691
- if(i > 0) mmdbafid += ',';
73692
- mmdbafid += chainidArray[i].substr(0, chainidArray[i].indexOf('_'));
73693
- }
73694
73679
 
73695
73680
  // realign
73696
73681
  ic.chainidArray = [chain_t].concat(chainidArray);
73697
73682
  ic.chainidArray = ic.chainalignParserCls.addPostfixForChainids(ic.chainidArray);
73698
73683
 
73684
+ let mmdbafid = '';
73685
+ for(let i = 0, il = ic.chainidArray.length; i < il; ++i) {
73686
+ if(i > 0) mmdbafid += ',';
73687
+ mmdbafid += ic.chainidArray[i].substr(0, ic.chainidArray[i].indexOf('_'));
73688
+ }
73689
+
73699
73690
  me.htmlCls.clickMenuCls.setLogCmd('resdef ' + me.cfg.resdef, true);
73700
73691
 
73701
73692
  ic.loadCmd = 'vast_search_chainid ' + ic.chainidArray;
@@ -73966,6 +73957,40 @@ iCn3DUI.prototype.setIcn3d = function() { let me = this;
73966
73957
  me.setDialogAjax();
73967
73958
  };
73968
73959
 
73960
+ iCn3DUI.prototype.getMmtfPromise = function(mmtfid) { return new Promise(function(resolve, reject) {
73961
+ MMTF.fetch(
73962
+ mmtfid,
73963
+ // onLoad callback
73964
+ async function( mmtfData ){
73965
+ resolve(mmtfData);
73966
+ },
73967
+ // onError callback
73968
+ function( error ){
73969
+ //alert('This PDB structure is not found at RCSB...');
73970
+ //console.error( error )
73971
+ reject('error');
73972
+ }
73973
+ );
73974
+ });
73975
+ };
73976
+
73977
+ iCn3DUI.prototype.getMmtfReducedPromise = function(mmtfid) { return new Promise(function(resolve, reject) {
73978
+ MMTF.fetchReduced(
73979
+ mmtfid,
73980
+ // onLoad callback
73981
+ async function( mmtfData ){
73982
+ resolve(mmtfData);
73983
+ },
73984
+ // onError callback
73985
+ function( error ){
73986
+ //alert('This PDB structure is not found at RCSB...');
73987
+ //console.error( error )
73988
+ reject('error');
73989
+ }
73990
+ );
73991
+ });
73992
+ };
73993
+
73969
73994
  iCn3DUI.prototype.getAjaxPromise = function(url, dataType, beforeSend, alertMess, logMess, complete, bNode) { let me = this;
73970
73995
  // if(!bNode || dataType != 'json') {
73971
73996
  return new Promise(function(resolve, reject) {