icn3d 3.29.9 → 3.29.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/icn3d.js CHANGED
@@ -7378,6 +7378,8 @@ class ClickMenu {
7378
7378
  thisClass.setLogCmd('ig refnum on', true);
7379
7379
  // await ic.refnumCls.showIgRefNum();
7380
7380
  // thisClass.setLogCmd('set annotation ig', true);
7381
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
7382
+
7381
7383
  let bSelection = true;
7382
7384
  await ic.annotationCls.setAnnoTabIg(bSelection);
7383
7385
 
@@ -7402,6 +7404,7 @@ class ClickMenu {
7402
7404
  thisClass.setLogCmd('ig template ' + template, true);
7403
7405
  let bSelection = true;
7404
7406
  // await ic.refnumCls.showIgRefNum(template);
7407
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
7405
7408
  await ic.annotationCls.setAnnoTabIg(bSelection, template);
7406
7409
  });
7407
7410
 
@@ -9527,8 +9530,8 @@ class SetMenu {
9527
9530
  //}
9528
9531
 
9529
9532
  //!!!
9530
- //html += this.getRadio('mn4_clr', 'mn4_clrIgstrand', 'Ig Strand', undefined, undefined, 2);
9531
- //html += this.getRadio('mn4_clr', 'mn4_clrIgproto', 'Ig Protodomain', undefined, undefined, 2);
9533
+ // html += this.getRadio('mn4_clr', 'mn4_clrIgstrand', 'Ig Strand', undefined, undefined, 2);
9534
+ // html += this.getRadio('mn4_clr', 'mn4_clrIgproto', 'Ig Protodomain', undefined, undefined, 2);
9532
9535
  }
