icn3d 3.25.10 → 3.25.12

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 CHANGED
@@ -11780,7 +11780,7 @@ class Events {
11780
11780
  async searchSeq() { let me = this.icn3dui, ic = me.icn3d, thisClass = this;
11781
11781
  let select = $("#" + me.pre + "search_seq").val();
11782
11782
  if(isNaN(select) && select.indexOf('$') == -1 && select.indexOf('.') == -1 && select.indexOf(':') == -1
11783
- && select.indexOf('%') == -1 && select.indexOf('@') == -1) {
11783
+ && select.indexOf('@') == -1) {
11784
11784
  select = ':' + select;
11785
11785
  }
11786
11786
  let commandname = select.replace(/\s+/g, '_');
@@ -14216,6 +14216,22 @@ class Events {
14216
14216
  thisClass.setLogCmd('define coil sets | chain ' + chainid, true);
14217
14217
  });
14218
14218
 
14219
+ $(document).on("click", ".icn3d-igstrandsets", function(e) { let ic = me.icn3d;
14220
+ e.stopImmediatePropagation();
14221
+ //e.preventDefault();
14222
+ let chainid = $(this).attr('chainid');
14223
+ ic.addTrackCls.defineIgstrand(chainid, 'igstrand');
14224
+ thisClass.setLogCmd('define igstrand sets | chain ' + chainid, true);
14225
+ });
14226
+
14227
+ $(document).on("click", ".icn3d-igloopsets", function(e) { let ic = me.icn3d;
14228
+ e.stopImmediatePropagation();
14229
+ //e.preventDefault();
14230
+ let chainid = $(this).attr('chainid');
14231
+ ic.addTrackCls.defineIgstrand(chainid, 'igloop');
14232
+ thisClass.setLogCmd('define igloop sets | chain ' + chainid, true);
14233
+ });
14234
+
14219
14235
  me.myEventCls.onIds("#" + me.pre + "deletesets", "click", function(e) { let ic = me.icn3d;
14220
14236
  ic.definedSetsCls.deleteSelectedSets();
14221
14237
  thisClass.setLogCmd("delete selected sets", true);
@@ -32289,7 +32305,7 @@ class Alternate {
32289
32305
  ic.impostorCls.clearImpostors();
32290
32306
 
32291
32307
  // show membranes
32292
- if(ic.bOpm) {
32308
+ if(ic.bOpm && !me.cfg.chainalign) {
32293
32309
  //if(window.dialog && window.dialog.hasClass('ui-dialog-content')) window.dialog.dialog( "close" );
32294
32310
 
32295
32311
  let html = me.utilsCls.getMemDesc();
@@ -34687,7 +34703,7 @@ class SetColor {
34687
34703
  // color = me.parasCls.thr(me.htmlCls.GREYB);
34688
34704
  // }
34689
34705
  // else {
34690
- let refnumStr = refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
34706
+ let refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
34691
34707
  let currStrand = refnumLabel.replace(new RegExp(refnumStr,'g'), '');
34692
34708
  color = ic.showSeqCls.getRefnumColor(currStrand);
34693
34709
 
@@ -34723,7 +34739,7 @@ class SetColor {
34723
34739
  color = me.parasCls.thr(me.htmlCls.GREYB);
34724
34740
  }
34725
34741
  else {
34726
- let refnumStr = refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
34742
+ let refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
34727
34743
  let currStrand = refnumLabel.replace(new RegExp(refnumStr,'g'), '');
34728
34744
  color = ic.showSeqCls.getProtodomainColor(currStrand);
34729
34745
 
@@ -39851,7 +39867,7 @@ class AddTrack {
39851
39867
  ++helixCnt;
39852
39868
 
39853
39869
  if(Object.keys(selectedResidues).length > 0) {
39854
- setName = currName + 'H' + helixCnt + ')';
39870
+ setName = currName + 'H' + helixCnt.toString().padStart(2, '0') + ')';
39855
39871
  if(type == 'coil') {
39856
39872
  ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
39857
39873
  if(!bUnion) bUnion = true;
@@ -39862,13 +39878,13 @@ class AddTrack {
39862
39878
 
39863
39879
  //zero =(index < 10) ? '0' : '';
39864
39880
  //currName = chainid + zero + index + '_H' + helixCnt;
39865
- currName = chainid + '_H' + helixCnt;
39881
+ currName = chainid + '_H' + helixCnt.toString().padStart(2, '0');
39866
39882
  selectedResidues[residueid] = 1;
39867
39883
 
39868
39884
  if(atom.ssend) {
39869
39885
  //zero =(index < 9) ? '0' : '';
39870
39886
  //prevName = chainid + zero +(index+1) + '_L(H' + helixCnt;
39871
- prevName = chainid + '_C(H' + helixCnt;
39887
+ prevName = chainid + '_C(H' + helixCnt.toString().padStart(2, '0');
39872
39888
  if(type == 'helix') {
39873
39889
  ic.selectionCls.selectResidueList(selectedResidues, currName, currName, bUnion, bUpdateHighlight);
39874
39890
  if(!bUnion) bUnion = true;
@@ -39881,7 +39897,7 @@ class AddTrack {
39881
39897
  ++sheetCnt;
39882
39898
 
39883
39899
  if(Object.keys(selectedResidues).length > 0) {
39884
- setName = currName + 'S' + sheetCnt + ')';
39900
+ setName = currName + 'S' + sheetCnt.toString().padStart(2, '0') + ')';
39885
39901
  if(type == 'coil') {
39886
39902
  ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
39887
39903
  if(!bUnion) bUnion = true;
@@ -39892,13 +39908,13 @@ class AddTrack {
39892
39908
 
39893
39909
  //zero =(index < 10) ? '0' : '';
39894
39910
  //currName = chainid + zero + index + '_S' + sheetCnt;
39895
- currName = chainid + '_S' + sheetCnt;
39911
+ currName = chainid + '_S' + sheetCnt.toString().padStart(2, '0');
39896
39912
  selectedResidues[residueid] = 1;
39897
39913
 
39898
39914
  if(atom.ssend) {
39899
39915
  //zero =(index < 9) ? '0' : '';
39900
39916
  //prevName = chainid + zero +(index+1) + '_L(S' + sheetCnt;
39901
- prevName = chainid + '_C(S' + sheetCnt;
39917
+ prevName = chainid + '_C(S' + sheetCnt.toString().padStart(2, '0');
39902
39918
  if(type == 'sheet') {
39903
39919
  ic.selectionCls.selectResidueList(selectedResidues, currName, currName, bUnion, bUpdateHighlight);
39904
39920
  if(!bUnion) bUnion = true;
@@ -39921,6 +39937,90 @@ class AddTrack {
39921
39937
  }
39922
39938
  }
39923
39939
 
39940
+ // type: igstrand, igloop
39941
+ defineIgstrand(chainid, type) { let ic = this.icn3d, me = ic.icn3dui;
39942
+ if(!$('#' + ic.pre + 'dl_definedsets').hasClass('ui-dialog-content') || !$('#' + ic.pre + 'dl_definedsets').dialog( 'isOpen' )) {
39943
+ me.htmlCls.dialogCls.openDlg('dl_definedsets', 'Select sets');
39944
+ $("#" + ic.pre + "atomsCustom").resizable();
39945
+ }
39946
+
39947
+ let selectedResidues = {};
39948
+ let bUnion = false, bUpdateHighlight = true;
39949
+
39950
+ let strandCnt = 0, loopCnt = 0;
39951
+ let setName, currStrand, prevStrand, prevStrandReal, currType, prevType;
39952
+
39953
+ // clear selection
39954
+ ic.hAtoms = {};
39955
+
39956
+ let bStart = false;
39957
+
39958
+ for(let i = 0, il = ic.chainsSeq[chainid].length; i < il; ++i) {
39959
+ let currResi = ic.chainsSeq[chainid][i].resi;
39960
+ let resid = chainid + '_' + currResi;
39961
+
39962
+ if(!ic.residues.hasOwnProperty(resid) ) continue;
39963
+
39964
+ let refnumLabel, refnumStr;
39965
+ refnumLabel = ic.resid2refnum[resid];
39966
+ if(!refnumLabel) continue;
39967
+
39968
+ refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
39969
+ currStrand = refnumLabel.replace(refnumStr, '');
39970
+
39971
+ if(ic.residIgLoop.hasOwnProperty(resid)) {
39972
+ currType = 'igloop';
39973
+ }
39974
+ else {
39975
+ currType = 'igstrand';
39976
+ }
39977
+
39978
+ if(bStart && currType != prevType && Object.keys(selectedResidues).length > 0) {
39979
+ if(prevType == 'igstrand') {
39980
+ ++strandCnt;
39981
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
39982
+ setName = setName.replace(/'/g, '`');
39983
+ if(type == 'igstrand') {
39984
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
39985
+ if(!bUnion) bUnion = true;
39986
+ }
39987
+ prevStrandReal = prevStrand;
39988
+ }
39989
+ else if(prevType == 'igloop') {
39990
+ ++loopCnt;
39991
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
39992
+ setName = setName.replace(/'/g, '`');
39993
+ if(type == 'igloop') {
39994
+ ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
39995
+ if(!bUnion) bUnion = true;
39996
+ }
39997
+ }
39998
+
39999
+ selectedResidues = {};
40000
+ }
40001
+
40002
+ selectedResidues[resid] = 1;
40003
+
40004
+ prevStrand = currStrand;
40005
+ prevType = currType;
40006
+
40007
+ bStart = true;
40008
+ } // for loop
40009
+
40010
+ if(prevType == 'igstrand') {
40011
+ ++strandCnt;
40012
+ setName = 'Strand-' + prevStrand + '-' + chainid + '-' + strandCnt.toString().padStart(3, '0');
40013
+ setName = setName.replace(/'/g, '`');
40014
+ if(type == 'igstrand') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
40015
+ }
40016
+ else if(prevType == 'igloop') {
40017
+ ++loopCnt;
40018
+ setName = 'Loop-' + prevStrandReal + '_' + currStrand + '-' + chainid + '-' + loopCnt.toString().padStart(3, '0');
40019
+ setName = setName.replace(/'/g, '`');
40020
+ if(type == 'igloop') ic.selectionCls.selectResidueList(selectedResidues, setName, setName, bUnion, bUpdateHighlight);
40021
+ }
40022
+ }
40023
+
39924
40024
  simplifyText(text) { let ic = this.icn3d; ic.icn3dui;
39925
40025
  let out = ''; // 1-based text positions
39926
40026
  let bFoundText = false;
@@ -40930,6 +41030,11 @@ class ShowAnno {
40930
41030
  chainHtml += this.addButton(chnid, "icn3d-helixsets", "Helix Sets", "Define sets for each helix in this chain and add them to the menu of \"Defined Sets\"", 60, buttonStyle) + "&nbsp;"
40931
41031
  + this.addButton(chnid, "icn3d-sheetsets", "Sheet Sets", "Define sets for each sheet in this chain and add them to the menu of \"Defined Sets\"", 60, buttonStyle) + "&nbsp;"
40932
41032
  + this.addButton(chnid, "icn3d-coilsets", "Coil Sets", "Define sets for each coil in this chain and add them to the menu of \"Defined Sets\"", 60, buttonStyle);
41033
+
41034
+ if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid)) {
41035
+ chainHtml += "&nbsp;" + this.addButton(chnid, "icn3d-igstrandsets", "Ig Strand Sets", "Define sets for each Ig strand in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle) + "&nbsp;"
41036
+ + this.addButton(chnid, "icn3d-igloopsets", "Ig Loop Sets", "Define sets for each Ig loop in this chain and add them to the menu of \"Defined Sets\"", 80, buttonStyle);
41037
+ }
40933
41038
  $("#" + ic.pre + "dl_annotations").append(chainHtml);
40934
41039
  //let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'domain', 'site', 'ptm', 'interaction', 'custom', 'ssbond', 'crosslink', 'transmem'];
40935
41040
  let itemArray = ['giseq', 'cdd', 'clinvar', 'snp', 'site', 'ptm', 'ssbond', 'crosslink', 'transmem', 'domain', 'custom', 'interaction'];
@@ -41362,6 +41467,10 @@ class ShowAnno {
41362
41467
  }
41363
41468
  }
41364
41469
  getColorhexFromBlosum62(resA, resB) { let ic = this.icn3d, me = ic.icn3dui;
41470
+ let color = '333333';
41471
+
41472
+ if(!resA || !resB) return color;
41473
+
41365
41474
  resA = resA.toUpperCase();
41366
41475
  resB = resB.toUpperCase();
41367
41476
 
@@ -41371,7 +41480,7 @@ class ShowAnno {
41371
41480
  if(matrixValue === undefined) return '333333';
41372
41481
  // range and color: blue for -4 ~ 0, red for 0 ~ 11
41373
41482
  // max value 221 to avoid white
41374
- let color = '333333';
41483
+
41375
41484
  if(matrixValue > 0) {
41376
41485
  let c = 221 - parseInt(matrixValue / 11.0 * 221);
41377
41486
  let cStr =(c < 10) ? '0' + c.toString(16) : c.toString(16);
@@ -41819,7 +41928,7 @@ class ShowSeq {
41819
41928
  html += '</div>';
41820
41929
  html3 += '</div></div>';
41821
41930
  }
41822
- else if(ic.bShowRefnum && ic.chainid2index.hasOwnProperty(chnid)) {
41931
+ else if(ic.bShowRefnum && ic.chainid2refpdbname.hasOwnProperty(chnid)) {
41823
41932
  let result = this.showRefNum(giSeq, chnid);
41824
41933
  html += result.html;
41825
41934
  html3 += result.html3;
@@ -41862,10 +41971,10 @@ class ShowSeq {
41862
41971
  let html = '', html3 = '';
41863
41972
 
41864
41973
  let chainList = '';
41865
- if(!ic.chainid2index[chnid]) return {html: html, html3: html3};
41974
+ if(!ic.chainid2refpdbname[chnid]) return {html: html, html3: html3};
41866
41975
 
41867
- for(let i = 0, il = ic.chainid2index[chnid].length; i < il; ++i) {
41868
- chainList += ic.refpdbArray[ic.chainid2index[chnid][i]] + " ";
41976
+ for(let i = 0, il = ic.chainid2refpdbname[chnid].length; i < il; ++i) {
41977
+ chainList += ic.chainid2refpdbname[chnid][i] + " ";
41869
41978
  }
41870
41979
 
41871
41980
  let refStruTitle = (chainList) ? "based on " + chainList : "";
@@ -41926,13 +42035,23 @@ class ShowSeq {
41926
42035
 
41927
42036
  // sometimes one chain may have several Ig domains,set an index for each IgDomain
41928
42037
  let index = 1, bStart = false;
41929
-
42038
+
42039
+ if(!bCustom && !kabat_or_imgt) {
42040
+ // reset ic.residIgLoop for the current selection, which could be the second round of ref num assignment
42041
+ let residHash = ic.firstAtomObjCls.getResiduesFromAtoms(ic.hAtoms);
42042
+ for(let resid in residHash) {
42043
+ // not in loop any more if you assign ref numbers multiple times
42044
+ delete ic.residIgLoop[resid];
42045
+ }
42046
+ }
42047
+
41930
42048
  // 1. get the range of each strand excluding loops
41931
42049
  let strandArray = [], strandHash = {}, strandCnt = 0, resCnt = 0, resCntBfAnchor = 0, resCntAtAnchor = 0;
41932
42050
  if(!bCustom && !kabat_or_imgt) {
41933
42051
  for(let i = 0, il = giSeq.length; i < il; ++i, ++resCnt, ++resCntBfAnchor, ++resCntAtAnchor) {
41934
42052
  let currResi = ic.ParserUtilsCls.getResi(chnid, i);
41935
42053
  let residueid = chnid + '_' + currResi;
42054
+
41936
42055
  refnumLabel = ic.resid2refnum[residueid];
41937
42056
 
41938
42057
  let firstChar = (refnumLabel) ? refnumLabel.substr(0,1) : ' ';
@@ -41946,7 +42065,7 @@ class ShowSeq {
41946
42065
  }
41947
42066
 
41948
42067
  if(refnumLabel) {
41949
- refnumStr_ori = refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
42068
+ refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
41950
42069
  currStrand = refnumLabel.replace(new RegExp(refnumStr_ori,'g'), '');
41951
42070
  refnumStr_ori.substr(0, 1);
41952
42071
 
@@ -42029,7 +42148,9 @@ class ShowSeq {
42029
42148
  for(let il = strandArray.length, i = il - 1; i >= 0; --i) {
42030
42149
  if(strandArray[i].endRefnum - strandArray[i].startRefnum + 1 < 3) { // remove the strand
42031
42150
  if(i != il - 1) { // modify
42032
- strandArray[i + 1].loopResCnt += strandArray[i].loopResCnt + strandArray[i].endRefnum - strandArray[i].startRefnum + 1;
42151
+ // strandArray[i + 1].loopResCnt += strandArray[i].loopResCnt + strandArray[i].endRefnum - strandArray[i].startRefnum + 1;
42152
+
42153
+ strandArray[i + 1].loopResCnt += strandArray[i].loopResCnt + parseInt(strandArray[i].endResi) - parseInt(strandArray[i].startResi) + 1;
42033
42154
  }
42034
42155
 
42035
42156
  strandArray.splice(i, 1);
@@ -42052,7 +42173,7 @@ class ShowSeq {
42052
42173
  currStrand = strandArray[strandCnt].strand;
42053
42174
 
42054
42175
  if(refnumLabel) {
42055
- refnumStr = refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
42176
+ refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
42056
42177
  currRefnum = parseInt(refnumStr);
42057
42178
  refnumLabelNoPostfix = currStrand + currRefnum;
42058
42179
 
@@ -42134,7 +42255,7 @@ class ShowSeq {
42134
42255
  }
42135
42256
  else if(parseInt(currResi) >= parseInt(strandArray[strandCnt].startResi) && parseInt(currResi) <= parseInt(strandArray[strandCnt].endResi)) {
42136
42257
  // not in loop any more if you assign ref numbers multiple times
42137
- delete ic.residIgLoop[residueid];
42258
+ //delete ic.residIgLoop[residueid];
42138
42259
 
42139
42260
  bBeforeAstrand = false;
42140
42261
 
@@ -42224,7 +42345,7 @@ class ShowSeq {
42224
42345
  let bHidelabel = false;
42225
42346
 
42226
42347
  if(refnumLabel) {
42227
- refnumStr_ori = refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
42348
+ refnumStr_ori = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
42228
42349
  currStrand = refnumLabel.replace(new RegExp(refnumStr_ori,'g'), '');
42229
42350
  currStrand_ori = currStrand;
42230
42351
 
@@ -51858,7 +51979,7 @@ class ParserUtils {
51858
51979
  if(rmsd) {
51859
51980
  me.htmlCls.clickMenuCls.setLogCmd("realignment RMSD: " + rmsd.toPrecision(4), false);
51860
51981
  let html = "<br><b>Realignment RMSD</b>: " + rmsd.toPrecision(4) + " &#8491;<br><br>";
51861
- if(ic.bAfMem) {
51982
+ if(ic.bAfMem && !me.cfg.chainalign) {
51862
51983
  //if(window.dialog && window.dialog.hasClass('ui-dialog-content')) window.dialog.dialog( "close" );
51863
51984
  html += me.utilsCls.getMemDesc();
51864
51985
  }
@@ -56920,6 +57041,18 @@ class ApplyCommand {
56920
57041
 
56921
57042
  ic.addTrackCls.defineSecondary(chainid, 'coil');
56922
57043
  }
57044
+ else if(commandOri.indexOf('define igstrand sets') == 0) {
57045
+ let chainStr = commandOri.split(' | ')[1];
57046
+ let chainid = chainStr.split(' ')[1];
57047
+
57048
+ ic.addTrackCls.defineIgstrand(chainid, 'igstrand');
57049
+ }
57050
+ else if(commandOri.indexOf('define igloop sets') == 0) {
57051
+ let chainStr = commandOri.split(' | ')[1];
57052
+ let chainid = chainStr.split(' ')[1];
57053
+
57054
+ ic.addTrackCls.defineIgstrand(chainid, 'igloop');
57055
+ }
56923
57056
  else if(commandOri.indexOf('select interaction') == 0) {
56924
57057
  let idArray = commandOri.substr(commandOri.lastIndexOf(' ') + 1).split(',');
56925
57058
  if(idArray !== null) {
@@ -59720,6 +59853,7 @@ class SelectByCommand {
59720
59853
  // $1,2,3: Structure
59721
59854
  // .A,B,C: chain
59722
59855
  // :5-10,K,chemicals: residues, could be 'proteins', 'nucleotides', 'chemicals', 'ions', and 'water'
59856
+ // :refnum_1250,anchors,strands,loops: reference numbers 1250, anchor residues (e.g., 2250), residues in strands, residues in loops
59723
59857
  // @CA,C,C*: atoms
59724
59858
  // wild card * can be used to select all
59725
59859
  //var currHighlightAtoms = {}
@@ -59727,7 +59861,7 @@ class SelectByCommand {
59727
59861
  let dollarPos = commandArray[i].indexOf('$');
59728
59862
  let periodPos = commandArray[i].indexOf('.');
59729
59863
  let colonPos = commandArray[i].indexOf(':');
59730
- let colonPos2 = commandArray[i].indexOf('%'); // for reference numbers
59864
+ let colonPos2 = commandArray[i].indexOf(':ref_'); // for reference numbers
59731
59865
  let atPos = commandArray[i].indexOf('@');
59732
59866
 
59733
59867
  let moleculeStr, chainStr, residueStr, refResStr, atomStrArray;
@@ -59744,14 +59878,14 @@ class SelectByCommand {
59744
59878
  if(colonPos === -1 && colonPos2 === -1 ) {
59745
59879
  residueStr = "*";
59746
59880
  }
59881
+ else if(colonPos2 != -1) {
59882
+ refResStr = testStr.substr(colonPos2 + 5);
59883
+ testStr = testStr.substr(0, colonPos2);
59884
+ }
59747
59885
  else if(colonPos != -1) {
59748
59886
  residueStr = testStr.substr(colonPos + 1);
59749
59887
  testStr = testStr.substr(0, colonPos);
59750
59888
  }
59751
- else if(colonPos2 != -1) {
59752
- refResStr = testStr.substr(colonPos2 + 1);
59753
- testStr = testStr.substr(0, colonPos2);
59754
- }
59755
59889
 
59756
59890
  if(periodPos === -1) {
59757
59891
  chainStr = "*";
@@ -59845,7 +59979,9 @@ class SelectByCommand {
59845
59979
  else if(residueStrArray[j] === '*') { // all resiues
59846
59980
  bAllResidues = true;
59847
59981
  }
59848
- else if(residueStrArray[j] !== 'proteins' && residueStrArray[j] !== 'nucleotides' && residueStrArray[j] !== 'chemicals' && residueStrArray[j] !== 'ions' && residueStrArray[j] !== 'water') { // residue name
59982
+ else if(residueStrArray[j] !== 'proteins' && residueStrArray[j] !== 'nucleotides'
59983
+ && residueStrArray[j] !== 'chemicals' && residueStrArray[j] !== 'ions' && residueStrArray[j] !== 'water'
59984
+ && residueStrArray[j] !== 'anchors' && residueStrArray[j] !== 'strands' && residueStrArray[j] !== 'loops') { // residue name
59849
59985
  let tmpStr = residueStrArray[j].toUpperCase();
59850
59986
  //oneLetterResidue =(residueStrArray[j].length === 1) ? tmpStr : me.utilsCls.residueName2Abbr(tmpStr);
59851
59987
  oneLetterResidueStr = tmpStr;
@@ -59914,6 +60050,16 @@ class SelectByCommand {
59914
60050
  for(let m in chainAtomHash) {
59915
60051
  // residue could also be 'proteins', 'nucleotides', 'chemicals', 'ions', and 'water'
59916
60052
  ic.atoms[m].resn.substr(0,3).toUpperCase();
60053
+ let resid = molecule_chain + '_' + ic.atoms[m].resi;
60054
+ let refnumLabel, refnumStr, refnum;
60055
+ if(bRefnum) {
60056
+ refnumLabel = ic.resid2refnum[resid];
60057
+ if(refnumLabel) {
60058
+ refnumStr = ic.refnumCls.rmStrandFromRefnumlabel(refnumLabel);
60059
+ refnum = parseInt(refnumStr);
60060
+ }
60061
+ }
60062
+
59917
60063
  if(bAllResidues
59918
60064
  //|| me.utilsCls.residueName2Abbr(tmpStr) === oneLetterResidue
59919
60065
  ||(residueStrArray[j] === 'proteins' && m in ic.proteins)
@@ -59921,32 +60067,23 @@ class SelectByCommand {
59921
60067
  ||(residueStrArray[j] === 'chemicals' && m in ic.chemicals)
59922
60068
  ||(residueStrArray[j] === 'ions' && m in ic.ions)
59923
60069
  ||(residueStrArray[j] === 'water' && m in ic.water)
60070
+ ||(bRefnum && refnumLabel && residueStrArray[j] === 'anchors' && refnum % 100 == 50)
60071
+ ||(bRefnum && refnumLabel && residueStrArray[j] === 'strands' && !ic.residIgLoop.hasOwnProperty(resid))
60072
+ ||(bRefnum && refnumLabel && residueStrArray[j] === 'loops' && ic.residIgLoop.hasOwnProperty(resid))
59924
60073
  ) {
59925
60074
  // many duplicates
59926
60075
  if(i === 0) {
59927
- residueHash[molecule_chain + '_' + ic.atoms[m].resi] = 1;
60076
+ residueHash[resid] = 1;
59928
60077
  }
59929
60078
  else {
59930
- let residTmp = molecule_chain + '_' + ic.atoms[m].resi;
59931
- //if(!residueHash.hasOwnProperty(residTmp)) residueHash[residTmp] = undefined;
59932
- if(!residueHash.hasOwnProperty(residTmp)) delete residueHash[residTmp];
60079
+ if(!residueHash.hasOwnProperty(resid)) delete residueHash[resid];
59933
60080
  }
59934
60081
 
59935
60082
  for(let n = 0, nl = atomStrArray.length; n < nl; ++n) {
59936
60083
  let atomStr = atomStrArray[n];
59937
60084
 
59938
60085
  atomHash = this.processAtomStr(atomStr, atomHash, i, m);
59939
-
59940
- // if(atomStr === '*' || atomStr === ic.atoms[m].name) {
59941
- // if(i === 0) {
59942
- // atomHash[m] = 1;
59943
- // }
59944
- // else {
59945
- // if(!atomHash.hasOwnProperty(m)) delete atomHash[m];
59946
- // }
59947
- // }
59948
60086
  }
59949
-
59950
60087
  }
59951
60088
  } // end for(let m in atomHash) {
59952
60089
 
@@ -62063,72 +62200,168 @@ class Dssp {
62063
62200
  async showIgRefNum() { let ic = this.icn3d, me = ic.icn3dui;
62064
62201
  let thisClass = this;
62065
62202
 
62066
- // if(ic.resid2refnum && Object.keys(ic.resid2refnum).length > 0) {
62067
- // ic.bShowRefnum = true;
62068
-
62069
- // // open sequence view
62070
- // ic.hAtomsRefnum = {};
62071
- // ic.bResetAnno = true;
62072
- // await ic.showAnnoCls.showAnnotations();
62073
- // ic.annotationCls.setAnnoViewAndDisplay('detailed view');
62203
+ // if(ic.pdbDataArray) {
62204
+ // await thisClass.parseRefPdbData(ic.pdbDataArray);
62074
62205
  // }
62075
- if(ic.pdbDataArray) {
62076
- await thisClass.parseRefPdbData(ic.pdbDataArray);
62077
- }
62078
- else {
62079
- //ic.refpdbArray = ['1bqu_fn3', '1cd8_igv', '1cdh_cd4', '1dr9_cd80', '1hnf_cd2', '1hxm_d', '1hxm_g', '1ifr_lamin', '1ncn_cd86', '1t6v_vnar', '1yjd_cd28', '2atp_a', '2atp_b', '2dm3_iset', '3kys_tead1', '3pv7_ncr', '4f9l_cd277', '4gos_vtc', '4i0k_cd276', '4jqi_b', '4z18_cd274', '4zqk_pd1', '4zt1_e', '5esv_vh', '5esv_vl', '6al5_cd19', '6jxr_a', '6jxr_b', '6jxr_d', '6jxr_e', '6jxr_g', '6oil_vista', '6rp8_at', '6rp8_t', '6umt_cd273', '6x4g_cd275', '6x4g_icos', '7xq8_a', '7xq8_b', 'q71h61_ild', 'q9um44_hhl', 'p42081_cd86', 'q7z7d3_vtc', '1bqu_x', '1cdh_x', '1hnf_x', '1hxm_dx', '1hxm_gx', '4jqi_x', '4zt1_x', '5esv_vhx', '5esv_vlx', '6jxr_ax', '6jxr_bx', '1dr9_x', '3pv7_x', '4f9l_x', '4iok_x', '4z18_x', '6x4g_cd275x', 'q9um44_x'];
62080
-
62081
- //ic.refpdbArray = ['1bqu_fn3', '1cd8_igv', '1cdh_cd4', '1dr9_cd80', '1hnf_cd2', '1hxm_d', '1hxm_g', '1ifr_lamin', '1ncn_cd86', '1t6v_vnar', '1yjd_cd28', '2atp_a', '2atp_b', '2dm3_iset', '3kys_tead1', '3pv7_ncr', '4f9l_cd277', '4gos_vtc', '4i0k_cd276', '4jqi_b', '4z18_cd274', '4zqk_pd1', '4zt1_e', '5esv_vh', '5esv_vl', '6al5_cd19', '6jxr_a', '6jxr_b', '6jxr_d', '6jxr_e', '6jxr_g', '6oil_vista', '6rp8_at', '6rp8_t', '6umt_cd273', '6x4g_cd275', '6x4g_icos', '7xq8_a', '7xq8_b', 'q71h61_ild', 'q9um44_hhl'];
62082
-
62083
- //ic.refpdbArray = ['ASF1A_2iijA_human', 'BArrestin1_4jqiA_rat_n1', 'BTLA_2aw2A_human_Iset', 'C3_2qkiD_human_n1', 'CD19_6al5A_human_C2orV-n1', 'CD2_1hnfA_human_C2-n2', 'CD2_1hnfA_human_V-n1', 'CD8a_1cd8A_human_V', 'CoAtomerGamma1_1r4xA_human', 'Contactin1_3s97C_human_C2-n2', 'CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'FAB-HEAVY_5esv_C1-n2', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2', 'FAB-LIGHT_5esv_V-n1', 'GHR_1axiB_human_FN3-n1', 'ICOS_6x4gA_human_V', 'IL6Rb_1bquB_human_FN3-n2', 'InsulinR_8guyE_human_FN3-n2', 'IsdA_2iteA_bacteria', 'LAG3_7tzgD_human_C2-n2', 'LAG3_7tzgD_human_V-n1', 'LaminAC_1ifrA_human', 'MHCIa_7phrH_human_C1', 'MPT63_1lmiA_bacteria', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'PD1_4zqkB_human_V', 'PDL1_4z18B_human_V-n1', 'Palladin_2dm3A_human_Iset-n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2', 'TCRa_6jxrm_human_C1-n2', 'TCRa_6jxrm_human_V-n1', 'TEAD1_3kysC_human', 'TP34_2o6cA_bacteria', 'Titin_4uowM_human_Unk-n152', 'VISTA_6oilA_human_V', 'VNAR_1t6vN_shark_V', 'VTCN1_Q7Z7D3_human_V-n2'];
62084
-
62085
- //ic.refpdbArray2 = ['B2Microglobulin_7phrL_human_C1.pdb', 'Contactin1_2ee2A_human_FN3-n9.pdb', 'IL6Rb_1bquB_human_FN3-n3.pdb', 'InsulinR_8guyE_human_FN3-n1.pdb', 'JAM1_1nbqA_human_VorIset-n2.pdb', 'NaCaExchanger_2fwuA_dog_n2.pdb', 'ORF7a_1xakA_virus.pdb', 'Sidekick2_1wf5A_human_FN3-n7.pdb', 'Siglec3_5j0bB_human_C2-n2.pdb', 'TP47_1o75A_bacteria.pdb'];
62086
-
62087
- ic.refpdbArray = ['ASF1A_2iijA_human', 'BArrestin1_4jqiA_rat_n1', 'BTLA_2aw2A_human_Iset', 'C3_2qkiD_human_n1', 'CD19_6al5A_human_C2orV-n1', 'CD2_1hnfA_human_C2-n2', 'CD2_1hnfA_human_V-n1', 'CD8a_1cd8A_human_V', 'CoAtomerGamma1_1r4xA_human', 'Contactin1_3s97C_human_C2-n2', 'CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'FAB-HEAVY_5esv_C1-n2', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2', 'FAB-LIGHT_5esv_V-n1', 'GHR_1axiB_human_FN3-n1', 'ICOS_6x4gA_human_V', 'IL6Rb_1bquB_human_FN3-n2', 'InsulinR_8guyE_human_FN3-n2', 'IsdA_2iteA_bacteria', 'LAG3_7tzgD_human_C2-n2', 'LAG3_7tzgD_human_V-n1', 'LaminAC_1ifrA_human', 'MHCIa_7phrH_human_C1', 'MPT63_1lmiA_bacteria', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'PD1_4zqkB_human_V', 'PDL1_4z18B_human_V-n1', 'Palladin_2dm3A_human_Iset-n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2', 'TCRa_6jxrm_human_C1-n2', 'TCRa_6jxrm_human_V-n1', 'TEAD1_3kysC_human', 'TP34_2o6cA_bacteria', 'Titin_4uowM_human_Unk-n152', 'VISTA_6oilA_human_V', 'VNAR_1t6vN_shark_V', 'VTCN1_Q7Z7D3_human_V-n2', 'B2Microglobulin_7phrL_human_C1.pdb', 'Contactin1_2ee2A_human_FN3-n9.pdb', 'IL6Rb_1bquB_human_FN3-n3.pdb', 'InsulinR_8guyE_human_FN3-n1.pdb', 'JAM1_1nbqA_human_VorIset-n2.pdb', 'NaCaExchanger_2fwuA_dog_n2.pdb', 'ORF7a_1xakA_virus.pdb', 'Sidekick2_1wf5A_human_FN3-n7.pdb', 'Siglec3_5j0bB_human_C2-n2.pdb', 'TP47_1o75A_bacteria.pdb'];
62088
-
62089
- if(ic.pdbDataArray) {
62090
- await thisClass.parseRefPdbData(ic.pdbDataArray);
62091
- }
62092
- else {
62093
-
62094
- let pdbAjaxArray = [];
62095
- for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
62096
- //let urlpdb = me.htmlCls.baseUrl + "icn3d/refpdb/" + ic.refpdbArray[k] + ".pdb";
62097
- let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refpdbid=" + ic.refpdbArray[k];
62206
+ // else {
62207
+ //ic.refpdbArray = ['ASF1A_2iijA_human', 'B2Microglobulin_7phrL_human_C1', 'BArrestin1_4jqiA_rat_n1', 'BTLA_2aw2A_human_Iset', 'C3_2qkiD_human_n1', 'CD19_6al5A_human_C2orV-n1', 'CD2_1hnfA_human_C2-n2', 'CD2_1hnfA_human_V-n1', 'CD8a_1cd8A_human_V', 'CoAtomerGamma1_1r4xA_human', 'Contactin1_2ee2A_human_FN3-n9', 'Contactin1_3s97C_human_C2-n2', 'CuZnSuperoxideDismutase_1hl5C_human', 'ECadherin_4zt1A_human_n2', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', 'FAB-HEAVY_5esv_C1-n2', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_C1-n2', 'FAB-LIGHT_5esv_V-n1', 'GHR_1axiB_human_FN3-n1', 'ICOS_6x4gA_human_V', 'IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3', 'InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2', 'IsdA_2iteA_bacteria', 'JAM1_1nbqA_human_VorIset-n2', 'LAG3_7tzgD_human_C2-n2', 'LAG3_7tzgD_human_V-n1', 'LaminAC_1ifrA_human', 'MHCIa_7phrH_human_C1', 'MPT63_1lmiA_bacteria', 'NaCaExchanger_2fwuA_dog_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'ORF7a_1xakA_virus', 'PD1_4zqkB_human_V', 'PDL1_4z18B_human_V-n1', 'Palladin_2dm3A_human_Iset-n1', 'RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2', 'Sidekick2_1wf5A_human_FN3-n7', 'Siglec3_5j0bB_human_C2-n2', 'TCRa_6jxrm_human_C1-n2', 'TCRa_6jxrm_human_V-n1', 'TEAD1_3kysC_human', 'TP34_2o6cA_bacteria', 'TP47_1o75A_bacteria', 'Titin_4uowM_human_Unk-n152', 'VISTA_6oilA_human_V', 'VNAR_1t6vN_shark_V', 'VTCN1_Q7Z7D3_human_V-n2'];
62208
+
62209
+ //ic.refpdbArray = ['1ASF1A_2iijA_human', '1B2Microglobulin_7phrL_human_C1', '1BArrestin1_4jqiA_rat_n1', '1BTLA_2aw2A_human_Iset', '1C3_2qkiD_human_n1', '1CD19_6al5A_human_C2orV-n1', '1CD2_1hnfA_human_C2-n2', '1CD2_1hnfA_human_V-n1', '1CD8a_1cd8A_human_V', '1CoAtomerGamma1_1r4xA_human', '1Contactin1_2ee2A_human_FN3-n9', '1Contactin1_3s97C_human_C2-n2', '1CuZnSuperoxideDismutase_1hl5C_human', '1ECadherin_4zt1A_human_n2', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1FAB-HEAVY_5esv_C1-n2', '1FAB-HEAVY_5esv_V-n1', '1FAB-LIGHT_5esv_C1-n2', '1FAB-LIGHT_5esv_V-n1', '1GHR_1axiB_human_FN3-n1', '1ICOS_6x4gA_human_V', '1IL6Rb_1bquB_human_FN3-n2', '1IL6Rb_1bquB_human_FN3-n3', '1InsulinR_8guyE_human_FN3-n1', '1InsulinR_8guyE_human_FN3-n2', '1IsdA_2iteA_bacteria', '1JAM1_1nbqA_human_VorIset-n2', '1LAG3_7tzgD_human_C2-n2', '1LAG3_7tzgD_human_V-n1', '1LaminAC_1ifrA_human', '1MHCIa_7phrH_human_C1', '1MPT63_1lmiA_bacteria', '1NaCaExchanger_2fwuA_dog_n2', '1NaKATPaseTransporterBeta_2zxeB_spurdogshark', '1ORF7a_1xakA_virus', '1PD1_4zqkB_human_V', '1PDL1_4z18B_human_V-n1', '1Palladin_2dm3A_human_Iset-n1', '1RBPJ_6py8C_human_Unk-n1', '1RBPJ_6py8C_human_Unk-n2', '1Sidekick2_1wf5A_human_FN3-n7', '1Siglec3_5j0bB_human_C2-n2', '1TCRa_6jxrm_human_C1-n2', '1TCRa_6jxrm_human_V-n1', '1TEAD1_3kysC_human', '1TP34_2o6cA_bacteria', '1TP47_1o75A_bacteria', '1Titin_4uowM_human_Unk-n152', '1VISTA_6oilA_human_V', '1VNAR_1t6vN_shark_V', '1VTCN1_Q7Z7D3_human_V-n2'];
62210
+
62211
+ /*
62212
+ // round 1
62213
+ ic.refpdbArray = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'GHR_1axiB_human_FN3-n1', 'FAB-HEAVY_5esv_C1-n2', 'IL6Rb_1bquB_human_FN3-n2', 'LAG3_7tzgD_human_C2-n2', 'VNAR_1t6vN_shark_V', 'VISTA_6oilA_human_V', 'CD19_6al5A_human_C2orV-n1', 'TP47_1o75A_bacteria', 'TP34_2o6cA_bacteria'];
62214
+ // round 2
62215
+ ic.refpdbHash = {};
62216
+
62217
+ ic.refpdbHash['NaKATPaseTransporterBeta_2zxeB_spurdogshark'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark', 'ORF7a_1xakA_virus', 'NaCaExchanger_2fwuA_dog_n2', 'BArrestin1_4jqiA_rat_n1', 'ECadherin_4zt1A_human_n2', 'C3_2qkiD_human_n1', 'RBPJ_6py8C_human_Unk-n1'];
62218
+ ic.refpdbHash['GHR_1axiB_human_FN3-n1'] = ['GHR_1axiB_human_FN3-n1', 'Siglec3_5j0bB_human_C2-n2', 'ICOS_6x4gA_human_V', 'CD2_1hnfA_human_C2-n2', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
62219
+ ic.refpdbHash['FAB-HEAVY_5esv_C1-n2'] = ['FAB-HEAVY_5esv_C1-n2', 'B2Microglobulin_7phrL_human_C1', 'VTCN1_Q7Z7D3_human_V-n2', 'FAB-LIGHT_5esv_C1-n2', 'MHCIa_7phrH_human_C1'];
62220
+ ic.refpdbHash['IL6Rb_1bquB_human_FN3-n2'] = ['IL6Rb_1bquB_human_FN3-n2', 'Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n3', 'InsulinR_8guyE_human_FN3-n1', 'Sidekick2_1wf5A_human_FN3-n7', 'InsulinR_8guyE_human_FN3-n2'];
62221
+ ic.refpdbHash['LAG3_7tzgD_human_C2-n2'] = ['LAG3_7tzgD_human_C2-n2', 'JAM1_1nbqA_human_VorIset-n2', 'Contactin1_3s97C_human_C2-n2', 'Palladin_2dm3A_human_Iset-n1', 'BTLA_2aw2A_human_Iset', 'Titin_4uowM_human_Unk-n152'];
62222
+ ic.refpdbHash['VNAR_1t6vN_shark_V'] = ['VNAR_1t6vN_shark_V', 'PD1_4zqkB_human_V', 'CD8a_1cd8A_human_V', 'TCRa_6jxrm_human_V-n1', 'FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1'];
62223
+ ic.refpdbHash['VISTA_6oilA_human_V'] = ['VISTA_6oilA_human_V', 'LAG3_7tzgD_human_V-n1', 'PDL1_4z18B_human_V-n1', 'CD2_1hnfA_human_V-n1'];
62224
+ ic.refpdbHash['CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
62225
+ ic.refpdbHash['TP47_1o75A_bacteria'] = ['TP47_1o75A_bacteria', 'TEAD1_3kysC_human', 'RBPJ_6py8C_human_Unk-n2', 'CuZnSuperoxideDismutase_1hl5C_human', 'ASF1A_2iijA_human'];
62226
+ ic.refpdbHash['TP34_2o6cA_bacteria'] = ['TP34_2o6cA_bacteria', 'TCRa_6jxrm_human_C1-n2', 'IsdA_2iteA_bacteria', 'LaminAC_1ifrA_human', 'CoAtomerGamma1_1r4xA_human', 'MPT63_1lmiA_bacteria'];
62227
+ */
62228
+ /*
62229
+ // round 1
62230
+ ic.refpdbArray = ['NaCaExchanger_2fwuA_dog_n2', 'C3_2qkiD_human_n1', 'Siglec3_5j0bB_human_C2-n2', 'ICOS_6x4gA_human_V', 'B2Microglobulin_7phrL_human_C1', 'VTCN1_Q7Z7D3_human_V-n2', 'Contactin1_2ee2A_human_FN3-n9', 'InsulinR_8guyE_human_FN3-n1', 'JAM1_1nbqA_human_VorIset-n2', 'LAG3_7tzgD_human_C2-n2', 'Palladin_2dm3A_human_Iset-n1', 'PD1_4zqkB_human_V', 'CD8a_1cd8A_human_V', 'VISTA_6oilA_human_V', 'LAG3_7tzgD_human_V-n1', 'TP47_1o75A_bacteria', 'TP34_2o6cA_bacteria', 'TEAD1_3kysC_human', 'RBPJ_6py8C_human_Unk-n2', 'TCRa_6jxrm_human_C1-n2', 'IsdA_2iteA_bacteria', 'LaminAC_1ifrA_human', 'CD19_6al5A_human_C2orV-n1'];
62231
+
62232
+ // round 2
62233
+ ic.refpdbHash = {};
62234
+ ic.refpdbHash['NaCaExchanger_2fwuA_dog_n2'] = ['NaCaExchanger_2fwuA_dog_n2', 'ORF7a_1xakA_virus', 'ECadherin_4zt1A_human_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
62235
+ ic.refpdbHash['C3_2qkiD_human_n1'] = ['C3_2qkiD_human_n1', 'RBPJ_6py8C_human_Unk-n1', 'BArrestin1_4jqiA_rat_n1'];
62236
+ ic.refpdbHash['Siglec3_5j0bB_human_C2-n2'] = ['Siglec3_5j0bB_human_C2-n2', 'CD2_1hnfA_human_C2-n2', 'GHR_1axiB_human_FN3-n1'];
62237
+ ic.refpdbHash['ICOS_6x4gA_human_V'] = ['ICOS_6x4gA_human_V', 'Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
62238
+ ic.refpdbHash['B2Microglobulin_7phrL_human_C1'] = ['B2Microglobulin_7phrL_human_C1', 'FAB-HEAVY_5esv_C1-n2', 'MHCIa_7phrH_human_C1'];
62239
+ ic.refpdbHash['VTCN1_Q7Z7D3_human_V-n2'] = ['VTCN1_Q7Z7D3_human_V-n2', 'FAB-LIGHT_5esv_C1-n2'];
62240
+ ic.refpdbHash['Contactin1_2ee2A_human_FN3-n9'] = ['Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n3', 'Sidekick2_1wf5A_human_FN3-n7'];
62241
+ ic.refpdbHash['InsulinR_8guyE_human_FN3-n1'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n2'];
62242
+ ic.refpdbHash['JAM1_1nbqA_human_VorIset-n2'] = ['JAM1_1nbqA_human_VorIset-n2', 'Contactin1_3s97C_human_C2-n2'];
62243
+ ic.refpdbHash['LAG3_7tzgD_human_C2-n2'] = ['LAG3_7tzgD_human_C2-n2', 'BTLA_2aw2A_human_Iset'];
62244
+ ic.refpdbHash['Palladin_2dm3A_human_Iset-n1'] = ['Palladin_2dm3A_human_Iset-n1', 'Titin_4uowM_human_Unk-n152'];
62245
+ ic.refpdbHash['PD1_4zqkB_human_V'] = ['PD1_4zqkB_human_V', 'TCRa_6jxrm_human_V-n1', 'FAB-LIGHT_5esv_V-n1'];
62246
+ ic.refpdbHash['CD8a_1cd8A_human_V'] = ['CD8a_1cd8A_human_V', 'FAB-HEAVY_5esv_V-n1', 'VNAR_1t6vN_shark_V'];
62247
+ ic.refpdbHash['VISTA_6oilA_human_V'] = ['VISTA_6oilA_human_V', 'PDL1_4z18B_human_V-n1', 'CD2_1hnfA_human_V-n1'];
62248
+ ic.refpdbHash['LAG3_7tzgD_human_V-n1'] = ['LAG3_7tzgD_human_V-n1'];
62249
+ ic.refpdbHash['TP47_1o75A_bacteria'] = ['TP47_1o75A_bacteria'];
62250
+ ic.refpdbHash['TP34_2o6cA_bacteria'] = ['TP34_2o6cA_bacteria'];
62251
+ ic.refpdbHash['TEAD1_3kysC_human'] = ['TEAD1_3kysC_human', 'CuZnSuperoxideDismutase_1hl5C_human'];
62252
+ ic.refpdbHash['RBPJ_6py8C_human_Unk-n2'] = ['RBPJ_6py8C_human_Unk-n2', 'ASF1A_2iijA_human'];
62253
+ ic.refpdbHash['TCRa_6jxrm_human_C1-n2'] = ['TCRa_6jxrm_human_C1-n2'];
62254
+ ic.refpdbHash['IsdA_2iteA_bacteria'] = ['IsdA_2iteA_bacteria', 'CoAtomerGamma1_1r4xA_human'];
62255
+ ic.refpdbHash['LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human', 'MPT63_1lmiA_bacteria'];
62256
+ ic.refpdbHash['CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
62257
+ */
62258
+ // round 1
62259
+ ic.refpdbArray = ['1FAB-HEAVY_5esv_V-n1', '1CD2_1hnfA_human_V-n1', '1LAG3_7tzgD_human_C2-n2', '1BTLA_2aw2A_human_Iset', '1JAM1_1nbqA_human_VorIset-n2', '1Palladin_2dm3A_human_Iset-n1', '1FAB-HEAVY_5esv_C1-n2', '1FAB-LIGHT_5esv_C1-n2', '1BArrestin1_4jqiA_rat_n1', '1IL6Rb_1bquB_human_FN3-n3', '1Contactin1_2ee2A_human_FN3-n9', '1InsulinR_8guyE_human_FN3-n1', '1NaCaExchanger_2fwuA_dog_n2', '1CuZnSuperoxideDismutase_1hl5C_human', '1CoAtomerGamma1_1r4xA_human', '1RBPJ_6py8C_human_Unk-n2', '1CD2_1hnfA_human_C2-n2', '1GHR_1axiB_human_FN3-n1', '1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4', '1ICOS_6x4gA_human_V', '1TCRa_6jxrm_human_C1-n2', '1LaminAC_1ifrA_human', '1IsdA_2iteA_bacteria', '1MPT63_1lmiA_bacteria', '1CD19_6al5A_human_C2orV-n1', '1ORF7a_1xakA_virus', '1ECadherin_4zt1A_human_n2', '1ASF1A_2iijA_human'];
62260
+
62261
+ // round 2
62262
+ ic.refpdbHash = {};
62263
+ ic.refpdbHash['1FAB-HEAVY_5esv_V-n1'] = ['FAB-HEAVY_5esv_V-n1', 'CD8a_1cd8A_human_V', 'FAB-LIGHT_5esv_V-n1', 'VNAR_1t6vN_shark_V'];
62264
+ ic.refpdbHash['1CD2_1hnfA_human_V-n1'] = ['CD2_1hnfA_human_V-n1', 'Contactin1_3s97C_human_C2-n2', 'LAG3_7tzgD_human_V-n1'];
62265
+ ic.refpdbHash['1LAG3_7tzgD_human_C2-n2'] = ['LAG3_7tzgD_human_C2-n2', 'Siglec3_5j0bB_human_C2-n2'];
62266
+ ic.refpdbHash['1BTLA_2aw2A_human_Iset'] = ['BTLA_2aw2A_human_Iset', 'PD1_4zqkB_human_V', 'TCRa_6jxrm_human_V-n1'];
62267
+ ic.refpdbHash['1JAM1_1nbqA_human_VorIset-n2'] = ['JAM1_1nbqA_human_VorIset-n2', 'PDL1_4z18B_human_V-n1'];
62268
+ ic.refpdbHash['1Palladin_2dm3A_human_Iset-n1'] = ['Palladin_2dm3A_human_Iset-n1', 'Titin_4uowM_human_Unk-n152', 'VISTA_6oilA_human_V'];
62269
+ ic.refpdbHash['1FAB-HEAVY_5esv_C1-n2'] = ['FAB-HEAVY_5esv_C1-n2', 'B2Microglobulin_7phrL_human_C1', 'MHCIa_7phrH_human_C1'];
62270
+ ic.refpdbHash['1FAB-LIGHT_5esv_C1-n2'] = ['FAB-LIGHT_5esv_C1-n2', 'VTCN1_Q7Z7D3_human_V-n2'];
62271
+ ic.refpdbHash['1BArrestin1_4jqiA_rat_n1'] = ['BArrestin1_4jqiA_rat_n1', 'C3_2qkiD_human_n1', 'RBPJ_6py8C_human_Unk-n1'];
62272
+ ic.refpdbHash['1IL6Rb_1bquB_human_FN3-n3'] = ['IL6Rb_1bquB_human_FN3-n3', 'Sidekick2_1wf5A_human_FN3-n7'];
62273
+ ic.refpdbHash['1Contactin1_2ee2A_human_FN3-n9'] = ['Contactin1_2ee2A_human_FN3-n9', 'IL6Rb_1bquB_human_FN3-n2'];
62274
+ ic.refpdbHash['1InsulinR_8guyE_human_FN3-n1'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
62275
+ ic.refpdbHash['1NaCaExchanger_2fwuA_dog_n2'] = ['NaCaExchanger_2fwuA_dog_n2', 'NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
62276
+ ic.refpdbHash['1CuZnSuperoxideDismutase_1hl5C_human'] = ['CuZnSuperoxideDismutase_1hl5C_human', 'TEAD1_3kysC_human'];
62277
+ ic.refpdbHash['1CoAtomerGamma1_1r4xA_human'] = ['CoAtomerGamma1_1r4xA_human', 'TP34_2o6cA_bacteria'];
62278
+ ic.refpdbHash['1RBPJ_6py8C_human_Unk-n2'] = ['RBPJ_6py8C_human_Unk-n2', 'TP47_1o75A_bacteria'];
62279
+
62280
+ ic.refpdbHash['1CD2_1hnfA_human_C2-n2'] = ['CD2_1hnfA_human_C2-n2'];
62281
+ ic.refpdbHash['1GHR_1axiB_human_FN3-n1'] = ['GHR_1axiB_human_FN3-n1'];
62282
+ ic.refpdbHash['1Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
62283
+ ic.refpdbHash['1ICOS_6x4gA_human_V'] = ['ICOS_6x4gA_human_V'];
62284
+ ic.refpdbHash['1TCRa_6jxrm_human_C1-n2'] = ['TCRa_6jxrm_human_C1-n2'];
62285
+ ic.refpdbHash['1LaminAC_1ifrA_human'] = ['LaminAC_1ifrA_human'];
62286
+ ic.refpdbHash['1IsdA_2iteA_bacteria'] = ['IsdA_2iteA_bacteria'];
62287
+ ic.refpdbHash['1MPT63_1lmiA_bacteria'] = ['MPT63_1lmiA_bacteria'];
62288
+ ic.refpdbHash['1CD19_6al5A_human_C2orV-n1'] = ['CD19_6al5A_human_C2orV-n1'];
62289
+ ic.refpdbHash['1ORF7a_1xakA_virus'] = ['ORF7a_1xakA_virus'];
62290
+ ic.refpdbHash['1ECadherin_4zt1A_human_n2'] = ['ECadherin_4zt1A_human_n2'];
62291
+ ic.refpdbHash['1ASF1A_2iijA_human'] = ['ASF1A_2iijA_human'];
62292
+
62293
+ // use known ref structure
62294
+ ic.refpdbHash['5ESV'] = ['FAB-HEAVY_5esv_V-n1', 'FAB-LIGHT_5esv_V-n1', 'FAB-HEAVY_5esv_C1-n2', 'FAB-LIGHT_5esv_C1-n2'];
62295
+ ic.refpdbHash['8GUY'] = ['InsulinR_8guyE_human_FN3-n1', 'InsulinR_8guyE_human_FN3-n2'];
62296
+ ic.refpdbHash['6JXR'] = ['TCRa_6jxrm_human_V-n1', 'TCRa_6jxrm_human_C1-n2'];
62297
+ ic.refpdbHash['1HNF'] = ['CD2_1hnfA_human_V-n1', 'CD2_1hnfA_human_C2-n2'];
62298
+ ic.refpdbHash['7TZG'] = ['LAG3_7tzgD_human_V-n1', 'LAG3_7tzgD_human_C2-n2'];
62299
+ ic.refpdbHash['6PY8'] = ['RBPJ_6py8C_human_Unk-n1', 'RBPJ_6py8C_human_Unk-n2'];
62300
+ ic.refpdbHash['1BQU'] = ['IL6Rb_1bquB_human_FN3-n2', 'IL6Rb_1bquB_human_FN3-n3'];
62301
+
62302
+ ic.refpdbHash['1R4X'] = ['CoAtomerGamma1_1r4xA_human'];
62303
+ ic.refpdbHash['6OIL'] = ['VISTA_6oilA_human_V'];
62304
+ ic.refpdbHash['2ZXE'] = ['NaKATPaseTransporterBeta_2zxeB_spurdogshark'];
62305
+ ic.refpdbHash['1I8A'] = ['Endo-1,4-BetaXylanase10A_1i8aA_bacteria_n4'];
62306
+ ic.refpdbHash['2FWU'] = ['NaCaExchanger_2fwuA_dog_n2'];
62307
+ ic.refpdbHash['4JQI'] = ['BArrestin1_4jqiA_rat_n1'];
62308
+ ic.refpdbHash['1NBQ'] = ['JAM1_1nbqA_human_VorIset-n2'];
62309
+ ic.refpdbHash['1O75'] = ['TP47_1o75A_bacteria'];
62310
+ ic.refpdbHash['7PHR'] = ['MHCIa_7phrH_human_C1'];
62311
+ ic.refpdbHash['2IIJ'] = ['ASF1A_2iijA_human'];
62312
+ ic.refpdbHash['4Z18'] = ['PDL1_4z18B_human_V-n1'];
62313
+ ic.refpdbHash['1T6V'] = ['VNAR_1t6vN_shark_V'];
62314
+ ic.refpdbHash['2O6C'] = ['TP34_2o6cA_bacteria'];
62315
+ ic.refpdbHash['3KYS'] = ['TEAD1_3kysC_human'];
62316
+ ic.refpdbHash['7PHR'] = ['B2Microglobulin_7phrL_human_C1'];
62317
+ ic.refpdbHash['2AW2'] = ['BTLA_2aw2A_human_Iset'];
62318
+ ic.refpdbHash['1HL5'] = ['CuZnSuperoxideDismutase_1hl5C_human'];
62319
+ ic.refpdbHash['1WF5'] = ['Sidekick2_1wf5A_human_FN3-n7'];
62320
+ ic.refpdbHash['5J0B'] = ['Siglec3_5j0bB_human_C2-n2'];
62321
+ ic.refpdbHash['1IFR'] = ['LaminAC_1ifrA_human'];
62322
+ ic.refpdbHash['Q7Z7D3'] = ['VTCN1_Q7Z7D3_human_V-n2'];
62323
+ ic.refpdbHash['4ZQK'] = ['PD1_4zqkB_human_V'];
62324
+ ic.refpdbHash['2DM3'] = ['Palladin_2dm3A_human_Iset-n1'];
62325
+ ic.refpdbHash['2ITE'] = ['IsdA_2iteA_bacteria'];
62326
+ ic.refpdbHash['1XAK'] = ['ORF7a_1xakA_virus'];
62327
+ ic.refpdbHash['4ZT1'] = ['ECadherin_4zt1A_human_n2'];
62328
+ ic.refpdbHash['1LMI'] = ['MPT63_1lmiA_bacteria'];
62329
+ ic.refpdbHash['1CD8'] = ['CD8a_1cd8A_human_V'];
62330
+ ic.refpdbHash['3S97'] = ['Contactin1_3s97C_human_C2-n2'];
62331
+ ic.refpdbHash['1AXI'] = ['GHR_1axiB_human_FN3-n1'];
62332
+ ic.refpdbHash['6X4G'] = ['ICOS_6x4gA_human_V'];
62333
+ ic.refpdbHash['2EE2'] = ['Contactin1_2ee2A_human_FN3-n9'];
62334
+ ic.refpdbHash['4UOW'] = ['Titin_4uowM_human_Unk-n152'];
62335
+ ic.refpdbHash['6A15'] = ['CD19_6al5A_human_C2orV-n1'];
62336
+ ic.refpdbHash['2QKI'] = ['C3_2qkiD_human_n1'];
62337
+
62338
+ // if(ic.pdbDataArray) {
62339
+ // await thisClass.parseRefPdbData(ic.pdbDataArray);
62340
+ // }
62341
+ // else {
62098
62342
 
62099
- let pdbAjax = me.getAjaxPromise(urlpdb, 'text');
62343
+ let pdbAjaxArray = [];
62344
+ for(let k = 0, kl = ic.refpdbArray.length; k < kl; ++k) {
62345
+ //let urlpdb = me.htmlCls.baseUrl + "icn3d/refpdb/" + ic.refpdbArray[k] + ".pdb";
62346
+ let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refpdbid=" + ic.refpdbArray[k];
62100
62347
 
62101
- pdbAjaxArray.push(pdbAjax);
62102
- }
62348
+ let pdbAjax = me.getAjaxPromise(urlpdb, 'text');
62103
62349
 
62104
- // try {
62105
- // if(!me.bNode) {
62106
- let allPromise = Promise.allSettled(pdbAjaxArray);
62107
- ic.pdbDataArray = await allPromise;
62108
- await thisClass.parseRefPdbData(ic.pdbDataArray);
62109
- // }
62110
- // else {
62111
- // ic.pdbDataArray = [];
62112
- // for(let i = 0, il = pdbAjaxArray.length; i < il; ++i) {
62113
- // try {
62114
- // let dataTmp = await pdbAjaxArray[i];
62115
- // ic.pdbDataArray.push({'value': dataTmp});
62116
- // }
62117
- // catch(err) {
62118
- // ic.pdbDataArray.push({'value': ''});
62119
- // }
62120
- // }
62121
-
62122
- // await thisClass.parseRefPdbData(ic.pdbDataArray);
62123
- // }
62124
- // }
62125
- // catch(err) {
62126
- // if(!me.bNode) var aaa = 1; //alert("Error in retrieveing reference PDB data...");
62127
- // //var aaa = 1; //alert("Error in retrieveing reference PDB data...");
62128
- // return;
62129
- // }
62130
- }
62350
+ pdbAjaxArray.push(pdbAjax);
62131
62351
  }
62352
+
62353
+ // try {
62354
+ let allPromise = Promise.allSettled(pdbAjaxArray);
62355
+ ic.pdbDataArray = await allPromise;
62356
+ await thisClass.parseRefPdbData(ic.pdbDataArray);
62357
+ // }
62358
+ // catch(err) {
62359
+ // if(!me.bNode) var aaa = 1; //alert("Error in retrieveing reference PDB data...");
62360
+ // //var aaa = 1; //alert("Error in retrieveing reference PDB data...");
62361
+ // return;
62362
+ // }
62363
+ // }
62364
+ // }
62132
62365
  }
62133
62366
 
62134
62367
  async parseRefPdbData(dataArray) { let ic = this.icn3d, me = ic.icn3dui;
@@ -62143,6 +62376,9 @@ class Dssp {
62143
62376
 
62144
62377
  // if(!ic.resid2domainid) ic.resid2domainid = {};
62145
62378
  ic.resid2domainid = {};
62379
+ ic.domainid2pdb = {};
62380
+
62381
+ let minResidues = 20;
62146
62382
 
62147
62383
  for(let i = 0, il = struArray.length; i < il; ++i) {
62148
62384
  let struct = struArray[i];
@@ -62153,7 +62389,7 @@ class Dssp {
62153
62389
 
62154
62390
  if(!ic.proteins.hasOwnProperty(ic.firstAtomObjCls.getFirstAtomObj(ic.chains[chainid]).serial)
62155
62391
  && !ic.proteins.hasOwnProperty(ic.firstAtomObjCls.getMiddleAtomObj(ic.chains[chainid]).serial)) continue;
62156
- if(ic.chainsSeq[chainid].length < 50) continue; // peptide
62392
+ if(ic.chainsSeq[chainid].length < minResidues) continue; // peptide
62157
62393
 
62158
62394
  let currAtoms = me.hashUtilsCls.intHash(ic.chains[chainid], ic.hAtoms);
62159
62395
  if(Object.keys(currAtoms).length == 0) continue;
@@ -62170,11 +62406,6 @@ class Dssp {
62170
62406
  //domainAtomsArray.push(ic.chains[chainid]);
62171
62407
  domainAtomsArray.push(currAtoms);
62172
62408
 
62173
- // for(let n = 0, nl = ic.chainsSeq[chainid].length; n < nl; ++n) {
62174
- // let resid = chainid + '_' + ic.chainsSeq[chainid][n].resi;
62175
- // ic.resid2domainid[resid] = chainid + '-0';
62176
- // }
62177
-
62178
62409
  let residueArray = ic.resid2specCls.atoms2residues(Object.keys(currAtoms));
62179
62410
  for(let n = 0, nl = residueArray.length; n < nl; ++n) {
62180
62411
  let resid = residueArray[n];
@@ -62205,6 +62436,7 @@ class Dssp {
62205
62436
  for(let k = 0, kl = domainAtomsArray.length; k < kl; ++k) {
62206
62437
  let pdb_target = ic.saveFileCls.getAtomPDB(domainAtomsArray[k], undefined, undefined, undefined, undefined, struct);
62207
62438
  let domainid = chainid + '-' + k;
62439
+ ic.domainid2pdb[domainid] = pdb_target;
62208
62440
 
62209
62441
  for(let index = 0, indexl = dataArray.length; index < indexl; ++index) {
62210
62442
  let struct2 = ic.defaultPdbId + index;
@@ -62216,31 +62448,19 @@ class Dssp {
62216
62448
  let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
62217
62449
  ajaxArray.push(alignAjax);
62218
62450
 
62219
- domainidpairArray.push(domainid + "," + index);
62451
+ domainidpairArray.push(domainid + "," + ic.refpdbArray[index]);
62220
62452
  }
62221
62453
  }
62222
62454
  }
62223
- }
62455
+ }
62224
62456
 
62225
62457
  // try {
62226
62458
  let dataArray2 = [];
62227
- // if(!me.bNode) {
62228
- let allPromise = Promise.allSettled(ajaxArray);
62229
- dataArray2 = await allPromise;
62230
- // }
62231
- // else {
62232
- // for(let i = 0, il = ajaxArray.length; i < il; ++i) {
62233
- // try {
62234
- // let dataTmp = await ajaxArray[i];
62235
- // dataArray2.push({'value': dataTmp});
62236
- // }
62237
- // catch(err) {
62238
- // dataArray2.push({'value': []});
62239
- // }
62240
- // }
62241
- // }
62242
-
62243
- await thisClass.parseAlignData(dataArray2, domainidpairArray);
62459
+ let allPromise = Promise.allSettled(ajaxArray);
62460
+ dataArray2 = await allPromise;
62461
+
62462
+ let bRound1 = true;
62463
+ await thisClass.parseAlignData(dataArray2, domainidpairArray, bRound1);
62244
62464
 
62245
62465
  /// if(ic.deferredRefnum !== undefined) ic.deferredRefnum.resolve();
62246
62466
  // }
@@ -62251,7 +62471,7 @@ class Dssp {
62251
62471
  // }
62252
62472
  }
62253
62473
 
62254
- async parseAlignData(dataArray, domainidpairArray) { let ic = this.icn3d, me = ic.icn3dui;
62474
+ async parseAlignData(dataArray, domainidpairArray, bRound1) { let ic = this.icn3d, me = ic.icn3dui;
62255
62475
  let thisClass = this;
62256
62476
 
62257
62477
  let tmscoreThreshold = 0.4; //0.5;
@@ -62259,16 +62479,18 @@ class Dssp {
62259
62479
  // find the best alignment for each chain
62260
62480
  let domainid2score = {}, domainid2segs = {}, chainid2segs = {};
62261
62481
 
62262
- if(!ic.chainid2index) ic.chainid2index = {};
62263
- if(!ic.domainid2index) ic.domainid2index = {};
62482
+ if(!ic.chainid2refpdbname) ic.chainid2refpdbname = {};
62483
+ if(!ic.domainid2refpdbname) ic.domainid2refpdbname = {};
62264
62484
  if(!ic.domainid2ig2kabat) ic.domainid2ig2kabat = {};
62265
62485
  if(!ic.domainid2ig2imgt) ic.domainid2ig2imgt = {};
62266
62486
 
62267
- // ic.chainid2index = {};
62268
- // ic.domainid2index = {};
62487
+ // ic.chainid2refpdbname = {};
62488
+ // ic.domainid2refpdbname = {};
62269
62489
  // ic.domainid2ig2kabat = {};
62270
62490
  // ic.domainid2ig2imgt = {};
62271
62491
 
62492
+ let minResidues = 20;
62493
+
62272
62494
  for(let i = 0, il = domainidpairArray.length; i < il; ++i) {
62273
62495
  let queryData = dataArray[i].value; //[0];
62274
62496
 
@@ -62278,12 +62500,14 @@ class Dssp {
62278
62500
  }
62279
62501
 
62280
62502
  if(queryData.length == 0) continue;
62503
+
62504
+ if(queryData[0].score < tmscoreThreshold || queryData[0].num_res < minResidues) continue;
62281
62505
 
62282
- if(queryData[0].score < tmscoreThreshold || queryData[0].num_res < 50) continue;
62283
-
62284
- let domainid_index = domainidpairArray[i].split(',');
62285
- let domainid = domainid_index[0];
62286
- domainid.split('-')[0];
62506
+ //let domainid_index = domainidpairArray[i].split(',');
62507
+ //let domainid = domainid_index[0];
62508
+ let domainid = domainidpairArray[i].substr(0, domainidpairArray[i].indexOf(','));
62509
+ let refpdbname = domainidpairArray[i].substr(domainidpairArray[i].indexOf(',') + 1);
62510
+ //let chainid = domainid.split('-')[0];
62287
62511
 
62288
62512
  // Ig-like domains: B (2150, 2150a, 2150b), C (3150, 3250), E (7150, 7250), F (8150, 8250) strands
62289
62513
  // Ig domain may require G (7050). But we'll leave that out for now.
@@ -62312,22 +62536,76 @@ class Dssp {
62312
62536
  if(!(bBstrand && bCstrand && bEstrand && bFstrand)) continue;
62313
62537
 
62314
62538
  if(!domainid2score.hasOwnProperty(domainid) || queryData[0].score > domainid2score[domainid]) {
62315
- domainid2score[domainid] = queryData[0].score;
62316
- if(!me.bNode) console.log(domainid + ' TM-score: ' + domainid2score[domainid] + ' matched ' + ic.refpdbArray[domainid_index[1]]);
62539
+ domainid2score[domainid] = queryData[0].score;
62317
62540
 
62318
- //ic.chainid2index[chainid] = domainid_index[1]; // could be several, just take the recent one for simplicity
62319
- ic.domainid2index[domainid] = domainid_index[1];
62541
+ ic.domainid2refpdbname[domainid] = refpdbname;
62320
62542
  domainid2segs[domainid] = queryData[0].segs;
62321
62543
  ic.domainid2ig2kabat[domainid] = queryData[0].ig2kabat;
62322
62544
  ic.domainid2ig2imgt[domainid] = queryData[0].ig2imgt;
62323
62545
  }
62324
62546
  }
62325
62547
 
62548
+ if(bRound1) {
62549
+ if(!me.bNode) console.log("Start round 2 alignment with the reference culsters " + JSON.stringify(ic.domainid2refpdbname));
62550
+
62551
+ // start round2
62552
+ let ajaxArray = [];
62553
+ let domainidpairArray3 = [];
62554
+ let urltmalign = me.htmlCls.baseUrl + "tmalign/tmalign.cgi";
62555
+ for(let domainid in ic.domainid2refpdbname) {
62556
+ let pdbAjaxArray = [];
62557
+ let refpdbname = ic.domainid2refpdbname[domainid];
62558
+ let pdbid = domainid.substr(0, domainid.indexOf('_'));
62559
+
62560
+ if(ic.refpdbHash.hasOwnProperty(pdbid)) {
62561
+ // use itself as the ref structure
62562
+ refpdbname = pdbid;
62563
+
62564
+ if(!me.bNode) console.log("Adjusted refpdbname for domainid " + domainid + ": " + refpdbname);
62565
+ }
62566
+
62567
+ for(let k = 0, kl = ic.refpdbHash[refpdbname].length; k < kl; ++k) {
62568
+ let urlpdb = me.htmlCls.baseUrl + "mmcifparser/mmcifparser.cgi?refpdbid=" + ic.refpdbHash[refpdbname][k];
62569
+
62570
+ let pdbAjax = me.getAjaxPromise(urlpdb, 'text');
62571
+
62572
+ pdbAjaxArray.push(pdbAjax);
62573
+ }
62574
+
62575
+ let allPromise2 = Promise.allSettled(pdbAjaxArray);
62576
+ ic.pdbDataArray = await allPromise2;
62577
+
62578
+ let pdb_target = ic.domainid2pdb[domainid];
62579
+ for(let index = 0, indexl = ic.pdbDataArray.length; index < indexl; ++index) {
62580
+ let struct2 = ic.defaultPdbId + index;
62581
+ let pdb_query = ic.pdbDataArray[index].value; //[0];
62582
+ let header = 'HEADER ' + struct2 + '\n';
62583
+ pdb_query = header + pdb_query;
62584
+
62585
+ let dataObj = {'pdb_query': pdb_query, 'pdb_target': pdb_target, "queryid": ic.refpdbHash[refpdbname][index]};
62586
+ let alignAjax = me.getAjaxPostPromise(urltmalign, dataObj);
62587
+ ajaxArray.push(alignAjax);
62588
+
62589
+ //domainidpairArray3.push(domainid + "," + refpdbname);
62590
+ domainidpairArray3.push(domainid + "," + ic.refpdbHash[refpdbname][index]);
62591
+ }
62592
+ }
62593
+
62594
+ let dataArray3 = [];
62595
+ let allPromise = Promise.allSettled(ajaxArray);
62596
+ dataArray3 = await allPromise;
62597
+
62598
+ await thisClass.parseAlignData(dataArray3, domainidpairArray3);
62599
+
62600
+ // end of round 2
62601
+ return;
62602
+ }
62603
+
62326
62604
  // combine domainid into chainid
62327
- for(let domainid in ic.domainid2index) {
62605
+ for(let domainid in ic.domainid2refpdbname) {
62328
62606
  let chainid = domainid.split('-')[0];
62329
- if(!ic.chainid2index.hasOwnProperty(chainid)) ic.chainid2index[chainid] = [];
62330
- ic.chainid2index[chainid].push(ic.domainid2index[domainid]);
62607
+ if(!ic.chainid2refpdbname.hasOwnProperty(chainid)) ic.chainid2refpdbname[chainid] = [];
62608
+ ic.chainid2refpdbname[chainid].push(ic.domainid2refpdbname[domainid]);
62331
62609
  }
62332
62610
 
62333
62611
  // combine domainid into chainid
@@ -62343,16 +62621,15 @@ if(!me.bNode) console.log(domainid + ' TM-score: ' + domainid2score[domainid] +
62343
62621
  if(!ic.chainsMapping) ic.chainsMapping = {};
62344
62622
  for(let chainid in chainid2segs) {
62345
62623
  let segArray = chainid2segs[chainid];
62346
- if(!me.bNode) {
62347
- let chainList = '';
62348
- for(let i = 0, il = ic.chainid2index[chainid].length; i < il; ++i) {
62349
- chainList += ic.refpdbArray[ic.chainid2index[chainid][i]] + " ";
62350
- }
62351
- console.log("The reference PDB(s) for chain " + chainid + " are " + chainList);
62352
- }
62624
+
62625
+ let chainList = '';
62626
+ for(let i = 0, il = ic.chainid2refpdbname[chainid].length; i < il; ++i) {
62627
+ chainList += ic.chainid2refpdbname[chainid][i] + " ";
62628
+ }
62629
+ if(!me.bNode) console.log("The reference PDB(s) for chain " + chainid + " are " + chainList);
62353
62630
 
62354
62631
  let prevStrand;
62355
- let bCd19 = ic.chainid2index[chainid].length == 1 && ic.refpdbArray[ic.chainid2index[chainid][0]] == '6al5_cd19';
62632
+ let bCd19 = ic.chainid2refpdbname[chainid].length == 1 && ic.chainid2refpdbname[chainid][0] == 'CD19_6al5A_human_C2orV-n1';
62356
62633
  for(let i = 0, il = segArray.length; i < il; ++i) {
62357
62634
  let seg = segArray[i];
62358
62635
  let qStart = seg.q_start;
@@ -62522,6 +62799,10 @@ if(!me.bNode) {
62522
62799
  await ic.showAnnoCls.showAnnotations();
62523
62800
  ic.annotationCls.setAnnoViewAndDisplay('detailed view');
62524
62801
  }
62802
+
62803
+ rmStrandFromRefnumlabel(refnumLabel) {
62804
+ return refnumLabel.replace(/'/g, '').replace(/\*/g, '').replace(/\^/g, '').replace(/\+/g, '').replace(/\-/g, '').substr(1); // C', C''
62805
+ }
62525
62806
  }
62526
62807
 
62527
62808
  /**
@@ -62547,18 +62828,35 @@ class Scap {
62547
62828
  }
62548
62829
  }
62549
62830
 
62550
- adjust2DWidth(id) { let ic = this.icn3d, me = ic.icn3dui;
62551
- let halfWidth = 125;
62831
+ adjust2DWidth(id) { let ic = this.icn3d; ic.icn3dui;
62552
62832
  id = ic.pre + id;
62553
-
62833
+ /*
62554
62834
  let height =($("#" + ic.pre + 'dl_selectannotations').hasClass("ui-dialog-content")) ? $("#" + ic.pre + 'dl_selectannotations').dialog( "option", "height") : me.htmlCls.HEIGHT;
62555
62835
  let width =($("#" + ic.pre + 'dl_selectannotations').hasClass("ui-dialog-content")) ? halfWidth * 2 : me.htmlCls.WIDTH * 0.5;
62556
62836
 
62557
62837
  $("#" + id).dialog( "option", "width", width );
62558
62838
  $("#" + id).dialog( "option", "height", height);
62559
- let position = { my: "left-" + halfWidth + " top+" + me.htmlCls.MENU_HEIGHT, at: "right top", of: "#" + ic.pre + "viewer", collision: "none" };
62839
+ let position = { my: "left-" + halfWidth + " top+" + me.htmlCls.MENU_HEIGHT, at: "right top", of: "#" + ic.pre + "viewer", collision: "none" }
62560
62840
 
62561
- $("#" + id).dialog( "option", "position", position );
62841
+ $("#" + id).dialog( "option", "position", position );
62842
+ */
62843
+
62844
+ let width, height, top;
62845
+
62846
+ if($("#" + ic.pre + 'dl_selectannotations').hasClass("ui-dialog-content")) {
62847
+ width = $("#" + ic.pre + 'dl_selectannotations').dialog( "option", "width");
62848
+ height = $("#" + ic.pre + 'dl_selectannotations').dialog( "option", "height") * 0.5;
62849
+ top = height;
62850
+
62851
+ $("#" + ic.pre + "dl_selectannotations").dialog( "option", "height", height);
62852
+
62853
+ $("#" + id).dialog( "option", "width", width );
62854
+ $("#" + id).dialog( "option", "height", height);
62855
+
62856
+ let position = { my: "left top", at: "right top+" + top, of: "#" + ic.pre + "viewer", collision: "none" };
62857
+
62858
+ $("#" + id).dialog( "option", "position", position );
62859
+ }
62562
62860
  }
62563
62861
 
62564
62862
  async retrieveScap(snp, bInteraction, bPdb) { let ic = this.icn3d, me = ic.icn3dui;