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.module.js CHANGED
@@ -8279,6 +8279,8 @@ class ClickMenu {
8279
8279
  thisClass.setLogCmd('ig refnum on', true);
8280
8280
  // await ic.refnumCls.showIgRefNum();
8281
8281
  // thisClass.setLogCmd('set annotation ig', true);
8282
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
8283
+
8282
8284
  let bSelection = true;
8283
8285
  await ic.annotationCls.setAnnoTabIg(bSelection);
8284
8286
 
@@ -8303,6 +8305,7 @@ class ClickMenu {
8303
8305
  thisClass.setLogCmd('ig template ' + template, true);
8304
8306
  let bSelection = true;
8305
8307
  // await ic.refnumCls.showIgRefNum(template);
8308
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
8306
8309
  await ic.annotationCls.setAnnoTabIg(bSelection, template);
8307
8310
  });
8308
8311
 
@@ -10428,8 +10431,8 @@ class SetMenu {
10428
10431
  //}
10429
10432
 
10430
10433
  //!!!
10431
- //html += this.getRadio('mn4_clr', 'mn4_clrIgstrand', 'Ig Strand', undefined, undefined, 2);
10432
- //html += this.getRadio('mn4_clr', 'mn4_clrIgproto', 'Ig Protodomain', undefined, undefined, 2);
10434
+ // html += this.getRadio('mn4_clr', 'mn4_clrIgstrand', 'Ig Strand', undefined, undefined, 2);
10435
+ // html += this.getRadio('mn4_clr', 'mn4_clrIgproto', 'Ig Protodomain', undefined, undefined, 2);
10433
10436
  }
