icn3d 3.19.1 → 3.19.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 +321 -108
- package/icn3d.min.js +2 -2
- package/icn3d.module.js +321 -108
- package/package.json +1 -1
package/icn3d.js
CHANGED
|
@@ -4085,6 +4085,57 @@ class ParasCls {
|
|
|
4085
4085
|
'GLN': this.thr().setHSL(1/3.0, 1, 0.5 + 0.5 * (0.58 + 1.85)/2.5)
|
|
4086
4086
|
};
|
|
4087
4087
|
|
|
4088
|
+
this.hydrophobicValues = {
|
|
4089
|
+
// charged residues
|
|
4090
|
+
' G': 3, ' A': 3, ' T': 3,
|
|
4091
|
+
' C': 3, ' U': 3, ' DG': 3,
|
|
4092
|
+
' DA': 3, ' DT': 3, ' DC': 3,
|
|
4093
|
+
' DU': 3, 'G': 3, 'A': 3,
|
|
4094
|
+
'T': 3, 'C': 3, 'U': 3,
|
|
4095
|
+
'DG': 3, 'DA': 3, 'DT': 3,
|
|
4096
|
+
'DC': 3, 'DU': 3, 'ARG': 1,
|
|
4097
|
+
'LYS': 1, 'ASP': 3, 'GLU': 3,
|
|
4098
|
+
'HIS': 2,
|
|
4099
|
+
|
|
4100
|
+
// + 0.81)/(1.14 + 0.81)),
|
|
4101
|
+
// hydrophobic
|
|
4102
|
+
// https://en.m.wikipedia.org/wiki/Hydrophobicity_scales#Wimley%E2%80%93White_whole_residue_hydrophobicity_scales
|
|
4103
|
+
// 0.65 ~ -1.85: white ~ green
|
|
4104
|
+
'TRP': -1.85,
|
|
4105
|
+
'PHE': -1.13,
|
|
4106
|
+
'TYR': -0.94,
|
|
4107
|
+
'LEU': -0.56,
|
|
4108
|
+
'ILE': -0.31,
|
|
4109
|
+
'CYS': -0.24,
|
|
4110
|
+
'MET': -0.23,
|
|
4111
|
+
|
|
4112
|
+
// polar
|
|
4113
|
+
'GLY': 0.01,
|
|
4114
|
+
'VAL': 0.07,
|
|
4115
|
+
'SER': 0.13,
|
|
4116
|
+
'THR': 0.14,
|
|
4117
|
+
'ALA': 0.17,
|
|
4118
|
+
'ASN': 0.42,
|
|
4119
|
+
'PRO': 0.45,
|
|
4120
|
+
'GLN': 0.58
|
|
4121
|
+
};
|
|
4122
|
+
|
|
4123
|
+
this.residueAbbrev = {
|
|
4124
|
+
ALA: "A (Ala)", ARG: "R (Arg)", ASN: "N (Asn)",
|
|
4125
|
+
ASP: "D (Asp)", CYS: "C (Cys)", GLN: "Q (Gln)",
|
|
4126
|
+
GLU: "E (Glu)", GLY: "G (Gly)", HIS: "H (His)",
|
|
4127
|
+
ILE: "I (Ile)", LEU: "L (Leu)", LYS: "K (Lys)",
|
|
4128
|
+
MET: "M (Met)", PHE: "F (Phe)", PRO: "P (Pro)",
|
|
4129
|
+
SER: "S (Ser)", THR: "T (Thr)", TRP: "W (Trp)",
|
|
4130
|
+
TYR: "Y (Tyr)", VAL: "V (Val)",
|
|
4131
|
+
//ASX: "B (Asx)", GLX: "Z (Glx)",
|
|
4132
|
+
ASX: "X (Asx)", GLX: "X (Glx)",
|
|
4133
|
+
'G': "Guanine", 'A': "Adenine",
|
|
4134
|
+
'T': "Thymine", 'C': "Cytosine", 'U': "Uracil",
|
|
4135
|
+
'DG': "deoxy-Guanine", 'DA': "deoxy-Adenine", 'DT': "deoxy-Thymine",
|
|
4136
|
+
'DC': "deoxy-Cytosine", 'DU': 'deoxy-Uracil'
|
|
4137
|
+
};
|
|
4138
|
+
|
|
4088
4139
|
this.ssColors = {
|
|
4089
4140
|
helix: this.thr(0xFF0000),
|
|
4090
4141
|
sheet: this.thr(0x008000),
|
|
@@ -6031,7 +6082,8 @@ class FirstAtomObj {
|
|
|
6031
6082
|
for(let i in atomsHash) {
|
|
6032
6083
|
if((ic.atoms[i].name == 'CA' && ic.proteins.hasOwnProperty(i)) || !ic.proteins.hasOwnProperty(i)) {
|
|
6033
6084
|
let residueid = ic.atoms[i].structure + '_' + ic.atoms[i].chain + '_' + ic.atoms[i].resi;
|
|
6034
|
-
residuesHash[residueid] = 1;
|
|
6085
|
+
//residuesHash[residueid] = 1;
|
|
6086
|
+
residuesHash[residueid] = ic.atoms[i].resn;
|
|
6035
6087
|
}
|
|
6036
6088
|
}
|
|
6037
6089
|
|
|
@@ -8398,11 +8450,11 @@ class Cylinder {
|
|
|
8398
8450
|
if (atom.ss === 'sheet') beta[atom.serial] = atom;
|
|
8399
8451
|
if (atom.name !== 'CA') continue;
|
|
8400
8452
|
if (atom.ss === 'helix' && atom.ssend) {
|
|
8401
|
-
if (start !== null && currentChain === atom.chain && currentResi < atom.resi) {
|
|
8453
|
+
if (start !== null && currentChain === atom.chain && parseInt(currentResi) < parseInt(atom.resi)) {
|
|
8402
8454
|
if(bHighlight === 1 || bHighlight === 2) {
|
|
8403
8455
|
this.createCylinder(start.coord, atom.coord, radius, ic.hColor, bHighlight);
|
|
8404
8456
|
}
|
|
8405
|
-
else {
|
|
8457
|
+
else {
|
|
8406
8458
|
this.createCylinder(start.coord, atom.coord, radius, atom.color);
|
|
8407
8459
|
}
|
|
8408
8460
|
}
|
|
@@ -11938,7 +11990,8 @@ class ShareLink {
|
|
|
11938
11990
|
if(ic.bAfMem) {
|
|
11939
11991
|
paraHash['afmem'] = 'on';
|
|
11940
11992
|
}
|
|
11941
|
-
else {
|
|
11993
|
+
//else {
|
|
11994
|
+
else if(me.cfg.afid || (Object.keys(ic.structures).length == 1 && Object.keys(ic.structures)[0].length > 5) ) {
|
|
11942
11995
|
paraHash['afmem'] = 'off';
|
|
11943
11996
|
}
|
|
11944
11997
|
|
|
@@ -12028,16 +12081,16 @@ class ShareLink {
|
|
|
12028
12081
|
else if(prevCommandStr.indexOf(toggleStr) !== -1) {
|
|
12029
12082
|
++cntToggle;
|
|
12030
12083
|
}
|
|
12031
|
-
|
|
12032
|
-
|
|
12033
|
-
|
|
12034
|
-
|
|
12035
|
-
|
|
12036
|
-
|
|
12037
|
-
|
|
12084
|
+
else if(i === start + 1) {
|
|
12085
|
+
//tmpUrl += prevCommandStr;
|
|
12086
|
+
|
|
12087
|
+
//if(!(inparaWithoutCommand !== undefined && ic.inputid)) {
|
|
12088
|
+
if(prevCommandStr.substr(0, 4) !== 'load') {
|
|
12089
|
+
tmpUrl += prevCommandStr;
|
|
12090
|
+
}
|
|
12038
12091
|
|
|
12039
|
-
|
|
12040
|
-
|
|
12092
|
+
//statefile += prevCommandStr + "\n";
|
|
12093
|
+
}
|
|
12041
12094
|
else {
|
|
12042
12095
|
tmpUrl += (tmpUrl) ? '; ' + prevCommandStr : prevCommandStr;
|
|
12043
12096
|
//statefile += prevCommandStr + "\n";
|
|
@@ -16545,6 +16598,14 @@ class ViewInterPairs {
|
|
|
16545
16598
|
bHbond, bSaltbridge, bInteraction, bHalogen, bPication, bPistacking, contactDist) { let ic = this.icn3d, me = ic.icn3dui;
|
|
16546
16599
|
let bondCnt;
|
|
16547
16600
|
|
|
16601
|
+
// reset
|
|
16602
|
+
ic.hbondpnts = [];
|
|
16603
|
+
ic.saltbridgepnts = [];
|
|
16604
|
+
ic.contactpnts = [];
|
|
16605
|
+
ic.halogenpnts = [];
|
|
16606
|
+
ic.picationpnts = [];
|
|
16607
|
+
ic.pistackingpnts = [];
|
|
16608
|
+
|
|
16548
16609
|
// type: view, save, forcegraph
|
|
16549
16610
|
ic.bRender = false;
|
|
16550
16611
|
let hAtoms = {};
|
|
@@ -17029,7 +17090,7 @@ class ViewInterPairs {
|
|
|
17029
17090
|
html += '<br><table class="icn3d-sticky" align=center border=1 cellpadding=10 cellspacing=0><thead>';
|
|
17030
17091
|
html += '<tr><th rowspan=2>Residue</th><th rowspan=2># Hydrogen<br>Bond</th><th rowspan=2># Salt Bridge<br>/Ionic Interaction</th><th rowspan=2># Contact</th>';
|
|
17031
17092
|
html += '<th rowspan=2># Halogen<br>Bond</th><th rowspan=2># π-Cation</th><th rowspan=2># π-Stacking</th>';
|
|
17032
|
-
html += '<th>Hydrogen Bond</th><th>Salt Bridge/Ionic Interaction</th><th>Contact</th>';
|
|
17093
|
+
html += '<th>Hydrogen Bond (backbone atoms: @CA, @N, @C, @O)</th><th>Salt Bridge/Ionic Interaction</th><th>Contact</th>';
|
|
17033
17094
|
html += '<th>Halogen Bond</th><th>π-Cation</th><th>π-Stacking</th></tr>';
|
|
17034
17095
|
html += '<tr>';
|
|
17035
17096
|
let tmpStr = '<td><table width="100%" class="icn3d-border"><tr><td>Atom1</td><td>Atom2</td><td>Distance(Å)</td><td>Highlight in 3D</td></tr></table></td>';
|
|
@@ -17198,7 +17259,7 @@ class ViewInterPairs {
|
|
|
17198
17259
|
}
|
|
17199
17260
|
}
|
|
17200
17261
|
let text = '<div style="text-align:center"><br><b>' + cnt
|
|
17201
|
-
+ ' hydrogen bond pairs</b
|
|
17262
|
+
+ ' hydrogen bond pairs</b> (backbone atoms: @CA, @N, @C, @O):</div><br>';
|
|
17202
17263
|
if(cnt > 0) {
|
|
17203
17264
|
text += '<br><table align=center border=1 cellpadding=10 cellspacing=0>'
|
|
17204
17265
|
+ '<tr><th>Atom 1</th><th>Atom 2</th><th>Distance(Å)</th>';
|
|
@@ -22720,8 +22781,10 @@ class Dssp {
|
|
|
22720
22781
|
|
|
22721
22782
|
let ajaxArray = [];
|
|
22722
22783
|
|
|
22723
|
-
|
|
22724
|
-
|
|
22784
|
+
let url = (window && window.location && window.location.hostname.indexOf('ncbi.nlm.nih.gov') != -1) ? "/Structure/mmcifparser/mmcifparser.cgi" :
|
|
22785
|
+
me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi";
|
|
22786
|
+
//let url = "https://www.ncbi.nlm.nih.gov/Structure/mmcifparser/mmcifparser.cgi";
|
|
22787
|
+
|
|
22725
22788
|
for(let i = 0, il = struArray.length; i < il; ++i) {
|
|
22726
22789
|
let pdbStr = '';
|
|
22727
22790
|
/// pdbStr += ic.saveFileCls.getPDBHeader(i);
|
|
@@ -24609,6 +24672,7 @@ class RealignParser {
|
|
|
24609
24672
|
let lastStruResi = '';
|
|
24610
24673
|
for(let serial in ic.hAtoms) {
|
|
24611
24674
|
let atom = ic.atoms[serial];
|
|
24675
|
+
let chainid = atom.structure + '_' + atom.chain;
|
|
24612
24676
|
if((ic.proteins.hasOwnProperty(serial) && atom.name == "CA")
|
|
24613
24677
|
||(ic.nucleotides.hasOwnProperty(serial) &&(atom.name == "O3'" || atom.name == "O3*")) ) {
|
|
24614
24678
|
if(atom.structure + '_' + atom.resi == lastStruResi) continue; // e.g., Alt A and B
|
|
@@ -24618,11 +24682,11 @@ class RealignParser {
|
|
|
24618
24682
|
}
|
|
24619
24683
|
structHash[atom.structure].push(atom.coord.clone());
|
|
24620
24684
|
|
|
24621
|
-
if(!ic.realignResid.hasOwnProperty(
|
|
24622
|
-
ic.realignResid[
|
|
24685
|
+
if(!ic.realignResid.hasOwnProperty(chainid)) {
|
|
24686
|
+
ic.realignResid[chainid] = [];
|
|
24623
24687
|
}
|
|
24624
24688
|
|
|
24625
|
-
ic.realignResid[
|
|
24689
|
+
ic.realignResid[chainid].push({'resid': chainid + '_' + atom.resi, 'resn': me.utilsCls.residueName2Abbr(atom.resn.substr(0, 3)).substr(0, 1)});
|
|
24626
24690
|
|
|
24627
24691
|
struct2chain[atom.structure] = atom.structure + '_' + atom.chain;
|
|
24628
24692
|
|
|
@@ -24698,12 +24762,12 @@ class RealignParser {
|
|
|
24698
24762
|
let residArray1 = struct2resid[chainpair][toStruct];
|
|
24699
24763
|
let residArray2 = struct2resid[chainpair][fromStruct];
|
|
24700
24764
|
|
|
24701
|
-
ic.realignResid[
|
|
24702
|
-
ic.realignResid[
|
|
24765
|
+
ic.realignResid[chainTo] = [];
|
|
24766
|
+
ic.realignResid[chainFrom] = [];
|
|
24703
24767
|
|
|
24704
24768
|
for(let i = 0, il = seq1.length; i < il; ++i) {
|
|
24705
|
-
ic.realignResid[
|
|
24706
|
-
ic.realignResid[
|
|
24769
|
+
ic.realignResid[chainTo].push({'resid':residArray1[i], 'resn':seq1[i]});
|
|
24770
|
+
ic.realignResid[chainFrom].push({'resid':residArray2[i], 'resn':seq2[i]});
|
|
24707
24771
|
}
|
|
24708
24772
|
|
|
24709
24773
|
let bChainAlign = true;
|
|
@@ -24748,6 +24812,7 @@ class RealignParser {
|
|
|
24748
24812
|
let toStruct = chainidArray[0].substr(0, chainidArray[0].indexOf('_')); //.toUpperCase();
|
|
24749
24813
|
if(!bRealign) toStruct = toStruct.toUpperCase();
|
|
24750
24814
|
|
|
24815
|
+
|
|
24751
24816
|
let hAtoms = {};
|
|
24752
24817
|
|
|
24753
24818
|
ic.realignResid = {};
|
|
@@ -24772,7 +24837,7 @@ class RealignParser {
|
|
|
24772
24837
|
|
|
24773
24838
|
chainidArray[0] = chainTo;
|
|
24774
24839
|
chainidArray[index + 1] = chainFrom;
|
|
24775
|
-
|
|
24840
|
+
/*
|
|
24776
24841
|
let seq1 = struct2SeqHash[toStruct];
|
|
24777
24842
|
let seq2 = struct2SeqHash[fromStruct];
|
|
24778
24843
|
|
|
@@ -24781,6 +24846,15 @@ class RealignParser {
|
|
|
24781
24846
|
|
|
24782
24847
|
let residArray1 = struct2resid[toStruct];
|
|
24783
24848
|
let residArray2 = struct2resid[fromStruct];
|
|
24849
|
+
*/
|
|
24850
|
+
let seq1 = struct2SeqHash[chainTo];
|
|
24851
|
+
let seq2 = struct2SeqHash[chainFrom];
|
|
24852
|
+
|
|
24853
|
+
let coord1 = struct2CoorHash[chainTo];
|
|
24854
|
+
let coord2 = struct2CoorHash[chainFrom];
|
|
24855
|
+
|
|
24856
|
+
let residArray1 = struct2resid[chainTo];
|
|
24857
|
+
let residArray2 = struct2resid[chainFrom];
|
|
24784
24858
|
|
|
24785
24859
|
let query, target;
|
|
24786
24860
|
|
|
@@ -24799,8 +24873,8 @@ class RealignParser {
|
|
|
24799
24873
|
|
|
24800
24874
|
let seqto = '', seqfrom = '';
|
|
24801
24875
|
|
|
24802
|
-
ic.realignResid[
|
|
24803
|
-
ic.realignResid[
|
|
24876
|
+
ic.realignResid[chainTo] = [];
|
|
24877
|
+
ic.realignResid[chainFrom] = [];
|
|
24804
24878
|
|
|
24805
24879
|
let segArray = target.segs;
|
|
24806
24880
|
for(let i = 0, il = segArray.length; i < il; ++i) {
|
|
@@ -24820,8 +24894,8 @@ class RealignParser {
|
|
|
24820
24894
|
|
|
24821
24895
|
// one chaincould be longer than the other
|
|
24822
24896
|
if(j == 0 ||(prevChain1 == chainid1 && prevChain2 == chainid2) ||(prevChain1 != chainid1 && prevChain2 != chainid2)) {
|
|
24823
|
-
ic.realignResid[
|
|
24824
|
-
ic.realignResid[
|
|
24897
|
+
ic.realignResid[chainTo].push({'resid':residArray1[j + seg.orifrom], 'resn':seq1[j + seg.orifrom]});
|
|
24898
|
+
ic.realignResid[chainFrom].push({'resid':residArray2[j + seg.from], 'resn':seq2[j + seg.from]});
|
|
24825
24899
|
}
|
|
24826
24900
|
|
|
24827
24901
|
prevChain1 = chainid1;
|
|
@@ -24833,6 +24907,8 @@ class RealignParser {
|
|
|
24833
24907
|
//let chainFrom = chainidArray[index + 1];
|
|
24834
24908
|
|
|
24835
24909
|
let bChainAlign = true;
|
|
24910
|
+
|
|
24911
|
+
|
|
24836
24912
|
let result = ic.ParserUtilsCls.alignCoords(coordsFrom, coordsTo, fromStruct, undefined, chainTo, chainFrom, index + 1, bChainAlign);
|
|
24837
24913
|
hAtoms = me.hashUtilsCls.unionHash(hAtoms, result.hAtoms);
|
|
24838
24914
|
|
|
@@ -25070,12 +25146,18 @@ class RealignParser {
|
|
|
25070
25146
|
//return;
|
|
25071
25147
|
continue;
|
|
25072
25148
|
}
|
|
25073
|
-
|
|
25149
|
+
/*
|
|
25074
25150
|
if(!struct2SeqHash.hasOwnProperty(mmdbid) && !bPredefined) {
|
|
25075
25151
|
struct2SeqHash[mmdbid] = '';
|
|
25076
25152
|
struct2CoorHash[mmdbid] = [];
|
|
25077
25153
|
struct2resid[mmdbid] = [];
|
|
25078
25154
|
}
|
|
25155
|
+
*/
|
|
25156
|
+
if(!struct2SeqHash.hasOwnProperty(chainid) && !bPredefined) {
|
|
25157
|
+
struct2SeqHash[chainid] = '';
|
|
25158
|
+
struct2CoorHash[chainid] = [];
|
|
25159
|
+
struct2resid[chainid] = [];
|
|
25160
|
+
}
|
|
25079
25161
|
|
|
25080
25162
|
if(bPredefined) {
|
|
25081
25163
|
base = parseInt(ic.chainsSeq[chainid][0].resi);
|
|
@@ -25134,6 +25216,7 @@ class RealignParser {
|
|
|
25134
25216
|
}
|
|
25135
25217
|
}
|
|
25136
25218
|
else {
|
|
25219
|
+
/*
|
|
25137
25220
|
if(i == 0) { // master
|
|
25138
25221
|
base = parseInt(ic.chainsSeq[chainid][0].resi);
|
|
25139
25222
|
|
|
@@ -25208,6 +25291,78 @@ class RealignParser {
|
|
|
25208
25291
|
|
|
25209
25292
|
ajaxArray.push(queryAjax);
|
|
25210
25293
|
}
|
|
25294
|
+
*/
|
|
25295
|
+
if(i == 0) { // master
|
|
25296
|
+
base = parseInt(ic.chainsSeq[chainid][0].resi);
|
|
25297
|
+
|
|
25298
|
+
resiArray = [];
|
|
25299
|
+
if(bRealign) {
|
|
25300
|
+
//resiArray = [resRange];
|
|
25301
|
+
let residHash = ic.firstAtomObjCls.getResiduesFromAtoms(ic.hAtoms);
|
|
25302
|
+
for(var resid in residHash) {
|
|
25303
|
+
let resi = resid.substr(resid.lastIndexOf('_') + 1);
|
|
25304
|
+
|
|
25305
|
+
let chainidTmp = resid.substr(0, resid.lastIndexOf('_'));
|
|
25306
|
+
if(chainidTmp == chainid) resiArray.push(resi);
|
|
25307
|
+
}
|
|
25308
|
+
}
|
|
25309
|
+
else if(me.cfg.resnum) {
|
|
25310
|
+
resiArray = me.cfg.resnum.split(",");
|
|
25311
|
+
}
|
|
25312
|
+
|
|
25313
|
+
//if(!bPredefined) {
|
|
25314
|
+
result = thisClass.getSeqCoorResid(resiArray, chainid, base);
|
|
25315
|
+
struct2SeqHash[chainid] += result.seq;
|
|
25316
|
+
struct2CoorHash[chainid] = struct2CoorHash[chainid].concat(result.coor);
|
|
25317
|
+
struct2resid[chainid] = struct2resid[chainid].concat(result.resid);
|
|
25318
|
+
//}
|
|
25319
|
+
}
|
|
25320
|
+
else {
|
|
25321
|
+
// if selected both chains
|
|
25322
|
+
let bSelectedBoth = false;
|
|
25323
|
+
if(bRealign) {
|
|
25324
|
+
//resiArray = [resRange];
|
|
25325
|
+
let residHash = ic.firstAtomObjCls.getResiduesFromAtoms(ic.hAtoms);
|
|
25326
|
+
for(var resid in residHash) {
|
|
25327
|
+
//let resi = resid.substr(resid.lastIndexOf('_') + 1);
|
|
25328
|
+
let chainidTmp = resid.substr(0, resid.lastIndexOf('_'));
|
|
25329
|
+
if(chainidTmp == chainid) {
|
|
25330
|
+
bSelectedBoth = true;
|
|
25331
|
+
|
|
25332
|
+
let resn = ic.firstAtomObjCls.getFirstAtomObj(ic.residues[resid]).resn;
|
|
25333
|
+
struct2SeqHash[chainid] += me.utilsCls.residueName2Abbr(resn);
|
|
25334
|
+
|
|
25335
|
+
struct2CoorHash[chainid] = struct2CoorHash[chainid].concat(this.getResCoorArray(resid));
|
|
25336
|
+
|
|
25337
|
+
struct2resid[chainid].push(resid);
|
|
25338
|
+
}
|
|
25339
|
+
}
|
|
25340
|
+
}
|
|
25341
|
+
|
|
25342
|
+
if(!bSelectedBoth) {
|
|
25343
|
+
for(let j = 0, jl = ic.chainsSeq[chainid].length; j < jl; ++j) {
|
|
25344
|
+
struct2SeqHash[chainid] += ic.chainsSeq[chainid][j].name;
|
|
25345
|
+
let resid = chainid + '_' + ic.chainsSeq[chainid][j].resi;
|
|
25346
|
+
|
|
25347
|
+
struct2CoorHash[chainid] = struct2CoorHash[chainid].concat(this.getResCoorArray(resid));
|
|
25348
|
+
|
|
25349
|
+
struct2resid[chainid].push(resid);
|
|
25350
|
+
}
|
|
25351
|
+
}
|
|
25352
|
+
|
|
25353
|
+
let seq1 = struct2SeqHash[chainid_t];
|
|
25354
|
+
let seq2 = struct2SeqHash[chainid];
|
|
25355
|
+
|
|
25356
|
+
let queryAjax = $.ajax({
|
|
25357
|
+
url: url,
|
|
25358
|
+
type: 'POST',
|
|
25359
|
+
data : {'targets': seq1, 'queries': seq2},
|
|
25360
|
+
dataType: 'jsonp',
|
|
25361
|
+
cache: true
|
|
25362
|
+
});
|
|
25363
|
+
|
|
25364
|
+
ajaxArray.push(queryAjax);
|
|
25365
|
+
}
|
|
25211
25366
|
}
|
|
25212
25367
|
} // for
|
|
25213
25368
|
|
|
@@ -31334,7 +31489,7 @@ class AddTrack {
|
|
|
31334
31489
|
|
|
31335
31490
|
thisClass.showNewTrack(chainid, title, result.text, undefined, undefined, 'custom', undefined, undefined, result.fromArray, result.toArray);
|
|
31336
31491
|
|
|
31337
|
-
me.htmlCls.clickMenuCls.setLogCmd("add track | chainid " + chainid + " | title " + title + " | text " + text + " | type custom", true);
|
|
31492
|
+
me.htmlCls.clickMenuCls.setLogCmd("add track | chainid " + chainid + " | title " + title + " | text " + thisClass.simplifyText(text) + " | type custom", true);
|
|
31338
31493
|
});
|
|
31339
31494
|
|
|
31340
31495
|
// current selection
|
|
@@ -31783,6 +31938,9 @@ class AddTrack {
|
|
|
31783
31938
|
let out = ''; // 1-based text positions
|
|
31784
31939
|
let bFoundText = false;
|
|
31785
31940
|
|
|
31941
|
+
// replace 'undefined' to space
|
|
31942
|
+
text = text.replace(/undefined/g, ' ');
|
|
31943
|
+
|
|
31786
31944
|
let i, il, prevEmptyPos = -1;
|
|
31787
31945
|
for(i = 0, il = text.length; i < il; ++i) {
|
|
31788
31946
|
if(text[i] == '-' || text[i] == ' ') {
|
|
@@ -33810,19 +33968,19 @@ class ApplyCommand {
|
|
|
33810
33968
|
let para = p1Array[0];
|
|
33811
33969
|
let value = parseFloat(p1Array[1]);
|
|
33812
33970
|
|
|
33813
|
-
if(para == 'linerad') ic.lineRadius = value;
|
|
33814
|
-
if(para == 'coilrad') ic.coilWidth = value;
|
|
33815
|
-
if(para == 'stickrad') ic.cylinderRadius = value;
|
|
33816
|
-
if(para == 'crosslinkrad') ic.crosslinkRadius = value;
|
|
33817
|
-
if(para == 'tracerad') ic.traceRadius = value;
|
|
33818
|
-
if(para == 'ballscale') ic.dotSphereScale = value;
|
|
33819
|
-
|
|
33820
|
-
if(para == 'ribbonthick') ic.ribbonthickness = value;
|
|
33821
|
-
if(para == 'proteinwidth') ic.helixSheetWidth = value;
|
|
33822
|
-
if(para == 'nucleotidewidth') ic.nucleicAcidWidth = value;
|
|
33971
|
+
if(para == 'linerad' && !isNaN(value)) ic.lineRadius = value;
|
|
33972
|
+
if(para == 'coilrad' && !isNaN(value)) ic.coilWidth = value;
|
|
33973
|
+
if(para == 'stickrad' && !isNaN(value)) ic.cylinderRadius = value;
|
|
33974
|
+
if(para == 'crosslinkrad' && !isNaN(value)) ic.crosslinkRadius = value;
|
|
33975
|
+
if(para == 'tracerad' && !isNaN(value)) ic.traceRadius = value;
|
|
33976
|
+
if(para == 'ballscale' && !isNaN(value)) ic.dotSphereScale = value;
|
|
33823
33977
|
|
|
33824
|
-
ic.
|
|
33978
|
+
if(para == 'ribbonthick' && !isNaN(value)) ic.ribbonthickness = value;
|
|
33979
|
+
if(para == 'proteinwidth' && !isNaN(value)) ic.helixSheetWidth = value;
|
|
33980
|
+
if(para == 'nucleotidewidth' && !isNaN(value)) ic.nucleicAcidWidth = value;
|
|
33825
33981
|
}
|
|
33982
|
+
|
|
33983
|
+
ic.drawCls.draw();
|
|
33826
33984
|
}
|
|
33827
33985
|
else if(commandOri.indexOf('set light') == 0) {
|
|
33828
33986
|
let paraArray = command.split(' | ');
|
|
@@ -33836,9 +33994,9 @@ class ApplyCommand {
|
|
|
33836
33994
|
if(para == 'light1') ic.light1 = value;
|
|
33837
33995
|
if(para == 'light2') ic.light2 = value;
|
|
33838
33996
|
if(para == 'light3') ic.light3 = value;
|
|
33839
|
-
|
|
33840
|
-
ic.drawCls.draw();
|
|
33841
33997
|
}
|
|
33998
|
+
|
|
33999
|
+
ic.drawCls.draw();
|
|
33842
34000
|
}
|
|
33843
34001
|
else if(commandOri.indexOf('set shininess') == 0) {
|
|
33844
34002
|
let pos = command.lastIndexOf(' ');
|
|
@@ -34474,6 +34632,9 @@ class ApplyCommand {
|
|
|
34474
34632
|
|
|
34475
34633
|
ic.resid2specCls.selectProperty(property, from, to);
|
|
34476
34634
|
}
|
|
34635
|
+
else if(command.indexOf('select each residue') !== -1) {
|
|
34636
|
+
ic.selectionCls.saveEachResiInSel();
|
|
34637
|
+
}
|
|
34477
34638
|
else if(command.indexOf('select') == 0 && command.indexOf('name') !== -1) {
|
|
34478
34639
|
let paraArray = commandOri.split(' | '); // atom names might be case-sensitive
|
|
34479
34640
|
|
|
@@ -36503,7 +36664,7 @@ class SetSeqAlign {
|
|
|
36503
36664
|
if(ic.alnChainsSeq[chainid1]) {
|
|
36504
36665
|
for(let j = 0, jl = ic.alnChainsSeq[chainid1].length; j < jl; ++j) {
|
|
36505
36666
|
//add gap before the mapping region
|
|
36506
|
-
if(parseInt(ic.alnChainsSeq[chainid1][j].resi) == resi_t) {
|
|
36667
|
+
if(parseInt(ic.alnChainsSeq[chainid1][j].resi) == parseInt(resi_t)) {
|
|
36507
36668
|
pos_t = j;
|
|
36508
36669
|
break;
|
|
36509
36670
|
}
|
|
@@ -36686,7 +36847,7 @@ class SetSeqAlign {
|
|
|
36686
36847
|
result = this.getTemplatePosFromOriPos(chainid1, start1, end1, bRealign);
|
|
36687
36848
|
pos1 = result.pos1;
|
|
36688
36849
|
pos2 = result.pos2;
|
|
36689
|
-
|
|
36850
|
+
|
|
36690
36851
|
let k = 0;
|
|
36691
36852
|
for(let j = pos1; j <= pos2; ++j) {
|
|
36692
36853
|
// inherit the gaps from the template
|
|
@@ -36710,7 +36871,7 @@ class SetSeqAlign {
|
|
|
36710
36871
|
++k;
|
|
36711
36872
|
}
|
|
36712
36873
|
}
|
|
36713
|
-
|
|
36874
|
+
|
|
36714
36875
|
prevIndex1 = end1;
|
|
36715
36876
|
prevIndex2 = end2;
|
|
36716
36877
|
}
|
|
@@ -36730,13 +36891,13 @@ class SetSeqAlign {
|
|
|
36730
36891
|
//var chainid_t = ic.chainidArray[0];
|
|
36731
36892
|
|
|
36732
36893
|
// let structureArray = Object.keys(ic.structures);
|
|
36733
|
-
|
|
36734
|
-
|
|
36894
|
+
// let structure1 = chainid_t.substr(0, chainid_t.indexOf('_')); //structureArray[0];
|
|
36895
|
+
// let structure2 = chainid.substr(0, chainid.indexOf('_')); //structureArray[1];
|
|
36735
36896
|
|
|
36736
|
-
|
|
36897
|
+
// if(structure1 == structure2) structure2 += me.htmlCls.postfix;
|
|
36737
36898
|
|
|
36738
|
-
ic.conservedName1 =
|
|
36739
|
-
ic.conservedName2 =
|
|
36899
|
+
ic.conservedName1 = chainid_t + '_cons';
|
|
36900
|
+
ic.conservedName2 = chainid + '_cons';
|
|
36740
36901
|
|
|
36741
36902
|
ic.consHash1 = {};
|
|
36742
36903
|
ic.consHash2 = {};
|
|
@@ -36763,15 +36924,15 @@ class SetSeqAlign {
|
|
|
36763
36924
|
if(!ic.chainsMapping[chainid_t]) ic.chainsMapping[chainid_t] = {};
|
|
36764
36925
|
if(!ic.chainsMapping[chainid]) ic.chainsMapping[chainid] = {};
|
|
36765
36926
|
|
|
36766
|
-
for(let i = 0, il = ic.realignResid[
|
|
36767
|
-
let resObject1 = ic.realignResid[
|
|
36927
|
+
for(let i = 0, il = ic.realignResid[chainid_t].length; i < il; ++i) {
|
|
36928
|
+
let resObject1 = ic.realignResid[chainid_t][i];
|
|
36768
36929
|
let pos1 = resObject1.resid.lastIndexOf('_');
|
|
36769
36930
|
let chainid1 = resObject1.resid.substr(0, pos1);
|
|
36770
36931
|
let resi1 = resObject1.resid.substr(pos1 + 1);
|
|
36771
36932
|
resObject1.resi = resi1;
|
|
36772
36933
|
resObject1.aligned = true;
|
|
36773
36934
|
|
|
36774
|
-
let resObject2 = ic.realignResid[
|
|
36935
|
+
let resObject2 = ic.realignResid[chainid][i];
|
|
36775
36936
|
let pos2 = resObject2.resid.lastIndexOf('_');
|
|
36776
36937
|
let chainid2 = resObject2.resid.substr(0, pos2);
|
|
36777
36938
|
let resi2 = resObject2.resid.substr(pos2 + 1);
|
|
@@ -37029,8 +37190,8 @@ class ParserUtils {
|
|
|
37029
37190
|
}
|
|
37030
37191
|
|
|
37031
37192
|
getQtStartEndFromRealignResid(chainid_t, chainid_q) { let ic = this.icn3d; ic.icn3dui;
|
|
37032
|
-
|
|
37033
|
-
|
|
37193
|
+
chainid_t.substr(0, chainid_t.indexOf('_'));
|
|
37194
|
+
chainid_q.substr(0, chainid_q.indexOf('_'));
|
|
37034
37195
|
|
|
37035
37196
|
let qt_start_end = [];
|
|
37036
37197
|
|
|
@@ -37046,11 +37207,11 @@ class ParserUtils {
|
|
|
37046
37207
|
resi2pos_q[resi] = i + 1;
|
|
37047
37208
|
}
|
|
37048
37209
|
|
|
37049
|
-
for(let i = 0, il = ic.realignResid[
|
|
37050
|
-
let resid_t = ic.realignResid[
|
|
37210
|
+
for(let i = 0, il = ic.realignResid[chainid_t].length; i < il && i < ic.realignResid[chainid_q].length; ++i) {
|
|
37211
|
+
let resid_t = ic.realignResid[chainid_t][i].resid;
|
|
37051
37212
|
let pos_t = resid_t.lastIndexOf('_');
|
|
37052
37213
|
let resi_t = parseInt(resid_t.substr(pos_t + 1));
|
|
37053
|
-
let resid_q = ic.realignResid[
|
|
37214
|
+
let resid_q = ic.realignResid[chainid_q][i].resid;
|
|
37054
37215
|
let pos_q = resid_q.lastIndexOf('_');
|
|
37055
37216
|
let resi_q = parseInt(resid_q.substr(pos_q + 1));
|
|
37056
37217
|
|
|
@@ -37994,7 +38155,7 @@ class MmcifParser {
|
|
|
37994
38155
|
}
|
|
37995
38156
|
|
|
37996
38157
|
// not all listed residues are considered missing, e.g., PDB ID 4OR2, only the firts four residues are considered missing
|
|
37997
|
-
if(!isNaN(resi) &&(prevMissingChain == '' ||(chain != prevMissingChain) ||(chain == prevMissingChain && resi > maxMissingResi)) ) {
|
|
38158
|
+
if(!isNaN(resi) &&(prevMissingChain == '' ||(chain != prevMissingChain) ||(chain == prevMissingChain && parseInt(resi) > maxMissingResi)) ) {
|
|
37998
38159
|
ic.chainMissingResidueArray[chainNum].push(resObject);
|
|
37999
38160
|
|
|
38000
38161
|
maxMissingResi = resi;
|
|
@@ -43341,6 +43502,22 @@ class Selection {
|
|
|
43341
43502
|
}
|
|
43342
43503
|
}
|
|
43343
43504
|
|
|
43505
|
+
saveEachResiInSel() { let ic = this.icn3d; ic.icn3dui;
|
|
43506
|
+
ic.selectionCls.saveSelectionPrep();
|
|
43507
|
+
|
|
43508
|
+
ic.selectedResidues = {};
|
|
43509
|
+
|
|
43510
|
+
ic.selectedResidues = ic.firstAtomObjCls.getResiduesFromCalphaAtoms(ic.hAtoms);
|
|
43511
|
+
|
|
43512
|
+
for(let resid in ic.selectedResidues) {
|
|
43513
|
+
let eachResidueHash = {};
|
|
43514
|
+
eachResidueHash[resid] = 1;
|
|
43515
|
+
let name = resid + '_' + ic.selectedResidues[resid];
|
|
43516
|
+
|
|
43517
|
+
this.selectResidueList(eachResidueHash, name, name);
|
|
43518
|
+
}
|
|
43519
|
+
}
|
|
43520
|
+
|
|
43344
43521
|
removeSelection() { let ic = this.icn3d; ic.icn3dui;
|
|
43345
43522
|
if(!ic.bAnnotations) {
|
|
43346
43523
|
ic.hlUpdateCls.removeSeqChainBkgd();
|
|
@@ -44627,14 +44804,16 @@ class ApplyDisplay {
|
|
|
44627
44804
|
let coilWidth = parseFloat(me.htmlCls.setHtmlCls.getCookie('coilWidth'));
|
|
44628
44805
|
let cylinderRadius = parseFloat(me.htmlCls.setHtmlCls.getCookie('cylinderRadius'));
|
|
44629
44806
|
let clRad = me.htmlCls.setHtmlCls.getCookie('crosslinkRadius');
|
|
44630
|
-
let crosslinkRadius = (!isNaN(clRad)) ? parseFloat(clRad) : ic.crosslinkRadius;
|
|
44807
|
+
let crosslinkRadius = (clRad && !isNaN(clRad)) ? parseFloat(clRad) : ic.crosslinkRadius;
|
|
44631
44808
|
let traceRadius = parseFloat(me.htmlCls.setHtmlCls.getCookie('traceRadius'));
|
|
44632
44809
|
let dotSphereScale = parseFloat(me.htmlCls.setHtmlCls.getCookie('dotSphereScale'));
|
|
44633
44810
|
let ribbonthickness = parseFloat(me.htmlCls.setHtmlCls.getCookie('ribbonthickness'));
|
|
44634
44811
|
let helixSheetWidth = parseFloat(me.htmlCls.setHtmlCls.getCookie('helixSheetWidth'));
|
|
44635
44812
|
let nucleicAcidWidth = parseFloat(me.htmlCls.setHtmlCls.getCookie('nucleicAcidWidth'));
|
|
44636
44813
|
|
|
44637
|
-
if(ic.lineRadius != lineRadius || ic.coilWidth != coilWidth || ic.cylinderRadius != cylinderRadius || ic.crosslinkRadius != crosslinkRadius || ic.traceRadius != traceRadius || ic.dotSphereScale != dotSphereScale || ic.ribbonthickness != ribbonthickness || ic.helixSheetWidth != helixSheetWidth || ic.nucleicAcidWidth != nucleicAcidWidth) {
|
|
44814
|
+
if(!ic.bSetThicknessOnce && (ic.lineRadius != lineRadius || ic.coilWidth != coilWidth || ic.cylinderRadius != cylinderRadius || ic.crosslinkRadius != crosslinkRadius || ic.traceRadius != traceRadius || ic.dotSphereScale != dotSphereScale || ic.ribbonthickness != ribbonthickness || ic.helixSheetWidth != helixSheetWidth || ic.nucleicAcidWidth != nucleicAcidWidth) ) {
|
|
44815
|
+
ic.bSetThicknessOnce = true;
|
|
44816
|
+
|
|
44638
44817
|
me.htmlCls.clickMenuCls.setLogCmd('set thickness | linerad ' + lineRadius + ' | coilrad ' + coilWidth + ' | stickrad ' + cylinderRadius + ' | crosslinkrad ' + crosslinkRadius + ' | tracerad ' + traceRadius + ' | ribbonthick ' + ribbonthickness + ' | proteinwidth ' + helixSheetWidth + ' | nucleotidewidth ' + nucleicAcidWidth + ' | ballscale ' + dotSphereScale, true);
|
|
44639
44818
|
}
|
|
44640
44819
|
|
|
@@ -54134,8 +54313,19 @@ class SaveFile {
|
|
|
54134
54313
|
if(!isNaN(resi) && atom.chain.length > 3 && !isNaN(atom.chain.substr(3)) ) { // such as: chain = NAG2, resi=1 => chain = NAG, resi=2
|
|
54135
54314
|
resi = resi - 1 + parseInt(atom.chain.substr(3));
|
|
54136
54315
|
}
|
|
54137
|
-
|
|
54138
|
-
line +=
|
|
54316
|
+
let resiInt = parseInt(resi);
|
|
54317
|
+
line +=(resiInt.toString().length <= 4) ? resiInt.toString().padStart(4, ' ') : resiInt.toString().substr(0, 4);
|
|
54318
|
+
//line += ' '.padStart(4, ' ');
|
|
54319
|
+
// insert
|
|
54320
|
+
let lastChar = resi.toString().substr(resi.toString().length - 1, 1);
|
|
54321
|
+
if(isNaN(lastChar)) {
|
|
54322
|
+
line += lastChar;
|
|
54323
|
+
}
|
|
54324
|
+
else {
|
|
54325
|
+
line += ' ';
|
|
54326
|
+
}
|
|
54327
|
+
line += ' '.padStart(3, ' ');
|
|
54328
|
+
|
|
54139
54329
|
line += atom.coord.x.toFixed(3).toString().padStart(8, ' ');
|
|
54140
54330
|
line += atom.coord.y.toFixed(3).toString().padStart(8, ' ');
|
|
54141
54331
|
line += atom.coord.z.toFixed(3).toString().padStart(8, ' ');
|
|
@@ -55332,15 +55522,19 @@ class ClickMenu {
|
|
|
55332
55522
|
thisClass.setLogCmd('defined sets', true);
|
|
55333
55523
|
//thisClass.setLogCmd('window defined sets', true);
|
|
55334
55524
|
});
|
|
55335
|
-
|
|
55336
|
-
|
|
55525
|
+
$(document).on("click", "#" + me.pre + "setOr", function(e) { let ic = me.icn3d;
|
|
55526
|
+
e.stopImmediatePropagation();
|
|
55527
|
+
ic.setOperation = 'or';
|
|
55337
55528
|
});
|
|
55338
|
-
|
|
55339
|
-
|
|
55529
|
+
$(document).on("click", "#" + me.pre + "setAnd", function(e) { let ic = me.icn3d;
|
|
55530
|
+
e.stopImmediatePropagation();
|
|
55531
|
+
ic.setOperation = 'and';
|
|
55340
55532
|
});
|
|
55341
|
-
|
|
55342
|
-
|
|
55533
|
+
$(document).on("click", "#" + me.pre + "setNot", function(e) { let ic = me.icn3d;
|
|
55534
|
+
e.stopImmediatePropagation();
|
|
55535
|
+
ic.setOperation = 'not';
|
|
55343
55536
|
});
|
|
55537
|
+
|
|
55344
55538
|
// },
|
|
55345
55539
|
// clkMn2_pkNo: function() {
|
|
55346
55540
|
me.myEventCls.onIds("#" + me.pre + "mn2_pkNo", "click", function(e) { let ic = me.icn3d; e.preventDefault();
|
|
@@ -57700,6 +57894,7 @@ class SetMenu {
|
|
|
57700
57894
|
|
|
57701
57895
|
html += me.htmlCls.setHtmlCls.getLink('mn2_saveselection', 'Save Selection', 1, 1);
|
|
57702
57896
|
html += me.htmlCls.setHtmlCls.getLink('clearall', 'Clear Selection', undefined, 1);
|
|
57897
|
+
html += me.htmlCls.setHtmlCls.getLink('mn2_saveresidue', 'Save Res. in Sel.', 1, 1);
|
|
57703
57898
|
|
|
57704
57899
|
html += me.htmlCls.setHtmlCls.getMenuSep();
|
|
57705
57900
|
|
|
@@ -58099,7 +58294,7 @@ class SetMenu {
|
|
|
58099
58294
|
html += "<ul>";
|
|
58100
58295
|
html += me.htmlCls.setHtmlCls.getLink('mn5_elecmap2fofc', '2Fo-Fc Map', undefined, 2);
|
|
58101
58296
|
html += me.htmlCls.setHtmlCls.getLink('mn5_elecmapfofc', 'Fo-Fc Map', undefined, 2);
|
|
58102
|
-
html += me.htmlCls.setHtmlCls.getLinkWrapper('mn5_elecmapNo', 'Remove Map', 'mapWrapper2', undefined,
|
|
58297
|
+
html += me.htmlCls.setHtmlCls.getLinkWrapper('mn5_elecmapNo', 'Remove Map', 'mapWrapper2', undefined, 2);
|
|
58103
58298
|
|
|
58104
58299
|
html += "</ul>";
|
|
58105
58300
|
html += "</li>";
|
|
@@ -59770,7 +59965,7 @@ class SetDialog {
|
|
|
59770
59965
|
|
|
59771
59966
|
html += me.htmlCls.divStr + "dl_mutation' class='" + dialogClass + "'>";
|
|
59772
59967
|
html += "<div style='width:500px'>";
|
|
59773
|
-
html += 'Please specify the mutations with a comma separated mutation list. Each mutation can be specified as "[PDB ID or AlphaFold UniProt ID]_[Chain ID]_[Residue Number]_[One Letter
|
|
59968
|
+
html += 'Please specify the mutations with a comma separated mutation list. Each mutation can be specified as "[<b>uppercase</b> PDB ID or AlphaFold UniProt ID]_[Chain ID]_[Residue Number]_[One Letter Mutant Residue]". E.g., the mutation of N501Y in the E chain of PDB 6M0J can be specified as "6M0J_E_501_Y". For AlphaFold structures, the "Chain ID" is "A".<br/><br/>';
|
|
59774
59969
|
html += "<div style='display:inline-block; width:110px'>Mutations: </div>" + me.htmlCls.inputTextStr + "id='" + me.pre + "mutationids' value='6M0J_E_484_K,6M0J_E_501_Y,6M0J_E_417_N' size=50><br/><br/>";
|
|
59775
59970
|
|
|
59776
59971
|
// html += "<b>Data Source</b>: <select id='" + me.pre + "idsource'>";
|
|
@@ -60877,8 +61072,8 @@ class Events {
|
|
|
60877
61072
|
}
|
|
60878
61073
|
|
|
60879
61074
|
setPredefinedMenu(id) { let me = this.icn3dui, ic = me.icn3d;
|
|
60880
|
-
if(Object.keys(ic.
|
|
60881
|
-
var aaa = 1; //alert("At least two
|
|
61075
|
+
if(Object.keys(ic.chains).length < 2) {
|
|
61076
|
+
var aaa = 1; //alert("At least two chains are required for alignment...");
|
|
60882
61077
|
return;
|
|
60883
61078
|
}
|
|
60884
61079
|
if(ic.bSetChainsAdvancedMenu === undefined || !ic.bSetChainsAdvancedMenu) {
|
|
@@ -60898,14 +61093,14 @@ class Events {
|
|
|
60898
61093
|
launchMmdb(ids, bBiounit, hostUrl) { let me = this.icn3dui; me.icn3d;
|
|
60899
61094
|
let flag = bBiounit ? '1' : '0';
|
|
60900
61095
|
|
|
60901
|
-
ids = ids.replace(/,/g, ' ').replace(/\s+/g, '
|
|
61096
|
+
ids = ids.replace(/,/g, ' ').replace(/\s+/g, ',').trim();
|
|
60902
61097
|
|
|
60903
61098
|
if(!ids) {
|
|
60904
61099
|
var aaa = 1; //alert("Please enter a list of PDB IDs or AlphaFold UniProt IDs...");
|
|
60905
61100
|
return;
|
|
60906
61101
|
}
|
|
60907
61102
|
|
|
60908
|
-
let idArray = ids.split('
|
|
61103
|
+
let idArray = ids.split(',');
|
|
60909
61104
|
if(idArray.length == 1 && (idArray[0].length == 4 || !isNaN(idArray[0])) ) {
|
|
60910
61105
|
me.htmlCls.clickMenuCls.setLogCmd("load mmdb" + flag + " " + ids, false);
|
|
60911
61106
|
window.open(hostUrl + '?mmdbid=' + ids + '&bu=' + flag, '_blank');
|
|
@@ -61065,8 +61260,8 @@ class Events {
|
|
|
61065
61260
|
});
|
|
61066
61261
|
|
|
61067
61262
|
me.myEventCls.onIds("#" + me.pre + "realignSelection", "click", function(e) { let ic = me.icn3d;
|
|
61068
|
-
if(Object.keys(ic.
|
|
61069
|
-
var aaa = 1; //alert("At least two
|
|
61263
|
+
if(Object.keys(ic.chains).length < 2) {
|
|
61264
|
+
var aaa = 1; //alert("At least two chains are required for alignment...");
|
|
61070
61265
|
return;
|
|
61071
61266
|
}
|
|
61072
61267
|
|
|
@@ -63042,6 +63237,16 @@ class Events {
|
|
|
63042
63237
|
//var description = $("#" + me.pre + "seq_command_desc2").val();
|
|
63043
63238
|
ic.selectionCls.saveSelection(name, name);
|
|
63044
63239
|
});
|
|
63240
|
+
|
|
63241
|
+
me.myEventCls.onIds("#" + me.pre + "mn2_saveresidue", "click", function(e) { let ic = me.icn3d;
|
|
63242
|
+
e.stopImmediatePropagation();
|
|
63243
|
+
if(!me.cfg.notebook) dialog.dialog( "close" );
|
|
63244
|
+
|
|
63245
|
+
ic.selectionCls.saveEachResiInSel();
|
|
63246
|
+
|
|
63247
|
+
me.htmlCls.clickMenuCls.setLogCmd('select each residue', true);
|
|
63248
|
+
});
|
|
63249
|
+
|
|
63045
63250
|
// },
|
|
63046
63251
|
// clickAlignSeqSaveSelection: function() {
|
|
63047
63252
|
me.myEventCls.onIds("#" + me.pre + "alignseq_saveselection", "click", function(e) { let ic = me.icn3d;
|
|
@@ -64850,6 +65055,9 @@ class Alternate {
|
|
|
64850
65055
|
else if(colorType == 'normalized hydrophobic') {
|
|
64851
65056
|
colorLabel = 'Normalized Hydrophobicity';
|
|
64852
65057
|
}
|
|
65058
|
+
else if(colorType == 'hydrophobic') {
|
|
65059
|
+
colorLabel = 'Hydrophobicity';
|
|
65060
|
+
}
|
|
64853
65061
|
|
|
64854
65062
|
let html = "Color by <b>" + colorLabel + "</b><br><br>";
|
|
64855
65063
|
|
|
@@ -64871,35 +65079,55 @@ class Alternate {
|
|
|
64871
65079
|
html += this.getColorLegendForCharge(ic.hAtoms);
|
|
64872
65080
|
}
|
|
64873
65081
|
//else if (ic.legendClick == 4){
|
|
64874
|
-
else if (colorType == 'normalized hydrophobic') {
|
|
64875
|
-
let
|
|
65082
|
+
else if (colorType == 'normalized hydrophobic' || colorType == 'hydrophobic') {
|
|
65083
|
+
let bOriResn = true;
|
|
65084
|
+
let resSet = this.getRes2color(ic.hAtoms, bOriResn);
|
|
64876
65085
|
|
|
64877
65086
|
// polar first - most to least
|
|
64878
65087
|
// create hydrophobic table
|
|
64879
65088
|
var items = Object.keys(resSet).map(
|
|
64880
|
-
(key) => { return [key, Object.keys(resSet[key])[0]]
|
|
65089
|
+
//(key) => { return [key, Object.keys(resSet[key])[0]]
|
|
65090
|
+
(key) => { return [key, me.parasCls.hydrophobicValues[key]]
|
|
64881
65091
|
});
|
|
64882
65092
|
|
|
65093
|
+
// items.sort(
|
|
65094
|
+
// (first, second) => {
|
|
65095
|
+
// return ((parseInt(second[1].substring(2,4), 16) - parseInt(second[1].substring(4,6), 16)) - (parseInt(first[1].substring(2,4), 16) - parseInt(first[1].substring(4,6), 16)));
|
|
65096
|
+
// }
|
|
65097
|
+
// );
|
|
65098
|
+
|
|
64883
65099
|
items.sort(
|
|
64884
65100
|
(first, second) => {
|
|
64885
|
-
return (
|
|
65101
|
+
return parseFloat(first[1]) - parseFloat(second[1]);
|
|
65102
|
+
}
|
|
64886
65103
|
);
|
|
64887
65104
|
|
|
64888
65105
|
var keys = items.map(
|
|
64889
|
-
(e) => { return [e[0], e[1]]
|
|
65106
|
+
//(e) => { return [e[0], e[1]]
|
|
65107
|
+
(e) => { return [e[0], Object.keys(resSet[e[0]])[0]]
|
|
64890
65108
|
});
|
|
64891
65109
|
|
|
64892
65110
|
html += "<div>";
|
|
64893
65111
|
|
|
64894
|
-
|
|
64895
|
-
|
|
64896
|
-
|
|
65112
|
+
if(colorType == 'normalized hydrophobic') {
|
|
65113
|
+
html += "Dark green (W, F, Y, L, I, C, M): Hydrophobic<br>";
|
|
65114
|
+
html += "Light green (G, V, S, T, A, N, P, Q): Polar<br>";
|
|
65115
|
+
html += "Grey: Charged, not hydrophobic<br><br>";
|
|
65116
|
+
}
|
|
65117
|
+
else {
|
|
65118
|
+
html += "Green (W, F, Y, L, I, C, M): Hydrophobic<br>";
|
|
65119
|
+
html += "Yellow (G, V, S, T, A, N, P, Q): Polar<br>";
|
|
65120
|
+
html += "Red: Negatively Charged<br>";
|
|
65121
|
+
html += "Blue: Positively Charged<br><br>";
|
|
65122
|
+
}
|
|
64897
65123
|
|
|
64898
65124
|
let cnt = 0;
|
|
64899
65125
|
for (let key of keys) {
|
|
65126
|
+
if(!me.parasCls.residueAbbrev[key[0]]) continue;
|
|
65127
|
+
|
|
64900
65128
|
html += "<div style='display:inline-block; width:100px'>";
|
|
64901
65129
|
html += "<div style='width: 10px; height: 10px; background-color:#" + key[1] + "; border: 0px;display:inline-block;' ></div> ";
|
|
64902
|
-
html += key[0] + "</div>";
|
|
65130
|
+
html += me.parasCls.residueAbbrev[key[0]] + "</div>";
|
|
64903
65131
|
|
|
64904
65132
|
if(cnt % 4 == 3) html += "<br>";
|
|
64905
65133
|
|
|
@@ -64963,31 +65191,15 @@ class Alternate {
|
|
|
64963
65191
|
return html;
|
|
64964
65192
|
}
|
|
64965
65193
|
|
|
64966
|
-
getRes2color(atomHash) { let
|
|
65194
|
+
getRes2color(atomHash, bOriResn) { let ic = this.icn3d, me = ic.icn3dui;
|
|
64967
65195
|
let resSet = {};
|
|
64968
65196
|
|
|
64969
|
-
const residueAbbrev = {
|
|
64970
|
-
ALA: "A (Ala)", ARG: "R (Arg)", ASN: "N (Asn)",
|
|
64971
|
-
ASP: "D (Asp)", CYS: "C (Cys)", GLN: "Q (Gln)",
|
|
64972
|
-
GLU: "E (Glu)", GLY: "G (Gly)", HIS: "H (His)",
|
|
64973
|
-
ILE: "I (Ile)", LEU: "L (Leu)", LYS: "K (Lys)",
|
|
64974
|
-
MET: "M (Met)", PHE: "F (Phe)", PRO: "P (Pro)",
|
|
64975
|
-
SER: "S (Ser)", THR: "T (Thr)", TRP: "W (Trp)",
|
|
64976
|
-
TYR: "Y (Tyr)", VAL: "V (Val)",
|
|
64977
|
-
//ASX: "B (Asx)", GLX: "Z (Glx)",
|
|
64978
|
-
ASX: "X (Asx)", GLX: "X (Glx)",
|
|
64979
|
-
'G': "Guanine", 'A': "Adenine",
|
|
64980
|
-
'T': "Thymine", 'C': "Cytosine", 'U': "Uracil",
|
|
64981
|
-
'DG': "deoxy-Guanine", 'DA': "deoxy-Adenine", 'DT': "deoxy-Thymine",
|
|
64982
|
-
'DC': "deoxy-Cytosine", 'DU': 'deoxy-Uracil'
|
|
64983
|
-
};
|
|
64984
|
-
|
|
64985
65197
|
let residueHash = ic.firstAtomObjCls.getResiduesFromAtoms(atomHash);
|
|
64986
65198
|
for(let resid in residueHash){
|
|
64987
65199
|
let atomHash = ic.residues[resid];
|
|
64988
65200
|
|
|
64989
65201
|
let atom = ic.firstAtomObjCls.getFirstAtomObj(atomHash);
|
|
64990
|
-
let resiLabel = residueAbbrev[atom.resn];
|
|
65202
|
+
let resiLabel = (bOriResn) ? atom.resn : me.parasCls.residueAbbrev[atom.resn];
|
|
64991
65203
|
let temp = (atom === undefined || atom.color === undefined || atom.color.getHexString().toUpperCase() === 'FFFFFF') ? 'DDDDDD' : atom.color.getHexString();
|
|
64992
65204
|
|
|
64993
65205
|
if (resiLabel != undefined){
|
|
@@ -67696,7 +67908,6 @@ class Vastplus {
|
|
|
67696
67908
|
let subdomains = result.subdomains;
|
|
67697
67909
|
|
|
67698
67910
|
let domainAtomsArray = [];
|
|
67699
|
-
|
|
67700
67911
|
if(subdomains.length <= 1) {
|
|
67701
67912
|
domainAtomsArray.push(ic.chains[chainid]);
|
|
67702
67913
|
|
|
@@ -69239,6 +69450,8 @@ class iCn3D {
|
|
|
69239
69450
|
this.midValue = 50;
|
|
69240
69451
|
this.endValue = 100;
|
|
69241
69452
|
|
|
69453
|
+
this.crosslinkRadius = 0.4;
|
|
69454
|
+
|
|
69242
69455
|
// classes
|
|
69243
69456
|
this.sceneCls = new Scene(this);
|
|
69244
69457
|
this.cameraCls = new Camera(this);
|
|
@@ -69585,7 +69798,7 @@ class iCn3DUI {
|
|
|
69585
69798
|
//even when multiple iCn3D viewers are shown together.
|
|
69586
69799
|
this.pre = this.cfg.divid + "_";
|
|
69587
69800
|
|
|
69588
|
-
this.REVISION = '3.19.
|
|
69801
|
+
this.REVISION = '3.19.1';
|
|
69589
69802
|
|
|
69590
69803
|
// In nodejs, iCn3D defines "window = {navigator: {}}"
|
|
69591
69804
|
this.bNode = (Object.keys(window).length < 2) ? true : false;
|