X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2FMCview%2FPDBChain.java;h=7fdf11bf8029a76467adf5760c57210e30500d22;hb=72cbe293bdfc802039f5be51d53351e97b89d28a;hp=6d5f9fe1d02bdc07d8b3ed50c809ad78babd08d0;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git diff --git a/src/MCview/PDBChain.java b/src/MCview/PDBChain.java index 6d5f9fe..7fdf11b 100755 --- a/src/MCview/PDBChain.java +++ b/src/MCview/PDBChain.java @@ -147,6 +147,10 @@ public class PDBChain if (as.astr1.charAt(i) == as.astr2.charAt(i)) { + if (pdbpos >= residues.size()) + { + continue; + } Residue res = residues.elementAt(pdbpos); for (Atom atom : res.atoms) { @@ -252,7 +256,7 @@ public class PDBChain * If > 99% 'P', flag as nucleotide; note the count doesn't include the last * residue */ - if (residues.size() > 0 && (numNa / (residues.size() - 1) > 0.99)) + if (residues.size() > 1 && (numNa / (residues.size() - 1) > 0.99)) { isNa = true; } @@ -295,11 +299,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 +317,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 +325,7 @@ public class PDBChain if (i < atoms.size()) { resNumber = atoms.elementAt(i).resNumber; + insCode = atoms.elementAt(i).insCode; } else { @@ -327,13 +336,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("RESNUM", tmpat.resName + ":" + tmpat.resNumIns + " " + pdbid + id, "", offset + count, offset + count, pdbid); // MCview.PDBChain.PDBFILEFEATURE); @@ -371,7 +395,8 @@ public class PDBChain } seq.append(ResidueProperties.aa[((Integer) symbol).intValue()]); } - count++; + count++; + } } if (id.length() < 1)