X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2Fdbsources%2FEBIAlfaFold.java;h=ba78199c0f95e117bd29e40de877afea7d4bc59f;hb=f721bbb9c300f6a1c845659b3947ebeca2795523;hp=7c72f4b168e0dce5cb3127b61d06fde40c1d79dc;hpb=fbfbbe26bee37143d5279fe4d254a5a89c96b021;p=jalview.git diff --git a/src/jalview/ws/dbsources/EBIAlfaFold.java b/src/jalview/ws/dbsources/EBIAlfaFold.java index 7c72f4b..ba78199 100644 --- a/src/jalview/ws/dbsources/EBIAlfaFold.java +++ b/src/jalview/ws/dbsources/EBIAlfaFold.java @@ -21,45 +21,34 @@ */ package jalview.ws.dbsources; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.stevesoft.pat.Regex; + import jalview.api.FeatureSettingsModelI; -import jalview.bin.Cache; import jalview.bin.Console; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; -import jalview.datamodel.ContactMatrix; import jalview.datamodel.ContactMatrixI; import jalview.datamodel.DBRefEntry; -import jalview.datamodel.DBRefSource; import jalview.datamodel.PDBEntry; -import jalview.datamodel.PDBEntry.Type; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; -import jalview.datamodel.features.SequenceFeaturesI; import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.io.FileFormatI; import jalview.io.FormatAdapter; import jalview.io.PDBFeatureSettings; -import jalview.javascript.json.JSON; -import jalview.structure.StructureImportSettings; -import jalview.util.HttpUtils; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.ws.datamodel.alphafold.PAEContactMatrix; -import jalview.ws.ebi.EBIFetchClient; import jalview.ws.utils.UrlDownloadClient; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.jmol.adapter.readers.simple.JSONReader; - -import com.stevesoft.pat.Regex; - /** * @author JimP * @@ -72,6 +61,8 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy private static final int PDB_ID_LENGTH = 4; + private static String AF_VERSION = "2"; + public EBIAlfaFold() { super(); @@ -123,15 +114,24 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy return "1"; } - public static String getAlphaFoldCifDownloadUrl(String id) + public static String getAlphaFoldCifDownloadUrl(String id, String vnum) { - return "https://alphafold.ebi.ac.uk/files/" + id + "-model_v1.cif"; + if (vnum == null || vnum.length() == 0) + { + vnum = AF_VERSION; + } + return "https://alphafold.ebi.ac.uk/files/" + id + "-model_v" + vnum + + ".cif"; } - public static String getAlphaFoldPaeDownloadUrl(String id) + public static String getAlphaFoldPaeDownloadUrl(String id, String vnum) { + if (vnum == null || vnum.length() == 0) + { + vnum = AF_VERSION; + } return "https://alphafold.ebi.ac.uk/files/" + id - + "-predicted_aligned_error_v1.json"; + + "-predicted_aligned_error_v" + vnum + ".json"; } /* @@ -168,7 +168,7 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy stopQuery(); return null; } - String alphaFoldCif = getAlphaFoldCifDownloadUrl(id); + String alphaFoldCif = getAlphaFoldCifDownloadUrl(id, AF_VERSION); if (retrievalUrl != null) { alphaFoldCif = retrievalUrl; @@ -177,7 +177,8 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy try { File tmpFile = File.createTempFile(id, ".cif"); - Console.debug("Retrieving structure file for "+id+" from "+alphaFoldCif); + Console.debug("Retrieving structure file for " + id + " from " + + alphaFoldCif); UrlDownloadClient.download(alphaFoldCif, tmpFile); // may not need this check ? @@ -196,53 +197,87 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy "exception.no_pdb_records_for_chain", new String[] { id, ((chain == null) ? "' '" : chain) })); } + // done during structure retrieval + // retrieve_AlphaFold_pAE(id, pdbAlignment, retrievalUrl); - // import PAE as contact matrix - assume this will work if there was a - // model - File pae = File.createTempFile(id, "pae_json"); - String paeURL = getAlphaFoldPaeDownloadUrl(id); - - if (retrievalUrl!=null) { - // manufacture the PAE url from a url like ...-model-vN.cif - paeURL = retrievalUrl.replace("model","predicted_aligned_error").replace(".cif",".json"); - } - Console.debug("Downloading pae from " + paeURL - + " to " + pae.toString() + ""); + } catch (Exception ex) // Problem parsing PDB file + { + stopQuery(); + throw (ex); + } + return pdbAlignment; + } + + /** + * get an alphafold pAE for the given id, and add it to sequence 0 in + * pdbAlignment (assuming it came from structurefile parser). + * + * @param id + * @param pdbAlignment + * @param retrievalUrl + * - URL of .mmcif from EBI-AlphaFold - will be used to generate the + * pAE URL automatically + * @throws Exception + */ + public static void retrieve_AlphaFold_pAE(String id, + AlignmentI pdbAlignment, String retrievalUrl) throws Exception + { + // import PAE as contact matrix - assume this will work if there was a + // model + File pae = File.createTempFile(id, "pae_json"); + String paeURL = getAlphaFoldPaeDownloadUrl(id, AF_VERSION); - try { - UrlDownloadClient.download(paeURL, pae); - if (!importPaeJSONAsContactMatrix(pdbAlignment, pae)) + if (retrievalUrl != null) + { + // manufacture the PAE url from a url like ...-model-vN.cif + paeURL = retrievalUrl.replace("model", "predicted_aligned_error") + .replace(".cif", ".json"); + } + Console.debug("Downloading pae from " + paeURL + " to " + pae.toString() + + ""); + + try + { + UrlDownloadClient.download(paeURL, pae); + FileInputStream pae_input = new FileInputStream(pae); + + if (!importPaeJSONAsContactMatrix(pdbAlignment, pae_input)) { Console.warn("Couln't import contact matrix from " + paeURL + " (stored in " + pae.toString() + ")"); } - } catch (Exception pae_ex) { - Console.debug("Couldn't download PAE",pae_ex); - } - - } catch (Exception ex) // Problem parsing PDB file + } catch (Exception pae_ex) { - stopQuery(); - throw (ex); + Console.error("Couldn't download PAE", pae_ex); } - return pdbAlignment; + } - private boolean importPaeJSONAsContactMatrix(AlignmentI pdbAlignment, - File pae) throws Exception + /** + * parses the given pAE matrix and adds it to sequence 0 in the given + * alignment + * + * @param pdbAlignment + * @param pae_input + * @return true if there was a pAE matrix added + * @throws Exception + */ + public static boolean importPaeJSONAsContactMatrix( + AlignmentI pdbAlignment, InputStream pae_input) throws Exception { - FileInputStream pae_input = new FileInputStream(pae); - List pae_obj = (List) Platform - .parseJSON(pae_input); + List pae_obj = (List) Platform.parseJSON(pae_input); if (pae_obj == null) { return false; } ContactMatrixI matrix = new PAEContactMatrix( - pdbAlignment.getSequenceAt(0), (Map)pae_obj.get(0)); + pdbAlignment.getSequenceAt(0), + (Map) pae_obj.get(0)); - pdbAlignment.getSequenceAt(0).addAlignmentAnnotation(pdbAlignment.addContactList(matrix)); + AlignmentAnnotation cmannot = pdbAlignment.getSequenceAt(0) + .addContactList(matrix); + pdbAlignment.addAnnotation(cmannot); return true; }