From 77ac7f545e96bd4bde47991f77291a71eb5b90e6 Mon Sep 17 00:00:00 2001 From: tcofoegbu Date: Fri, 19 Feb 2016 15:57:10 +0000 Subject: [PATCH] JAL-2009 Codes to enable storing inserted residues as features to their base residue position --- src/MCview/PDBChain.java | 27 +++++++++++++++++--- .../structure/StructureSelectionManager.java | 7 ++--- src/jalview/ws/sifts/SiftsClient.java | 1 + 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/MCview/PDBChain.java b/src/MCview/PDBChain.java index a43626f..e4e619c 100755 --- a/src/MCview/PDBChain.java +++ b/src/MCview/PDBChain.java @@ -295,11 +295,15 @@ public class PDBChain Vector resAnnotation = new Vector(); int i, iSize = atoms.size() - 1; int resNumber = -1; + char insCode = ' '; for (i = 0; i <= iSize; i++) { Atom tmp = atoms.elementAt(i); resNumber = tmp.resNumber; + insCode = tmp.insCode; + int res = resNumber; + char ins = insCode; if (i == 0) { @@ -309,7 +313,7 @@ public class PDBChain Vector resAtoms = new Vector(); // Add atoms to a vector while the residue number // remains the same as the first atom's resNumber (res) - while ((resNumber == res) && (i < atoms.size())) + while ((resNumber == res) && (ins == insCode) && (i < atoms.size())) { resAtoms.add(atoms.elementAt(i)); i++; @@ -317,6 +321,7 @@ public class PDBChain if (i < atoms.size()) { resNumber = atoms.elementAt(i).resNumber; + insCode = atoms.elementAt(i).insCode; } else { @@ -327,13 +332,28 @@ public class PDBChain // We need this to keep in step with the outer for i = loop i--; + // Add inserted residues as features to the base residue + Atom currAtom = resAtoms.get(0); + if (currAtom.insCode != ' ' + && residues.lastElement().atoms.get(0).resNumber == currAtom.resNumber) + { + SequenceFeature sf = new SequenceFeature("INSERTION", + currAtom.resName + ":" + currAtom.resNumIns + " " + pdbid + + id, "", offset + count - 1, offset + count - 1, + "PDB_INS"); + resFeatures.addElement(sf); + residues.lastElement().atoms.addAll(resAtoms); + } + else + { + // Make a new Residue object with the new atoms vector residues.addElement(new Residue(resAtoms, resNumber - 1, count)); Residue tmpres = residues.lastElement(); Atom tmpat = tmpres.atoms.get(0); // Make A new SequenceFeature for the current residue numbering - SequenceFeature sf = new SequenceFeature("RESNUM", tmpat.resName + SequenceFeature sf = new SequenceFeature("RES NUM", tmpat.resName + ":" + tmpat.resNumIns + " " + pdbid + id, "", offset + count, offset + count, pdbid); // MCview.PDBChain.PDBFILEFEATURE); @@ -371,7 +391,8 @@ public class PDBChain } seq.append(ResidueProperties.aa[((Integer) symbol).intValue()]); } - count++; + count++; + } } if (id.length() < 1) diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 6bc8f84..9d06aef 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -607,17 +607,18 @@ public class StructureSelectionManager HashMap mapping = new HashMap(); int resNum = -10000; int index = 0; + char insCode = ' '; do { Atom tmp = maxChain.atoms.elementAt(index); - if (resNum != tmp.resNumber && tmp.alignmentMapping != -1) + if ((resNum != tmp.resNumber || insCode != tmp.insCode) + && tmp.alignmentMapping != -1) { resNum = tmp.resNumber; + insCode = tmp.insCode; if (tmp.alignmentMapping >= -1) { - // TODO (JAL-1836) address root cause: negative residue no in PDB - // file mapping.put(tmp.alignmentMapping + 1, new int[] { tmp.resNumber, tmp.atomIndex }); } diff --git a/src/jalview/ws/sifts/SiftsClient.java b/src/jalview/ws/sifts/SiftsClient.java index 6e7b988..f25c1cf 100644 --- a/src/jalview/ws/sifts/SiftsClient.java +++ b/src/jalview/ws/sifts/SiftsClient.java @@ -543,6 +543,7 @@ public class SiftsClient implements SiftsClientI resNum = (pdbRefDb == null) ? Integer.valueOf(residue .getDbResNum()) : Integer.valueOf(pdbRefDb .getDbResNum().split("[a-zA-Z]")[0]); + continue; } if (isResidueObserved(residue) -- 1.7.10.2