JAL-4216 compute size of annotation using start/end of sequence and given length...
[jalview.git] / src / jalview / ext / jmol / JmolParser.java
index ae8ff7a..8bc5a98 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.ext.jmol;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.PDBEntry;
@@ -115,9 +117,10 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       // }
       // ;
       // instead, we distinguish .cif from non-.cif by filename
-      setStructureFileType(getDataName().toLowerCase().endsWith(".cif")
-              ? PDBEntry.Type.MMCIF.toString()
-              : "PDB");
+      setStructureFileType(
+              getDataName().toLowerCase(Locale.ROOT).endsWith(".cif")
+                      ? PDBEntry.Type.MMCIF.toString()
+                      : "PDB");
 
       transformJmolModelToJalview(jmolModel.ms);
     }
@@ -138,7 +141,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
          * params -o (output to sysout) -n (nodisplay) -x (exit when finished)
          * see http://wiki.jmol.org/index.php/Jmol_Application
          */
-        
+
         viewer = JalviewJmolBinding.getJmolData(this);
         // ensure the 'new' (DSSP) not 'old' (Ramachandran) SS method is used
         viewer.setBooleanProperty("defaultStructureDSSP", true);
@@ -152,14 +155,42 @@ public class JmolParser extends StructureFile implements JmolStatusListener
     }
     return viewer;
   }
-  
+
   public static Regex getNewAlphafoldValidator()
   {
-    Regex validator =  new Regex("(AF-[A-Z]+[0-9]+[A-Z0-9]+-F1)");
+    Regex validator = new Regex("(AF-[A-Z]+[0-9]+[A-Z0-9]+-F1)");
     validator.setIgnoreCase(true);
     return validator;
   }
 
+  PDBEntry.Type jmolFiletype = null;
+
+  /**
+   * resolve a jmol filetype string and update the jmolFiletype field
+   * accordingly
+   * 
+   * @param jmolIdentifiedFileType
+   * @return true if filetype was identified as MMCIF, PDB
+   */
+  public boolean updateFileType(String jmolIdentifiedFileType)
+  {
+    if (jmolIdentifiedFileType == null
+            || jmolIdentifiedFileType.trim().equals(""))
+    {
+      return false;
+    }
+    if ("mmcif".equalsIgnoreCase(jmolIdentifiedFileType))
+    {
+      jmolFiletype = PDBEntry.Type.MMCIF;
+      return true;
+    }
+    if ("pdb".equalsIgnoreCase(jmolIdentifiedFileType))
+    {
+      jmolFiletype = PDBEntry.Type.PDB;
+      return true;
+    }
+    return false;
+  }
 
   public void transformJmolModelToJalview(ModelSet ms) throws IOException
   {
@@ -171,7 +202,14 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       List<SequenceI> prot = new ArrayList<SequenceI>();
       PDBChain tmpchain;
       String pdbId = (String) ms.getInfo(0, "title");
-      String isMMCIF = (String) ms.getInfo(0, "fileType");
+      boolean isMMCIF = false;
+      String jmolFileType_String = (String) ms.getInfo(0, "fileType");
+      if (updateFileType(jmolFileType_String))
+      {
+        setStructureFileType(jmolFiletype.toString());
+      }
+
+      isMMCIF = PDBEntry.Type.MMCIF.equals(jmolFiletype);
 
       if (pdbId == null)
       {
@@ -182,7 +220,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       {
         setId(pdbId);
         setPDBIdAvailable(true);
-        alphaFoldModel = alphaFold.search(pdbId) && isMMCIF!=null && isMMCIF.equalsIgnoreCase("mmcif");  
+        alphaFoldModel = alphaFold.search(pdbId) && isMMCIF;
 
       }
       List<Atom> significantAtoms = convertSignificantAtoms(ms);
@@ -197,9 +235,16 @@ public class JmolParser extends StructureFile implements JmolStatusListener
         if (tmpchain != null)
         {
           tmpchain.atoms.addElement(tmpatom);
-        } else
+        }
+        else
         {
-          tmpchain = new PDBChain(getId(), tmpatom.chain,isAlphafoldModel());
+          String tempFString = null;
+          if (isAlphafoldModel())
+          {
+            tempFString = "Alphafold Reliability";
+          }
+
+          tmpchain = new PDBChain(getId(), tmpatom.chain, tempFString);
           getChains().add(tmpchain);
           tmpchain.atoms.addElement(tmpatom);
         }
@@ -389,7 +434,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
   {
     int length = sq.getLength();
     boolean ssFound = false;
-    Annotation asecstr[] = new Annotation[length + firstResNum - 1];
+    Annotation asecstr[] = new Annotation[length + (firstResNum-sq.getStart())];
     for (int p = 0; p < length; p++)
     {
       if (secstr[p] >= 'A' && secstr[p] <= 'z')