JAL-3855 detect an alphafold model and import its temperature factor as reliability
[jalview.git] / src / jalview / ext / jmol / JmolParser.java
index a9c5f5c..ae8ff7a 100644 (file)
@@ -45,6 +45,8 @@ import org.jmol.c.STR;
 import org.jmol.modelset.ModelSet;
 import org.jmol.viewer.Viewer;
 
+import com.stevesoft.pat.Regex;
+
 import mc_view.Atom;
 import mc_view.PDBChain;
 import mc_view.Residue;
@@ -59,6 +61,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
 {
   Viewer viewer = null;
 
+  private boolean alphaFoldModel;
+
   public JmolParser(boolean immediate, Object inFile,
           DataSourceType sourceType) throws IOException
   {
@@ -148,16 +152,26 @@ 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)");
+    validator.setIgnoreCase(true);
+    return validator;
+  }
+
 
   public void transformJmolModelToJalview(ModelSet ms) throws IOException
   {
     try
     {
+      Regex alphaFold = getNewAlphafoldValidator();
       String lastID = "";
       List<SequenceI> rna = new ArrayList<SequenceI>();
       List<SequenceI> prot = new ArrayList<SequenceI>();
       PDBChain tmpchain;
       String pdbId = (String) ms.getInfo(0, "title");
+      String isMMCIF = (String) ms.getInfo(0, "fileType");
 
       if (pdbId == null)
       {
@@ -168,6 +182,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       {
         setId(pdbId);
         setPDBIdAvailable(true);
+        alphaFoldModel = alphaFold.search(pdbId) && isMMCIF!=null && isMMCIF.equalsIgnoreCase("mmcif");  
+
       }
       List<Atom> significantAtoms = convertSignificantAtoms(ms);
       for (Atom tmpatom : significantAtoms)
@@ -183,7 +199,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
           tmpchain.atoms.addElement(tmpatom);
         } else
         {
-          tmpchain = new PDBChain(getId(), tmpatom.chain);
+          tmpchain = new PDBChain(getId(), tmpatom.chain,isAlphafoldModel());
           getChains().add(tmpchain);
           tmpchain.atoms.addElement(tmpatom);
         }
@@ -225,6 +241,11 @@ public class JmolParser extends StructureFile implements JmolStatusListener
     }
   }
 
+  private boolean isAlphafoldModel()
+  {
+    return alphaFoldModel;
+  }
+
   private List<Atom> convertSignificantAtoms(ModelSet ms)
   {
     List<Atom> significantAtoms = new ArrayList<Atom>();
@@ -351,7 +372,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
 
   /**
    * Helper method that adds an AlignmentAnnotation for secondary structure to
-   * the sequence, provided at least one secondary structure prediction has been
+   * the sequence, provided at least one secondary structure assignment has been
    * made
    * 
    * @param modelTitle