*/
package jalview.ext.jmol;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.PDBEntry;
-import jalview.datamodel.SequenceI;
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.StructureFile;
-import jalview.schemes.ResidueProperties;
-import jalview.util.Format;
-import jalview.util.MessageManager;
-
+import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Vector;
import com.stevesoft.pat.Regex;
+import jalview.bin.Console;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.datamodel.annotations.AlphaFoldAnnotationRowBuilder;
+import jalview.datamodel.annotations.AnnotationRowBuilder;
+import jalview.io.DataSourceType;
+import jalview.io.FileParse;
+import jalview.io.StructureFile;
+import jalview.schemes.ResidueProperties;
+import jalview.structure.StructureImportSettings;
+import jalview.util.Format;
+import jalview.util.MessageManager;
+import jalview.ws.dbsources.EBIAlfaFold;
import mc_view.Atom;
import mc_view.PDBChain;
import mc_view.Residue;
{
Viewer viewer = null;
- private boolean alphaFoldModel;
-
public JmolParser(boolean immediate, Object inFile,
DataSourceType sourceType) throws IOException
{
// BH 2018 File or String for filename
super(immediate, inFile, sourceType);
+
}
public JmolParser(Object inFile, DataSourceType sourceType)
throws IOException
{
- super(inFile, sourceType);
+ this(inFile, sourceType, null);
+ }
+
+ public JmolParser(Object inFile, DataSourceType sourceType,
+ StructureImportSettings.TFType tempfacType) throws IOException
+ {
+ super(inFile, sourceType, tempfacType);
+ }
+
+ public JmolParser(FileParse fp, boolean doXferSettings) throws IOException
+ {
+ super(fp, doXferSettings);
}
public JmolParser(FileParse fp) throws IOException
@Override
public void parse() throws IOException
{
+ parse(true);
+ }
+
+ @Override
+ public void parse(boolean doXferSettings) throws IOException
+ {
setChains(new Vector<PDBChain>());
Viewer jmolModel = getJmolData();
jmolModel.openReader(getDataName(), getDataName(), getReader());
// }
// ;
// 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);
+ transformJmolModelToJalview(jmolModel.ms, doXferSettings);
}
}
* 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);
}
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;
+ PDBEntry.Type jmolFiletype = null;
+
/**
- * resolve a jmol filetype string and update the jmolFiletype field accordingly
+ * 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
+ if (jmolIdentifiedFileType == null
|| jmolIdentifiedFileType.trim().equals(""))
{
return false;
}
- if ("mmcif".equalsIgnoreCase(jmolIdentifiedFileType)) {
+ if ("mmcif".equalsIgnoreCase(jmolIdentifiedFileType))
+ {
jmolFiletype = PDBEntry.Type.MMCIF;
return true;
}
{
jmolFiletype = PDBEntry.Type.PDB;
return true;
- }
+ }
return false;
}
-
- public void transformJmolModelToJalview(ModelSet ms) throws IOException
+
+ public void transformJmolModelToJalview(ModelSet ms,
+ boolean localDoXferSettings) throws IOException
{
try
{
{
setStructureFileType(jmolFiletype.toString());
}
-
+
isMMCIF = PDBEntry.Type.MMCIF.equals(jmolFiletype);
-
+
if (pdbId == null)
{
setId(safeName(getDataName()));
{
setId(pdbId);
setPDBIdAvailable(true);
- alphaFoldModel = alphaFold.search(pdbId) && isMMCIF;
-
+ setAlphafoldModel(alphaFold.search(pdbId) && isMMCIF);
}
List<Atom> significantAtoms = convertSignificantAtoms(ms);
for (Atom tmpatom : significantAtoms)
if (tmpchain != null)
{
tmpchain.atoms.addElement(tmpatom);
- } else
+ }
+ else
{
- String tempFString=null;
- if (isAlphafoldModel())
+ AnnotationRowBuilder builder = null;
+ if (isAlphafoldModel()
+ || getTemperatureFactorType() == StructureImportSettings.TFType.PLDDT)
{
- tempFString = "Alphafold Reliability";
+ builder = new AlphaFoldAnnotationRowBuilder();
}
- tmpchain = new PDBChain(getId(), tmpatom.chain,tempFString);
+ tmpchain = new PDBChain(getId(), tmpatom.chain, builder);
getChains().add(tmpchain);
tmpchain.atoms.addElement(tmpatom);
}
lastID = tmpatom.resNumIns.trim();
}
- if (isParseImmediately())
+ if (isParseImmediately() && localDoXferSettings)
{
// configure parsing settings from the static singleton
xferSettings();
createAnnotation(chainseq, chain, ms.at);
}
}
+ // if Alphafold, fetch the PAE matrix if doesn't already have one
+ if (isAlphafoldModel() && !hasPAEMatrix())
+ {
+ try
+ {
+ Console.info("Retrieving PAE for " + pdbId);
+ File paeFile = EBIAlfaFold.fetchAlphaFoldPAE(pdbId, null);
+ this.setPAEMatrix(paeFile.getAbsolutePath());
+ } catch (Throwable t)
+ {
+ Console.error("Couldn't get the pAE for " + pdbId, t);
+ }
+ }
+ // add a PAEMatrix if set (either by above or otherwise)
+ if (hasPAEMatrix())
+ {
+ Alignment al = new Alignment(prot.toArray(new SequenceI[0]));
+ EBIAlfaFold.addAlphaFoldPAE(al, new File(this.getPAEMatrix()), 0,
+ null, false, false, null);
+
+ if (al.getAlignmentAnnotation() != null)
+ {
+ for (AlignmentAnnotation alann : al.getAlignmentAnnotation())
+ {
+ annotations.add(alann);
+ }
+ }
+ }
} catch (OutOfMemoryError er)
{
System.out.println(
}
}
- private boolean isAlphafoldModel()
- {
- return alphaFoldModel;
- }
-
private List<Atom> convertSignificantAtoms(ModelSet ms)
{
List<Atom> significantAtoms = new ArrayList<Atom>();
{
try
{
- asecstr[p] = new Annotation(String.valueOf(secstr[p]), null,
- secstrcode[p], Float.NaN);
+ asecstr[p] = new Annotation(null, null, secstrcode[p], Float.NaN);
ssFound = true;
} catch (Exception e)
{