X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FEBIAlfaFold.java;h=e5f1243097f2dab35abbb80c30b9b9a3eb6f6b65;hb=1128674a17df402a2219d278ab332c291cb93443;hp=859ac057ff35669b293e43587f3dbc476da927d3;hpb=33a6a7aaa26c01c06bc2db56a549137de5812a49;p=jalview.git diff --git a/src/jalview/ws/dbsources/EBIAlfaFold.java b/src/jalview/ws/dbsources/EBIAlfaFold.java index 859ac05..e5f1243 100644 --- a/src/jalview/ws/dbsources/EBIAlfaFold.java +++ b/src/jalview/ws/dbsources/EBIAlfaFold.java @@ -36,6 +36,7 @@ import com.stevesoft.pat.Regex; import jalview.api.FeatureSettingsModelI; import jalview.bin.Console; +import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.ContactMatrixI; @@ -49,6 +50,7 @@ import jalview.io.FileFormat; import jalview.io.FileFormatI; import jalview.io.FormatAdapter; import jalview.io.PDBFeatureSettings; +import jalview.structure.StructureMapping; import jalview.structure.StructureSelectionManager; import jalview.util.MessageManager; import jalview.util.Platform; @@ -257,48 +259,85 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy public static void addAlphaFoldPAEToSequence(AlignmentI pdbAlignment, File pae, int index, String seqId) { - FileInputStream pae_input = null; + addAlphaFoldPAE(pdbAlignment, pae, index, seqId, false, false); + } + + public static void addAlphaFoldPAEToStructure(AlignmentI pdbAlignment, + File pae, int index, String structIdOrFile, boolean isStructId) + { + addAlphaFoldPAE(pdbAlignment, pae, index, structIdOrFile, true, + isStructId); + } + + public static void addAlphaFoldPAE(AlignmentI pdbAlignment, File pae, + int index, String id, boolean isStruct, boolean isStructId) + { + FileInputStream paeInput = null; try { - pae_input = new FileInputStream(pae); + paeInput = new FileInputStream(pae); } catch (FileNotFoundException e) { Console.error( "Could not find pAE file '" + pae.getAbsolutePath() + "'", e); + return; } - try + if (isStruct) { - if (!importPaeJSONAsContactMatrix(pdbAlignment, pae_input, index, - seqId)) + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + if (ssm != null) { - Console.warn("Could not import contact matrix from '" - + pae.getAbsolutePath() + "'"); - } - } catch (IOException e1) - { - Console.error("Error when importing pAE file '" - + pae.getAbsolutePath() + "'", e1); - } catch (ParseException e2) - { - Console.error( - "Error when parsing pAE file '" + pae.getAbsolutePath() + "'", - e2); - } + String structFile = isStructId ? ssm.findFileForPDBId(id) : id; + Console.debug("##### AHA! structFile = " + structFile); + Console.debug("##### structFile " + + (ssm.isPDBFileRegistered(structFile) ? "IS " : "is NOT ") + + "registered."); - } + StructureMapping[] smArray = ssm.getMapping(structFile); + Console.debug("##### AHA! smArray obtained with " + smArray.length + + " elements"); - public static void addAlphaFoldPAEToStructure(AlignmentI pdbAlignment, - File pae, int index, String structId) - { - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - if (ssm != null) + try + { + if (!importPaeJSONAsContactMatrixToStructure(smArray, paeInput)) + { + Console.warn("Could not import contact matrix from '" + + pae.getAbsolutePath() + "' to structure."); + } + } catch (IOException e1) + { + Console.error("Error when importing pAE file '" + + pae.getAbsolutePath() + "'", e1); + } catch (ParseException e2) + { + Console.error("Error when parsing pAE file '" + + pae.getAbsolutePath() + "'", e2); + } + } + + } + else { - /* - ssm.setAddTempFacAnnot(showTemperatureFactor); - ssm.setProcessSecondaryStructure(showSecondaryStructure); - */ + // attach to sequence?! + try + { + if (!importPaeJSONAsContactMatrixToSequence(pdbAlignment, paeInput, + index, id)) + { + Console.warn("Could not import contact matrix from '" + + pae.getAbsolutePath() + "' to sequence."); + } + } catch (IOException e1) + { + Console.error("Error when importing pAE file '" + + pae.getAbsolutePath() + "'", e1); + } catch (ParseException e2) + { + Console.error("Error when parsing pAE file '" + + pae.getAbsolutePath() + "'", e2); + } } } @@ -314,24 +353,18 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy * @throws IOException * @throws Exception */ - public static boolean importPaeJSONAsContactMatrix( + public static boolean importPaeJSONAsContactMatrixToSequence( AlignmentI pdbAlignment, InputStream pae_input) throws IOException, ParseException { - return importPaeJSONAsContactMatrix(pdbAlignment, pae_input, 0, null); + return importPaeJSONAsContactMatrixToSequence(pdbAlignment, pae_input, + 0, null); } - public static boolean importPaeJSONAsContactMatrix( + public static boolean importPaeJSONAsContactMatrixToSequence( AlignmentI pdbAlignment, InputStream pae_input, int index, String seqId) throws IOException, ParseException { - - List pae_obj = (List) Platform.parseJSON(pae_input); - if (pae_obj == null) - { - Console.debug("JSON file did not parse properly."); - return false; - } SequenceI sequence = null; /* debugging */ SequenceI[] seqs = pdbAlignment.getSequencesArray(); @@ -369,6 +402,13 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy sequence = sequences[0]; // just use the first sequence with this seqId } } + + List pae_obj = (List) Platform.parseJSON(pae_input); + if (pae_obj == null) + { + Console.debug("JSON file did not parse properly."); + return false; + } ContactMatrixI matrix = new PAEContactMatrix(sequence, (Map) pae_obj.get(0)); @@ -377,6 +417,50 @@ public class EBIAlfaFold extends EbiFileRetrievedProxy return true; } + public static boolean importPaeJSONAsContactMatrixToStructure( + StructureMapping[] smArray, InputStream paeInput) + throws IOException, ParseException + { + boolean someDone = false; + Console.debug("##### smArray.length=" + smArray.length); + for (StructureMapping sm : smArray) + { + Console.debug("##### sm[n]=" + sm.getPdbId()); + boolean thisDone = importPaeJSONAsContactMatrixToStructure(sm, + paeInput); + Console.debug("##### thisDone = " + thisDone); + someDone |= thisDone; + } + return someDone; + } + + public static boolean importPaeJSONAsContactMatrixToStructure( + StructureMapping sm, InputStream paeInput) + throws IOException, ParseException + { + + List pae_obj = (List) Platform.parseJSON(paeInput); + if (pae_obj == null) + { + Console.debug("JSON file did not parse properly."); + return false; + } + + ContactMatrixI matrix = new PAEContactMatrix(sm.getSequence(), + (Map) pae_obj.get(0)); + + AlignmentAnnotation cmannot = sm.getSequence().addContactList(matrix); + // sm.getSequence().addAlignmentAnnotation(cmannot); + sm.transfer(cmannot); + // return true; + + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + List acfList = ssm.getSequenceMappings(); + + return true; + } + /** * general purpose structure importer - designed to yield alignment useful for * transfer of annotation to associated sequences