Merge: 497958b 68dcaa7
[jalview.git] / src / jalview / ext / jmol / PDBFileWithJmol.java
index 159955a..92dce36 100644 (file)
@@ -27,6 +27,7 @@ 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;
@@ -153,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+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,
@@ -177,11 +184,17 @@ public class PDBFileWithJmol extends AlignFile implements
                   // 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;