icn3d 3.30.1 → 3.30.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/icn3d.module.js CHANGED
@@ -12896,12 +12896,69 @@ class SetDialog {
12896
12896
 
12897
12897
  group2tpl['Other'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'LaminAC_1ifrA_human', 'ORF7a_1xakA_virus'];
12898
12898
 
12899
+ let tpl2strandsig = {};
12900
+ tpl2strandsig['ASF1A_2iijA_human'] = "A A' B C C' E F G G+";
12901
+ tpl2strandsig['B2Microglobulin_7phrL_human_C1'] = "A B C C' D E F G";
12902
+ tpl2strandsig['BArrestin1_4jqiA_rat_n1'] = "A- A A' B C C' E F G";
12903
+ tpl2strandsig['BTLA_2aw2A_human_Iset'] = "A A' B C C' D E F G";
12904
+ tpl2strandsig['C3_2qkiD_human_n1'] = "A A' B C C' E F G";
12905
+ tpl2strandsig['CD19_6al5A_human_C2orV-n1'] = "A' B C C' D E F G";
12906
+ tpl2strandsig['CD28_1yjdC_human_V'] = "A A' B C C' C'' D E F G";
12907
+ tpl2strandsig['CD2_1hnfA_human_C2-n2'] = "A B C C' E F G";
12908
+ tpl2strandsig['CD2_1hnfA_human_V-n1'] = "A' B C C' C'' D E F G";
12909
+ tpl2strandsig['CD3d_6jxrd_human_Iset'] = "A B C D E F G";
12910
+ tpl2strandsig['CD3e_6jxrf_human_Iset'] = "A B C C' D E F G";
12911
+ tpl2strandsig['CD3g_6jxrg_human_Iset'] = "A B C C' E F G G+";
12912
+ tpl2strandsig['CD8a_1cd8A_human_V'] = "A A' B C C' C'' D E F G";
12913
+ tpl2strandsig['CoAtomerGamma1_1r4xA_human'] = "A- A B C D E F G";
12914
+ tpl2strandsig['Contactin1_2ee2A_human_FN3-n9'] = "A A' B C C' E F G";
12915
+ tpl2strandsig['Contactin1_3s97C_human_C2-n2'] = "A A' B C D E F G";
12916
+ tpl2strandsig['CuZnSuperoxideDismutase_1hl5C_human'] = "A- A B C C' E F G";
12917
+ tpl2strandsig['ECadherin_4zt1A_human_n2'] = "A' B C D E F G";
12918
+ tpl2strandsig['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'] = "A--- A-- A- A B C C' C'' D E F G";
12919
+ tpl2strandsig['FAB-HEAVY_5esv_C1-n2'] = "A B C D E F G";
12920
+ tpl2strandsig['FAB-HEAVY_5esv_V-n1'] = "A B C C' C'' D E F G";
12921
+ tpl2strandsig['FAB-LIGHT_5esv_C1-n2'] = "A B C C' E F G";
12922
+ tpl2strandsig['FAB-LIGHT_5esv_V-n1'] = "A A' B C C' C'' D E F G";
12923
+ tpl2strandsig['GHR_1axiB_human_FN3-n1'] = "A B C C' D E F G";
12924
+ tpl2strandsig['ICOS_6x4gA_human_V'] = "A B C C' C'' D E F G";
12925
+ tpl2strandsig['IL6Rb_1bquB_human_FN3-n2'] = "A B C C' E F G";
12926
+ tpl2strandsig['IL6Rb_1bquB_human_FN3-n3'] = "A B C C' E F G";
12927
+ tpl2strandsig['InsulinR_8guyE_human_FN3-n1'] = "A B C C' E F G";
12928
+ tpl2strandsig['InsulinR_8guyE_human_FN3-n2'] = "A B C C' E F G";
12929
+ tpl2strandsig['IsdA_2iteA_bacteria'] = "A- A B C C' D E F G";
12930
+ tpl2strandsig['JAM1_1nbqA_human_VorIset-n2'] = "A A' B C C' D E F G";
12931
+ tpl2strandsig['LAG3_7tzgD_human_C2-n2'] = "A A' B C C' D E F G";
12932
+ tpl2strandsig['LAG3_7tzgD_human_V-n1'] = "A' B C C' D E F G";
12933
+ tpl2strandsig['LaminAC_1ifrA_human'] = "A- A B C C' E E+ F G";
12934
+ tpl2strandsig['MHCIa_7phrH_human_C1'] = "A B C C' D E F G";
12935
+ tpl2strandsig['MPT63_1lmiA_bacteria'] = "A-- A- A BC C' E F G";
12936
+ tpl2strandsig['NaCaExchanger_2fwuA_dog_n2'] = "A A' B C C' E F G";
12937
+ tpl2strandsig['NaKATPaseTransporterBeta_2zxeB_spurdogshark']= "A A' B C D E F G";
12938
+ tpl2strandsig['ORF7a_1xakA_virus'] = "A' B C D E F G";
12939
+ tpl2strandsig['PD1_4zqkB_human_V'] = "A A' B C C' D E F G";
12940
+ tpl2strandsig['PDL1_4z18B_human_V-n1'] = "A A' B C C' C'' D E F G";
12941
+ tpl2strandsig['Palladin_2dm3A_human_Iset-n1'] = "A A' B C C' D E F G";
12942
+ tpl2strandsig['RBPJ_6py8C_human_Unk-n1'] = "A A' B C C' E F G";
12943
+ tpl2strandsig['RBPJ_6py8C_human_Unk-n2'] = "A B C D E F G";
12944
+ tpl2strandsig['Sidekick2_1wf5A_human_FN3-n7'] = "A B C C' E F G";
12945
+ tpl2strandsig['Siglec3_5j0bB_human_C2-n2'] = "A A' B C D E F G";
12946
+ tpl2strandsig['TCRa_6jxrm_human_C1-n2'] = "A B C D E F G";
12947
+ tpl2strandsig['TCRa_6jxrm_human_V-n1'] = "A A' B C C' C'' D E F G";
12948
+ tpl2strandsig['TEAD1_3kysC_human'] = "A A+ A' B C C' E F G G+";
12949
+ tpl2strandsig['TP34_2o6cA_bacteria'] = "A- A B C C' D E F G";
12950
+ tpl2strandsig['TP47_1o75A_bacteria'] = "A B C C' D E F G";
12951
+ tpl2strandsig['Titin_4uowM_human_Unk-n152'] = "A A' B C C' D E F G";
12952
+ tpl2strandsig['VISTA_6oilA_human_V'] = "A A' B C C' C'' D E F G G+";
12953
+ tpl2strandsig['VNAR_1t6vN_shark_V'] = "A A' B C C' D E F G";
12954
+ tpl2strandsig['VTCN1_Q7Z7D3_human_V-n2'] = "A B C C' D E F G G+";
12955
+
12899
12956
  let html = '';
12900
12957
  for(let group in group2tpl) {
12901
12958
  html += "<optgroup label='" + group + "'>";
12902
12959
  for(let i = 0, il = group2tpl[group].length; i < il; ++i) {
12903
12960
  let template = group2tpl[group][i];
12904
- html += me.htmlCls.optionStr + "'" + template + "'>" + template + "</option>";
12961
+ html += me.htmlCls.optionStr + "'" + template + "'>" + template + ", Strands: " + tpl2strandsig[template] + "</option>";
12905
12962
  }
12906
12963
  html += "</optgroup>";
12907
12964
  }
@@ -13289,6 +13346,7 @@ class Events {
13289
13346
  me.htmlCls.HEIGHT = $( window ).height();
13290
13347
  ic.applyCenterCls.setWidthHeight(me.htmlCls.WIDTH, me.htmlCls.HEIGHT);
13291
13348
  ic.drawCls.draw();
13349
+
13292
13350
  ic.resizeCanvasCls.openFullscreen($("#" + me.pre + "canvas")[0]);
13293
13351
  });
