icn3d 3.30.1 → 3.30.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icn3d.js +142 -35
- package/icn3d.min.js +5 -5
- package/icn3d.module.js +142 -35
- package/package.json +1 -1
package/icn3d.js
CHANGED
|
@@ -11995,12 +11995,69 @@ class SetDialog {
|
|
|
11995
11995
|
|
|
11996
11996
|
group2tpl['Other'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'LaminAC_1ifrA_human', 'ORF7a_1xakA_virus'];
|
|
11997
11997
|
|
|
11998
|
+
let tpl2strandsig = {};
|
|
11999
|
+
tpl2strandsig['ASF1A_2iijA_human'] = "A A' B C C' E F G G+";
|
|
12000
|
+
tpl2strandsig['B2Microglobulin_7phrL_human_C1'] = "A B C C' D E F G";
|
|
12001
|
+
tpl2strandsig['BArrestin1_4jqiA_rat_n1'] = "A- A A' B C C' E F G";
|
|
12002
|
+
tpl2strandsig['BTLA_2aw2A_human_Iset'] = "A A' B C C' D E F G";
|
|
12003
|
+
tpl2strandsig['C3_2qkiD_human_n1'] = "A A' B C C' E F G";
|
|
12004
|
+
tpl2strandsig['CD19_6al5A_human_C2orV-n1'] = "A' B C C' D E F G";
|
|
12005
|
+
tpl2strandsig['CD28_1yjdC_human_V'] = "A A' B C C' C'' D E F G";
|
|
12006
|
+
tpl2strandsig['CD2_1hnfA_human_C2-n2'] = "A B C C' E F G";
|
|
12007
|
+
tpl2strandsig['CD2_1hnfA_human_V-n1'] = "A' B C C' C'' D E F G";
|
|
12008
|
+
tpl2strandsig['CD3d_6jxrd_human_Iset'] = "A B C D E F G";
|
|
12009
|
+
tpl2strandsig['CD3e_6jxrf_human_Iset'] = "A B C C' D E F G";
|
|
12010
|
+
tpl2strandsig['CD3g_6jxrg_human_Iset'] = "A B C C' E F G G+";
|
|
12011
|
+
tpl2strandsig['CD8a_1cd8A_human_V'] = "A A' B C C' C'' D E F G";
|
|
12012
|
+
tpl2strandsig['CoAtomerGamma1_1r4xA_human'] = "A- A B C D E F G";
|
|
12013
|
+
tpl2strandsig['Contactin1_2ee2A_human_FN3-n9'] = "A A' B C C' E F G";
|
|
12014
|
+
tpl2strandsig['Contactin1_3s97C_human_C2-n2'] = "A A' B C D E F G";
|
|
12015
|
+
tpl2strandsig['CuZnSuperoxideDismutase_1hl5C_human'] = "A- A B C C' E F G";
|
|
12016
|
+
tpl2strandsig['ECadherin_4zt1A_human_n2'] = "A' B C D E F G";
|
|
12017
|
+
tpl2strandsig['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'] = "A--- A-- A- A B C C' C'' D E F G";
|
|
12018
|
+
tpl2strandsig['FAB-HEAVY_5esv_C1-n2'] = "A B C D E F G";
|
|
12019
|
+
tpl2strandsig['FAB-HEAVY_5esv_V-n1'] = "A B C C' C'' D E F G";
|
|
12020
|
+
tpl2strandsig['FAB-LIGHT_5esv_C1-n2'] = "A B C C' E F G";
|
|
12021
|
+
tpl2strandsig['FAB-LIGHT_5esv_V-n1'] = "A A' B C C' C'' D E F G";
|
|
12022
|
+
tpl2strandsig['GHR_1axiB_human_FN3-n1'] = "A B C C' D E F G";
|
|
12023
|
+
tpl2strandsig['ICOS_6x4gA_human_V'] = "A B C C' C'' D E F G";
|
|
12024
|
+
tpl2strandsig['IL6Rb_1bquB_human_FN3-n2'] = "A B C C' E F G";
|
|
12025
|
+
tpl2strandsig['IL6Rb_1bquB_human_FN3-n3'] = "A B C C' E F G";
|
|
12026
|
+
tpl2strandsig['InsulinR_8guyE_human_FN3-n1'] = "A B C C' E F G";
|
|
12027
|
+
tpl2strandsig['InsulinR_8guyE_human_FN3-n2'] = "A B C C' E F G";
|
|
12028
|
+
tpl2strandsig['IsdA_2iteA_bacteria'] = "A- A B C C' D E F G";
|
|
12029
|
+
tpl2strandsig['JAM1_1nbqA_human_VorIset-n2'] = "A A' B C C' D E F G";
|
|
12030
|
+
tpl2strandsig['LAG3_7tzgD_human_C2-n2'] = "A A' B C C' D E F G";
|
|
12031
|
+
tpl2strandsig['LAG3_7tzgD_human_V-n1'] = "A' B C C' D E F G";
|
|
12032
|
+
tpl2strandsig['LaminAC_1ifrA_human'] = "A- A B C C' E E+ F G";
|
|
12033
|
+
tpl2strandsig['MHCIa_7phrH_human_C1'] = "A B C C' D E F G";
|
|
12034
|
+
tpl2strandsig['MPT63_1lmiA_bacteria'] = "A-- A- A BC C' E F G";
|
|
12035
|
+
tpl2strandsig['NaCaExchanger_2fwuA_dog_n2'] = "A A' B C C' E F G";
|
|
12036
|
+
tpl2strandsig['NaKATPaseTransporterBeta_2zxeB_spurdogshark']= "A A' B C D E F G";
|
|
12037
|
+
tpl2strandsig['ORF7a_1xakA_virus'] = "A' B C D E F G";
|
|
12038
|
+
tpl2strandsig['PD1_4zqkB_human_V'] = "A A' B C C' D E F G";
|
|
12039
|
+
tpl2strandsig['PDL1_4z18B_human_V-n1'] = "A A' B C C' C'' D E F G";
|
|
12040
|
+
tpl2strandsig['Palladin_2dm3A_human_Iset-n1'] = "A A' B C C' D E F G";
|
|
12041
|
+
tpl2strandsig['RBPJ_6py8C_human_Unk-n1'] = "A A' B C C' E F G";
|
|
12042
|
+
tpl2strandsig['RBPJ_6py8C_human_Unk-n2'] = "A B C D E F G";
|
|
12043
|
+
tpl2strandsig['Sidekick2_1wf5A_human_FN3-n7'] = "A B C C' E F G";
|
|
12044
|
+
tpl2strandsig['Siglec3_5j0bB_human_C2-n2'] = "A A' B C D E F G";
|
|
12045
|
+
tpl2strandsig['TCRa_6jxrm_human_C1-n2'] = "A B C D E F G";
|
|
12046
|
+
tpl2strandsig['TCRa_6jxrm_human_V-n1'] = "A A' B C C' C'' D E F G";
|
|
12047
|
+
tpl2strandsig['TEAD1_3kysC_human'] = "A A+ A' B C C' E F G G+";
|
|
12048
|
+
tpl2strandsig['TP34_2o6cA_bacteria'] = "A- A B C C' D E F G";
|
|
12049
|
+
tpl2strandsig['TP47_1o75A_bacteria'] = "A B C C' D E F G";
|
|
12050
|
+
tpl2strandsig['Titin_4uowM_human_Unk-n152'] = "A A' B C C' D E F G";
|
|
12051
|
+
tpl2strandsig['VISTA_6oilA_human_V'] = "A A' B C C' C'' D E F G G+";
|
|
12052
|
+
tpl2strandsig['VNAR_1t6vN_shark_V'] = "A A' B C C' D E F G";
|
|
12053
|
+
tpl2strandsig['VTCN1_Q7Z7D3_human_V-n2'] = "A B C C' D E F G G+";
|
|
12054
|
+
|
|
11998
12055
|
let html = '';
|
|
11999
12056
|
for(let group in group2tpl) {
|
|
12000
12057
|
html += "<optgroup label='" + group + "'>";
|
|
12001
12058
|
for(let i = 0, il = group2tpl[group].length; i < il; ++i) {
|
|
12002
12059
|
let template = group2tpl[group][i];
|
|
12003
|
-
html += me.htmlCls.optionStr + "'" + template + "'>" + template + "</option>";
|
|
12060
|
+
html += me.htmlCls.optionStr + "'" + template + "'>" + template + ", Strands: " + tpl2strandsig[template] + "</option>";
|
|
12004
12061
|
}
|
|
12005
12062
|
html += "</optgroup>";
|
|
12006
12063
|
}
|
|
@@ -12388,6 +12445,7 @@ class Events {
|
|
|
12388
12445
|
me.htmlCls.HEIGHT = $( window ).height();
|
|
12389
12446
|
ic.applyCenterCls.setWidthHeight(me.htmlCls.WIDTH, me.htmlCls.HEIGHT);
|
|
12390
12447
|
ic.drawCls.draw();
|
|
12448
|
+
|
|
12391
12449
|
ic.resizeCanvasCls.openFullscreen($("#" + me.pre + "canvas")[0]);
|
|
12392
12450
|
});
|
|
12393
12451
|
|
|
@@ -26778,7 +26836,8 @@ class Axes {
|
|
|
26778
26836
|
createArrow(dir, origin, axisLen, color, headLength, headWidth, bGlycan) { let ic = this.icn3d, me = ic.icn3dui;
|
|
26779
26837
|
if(me.bNode) return;
|
|
26780
26838
|
|
|
26781
|
-
let coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 32, 1 );
|
|
26839
|
+
// let coneGeometry = new THREE.CylinderBufferGeometry( 0, 0.5, 1, 32, 1 );
|
|
26840
|
+
let coneGeometry = new THREE.CylinderGeometry( 0, 0.5, 1, 32, 1 );
|
|
26782
26841
|
//coneGeometry.translate( 0, - 0.5, 0 );
|
|
26783
26842
|
coneGeometry.translate( 0, 0.5, 0 );
|
|
26784
26843
|
let material;
|
|
@@ -37931,10 +37990,15 @@ class AnnoIg {
|
|
|
37931
37990
|
if(!info) continue;
|
|
37932
37991
|
|
|
37933
37992
|
let tmscore = info.score;
|
|
37934
|
-
let igType = ic.ref2igtype[info.refpdbname];
|
|
37935
|
-
let confidance = (parseFloat(tmscore) < 0.75 ) ? '?' : '';
|
|
37936
|
-
titleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
|
|
37937
|
-
fullTitleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
|
|
37993
|
+
// let igType = ic.ref2igtype[info.refpdbname];
|
|
37994
|
+
// let confidance = (parseFloat(tmscore) < 0.75 ) ? '?' : '';
|
|
37995
|
+
// titleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
|
|
37996
|
+
// fullTitleArray.push(igType + confidance + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
|
|
37997
|
+
|
|
37998
|
+
let igType = (parseFloat(tmscore) < 0.75 ) ? 'Ig' : ic.ref2igtype[info.refpdbname];
|
|
37999
|
+
titleArray.push(igType + ' (TM:' + parseFloat(tmscore).toFixed(2) + ')');
|
|
38000
|
+
fullTitleArray.push(igType + ' (TM:' + parseFloat(tmscore).toFixed(2) + '), template: ' + info.refpdbname + ', Seq. identity: ' + parseFloat(info.seqid).toFixed(2) + ', aligned residues: ' + info.nresAlign);
|
|
38001
|
+
|
|
37938
38002
|
domainArray.push(igType);
|
|
37939
38003
|
|
|
37940
38004
|
let segs = [];
|
|
@@ -38289,15 +38353,13 @@ class AnnoDomain {
|
|
|
38289
38353
|
let subdomainArray = domainArray[index].intervals;
|
|
38290
38354
|
// remove duplicate, e.g., at https://www.ncbi.nlm.nih.gov/Structure/mmdb/mmdb_strview.cgi?v=2&program=icn3d&domain&molinfor&uid=1itw
|
|
38291
38355
|
let domainFromHash = {}, domainToHash = {};
|
|
38292
|
-
let fromArray = [], toArray = [];
|
|
38356
|
+
let fromArray = [], toArray = [], posFromArray = [], posToArray = [];
|
|
38293
38357
|
let resiHash = {};
|
|
38294
38358
|
let resCnt = 0;
|
|
38295
38359
|
|
|
38296
38360
|
for(let i = 0, il = subdomainArray.length; i < il; ++i) {
|
|
38297
|
-
|
|
38298
|
-
|
|
38299
|
-
let domainFrom = Math.round(subdomainArray[i][0]); // convert 1-based to 0-based
|
|
38300
|
-
let domainTo = Math.round(subdomainArray[i][1]);
|
|
38361
|
+
let domainFrom = Math.round(subdomainArray[i][0]) - 1; // convert 1-based to 0-based
|
|
38362
|
+
let domainTo = Math.round(subdomainArray[i][1]) - 1;
|
|
38301
38363
|
|
|
38302
38364
|
if(domainFromHash.hasOwnProperty(domainFrom) || domainToHash.hasOwnProperty(domainTo)) {
|
|
38303
38365
|
continue; // do nothing for duplicated "from" or "to", e.g, PDBID 1ITW, 5FWI
|
|
@@ -38311,6 +38373,9 @@ class AnnoDomain {
|
|
|
38311
38373
|
// if(ic.bNCBI || bCalcDirect) {
|
|
38312
38374
|
fromArray.push(pos2resi[domainFrom]);
|
|
38313
38375
|
toArray.push(pos2resi[domainTo]);
|
|
38376
|
+
|
|
38377
|
+
posFromArray.push(domainFrom);
|
|
38378
|
+
posToArray.push(domainTo);
|
|
38314
38379
|
// }
|
|
38315
38380
|
// else {
|
|
38316
38381
|
// fromArray.push(domainFrom + ic.baseResi[chnid]);
|
|
@@ -38331,9 +38396,9 @@ class AnnoDomain {
|
|
|
38331
38396
|
|
|
38332
38397
|
if(!ic.resid2domain) ic.resid2domain = {};
|
|
38333
38398
|
if(!ic.resid2domain[chnid]) ic.resid2domain[chnid] = [];
|
|
38334
|
-
for(let i = 0, il =
|
|
38335
|
-
let from = parseInt(
|
|
38336
|
-
let to = parseInt(
|
|
38399
|
+
for(let i = 0, il = posFromArray.length; i < il; ++i) {
|
|
38400
|
+
let from = parseInt(posFromArray[i]);
|
|
38401
|
+
let to = parseInt(posToArray[i]);
|
|
38337
38402
|
for(let j = from; j <= to; ++j) {
|
|
38338
38403
|
// 0-based
|
|
38339
38404
|
let obj = {};
|
|
@@ -38345,7 +38410,7 @@ class AnnoDomain {
|
|
|
38345
38410
|
}
|
|
38346
38411
|
}
|
|
38347
38412
|
|
|
38348
|
-
let htmlTmp2 = '<div class="icn3d-seqTitle icn3d-link icn3d-blue" 3ddomain="' +(index+1).toString() + '" from="' +
|
|
38413
|
+
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>';
|
|
38349
38414
|
let htmlTmp3 = '<span class="icn3d-residueNum" title="residue count">' + resCnt.toString() + ' Res</span>';
|
|
38350
38415
|
html3 += htmlTmp2 + htmlTmp3 + '<br>';
|
|
38351
38416
|
let htmlTmp = '<span class="icn3d-seqLine">';
|
|
@@ -38385,12 +38450,12 @@ class AnnoDomain {
|
|
|
38385
38450
|
if(ic.seqStartLen && ic.seqStartLen[chnid]) html2 += ic.showSeqCls.insertMulGapOverview(chnid, ic.seqStartLen[chnid]);
|
|
38386
38451
|
|
|
38387
38452
|
if(me.cfg.blast_rep_id != chnid) { // regular
|
|
38388
|
-
for(let i = 0, il =
|
|
38453
|
+
for(let i = 0, il = posFromArray.length; i < il; ++i) {
|
|
38389
38454
|
// 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);
|
|
38390
|
-
let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(
|
|
38455
|
+
let emptyWidth =(i == 0) ? Math.round(ic.seqAnnWidth *(posFromArray[i]) / ic.maxAnnoLength) : Math.round(ic.seqAnnWidth *(posFromArray[i] - posToArray[i-1] - 1) / ic.maxAnnoLength);
|
|
38391
38456
|
|
|
38392
38457
|
html2 += '<div style="display:inline-block; width:' + emptyWidth + 'px;"> </div>';
|
|
38393
|
-
html2 += '<div style="display:inline-block; color:white!important; font-weight:bold; background-color:#' + color + '; width:' + Math.round(ic.seqAnnWidth *(
|
|
38458
|
+
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>';
|
|
38394
38459
|
}
|
|
38395
38460
|
}
|
|
38396
38461
|
else { // with potential gaps
|
|
@@ -39924,7 +39989,7 @@ class Domain3d {
|
|
|
39924
39989
|
if(!ic.posid2resid) ic.posid2resid = {};
|
|
39925
39990
|
|
|
39926
39991
|
let substructItem = {};
|
|
39927
|
-
let pos2resi = {};
|
|
39992
|
+
let pos2resi = {}; // 0-based
|
|
39928
39993
|
for(let i = 0; i < residueArray.length; ++i) {
|
|
39929
39994
|
let resid = residueArray[i];
|
|
39930
39995
|
|
|
@@ -39956,7 +40021,8 @@ class Domain3d {
|
|
|
39956
40021
|
|
|
39957
40022
|
//resiArray.push(resi);
|
|
39958
40023
|
resiArray.push(i+1);
|
|
39959
|
-
pos2resi[i+1] = resi;
|
|
40024
|
+
// pos2resi[i+1] = resi;
|
|
40025
|
+
pos2resi[i] = resi;
|
|
39960
40026
|
|
|
39961
40027
|
ic.posid2resid[atom.structure + '_' + atom.chain + '_' + (i+1).toString()] = resid;
|
|
39962
40028
|
// let residNCBI = ic.resid2ncbi[resid];
|
|
@@ -40478,8 +40544,8 @@ class Domain3d {
|
|
|
40478
40544
|
//ss: sstype ss_start ss_end x1 y1 z1 x2 y2 z2
|
|
40479
40545
|
//sstype: 1 (helix), 2 (sheet)
|
|
40480
40546
|
let sstype = (substruct[k].Sheet) ? 2 : 1;
|
|
40481
|
-
let from = pos2resi[substruct[k].From];
|
|
40482
|
-
let to = pos2resi[substruct[k].To];
|
|
40547
|
+
let from = pos2resi[substruct[k].From - 1]; // 1-based to 0-based
|
|
40548
|
+
let to = pos2resi[substruct[k].To - 1];
|
|
40483
40549
|
|
|
40484
40550
|
// 1-based residue numbers
|
|
40485
40551
|
let fromPos = substruct[k].From;
|
|
@@ -62428,6 +62494,27 @@ class LoadScript {
|
|
|
62428
62494
|
return nameArray;
|
|
62429
62495
|
}
|
|
62430
62496
|
|
|
62497
|
+
updateTransformation(steps) { let ic = this.icn3d; ic.icn3dui;
|
|
62498
|
+
let commandTransformation = (ic.commands[steps-1]) ? ic.commands[steps-1].split('|||') : [];
|
|
62499
|
+
|
|
62500
|
+
if(commandTransformation.length == 2) {
|
|
62501
|
+
let transformation = JSON.parse(commandTransformation[1]);
|
|
62502
|
+
|
|
62503
|
+
ic._zoomFactor = transformation.factor;
|
|
62504
|
+
|
|
62505
|
+
ic.mouseChange.x = transformation.mouseChange.x;
|
|
62506
|
+
ic.mouseChange.y = transformation.mouseChange.y;
|
|
62507
|
+
|
|
62508
|
+
ic.quaternion._x = transformation.quaternion._x;
|
|
62509
|
+
ic.quaternion._y = transformation.quaternion._y;
|
|
62510
|
+
ic.quaternion._z = transformation.quaternion._z;
|
|
62511
|
+
ic.quaternion._w = transformation.quaternion._w;
|
|
62512
|
+
}
|
|
62513
|
+
|
|
62514
|
+
// ic.bRender = true;
|
|
62515
|
+
ic.drawCls.draw();
|
|
62516
|
+
}
|
|
62517
|
+
|
|
62431
62518
|
async execCommandsBase(start, end, steps, bFinalStep) { let ic = this.icn3d, me = ic.icn3dui;
|
|
62432
62519
|
let thisClass = this;
|
|
62433
62520
|
let i;
|
|
@@ -62607,7 +62694,10 @@ class LoadScript {
|
|
|
62607
62694
|
await thisClass.applyCommandGraphinteraction(command);
|
|
62608
62695
|
}
|
|
62609
62696
|
else if(command.indexOf('cartoon 2d domain') == 0) {
|
|
62697
|
+
ic.bRender = true;
|
|
62698
|
+
thisClass.updateTransformation(steps);
|
|
62610
62699
|
await thisClass.applyCommandCartoon2d(command);
|
|
62700
|
+
ic.bRender = false;
|
|
62611
62701
|
}
|
|
62612
62702
|
else if(command.indexOf('set half pae map') == 0) {
|
|
62613
62703
|
await thisClass.applyCommandAfmap(command);
|
|
@@ -62622,7 +62712,10 @@ class LoadScript {
|
|
|
62622
62712
|
let pos = command.lastIndexOf(' ');
|
|
62623
62713
|
let type = command.substr(pos + 1);
|
|
62624
62714
|
|
|
62715
|
+
ic.bRender = true;
|
|
62716
|
+
thisClass.updateTransformation(steps);
|
|
62625
62717
|
await ic.cartoon2dCls.draw2Dcartoon(type);
|
|
62718
|
+
ic.bRender = false;
|
|
62626
62719
|
}
|
|
62627
62720
|
else if(command.indexOf('add msa track') == 0) {
|
|
62628
62721
|
//add msa track | chainid " + chainid + " | startpos " + startpos + " | type " + type + " | fastaList " + fastaList
|
|
@@ -62660,7 +62753,7 @@ class LoadScript {
|
|
|
62660
62753
|
await ic.applyCommandCls.applyCommand(ic.commands[i]);
|
|
62661
62754
|
}
|
|
62662
62755
|
}
|
|
62663
|
-
|
|
62756
|
+
|
|
62664
62757
|
//if(i === steps - 1) {
|
|
62665
62758
|
if(i === steps || bFinalStep) {
|
|
62666
62759
|
this.renderFinalStep(i);
|
|
@@ -67290,19 +67383,25 @@ class Dssp {
|
|
|
67290
67383
|
}
|
|
67291
67384
|
|
|
67292
67385
|
// 2b. remove strands with less than 3 residues except G strand
|
|
67386
|
+
let removeDomainidHash = {};
|
|
67293
67387
|
for(let il = strandArray.length, i = il - 1; i >= 0; --i) {
|
|
67294
|
-
let strandTmp = strandArray[i].strand.substr(0, 1);
|
|
67388
|
+
// let strandTmp = strandArray[i].strand.substr(0, 1);
|
|
67389
|
+
let strandTmp = strandArray[i].strand;
|
|
67295
67390
|
if(strandTmp != 'G' && strandArray[i].endRefnum - strandArray[i].startRefnum + 1 < 3) { // remove the strand
|
|
67296
|
-
if(strandTmp == 'B' || strandTmp == 'C' || strandTmp == 'E' || strandTmp == 'F') {
|
|
67297
|
-
if(!me.bNode) console.log("Some of the Ig strands B, C, E, F are removed since they are too short...");
|
|
67298
|
-
return false;
|
|
67299
|
-
}
|
|
67300
|
-
|
|
67301
67391
|
if(i != il - 1) { // modify
|
|
67302
67392
|
strandArray[i + 1].loopResCnt += strandArray[i].loopResCnt + parseInt(strandArray[i].endResi) - parseInt(strandArray[i].startResi) + 1;
|
|
67303
67393
|
}
|
|
67304
67394
|
|
|
67305
67395
|
strandArray.splice(i, 1);
|
|
67396
|
+
|
|
67397
|
+
if(strandTmp == 'B' || strandTmp == 'C' || strandTmp == 'E' || strandTmp == 'F') {
|
|
67398
|
+
if(!me.bNode) console.log("Ig strand " + strandTmp + " is removed since it is too short...");
|
|
67399
|
+
|
|
67400
|
+
let resid = chnid + '_' + strandArray[i].startResi;
|
|
67401
|
+
let domainid = ic.resid2domainid[resid];
|
|
67402
|
+
removeDomainidHash[domainid] = 1;
|
|
67403
|
+
continue;
|
|
67404
|
+
}
|
|
67306
67405
|
}
|
|
67307
67406
|
}
|
|
67308
67407
|
|
|
@@ -67492,6 +67591,14 @@ class Dssp {
|
|
|
67492
67591
|
prevStrand = currStrand;
|
|
67493
67592
|
prevStrandCnt = strandCnt - 1;
|
|
67494
67593
|
|
|
67594
|
+
// remove domians without B,C,E,F strands
|
|
67595
|
+
if(removeDomainidHash.hasOwnProperty(domainid)) {
|
|
67596
|
+
delete ic.resid2refnum[residueid];
|
|
67597
|
+
delete ic.resid2domainid[residueid];
|
|
67598
|
+
|
|
67599
|
+
continue;
|
|
67600
|
+
}
|
|
67601
|
+
|
|
67495
67602
|
// assign the adjusted reference numbers
|
|
67496
67603
|
ic.resid2refnum[residueid] = refnumLabel;
|
|
67497
67604
|
ic.resid2domainid[residueid] = domainid;
|
|
@@ -70273,7 +70380,7 @@ class Cartoon2d {
|
|
|
70273
70380
|
idStr = idStr.substr(0, idStr.indexOf('-'));
|
|
70274
70381
|
}
|
|
70275
70382
|
else {
|
|
70276
|
-
idStr = idStr.substr(idStr.lastIndexOf('_') + 1);
|
|
70383
|
+
idStr = idStr; //idStr.substr(idStr.lastIndexOf('_') + 1);
|
|
70277
70384
|
}
|
|
70278
70385
|
|
|
70279
70386
|
return idStr;
|
|
@@ -70970,14 +71077,14 @@ class ResizeCanvas {
|
|
|
70970
71077
|
!document.webkitFullscreenElement && !document.msFullscreenElement) {
|
|
70971
71078
|
if(elem.requestFullscreen) {
|
|
70972
71079
|
elem.requestFullscreen();
|
|
70973
|
-
} else if(elem.mozRequestFullScreen) {
|
|
71080
|
+
} else if(elem.mozRequestFullScreen) { // Firefox
|
|
70974
71081
|
elem.mozRequestFullScreen();
|
|
70975
|
-
} else if(elem.webkitRequestFullscreen) {
|
|
71082
|
+
} else if(elem.webkitRequestFullscreen) { // Chrome, Safari and Opera
|
|
70976
71083
|
elem.webkitRequestFullscreen();
|
|
70977
|
-
} else if(elem.msRequestFullscreen) {
|
|
71084
|
+
} else if(elem.msRequestFullscreen) { // IE/Edge
|
|
70978
71085
|
elem.msRequestFullscreen();
|
|
70979
71086
|
}
|
|
70980
|
-
}
|
|
71087
|
+
}
|
|
70981
71088
|
}
|
|
70982
71089
|
|
|
70983
71090
|
//Rotate the structure in one of the directions: "left", "right", "up", and "down".
|
|
@@ -75668,7 +75775,7 @@ class iCn3DUI {
|
|
|
75668
75775
|
//even when multiple iCn3D viewers are shown together.
|
|
75669
75776
|
this.pre = this.cfg.divid + "_";
|
|
75670
75777
|
|
|
75671
|
-
this.REVISION = '3.30.
|
|
75778
|
+
this.REVISION = '3.30.1';
|
|
75672
75779
|
|
|
75673
75780
|
// In nodejs, iCn3D defines "window = {navigator: {}}"
|
|
75674
75781
|
this.bNode = (Object.keys(window).length < 2) ? true : false;
|