X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FPDBFileWithJmol.java;h=3df8957d9c01a47f566ce4f72b2abca926ec3853;hb=93d63f3c608771bb48b5ac18f761194a1ea28554;hp=5702558cd9a4c63fb7373064d64360519c9b5cf8;hpb=d49248578538f9d06141ac17c55ab9b93a5e48d4;p=jalview.git diff --git a/src/jalview/ext/jmol/PDBFileWithJmol.java b/src/jalview/ext/jmol/PDBFileWithJmol.java index 5702558..3df8957 100644 --- a/src/jalview/ext/jmol/PDBFileWithJmol.java +++ b/src/jalview/ext/jmol/PDBFileWithJmol.java @@ -1,22 +1,35 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ext.jmol; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Annotation; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.io.AlignFile; +import jalview.io.FileParse; +import jalview.schemes.ResidueProperties; +import jalview.util.MessageManager; + import java.io.IOException; import java.util.Hashtable; import java.util.Map; @@ -32,14 +45,6 @@ import org.jmol.modelsetbio.BioPolymer; import org.jmol.viewer.Viewer; import org.openscience.jmol.app.JmolApp; -import jalview.datamodel.AlignmentAnnotation; -import jalview.datamodel.Annotation; -import jalview.datamodel.PDBEntry; -import jalview.datamodel.Sequence; -import jalview.datamodel.SequenceI; -import jalview.io.AlignFile; -import jalview.io.FileParse; - /** * Import and process PDB files with Jmol * @@ -54,12 +59,10 @@ public class PDBFileWithJmol extends AlignFile implements Viewer viewer = null; - public PDBFileWithJmol(String inFile, String type) - throws IOException + public PDBFileWithJmol(String inFile, String type) throws IOException { super(inFile, type); } - public PDBFileWithJmol(FileParse fp) throws IOException { @@ -94,10 +97,7 @@ public class PDBFileWithJmol extends AlignFile implements jmolApp.startViewer(viewer, null); } catch (ClassCastException x) { - throw new Error( - "Jmol version " - + JmolViewer.getJmolVersion() - + " is not compatible with this version of Jalview. Report this problem at issues.jalview.org", + throw new Error(MessageManager.formatMessage("error.jmol_version_not_compatible_with_jalview_version", new String[]{JmolViewer.getJmolVersion()}), x); } } @@ -154,11 +154,17 @@ public class PDBFileWithJmol extends AlignFile implements { if (len > 0) { + boolean isNa = (biopoly.isDna() || biopoly.isRna()); + // normalise sequence from Jmol to jalview + int[] cinds = isNa ? ResidueProperties.nucleotideIndex : ResidueProperties.aaIndex; + int nonGap = isNa ? ResidueProperties.maxNucleotideIndex + : ResidueProperties.maxProteinIndex; + char ngc = 'X'; char newseq[] = new char[len]; - System.arraycopy(seq, 0, newseq, 0, len); - Annotation asecstr[] = new Annotation[len]; + Annotation asecstr[] = new Annotation[len+firstrnum-1]; for (int p = 0; p < len; p++) { + newseq[p] = cinds[seq[p]] == nonGap ? ngc : seq[p]; if (secstr[p] >= 'A' && secstr[p] <= 'z') { asecstr[p] = new Annotation("" + secstr[p], null, @@ -171,17 +177,32 @@ public class PDBFileWithJmol extends AlignFile implements PDBEntry pdbe = new PDBEntry(); pdbe.setFile(getDataName()); pdbe.setId(getDataName()); - sq.addPDBId(pdbe); pdbe.setProperty(new Hashtable()); - pdbe.getProperty().put("CHAIN",""+_lastChainId); + // pdbe.getProperty().put("CHAIN", "" + _lastChainId); + pdbe.setChainCode(String.valueOf(_lastChainId)); + sq.addPDBId(pdbe); + // JAL-1533 + // Need to put the number of models for this polymer somewhere for Chimera/others to grab + // pdbe.getProperty().put("PDBMODELS", biopoly.) seqs.add(sq); - if (!(biopoly.isDna() || biopoly.isRna())) + if (!isNa) { + String mt = model.getModelTitle() == null ? getDataName() + : model.getModelTitle(); + if (_lastChainId >= ' ') + { + mt += _lastChainId; + } AlignmentAnnotation ann = new AlignmentAnnotation( "Secondary Structure", - "Secondary Structure from PDB File", asecstr); + "Secondary Structure for " + mt, asecstr); + ann.belowAlignment=true; + ann.visible=true; + ann.autoCalculated=false; ann.setCalcId(getClass().getName()); sq.addAlignmentAnnotation(ann); + ann.adjustForAlignment(); + ann.validateRangeAndDisplay(); annotations.add(ann); } } @@ -300,11 +321,16 @@ public class PDBFileWithJmol extends AlignFile implements case MEASURE: String mystatus = (String) data[3]; if (mystatus.indexOf("Picked") >= 0 - || mystatus.indexOf("Sequence") >= 0) // picking mode + || mystatus.indexOf("Sequence") >= 0) + { + // Picking mode sendConsoleMessage(strInfo); + } else if (mystatus.indexOf("Completed") >= 0) + { sendConsoleEcho(strInfo.substring(strInfo.lastIndexOf(",") + 2, strInfo.length() - 1)); + } break; case MESSAGE: sendConsoleMessage(data == null ? null : strInfo);