10434
10437
  else {
10435
10438
  //if(!me.cfg.hidelicense) html += this.getRadio('mn4_clr', 'mn1_delphi2', 'DelPhi<br><span style="padding-left:1.5em;">Potential ' + me.htmlCls.licenseStr + '</span>');
@@ -10560,7 +10563,7 @@ class SetMenu {
10560
10563
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelResidues', 'per Residue', undefined, 1, 2);
10561
10564
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelResnum', 'per Residue & Number', undefined, 1, 2);
10562
10565
  //!!!
10563
- //html += this.getRadio('mn6_addlabel', 'mn6_addlabelRefnum', 'per Reference Number', undefined, 1, 2);
10566
+ // html += this.getRadio('mn6_addlabel', 'mn6_addlabelRefnum', 'per Reference Number', undefined, 1, 2);
10564
10567
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelChains', 'per Chain', undefined, undefined, 2);
10565
10568
  html += this.getRadio('mn6_addlabel', 'mn6_addlabelTermini', 'N- & C-Termini', undefined, 1, 2);
10566
10569
  }
@@ -10658,8 +10661,9 @@ class SetMenu {
10658
10661
  html += this.getLink('mn6_igrefYes', 'Show Ig for Selection', undefined, 2);
10659
10662
  html += this.getLink('mn6_igrefTpl', 'Ig w/ Specified Template', undefined, 2);
10660
10663
  html += this.getLink('mn6_igrefNo', 'Reset Ig Ref. Number', undefined, 2);
10661
- */
10664
+
10662
10665
  html += this.getMenuSep();
10666
+ */
10663
10667
 
10664
10668
  html += this.getLink('mn6_customref', 'Custom Ref. Number', undefined, 2);
10665
10669
  html += "</ul>";
@@ -12810,12 +12814,17 @@ class SetDialog {
12810
12814
 
12811
12815
  //html += me.htmlCls.setHtmlCls.getOptionHtml(['0', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100'], 3);
12812
12816
  let group2tpl = {};
12813
- 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'];
12814
- 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'];
12815
- group2tpl['C2'] = ['CD2_1hnfA_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2', 'LAG3_7tzgD_human_C2-n2', 'Contactin1_3s97C_human_C2-n2'];
12816
- 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'];
12817
- 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'];
12818
- 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'];
12817
+ 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'];
12818
+ 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'];
12819
+ group2tpl['C2'] = ['CD2_1hnfA_human_C2-n2', 'Contactin1_3s97C_human_C2-n2', 'LAG3_7tzgD_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2'];
12820
+ 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'];
12821
+ 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'];
12822
+
12823
+ 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'];
12824
+
12825
+ group2tpl['FN3-like'] = ['BArrestin1_4jqiA_rat_n1', 'C3_2qkiD_human_n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
12826
+
12827
+ group2tpl['Other'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'LaminAC_1ifrA_human', 'ORF7a_1xakA_virus'];
12819
12828
 
12820
12829
  for(let group in group2tpl) {
12821
12830
  html += "<optgroup label='" + group + "'>";
@@ -12869,10 +12878,10 @@ class SetDialog {
12869
12878
  html += "<td></td>";
12870
12879
  html += "</tr><tr>";
12871
12880
  html += tmpStr1 + me.htmlCls.inputCheckStr + "id='" + me.pre + "anno_ig'>Ig Domains" + me.htmlCls.space2 + "</span></td>";
12872
- */
12881
+
12873
12882
  html += "<td></td>";
12874
12883
  html += "</tr></table></div></div>";
12875
-
12884
+ */
12876
12885
  return html;
12877
12886
  }
12878
12887
  }
@@ -15595,6 +15604,14 @@ class Events {
15595
15604
  thisClass.setLogCmd('define igloop sets | chain ' + chainid, true);
15596
15605
  });
15597
15606
 
15607
+ $(document).on("click", ".icn3d-igdomainsets", function(e) { let ic = me.icn3d;
15608
+ e.stopImmediatePropagation();
15609
+ //e.preventDefault();
15610
+ let chainid = $(this).attr('chainid');
15611
+ ic.addTrackCls.defineIgstrand(chainid, 'igdomain');
15612
+ thisClass.setLogCmd('define igdomain sets | chain ' + chainid, true);
15613
+ });
15614
+
15598
15615
  me.myEventCls.onIds("#" + me.pre + "deletesets", "click", function(e) { let ic = me.icn3d;
15599
15616
  ic.definedSetsCls.deleteSelectedSets();
15600
15617
  thisClass.setLogCmd("delete selected sets", true);
@@ -33374,7 +33391,7 @@ class Instancing {
33374
33391
  }
33375
33392
 
33376
33393
  if(ic.mdlImpostor !== undefined) {
33377
- // after three.js version 128, the cylinder impostor seemed to have a problem in cloning!!!
33394
+ // after three.js version 128, the cylinder impostor seemed to have a problem in cloning
33378
33395
  symmetryMate = ic.mdlImpostor.clone();
33379
33396
  //symmetryMate.applyMatrix(mat);
33380
33397
  this.applyMat(symmetryMate, mat);
@@ -37654,7 +37671,8 @@ class AnnoCddSite {
37654
37671
 
37655
37672
  //var setname = chnid + "_" + domain + "_" + index + "_" + r; //chnid + "_" + type + "_" + index + "_" + r;
37656
37673
  let setname = chnid + "_" + domain;
37657
- if(type != 'domain') setname += "_" + index + "_" + r; // + acc2domain[acc];
37674
+ // if(type != 'domain') setname += "_" + index + "_" + r;
37675
+ if(type != 'domain') setname = chnid + "_" + index + "_" + r + "_" + domain;
37658
37676
 
37659
37677
  if(type == 'domain') pssmid2fromArray[pssmid] = fromArray;
37660
37678
  if(type == 'domain') pssmid2toArray[pssmid] = toArray;
@@ -37733,7 +37751,13 @@ class AnnoCddSite {
37733
37751
 
37734
37752
  if(me.cfg.blast_rep_id != chnid) { // regular
37735
37753
  for(let i = 0, il = fromArray.length; i < il; ++i) {
37736
- 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);
37754
+ let emptyWidth;
37755
+ if(titleArray) {
37756
+ emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
37757
+ }
37758
+ else {
37759
+ 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);
37760
+ }
37737
37761
 
37738
37762
  html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;">&nbsp;</div>';
37739
37763
  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>';
@@ -38987,7 +39011,7 @@ class AnnoIg {
38987
39011
  refnumLabel = ic.resid2refnum[residueid];
38988
39012
  let bHidelabel = false;
38989
39013
 
38990
- if(refnumLabel) {
39014
+ if(refnumLabel) {
38991
39015
  refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
38992
39016
  currStrand = refnumLabel.replace(new RegExp(refnumStr_ori,'g'), '');
38993
39017
  currStrand_ori = currStrand;
@@ -39019,8 +39043,9 @@ class AnnoIg {
39019
39043
 
39020
39044
  igElem = {};
39021
39045
  igElem.startPos = i;
39022
- igElem.domainid = domainid;
39023
39046
  }
39047
+
39048
+ if(domainid) igElem.domainid = domainid;
39024
39049
 
39025
39050
  if(bCustom) {
39026
39051
  if(!refnumStr) {
@@ -39107,11 +39132,11 @@ class AnnoIg {
39107
39132
  htmlTmp += '<span class="icn3d-residueNum"></span>';
39108
39133
  }
39109
39134
  else if(kabat_or_imgt == 1) {
39110
- htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="Kabat Reference Numbers ' + refStruTitle + '">Kabat Ref. No.</div>';
39135
+ htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="Kabat Reference Numbers">Kabat Ref. No.</div>';
39111
39136
  htmlTmp += '<span class="icn3d-residueNum"></span>';
39112
39137
  }
39113
39138
  else if(kabat_or_imgt == 2) {
39114
- htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="IMGT Reference Numbers ' + refStruTitle + '">IMGT Ref. No.</div>';
39139
+ htmlTmp += '<div class="icn3d-annoTitle" anno="0" title="IMGT Reference Numbers">IMGT Ref. No.</div>';
39115
39140
  htmlTmp += '<span class="icn3d-residueNum"></span>';
39116
39141
  }
39117
39142
  else {
@@ -39135,9 +39160,10 @@ class AnnoIg {
39135
39160
  html += '</div>';
39136
39161
  html += '</div>';
39137
39162
 
39138
- let igArray = ic.chain2igArray[chnid];
39163
+ let igArray = ic.chain2igArray[chnid];
39139
39164
  if(igArray.length == 0) return {html: '', html2: '', html3: ''};
39140
39165
  let rangeArray = [], titleArray = [], fullTitleArray = [], domainArray = [];
39166
+
39141
39167
  for(let i = 0, il = igArray.length; i < il; ++i) {
39142
39168
  let domainid = igArray[i].domainid;
39143
39169
  let info = ic.domainid2info[domainid];
@@ -39163,10 +39189,10 @@ class AnnoIg {
39163
39189
  let colorStr =(atom.color === undefined || atom.color.getHexString() === 'FFFFFF') ? 'DDDDDD' : atom.color.getHexString();
39164
39190
  let color =(atom.color !== undefined) ? colorStr : "CCCCCC";
39165
39191
 
39166
- let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i] - ic.baseResi[chnid] - 1) / ic.maxAnnoLength) :
39192
+ let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i]) / ic.maxAnnoLength) :
39167
39193
  Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
39168
39194
  html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;">&nbsp;</div>';
39169
- 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>';
39195
+ 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>';
39170
39196
  }
39171
39197
 
39172
39198
  html2 += htmlCnt;
@@ -40539,12 +40565,16 @@ class Domain3d {
40539
40565
 
40540
40566
  // this.elements from the this.top of the this.stack
40541
40567
  //elts = &this.elements[this.stack[this.top - 1]];
40568
+
40542
40569
  for(i = this.stack[this.top - 1], il = this.elements.length; i < il; ++i) {
40543
40570
  elts.push(this.elements[i]);
40544
40571
  }
40545
40572
 
40546
40573
  // generate the partition based on the cut //
40547
- for (i = ne = ne0 = ne1 = 0, prt = prt0, t = -1; i < k; i++) {
40574
+ // for (i = ne = ne0 = ne1 = 0, prt = prt0, t = -1; i < k; i++) {
40575
+ let bAtZero = true;
40576
+ prt = prt0;
40577
+ for (i = ne = ne0 = ne1 = 0, t = -1; i < k; i++) {
40548
40578
  // write the this.elements into prt //
40549
40579
  for (j = t + 1; j <= cut[i]; j++)
40550
40580
  prt[ne++] = elts[j];
@@ -40552,15 +40582,20 @@ class Domain3d {
40552
40582
  t = cut[i];
40553
40583
 
40554
40584
  // switch the partition //
40555
- if (prt == prt0) {
40585
+ // if (prt == prt0) {
40586
+ if (bAtZero) {
40556
40587
  ne0 = ne;
40557
40588
  prt = prt1;
40558
40589
  ne = ne1;
40590
+
40591
+ bAtZero = false;
40559
40592
  }
40560
40593
  else {
40561
40594
  ne1 = ne;
40562
40595
  prt = prt0;
40563
40596
  ne = ne0;
40597
+
40598
+ bAtZero = true;
40564
40599
  }
40565
40600
  }
40566
40601
 
@@ -40568,7 +40603,8 @@ class Domain3d {
40568
40603
  for (j = t + 1; j < n; j++)
40569
40604
  prt[ne++] = elts[j];
40570
40605
 
40571
- if (prt == prt0)
40606
+ // if (prt == prt0)
40607
+ if (bAtZero)
40572
40608
  ne0 = ne;
40573
40609
  else
40574
40610
  ne1 = ne;
@@ -41237,6 +41273,8 @@ class Domain3d {
41237
41273
  let ss1 = parseInt(ssPair[0]);
41238
41274
  let ss2 = parseInt(ssPair[1]);
41239
41275
 
41276
+ if(ctable[pair] < this.min_contacts) ctable[pair] = 0;
41277
+
41240
41278
  // both are sheets
41241
41279
  // min number of contacts: this.min_contacts
41242
41280
  if(substruct[ss1 - 1].Sheet && substruct[ss2 - 1].Sheet && ctable[pair] >= this.min_contacts ) {
@@ -41247,7 +41285,7 @@ class Domain3d {
41247
41285
  sheetNeighbor[ss2][ss1] = 1;
41248
41286
  }
41249
41287
  }
41250
-
41288
+
41251
41289
  //https://www.geeksforgeeks.org/number-groups-formed-graph-friends/
41252
41290
  let existing_groups = 0;
41253
41291
  let sheet2sheetnum = {};
@@ -41270,12 +41308,13 @@ class Domain3d {
41270
41308
  // get sheet2sheetnum
41271
41309
  // each neighboring sheet will be represented by the sheet with the smallest sse
41272
41310
  for(let groupnum in this.groupnum2sheet) {
41273
- let ssArray = this.groupnum2sheet[groupnum].sort();
41311
+ let ssArray = this.groupnum2sheet[groupnum].sort(function(a, b){return a-b});
41274
41312
  for(let i = 0, il = ssArray.length; i < il; ++i) {
41275
41313
  sheet2sheetnum[ssArray[i]] = ssArray[0];
41276
41314
  }
41277
41315
  }
41278
41316
 
41317
+ let invalidSheethash = {};
41279
41318
  for (let i = 0; i < nsse; i++) {
41280
41319
  if(substruct[i].Sheet) {
41281
41320
  let sheetsItem = {};
@@ -41288,6 +41327,8 @@ class Domain3d {
41288
41327
  sheetsItem.sheet_num = 0;
41289
41328
  sheetsItem.adj_strand2 = 0;
41290
41329
  sheetsItem.sse = i + 1;
41330
+
41331
+ invalidSheethash[sheetsItem.sse] = 1;
41291
41332
  }
41292
41333
 
41293
41334
  sheets.push(sheetsItem);
@@ -41319,7 +41360,7 @@ class Domain3d {
41319
41360
  }
41320
41361
  }
41321
41362
 
41322
- let minStrand = 6;
41363
+ let minStrand = 6; // number of residues in a strand
41323
41364
 
41324
41365
  if (hasSheets) {
41325
41366
  //sheets: array of sheets, each of which has the key: sheet_num (number of strands), adj_strand1, adj_strand2
@@ -41343,7 +41384,8 @@ class Domain3d {
41343
41384
  if (cnt> 0) {
41344
41385
  for (let i = 0; i < sheets.length; i++) {
41345
41386
  let bsrec = sheets[i];
41346
- this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
41387
+ // this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
41388
+ if(bsrec.sheet_num != 0) this.group_num[bsrec.sse - 1] = bsrec.sheet_num;
41347
41389
  }
41348
41390
  }
41349
41391
  }
@@ -41399,11 +41441,25 @@ class Domain3d {
41399
41441
  }
41400
41442
  }
41401
41443
  }
41402
-
41444
+
41403
41445
  list_parts.sort(function(v1, v2) {
41404
41446
  return v1[0] - v2[0];
41405
41447
  });
41406
41448
 
41449
+ // remove sheets less than 3 residues
41450
+ let list_partsTmp = [];
41451
+ for(let i = 0, il = list_parts.length; i < il; ++i) {
41452
+ let list_parts_item = [];
41453
+ for(let j = 0, jl = list_parts[i].length; j < jl; ++j) {
41454
+ let sse = list_parts[i][j];
41455
+ if(!invalidSheethash.hasOwnProperty(sse)) {
41456
+ list_parts_item.push(sse);
41457
+ }
41458
+ }
41459
+ if(list_parts_item.length >= this.min_sse) list_partsTmp.push(list_parts[i]);
41460
+ }
41461
+ list_parts = list_partsTmp;
41462
+
41407
41463
  //for (lplet = list_parts.begin(); lplet != list_parts.end(); lpint++) {
41408
41464
  for (let index = 0, indexl = list_parts.length; index < indexl; ++index) {
41409
41465
  //vector<int> prts = *lpint;
@@ -42490,91 +42546,115 @@ class AddTrack {
42490
42546
  let selectedResidues = {};
42491
42547
  let bUnion = false, bUpdateHighlight = true;
42492
42548
 
42493
- let strandCnt = 0, loopCnt = 0;
42494
- let setName, currStrand, prevStrand, prevStrandReal = 'NT', currType, prevType;
42495
-
42496
42549
  // clear selection
42497
42550
  ic.hAtoms = {};
42498
42551
 
42499
- let bStart = false;
42500
-
42501
- for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
42502
- let currResi = ic.chainsSeq[chainid][i].resi;
42503
- let resid = chainid + '_' + currResi;
42552
+ if(type == 'igdomain') {
42553
+ let igArray = ic.chain2igArray[chainid];
42504
42554
 
42505
- if(!ic.residues.hasOwnProperty(resid) ) continue;
42506
-
42507
- let refnumLabel, refnumStr, refnum;
42508
- refnumLabel = ic.resid2refnum[resid];
42509
- if(!refnumLabel) continue;
42555
+ if(igArray && igArray.length > 0) {
42556
+
42557
+ for(let i = 0, il = igArray.length; i < il; ++i) {
42558
+ let startPos = igArray[i].startPos;
42559
+ let endPos = igArray[i].endPos;
42560
+ let domainid = igArray[i].domainid;
42510
42561
 
42511
- refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
42512
- currStrand = refnumLabel.replace(refnumStr, '');
42513
- refnum = parseInt(refnumStr);
42562
+ selectedResidues = {};
42563
+ for(let j = parseInt(startPos); j <= parseInt(endPos); ++j) {
42564
+ let currResi = ic.chainsSeq[chainid][j].resi;
42565
+ let resid = chainid + '_' + currResi;
42566
+ selectedResidues[resid] = 1;
42567
+ }
42514
42568
 
42515
- if(type == 'iganchor') {
42516
- if(refnum > 1000 && refnumStr.substr(refnumStr.length - 2, 2) == '50') {
42517
- selectedResidues[resid] = 1;
42518
- }
42519
- }
42520
- else {
42521
- if(ic.residIgLoop.hasOwnProperty(resid)) {
42522
- currType = 'igloop';
42569
+ let setName = domainid;
42570
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42523
42571
  }
42572
+ }
42573
+ }
42574
+ else {
42575
+ let strandCnt = 0, loopCnt = 0;
42576
+ let setName, currStrand, prevStrand, prevStrandReal = 'NT', currType, prevType;
42577
+
42578
+ let bStart = false;
42579
+
42580
+ for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
42581
+ let currResi = ic.chainsSeq[chainid][i].resi;
42582
+ let resid = chainid + '_' + currResi;
42583
+
42584
+ if(!ic.residues.hasOwnProperty(resid) ) continue;
42585
+
42586
+ let refnumLabel, refnumStr, refnum;
42587
+ refnumLabel = ic.resid2refnum[resid];
42588
+ if(!refnumLabel) continue;
42589
+
42590
+ refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
42591
+ currStrand = refnumLabel.replace(refnumStr, '');
42592
+ refnum = parseInt(refnumStr);
42593
+
42594
+ if(type == 'iganchor') {
42595
+ if(refnum > 1000 && refnumStr.substr(refnumStr.length - 2, 2) == '50') {
42596
+ selectedResidues[resid] = 1;
42597
+ }
42598
+ }
42524
42599
  else {
42525
- currType = 'igstrand';
42526
- }
42600
+ if(ic.residIgLoop.hasOwnProperty(resid)) {
42601
+ currType = 'igloop';
42602
+ }
42603
+ else {
42604
+ currType = 'igstrand';
42605
+ }
42527
42606
 
42528
- if(bStart && currType != prevType && Object.keys(selectedResidues).length > 0) {
42529
- if(prevType == 'igstrand') {
42530
- ++strandCnt;
42531
- setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
42532
- setName = setName.replace(/'/g, '`');
42533
- if(type == 'igstrand') {
42534
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42535
- if(!bUnion) bUnion = true;
42607
+ if(bStart && currType != prevType && Object.keys(selectedResidues).length > 0) {
42608
+ if(prevType == 'igstrand') {
42609
+ ++strandCnt;
42610
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
42611
+ setName = setName.replace(/'/g, '`');
42612
+ if(type == 'igstrand') {
42613
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42614
+ if(!bUnion) bUnion = true;
42615
+ }
42616
+ prevStrandReal = prevStrand;
42536
42617
  }
42537
- prevStrandReal = prevStrand;
42538
- }
42539
- else if(prevType == 'igloop') {
42540
- ++loopCnt;
42541
- setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
42542
- setName = setName.replace(/'/g, '`');
42543
- if(type == 'igloop') {
42544
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42545
- if(!bUnion) bUnion = true;
42618
+ else if(prevType == 'igloop') {
42619
+ ++loopCnt;
42620
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
42621
+ setName = setName.replace(/'/g, '`');
42622
+ if(type == 'igloop') {
42623
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42624
+ if(!bUnion) bUnion = true;
42625
+ }
42546
42626
  }
42547
- }
42548
42627
 
42549
- selectedResidues = {};
42550
- }
42628
+ selectedResidues = {};
42629
+ }
42551
42630
 
42552
- selectedResidues[resid] = 1;
42631
+ selectedResidues[resid] = 1;
42553
42632
 
42554
- prevStrand = currStrand;
42555
- prevType = currType;
42633
+ prevStrand = currStrand;
42634
+ prevType = currType;
42556
42635
 
42557
- bStart = true;
42558
- }
42559
- } // for loop
42636
+ bStart = true;
42637
+ }
42638
+ } // for loop
42560
42639
 
42561
- if(type == 'iganchor') {
42562
- setName = 'Anchor-' + chainid;
42563
- ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42564
- }
42565
- else {
42566
- if(prevType == 'igstrand') {
42567
- ++strandCnt;
42568
- setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
42569
- setName = setName.replace(/'/g, '`');
42570
- if(type == 'igstrand') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42640
+ if(type == 'iganchor') {
42641
+ setName = 'Anchor-' + chainid;
42642
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42571
42643
  }
42572
- else if(prevType == 'igloop') {
42573
- ++loopCnt;
42574
- currStrand = 'CT';
42575
- setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
42576
- setName = setName.replace(/'/g, '`');
42577
- if(type == 'igloop') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42644
+ else {
42645
+ if(prevType == 'igstrand') {
42646
+ ++strandCnt;
42647
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
42648
+ setName = setName.replace(/'/g, '`');
42649
+ if(type == 'igstrand') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42650
+ }
42651
+ else if(prevType == 'igloop') {
42652
+ ++loopCnt;
42653
+ currStrand = 'CT';
42654
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
42655
+ setName = setName.replace(/'/g, '`');
42656
+ if(type == 'igloop') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
42657
+ }
42578
42658
  }
42579
42659
  }
42580
42660
  }
@@ -44433,10 +44513,12 @@ class ShowAnno {
44433
44513
  + 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;"
44434
44514
  + 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);
44435
44515
 
44436
- if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
44437
- 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;"
44438
- + 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);
44439
- }
44516
+ // if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid) && ic.chainid2refpdbname[chnid].length > 0) {
44517
+ 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;"
44518
+ + 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;"
44519
+ + 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;"
44520
+ + 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);
44521
+ // }
44440
44522
  $("#" + ic.pre + "dl_annotations").append(chainHtml);
44441
44523
  //let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'domain', 'site', 'ptm', 'interaction', 'custom', 'ssbond', 'crosslink', 'transmem'];
44442
44524
  let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'site', 'ptm', 'ssbond', 'crosslink', 'transmem', 'domain', 'custom', 'interaction', 'ig'];
@@ -61079,6 +61161,7 @@ class ApplyCommand {
61079
61161
  await ic.annotationCls.setAnnoTabIg();
61080
61162
  }
61081
61163
  else if(command == 'ig refnum on') {
61164
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
61082
61165
  await ic.annotationCls.setAnnoTabIg(true);
61083
61166
  }
61084
61167
  else if(command == 'highlight level up') {
@@ -63568,6 +63651,7 @@ class LoadScript {
63568
63651
  else if(command.indexOf('ig template') == 0 ) {
63569
63652
  let template = command.substr(command.lastIndexOf(' ') + 1);
63570
63653
  // await ic.refnumCls.showIgRefNum(template);
63654
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
63571
63655
  await ic.annotationCls.setAnnoTabIg(true, template);
63572
63656
  }
63573
63657
  else if(command.indexOf('set annotation 3ddomain') == 0) { // the command may have "|||{"factor"...
@@ -63771,6 +63855,7 @@ class LoadScript {
63771
63855
  }
63772
63856
  else if(lastCommand.indexOf('ig refnum on') == 0) {
63773
63857
  // await ic.refnumCls.showIgRefNum();
63858
+ if(!ic.bAnnoShown) await ic.showAnnoCls.showAnnotations();
63774
63859
  await ic.annotationCls.setAnnoTabIg(true);
63775
63860
  }
63776
63861
  else if(lastCommand.indexOf('set annotation 3ddomain') == 0) {
@@ -63897,7 +63982,7 @@ class LoadScript {
63897
63982
  let idNew = '';
63898
63983
  for(let i = 0, il = idArray.length; i < il; ++i) {
63899
63984
  if(!(ic.structures && ic.structures.hasOwnProperty(idArray[i]))) {
63900
- if(!idNew) idNew += ',';
63985
+ if(idNew) idNew += ',';
63901
63986
  idNew += idArray[i];
63902
63987
  }
63903
63988
  }
@@ -66818,7 +66903,9 @@ class Dssp {
66818
66903
  ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human', 'CD3d_6jxrd_human_Iset'];
66819
66904
  ic.refpdbHash['1CD3g_6jxrg_human_Iset'] = ['CD3g_6jxrg_human_Iset', 'TCRa_6jxrm_human_C1-n2', 'IsdA_2iteA_bacteria'];
66820
66905
  ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V', 'MPT63_1lmiA_bacteria', 'CD3e_6jxrf_human_Iset'];
66821
- ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
66906
+ ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
66907
+
66908
+ 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'];
66822
66909
 
66823
66910
  // use known ref structure
66824
66911
  ic.refpdbHash['5ESV_C'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2'];
@@ -66875,9 +66962,9 @@ class Dssp {
66875
66962
 
66876
66963
  ic.ref2igtype['ASF1A_2iijA_human'] = 'IgE';
66877
66964
  ic.ref2igtype['B2Microglobulin_7phrL_human_C1'] = 'IgC1';
66878
- ic.ref2igtype['BArrestin1_4jqiA_rat_n1'] = 'IgFn3-like';
66965
+ ic.ref2igtype['BArrestin1_4jqiA_rat_n1'] = 'IgFN3-like';
66879
66966
  ic.ref2igtype['BTLA_2aw2A_human_Iset'] = 'IgI';
66880
- ic.ref2igtype['C3_2qkiD_human_n1'] = 'IgFn3-like';
66967
+ ic.ref2igtype['C3_2qkiD_human_n1'] = 'IgFN3-like';
66881
66968
  ic.ref2igtype['CD19_6al5A_human_C2orV-n1'] = 'other Ig'; //'CD19';
66882
66969
  ic.ref2igtype['CD28_1yjdC_human_V'] = 'IgV';
66883
66970
  ic.ref2igtype['CD2_1hnfA_human_C2-n2'] = 'IgC2';
@@ -66887,7 +66974,7 @@ class Dssp {
66887
66974
  ic.ref2igtype['CD3g_6jxrg_human_Iset'] = 'IgI';
66888
66975
  ic.ref2igtype['CD8a_1cd8A_human_V'] = 'IgV';
66889
66976
  ic.ref2igtype['CoAtomerGamma1_1r4xA_human'] = 'IgE';
66890
- ic.ref2igtype['Contactin1_2ee2A_human_FN3-n9'] = 'IgFn3';
66977
+ ic.ref2igtype['Contactin1_2ee2A_human_FN3-n9'] = 'IgFN3';
66891
66978
  ic.ref2igtype['Contactin1_3s97C_human_C2-n2'] = 'IgC2';
66892
66979
  ic.ref2igtype['CuZnSuperoxideDismutase_1hl5C_human'] = 'other Ig'; //'SOD';
66893
66980
  ic.ref2igtype['ECadherin_4zt1A_human_n2'] = 'other Ig'; //'Cadherin';
@@ -66896,12 +66983,12 @@ class Dssp {
66896
66983
  ic.ref2igtype['FAB-HEAVY_5esv_V-n1'] = 'IgV';
66897
66984
  ic.ref2igtype['FAB-LIGHT_5esv_C1-n2'] = 'IgC1';
66898
66985
  ic.ref2igtype['FAB-LIGHT_5esv_V-n1'] = 'IgV';
66899
- ic.ref2igtype['GHR_1axiB_human_FN3-n1'] = 'IgFn3';
66986
+ ic.ref2igtype['GHR_1axiB_human_FN3-n1'] = 'IgFN3';
66900
66987
  ic.ref2igtype['ICOS_6x4gA_human_V'] = 'IgV';
66901
- ic.ref2igtype['IL6Rb_1bquB_human_FN3-n2'] = 'IgFn3';
66902
- ic.ref2igtype['IL6Rb_1bquB_human_FN3-n3'] = 'IgFn3';
66903
- ic.ref2igtype['InsulinR_8guyE_human_FN3-n1'] = 'IgFn3';
66904
- ic.ref2igtype['InsulinR_8guyE_human_FN3-n2'] = 'IgFn3';
66988
+ ic.ref2igtype['IL6Rb_1bquB_human_FN3-n2'] = 'IgFN3';
66989
+ ic.ref2igtype['IL6Rb_1bquB_human_FN3-n3'] = 'IgFN3';
66990
+ ic.ref2igtype['InsulinR_8guyE_human_FN3-n1'] = 'IgFN3';
66991
+ ic.ref2igtype['InsulinR_8guyE_human_FN3-n2'] = 'IgFN3';
66905
66992
  ic.ref2igtype['IsdA_2iteA_bacteria'] = 'IgE';
66906
66993
  ic.ref2igtype['JAM1_1nbqA_human_VorIset-n2'] = 'IgI';
66907
66994
  ic.ref2igtype['LAG3_7tzgD_human_C2-n2'] = 'IgC2';
@@ -66915,9 +67002,9 @@ class Dssp {
66915
67002
  ic.ref2igtype['PD1_4zqkB_human_V'] = 'IgV';
66916
67003
  ic.ref2igtype['PDL1_4z18B_human_V-n1'] = 'IgV';
66917
67004
  ic.ref2igtype['Palladin_2dm3A_human_Iset-n1'] = 'IgI';
66918
- ic.ref2igtype['RBPJ_6py8C_human_Unk-n1'] = 'IgFn3-like';
66919
- ic.ref2igtype['RBPJ_6py8C_human_Unk-n2'] = 'IgFn3-like';
66920
- ic.ref2igtype['Sidekick2_1wf5A_human_FN3-n7'] = 'IgFn3';
67005
+ ic.ref2igtype['RBPJ_6py8C_human_Unk-n1'] = 'IgFN3-like';
67006
+ ic.ref2igtype['RBPJ_6py8C_human_Unk-n2'] = 'IgFN3-like';
67007
+ ic.ref2igtype['Sidekick2_1wf5A_human_FN3-n7'] = 'IgFN3';
66921
67008
  ic.ref2igtype['Siglec3_5j0bB_human_C2-n2'] = 'IgC2';
66922
67009
  ic.ref2igtype['TCRa_6jxrm_human_C1-n2'] = 'IgC1';
66923
67010
  ic.ref2igtype['TCRa_6jxrm_human_V-n1'] = 'IgV';
@@ -66982,7 +67069,7 @@ class Dssp {
66982
67069
  let thisClass = this;
66983
67070
 
66984
67071
  let struArray = Object.keys(ic.structures);
66985
-
67072
+
66986
67073
  let ajaxArray = [];
66987
67074
  let domainidpairArray = [];
66988
67075
 
@@ -67001,7 +67088,7 @@ class Dssp {
67001
67088
  for(let j = 0, jl = chainidArray.length; j < jl; ++j) {
67002
67089
  let chainid = chainidArray[j];
67003
67090
 
67004
- // for selected atoms only
67091
+ // for selected atoms only, assign ic.resid2domainid[resid]
67005
67092
  let domainAtomsArray = this.getDomainAtomsArray(chainid, bRerun);
67006
67093
 
67007
67094
  if(!ic.domainid2refpdbname) ic.domainid2refpdbname = {};
@@ -67018,8 +67105,8 @@ class Dssp {
67018
67105
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtomsArray[k]);
67019
67106
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtomsArray[k]);
67020
67107
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(domainAtomsArray[k]).length;
67021
- //let domainid = chainid + '-' + k + '_' + Object.keys(domainAtomsArray[k]).length;
67022
- let domainid = chainid + ',' + k + '_' + resiSum;
67108
+ //let domainid = chainid + '-' + k + '_' + Object.keys(domainAtomsArray[k]).length;
67109
+ let domainid = chainid + ',' + k + '_' + resiSum;
67023
67110
  ic.domainid2pdb[domainid] = pdb_target;
67024
67111
 
67025
67112
  if(!template) {
@@ -67037,7 +67124,7 @@ class Dssp {
67037
67124
  // let alignAjax = me.getAjaxPostPromise(urlalign, dataObj);
67038
67125
 
67039
67126
  ajaxArray.push(alignAjax);
67040
-
67127
+
67041
67128
  domainidpairArray.push(domainid + "|" + ic.refpdbArray[index]);
67042
67129
  }
67043
67130
  }
@@ -67057,14 +67144,14 @@ class Dssp {
67057
67144
  // dataArray2 = await allPromise;
67058
67145
 
67059
67146
  dataArray2 = await this.promiseWithFixedJobs(ajaxArray);
67060
-
67147
+
67061
67148
  let bRound1 = true;
67062
- await thisClass.parseAlignData(dataArray2, domainidpairArray, bRound1);
67149
+ bNoMoreIg = await thisClass.parseAlignData(dataArray2, domainidpairArray, bRound1);
67063
67150
 
67064
67151
  /// if(ic.deferredRefnum !== undefined) ic.deferredRefnum.resolve();
67065
67152
  }
67066
67153
  else {
67067
- if(!me.bNode) console.log("Start alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
67154
+ if(!me.bNode) console.log("Start alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
67068
67155
 
67069
67156
  // start round2
67070
67157
  let ajaxArray = [];
@@ -67079,36 +67166,36 @@ class Dssp {
67079
67166
  //let allPromise2 = Promise.allSettled(pdbAjaxArray);
67080
67167
  //ic.pdbDataArray = await allPromise2;
67081
67168
 
67082
- ic.pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
67169
+ let pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
67083
67170
 
67084
67171
  for(let domainid in ic.domainid2refpdbname) {
67085
67172
  ic.domainid2refpdbname[domainid];
67086
67173
  domainid.substr(0, domainid.indexOf(','));
67087
67174
 
67088
67175
  let pdb_target = ic.domainid2pdb[domainid];
67089
- for(let index = 0, indexl = ic.pdbDataArray.length; index < indexl; ++index) {
67176
+ for(let index = 0, indexl = pdbDataArray.length; index < indexl; ++index) {
67090
67177
  let struct2 = ic.defaultPdbId + index;
67091
- let pdb_query = ic.pdbDataArray[index].value; //[0];
67178
+ let pdb_query = pdbDataArray[index].value; //[0];
67092
67179
 
67093
67180
  let header = 'HEADER ' + struct2 + '\n';
67094
67181
  pdb_query = header + pdb_query;
67095
-
67182
+
67096
67183
  let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": template};
67097
67184
  let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
67098
67185
  ajaxArray.push(alignAjax);
67099
-
67186
+
67100
67187
  //domainidpairArray3.push(domainid + "," + refpdbname);
67101
67188
  domainidpairArray3.push(domainid + "|" + template);
67102
67189
  }
67103
67190
  }
67104
-
67191
+
67105
67192
  let dataArray3 = [];
67106
67193
  //let allPromise = Promise.allSettled(ajaxArray);
67107
67194
  //dataArray3 = await allPromise;
67108
67195
 
67109
67196
  dataArray3 = await this.promiseWithFixedJobs(ajaxArray);
67110
-
67111
- await thisClass.parseAlignData(dataArray3, domainidpairArray3);
67197
+
67198
+ bNoMoreIg = await thisClass.parseAlignData(dataArray3, domainidpairArray3);
67112
67199
  }
67113
67200
 
67114
67201
  return bNoMoreIg;
@@ -67124,8 +67211,8 @@ class Dssp {
67124
67211
  }
67125
67212
  //console.log("Error in aligning with TM-align...");
67126
67213
  return;
67127
- }
67128
- */
67214
+ }
67215
+ */
67129
67216
  }
67130
67217
 
67131
67218
  getDomainAtomsArray(chainid, bRerunDomain) { let ic = this.icn3d, me = ic.icn3dui;
@@ -67168,21 +67255,22 @@ class Dssp {
67168
67255
  //let result = ic.domain3dCls.c2b_NewSplitChain(ic.chains[chainid]);
67169
67256
  // assign ref numbers to selected residues
67170
67257
  let result = ic.domain3dCls.c2b_NewSplitChain(currAtoms, undefined);
67171
- let subdomains = result.subdomains;
67258
+ let subdomains = result.subdomains;
67172
67259
  let pos2resi = result.pos2resi;
67173
67260
 
67174
67261
  if(subdomains.length <= 1) {
67175
67262
  let residueArray = ic.resid2specCls.atoms2residues(Object.keys(currAtoms));
67176
67263
  if(residueArray.length < minResidues) return domainAtomsArray;
67177
-
67264
+ /*
67178
67265
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(currAtoms);
67179
67266
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(currAtoms);
67180
67267
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(currAtoms).length;
67181
-
67268
+ */
67182
67269
  for(let n = 0, nl = residueArray.length; n < nl; ++n) {
67183
67270
  let resid = residueArray[n];
67184
- ic.resid2domainid[resid] = chainid + ',0' + '_' + resiSum;
67185
-
67271
+ /*
67272
+ ic.resid2domainid[resid] = chainid + ',0' + '_' + resiSum;
67273
+ */
67186
67274
  // clear previous refnum assignment if any
67187
67275
  // if(!bRerunDomain && ic.resid2refnum && ic.resid2refnum[resid]) {
67188
67276
  // if(ic.resid2refnum && ic.resid2refnum[resid]) {
@@ -67193,7 +67281,7 @@ class Dssp {
67193
67281
 
67194
67282
  domainAtomsArray.push(currAtoms);
67195
67283
  }
67196
- else {
67284
+ else {
67197
67285
  for(let k = 0, kl = subdomains.length; k < kl; ++k) {
67198
67286
  let domainAtoms = {};
67199
67287
  let segArray = subdomains[k];
@@ -67220,7 +67308,7 @@ class Dssp {
67220
67308
  if(resCnt < minResidues) continue;
67221
67309
 
67222
67310
  domainAtomsArray.push(domainAtoms);
67223
-
67311
+ /*
67224
67312
  let atomFirst = ic.firstAtomObjCls.getFirstAtomObj(domainAtoms);
67225
67313
  let atomLast = ic.firstAtomObjCls.getLastAtomObj(domainAtoms);
67226
67314
  let resiSum = atomFirst.resi + ':' + atomLast.resi + ':' + Object.keys(domainAtoms).length;
@@ -67231,15 +67319,16 @@ class Dssp {
67231
67319
  for(let n = parseInt(startResi); n <= parseInt(endResi); ++n) {
67232
67320
  let resid = chainid + '_' + pos2resi[n];
67233
67321
  //domainAtoms = me.hashUtilsCls.unionHash(domainAtoms, ic.residues[resid]);
67234
- ic.resid2domainid[resid] = chainid + ',' + k + '_' + resiSum;
67322
+ ic.resid2domainid[resid] = chainid + ',' + k + '_' + resiSum;
67235
67323
  }
67236
67324
  }
67325
+ */
67237
67326
  }
67238
67327
  }
67239
67328
 
67240
67329
  return domainAtomsArray;
67241
67330
  }
67242
-
67331
+
67243
67332
  getTemplateList(domainid) { let ic = this.icn3d; ic.icn3dui;
67244
67333
  let refpdbname = '', score = '', seqid = '', nresAlign = '';
67245
67334
 
@@ -67272,7 +67361,6 @@ class Dssp {
67272
67361
  if(!ic.domainid2ig2imgt) ic.domainid2ig2imgt = {};
67273
67362
 
67274
67363
  let minResidues = 20;
67275
-
67276
67364
  for(let i = 0, il = domainidpairArray.length; i < il; ++i) {
67277
67365
  //let queryData = (me.bNode) ? dataArray[i] : dataArray[i].value; //[0];
67278
67366
  let queryData = (dataArray[i]) ? dataArray[i].value : undefined; //[0];
@@ -67283,7 +67371,7 @@ class Dssp {
67283
67371
  }
67284
67372
 
67285
67373
  if(queryData[0].score === undefined) continue;
67286
-
67374
+
67287
67375
  //let domainid_index = domainidpairArray[i].split(',');
67288
67376
  //let domainid = domainid_index[0];
67289
67377
  let domainid = domainidpairArray[i].substr(0, domainidpairArray[i].indexOf('|'));
@@ -67304,7 +67392,7 @@ class Dssp {
67304
67392
  continue;
67305
67393
  }
67306
67394
  }
67307
-
67395
+
67308
67396
  if(!bRound1) {
67309
67397
  if(!me.bNode) console.log("refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
67310
67398
  }
@@ -67367,8 +67455,13 @@ class Dssp {
67367
67455
  }
67368
67456
 
67369
67457
  if(!domainid2segs.hasOwnProperty(domainid) || queryData[0].score >= ic.domainid2score[domainid].split('_')[0]) {
67370
- ic.domainid2score[domainid] = queryData[0].score + '_' + queryData[0].frac_identical + '_' + queryData[0].num_res ;
67371
- ic.domainid2refpdbname[domainid] = refpdbname;
67458
+ ic.domainid2score[domainid] = queryData[0].score + '_' + queryData[0].frac_identical + '_' + queryData[0].num_res ;
67459
+ if(bRound1) {
67460
+ ic.domainid2refpdbname[domainid] = parseFloat(queryData[0].score) > 0.75 ? refpdbname : 'all_templates';
67461
+ }
67462
+ else {
67463
+ ic.domainid2refpdbname[domainid] = refpdbname;
67464
+ }
67372
67465
  domainid2segs[domainid] = queryData[0].segs;
67373
67466
  ic.domainid2ig2kabat[domainid] = queryData[0].ig2kabat;
67374
67467
  ic.domainid2ig2imgt[domainid] = queryData[0].ig2imgt;
@@ -67379,10 +67472,17 @@ class Dssp {
67379
67472
  }
67380
67473
 
67381
67474
  async parseAlignData(dataArray, domainidpairArray, bRound1) { let ic = this.icn3d, me = ic.icn3dui;
67475
+ let bNoMoreIg = false;
67476
+
67382
67477
  let domainid2segs = this.parseAlignData_part1(dataArray, domainidpairArray, bRound1);
67383
67478
 
67479
+ if(Object.keys(domainid2segs).length == 0) {
67480
+ bNoMoreIg = true;
67481
+ return bNoMoreIg;
67482
+ }
67483
+
67384
67484
  if(bRound1) {
67385
- if(!me.bNode) console.log("Start round 2 alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
67485
+ if(!me.bNode) console.log("Start round 2 alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
67386
67486
 
67387
67487
  // start round2
67388
67488
  let ajaxArray = [];
@@ -67400,7 +67500,7 @@ class Dssp {
67400
67500
  //refpdbname = pdbid;
67401
67501
  refpdbname = chainid;
67402
67502
 
67403
- if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
67503
+ if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
67404
67504
  }
67405
67505
 
67406
67506
  if(!ic.refpdbHash[refpdbname]) {
@@ -67418,20 +67518,20 @@ class Dssp {
67418
67518
  //let allPromise2 = Promise.allSettled(pdbAjaxArray);
67419
67519
  //ic.pdbDataArray = await allPromise2;
67420
67520
 
67421
- ic.pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
67521
+ let pdbDataArray = await this.promiseWithFixedJobs(pdbAjaxArray);
67422
67522
 
67423
67523
  let pdb_target = ic.domainid2pdb[domainid];
67424
- for(let index = 0, indexl = ic.pdbDataArray.length; index < indexl; ++index) {
67524
+ for(let index = 0, indexl = pdbDataArray.length; index < indexl; ++index) {
67425
67525
  let struct2 = ic.defaultPdbId + index;
67426
- //let pdb_query = (me.bNode) ? ic.pdbDataArray[index] : ic.pdbDataArray[index].value; //[0];
67427
- let pdb_query = ic.pdbDataArray[index].value; //[0];
67526
+ //let pdb_query = (me.bNode) ? pdbDataArray[index] : pdbDataArray[index].value; //[0];
67527
+ let pdb_query = pdbDataArray[index].value; //[0];
67428
67528
  let header = 'HEADER ' + struct2 + '\n';
67429
67529
  pdb_query = header + pdb_query;
67430
67530
 
67431
67531
  let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": ic.refpdbHash[refpdbname][index]};
67432
67532
  let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
67433
67533
  ajaxArray.push(alignAjax);
67434
-
67534
+
67435
67535
  //domainidpairArray3.push(domainid + "," + refpdbname);
67436
67536
  domainidpairArray3.push(domainid + "|" + ic.refpdbHash[refpdbname][index]);
67437
67537
  }
@@ -67444,12 +67544,14 @@ class Dssp {
67444
67544
  dataArray3 = await this.promiseWithFixedJobs(ajaxArray);
67445
67545
 
67446
67546
  await this.parseAlignData(dataArray3, domainidpairArray3, false);
67447
-
67547
+
67448
67548
  // end of round 2
67449
- return;
67549
+ return bNoMoreIg;
67450
67550
  }
67451
67551
 
67452
67552
  await this.parseAlignData_part3(domainid2segs);
67553
+
67554
+ return bNoMoreIg;
67453
67555
  }
67454
67556
 
67455
67557
  async parseAlignData_part3(domainid2segs) { let ic = this.icn3d, me = ic.icn3dui;
@@ -67595,7 +67697,7 @@ class Dssp {
67595
67697
  for(let i = 0, il = segArray.length; i < il; ++i) {
67596
67698
  let seg = segArray[i];
67597
67699
  if(!seg) continue;
67598
-
67700
+
67599
67701
  let qStart = seg.q_start;
67600
67702
  parseInt(seg.q_start);
67601
67703
  if(isNaN(seg.q_start)) seg.q_start.substr(seg.q_start.length - 1, 1);
@@ -67636,9 +67738,10 @@ class Dssp {
67636
67738
  if(currStrand != currStrandFinal) {
67637
67739
  refnumLabel = this.getLabelFromRefnum(refnum, currStrandFinal);
67638
67740
  }
67639
-
67640
- ic.resid2refnum[resid] = refnumLabel;
67741
+
67742
+ ic.resid2refnum[resid] = refnumLabel;
67641
67743
  ic.resid2refnum_ori[resid] = refnumLabel;
67744
+ ic.resid2domainid[resid] = domainid;
67642
67745
 
67643
67746
  // final reference numbers will be assign in ic.annoIgCls.showRefNum()
67644
67747
 
@@ -67685,7 +67788,7 @@ class Dssp {
67685
67788
  else {
67686
67789
  await ic.showAnnoCls.showAnnotations();
67687
67790
  }
67688
-
67791
+
67689
67792
  ic.annotationCls.setAnnoViewAndDisplay('detailed view');
67690
67793
  }
67691
67794
  else if(!me.bNode) {
@@ -67726,13 +67829,13 @@ class Dssp {
67726
67829
  // loops may have numbers such as 1310, 1410
67727
67830
 
67728
67831
  let refnumLabel;
67729
-
67832
+
67730
67833
  if(refnum < 1000) refnumLabel = undefined;
67731
67834
  else if(refnum >= 1200 && refnum < 1290) refnumLabel = "A---" + oriRefnum;
67732
67835
  else if(refnum >= 1320 && refnum < 1390) refnumLabel = "A--" + oriRefnum;
67733
67836
  else if(refnum >= 1420 && refnum < 1490) refnumLabel = "A-" + oriRefnum;
67734
- else if(refnum >= 1520 && refnum < 1590) refnumLabel = "A" + oriRefnum;
67735
- else if(refnum >= 1620 && refnum < 1690) refnumLabel = "A+" + oriRefnum;
67837
+ else if(refnum >= 1520 && refnum < 1590) refnumLabel = "A" + oriRefnum;
67838
+ else if(refnum >= 1620 && refnum < 1690) refnumLabel = "A+" + oriRefnum;
67736
67839
  else if(refnum >= 1820 && refnum < 1890) refnumLabel = "A'" + oriRefnum;
67737
67840
  else if(refnum >= 2000 && refnum < 2900) refnumLabel = "B" + oriRefnum;
67738
67841
  else if(refnum >= 3300 && refnum < 3390) refnumLabel = "C--" + oriRefnum;
@@ -67741,8 +67844,8 @@ class Dssp {
67741
67844
  else if(refnum >= 4000 && refnum < 4900) refnumLabel = "C'" + oriRefnum;
67742
67845
  else if(refnum >= 5000 && refnum < 5900) refnumLabel = "C''" + oriRefnum;
67743
67846
  else if(refnum >= 6000 && refnum < 6900) refnumLabel = "D" + oriRefnum;
67744
- else if(refnum >= 7500 && refnum < 7590) refnumLabel = "E" + oriRefnum;
67745
- else if(refnum >= 7620 && refnum < 7900) refnumLabel = "E+" + oriRefnum;
67847
+ else if(refnum >= 7500 && refnum < 7590) refnumLabel = "E" + oriRefnum;
67848
+ else if(refnum >= 7620 && refnum < 7900) refnumLabel = "E+" + oriRefnum;
67746
67849
  else if(refnum >= 8000 && refnum < 8900) refnumLabel = "F" + oriRefnum;
67747
67850
  else if(refnum >= 9500 && refnum < 9590) refnumLabel = "G" + oriRefnum;
67748
67851
  else if(refnum >= 9620 && refnum < 9690) refnumLabel = "G+" + oriRefnum;
@@ -67831,7 +67934,7 @@ class Dssp {
67831
67934
  if(type == 'igstrand' || type == 'IgStrand') {
67832
67935
  // iGStrand reference numbers were adjusted when showing in sequences
67833
67936
  if(me.bNode) {
67834
- for(let chnid in ic.chains) {
67937
+ for(let chnid in ic.chains) {
67835
67938
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.chains[chnid]);
67836
67939
  if(ic.proteins.hasOwnProperty(atom.serial)) {
67837
67940
  let giSeq = [];
@@ -67842,22 +67945,22 @@ class Dssp {
67842
67945
  }
67843
67946
  }
67844
67947
  }
67845
-
67948
+
67846
67949
  let resid2refnum = {};
67847
67950
  for(let resid in ic.resid2refnum) {
67848
67951
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
67849
67952
  if(!atom) continue;
67850
-
67953
+
67851
67954
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
67852
-
67955
+
67853
67956
  let domainid = ic.resid2domainid[resid];
67854
67957
  let refnumLabel = ic.resid2refnum[resid];
67855
-
67958
+
67856
67959
  if(refnumLabel) {
67857
67960
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
67858
67961
  (ic.domainid2ig2kabat[domainid]) ? ic.domainid2ig2kabat[domainid][refnumStr_ori] : undefined;
67859
67962
  }
67860
-
67963
+
67861
67964
  if(ic.resid2refnum[resid]) {
67862
67965
  if(ic.residIgLoop.hasOwnProperty(resid)) { // loop
67863
67966
  resid2refnum[resid + '_' + resn] = ic.resid2refnum[resid] + '_loop';
@@ -67938,18 +68041,18 @@ class Dssp {
67938
68041
  for(let resid in ic.resid2refnum) {
67939
68042
  let domainid = ic.resid2domainid[resid];
67940
68043
  let refnumStr, refnumLabel = ic.resid2refnum[resid];
67941
-
68044
+
67942
68045
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
67943
68046
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
67944
-
68047
+
67945
68048
  if(refnumLabel) {
67946
68049
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
67947
68050
  refnumStr = (ic.domainid2ig2kabat[domainid]) ? ic.domainid2ig2kabat[domainid][refnumStr_ori] : undefined;
67948
68051
  }
67949
-
68052
+
67950
68053
  resid2kabat[resid + '_' + resn] = refnumStr;
67951
68054
  }
67952
-
68055
+
67953
68056
  refData += JSON.stringify(resid2kabat);
67954
68057
  }
67955
68058
  // 3. show IMGT ref numbers
@@ -67958,25 +68061,25 @@ class Dssp {
67958
68061
  for(let resid in ic.resid2refnum) {
67959
68062
  let domainid = ic.resid2domainid[resid];
67960
68063
  let refnumStr, refnumLabel = ic.resid2refnum[resid];
67961
-
68064
+
67962
68065
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]);
67963
68066
  let resn = me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3));
67964
-
68067
+
67965
68068
  if(refnumLabel) {
67966
68069
  let refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
67967
68070
  refnumStr = (ic.domainid2ig2imgt[domainid]) ? ic.domainid2ig2imgt[domainid][refnumStr_ori] : undefined;
67968
68071
  }
67969
-
68072
+
67970
68073
  resid2imgt[resid + '_' + resn] = refnumStr;
67971
68074
  }
67972
-
68075
+
67973
68076
  refData += JSON.stringify(resid2imgt);
67974
68077
  }
67975
68078
 
67976
68079
 
67977
68080
  if(!me.bNode) {
67978
68081
  let file_pref = Object.keys(me.utilsCls.getHlStructures()).join(',');
67979
-
68082
+
67980
68083
  ic.saveFileCls.saveFile(file_pref + '_refnum_' + type + '.txt', 'text', [refData]);
67981
68084
  }
67982
68085
  else {
@@ -67994,7 +68097,7 @@ class Dssp {
67994
68097
 
67995
68098
  for(let i = 0, il = parseInt((ajaxArray.length - 1) / n + 1); i < il; ++i) {
67996
68099
  let currAjaxArray = [];
67997
- if(i == il - 1) { // last one
68100
+ if(i == il - 1) { // last one
67998
68101
  currAjaxArray = ajaxArray.slice(i * n, ajaxArray.length);
67999
68102
  }
68000
68103
  else {