X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FJmolParser.java;h=0ca2ba81184c44367da7dfc10344d5dbd7613359;hb=5e17ddc59003daff5f9933cf5710889bcdb9e856;hp=18d8e05555d4101a2d9c101badf9c3f164609ea7;hpb=75aa2f504257f5564e3a88c3677905d7c392f24e;p=jalview.git diff --git a/src/jalview/ext/jmol/JmolParser.java b/src/jalview/ext/jmol/JmolParser.java index 18d8e05..0ca2ba8 100644 --- a/src/jalview/ext/jmol/JmolParser.java +++ b/src/jalview/ext/jmol/JmolParser.java @@ -20,21 +20,12 @@ */ 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; @@ -47,6 +38,22 @@ import org.jmol.viewer.Viewer; 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; @@ -61,21 +68,30 @@ public class JmolParser extends StructureFile implements JmolStatusListener { 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 { super(fp); @@ -96,6 +112,12 @@ public class JmolParser extends StructureFile implements JmolStatusListener @Override public void parse() throws IOException { + parse(true); + } + + @Override + public void parse(boolean doXferSettings) throws IOException + { setChains(new Vector()); Viewer jmolModel = getJmolData(); jmolModel.openReader(getDataName(), getDataName(), getReader()); @@ -115,11 +137,12 @@ 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); + transformJmolModelToJalview(jmolModel.ms, doXferSettings); } } @@ -138,7 +161,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,28 +175,32 @@ 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; + 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; } @@ -181,11 +208,12 @@ public class JmolParser extends StructureFile implements JmolStatusListener { 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 { @@ -201,9 +229,9 @@ public class JmolParser extends StructureFile implements JmolStatusListener { setStructureFileType(jmolFiletype.toString()); } - + isMMCIF = PDBEntry.Type.MMCIF.equals(jmolFiletype); - + if (pdbId == null) { setId(safeName(getDataName())); @@ -213,8 +241,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener { setId(pdbId); setPDBIdAvailable(true); - alphaFoldModel = alphaFold.search(pdbId) && isMMCIF; - + setAlphafoldModel(alphaFold.search(pdbId) && isMMCIF); } List significantAtoms = convertSignificantAtoms(ms); for (Atom tmpatom : significantAtoms) @@ -228,21 +255,23 @@ public class JmolParser extends StructureFile implements JmolStatusListener 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(); @@ -269,20 +298,53 @@ public class JmolParser extends StructureFile implements JmolStatusListener 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()) + { + try + { + 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 (Throwable ff) + { + Console.error("Couldn't import PAE Matrix from " + getPAEMatrix(), + ff); + warningMessage += "Couldn't import PAE Matrix" + + getNewlineString() + ff.getLocalizedMessage() + + getNewlineString(); + } + } } catch (OutOfMemoryError er) { - System.out.println( + jalview.bin.Console.outPrintln( "OUT OF MEMORY LOADING TRANSFORMING JMOL MODEL TO JALVIEW MODEL"); throw new IOException(MessageManager .getString("exception.outofmemory_loading_mmcif_file")); } } - private boolean isAlphafoldModel() - { - return alphaFoldModel; - } - private List convertSignificantAtoms(ModelSet ms) { List significantAtoms = new ArrayList(); @@ -329,7 +391,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener org.jmol.modelset.Atom prevAtom, HashMap chainTerMap) { - // System.out.println("Atom: " + curAtom.getAtomNumber() + // jalview.bin.Console.outPrintln("Atom: " + curAtom.getAtomNumber() // + " Last atom index " + curAtom.group.lastAtomIndex); if (chainTerMap == null || prevAtom == null) { @@ -426,15 +488,14 @@ 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') { 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) {