X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FJmolParser.java;h=7836d24404ddabe97c5e269b7c63564c5e57b4c5;hb=3f12f4932226512316ec113e600695150431fd0a;hp=ca412d0c51d1b86cf1cbd7d39e1778c4bf140040;hpb=4e3166c6b7348b10af5ee6526a83eaa78191b1b6;p=jalview.git diff --git a/src/jalview/ext/jmol/JmolParser.java b/src/jalview/ext/jmol/JmolParser.java index ca412d0..7836d24 100644 --- a/src/jalview/ext/jmol/JmolParser.java +++ b/src/jalview/ext/jmol/JmolParser.java @@ -22,6 +22,7 @@ package jalview.ext.jmol; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; +import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.io.FileParse; import jalview.io.StructureFile; @@ -97,6 +98,18 @@ public class JmolParser extends StructureFile implements JmolStatusListener */ if (jmolModel.ms.mc > 0) { + // ideally we do this + // try + // { + // setStructureFileType(jmolModel.evalString("show _fileType")); + // } catch (Exception q) + // { + // } + // ; + // instead, we distinguish .cif from non-.cif by filename + setStructureFileType(getDataName().toLowerCase().endsWith(".cif") ? PDBEntry.Type.MMCIF + .toString() : "PDB"); + transformJmolModelToJalview(jmolModel.ms); } } @@ -177,7 +190,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener prot.add(chainseq); } - if (StructureImportSettings.isPredictSecondaryStructure()) + if (StructureImportSettings.isProcessSecondaryStructure()) { createAnnotation(chainseq, chain, ms.at); } @@ -209,17 +222,24 @@ public class JmolParser extends StructureFile implements JmolStatusListener Atom curAtom = new Atom(atom.x, atom.y, atom.z); curAtom.atomIndex = atom.getIndex(); curAtom.chain = atom.getChainIDStr(); - curAtom.insCode = atom.group.getInsertionCode(); + curAtom.insCode = atom.group.getInsertionCode() == '\000' ? ' ' + : atom.group.getInsertionCode(); curAtom.name = atom.getAtomName(); curAtom.number = atom.getAtomNumber(); curAtom.resName = atom.getGroup3(true); curAtom.resNumber = atom.getResno(); curAtom.occupancy = ms.occupancies != null ? ms.occupancies[atom .getIndex()] : Float.valueOf(atom.getOccupancy100()); - curAtom.resNumIns = "" + curAtom.resNumber + curAtom.insCode; + curAtom.resNumIns = ("" + curAtom.resNumber + curAtom.insCode) + .trim(); curAtom.tfactor = atom.getBfactor100() / 100f; curAtom.type = 0; - significantAtoms.add(curAtom); + // significantAtoms.add(curAtom); + // ignore atoms from subsequent models + if (!significantAtoms.contains(curAtom)) + { + significantAtoms.add(curAtom); + } prevAtom = atom; } } @@ -230,6 +250,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener org.jmol.modelset.Atom prevAtom, HashMap chainTerMap) { + // System.out.println("Atom: " + curAtom.getAtomNumber() + // + " Last atom index " + curAtom.group.lastAtomIndex); if (chainTerMap == null || prevAtom == null) { return true; @@ -248,6 +270,10 @@ public class JmolParser extends StructureFile implements JmolStatusListener // diff < 5 then mark as valid and update termination Atom if (chainTerMap.containsKey(curAtomChId)) { + if (curAtom.getResno() < chainTerMap.get(curAtomChId).getResno()) + { + return false; + } if ((curAtom.getResno() - chainTerMap.get(curAtomChId).getResno()) < 5) { chainTerMap.put(curAtomChId, curAtom); @@ -259,6 +285,10 @@ public class JmolParser extends StructureFile implements JmolStatusListener // atom with previously terminated chain encountered else if (chainTerMap.containsKey(curAtomChId)) { + if (curAtom.getResno() < chainTerMap.get(curAtomChId).getResno()) + { + return false; + } if ((curAtom.getResno() - chainTerMap.get(curAtomChId).getResno()) < 5) { chainTerMap.put(curAtomChId, curAtom);