From 02816cb583d01a3a0cdd612d5d0a1f24c0d0b99d Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 14 Oct 2022 17:05:06 +0100 Subject: [PATCH] JAL-3855 refactor the pAE retrieval code so it can be called via structureselectionmanager --- src/jalview/ws/dbsources/EBIAlfaFold.java | 88 +++++++++++++++++++---------- 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/src/jalview/ws/dbsources/EBIAlfaFold.java b/src/jalview/ws/dbsources/EBIAlfaFold.java index e0ab54d..fa867cd 100644 --- a/src/jalview/ws/dbsources/EBIAlfaFold.java +++ b/src/jalview/ws/dbsources/EBIAlfaFold.java @@ -23,6 +23,7 @@ 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; @@ -196,33 +197,7 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy "exception.no_pdb_records_for_chain", new String[] { id, ((chain == null) ? "' '" : chain) })); } - - // 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); - - 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); - if (!importPaeJSONAsContactMatrix(pdbAlignment, pae)) - { - 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); - } + retrieve_AlphaFold_pAE(id, pdbAlignment, retrievalUrl); } catch (Exception ex) // Problem parsing PDB file { @@ -232,10 +207,63 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy return pdbAlignment; } - private boolean importPaeJSONAsContactMatrix(AlignmentI pdbAlignment, - File pae) throws Exception + /** + * 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); + + 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); + } + + } + + /** + * 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); if (pae_obj == null) -- 1.7.10.2