13294
13352
 
@@ -27679,7 +27737,8 @@ class Axes {
27679
27737
  createArrow(dir, origin, axisLen, color, headLength, headWidth, bGlycan) { let ic = this.icn3d, me = ic.icn3dui;
27680
27738
  if(me.bNode) return;
27681
27739
 
27682
- let coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 32, 1 );
27740
+ // let coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 32, 1 );
27741
+ let coneGeometry = new THREE.CylinderGeometry( 0, 0.5, 1, 32, 1 );
27683
27742
  //coneGeometry.translate( 0, - 0.5, 0 );
27684
27743
  coneGeometry.translate( 0, 0.5, 0 );
27685
27744
  let material;
@@ -38832,10 +38891,15 @@ class AnnoIg {
38832
38891
  if(!info) continue;
38833
38892
 
38834
38893
  let tmscore = info.score;
38835
- let igType = ic.ref2igtype[info.refpdbname];
38836
- let confidance = (parseFloat(tmscore) < 0.75 ) ? '?' : '';
38837
- titleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
38838
- fullTitleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
38894
+ // let igType = ic.ref2igtype[info.refpdbname];
38895
+ // let confidance = (parseFloat(tmscore) < 0.75 ) ? '?' : '';
38896
+ // titleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
38897
+ // fullTitleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
38898
+
38899
+ let igType = (parseFloat(tmscore) < 0.75 ) ? 'Ig' : ic.ref2igtype[info.refpdbname];
38900
+ titleArray.push(igType + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
38901
+ fullTitleArray.push(igType + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
38902
+
38839
38903
  domainArray.push(igType);
38840
38904
 
38841
38905
  let segs = [];
@@ -39190,15 +39254,13 @@ class AnnoDomain {
39190
39254
  let subdomainArray = domainArray[index].intervals;
39191
39255
  // remove duplicate, e.g., at https://www.ncbi.nlm.nih.gov/Structure/mmdb/mmdb_strview.cgi?v=2&program=icn3d&domain&molinfor&uid=1itw
39192
39256
  let domainFromHash = {}, domainToHash = {};
39193
- let fromArray = [], toArray = [];
39257
+ let fromArray = [], toArray = [], posFromArray = [], posToArray = [];
39194
39258
  let resiHash = {};
39195
39259
  let resCnt = 0;
39196
39260
 
39197
39261
  for(let i = 0, il = subdomainArray.length; i < il; ++i) {
39198
- // let domainFrom = Math.round(subdomainArray[i][0]) - 1; // convert 1-based to 0-based
39199
- // let domainTo = Math.round(subdomainArray[i][1]) - 1;
39200
- let domainFrom = Math.round(subdomainArray[i][0]); // convert 1-based to 0-based
39201
- let domainTo = Math.round(subdomainArray[i][1]);
39262
+ let domainFrom = Math.round(subdomainArray[i][0]) - 1; // convert 1-based to 0-based
39263
+ let domainTo = Math.round(subdomainArray[i][1]) - 1;
39202
39264
 
39203
39265
  if(domainFromHash.hasOwnProperty(domainFrom) || domainToHash.hasOwnProperty(domainTo)) {
39204
39266
  continue; // do nothing for duplicated "from" or "to", e.g, PDBID 1ITW, 5FWI
@@ -39212,6 +39274,9 @@ class AnnoDomain {
39212
39274
  // if(ic.bNCBI || bCalcDirect) {
39213
39275
  fromArray.push(pos2resi[domainFrom]);
39214
39276
  toArray.push(pos2resi[domainTo]);
39277
+
39278
+ posFromArray.push(domainFrom);
39279
+ posToArray.push(domainTo);
39215
39280
  // }
39216
39281
  // else {
39217
39282
  // fromArray.push(domainFrom + ic.baseResi[chnid]);
@@ -39232,9 +39297,9 @@ class AnnoDomain {
39232
39297
 
39233
39298
  if(!ic.resid2domain) ic.resid2domain = {};
39234
39299
  if(!ic.resid2domain[chnid]) ic.resid2domain[chnid] = [];
39235
- for(let i = 0, il = fromArray.length; i < il; ++i) {
39236
- let from = parseInt(fromArray[i]);
39237
- let to = parseInt(toArray[i]);
39300
+ for(let i = 0, il = posFromArray.length; i < il; ++i) {
39301
+ let from = parseInt(posFromArray[i]);
39302
+ let to = parseInt(posToArray[i]);
39238
39303
  for(let j = from; j <= to; ++j) {
39239
39304
  // 0-based
39240
39305
  let obj = {};
@@ -39246,7 +39311,7 @@ class AnnoDomain {
39246
39311
  }
39247
39312
  }
39248
39313
 
39249
- let htmlTmp2 = '<div class="icn3d-seqTitle icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' + fromArray + '" to="' + toArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + chnid + '_3d_domain_' +(index+1).toString() + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">' + title + ' </div>';
39314
+ let htmlTmp2 = '<div class="icn3d-seqTitle icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' + posFromArray + '" to="' + posToArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + chnid + '_3d_domain_' +(index+1).toString() + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">' + title + ' </div>';
39250
39315
  let htmlTmp3 = '<span class="icn3d-residueNum" title="residue count">' + resCnt.toString() + ' Res</span>';
39251
39316
  html3 += htmlTmp2 + htmlTmp3 + '<br>';
39252
39317
  let htmlTmp = '<span class="icn3d-seqLine">';
@@ -39286,12 +39351,12 @@ class AnnoDomain {
39286
39351
  if(ic.seqStartLen && ic.seqStartLen[chnid]) html2 += ic.showSeqCls.insertMulGapOverview(chnid, ic.seqStartLen[chnid]);
39287
39352
 
39288
39353
  if(me.cfg.blast_rep_id != chnid) { // regular
39289
- for(let i = 0, il = fromArray.length; i < il; ++i) {
39354
+ for(let i = 0, il = posFromArray.length; i < il; ++i) {
39290
39355
  // 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);
39291
- let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(fromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(fromArray[i] - toArray[i-1] - 1) / ic.maxAnnoLength);
39356
+ let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(posFromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(posFromArray[i] - posToArray[i-1] - 1) / ic.maxAnnoLength);
39292
39357
 
39293
39358
  html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;">&nbsp;</div>';
39294
- 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 icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' + fromArray + '" to="' + toArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + chnid + '_3d_domain_' +(index+1).toString() + '" id="' + chnid + '_3d_domain_' + index + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">3D domain ' +(index+1).toString() + '</div>';
39359
+ html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(posToArray[i] - posFromArray[i] + 1) / ic.maxAnnoLength) + 'px;" class="icn3d-seqTitle icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' + posFromArray + '" to="' + posToArray + '" shorttitle="' + title + '" index="' + index + '" setname="' + chnid + '_3d_domain_' +(index+1).toString() + '" id="' + chnid + '_3d_domain_' + index + '" anno="sequence" chain="' + chnid + '" title="' + fulltitle + '">3D domain ' +(index+1).toString() + '</div>';
39295
39360
  }
39296
39361
  }
39297
39362
  else { // with potential gaps
@@ -40825,7 +40890,7 @@ class Domain3d {
40825
40890
  if(!ic.posid2resid) ic.posid2resid = {};
40826
40891
 
40827
40892
  let substructItem = {};
40828
- let pos2resi = {};
40893
+ let pos2resi = {}; // 0-based
40829
40894
  for(let i = 0; i < residueArray.length; ++i) {
40830
40895
  let resid = residueArray[i];
40831
40896
 
@@ -40857,7 +40922,8 @@ class Domain3d {
40857
40922
 
40858
40923
  //resiArray.push(resi);
40859
40924
  resiArray.push(i+1);
40860
- pos2resi[i+1] = resi;
40925
+ // pos2resi[i+1] = resi;
40926
+ pos2resi[i] = resi;
40861
40927
 
40862
40928
  ic.posid2resid[atom.structure + '_' + atom.chain + '_' + (i+1).toString()] = resid;
40863
40929
  // let residNCBI = ic.resid2ncbi[resid];
@@ -41379,8 +41445,8 @@ class Domain3d {
41379
41445
  //ss: sstype ss_start ss_end x1 y1 z1 x2 y2 z2
41380
41446
  //sstype: 1 (helix), 2 (sheet)
41381
41447
  let sstype = (substruct[k].Sheet) ? 2 : 1;
41382
- let from = pos2resi[substruct[k].From];
41383
- let to = pos2resi[substruct[k].To];
41448
+ let from = pos2resi[substruct[k].From - 1]; // 1-based to 0-based
41449
+ let to = pos2resi[substruct[k].To - 1];
41384
41450
 
41385
41451
  // 1-based residue numbers
41386
41452
  let fromPos = substruct[k].From;
@@ -63329,6 +63395,27 @@ class LoadScript {
63329
63395
  return nameArray;
63330
63396
  }
63331
63397
 
63398
+ updateTransformation(steps) { let ic = this.icn3d; ic.icn3dui;
63399
+ let commandTransformation = (ic.commands[steps-1]) ? ic.commands[steps-1].split('|||') : [];
63400
+
63401
+ if(commandTransformation.length == 2) {
63402
+ let transformation = JSON.parse(commandTransformation[1]);
63403
+
63404
+ ic._zoomFactor = transformation.factor;
63405
+
63406
+ ic.mouseChange.x = transformation.mouseChange.x;
63407
+ ic.mouseChange.y = transformation.mouseChange.y;
63408
+
63409
+ ic.quaternion._x = transformation.quaternion._x;
63410
+ ic.quaternion._y = transformation.quaternion._y;
63411
+ ic.quaternion._z = transformation.quaternion._z;
63412
+ ic.quaternion._w = transformation.quaternion._w;
63413
+ }
63414
+
63415
+ // ic.bRender = true;
63416
+ ic.drawCls.draw();
63417
+ }
63418
+
63332
63419
  async execCommandsBase(start, end, steps, bFinalStep) { let ic = this.icn3d, me = ic.icn3dui;
63333
63420
  let thisClass = this;
63334
63421
  let i;
@@ -63508,7 +63595,10 @@ class LoadScript {
63508
63595
  await thisClass.applyCommandGraphinteraction(command);
63509
63596
  }
63510
63597
  else if(command.indexOf('cartoon 2d domain') == 0) {
63598
+ ic.bRender = true;
63599
+ thisClass.updateTransformation(steps);
63511
63600
  await thisClass.applyCommandCartoon2d(command);
63601
+ ic.bRender = false;
63512
63602
  }
63513
63603
  else if(command.indexOf('set half pae map') == 0) {
63514
63604
  await thisClass.applyCommandAfmap(command);
@@ -63523,7 +63613,10 @@ class LoadScript {
63523
63613
  let pos = command.lastIndexOf(' ');
63524
63614
  let type = command.substr(pos + 1);
63525
63615
 
63616
+ ic.bRender = true;
63617
+ thisClass.updateTransformation(steps);
63526
63618
  await ic.cartoon2dCls.draw2Dcartoon(type);
63619
+ ic.bRender = false;
63527
63620
  }
63528
63621
  else if(command.indexOf('add msa track') == 0) {
63529
63622
  //add msa track | chainid " + chainid + " | startpos " + startpos + " | type " + type + " | fastaList " + fastaList
@@ -63561,7 +63654,7 @@ class LoadScript {
63561
63654
  await ic.applyCommandCls.applyCommand(ic.commands[i]);
63562
63655
  }
63563
63656
  }
63564
-
63657
+
63565
63658
  //if(i === steps - 1) {
63566
63659
  if(i === steps || bFinalStep) {
63567
63660
  this.renderFinalStep(i);
@@ -67060,7 +67153,7 @@ class Dssp {
67060
67153
  let endResi = parseInt(segArray[m+1]);
67061
67154
 
67062
67155
  for(let n = startResi; n <= endResi; ++n) {
67063
- let resid = chainid + '_' + pos2resi[n];
67156
+ let resid = chainid + '_' + pos2resi[n - 1];
67064
67157
  ++resCnt;
67065
67158
  domainAtoms = me.hashUtilsCls.unionHash(domainAtoms, ic.residues[resid]);
67066
67159
 
@@ -67082,7 +67175,7 @@ class Dssp {
67082
67175
  let startResi = segArray[m];
67083
67176
  let endResi = segArray[m+1];
67084
67177
  for(let n = parseInt(startResi); n <= parseInt(endResi); ++n) {
67085
- let resid = chainid + '_' + pos2resi[n];
67178
+ let resid = chainid + '_' + pos2resi[n - 1];
67086
67179
  //domainAtoms = me.hashUtilsCls.unionHash(domainAtoms, ic.residues[resid]);
67087
67180
  ic.resid2domainid[resid] = chainid + ',' + k + '_' + resiSum;
67088
67181
  }
@@ -68191,19 +68284,25 @@ class Dssp {
68191
68284
  }
68192
68285
 
68193
68286
  // 2b. remove strands with less than 3 residues except G strand
68287
+ let removeDomainidHash = {};
68194
68288
  for(let il = strandArray.length, i = il - 1; i >= 0; --i) {
68195
- let strandTmp = strandArray[i].strand.substr(0, 1);
68289
+ // let strandTmp = strandArray[i].strand.substr(0, 1);
68290
+ let strandTmp = strandArray[i].strand;
68196
68291
  if(strandTmp != 'G' && strandArray[i].endRefnum - strandArray[i].startRefnum + 1 < 3) { // remove the strand
68197
- if(strandTmp == 'B' || strandTmp == 'C' || strandTmp == 'E' || strandTmp == 'F') {
68198
- if(!me.bNode) console.log("Some of the Ig strands B, C, E, F are removed since they are too short...");
68199
- return false;
68200
- }
68201
-
68202
68292
  if(i != il - 1) { // modify
68203
68293
  strandArray[i + 1].loopResCnt += strandArray[i].loopResCnt + parseInt(strandArray[i].endResi) - parseInt(strandArray[i].startResi) + 1;
68204
68294
  }
68205
68295
 
68206
68296
  strandArray.splice(i, 1);
68297
+
68298
+ if(strandTmp == 'B' || strandTmp == 'C' || strandTmp == 'E' || strandTmp == 'F') {
68299
+ if(!me.bNode) console.log("Ig strand " + strandTmp + " is removed since it is too short...");
68300
+
68301
+ let resid = chnid + '_' + strandArray[i].startResi;
68302
+ let domainid = ic.resid2domainid[resid];
68303
+ removeDomainidHash[domainid] = 1;
68304
+ continue;
68305
+ }
68207
68306
  }
68208
68307
  }
68209
68308
 
@@ -68393,6 +68492,14 @@ class Dssp {
68393
68492
  prevStrand = currStrand;
68394
68493
  prevStrandCnt = strandCnt - 1;
68395
68494
 
68495
+ // remove domians without B,C,E,F strands
68496
+ if(removeDomainidHash.hasOwnProperty(domainid)) {
68497
+ delete ic.resid2refnum[residueid];
68498
+ delete ic.resid2domainid[residueid];
68499
+
68500
+ continue;
68501
+ }
68502
+
68396
68503
  // assign the adjusted reference numbers
68397
68504
  ic.resid2refnum[residueid] = refnumLabel;
68398
68505
  ic.resid2domainid[residueid] = domainid;
@@ -71174,7 +71281,7 @@ class Cartoon2d {
71174
71281
  idStr = idStr.substr(0, idStr.indexOf('-'));
71175
71282
  }
71176
71283
  else {
71177
- idStr = idStr.substr(idStr.lastIndexOf('_') + 1);
71284
+ idStr = idStr; //idStr.substr(idStr.lastIndexOf('_') + 1);
71178
71285
  }
71179
71286
 
71180
71287
  return idStr;
@@ -71871,14 +71978,14 @@ class ResizeCanvas {
71871
71978
  !document.webkitFullscreenElement && !document.msFullscreenElement) {
71872
71979
  if(elem.requestFullscreen) {
71873
71980
  elem.requestFullscreen();
71874
- } else if(elem.mozRequestFullScreen) { /* Firefox */
71981
+ } else if(elem.mozRequestFullScreen) { // Firefox
71875
71982
  elem.mozRequestFullScreen();
71876
- } else if(elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
71983
+ } else if(elem.webkitRequestFullscreen) { // Chrome, Safari and Opera
71877
71984
  elem.webkitRequestFullscreen();
71878
- } else if(elem.msRequestFullscreen) { /* IE/Edge */
71985
+ } else if(elem.msRequestFullscreen) { // IE/Edge
71879
71986
  elem.msRequestFullscreen();
71880
71987
  }
71881
- }
71988
+ }
71882
71989
  }
71883
71990
 
71884
71991
  //Rotate the structure in one of the directions: "left", "right", "up", and "down".
@@ -76569,7 +76676,7 @@ class iCn3DUI {
76569
76676
  //even when multiple iCn3D viewers are shown together.
76570
76677
  this.pre = this.cfg.divid + "_";
76571
76678
 
76572
- this.REVISION = '3.30.0';
76679
+ this.REVISION = '3.30.1';
76573
76680
 
76574
76681
  // In nodejs, iCn3D defines "window = {navigator: {}}"
76575
76682
  this.bNode = (Object.keys(window).length < 2) ? true : false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "icn3d",
3
- "version": "3.30.1",
3
+ "version": "3.30.3",
4
4
  "main": "./icn3d.js",
5
5
  "exports": {
6
6
  ".": {