*/
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.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
*
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);
}
}
{
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+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,
// 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();
+ 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;
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);