JAL-629 fix lang label names after adjusting colour scheme short names
[jalview.git] / src / jalview / io / StructureFile.java
index c816f6d..fb416db 100644 (file)
@@ -23,6 +23,7 @@ package jalview.io;
 import java.awt.Color;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
 import java.util.List;
 import java.util.Vector;
 
@@ -30,14 +31,15 @@ import jalview.analysis.AlignSeq;
 import jalview.api.FeatureSettingsModelI;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentAnnotation.TFType;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.PDBEntry.Type;
 import jalview.datamodel.SequenceI;
+import jalview.ext.jmol.JmolParser;
 import jalview.structure.StructureImportSettings;
+import jalview.structure.StructureImportSettings.TFType;
 import mc_view.PDBChain;
 
 public abstract class StructureFile extends AlignFile
@@ -68,6 +70,47 @@ public abstract class StructureFile extends AlignFile
 
   private boolean pdbIdAvailable;
 
+  private StructureImportSettings.TFType temperatureFactorType = TFType.DEFAULT;
+
+  private String paeMatrix = null;
+
+  private boolean alphaFoldModel;
+
+  public void setPAEMatrix(String paeFilename)
+  {
+    paeMatrix = paeFilename;
+  }
+
+  public String getPAEMatrix()
+  {
+    return paeMatrix;
+  }
+
+  public boolean hasPAEMatrix()
+  {
+    return paeMatrix != null;
+  }
+
+  public void setTemperatureFactorType(StructureImportSettings.TFType t)
+  {
+    this.temperatureFactorType = t;
+  }
+
+  public StructureImportSettings.TFType getTemperatureFactorType()
+  {
+    return temperatureFactorType;
+  }
+
+  public void setAlphafoldModel(boolean afm)
+  {
+    alphaFoldModel = afm;
+  }
+
+  public boolean isAlphafoldModel()
+  {
+    return alphaFoldModel;
+  }
+
   public StructureFile(Object inFile, DataSourceType sourceType)
           throws IOException
   {
@@ -75,14 +118,22 @@ public abstract class StructureFile extends AlignFile
   }
 
   public StructureFile(Object inFile, DataSourceType sourceType,
-          AlignmentAnnotation.TFType tempfacType) throws IOException
+          StructureImportSettings.TFType tempfacType) throws IOException
   {
-    super(inFile, sourceType, tempfacType);
+    super(false, inFile, sourceType);
+    this.setTemperatureFactorType(tempfacType);
+    doParse();
   }
 
   public StructureFile(FileParse fp) throws IOException
   {
-    super(fp);
+    this(fp, true);
+  }
+
+  public StructureFile(FileParse fp, boolean doXferSettings)
+          throws IOException
+  {
+    super(fp, doXferSettings);
   }
 
   public void addSettings(boolean addAlignmentAnnotations,
@@ -95,13 +146,17 @@ public abstract class StructureFile extends AlignFile
 
   public void xferSettings()
   {
-    this.visibleChainAnnotation = StructureImportSettings
-            .isVisibleChainAnnotation();
-    this.predictSecondaryStructure = StructureImportSettings
-            .isProcessSecondaryStructure();
-    this.externalSecondaryStructure = StructureImportSettings
-            .isExternalSecondaryStructure();
-
+    if (this.getDoXferSettings())
+    {
+      this.visibleChainAnnotation = StructureImportSettings
+              .isVisibleChainAnnotation();
+      this.predictSecondaryStructure = StructureImportSettings
+              .isProcessSecondaryStructure();
+      this.externalSecondaryStructure = StructureImportSettings
+              .isExternalSecondaryStructure();
+      this.temperatureFactorType = StructureImportSettings
+              .getTemperatureFactorType();
+    }
   }
 
   public StructureFile(boolean parseImmediately, Object dataObject,
@@ -294,7 +349,7 @@ public abstract class StructureFile extends AlignFile
     {
       try
       {
-        processWithJmolParser(proteinSequences);
+        processWithJmolParser(proteinSequences, true);
       } catch (Exception x)
       {
         System.err.println(
@@ -305,7 +360,8 @@ public abstract class StructureFile extends AlignFile
   }
 
   @SuppressWarnings({ "unchecked", "rawtypes" })
-  private void processWithJmolParser(List<SequenceI> prot) throws Exception
+  private void NOTprocessWithJmolParser(List<SequenceI> prot)
+          throws Exception
   {
     try
     {
@@ -325,6 +381,8 @@ public abstract class StructureFile extends AlignFile
                 .setProcessSecondaryStructure(predictSecondaryStructure);
         StructureImportSettings
                 .setExternalSecondaryStructure(externalSecondaryStructure);
+        StructureImportSettings
+                .setTemperatureFactorType(temperatureFactorType);
         Object jmf = constructor.newInstance(args);
         AlignmentI al = new Alignment((SequenceI[]) cl
                 .getMethod("getSeqsAsArray", new Class[] {}).invoke(jmf));
@@ -349,6 +407,36 @@ public abstract class StructureFile extends AlignFile
     StructureImportSettings.setShowSeqFeatures(true);
   }
 
+  private void processWithJmolParser(List<SequenceI> prot,
+          boolean doXferSettings) throws MalformedURLException, IOException
+  {
+    FileParse fp = new FileParse(getDataName(), dataSourceType);
+
+    StructureImportSettings.setShowSeqFeatures(false);
+    StructureImportSettings.setVisibleChainAnnotation(false);
+    StructureImportSettings
+            .setProcessSecondaryStructure(predictSecondaryStructure);
+    StructureImportSettings
+            .setExternalSecondaryStructure(externalSecondaryStructure);
+    StructureImportSettings.setTemperatureFactorType(temperatureFactorType);
+    JmolParser jmf = new JmolParser(fp, doXferSettings);
+    AlignmentI al = new Alignment((SequenceI[]) jmf.getSeqsAsArray());
+    jmf.addAnnotations(al);
+    for (SequenceI sq : al.getSequences())
+    {
+      if (sq.getDatasetSequence() != null)
+      {
+        sq.getDatasetSequence().getAllPDBEntries().clear();
+      }
+      else
+      {
+        sq.getAllPDBEntries().clear();
+      }
+    }
+    replaceAndUpdateChains(prot, al, AlignSeq.PEP, false);
+    StructureImportSettings.setShowSeqFeatures(true);
+  }
+
   /**
    * Answers the first PDBChain found matching the given id, or null if none is
    * found