icn3d 3.28.6 → 3.28.8

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
@@ -9357,8 +9357,8 @@ class SetMenu {
9357
9357
 
9358
9358
  html += this.getMenuText('mn1_searchgrooup', 'Search Structure ' + me.htmlCls.wifiStr, undefined, 1, 1);
9359
9359
  html += "<ul>";
9360
- html += this.getMenuUrl('mn1_searchstru', 'https://www.ncbi.nlm.nih.gov/structure', 'PDB Structures ' + me.htmlCls.wifiStr, undefined, 2);
9361
- html += this.getLink('mn1_proteinname', 'AlphaFold Structures ' + me.htmlCls.wifiStr, undefined, 2);
9360
+ html += this.getMenuUrl('mn1_searchstru', 'https://www.ncbi.nlm.nih.gov/structure', 'PDB Structures ' + me.htmlCls.wifiStr, 1, 2);
9361
+ html += this.getLink('mn1_proteinname', 'AlphaFold Structures ' + me.htmlCls.wifiStr, 1, 2);
9362
9362
  html += this.getMenuUrl('mn1_afdatabase', 'https://alphafold.ebi.ac.uk', 'AlphaFold UniProt Database ' + me.htmlCls.wifiStr, undefined, 2);
9363
9363
  html += "</ul>";
9364
9364
  html += "</li>";
@@ -9428,8 +9428,8 @@ class SetMenu {
9428
9428
  //html += this.getMenuText('mn1_fold', 'AlphaFold/ESM', undefined, undefined, 1);
9429
9429
  html += this.getMenuText('mn1_fold', 'Predict by Seq.', undefined, undefined, 1);
9430
9430
  html += "<ul>";
9431
- //html += this.getLink('mn1_esmfold', 'ESMFold', undefined, 2);
9432
- html += this.getMenuUrl('mn1_esmfold_link', "https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/ESMFold.ipynb", "ESMFold via ColabFold" + me.htmlCls.wifiStr, undefined, 2);
9431
+ html += this.getLink('mn1_esmfold', 'ESMFold', undefined, 2);
9432
+ //html += this.getMenuUrl('mn1_esmfold_link', "https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/ESMFold.ipynb", "ESMFold via ColabFold" + me.htmlCls.wifiStr, undefined, 2);
9433
9433
  html += this.getLink('mn1_alphafold', 'AlphaFold2 via ColabFold' + me.htmlCls.wifiStr, undefined, 2);
9434
9434
  html += "</ul>";
9435
9435
 
@@ -9770,7 +9770,7 @@ class SetMenu {
9770
9770
  html += this.getRadio('mn6_showslab', 'mn6_showslabNo', 'Off', true, undefined, 2);
9771
9771
  html += "</ul>";
9772
9772
  html += "</li>";
9773
- html += this.getMenuText('mn2_axes', 'XYZ-axes', undefined, 1);
9773
+ html += this.getMenuText('mn2_axes', 'XYZ-axes', undefined, undefined, 1);
9774
9774
  html += "<ul>";
9775
9775
  html += this.getRadio('mn6_showaxis', 'mn6_showaxisYes', 'Original', undefined, undefined, 2);
9776
9776
  html += this.getRadio('mn6_showaxis', 'mn6_showaxisSel', 'Prin. Axes on Sel.', undefined, undefined, 2);
@@ -15860,7 +15860,7 @@ class SetHtml {
15860
15860
  let nucleotideribbonwidth =(type == '3dprint') ? '1.4' : '0.8';
15861
15861
 
15862
15862
  let shininess = 40;
15863
- let light1 = 0.6;
15863
+ let light1 = 0.8;
15864
15864
  let light2 = 0.4;
15865
15865
  let light3 = 0.2;
15866
15866
  let bGlycansCartoon = 0;
@@ -15908,7 +15908,7 @@ class SetHtml {
15908
15908
 
15909
15909
  html += "<b>1. Shininess</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "shininess' value='" + shininess + "' size=4>" + me.htmlCls.space3 + "(for the shininess of the 3D objects, default 40)<br/><br/>";
15910
15910
  html += "<b>2. Three directional lights</b>: <br>";
15911
- html += "<b>Key Light</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "light1' value='" + light1 + "' size=4>" + me.htmlCls.space3 + "(for the light strength of the key light, default 0.6)<br/>";
15911
+ html += "<b>Key Light</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "light1' value='" + light1 + "' size=4>" + me.htmlCls.space3 + "(for the light strength of the key light, default 0.8)<br/>";
15912
15912
  html += "<b>Fill Light</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "light2' value='" + light2 + "' size=4>" + me.htmlCls.space3 + "(for the light strength of the fill light, default 0.4)<br/>";
15913
15913
  html += "<b>Back Light</b>: " + me.htmlCls.inputTextStr + "id='" + me.pre + "light3' value='" + light3 + "' size=4>" + me.htmlCls.space3 + "(for the light strength of the back light, default 0.2)<br/><br/>";
15914
15914
  html += "<b>3. Thickness</b>: <br>";
@@ -16122,7 +16122,7 @@ class SetHtml {
16122
16122
  html += "</ul>";
16123
16123
 
16124
16124
  html += me.htmlCls.divStr + name1 + "tab1'>";
16125
- if(type == 'delphi') html += this.addGsizeSalt(name1) + "<br>";
16125
+ if(type == 'delphi') html += this.addGsizeSalt(name1 + "1") + "<br>";
16126
16126
 
16127
16127
  html += "<span style='white-space:nowrap;font-weight:bold;'>Potential contour at: <select id='" + me.pre + name1 + "contour'>";
16128
16128
 
@@ -16187,7 +16187,7 @@ class SetHtml {
16187
16187
  html += "</div>";
16188
16188
 
16189
16189
  html += me.htmlCls.divStr + name1 + "tab2'>";
16190
- if(type == 'delphi') html += this.addGsizeSalt(name1) + "<br>";
16190
+ if(type == 'delphi') html += this.addGsizeSalt(name1 + "2") + "<br>";
16191
16191
 
16192
16192
  html += "<span style='white-space:nowrap;font-weight:bold;'>Surface with max potential at: <select id='" + me.pre + name1 + "contour2'>";
16193
16193
 
@@ -23061,6 +23061,9 @@ class Scene {
23061
23061
  // show cross-linkages, set side chains
23062
23062
  ic.applyClbondsCls.applyClbondsOptions();
23063
23063
 
23064
+ // add dashed lines for missing residues
23065
+ ic.applyMissingResCls.applyMissingResOptions();
23066
+
23064
23067
  ic.applyDisplayCls.applyDisplayOptions(ic.opts, ic.dAtoms);
23065
23068
 
23066
23069
  ic.applyOtherCls.applyOtherOptions();
@@ -23154,7 +23157,7 @@ class Scene {
23154
23157
  ic.lightPos3 = new THREE.Vector3(1, 1, 1); //(0, 1, 1);
23155
23158
  }
23156
23159
 
23157
- let ambientLight = new THREE.AmbientLight(0x888888); //(0x404040);
23160
+ let ambientLight = new THREE.AmbientLight(0x404040); //(0x888888); //(0x404040);
23158
23161
 
23159
23162
  ic.scene.add(ic.directionalLight);
23160
23163
  ic.scene.add(ambientLight);
@@ -26348,15 +26351,16 @@ class Strip {
26348
26351
  let mesh;
26349
26352
 
26350
26353
  if(bHighlight === 2) {
26354
+ //mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ transparent: true, opacity: 0.5, specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26351
26355
  mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ transparent: true, opacity: 0.5, specular: ic.frac,
26352
- shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26356
+ shininess: ic.shininess, emissive: ic.emissive, vertexColors: true, side: THREE.DoubleSide }));
26353
26357
 
26354
26358
  ic.mdl.add(mesh);
26355
26359
  ic.prevHighlightObjects.push(mesh);
26356
26360
  }
26357
26361
  else {
26358
- mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac,
26359
- shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26362
+ //mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26363
+ mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: true, side: THREE.DoubleSide }));
26360
26364
 
26361
26365
  ic.mdl.add(mesh);
26362
26366
  ic.objects.push(mesh);
@@ -26761,7 +26765,8 @@ class Tube {
26761
26765
  */
26762
26766
  let mesh;
26763
26767
  if(bHighlight === 2) {
26764
- mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ transparent: true, opacity: 0.5, specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26768
+ //mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ transparent: true, opacity: 0.5, specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26769
+ mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ transparent: true, opacity: 0.5, specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: true, side: THREE.DoubleSide }));
26765
26770
 
26766
26771
  if(ic.mdl) ic.mdl.add(mesh);
26767
26772
  }
@@ -26772,8 +26777,8 @@ class Tube {
26772
26777
  if(ic.mdl) ic.mdl.add(mesh);
26773
26778
  }
26774
26779
  else {
26775
- mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26776
- //mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, color: 0xFFFFFF, side: THREE.DoubleSide }));
26780
+ //mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: THREE.FaceColors, side: THREE.DoubleSide }));
26781
+ mesh = new THREE.Mesh(geo, new THREE.MeshPhongMaterial({ specular: ic.frac, shininess: ic.shininess, emissive: ic.emissive, vertexColors: true, side: THREE.DoubleSide }));
26777
26782
 
26778
26783
  if(ic.mdl) ic.mdl.add(mesh);
26779
26784
  }
@@ -30184,7 +30189,8 @@ class Surface {
30184
30189
  specular: ic.frac,
30185
30190
  shininess: 0, //10, //30,
30186
30191
  emissive: ic.emissive,
30187
- vertexColors: THREE.VertexColors,
30192
+ //vertexColors: THREE.VertexColors,
30193
+ vertexColors: true,
30188
30194
  wireframe: wireframe,
30189
30195
  opacity: opacity,
30190
30196
  transparent: true,
@@ -30251,7 +30257,8 @@ class Surface {
30251
30257
  specular: ic.frac,
30252
30258
  shininess: 20, //10, //30,
30253
30259
  emissive: ic.emissive,
30254
- vertexColors: THREE.VertexColors,
30260
+ //vertexColors: THREE.VertexColors,
30261
+ vertexColors: true,
30255
30262
  wireframe: wireframe,
30256
30263
  opacity: opacity,
30257
30264
  transparent: true,
@@ -30529,7 +30536,7 @@ class ApplyClbonds {
30529
30536
 
30530
30537
  if (options.clbonds.toLowerCase() === 'yes' && options.chemicals !== 'nothing') {
30531
30538
  let color = '#006400';
30532
- let colorObj = me.parasCls.thr(0x006400);
30539
+ me.parasCls.thr(0x006400);
30533
30540
 
30534
30541
  ic.lines['clbond'] = [];
30535
30542
  ic.residuesHashClbonds = {};
@@ -30548,6 +30555,8 @@ class ApplyClbonds {
30548
30555
  line.color = color;
30549
30556
  line.dashed = false;
30550
30557
 
30558
+ line.radius = ic.crosslinkRadius;
30559
+
30551
30560
  line.serial1 = ic.clbondResid2serial[resid0 + ',' + resid1];
30552
30561
  line.serial2 = ic.clbondResid2serial[resid1 + ',' + resid0];
30553
30562
 
@@ -30557,7 +30566,7 @@ class ApplyClbonds {
30557
30566
  line.position2 = ic.atoms[line.serial2].coord;
30558
30567
 
30559
30568
  ic.lines['clbond'].push(line);
30560
- ic.cylinderCls.createCylinder(line.position1, line.position2, ic.crosslinkRadius, colorObj);
30569
+ //ic.cylinderCls.createCylinder(line.position1, line.position2, ic.crosslinkRadius, colorObj);
30561
30570
 
30562
30571
  // show stick for these two residues
30563
30572
  let residueAtoms = {};
@@ -30618,6 +30627,117 @@ class ApplyClbonds {
30618
30627
  }
30619
30628
  }
30620
30629
 
30630
+ /**
30631
+ * @author Jiyao Wang <wangjiy@ncbi.nlm.nih.gov> / https://github.com/ncbi/icn3d
30632
+ */
30633
+
30634
+ class ApplyMissingRes {
30635
+ constructor(icn3d) {
30636
+ this.icn3d = icn3d;
30637
+ }
30638
+
30639
+ applyMissingResOptions(options) { let ic = this.icn3d; ic.icn3dui;
30640
+
30641
+ if(!ic.bCalcMissingRes) {
30642
+ // find all bonds to chemicals
30643
+ ic.missingResPnts = {};
30644
+ ic.missingResResid2serial = {};
30645
+
30646
+ this.applyMissingResOptions_base();
30647
+
30648
+ ic.bCalcMissingRes = true;
30649
+ }
30650
+
30651
+ ic.lines['missingres'] = [];
30652
+
30653
+ if(ic.structures) {
30654
+ let strucArray = Object.keys(ic.structures);
30655
+ for(let i = 0, il = strucArray.length; i < il; ++i) {
30656
+ let struc = strucArray[i];
30657
+ if(!ic.missingResPnts[struc]) continue;
30658
+
30659
+ for(let j = 0, jl = ic.missingResPnts[struc].length; j < jl; j += 2) {
30660
+ let resid0 = ic.missingResPnts[struc][j];
30661
+ let resid1 = ic.missingResPnts[struc][j+1];
30662
+
30663
+ let line = {};
30664
+
30665
+ line.dashed = true;
30666
+
30667
+ line.serial1 = ic.missingResResid2serial[resid0 + ',' + resid1];
30668
+ line.serial2 = ic.missingResResid2serial[resid1 + ',' + resid0];
30669
+
30670
+ line.color = "#" + ic.atoms[line.serial1].color.getHexString();
30671
+
30672
+ line.radius = ic.coilWidth;
30673
+
30674
+ if(!ic.dAtoms.hasOwnProperty(line.serial1) || !ic.dAtoms.hasOwnProperty(line.serial2)) continue;
30675
+
30676
+ line.position1 = ic.atoms[line.serial1].coord;
30677
+ line.position2 = ic.atoms[line.serial2].coord;
30678
+
30679
+ ic.lines['missingres'].push(line);
30680
+ } // for j
30681
+ } // for i
30682
+ } // if
30683
+ }
30684
+
30685
+ applyMissingResOptions_base(type) { let ic = this.icn3d; ic.icn3dui;
30686
+ let misingResArray = [];
30687
+ for(let chainid in ic.chainsSeq) {
30688
+ let bStart = false;
30689
+ let startResid, currResid, prevResid;
30690
+ let bCurrCoord, bPrevCoord = false;
30691
+ for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
30692
+ currResid = chainid + '_' + ic.chainsSeq[chainid][i].resi;
30693
+
30694
+ if(ic.residues.hasOwnProperty(currResid)) {
30695
+ bStart = true;
30696
+
30697
+ bCurrCoord = true;
30698
+ }
30699
+ else {
30700
+ bCurrCoord = false;
30701
+ }
30702
+
30703
+ if(!bCurrCoord && bPrevCoord) {
30704
+ startResid = prevResid;
30705
+ }
30706
+ else if(bStart && startResid && bCurrCoord && !bPrevCoord) {
30707
+ misingResArray.push(startResid);
30708
+ misingResArray.push(currResid);
30709
+
30710
+ startResid = undefined;
30711
+ }
30712
+
30713
+ bPrevCoord = bCurrCoord;
30714
+ prevResid = currResid;
30715
+ }
30716
+ }
30717
+
30718
+ for(let i = 0, il = misingResArray.length; i < il; i += 2) {
30719
+ let resid0 = misingResArray[i];
30720
+ let resid1 = misingResArray[i + 1];
30721
+
30722
+ let structure = resid0.substr(0, resid0.indexOf('_'));
30723
+ resid0.substr(0, resid1.indexOf('_'));
30724
+
30725
+ let atom0 = ic.firstAtomObjCls.getFirstCalphaAtomObj(ic.residues[resid0]);
30726
+ let atom1 = ic.firstAtomObjCls.getFirstCalphaAtomObj(ic.residues[resid1]);
30727
+
30728
+ // one residue may have different atom for different clbond
30729
+ if(atom0 && atom1) {
30730
+ if(ic.missingResPnts[structure] === undefined) ic.missingResPnts[structure] = [];
30731
+ ic.missingResPnts[structure].push(resid0);
30732
+ ic.missingResPnts[structure].push(resid1);
30733
+
30734
+ ic.missingResResid2serial[resid0 + ',' + resid1] = atom0.serial;
30735
+ ic.missingResResid2serial[resid1 + ',' + resid0] = atom1.serial;
30736
+ }
30737
+ } // for i
30738
+ }
30739
+ }
30740
+
30621
30741
  /**
30622
30742
  * @author Jiyao Wang <wangjiy@ncbi.nlm.nih.gov> / https://github.com/ncbi/icn3d
30623
30743
  */
@@ -31257,7 +31377,7 @@ class ApplySsbonds {
31257
31377
 
31258
31378
  let line = {};
31259
31379
  line.color = color;
31260
- line.dashed = true;
31380
+ line.dashed = false;
31261
31381
 
31262
31382
  // each Cys has two S atoms
31263
31383
  let serial1Array = [], serial2Array = [];
@@ -31358,14 +31478,17 @@ class ApplySsbonds {
31358
31478
  //if(ic.lines['ssbond'] === undefined) ic.lines['ssbond'] = [];
31359
31479
  ic.lines['ssbond'].push(line);
31360
31480
 
31361
- // create bonds for disulfide bonds
31362
- ic.cylinderCls.createCylinder(line.position1, line.position2, ic.cylinderRadius, colorObj);
31363
-
31364
31481
  // show ball and stick for these two residues
31365
31482
  let residueAtoms;
31366
31483
  residueAtoms = me.hashUtilsCls.unionHash(residueAtoms, ic.residues[res1]);
31367
31484
  residueAtoms = me.hashUtilsCls.unionHash(residueAtoms, ic.residues[res2]);
31368
31485
 
31486
+ let atom = ic.firstAtomObjCls.getFirstAtomObj(residueAtoms);
31487
+ let style = (atom.style == 'lines') ? 'lines' : 'stick';
31488
+
31489
+ // create bonds for disulfide bonds
31490
+ if(atom.style != 'lines') ic.cylinderCls.createCylinder(line.position1, line.position2, ic.cylinderRadius, colorObj);
31491
+
31369
31492
  // show side chains for the selected atoms
31370
31493
  let atoms = me.hashUtilsCls.intHash(residueAtoms, ic.sidec);
31371
31494
  // let calpha_atoms = me.hashUtilsCls.intHash(residueAtoms, ic.calphas);
@@ -31374,7 +31497,7 @@ class ApplySsbonds {
31374
31497
 
31375
31498
  // draw sidec separatedly
31376
31499
  for(let j in atoms) {
31377
- ic.atoms[j].style2 = 'stick';
31500
+ ic.atoms[j].style2 = style;
31378
31501
  }
31379
31502
  } // for(let i = 0,
31380
31503
  } // for(let s = 0,
@@ -33595,6 +33718,9 @@ class Alternate {
33595
33718
  }
33596
33719
 
33597
33720
  if(ic.scene) {
33721
+ // https://github.com/gkjohnson/three-gpu-pathtracer/blob/main/example/basic.js
33722
+ ic.renderer.outputEncoding = THREE.sRGBEncoding;
33723
+
33598
33724
  ic.renderer.render(ic.scene, cam);
33599
33725
  }
33600
33726
  }
@@ -40847,26 +40973,26 @@ class AddTrack {
40847
40973
  endColorStr = this.getExonColor(startExon.rangeStart, startExon.rangeEnd, to);
40848
40974
 
40849
40975
  colorGradient = startColorStr + ' 0%, #FFF 50%, ' + endColorStr + ' 100%';
40850
- htmlTmp2 += this.getExonHtml(startExon.exonIndex, colorGradient, startExon.from, endExon.to, startExon.genomeRange);
40976
+ htmlTmp2 += this.getExonHtml(startExon.exonIndex, colorGradient, startExon.from, endExon.to, startExon.genomeRange, chnid, simpTitle);
40851
40977
  }
40852
40978
  else {
40853
40979
  if(startExon) {
40854
40980
  startColorStr = this.getExonColor(startExon.rangeStart, startExon.rangeEnd, from);
40855
40981
 
40856
40982
  colorGradient = startColorStr + ' 0%, #FFF 50%, #00F 100%';
40857
- htmlTmp2 += this.getExonHtml(startExon.exonIndex, colorGradient, startExon.from, startExon.rangeEnd, startExon.genomeRange);
40983
+ htmlTmp2 += this.getExonHtml(startExon.exonIndex, colorGradient, startExon.from, startExon.rangeEnd, startExon.genomeRange, chnid, simpTitle);
40858
40984
  }
40859
40985
 
40860
40986
  if(startExon && endExon) {
40861
40987
  for(let j = startExon.exonIndex + 1; j < endExon.exonIndex; ++j) {
40862
40988
  colorGradient = '#F00 0%, #FFF 50%, #00F 100%';
40863
- htmlTmp2 += this.getExonHtml(j, colorGradient, exonArray[j].resStart, exonArray[j].resEnd, exonArray[j].genomeRange);
40989
+ htmlTmp2 += this.getExonHtml(j, colorGradient, exonArray[j].resStart, exonArray[j].resEnd, exonArray[j].genomeRange, chnid, simpTitle);
40864
40990
  }
40865
40991
 
40866
40992
  endColorStr = this.getExonColor(endExon.rangeStart, endExon.rangeEnd, to);
40867
40993
 
40868
40994
  colorGradient = '#F00 0%, #FFF 50%, ' + endColorStr + ' 100%';
40869
- htmlTmp2 += this.getExonHtml(endExon.exonIndex, colorGradient, endExon.rangeStart, endExon.to, endExon.genomeRange);
40995
+ htmlTmp2 += this.getExonHtml(endExon.exonIndex, colorGradient, endExon.rangeStart, endExon.to, endExon.genomeRange, chnid, simpTitle);
40870
40996
  }
40871
40997
  }
40872
40998
 
@@ -40900,8 +41026,8 @@ class AddTrack {
40900
41026
  }
40901
41027
  }
40902
41028
 
40903
- getExonHtml(exonIndex, colorGradient, from, to, genomeRange) { let ic = this.icn3d; ic.icn3dui;
40904
- return '<div style="display:inline-block; color:white!important; width:' + Math.round(ic.seqAnnWidth *(to - from + 1) /(ic.maxAnnoLength + ic.nTotalGap)) + 'px;" class="icn3d-seqTitle icn3d-link icn3d-blue" title="Exon ' + (exonIndex + 1) + ': ' + genomeRange + ' genomic interval" anno="sequence" title="' + (exonIndex + 1) + '"><div style="height: 12px; border: 1px solid #000; background: linear-gradient(to right, ' + colorGradient + ');"></div></div>';
41029
+ getExonHtml(exonIndex, colorGradient, from, to, genomeRange, chainid, simpTitle) { let ic = this.icn3d; ic.icn3dui;
41030
+ return '<div style="display:inline-block; color:white!important; width:' + Math.round(ic.seqAnnWidth *(to - from + 1) /(ic.maxAnnoLength + ic.nTotalGap)) + 'px;" class="icn3d-seqTitle icn3d-link icn3d-blue" domain="' + (exonIndex + 1) + '" from="' + from + '" to="' + to + '" setname="' + simpTitle + ', Exon ' + (exonIndex + 1) + '" title="Exon ' + (exonIndex + 1) + ': ' + genomeRange + ' genomic interval" anno="sequence" chain="' + chainid + '"><div style="height: 12px; border: 1px solid #000; background: linear-gradient(to right, ' + colorGradient + ');"></div></div>';
40905
41031
  }
40906
41032
 
40907
41033
  getExonColor(start, end, pos) { let ic = this.icn3d; ic.icn3dui;
@@ -46204,7 +46330,7 @@ class LineGraph {
46204
46330
  let thisClass = this;
46205
46331
 
46206
46332
  // round 1, 16 templates
46207
- ic.refpdbArray = ['1InsulinR_8guyE_human_FN3-n1', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1CoAtomerGamma1_1r4xA_human', '1C3_2qkiD_human_n1', '1CuZnSuperoxideDismutase_1hl5C_human', '1ASF1A_2iijA_human', '1FAB-LIGHT_5esv_C1-n2', '1CD2_1hnfA_human_C2-n2', '1NaCaExchanger_2fwuA_dog_n2', '1FAB-HEAVY_5esv_V-n1', '1PDL1_4z18B_human_V-n1', '1BTLA_2aw2A_human_Iset', '1LaminAC_1ifrA_human', '1IsdA_2iteA_bacteria', '1TCRa_6jxrm_human_C1-n2', '1CD19_6al5A_human_C2orV-n1'];
46333
+ ic.refpdbArray = ['1InsulinR_8guyE_human_FN3-n1', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1CoAtomerGamma1_1r4xA_human', '1C3_2qkiD_human_n1', '1CuZnSuperoxideDismutase_1hl5C_human', '1ASF1A_2iijA_human', '1FAB-LIGHT_5esv_C1-n2', '1CD2_1hnfA_human_C2-n2', '1NaCaExchanger_2fwuA_dog_n2', '1FAB-HEAVY_5esv_V-n1', '1PDL1_4z18B_human_V-n1', '1BTLA_2aw2A_human_Iset', '1LaminAC_1ifrA_human', '1IsdA_2iteA_bacteria', '1TCRa_6jxrm_human_C1-n2', '1CD19_6al5A_human_C2orV-n1', '1CD28_1yjdC_human_V'];
46208
46334
 
46209
46335
  // round 2
46210
46336
  ic.refpdbHash = {};
@@ -46223,52 +46349,55 @@ class LineGraph {
46223
46349
  ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human'];
46224
46350
  ic.refpdbHash['1IsdA_2iteA_bacteria'] = ['IsdA_2iteA_bacteria'];
46225
46351
  ic.refpdbHash['1TCRa_6jxrm_human_C1-n2'] = ['TCRa_6jxrm_human_C1-n2'];
46226
- ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
46352
+ ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
46353
+ ic.refpdbHash['1CD28_1yjdC_human_V'] = ['CD28_1yjdC_human_V'];
46227
46354
 
46228
46355
  // use known ref structure
46229
- ic.refpdbHash['5ESV'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2', 'FAB-LIGHT_5esv_C1-n2'];
46230
- ic.refpdbHash['8GUY'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
46231
- ic.refpdbHash['6JXR'] = ['TCRa_6jxrm_human_V-n1', 'TCRa_6jxrm_human_C1-n2'];
46232
- ic.refpdbHash['1HNF'] = ['CD2_1hnfA_human_V-n1', 'CD2_1hnfA_human_C2-n2'];
46233
- ic.refpdbHash['7TZG'] = ['LAG3_7tzgD_human_V-n1', 'LAG3_7tzgD_human_C2-n2'];
46234
- ic.refpdbHash['6PY8'] = ['RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
46235
- ic.refpdbHash['1BQU'] = ['IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3'];
46236
-
46237
- ic.refpdbHash['1R4X'] = ['CoAtomerGamma1_1r4xA_human'];
46238
- ic.refpdbHash['6OIL'] = ['VISTA_6oilA_human_V'];
46239
- ic.refpdbHash['2ZXE'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
46240
- ic.refpdbHash['1I8A'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
46241
- ic.refpdbHash['2FWU'] = ['NaCaExchanger_2fwuA_dog_n2'];
46242
- ic.refpdbHash['4JQI'] = ['BArrestin1_4jqiA_rat_n1'];
46243
- ic.refpdbHash['1NBQ'] = ['JAM1_1nbqA_human_VorIset-n2'];
46244
- ic.refpdbHash['1O75'] = ['TP47_1o75A_bacteria'];
46245
- ic.refpdbHash['7PHR'] = ['MHCIa_7phrH_human_C1'];
46246
- ic.refpdbHash['2IIJ'] = ['ASF1A_2iijA_human'];
46247
- ic.refpdbHash['4Z18'] = ['PDL1_4z18B_human_V-n1'];
46248
- ic.refpdbHash['1T6V'] = ['VNAR_1t6vN_shark_V'];
46249
- ic.refpdbHash['2O6C'] = ['TP34_2o6cA_bacteria'];
46250
- ic.refpdbHash['3KYS'] = ['TEAD1_3kysC_human'];
46251
- ic.refpdbHash['7PHR'] = ['B2Microglobulin_7phrL_human_C1'];
46252
- ic.refpdbHash['2AW2'] = ['BTLA_2aw2A_human_Iset'];
46253
- ic.refpdbHash['1HL5'] = ['CuZnSuperoxideDismutase_1hl5C_human'];
46254
- ic.refpdbHash['1WF5'] = ['Sidekick2_1wf5A_human_FN3-n7'];
46255
- ic.refpdbHash['5J0B'] = ['Siglec3_5j0bB_human_C2-n2'];
46256
- ic.refpdbHash['1IFR'] = ['LaminAC_1ifrA_human'];
46257
- ic.refpdbHash['Q7Z7D3'] = ['VTCN1_Q7Z7D3_human_V-n2'];
46258
- ic.refpdbHash['4ZQK'] = ['PD1_4zqkB_human_V'];
46259
- ic.refpdbHash['2DM3'] = ['Palladin_2dm3A_human_Iset-n1'];
46260
- ic.refpdbHash['2ITE'] = ['IsdA_2iteA_bacteria'];
46261
- ic.refpdbHash['1XAK'] = ['ORF7a_1xakA_virus'];
46262
- ic.refpdbHash['4ZT1'] = ['ECadherin_4zt1A_human_n2'];
46263
- ic.refpdbHash['1LMI'] = ['MPT63_1lmiA_bacteria'];
46264
- ic.refpdbHash['1CD8'] = ['CD8a_1cd8A_human_V'];
46265
- ic.refpdbHash['3S97'] = ['Contactin1_3s97C_human_C2-n2'];
46266
- ic.refpdbHash['1AXI'] = ['GHR_1axiB_human_FN3-n1'];
46267
- ic.refpdbHash['6X4G'] = ['ICOS_6x4gA_human_V'];
46268
- ic.refpdbHash['2EE2'] = ['Contactin1_2ee2A_human_FN3-n9'];
46269
- ic.refpdbHash['4UOW'] = ['Titin_4uowM_human_Unk-n152'];
46270
- ic.refpdbHash['6A15'] = ['CD19_6al5A_human_C2orV-n1'];
46271
- ic.refpdbHash['2QKI'] = ['C3_2qkiD_human_n1'];
46356
+ ic.refpdbHash['5ESV_C'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2'];
46357
+ ic.refpdbHash['5ESV_D'] = ['FAB-LIGHT_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2'];
46358
+ ic.refpdbHash['8GUY_E'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
46359
+ ic.refpdbHash['6JXR_m'] = ['TCRa_6jxrm_human_V-n1', 'TCRa_6jxrm_human_C1-n2'];
46360
+ ic.refpdbHash['1HNF_A'] = ['CD2_1hnfA_human_V-n1', 'CD2_1hnfA_human_C2-n2'];
46361
+ ic.refpdbHash['7TZG_D'] = ['LAG3_7tzgD_human_V-n1', 'LAG3_7tzgD_human_C2-n2'];
46362
+ ic.refpdbHash['6PY8_C'] = ['RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
46363
+ ic.refpdbHash['1BQU_B'] = ['IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3'];
46364
+
46365
+ ic.refpdbHash['1R4X_A'] = ['CoAtomerGamma1_1r4xA_human'];
46366
+ ic.refpdbHash['6OIL_A'] = ['VISTA_6oilA_human_V'];
46367
+ ic.refpdbHash['2ZXE_B'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
46368
+ ic.refpdbHash['1I8A_A'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
46369
+ ic.refpdbHash['2FWU_A'] = ['NaCaExchanger_2fwuA_dog_n2'];
46370
+ ic.refpdbHash['4JQI_A'] = ['BArrestin1_4jqiA_rat_n1'];
46371
+ ic.refpdbHash['1NBQ_A'] = ['JAM1_1nbqA_human_VorIset-n2'];
46372
+ ic.refpdbHash['1O75_A'] = ['TP47_1o75A_bacteria'];
46373
+ ic.refpdbHash['7PHR_H'] = ['MHCIa_7phrH_human_C1'];
46374
+ ic.refpdbHash['2IIJ_A'] = ['ASF1A_2iijA_human'];
46375
+ ic.refpdbHash['4Z18_B'] = ['PDL1_4z18B_human_V-n1'];
46376
+ ic.refpdbHash['1T6V_N'] = ['VNAR_1t6vN_shark_V'];
46377
+ ic.refpdbHash['2O6C_A'] = ['TP34_2o6cA_bacteria'];
46378
+ ic.refpdbHash['3KYS_C'] = ['TEAD1_3kysC_human'];
46379
+ ic.refpdbHash['7PHR_L'] = ['B2Microglobulin_7phrL_human_C1'];
46380
+ ic.refpdbHash['2AW2_A'] = ['BTLA_2aw2A_human_Iset'];
46381
+ ic.refpdbHash['1HL5_C'] = ['CuZnSuperoxideDismutase_1hl5C_human'];
46382
+ ic.refpdbHash['1WF5_A'] = ['Sidekick2_1wf5A_human_FN3-n7'];
46383
+ ic.refpdbHash['5J0B_B'] = ['Siglec3_5j0bB_human_C2-n2'];
46384
+ ic.refpdbHash['1IFR_A'] = ['LaminAC_1ifrA_human'];
46385
+ ic.refpdbHash['Q7Z7D3_A'] = ['VTCN1_Q7Z7D3_human_V-n2'];
46386
+ ic.refpdbHash['4ZQK_B'] = ['PD1_4zqkB_human_V'];
46387
+ ic.refpdbHash['2DM3_A'] = ['Palladin_2dm3A_human_Iset-n1'];
46388
+ ic.refpdbHash['2ITE_A'] = ['IsdA_2iteA_bacteria'];
46389
+ ic.refpdbHash['1XAK_A'] = ['ORF7a_1xakA_virus'];
46390
+ ic.refpdbHash['4ZT1_A'] = ['ECadherin_4zt1A_human_n2'];
46391
+ ic.refpdbHash['1LMI_A'] = ['MPT63_1lmiA_bacteria'];
46392
+ ic.refpdbHash['1CD8_A'] = ['CD8a_1cd8A_human_V'];
46393
+ ic.refpdbHash['3S97_C'] = ['Contactin1_3s97C_human_C2-n2'];
46394
+ ic.refpdbHash['1AXI_B'] = ['GHR_1axiB_human_FN3-n1'];
46395
+ ic.refpdbHash['6X4G_A'] = ['ICOS_6x4gA_human_V'];
46396
+ ic.refpdbHash['2EE2_A'] = ['Contactin1_2ee2A_human_FN3-n9'];
46397
+ ic.refpdbHash['4UOW_M'] = ['Titin_4uowM_human_Unk-n152'];
46398
+ ic.refpdbHash['6A15_A'] = ['CD19_6al5A_human_C2orV-n1'];
46399
+ ic.refpdbHash['2QKI_D'] = ['C3_2qkiD_human_n1'];
46400
+ ic.refpdbHash['1YJD_C'] = ['CD28_1yjdC_human_V'];
46272
46401
 
46273
46402
  let pdbAjaxArray = [];
46274
46403
  for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
@@ -46527,12 +46656,12 @@ class LineGraph {
46527
46656
  let domainid = domainidpairArray[i].substr(0, domainidpairArray[i].indexOf('|'));
46528
46657
  let refpdbname = domainidpairArray[i].substr(domainidpairArray[i].indexOf('|') + 1);
46529
46658
  //let chainid = domainid.split('-')[0];
46530
-
46659
+
46531
46660
  if(!bRound1) {
46532
46661
  if(!me.bNode) console.log("refpdbname " + refpdbname + " TM-score: " + queryData[0].score);
46533
46662
  }
46534
46663
  else {
46535
- if(!me.bNode) console.log("refpdbname " + refpdbname + " RMSD: " + queryData[0].super_rmsd);
46664
+ if(!me.bNode) console.log("domainid: " + domainid + " refpdbname " + refpdbname + " RMSD: " + queryData[0].super_rmsd + ", num_res: " + queryData[0].num_res + ", 10/RMSD + num_res/5: " + (10 / queryData[0].super_rmsd + queryData[0].num_seg / 5).toFixed(1));
46536
46665
  }
46537
46666
 
46538
46667
  // Ig-like domains: B (2150, 2150a, 2150b), C (3150, 3250), E (7150, 7250), F (8150, 8250) strands
@@ -46562,11 +46691,14 @@ class LineGraph {
46562
46691
  //if(!(bBstrand && bCstrand && bEstrand && bFstrand && bGstrand)) continue;
46563
46692
  if(!(bBstrand && bCstrand && bEstrand && bFstrand)) {
46564
46693
  if(!me.bNode) console.log("Some of the Ig strands B, C, E, F are missing in the domain " + domainid + "...");
46694
+ if(ic.domainid2refpdbname[domainid]) delete ic.domainid2refpdbname[domainid];
46565
46695
  continue;
46566
46696
  }
46567
46697
  }
46568
46698
 
46569
46699
  if(!bRound1) {
46700
+ console.log("domainid: " + domainid);
46701
+
46570
46702
  if(!domainid2score.hasOwnProperty(domainid) || queryData[0].score > domainid2score[domainid]) {
46571
46703
  domainid2score[domainid] = queryData[0].score;
46572
46704
 
@@ -46577,8 +46709,10 @@ class LineGraph {
46577
46709
  }
46578
46710
  }
46579
46711
  else {
46580
- if(!domainid2score.hasOwnProperty(domainid) || queryData[0].super_rmsd < domainid2score[domainid]) {
46581
- domainid2score[domainid] = queryData[0].super_rmsd;
46712
+ let mixScore = 10 / queryData[0].super_rmsd + queryData[0].num_seg / 5;
46713
+
46714
+ if(!domainid2score.hasOwnProperty(domainid) || mixScore > domainid2score[domainid]) {
46715
+ domainid2score[domainid] = mixScore;
46582
46716
 
46583
46717
  ic.domainid2refpdbname[domainid] = refpdbname;
46584
46718
  domainid2segs[domainid] = queryData[0].segs;
@@ -46598,11 +46732,14 @@ class LineGraph {
46598
46732
  for(let domainid in ic.domainid2refpdbname) {
46599
46733
  let pdbAjaxArray = [];
46600
46734
  let refpdbname = ic.domainid2refpdbname[domainid];
46601
- let pdbid = domainid.substr(0, domainid.indexOf('_'));
46735
+ //let pdbid = domainid.substr(0, domainid.indexOf('_'));
46736
+ let chainid = domainid.substr(0, domainid.indexOf('-'));
46602
46737
 
46603
- if(ic.refpdbHash.hasOwnProperty(pdbid)) {
46738
+ //if(ic.refpdbHash.hasOwnProperty(pdbid)) {
46739
+ if(ic.refpdbHash.hasOwnProperty(chainid)) {
46604
46740
  // use itself as the ref structure
46605
- refpdbname = pdbid;
46741
+ //refpdbname = pdbid;
46742
+ refpdbname = chainid;
46606
46743
 
46607
46744
  if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
46608
46745
  }
@@ -46644,11 +46781,11 @@ class LineGraph {
46644
46781
  dataArray3 = await allPromise;
46645
46782
 
46646
46783
  await thisClass.parseAlignData(dataArray3, domainidpairArray3);
46647
-
46784
+
46648
46785
  // end of round 2
46649
46786
  return;
46650
46787
  }
46651
-
46788
+
46652
46789
  // combine domainid into chainid
46653
46790
  let processedChainid = {};
46654
46791
  for(let domainid in ic.domainid2refpdbname) {
@@ -46755,17 +46892,18 @@ class LineGraph {
46755
46892
 
46756
46893
  // A-: 10xx
46757
46894
  // A: 11xx
46895
+ // A+ continue A
46758
46896
  // A': 12xx
46759
- // A+: 13xx
46760
46897
  // B: 21xx
46761
46898
  // C: 32xx
46762
46899
  // C': 42xx
46763
46900
  // C'': 51xx, 52xx
46764
46901
  // D: 61xx
46765
46902
  // E: 71xx
46903
+ // E+: continue E
46766
46904
  // F: 82xx
46767
46905
  // G: 91xx, 92xx
46768
- // G+: 94xx
46906
+ // G+: continue G
46769
46907
 
46770
46908
  // if(refnum < 100) return " " + oriRefnum;
46771
46909
  // else if(refnum >= 100 && refnum < 1000) {
@@ -46775,11 +46913,10 @@ class LineGraph {
46775
46913
  if(refnum < 900) return undefined;
46776
46914
  else if(refnum >= 900 && refnum < 1000) return " " + oriRefnum;
46777
46915
  else if(refnum >= 1000 && refnum < 1100) return "A-" + oriRefnum;
46778
- else if(refnum >= 1100 && refnum < 1200) return "A" + oriRefnum;
46916
+ else if(refnum >= 1100 && refnum < 1200) return "A" + oriRefnum; // could be A+
46779
46917
  else if(refnum >= 1200 && refnum < 1300) return "A'" + oriRefnum;
46780
- //else if(refnum >= 1300 && refnum < 1400) return "A*" + oriRefnum;
46781
- else if(refnum >= 1300 && refnum < 1400) return "A+" + oriRefnum;
46782
- else if(refnum >= 1400 && refnum < 2000) {
46918
+ //else if(refnum >= 1300 && refnum < 1400) return "A+" + oriRefnum;
46919
+ else if(refnum >= 1300 && refnum < 2000) {
46783
46920
  if(prevStrand && prevStrand.substr(0, 1) == 'A') {
46784
46921
  return prevStrand + oriRefnum;
46785
46922
  }
@@ -46792,12 +46929,11 @@ class LineGraph {
46792
46929
  else if(refnum >= 4000 && refnum < 5000) return "C'" + oriRefnum;
46793
46930
  else if(refnum >= 5000 && refnum < 6000) return "C''" + oriRefnum;
46794
46931
  else if(refnum >= 6000 && refnum < 7000) return "D" + oriRefnum;
46795
- else if(refnum >= 7000 && refnum < 8000) return "E" + oriRefnum;
46932
+ else if(refnum >= 7000 && refnum < 8000) return "E" + oriRefnum; // could be E+
46796
46933
  else if(refnum >= 8000 && refnum < 9000) return "F" + oriRefnum;
46797
- else if(refnum >= 9000 && refnum < 9400) return "G" + oriRefnum;
46798
- //else if(refnum >= 9400 && refnum < 9500) return "G*" + oriRefnum;
46799
- else if(refnum >= 9400 && refnum < 9500) return "G+" + oriRefnum;
46800
- else if(refnum >= 9500) return "G" + oriRefnum;
46934
+ else if(refnum >= 9000 && refnum < 9300) return "G" + oriRefnum; // could be G+
46935
+ //else if(refnum >= 9400 && refnum < 9500) return "G+" + oriRefnum;
46936
+ else if(refnum >= 9300) return "G" + oriRefnum;
46801
46937
  }
46802
46938
 
46803
46939
  async parseCustomRefFile(data) { let ic = this.icn3d; ic.icn3dui;
@@ -46921,9 +47057,8 @@ class LineGraph {
46921
47057
  let atom = ic.firstAtomObjCls.getFirstAtomObj(ic.chains[chnid]);
46922
47058
  if(ic.proteins.hasOwnProperty(atom.serial)) {
46923
47059
  for(let i = 0; i < ic.chainsSeq[chnid].length; ++i) {
46924
- const resid = chnid + '_' + ic.chainsSeq[chnid][i].resi + '_' + ic.chainsSeq[chnid][i].name;
46925
-
46926
- refData += "'" + resid + "': '" + resid2refnum[resid] + "',\n";
47060
+ const resid = chnid + '_' + ic.chainsSeq[chnid][i].resi + '_' + ic.chainsSeq[chnid][i].name;
47061
+ refData += '"' + resid + '": "' + resid2refnum[resid] + '",\n';
46927
47062
  }
46928
47063
  }
46929
47064
  }
@@ -48288,22 +48423,16 @@ class ViewInterPairs {
48288
48423
  }
48289
48424
 
48290
48425
  if(ic.bD3 === undefined) {
48291
- //var url = "https://d3js.org/d3.v4.min.js";
48292
- var url = "https://www.ncbi.nlm.nih.gov/Structure/icn3d/script/d3v4-force-all.min.js";
48426
+ //let url = "https://d3js.org/d3.v4.min.js";
48427
+ let url = "https://www.ncbi.nlm.nih.gov/Structure/icn3d/script/d3v4-force-all.min.js";
48293
48428
  await me.getAjaxPromise(url, 'script');
48294
48429
 
48295
48430
  ic.bD3 = true;
48296
-
48297
- $("#" + me.svgid).empty();
48298
- me.htmlCls.dialogCls.openDlg('dl_graph', 'Force-directed graph');
48299
- ic.drawGraphCls.drawGraph(ic.graphStr, ic.pre + 'dl_graph');
48300
- /// if(ic.deferredGraphinteraction !== undefined) ic.deferredGraphinteraction.resolve();
48301
- }
48302
- else {
48303
- $("#" + me.svgid).empty();
48304
- me.htmlCls.dialogCls.openDlg('dl_graph', 'Force-directed graph');
48305
- ic.drawGraphCls.drawGraph(ic.graphStr, ic.pre + 'dl_graph');
48306
48431
  }
48432
+
48433
+ $("#" + me.svgid).empty();
48434
+ me.htmlCls.dialogCls.openDlg('dl_graph', 'Force-directed graph');
48435
+ ic.drawGraphCls.drawGraph(ic.graphStr, ic.pre + 'dl_graph');
48307
48436
  }
48308
48437
 
48309
48438
  return {interactionTypes: interactionTypes.toString(), bondCnt: bondCnt};
@@ -49922,7 +50051,6 @@ class ChainalignParser {
49922
50051
  let ajaxArray = [], indexArray = [], struArray = [];
49923
50052
  let urlalign = me.htmlCls.baseUrl + "vastdyn/vastdyn.cgi";
49924
50053
  let urltmalign = me.htmlCls.baseUrl + "tmalign/tmalign.cgi";
49925
- //let urltmalign = "https://test.ncbi.nlm.nih.gov/Structure/tmalign/tmalign.cgi";
49926
50054
 
49927
50055
  for(let index in ic.afChainIndexHash) {
49928
50056
  let idArray = ic.afChainIndexHash[index].split('_');
@@ -50711,7 +50839,12 @@ class ChainalignParser {
50711
50839
  targetAjax = me.getAjaxPromise(url_t, 'text');
50712
50840
  }
50713
50841
  else {
50714
- url_t = me.htmlCls.baseUrl + "mmdb/mmdb_strview.cgi?v=2&program=icn3d&b=1&s=1&ft=1&bu=" + me.cfg.bu + "&uid=" + structure;
50842
+ let structureTmp = structure;
50843
+ if(structure.length == 5) {
50844
+ structureTmp = structure.substr(0,4);
50845
+ }
50846
+
50847
+ url_t = me.htmlCls.baseUrl + "mmdb/mmdb_strview.cgi?v=2&program=icn3d&b=1&s=1&ft=1&bu=" + me.cfg.bu + "&uid=" + structureTmp;
50715
50848
  if(me.cfg.inpara !== undefined) url_t += me.cfg.inpara;
50716
50849
 
50717
50850
  targetAjax = me.getAjaxPromise(url_t, 'jsonp');
@@ -50788,7 +50921,8 @@ class ChainalignParser {
50788
50921
  }
50789
50922
  else {
50790
50923
  let bNoSeqalign = true;
50791
- hAtomsTmp = await ic.mmdbParserCls.parseMmdbData(queryDataArray[i], targetOrQuery, undefined, undefined, bLastQuery, bNoSeqalign);
50924
+ let pdbid = structArray[i];
50925
+ hAtomsTmp = await ic.mmdbParserCls.parseMmdbData(queryDataArray[i], targetOrQuery, undefined, undefined, bLastQuery, bNoSeqalign, pdbid);
50792
50926
  }
50793
50927
 
50794
50928
  hAtoms = me.hashUtilsCls.unionHash(hAtoms, hAtomsTmp);
@@ -51450,9 +51584,10 @@ class MmdbParser {
51450
51584
  }
51451
51585
  }
51452
51586
 
51453
- async parseMmdbData(data, type, chainid, chainIndex, bLastQuery, bNoTransformNoSeqalign) { let ic = this.icn3d, me = ic.icn3dui;
51587
+ async parseMmdbData(data, type, chainid, chainIndex, bLastQuery, bNoTransformNoSeqalign, pdbidIn) { let ic = this.icn3d, me = ic.icn3dui;
51454
51588
  let hAtoms;
51455
- let pdbid =(data.pdbId !== undefined) ? data.pdbId : data.mmdbId;
51589
+ let pdbid = (data.pdbId !== undefined) ? data.pdbId : data.mmdbId;
51590
+ if(pdbidIn) pdbid = pdbidIn;
51456
51591
 
51457
51592
  this.parseMmdbDataPart1(data, type);
51458
51593
 
@@ -62799,7 +62934,7 @@ class LoadScript {
62799
62934
  }
62800
62935
 
62801
62936
  //When reading a list of commands, apply transformation at the last step.
62802
- renderFinalStep(steps) { let ic = this.icn3d, me = ic.icn3dui;
62937
+ async renderFinalStep(steps) { let ic = this.icn3d, me = ic.icn3dui;
62803
62938
  // enable ic.ParserUtilsCls.hideLoading
62804
62939
  ic.bCommandLoad = false;
62805
62940
 
@@ -64517,6 +64652,15 @@ class FirstAtomObj {
64517
64652
  }
64518
64653
  }
64519
64654
 
64655
+ if(!firstIndex) {
64656
+ for(let i in atomsHash) {
64657
+ if(ic.atoms[i].name == "O3'" || ic.atoms[i].name == "O3*") {
64658
+ firstIndex = i;
64659
+ break;
64660
+ }
64661
+ }
64662
+ }
64663
+
64520
64664
  return (firstIndex !== undefined) ? ic.atoms[firstIndex] : this.getFirstAtomObj(atomsHash);
64521
64665
  }
64522
64666
 
@@ -65022,8 +65166,11 @@ class Delphi {
65022
65166
  let salt = saltArray[1]; //parseFloat(saltArray[1]);
65023
65167
 
65024
65168
  // The values should be string
65025
- $("#" + ic.pre + "delphigsize").val(gsize);
65026
- $("#" + ic.pre + "delphisalt").val(salt);
65169
+ $("#" + ic.pre + "delphi1gsize").val(gsize);
65170
+ $("#" + ic.pre + "delphi1salt").val(salt);
65171
+
65172
+ $("#" + ic.pre + "delphi2gsize").val(gsize);
65173
+ $("#" + ic.pre + "delphi2salt").val(salt);
65027
65174
 
65028
65175
  if(paraArray.length == 7) {
65029
65176
  let surfaceArray = paraArray[4].split(" ");
@@ -65048,11 +65195,11 @@ class Delphi {
65048
65195
  }
65049
65196
 
65050
65197
  async loadDelphiFile(type) { let ic = this.icn3d, me = ic.icn3dui;
65051
- let gsize = $("#" + ic.pre + "delphigsize").val();
65052
- let salt = $("#" + ic.pre + "delphisalt").val();
65053
- let contour =(type == 'delphi2') ? $("#" + ic.pre + "delphicontour2").val() : $("#" + ic.pre + "delphicontour").val();
65198
+ let gsize = (type == 'delphi2') ? $("#" + ic.pre + "delphi2gsize").val() : $("#" + ic.pre + "delphi1gsize").val();
65199
+ let salt = (type == 'delphi2') ? $("#" + ic.pre + "delphi2salt").val() : $("#" + ic.pre + "delphi1gsize").val();
65200
+ let contour = (type == 'delphi2') ? $("#" + ic.pre + "delphicontour2").val() : $("#" + ic.pre + "delphicontour").val();
65054
65201
 
65055
- let bSurface =(type == 'delphi2') ? true: false;
65202
+ let bSurface = (type == 'delphi2') ? true: false;
65056
65203
 
65057
65204
  await this.CalcPhi(gsize, salt, contour, bSurface);
65058
65205
 
@@ -68780,7 +68927,7 @@ class ResizeCanvas {
68780
68927
 
68781
68928
  ic.applyCenterCls.setWidthHeight(width, heightTmp);
68782
68929
 
68783
- if(bDraw === undefined || bDraw) {
68930
+ if(ic.structures && Object.keys(ic.structures).length > 0 && (bDraw === undefined || bDraw)) {
68784
68931
  ic.drawCls.draw();
68785
68932
  }
68786
68933
  }
@@ -72816,7 +72963,7 @@ class iCn3D {
72816
72963
  this.shininess = 40; //30
72817
72964
  this.emissive = 0x111111; //0x000000
72818
72965
 
72819
- this.light1 = 0.6; //1
72966
+ this.light1 = 0.8; //0.6; //1
72820
72967
  this.light2 = 0.4;
72821
72968
  this.light3 = 0.2;
72822
72969
 
@@ -73130,6 +73277,8 @@ class iCn3D {
73130
73277
 
73131
73278
  this.applyCenterCls = new ApplyCenter(this);
73132
73279
  this.applyClbondsCls = new ApplyClbonds(this);
73280
+ this.applyMissingResCls = new ApplyMissingRes(this);
73281
+
73133
73282
  this.applyDisplayCls = new ApplyDisplay(this);
73134
73283
  this.applyMapCls = new ApplyMap(this);
73135
73284
  this.applyOtherCls = new ApplyOther(this);
@@ -73452,7 +73601,7 @@ class iCn3DUI {
73452
73601
  //even when multiple iCn3D viewers are shown together.
73453
73602
  this.pre = this.cfg.divid + "_";
73454
73603
 
73455
- this.REVISION = '3.28.1';
73604
+ this.REVISION = '3.28.2';
73456
73605
 
73457
73606
  // In nodejs, iCn3D defines "window = {navigator: {}}"
73458
73607
  this.bNode = (Object.keys(window).length < 2) ? true : false;
@@ -73658,17 +73807,17 @@ iCn3DUI.prototype.show3DStructure = async function(pdbStr) { let me = this;
73658
73807
  chainidArray.push(domainidArray[i]);
73659
73808
  }
73660
73809
  }
73661
-
73662
- let mmdbafid = '';
73663
- for(let i = 0, il = chainidArray.length; i < il; ++i) {
73664
- if(i > 0) mmdbafid += ',';
73665
- mmdbafid += chainidArray[i].substr(0, chainidArray[i].indexOf('_'));
73666
- }
73667
73810
 
73668
73811
  // realign
73669
73812
  ic.chainidArray = [chain_t].concat(chainidArray);
73670
73813
  ic.chainidArray = ic.chainalignParserCls.addPostfixForChainids(ic.chainidArray);
73671
73814
 
73815
+ let mmdbafid = '';
73816
+ for(let i = 0, il = ic.chainidArray.length; i < il; ++i) {
73817
+ if(i > 0) mmdbafid += ',';
73818
+ mmdbafid += ic.chainidArray[i].substr(0, ic.chainidArray[i].indexOf('_'));
73819
+ }
73820
+
73672
73821
  me.htmlCls.clickMenuCls.setLogCmd('resdef ' + me.cfg.resdef, true);
73673
73822
 
73674
73823
  ic.loadCmd = 'vast_search_chainid ' + ic.chainidArray;