Merge: 497958b 68dcaa7
[jalview.git] / src / jalview / ext / jmol / PDBFileWithJmol.java
index 847453f..92dce36 100644 (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;
@@ -35,15 +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 jalview.util.MessageManager;
-
 /**
  * Import and process PDB files with Jmol
  * 
@@ -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;
@@ -307,11 +320,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);