X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FPDBFileWithJmol.java;h=9fa6bf4f3b1abd157952f5b3796f9865774b1c5a;hb=b8810711642d8473325c8a3d3e76cc5c3c9b5bbd;hp=1059021902d5eebbfca46f706172deaf5c1d9026;hpb=1e5dc0e8a71d9eb0be4748f994072b11f25b04e0;p=jalview.git diff --git a/src/jalview/ext/jmol/PDBFileWithJmol.java b/src/jalview/ext/jmol/PDBFileWithJmol.java index 1059021..9fa6bf4 100644 --- a/src/jalview/ext/jmol/PDBFileWithJmol.java +++ b/src/jalview/ext/jmol/PDBFileWithJmol.java @@ -1,23 +1,37 @@ /* - * 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 2.8.2) + * Copyright (C) 2014 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; import org.jmol.api.JmolStatusListener; @@ -31,13 +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 and process PDB files with Jmol * @@ -52,12 +59,16 @@ 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 + { + super(fp); + } + public PDBFileWithJmol() { // TODO Auto-generated constructor stub @@ -86,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); } } @@ -146,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, @@ -164,13 +178,24 @@ public class PDBFileWithJmol extends AlignFile implements pdbe.setFile(getDataName()); pdbe.setId(getDataName()); sq.addPDBId(pdbe); + pdbe.setProperty(new Hashtable()); + pdbe.getProperty().put("CHAIN", "" + _lastChainId); + // 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) { AlignmentAnnotation ann = new AlignmentAnnotation( "Secondary Structure", "Secondary Structure from PDB File", asecstr); + ann.belowAlignment=true; + ann.visible=true; + ann.autoCalculated=false; + ann.setCalcId(getClass().getName()); sq.addAlignmentAnnotation(ann); + ann.adjustForAlignment(); + ann.validateRangeAndDisplay(); annotations.add(ann); } } @@ -289,11 +314,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);