9533
9536
  else {
9534
9537
  //if(!me.cfg.hidelicense) html += this.getRadio('mn4_clr', 'mn1_delphi2', 'DelPhi<br><span style="padding-left:1.5em;">Potential ' + me.htmlCls.licenseStr + '</span>');
@@ -9659,7 +9662,7 @@ class SetMenu {
9659
9662
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelResidues', 'per Residue', undefined, 1, 2);
9660
9663
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelResnum', 'per Residue & Number', undefined, 1, 2);
9661
9664
  //!!!
9662
- //html += this.getRadio('mn6_addlabel', 'mn6_addlabelRefnum', 'per Reference Number', undefined, 1, 2);
9665
+ // html += this.getRadio('mn6_addlabel', 'mn6_addlabelRefnum', 'per Reference Number', undefined, 1, 2);
9663
9666
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelChains', 'per Chain', undefined, undefined, 2);
9664
9667
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelTermini', 'N- & C-Termini', undefined, 1, 2);
9665
9668
  }
@@ -9757,8 +9760,9 @@ class SetMenu {
9757
9760
  html += this.getLink('mn6_igrefYes', 'Show Ig for Selection', undefined, 2);
9758
9761
  html += this.getLink('mn6_igrefTpl', 'Ig w/ Specified Template', undefined, 2);
9759
9762
  html += this.getLink('mn6_igrefNo', 'Reset Ig Ref. Number', undefined, 2);
9760
- */
9763
+
9761
9764
  html += this.getMenuSep();
9765
+ */
9762
9766
 
9763
9767
  html += this.getLink('mn6_customref', 'Custom Ref. Number', undefined, 2);
9764
9768
  html += "</ul>";
@@ -11909,12 +11913,17 @@ class SetDialog {
11909
11913
 
11910
11914
  //html += me.htmlCls.setHtmlCls.getOptionHtml(['0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100'], 3);
11911
11915
  let group2tpl = {};
11912
- group2tpl['V'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'VNAR_1t6vN_shark_V', 'TCRa_6jxrm_human_V-n1', 'VISTA_6oilA_human_V', 'CD8a_1cd8A_human_V', 'PD1_4zqkB_human_V', 'ICOS_6x4gA_human_V', 'CD28_1yjdC_human_V', 'PDL1_4z18B_human_V-n1', 'CD2_1hnfA_human_V-n1', 'LAG3_7tzgD_human_V-n1'];
11913
- group2tpl['C1'] = ['FAB-LIGHT_5esv_C1-n2', 'GHR_1axiB_human_FN3-n1', 'VTCN1_Q7Z7D3_human_V-n2', 'B2Microglobulin_7phrL_human_C1', 'FAB-HEAVY_5esv_C1-n2', 'MHCIa_7phrH_human_C1', 'TCRa_6jxrm_human_C1-n2'];
11914
- group2tpl['C2'] = ['CD2_1hnfA_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2', 'LAG3_7tzgD_human_C2-n2', 'Contactin1_3s97C_human_C2-n2'];
11915
- group2tpl['Iset'] = ['BTLA_2aw2A_human_Iset', 'Palladin_2dm3A_human_Iset-n1', 'Titin_4uowM_human_Unk-n152', 'JAM1_1nbqA_human_VorIset-n2', 'CD19_6al5A_human_C2orV-n1'];
11916
- group2tpl['FN3'] = ['InsulinR_8guyE_human_FN3-n1', 'IL6Rb_1bquB_human_FN3-n3', 'Sidekick2_1wf5A_human_FN3-n7', 'InsulinR_8guyE_human_FN3-n2', 'Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n2'];
11917
- group2tpl['Other'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'CoAtomerGamma1_1r4xA_human', 'TP34_2o6cA_bacteria', 'RBPJ_6py8C_human_Unk-n2', 'TP47_1o75A_bacteria', 'C3_2qkiD_human_n1', 'BArrestin1_4jqiA_rat_n1', 'RBPJ_6py8C_human_Unk-n1', 'CuZnSuperoxideDismutase_1hl5C_human', 'TEAD1_3kysC_human', 'ASF1A_2iijA_human', 'MPT63_1lmiA_bacteria', 'NaCaExchanger_2fwuA_dog_n2', 'ORF7a_1xakA_virus', 'ECadherin_4zt1A_human_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'LaminAC_1ifrA_human', 'IsdA_2iteA_bacteria'];
11916
+ group2tpl['V'] = ['CD28_1yjdC_human_V', 'CD2_1hnfA_human_V-n1', 'CD8a_1cd8A_human_V', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'ICOS_6x4gA_human_V', 'LAG3_7tzgD_human_V-n1', 'PDL1_4z18B_human_V-n1', 'PD1_4zqkB_human_V', 'TCRa_6jxrm_human_V-n1', 'VISTA_6oilA_human_V', 'VNAR_1t6vN_shark_V'];
11917
+ group2tpl['C1'] = ['B2Microglobulin_7phrL_human_C1', 'FAB-LIGHT_5esv_C1-n2', 'FAB-HEAVY_5esv_C1-n2', 'GHR_1axiB_human_FN3-n1', 'MHCIa_7phrH_human_C1', 'TCRa_6jxrm_human_C1-n2', 'VTCN1_Q7Z7D3_human_V-n2'];
11918
+ group2tpl['C2'] = ['CD2_1hnfA_human_C2-n2', 'Contactin1_3s97C_human_C2-n2', 'LAG3_7tzgD_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2'];
11919
+ group2tpl['I'] = ['BTLA_2aw2A_human_Iset', 'CD19_6al5A_human_C2orV-n1', 'JAM1_1nbqA_human_VorIset-n2', 'Palladin_2dm3A_human_Iset-n1', 'Titin_4uowM_human_Unk-n152'];
11920
+ group2tpl['E'] = ['ASF1A_2iijA_human', 'CoAtomerGamma1_1r4xA_human', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'IsdA_2iteA_bacteria', 'MPT63_1lmiA_bacteria', 'NaCaExchanger_2fwuA_dog_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'TP34_2o6cA_bacteria', 'TP47_1o75A_bacteria', 'TEAD1_3kysC_human'];
11921
+
11922
+ group2tpl['FN3'] = ['Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3', 'InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2', 'Sidekick2_1wf5A_human_FN3-n7'];
11923
+
11924
+ group2tpl['FN3-like'] = ['BArrestin1_4jqiA_rat_n1', 'C3_2qkiD_human_n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
11925
+
11926
+ group2tpl['Other'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'LaminAC_1ifrA_human', 'ORF7a_1xakA_virus'];
11918
11927
 
11919
11928
  for(let group in group2tpl) {
11920
11929
  html += "<optgroup label='" + group + "'>";
@@ -11968,10 +11977,10 @@ class SetDialog {
11968
11977
  html += "<td></td>";
11969
11978
  html += "</tr><tr>";
11970
11979
  html += tmpStr1 + me.htmlCls.inputCheckStr + "id='" + me.pre + "anno_ig'>Ig Domains" + me.htmlCls.space2 + "</span></td>";
11971
- */
11980
+
11972
11981
  html += "<td></td>";
11973
11982
  html += "</tr></table></div></div>";
11974
-
11983
+ */
11975
11984
  return html;
11976
11985
  }
11977
11986
  }
@@ -14694,6 +14703,14 @@ class Events {
14694
14703
  thisClass.setLogCmd('define igloop sets | chain ' + chainid, true);
14695
14704
  });
14696
14705
 
14706
+ $(document).on("click", ".icn3d-igdomainsets", function(e) { let ic = me.icn3d;
14707
+ e.stopImmediatePropagation();
14708
+ //e.preventDefault();
14709
+ let chainid = $(this).attr('chainid');
14710
+ ic.addTrackCls.defineIgstrand(chainid, 'igdomain');
14711
+ thisClass.setLogCmd('define igdomain sets | chain ' + chainid, true);
14712
+ });
14713
+
14697
14714
  me.myEventCls.onIds("#" + me.pre + "deletesets", "click", function(e) { let ic = me.icn3d;
14698
14715
  ic.definedSetsCls.deleteSelectedSets();
14699
14716
  thisClass.setLogCmd("delete selected sets", true);
@@ -32473,7 +32490,7 @@ class Instancing {
32473
32490
  }
32474
32491
 
32475
32492
  if(ic.mdlImpostor !== undefined) {
32476
- // after three.js version 128, the cylinder impostor seemed to have a problem in cloning!!!
32493
+ // after three.js version 128, the cylinder impostor seemed to have a problem in cloning
32477
32494
  symmetryMate = ic.mdlImpostor.clone();
32478
32495
  //symmetryMate.applyMatrix(mat);
32479
32496
  this.applyMat(symmetryMate, mat);
@@ -36753,7 +36770,8 @@ class AnnoCddSite {
36753
36770
 
36754
36771
  //var setname = chnid + "_" + domain + "_" + index + "_" + r; //chnid + "_" + type + "_" + index + "_" + r;
36755
36772
  let setname = chnid + "_" + domain;
36756
- if(type != 'domain') setname += "_" + index + "_" + r; // + acc2domain[acc];
36773
+ // if(type != 'domain') setname += "_" + index + "_" + r;
36774
+ if(type != 'domain') setname = chnid + "_" + index + "_" + r + "_" + domain;
36757
36775
 
36758
36776
  if(type == 'domain') pssmid2fromArray[pssmid] = fromArray;
36759
36777
  if(type == 'domain') pssmid2toArray[pssmid] = toArray;
@@ -36832,7 +36850,13 @@ class AnnoCddSite {
36832
36850
 
36833
36851
  if(me.cfg.blast_rep_id != chnid) { // regular
36834
36852
  for(let i = 0, il = fromArray.length; i < il; ++i) {
36835
- let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i] - ic.baseResi[chnid] - 1) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
36853
+ let emptyWidth;
36854
+ if(titleArray) {
36855
+ emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
36856
+ }
36857
+ else {
36858
+ emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i] - ic.baseResi[chnid] - 1) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
36859
+ }
36836
36860
 
36837
36861
  html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;">&nbsp;</div>';
36838
36862
  html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(toArray[i] - fromArray[i] + 1) / ic.maxAnnoLength) + 'px;" class="icn3d-seqTitle ' + linkStr + '" ' + type + '="' +(index+1).toString() + '" from="' + fromArray + '" to="' + toArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + setname + '" id="' + chnid + '_domain_' + index + '_' + r + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">' + domain + ' </div>';
@@ -38086,7 +38110,7 @@ class AnnoIg {
38086
38110
  refnumLabel = ic.resid2refnum[residueid];
38087
38111
  let bHidelabel = false;
38088
38112
 
38089
- if(refnumLabel) {
38113
+ if(refnumLabel) {
38090
38114
  refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
38091
38115
  currStrand = refnumLabel.replace(new RegExp(refnumStr_ori,'g'), '');
38092
38116
  currStrand_ori = currStrand;
@@ -38118,8 +38142,9 @@ class AnnoIg {
38118
38142
 
38119
38143
  igElem = {};
38120
38144
  igElem.startPos = i;
38121
- igElem.domainid = domainid;
38122
38145
  }
38146
+
38147
+ if(domainid) igElem.domainid = domainid;
38123
38148
 
38124
38149
  if(bCustom) {
38125
38150
  if(!refnumStr) {
@@ -38206,11 +38231,11 @@ class AnnoIg {
38206
38231
  htmlTmp += '<span class="icn3d-residueNum"></span>';
38207
38232
  }
38208
38233
  else if(kabat_or_imgt == 1) {
38209
- htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="Kabat Reference Numbers ' + refStruTitle + '">Kabat Ref. No.</div>';
38234
+ htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="Kabat Reference Numbers">Kabat Ref. No.</div>';
38210
38235
  htmlTmp += '<span class="icn3d-residueNum"></span>';
38211
38236
  }
38212
38237
  else if(kabat_or_imgt == 2) {
38213
- htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="IMGT Reference Numbers ' + refStruTitle + '">IMGT Ref. No.</div>';
38238
+ htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="IMGT Reference Numbers">IMGT Ref. No.</div>';
38214
38239
  htmlTmp += '<span class="icn3d-residueNum"></span>';
38215
38240
  }
38216
38241
  else {
@@ -38234,9 +38259,10 @@ class AnnoIg {
38234
38259
  html += '</div>';
38235
38260
  html += '</div>';
38236
38261
 
38237
- let igArray = ic.chain2igArray[chnid];
38262
+ let igArray = ic.chain2igArray[chnid];
38238
38263
  if(igArray.length == 0) return {html: '', html2: '', html3: ''};
38239
38264
  let rangeArray = [], titleArray = [], fullTitleArray = [], domainArray = [];
38265
+
38240
38266
  for(let i = 0, il = igArray.length; i < il; ++i) {
38241
38267
  let domainid = igArray[i].domainid;
38242
38268
  let info = ic.domainid2info[domainid];
@@ -38262,10 +38288,10 @@ class AnnoIg {
38262
38288
  let colorStr =(atom.color === undefined || atom.color.getHexString() === 'FFFFFF') ? 'DDDDDD' : atom.color.getHexString();
38263
38289
  let color =(atom.color !== undefined) ? colorStr : "CCCCCC";
38264
38290
 
38265
- let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i] - ic.baseResi[chnid] - 1) / ic.maxAnnoLength) :
38291
+ let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i]) / ic.maxAnnoLength) :
38266
38292
  Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
38267
38293
  html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;">&nbsp;</div>';
38268
- html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(toArray[i] - fromArray[i] + 1) / ic.maxAnnoLength) + 'px;" class="icn3d-seqTitle ' + linkStr + '" ig="0" from="' + fromArray + '" to="' + toArray + '" shorttitle="' + domainArray[i] + '" index="0" setname="' + chnid + '_igs" id="' + chnid + '_igs" anno="sequence" chain="' + chnid + '" title="' + domainArray[i] + '">' + domainArray[i] + ' </div>';
38294
+ html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(toArray[i] - fromArray[i] + 1) / ic.maxAnnoLength) + 'px;" class="icn3d-seqTitle ' + linkStr + '" ig="0" from="' + fromArray + '" to="' + toArray + '" shorttitle="' + domainArray[i] + '" index="0" setname="' + chnid + '_igs" id="' + chnid + '_igs" anno="sequence" chain="' + chnid + '" title="' + domainArray[i] + '">' + domainArray[i] + ' </div>';
38269
38295
  }
38270
38296
 
38271
38297
  html2 += htmlCnt;
@@ -39638,12 +39664,16 @@ class Domain3d {
39638
39664
 
39639
39665
  // this.elements from the this.top of the this.stack
39640
39666
  //elts = &this.elements[this.stack[this.top - 1]];
39667
+
39641
39668
  for(i = this.stack[this.top - 1], il = this.elements.length; i < il; ++i) {
39642
39669
  elts.push(this.elements[i]);
39643
39670
  }
39644
39671
 
39645
39672
  // generate the partition based on the cut //
39646
- for (i = ne = ne0 = ne1 = 0, prt = prt0, t = -1; i < k; i++) {
39673
+ // for (i = ne = ne0 = ne1 = 0, prt = prt0, t = -1; i < k; i++) {
39674
+ let bAtZero = true;
39675
+ prt = prt0;
39676
+ for (i = ne = ne0 = ne1 = 0, t = -1; i < k; i++) {
39647
39677
  // write the this.elements into prt //
39648
39678
  for (j = t + 1; j <= cut[i]; j++)
39649
39679
  prt[ne++] = elts[j];
@@ -39651,15 +39681,20 @@ class Domain3d {
39651
39681
  t = cut[i];
39652
39682
 
39653
39683
  // switch the partition //
39654
- if (prt == prt0) {
39684
+ // if (prt == prt0) {
39685
+ if (bAtZero) {
39655
39686
  ne0 = ne;
39656
39687
  prt = prt1;
39657
39688
  ne = ne1;
39689
+
39690
+ bAtZero = false;
39658
39691
  }
39659
39692
  else {
39660
39693
  ne1 = ne;
39661
39694
  prt = prt0;
39662
39695
  ne = ne0;
39696
+
39697
+ bAtZero = true;
39663
39698
  }
39664
39699
  }
39665
39700
 
@@ -39667,7 +39702,8 @@ class Domain3d {
39667
39702
  for (j = t + 1; j < n; j++)
39668
39703
  prt[ne++] = elts[j];
39669
39704
 
39670
- if (prt == prt0)
39705
+ // if (prt == prt0)
39706
+ if (bAtZero)
39671
39707
  ne0 = ne;
39672
39708
  else
39673
39709
  ne1 = ne;
@@ -40336,6 +40372,8 @@ class Domain3d {
40336
40372
  let ss1 = parseInt(ssPair[0]);
40337
40373
  let ss2 = parseInt(ssPair[1]);
40338
40374
 
40375
+ if(ctable[pair] < this.min_contacts) ctable[pair] = 0;
40376
+
40339
40377
  // both are sheets
40340
40378
  // min number of contacts: this.min_contacts
40341
40379
  if(substruct[ss1 - 1].Sheet && substruct[ss2 - 1].Sheet && ctable[pair] >= this.min_contacts ) {
@@ -40346,7 +40384,7 @@ class Domain3d {
40346
40384
  sheetNeighbor[ss2][ss1] = 1;
40347
40385
  }
40348
40386
  }
40349
-
40387
+
40350
40388
  //https://www.geeksforgeeks.org/number-groups-formed-graph-friends/
40351
40389
  let existing_groups = 0;
40352
40390
  let sheet2sheetnum = {};
@@ -40369,12 +40407,13 @@ class Domain3d {
40369
40407
  // get sheet2sheetnum
40370
40408
  // each neighboring sheet will be represented by the sheet with the smallest sse
40371
40409
  for(let groupnum in this.groupnum2sheet) {
40372
- let ssArray = this.groupnum2sheet[groupnum].sort();
40410
+ let ssArray = this.groupnum2sheet[groupnum].sort(function(a, b){return a-b});
40373
40411
  for(let i = 0, il = ssArray.length; i < il; ++i) {
40374
40412
  sheet2sheetnum[ssArray[i]] = ssArray[0];
40375
40413
  }
40376
40414
  }
40377
40415
 
40416
+ let invalidSheethash = {};
40378
40417
  for (let i = 0; i < nsse; i++) {
40379
40418
  if(substruct[i].Sheet) {
40380
40419
  let sheetsItem = {};
@@ -40387,6 +40426,8 @@ class Domain3d {
40387
40426
  sheetsItem.sheet_num = 0;
40388
40427
  sheetsItem.adj_strand2 = 0;
40389
40428
  sheetsItem.sse = i + 1;
40429
+
40430
+ invalidSheethash[sheetsItem.sse] = 1;
40390
40431
  }
40391
40432
 
40392
40433
  sheets.push(sheetsItem);
@@ -40418,7 +40459,7 @@ class Domain3d {
40418
40459
  }
40419
40460
  }
40420
40461
 
40421
- let minStrand = 6;
40462
+ let minStrand = 6; // number of residues in a strand
40422
40463
 
40423
40464
  if (hasSheets) {
40424
40465
  //sheets: array of sheets, each of which has the key: sheet_num (number of strands), adj_strand1, adj_strand2
@@ -40442,7 +40483,8 @@ class Domain3d {
40442
40483
  if (cnt> 0) {
40443
40484
  for (let i = 0; i < sheets.length; i++) {
40444
40485
  let bsrec = sheets[i];
40445
- this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
40486
+ // this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
40487
+ if(bsrec.sheet_num != 0) this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
40446
40488
  }
40447
40489
  }
40448
40490
  }
@@ -40498,11 +40540,25 @@ class Domain3d {
40498
40540
  }
40499
40541
  }
40500
40542
  }
40501
-
40543
+
40502
40544
  list_parts.sort(function(v1, v2) {
40503
40545
  return v1[0] - v2[0];
40504
40546
  });
40505
40547
 
40548
+ // remove sheets less than 3 residues
40549
+ let list_partsTmp = [];
40550
+ for(let i = 0, il = list_parts.length; i < il; ++i) {
40551
+ let list_parts_item = [];
40552
+ for(let j = 0, jl = list_parts[i].length; j < jl; ++j) {
40553
+ let sse = list_parts[i][j];
40554
+ if(!invalidSheethash.hasOwnProperty(sse)) {
40555
+ list_parts_item.push(sse);
40556
+ }
40557
+ }
40558
+ if(list_parts_item.length >= this.min_sse) list_partsTmp.push(list_parts[i]);
40559
+ }
40560
+ list_parts = list_partsTmp;
40561
+
40506
40562
  //for (lplet = list_parts.begin(); lplet != list_parts.end(); lpint++) {
40507
40563
  for (let index = 0, indexl = list_parts.length; index < indexl; ++index) {
40508
40564
  //vector<int> prts = *lpint;
@@ -41589,91 +41645,115 @@ class AddTrack {
41589
41645
  let selectedResidues = {};
41590
41646
  let bUnion = false, bUpdateHighlight = true;
41591
41647
 
41592
- let strandCnt = 0, loopCnt = 0;
41593
- let setName, currStrand, prevStrand, prevStrandReal = 'NT', currType, prevType;
41594
-
41595
41648
  // clear selection
41596
41649
  ic.hAtoms = {};
41597
41650
 
41598
- let bStart = false;
41599
-
41600
- for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
41601
- let currResi = ic.chainsSeq[chainid][i].resi;
41602
- let resid = chainid + '_' + currResi;
41651
+ if(type == 'igdomain') {
41652
+ let igArray = ic.chain2igArray[chainid];
41603
41653
 
41604
- if(!ic.residues.hasOwnProperty(resid) ) continue;
41605
-
41606
- let refnumLabel, refnumStr, refnum;
41607
- refnumLabel = ic.resid2refnum[resid];
41608
- if(!refnumLabel) continue;
41654
+ if(igArray && igArray.length > 0) {
41655
+
41656
+ for(let i = 0, il = igArray.length; i < il; ++i) {
41657
+ let startPos = igArray[i].startPos;
41658
+ let endPos = igArray[i].endPos;
41659
+ let domainid = igArray[i].domainid;
41609
41660
 
41610
- refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
41611
- currStrand = refnumLabel.replace(refnumStr, '');
41612
- refnum = parseInt(refnumStr);
41661
+ selectedResidues = {};
41662
+ for(let j = parseInt(startPos); j <= parseInt(endPos); ++j) {
41663
+ let currResi = ic.chainsSeq[chainid][j].resi;
41664
+ let resid = chainid + '_' + currResi;
41665
+ selectedResidues[resid] = 1;
41666
+ }
41613
41667
 
41614
- if(type == 'iganchor') {
41615
- if(refnum > 1000 && refnumStr.substr(refnumStr.length - 2, 2) == '50') {
41616
- selectedResidues[resid] = 1;
41617
- }
41618
- }
41619
- else {
41620
- if(ic.residIgLoop.hasOwnProperty(resid)) {
41621
- currType = 'igloop';
41668
+ let setName = domainid;
41669
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41622
41670
  }
41671
+ }
41672
+ }
41673
+ else {
41674
+ let strandCnt = 0, loopCnt = 0;
41675
+ let setName, currStrand, prevStrand, prevStrandReal = 'NT', currType, prevType;
41676
+
41677
+ let bStart = false;
41678
+
41679
+ for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
41680
+ let currResi = ic.chainsSeq[chainid][i].resi;
41681
+ let resid = chainid + '_' + currResi;
41682
+
41683
+ if(!ic.residues.hasOwnProperty(resid) ) continue;
41684
+
41685
+ let refnumLabel, refnumStr, refnum;
41686
+ refnumLabel = ic.resid2refnum[resid];
41687
+ if(!refnumLabel) continue;
41688
+
41689
+ refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
41690
+ currStrand = refnumLabel.replace(refnumStr, '');
41691
+ refnum = parseInt(refnumStr);
41692
+
41693
+ if(type == 'iganchor') {
41694
+ if(refnum > 1000 && refnumStr.substr(refnumStr.length - 2, 2) == '50') {
41695
+ selectedResidues[resid] = 1;
41696
+ }
41697
+ }
41623
41698
  else {
41624
- currType = 'igstrand';
41625
- }
41699
+ if(ic.residIgLoop.hasOwnProperty(resid)) {
41700
+ currType = 'igloop';
41701
+ }
41702
+ else {
41703
+ currType = 'igstrand';
41704
+ }
41626
41705
 
41627
- if(bStart && currType != prevType && Object.keys(selectedResidues).length > 0) {
41628
- if(prevType == 'igstrand') {
41629
- ++strandCnt;
41630
- setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
41631
- setName = setName.replace(/'/g, '`');
41632
- if(type == 'igstrand') {
41633
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41634
- if(!bUnion) bUnion = true;
41706
+ if(bStart && currType != prevType && Object.keys(selectedResidues).length > 0) {
41707
+ if(prevType == 'igstrand') {
41708
+ ++strandCnt;
41709
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
41710
+ setName = setName.replace(/'/g, '`');
41711
+ if(type == 'igstrand') {
41712
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41713
+ if(!bUnion) bUnion = true;
41714
+ }
41715
+ prevStrandReal = prevStrand;
41635
41716
  }
41636
- prevStrandReal = prevStrand;
41637
- }
41638
- else if(prevType == 'igloop') {
41639
- ++loopCnt;
41640
- setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
41641
- setName = setName.replace(/'/g, '`');
41642
- if(type == 'igloop') {
41643
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41644
- if(!bUnion) bUnion = true;
41717
+ else if(prevType == 'igloop') {
41718
+ ++loopCnt;
41719
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
41720
+ setName = setName.replace(/'/g, '`');
41721
+ if(type == 'igloop') {
41722
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41723
+ if(!bUnion) bUnion = true;
41724
+ }
41645
41725
  }
41646
- }
41647
41726
 
41648
- selectedResidues = {};
41649
- }
41727
+ selectedResidues = {};
41728
+ }
41650
41729
 
41651
- selectedResidues[resid] = 1;
41730
+ selectedResidues[resid] = 1;
41652
41731
 
41653
- prevStrand = currStrand;
41654
- prevType = currType;
41732
+ prevStrand = currStrand;
41733
+ prevType = currType;
41655
41734
 
41656
- bStart = true;
41657
- }
41658
- } // for loop
41735
+ bStart = true;
41736
+ }
41737
+ } // for loop
41659
41738
 
41660
- if(type == 'iganchor') {
41661
- setName = 'Anchor-' + chainid;
41662
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41663
- }
41664
- else {
41665
- if(prevType == 'igstrand') {
41666
- ++strandCnt;
41667
- setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
41668
- setName = setName.replace(/'/g, '`');
41669
- if(type == 'igstrand') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41739
+ if(type == 'iganchor') {
41740
+ setName = 'Anchor-' + chainid;
41741
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41670
41742
  }
41671
- else if(prevType == 'igloop') {
41672
- ++loopCnt;
41673
- currStrand = 'CT';
41674
- setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
41675
- setName = setName.replace(/'/g, '`');
41676
- if(type == 'igloop') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41743
+ else {
41744
+ if(prevType == 'igstrand') {
41745
+ ++strandCnt;
41746
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
41747
+ setName = setName.replace(/'/g, '`');
41748
+ if(type == 'igstrand') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41749
+ }
41750
+ else if(prevType == 'igloop') {
41751
+ ++loopCnt;
41752
+ currStrand = 'CT';
41753
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
41754
+ setName = setName.replace(/'/g, '`');
41755
+ if(type == 'igloop') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
41756
+ }
41677
41757
  }
41678
41758
  }
41679
41759
  }
@@ -43532,10 +43612,12 @@ class ShowAnno {
43532
43612
  + this.addButton(chnid, "icn3d-sheetsets", "Sheet Sets", "Define sets for each sheet in this chain and add them to the menu of \"Defined Sets\"", 60, buttonStyle) + "&nbsp;"
43533
43613
  + this.addButton(chnid, "icn3d-coilsets", "Coil Sets", "Define sets for each coil in this chain and add them to the menu of \"Defined Sets\"", 60, buttonStyle);
43534
43614
 
43535
- if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
43536
- chainHtml += "&nbsp;&nbsp;&nbsp;" + this.addButton(chnid, "icn3d-iganchorsets", "Ig Anchor Set", "Define the set for all Ig anchors in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;" + this.addButton(chnid, "icn3d-igstrandsets", "Ig Strand Sets", "Define sets for each Ig strand in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;"
43537
- + this.addButton(chnid, "icn3d-igloopsets", "Ig Loop Sets", "Define sets for each Ig loop in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle);
43538
- }
43615
+ // if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
43616
+ chainHtml += "&nbsp;&nbsp;&nbsp;" + this.addButton(chnid, "icn3d-iganchorsets", "Ig Anchor Set", "Define the set for all Ig anchors in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;"
43617
+ + this.addButton(chnid, "icn3d-igstrandsets", "Ig Strand Sets", "Define sets for each Ig strand in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;"
43618
+ + this.addButton(chnid, "icn3d-igloopsets", "Ig Loop Sets", "Define sets for each Ig loop in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;"
43619
+ + this.addButton(chnid, "icn3d-igdomainsets", "Ig Domain Sets", "Define sets for each Ig domain in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle);
43620
+ // }
43539
43621
  $("#" + ic.pre + "dl_annotations").append(chainHtml);
43540
43622
  //let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'domain', 'site', 'ptm', 'interaction', 'custom', 'ssbond', 'crosslink', 'transmem'];
43541
43623
  let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'site', 'ptm', 'ssbond', 'crosslink', 'transmem', 'domain', 'custom', 'interaction', 'ig'];
@@ -60178,6 +60260,7 @@ class ApplyCommand {
60178
60260
  await ic.annotationCls.setAnnoTabIg();
60179
60261
  }
60180
60262
  else if(command == 'ig refnum on') {
60263
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
60181
60264
  await ic.annotationCls.setAnnoTabIg(true);
60182
60265
  }
60183
60266
  else if(command == 'highlight level up') {
@@ -62667,6 +62750,7 @@ class LoadScript {
62667
62750
  else if(command.indexOf('ig template') == 0 ) {
62668
62751
  let template = command.substr(command.lastIndexOf(' ') + 1);
62669
62752
  // await ic.refnumCls.showIgRefNum(template);
62753
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
62670
62754
  await ic.annotationCls.setAnnoTabIg(true, template);
62671
62755
  }
62672
62756
  else if(command.indexOf('set annotation 3ddomain') == 0) { // the command may have "|||{"factor"...
@@ -62870,6 +62954,7 @@ class LoadScript {
62870
62954
  }
62871
62955
  else if(lastCommand.indexOf('ig refnum on') == 0) {
62872
62956
  // await ic.refnumCls.showIgRefNum();
62957
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
62873
62958
  await ic.annotationCls.setAnnoTabIg(true);
62874
62959
  }
62875
62960
  else if(lastCommand.indexOf('set annotation 3ddomain') == 0) {
@@ -62996,7 +63081,7 @@ class LoadScript {
62996
63081
  let idNew = '';
62997
63082
  for(let i = 0, il = idArray.length; i < il; ++i) {
62998
63083
  if(!(ic.structures && ic.structures.hasOwnProperty(idArray[i]))) {
62999
- if(!idNew) idNew += ',';
63084
+ if(idNew) idNew += ',';
63000
63085
  idNew += idArray[i];
63001
63086
  }
63002
63087
  }
@@ -65917,7 +66002,9 @@ class Dssp {
65917
66002
  ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human', 'CD3d_6jxrd_human_Iset'];
65918
66003
  ic.refpdbHash['1CD3g_6jxrg_human_Iset'] = ['CD3g_6jxrg_human_Iset', 'TCRa_6jxrm_human_C1-n2', 'IsdA_2iteA_bacteria'];
65919
66004
  ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V', 'MPT63_1lmiA_bacteria', 'CD3e_6jxrf_human_Iset'];
65920
- ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
66005
+ ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
66006
+
66007
+ ic.refpdbHash['all_templates'] = ['ASF1A_2iijA_human', 'B2Microglobulin_7phrL_human_C1', 'BArrestin1_4jqiA_rat_n1', 'BTLA_2aw2A_human_Iset', 'C3_2qkiD_human_n1', 'CD19_6al5A_human_C2orV-n1', 'CD28_1yjdC_human_V', 'CD2_1hnfA_human_C2-n2', 'CD2_1hnfA_human_V-n1', 'CD3d_6jxrd_human_Iset', 'CD3e_6jxrf_human_Iset', 'CD3g_6jxrg_human_Iset', 'CD8a_1cd8A_human_V', 'CoAtomerGamma1_1r4xA_human', 'Contactin1_2ee2A_human_FN3-n9', 'Contactin1_3s97C_human_C2-n2', 'CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'FAB-HEAVY_5esv_C1-n2', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2', 'FAB-LIGHT_5esv_V-n1', 'GHR_1axiB_human_FN3-n1', 'ICOS_6x4gA_human_V', 'IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3', 'InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2', 'IsdA_2iteA_bacteria', 'JAM1_1nbqA_human_VorIset-n2', 'LAG3_7tzgD_human_C2-n2', 'LAG3_7tzgD_human_V-n1', 'LaminAC_1ifrA_human', 'MHCIa_7phrH_human_C1', 'MPT63_1lmiA_bacteria', 'NaCaExchanger_2fwuA_dog_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'ORF7a_1xakA_virus', 'PD1_4zqkB_human_V', 'PDL1_4z18B_human_V-n1', 'Palladin_2dm3A_human_Iset-n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2', 'Sidekick2_1wf5A_human_FN3-n7', 'Siglec3_5j0bB_human_C2-n2', 'TCRa_6jxrm_human_C1-n2', 'TCRa_6jxrm_human_V-n1', 'TEAD1_3kysC_human', 'TP34_2o6cA_bacteria', 'TP47_1o75A_bacteria', 'Titin_4uowM_human_Unk-n152', 'VISTA_6oilA_human_V', 'VNAR_1t6vN_shark_V', 'VTCN1_Q7Z7D3_human_V-n2'];
65921
66008
 
65922
66009
  // use known ref structure
65923
66010
  ic.refpdbHash['5ESV_C'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2'];
@@ -65974,9 +66061,9 @@ class Dssp {
65974
66061
 
65975
66062
  ic.ref2igtype['ASF1A_2iijA_human'] = 'IgE';
65976
66063
  ic.ref2igtype['B2Microglobulin_7phrL_human_C1'] = 'IgC1';
65977
- ic.ref2igtype['BArrestin1_4jqiA_rat_n1'] = 'IgFn3-like';
66064
+ ic.ref2igtype['BArrestin1_4jqiA_rat_n1'] = 'IgFN3-like';
65978
66065
  ic.ref2igtype['BTLA_2aw2A_human_Iset'] = 'IgI';
65979
- ic.ref2igtype['C3_2qkiD_human_n1'] = 'IgFn3-like';
66066
+ ic.ref2igtype['C3_2qkiD_human_n1'] = 'IgFN3-like';
65980
66067
  ic.ref2igtype['CD19_6al5A_human_C2orV-n1'] = 'other Ig'; //'CD19';
65981
66068
  ic.ref2igtype['CD28_1yjdC_human_V'] = 'IgV';
65982
66069
  ic.ref2igtype['CD2_1hnfA_human_C2-n2'] = 'IgC2';
@@ -65986,7 +66073,7 @@ class Dssp {
65986
66073
  ic.ref2igtype['CD3g_6jxrg_human_Iset'] = 'IgI';
65987
66074
  ic.ref2igtype['CD8a_1cd8A_human_V'] = 'IgV';
65988
66075
  ic.ref2igtype['CoAtomerGamma1_1r4xA_human'] = 'IgE';
65989
- ic.ref2igtype['Contactin1_2ee2A_human_FN3-n9'] = 'IgFn3';
66076
+ ic.ref2igtype['Contactin1_2ee2A_human_FN3-n9'] = 'IgFN3';
65990
66077
  ic.ref2igtype['Contactin1_3s97C_human_C2-n2'] = 'IgC2';
65991
66078
  ic.ref2igtype['CuZnSuperoxideDismutase_1hl5C_human'] = 'other Ig'; //'SOD';
65992
66079
  ic.ref2igtype['ECadherin_4zt1A_human_n2'] = 'other Ig'; //'Cadherin';
@@ -65995,12 +66082,12 @@ class Dssp {
65995
66082
  ic.ref2igtype['FAB-HEAVY_5esv_V-n1'] = 'IgV';
65996
66083
  ic.ref2igtype['FAB-LIGHT_5esv_C1-n2'] = 'IgC1';
65997
66084
  ic.ref2igtype['FAB-LIGHT_5esv_V-n1'] = 'IgV';
65998
- ic.ref2igtype['GHR_1axiB_human_FN3-n1'] = 'IgFn3';
66085
+ ic.ref2igtype['GHR_1axiB_human_FN3-n1'] = 'IgFN3';
65999
66086
  ic.ref2igtype['ICOS_6x4gA_human_V'] = 'IgV';
66000
- ic.ref2igtype['IL6Rb_1bquB_human_FN3-n2'] = 'IgFn3';
66001
- ic.ref2igtype['IL6Rb_1bquB_human_FN3-n3'] = 'IgFn3';
66002
- ic.ref2igtype['InsulinR_8guyE_human_FN3-n1'] = 'IgFn3';
66003
- ic.ref2igtype['InsulinR_8guyE_human_FN3-n2'] = 'IgFn3';
66087
+ ic.ref2igtype['IL6Rb_1bquB_human_FN3-n2'] = 'IgFN3';
66088
+ ic.ref2igtype['IL6Rb_1bquB_human_FN3-n3'] = 'IgFN3';
66089
+ ic.ref2igtype['InsulinR_8guyE_human_FN3-n1'] = 'IgFN3';
66090
+ ic.ref2igtype['InsulinR_8guyE_human_FN3-n2'] = 'IgFN3';
66004
66091
  ic.ref2igtype['IsdA_2iteA_bacteria'] = 'IgE';
66005
66092
  ic.ref2igtype['JAM1_1nbqA_human_VorIset-n2'] = 'IgI';
66006
66093
  ic.ref2igtype['LAG3_7tzgD_human_C2-n2'] = 'IgC2';
@@ -66014,9 +66101,9 @@ class Dssp {
66014
66101
  ic.ref2igtype['PD1_4zqkB_human_V'] = 'IgV';
66015
66102
  ic.ref2igtype['PDL1_4z18B_human_V-n1'] = 'IgV';
66016
66103
  ic.ref2igtype['Palladin_2dm3A_human_Iset-n1'] = 'IgI';
66017
- ic.ref2igtype['RBPJ_6py8C_human_Unk-n1'] = 'IgFn3-like';
66018
- ic.ref2igtype['RBPJ_6py8C_human_Unk-n2'] = 'IgFn3-like';
66019
- ic.ref2igtype['Sidekick2_1wf5A_human_FN3-n7'] = 'IgFn3';
66104
+ ic.ref2igtype['RBPJ_6py8C_human_Unk-n1'] = 'IgFN3-like';
66105
+ ic.ref2igtype['RBPJ_6py8C_human_Unk-n2'] = 'IgFN3-like';
66106
+ ic.ref2igtype['Sidekick2_1wf5A_human_FN3-n7'] = 'IgFN3';
66020
66107
  ic.ref2igtype['Siglec3_5j0bB_human_C2-n2'] = 'IgC2';
66021
66108
  ic.ref2igtype['TCRa_6jxrm_human_C1-n2'] = 'IgC1';
66022
66109
  ic.ref2igtype['TCRa_6jxrm_human_V-n1'] = 'IgV';
@@ -66081,7 +66168,7 @@ class Dssp {
66081
66168
  let thisClass = this;
66082
66169
 
66083
66170
  let struArray = Object.keys(ic.structures);
66084
-
66171
+
66085
66172
  let ajaxArray = [];
66086
66173
  let domainidpairArray = [];
66087
66174
 
@@ -66100,7 +66187,7 @@ class Dssp {
66100
66187
  for(let j = 0, jl = chainidArray.length; j < jl; ++j) {
66101
66188
  let chainid = chainidArray[j];
66102
66189
 
66103
- // for selected atoms only
66190
+ // for selected atoms only, assign ic.resid2domainid[resid]
66104
66191
  let domainAtomsArray = this.getDomainAtomsArray(chainid, bRerun);
66105
66192
 
66106
66193
  if(!ic.domainid2refpdbname) ic.domainid2refpdbname = {};
@@ -66117,8 +66204,8 @@ class Dssp {
66117
66204
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtomsArray[k]);
66118
66205
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtomsArray[k]);
66119
66206
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(domainAtomsArray[k]).length;
66120
- //let domainid = chainid + '-' + k + '_' + Object.keys(domainAtomsArray[k]).length;
66121
- let domainid = chainid + ',' + k + '_' + resiSum;
66207
+ //let domainid = chainid + '-' + k + '_' + Object.keys(domainAtomsArray[k]).length;
66208
+ let domainid = chainid + ',' + k + '_' + resiSum;
66122
66209
  ic.domainid2pdb[domainid] = pdb_target;
66123
66210
 
66124
66211
  if(!template) {
@@ -66136,7 +66223,7 @@ class Dssp {
66136
66223
  // let alignAjax = me.getAjaxPostPromise(urlalign, dataObj);
66137
66224
 
66138
66225
  ajaxArray.push(alignAjax);
66139
-
66226
+
66140
66227
  domainidpairArray.push(domainid + "|" + ic.refpdbArray[index]);
66141
66228
  }
66142
66229
  }
@@ -66156,14 +66243,14 @@ class Dssp {
66156
66243
  // dataArray2 = await allPromise;
66157
66244
 
66158
66245
  dataArray2 = await this.promiseWithFixedJobs(ajaxArray);
66159
-
66246
+
66160
66247
  let bRound1 = true;
66161
- await thisClass.parseAlignData(dataArray2, domainidpairArray, bRound1);
66248
+ bNoMoreIg = await thisClass.parseAlignData(dataArray2, domainidpairArray, bRound1);
66162
66249
 
66163
66250
  /// if(ic.deferredRefnum !== undefined) ic.deferredRefnum.resolve();
66164
66251
  }
66165
66252
  else {
66166
- if(!me.bNode) console.log("Start alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
66253
+ if(!me.bNode) console.log("Start alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
66167
66254
 
66168
66255
  // start round2
66169
66256
  let ajaxArray = [];
@@ -66178,36 +66265,36 @@ class Dssp {
66178
66265
  //let allPromise2 = Promise.allSettled(pdbAjaxArray);
66179
66266
  //ic.pdbDataArray = await allPromise2;
66180
66267
 
66181
- ic.pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
66268
+ let pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
66182
66269
 
66183
66270
  for(let domainid in ic.domainid2refpdbname) {
66184
66271
  ic.domainid2refpdbname[domainid];
66185
66272
  domainid.substr(0, domainid.indexOf(','));
66186
66273
 
66187
66274
  let pdb_target = ic.domainid2pdb[domainid];
66188
- for(let index = 0, indexl = ic.pdbDataArray.length; index < indexl; ++index) {
66275
+ for(let index = 0, indexl = pdbDataArray.length; index < indexl; ++index) {
66189
66276
  let struct2 = ic.defaultPdbId + index;
66190
- let pdb_query = ic.pdbDataArray[index].value; //[0];
66277
+ let pdb_query = pdbDataArray[index].value; //[0];
66191
66278
 
66192
66279
  let header = 'HEADER ' + struct2 + '\n';
66193
66280
  pdb_query = header + pdb_query;
66194
-
66281
+
66195
66282
  let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": template};
66196
66283
  let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
66197
66284
  ajaxArray.push(alignAjax);
66198
-
66285
+
66199
66286
  //domainidpairArray3.push(domainid + "," + refpdbname);
66200
66287
  domainidpairArray3.push(domainid + "|" + template);
66201
66288
  }
66202
66289
  }
66203
-
66290
+
66204
66291
  let dataArray3 = [];
66205
66292
  //let allPromise = Promise.allSettled(ajaxArray);
66206
66293
  //dataArray3 = await allPromise;
66207
66294
 
66208
66295
  dataArray3 = await this.promiseWithFixedJobs(ajaxArray);
66209
-
66210
- await thisClass.parseAlignData(dataArray3, domainidpairArray3);
66296
+
66297
+ bNoMoreIg = await thisClass.parseAlignData(dataArray3, domainidpairArray3);
66211
66298
  }
66212
66299
 
66213
66300
  return bNoMoreIg;
@@ -66223,8 +66310,8 @@ class Dssp {
66223
66310
  }
66224
66311
  //console.log("Error in aligning with TM-align...");
66225
66312
  return;
66226
- }
66227
- */
66313
+ }
66314
+ */
66228
66315
  }
66229
66316
 
66230
66317
  getDomainAtomsArray(chainid, bRerunDomain) { let ic = this.icn3d, me = ic.icn3dui;
@@ -66267,21 +66354,22 @@ class Dssp {
66267
66354
  //let result = ic.domain3dCls.c2b_NewSplitChain(ic.chains[chainid]);
66268
66355
  // assign ref numbers to selected residues
66269
66356
  let result = ic.domain3dCls.c2b_NewSplitChain(currAtoms, undefined);
66270
- let subdomains = result.subdomains;
66357
+ let subdomains = result.subdomains;
66271
66358
  let pos2resi = result.pos2resi;
66272
66359
 
66273
66360
  if(subdomains.length <= 1) {
66274
66361
  let residueArray = ic.resid2specCls.atoms2residues(Object.keys(currAtoms));
66275
66362
  if(residueArray.length < minResidues) return domainAtomsArray;
66276
-
66363
+ /*
66277
66364
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(currAtoms);
66278
66365
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(currAtoms);
66279
66366
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(currAtoms).length;
66280
-
66367
+ */
66281
66368
  for(let n = 0, nl = residueArray.length; n < nl; ++n) {
66282
66369
  let resid = residueArray[n];
66283
- ic.resid2domainid[resid] = chainid + ',0' + '_' + resiSum;
66284
-
66370
+ /*
66371
+ ic.resid2domainid[resid] = chainid + ',0' + '_' + resiSum;
66372
+ */
66285
66373
  // clear previous refnum assignment if any
66286
66374
  // if(!bRerunDomain && ic.resid2refnum && ic.resid2refnum[resid]) {
66287
66375
  // if(ic.resid2refnum && ic.resid2refnum[resid]) {
@@ -66292,7 +66380,7 @@ class Dssp {
66292
66380
 
66293
66381
  domainAtomsArray.push(currAtoms);
66294
66382
  }
66295
- else {
66383
+ else {
66296
66384
  for(let k = 0, kl = subdomains.length; k < kl; ++k) {
66297
66385
  let domainAtoms = {};
66298
66386
  let segArray = subdomains[k];
@@ -66319,7 +66407,7 @@ class Dssp {
66319
66407
  if(resCnt < minResidues) continue;
66320
66408
 
66321
66409
  domainAtomsArray.push(domainAtoms);
66322
-
66410
+ /*
66323
66411
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtoms);
66324
66412
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtoms);
66325
66413
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(domainAtoms).length;
@@ -66330,15 +66418,16 @@ class Dssp {
66330
66418
  for(let n = parseInt(startResi); n <= parseInt(endResi); ++n) {
66331
66419
  let resid = chainid + '_' + pos2resi[n];
66332
66420
  //domainAtoms = me.hashUtilsCls.unionHash(domainAtoms, ic.residues[resid]);
66333
- ic.resid2domainid[resid] = chainid + ',' + k + '_' + resiSum;
66421
+ ic.resid2domainid[resid] = chainid + ',' + k + '_' + resiSum;
66334
66422
  }
66335
66423
  }
66424
+ */
66336
66425
  }
66337
66426
  }
66338
66427
 
66339
66428
  return domainAtomsArray;
66340
66429
  }
66341
-
66430
+
66342
66431
  getTemplateList(domainid) { let ic = this.icn3d; ic.icn3dui;
66343
66432
  let refpdbname = '', score = '', seqid = '', nresAlign = '';
66344
66433
 
@@ -66371,7 +66460,6 @@ class Dssp {
66371
66460
  if(!ic.domainid2ig2imgt) ic.domainid2ig2imgt = {};
66372
66461
 
66373
66462
  let minResidues = 20;
66374
-
66375
66463
  for(let i = 0, il = domainidpairArray.length; i < il; ++i) {
66376
66464
  //let queryData = (me.bNode) ? dataArray[i] : dataArray[i].value; //[0];
66377
66465
  let queryData = (dataArray[i]) ? dataArray[i].value : undefined; //[0];
@@ -66382,7 +66470,7 @@ class Dssp {
66382
66470
  }
66383
66471
 
66384
66472
  if(queryData[0].score === undefined) continue;
66385
-
66473
+
66386
66474
  //let domainid_index = domainidpairArray[i].split(',');
66387
66475
  //let domainid = domainid_index[0];
66388
66476
  let domainid = domainidpairArray[i].substr(0, domainidpairArray[i].indexOf('|'));
@@ -66403,7 +66491,7 @@ class Dssp {
66403
66491
  continue;
66404
66492
  }
66405
66493
  }
66406
-
66494
+
66407
66495
  if(!bRound1) {
66408
66496
  if(!me.bNode) console.log("refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
66409
66497
  }
@@ -66466,8 +66554,13 @@ class Dssp {
66466
66554
  }
66467
66555
 
66468
66556
  if(!domainid2segs.hasOwnProperty(domainid) || queryData[0].score >= ic.domainid2score[domainid].split('_')[0]) {
66469
- ic.domainid2score[domainid] = queryData[0].score + '_' + queryData[0].frac_identical + '_' + queryData[0].num_res ;
66470
- ic.domainid2refpdbname[domainid] = refpdbname;
66557
+ ic.domainid2score[domainid] = queryData[0].score + '_' + queryData[0].frac_identical + '_' + queryData[0].num_res ;
66558
+ if(bRound1) {
66559
+ ic.domainid2refpdbname[domainid] = parseFloat(queryData[0].score) > 0.75 ? refpdbname : 'all_templates';
66560
+ }
66561
+ else {
66562
+ ic.domainid2refpdbname[domainid] = refpdbname;
66563
+ }
66471
66564
  domainid2segs[domainid] = queryData[0].segs;
66472
66565
  ic.domainid2ig2kabat[domainid] = queryData[0].ig2kabat;
66473
66566
  ic.domainid2ig2imgt[domainid] = queryData[0].ig2imgt;
@@ -66478,10 +66571,17 @@ class Dssp {
66478
66571
  }
66479
66572
 
66480
66573
  async parseAlignData(dataArray, domainidpairArray, bRound1) { let ic = this.icn3d, me = ic.icn3dui;
66574
+ let bNoMoreIg = false;
66575
+
66481
66576
  let domainid2segs = this.parseAlignData_part1(dataArray, domainidpairArray, bRound1);
66482
66577
 
66578
+ if(Object.keys(domainid2segs).length == 0) {
66579
+ bNoMoreIg = true;
66580
+ return bNoMoreIg;
66581
+ }
66582
+
66483
66583
  if(bRound1) {
66484
- if(!me.bNode) console.log("Start round 2 alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
66584
+ if(!me.bNode) console.log("Start round 2 alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
66485
66585
 
66486
66586
  // start round2
66487
66587
  let ajaxArray = [];
@@ -66499,7 +66599,7 @@ class Dssp {
66499
66599
  //refpdbname = pdbid;
66500
66600
  refpdbname = chainid;
66501
66601
 
66502
- if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
66602
+ if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
66503
66603
  }
66504
66604
 
66505
66605
  if(!ic.refpdbHash[refpdbname]) {
@@ -66517,20 +66617,20 @@ class Dssp {
66517
66617
  //let allPromise2 = Promise.allSettled(pdbAjaxArray);
66518
66618
  //ic.pdbDataArray = await allPromise2;
66519
66619
 
66520
- ic.pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
66620
+ let pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
66521
66621
 
66522
66622
  let pdb_target = ic.domainid2pdb[domainid];
66523
- for(let index = 0, indexl = ic.pdbDataArray.length; index < indexl; ++index) {
66623
+ for(let index = 0, indexl = pdbDataArray.length; index < indexl; ++index) {
66524
66624
  let struct2 = ic.defaultPdbId + index;
66525
- //let pdb_query = (me.bNode) ? ic.pdbDataArray[index] : ic.pdbDataArray[index].value; //[0];
66526
- let pdb_query = ic.pdbDataArray[index].value; //[0];
66625
+ //let pdb_query = (me.bNode) ? pdbDataArray[index] : pdbDataArray[index].value; //[0];
66626
+ let pdb_query = pdbDataArray[index].value; //[0];
66527
66627
  let header = 'HEADER ' + struct2 + '\n';
66528
66628
  pdb_query = header + pdb_query;
66529
66629
 
66530
66630
  let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": ic.refpdbHash[refpdbname][index]};
66531
66631
  let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
66532
66632
  ajaxArray.push(alignAjax);
66533
-
66633
+
66534
66634
  //domainidpairArray3.push(domainid + "," + refpdbname);
66535
66635
  domainidpairArray3.push(domainid + "|" + ic.refpdbHash[refpdbname][index]);
66536
66636
  }
@@ -66543,12 +66643,14 @@ class Dssp {
66543
66643
  dataArray3 = await this.promiseWithFixedJobs(ajaxArray);
66544
66644
 
66545
66645
  await this.parseAlignData(dataArray3, domainidpairArray3, false);
66546
-
66646
+
66547
66647
  // end of round 2
66548
- return;
66648
+ return bNoMoreIg;
66549
66649
  }
66550
66650
 
66551
66651
  await this.parseAlignData_part3(domainid2segs);
66652
+
66653
+ return bNoMoreIg;
66552
66654
  }
66553
66655
 
66554
66656
  async parseAlignData_part3(domainid2segs) { let ic = this.icn3d, me = ic.icn3dui;
@@ -66694,7 +66796,7 @@ class Dssp {
66694
66796
  for(let i = 0, il = segArray.length; i < il; ++i) {
66695
66797
  let seg = segArray[i];
66696
66798
  if(!seg) continue;
66697
-
66799
+
66698
66800
  let qStart = seg.q_start;
66699
66801
  parseInt(seg.q_start);
66700
66802
  if(isNaN(seg.q_start)) seg.q_start.substr(seg.q_start.length - 1, 1);
@@ -66735,9 +66837,10 @@ class Dssp {
66735
66837
  if(currStrand != currStrandFinal) {
66736
66838
  refnumLabel = this.getLabelFromRefnum(refnum, currStrandFinal);
66737
66839
  }
66738
-
66739
- ic.resid2refnum[resid] = refnumLabel;
66840
+
66841
+ ic.resid2refnum[resid] = refnumLabel;
66740
66842
  ic.resid2refnum_ori[resid] = refnumLabel;
66843
+ ic.resid2domainid[resid] = domainid;
66741
66844
 
66742
66845
  // final reference numbers will be assign in ic.annoIgCls.showRefNum()
66743
66846
 
@@ -66784,7 +66887,7 @@ class Dssp {
66784
66887
  else {
66785
66888
  await ic.showAnnoCls.showAnnotations();
66786
66889
  }
66787
-
66890
+
66788
66891
  ic.annotationCls.setAnnoViewAndDisplay('detailed view');
66789
66892
  }
66790
66893
  else if(!me.bNode) {
@@ -66825,13 +66928,13 @@ class Dssp {
66825
66928
  // loops may have numbers such as 1310, 1410
66826
66929
 
66827
66930
  let refnumLabel;
66828
-
66931
+
66829
66932
  if(refnum < 1000) refnumLabel = undefined;
66830
66933
  else if(refnum >= 1200 && refnum < 1290) refnumLabel = "A---" + oriRefnum;
66831
66934
  else if(refnum >= 1320 && refnum < 1390) refnumLabel = "A--" + oriRefnum;
66832
66935
  else if(refnum >= 1420 && refnum < 1490) refnumLabel = "A-" + oriRefnum;
66833
- else if(refnum >= 1520 && refnum < 1590) refnumLabel = "A" + oriRefnum;
66834
- else if(refnum >= 1620 && refnum < 1690) refnumLabel = "A+" + oriRefnum;
66936
+ else if(refnum >= 1520 && refnum < 1590) refnumLabel = "A" + oriRefnum;
66937
+ else if(refnum >= 1620 && refnum < 1690) refnumLabel = "A+" + oriRefnum;
66835
66938
  else if(refnum >= 1820 && refnum < 1890) refnumLabel = "A'" + oriRefnum;
66836
66939
  else if(refnum >= 2000 && refnum < 2900) refnumLabel = "B" + oriRefnum;
66837
66940
  else if(refnum >= 3300 && refnum < 3390) refnumLabel = "C--" + oriRefnum;
@@ -66840,8 +66943,8 @@ class Dssp {
66840
66943
  else if(refnum >= 4000 && refnum < 4900) refnumLabel = "C'" + oriRefnum;
66841
66944
  else if(refnum >= 5000 && refnum < 5900) refnumLabel = "C''" + oriRefnum;
66842
66945
  else if(refnum >= 6000 && refnum < 6900) refnumLabel = "D" + oriRefnum;
66843
- else if(refnum >= 7500 && refnum < 7590) refnumLabel = "E" + oriRefnum;
66844
- else if(refnum >= 7620 && refnum < 7900) refnumLabel = "E+" + oriRefnum;
66946
+ else if(refnum >= 7500 && refnum < 7590) refnumLabel = "E" + oriRefnum;
66947
+ else if(refnum >= 7620 && refnum < 7900) refnumLabel = "E+" + oriRefnum;
66845
66948
  else if(refnum >= 8000 && refnum < 8900) refnumLabel = "F" + oriRefnum;
66846
66949
  else if(refnum >= 9500 && refnum < 9590) refnumLabel = "G" + oriRefnum;
66847
66950
  else if(refnum >= 9620 && refnum < 9690) refnumLabel = "G+" + oriRefnum;
@@ -66930,7 +67033,7 @@ class Dssp {
66930
67033
  if(type == 'igstrand' || type == 'IgStrand') {
66931
67034
  // iGStrand reference numbers were adjusted when showing in sequences
66932
67035
  if(me.bNode) {
66933
- for(let chnid in ic.chains) {
67036
+ for(let chnid in ic.chains) {
66934
67037
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.chains[chnid]);
66935
67038
  if(ic.proteins.hasOwnProperty(atom.serial)) {
66936
67039
  let giSeq = [];
@@ -66941,22 +67044,22 @@ class Dssp {
66941
67044
  }
66942
67045
  }
66943
67046
  }
66944
-
67047
+
66945
67048
  let resid2refnum = {};
66946
67049
  for(let resid in ic.resid2refnum) {
66947
67050
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
66948
67051
  if(!atom) continue;
66949
-
67052
+
66950
67053
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
66951
-
67054
+
66952
67055
  let domainid = ic.resid2domainid[resid];
66953
67056
  let refnumLabel = ic.resid2refnum[resid];
66954
-
67057
+
66955
67058
  if(refnumLabel) {
66956
67059
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
66957
67060
  (ic.domainid2ig2kabat[domainid]) ? ic.domainid2ig2kabat[domainid][refnumStr_ori] : undefined;
66958
67061
  }
66959
-
67062
+
66960
67063
  if(ic.resid2refnum[resid]) {
66961
67064
  if(ic.residIgLoop.hasOwnProperty(resid)) { // loop
66962
67065
  resid2refnum[resid + '_' + resn] = ic.resid2refnum[resid] + '_loop';
@@ -67037,18 +67140,18 @@ class Dssp {
67037
67140
  for(let resid in ic.resid2refnum) {
67038
67141
  let domainid = ic.resid2domainid[resid];
67039
67142
  let refnumStr, refnumLabel = ic.resid2refnum[resid];
67040
-
67143
+
67041
67144
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
67042
67145
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
67043
-
67146
+
67044
67147
  if(refnumLabel) {
67045
67148
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
67046
67149
  refnumStr = (ic.domainid2ig2kabat[domainid]) ? ic.domainid2ig2kabat[domainid][refnumStr_ori] : undefined;
67047
67150
  }
67048
-
67151
+
67049
67152
  resid2kabat[resid + '_' + resn] = refnumStr;
67050
67153
  }
67051
-
67154
+
67052
67155
  refData += JSON.stringify(resid2kabat);
67053
67156
  }
67054
67157
  // 3. show IMGT ref numbers
@@ -67057,25 +67160,25 @@ class Dssp {
67057
67160
  for(let resid in ic.resid2refnum) {
67058
67161
  let domainid = ic.resid2domainid[resid];
67059
67162
  let refnumStr, refnumLabel = ic.resid2refnum[resid];
67060
-
67163
+
67061
67164
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
67062
67165
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
67063
-
67166
+
67064
67167
  if(refnumLabel) {
67065
67168
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
67066
67169
  refnumStr = (ic.domainid2ig2imgt[domainid]) ? ic.domainid2ig2imgt[domainid][refnumStr_ori] : undefined;
67067
67170
  }
67068
-
67171
+
67069
67172
  resid2imgt[resid + '_' + resn] = refnumStr;
67070
67173
  }
67071
-
67174
+
67072
67175
  refData += JSON.stringify(resid2imgt);
67073
67176
  }
67074
67177
 
67075
67178
 
67076
67179
  if(!me.bNode) {
67077
67180
  let file_pref = Object.keys(me.utilsCls.getHlStructures()).join(',');
67078
-
67181
+
67079
67182
  ic.saveFileCls.saveFile(file_pref + '_refnum_' + type + '.txt', 'text', [refData]);
67080
67183
  }
67081
67184
  else {
@@ -67093,7 +67196,7 @@ class Dssp {
67093
67196
 
67094
67197
  for(let i = 0, il = parseInt((ajaxArray.length - 1) / n + 1); i < il; ++i) {
67095
67198
  let currAjaxArray = [];
67096
- if(i == il - 1) { // last one
67199
+ if(i == il - 1) { // last one
67097
67200
  currAjaxArray = ajaxArray.slice(i * n, ajaxArray.length);
67098
67201
  }
67099
67202
  else {