From e84b575bede2d5a6dea85cb96000dc751d090016 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Thu, 30 Jun 2016 15:20:35 +0100 Subject: [PATCH] JAL-2137 basic implementation of STRUCTMODEL annotation file statement --- src/jalview/io/AnnotationFile.java | 87 +++++++++++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 11 deletions(-) diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index 54e96f3..d8f9f15 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -28,6 +28,8 @@ import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.GraphLine; import jalview.datamodel.HiddenSequences; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.PDBEntry.Type; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.schemes.ColourSchemeI; @@ -37,6 +39,7 @@ import jalview.schemes.UserColourScheme; import java.io.BufferedReader; import java.io.FileReader; +import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; @@ -1001,7 +1004,8 @@ public class AnnotationFile String urlToModel = st.nextToken(); String urlToPairwise = st.hasMoreTokens() ? st.nextToken() : ""; - if (add_structmodel(refSeq, tempId, urlToModel, urlToPairwise)) + if (add_structmodel(al, refSeq, tempId, urlToModel, + urlToPairwise)) { failedtoadd = false; } @@ -1226,18 +1230,79 @@ public class AnnotationFile * @param urlToPairwise * @return true if model and sequence was added */ - private boolean add_structmodel(SequenceI refSeq2, String tempId, + private boolean add_structmodel(AlignmentI al, SequenceI refSeq2, String tempId, String urlToModel, String urlToPairwise) { - - return false; - } - - private void add_structmodel(StringTokenizer st) - { - - // TODO Auto-generated method stub - + String warningMessage=null; + boolean added = false; + try { + // locate tempId. if it exists, will need to merge, otherwise: + SequenceI templateSeq = al.findName(tempId); + // 1. load urlToModel + // TODO: get base for current import operation and resolve against it + // transfer to local temp file ? + PDBEntry modelpe = new PDBEntry(tempId,null,Type.FILE,urlToModel); + PDBEntry templpe = new PDBEntry(tempId, null, Type.FILE, urlToModel); + refSeq2.addPDBId(modelpe); + + // 2. load urlToPairwise + AlignmentI pwa = new AppletFormatAdapter().readFile(urlToPairwise, + AppletFormatAdapter.checkProtocol(urlToPairwise), "FASTA"); + SequenceI qPw = null, tPw = null; + if (pwa != null) + { + // resolve query/template sequences in provided alignment + qPw = pwa.findName(refSeqId); + tPw = pwa.findName(tempId); + } + if (false) + // (qPw != null && tPw != null) + { + // not yet complete + // refalQ vvva--addrvvvtttddd + // refalT ---aaaa---sss---ddd + // profalQ ---v-v-v-a.-.-a---dd--r--vvvtt--td--dd + // profalT ---.-.-.-aa-a-a---..--.--sss..--.d--dd + // Pragmatic solution here: + // Map templpe onto refalT only where refalT and refalQ are both + // non-gaps + + // columns for start..end in refSeq2 + int[] gapMap = refSeq2.gapMap(); + // insert gaps in tPw + int curi = 0, width = refSeq2.getLength(); + // TBC + } + else + { + // assume 1:1 - so synthesise sequences to use to construct mapping ? + refSeq2.getDatasetSequence().addPDBId(modelpe); + if (templateSeq == null && tPw != null) + { + tPw.createDatasetSequence(); + tPw.getDatasetSequence().addPDBId(templpe); // needs to set mapping based on model yet... + al.addSequence(tPw); + added = true; + } + } + // 3. pad/insert gaps in urlToPairwise according to gaps already present in + // refSeq2 + // 4. add padded tempId sequence to alignment + // 4. associate urlToModel with refSeq2 based on position map provided by + // urlToPairwise + // 5. associate urlToModel with tempId based on position map provided by + // urlToPairwise + // start a thread to load urlToModel and process/annotate sequences. + } catch (IOException x) + { + warningMessage = x.toString(); + } finally { + if (warningMessage !=null) + { + System.err.println("Warnings whilst processing STRUCTMODEL: "+warningMessage); + } + return added; + } } private void parseHideCols(ColumnSelection colSel, String nextToken) -- 1.7.10.2