From c7aec7d18ae7567c160be71b318139a9aa2b1c32 Mon Sep 17 00:00:00 2001 From: Daniel Barton Date: Tue, 27 Aug 2013 13:47:23 +0100 Subject: [PATCH] JAL-1358 Just the eclipse project/classpath files so that I can stash changes and demonstrate DisorderAnnotExportImport failure --- .classpath | 2 +- src/jalview/ws/jws2/RNAalifoldClient.java | 140 +++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 src/jalview/ws/jws2/RNAalifoldClient.java diff --git a/.classpath b/.classpath index f396252..8f6f94c 100644 --- a/.classpath +++ b/.classpath @@ -39,7 +39,6 @@ - @@ -48,5 +47,6 @@ + diff --git a/src/jalview/ws/jws2/RNAalifoldClient.java b/src/jalview/ws/jws2/RNAalifoldClient.java new file mode 100644 index 0000000..70ddb7e --- /dev/null +++ b/src/jalview/ws/jws2/RNAalifoldClient.java @@ -0,0 +1,140 @@ +package jalview.ws.jws2; + +import jalview.api.AlignCalcWorkerI; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Annotation; +import jalview.gui.AlignFrame; +import jalview.ws.jws2.jabaws2.Jws2Instance; +import jalview.ws.params.WsParamSetI; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.TreeSet; + +import compbio.data.msa.jaxws.Align; +import compbio.data.sequence.Range; +import compbio.data.sequence.Score; +import compbio.data.sequence.RNAStructScoreManager; +import compbio.data.sequence.ScoreManager; +import compbio.metadata.Argument; + +public class RNAalifoldClient extends JabawsAlignCalcWorker implements + AlignCalcWorkerI +{ + + String methodName; + + AlignFrame af; + + public RNAalifoldClient(Jws2Instance sh, AlignFrame alignFrame, + WsParamSetI preset, List paramset) + { + super(sh, alignFrame, preset, paramset); + + + af = alignFrame; + + methodName = sh.serviceType; + + } + + @Override + public String getServiceActionText() + { + return "Submitting RNA alignment for Secondary Structure prediction using" + + "RNAalifold Service"; + } + + @Override + public void updateResultAnnotation(boolean immediate) + { + + if (immediate || !calcMan.isWorking(this) && scoremanager != null) + { + + + + List ourAnnot = new ArrayList(); +// ourAnnots = new ArrayList(); + + // So I don't have to do any more casting + List structs = ((RNAStructScoreManager) scoremanager).getStructs(); + List> data = ((RNAStructScoreManager) scoremanager).getData(); + + // Deal with the consensus structure and (?)BasePair Probabilities + Annotation[] anns = new Annotation[structs.get(1).length()]; + + // check if the first Score object is populated with base pair probabilities + Score fscore = data.get(0).first(); + boolean BPScores = (fscore.getScores().size() > 0 + && fscore.getRanges() != null); + + TreeMap basePairs = null; + if (BPScores) { + // The base pair probabilities are stored in a set in scoremanager... we want a map + basePairs = new TreeMap(); + for (Score score : data.get(0)) { + // The Score objects contain a set of size one containing the range and + // an ArrayList of size one containing the probabilty + basePairs.put(score.getRanges().first(), new Float(score.getScores().get(0))); + } + } + + // ignoring the Consensus alignemnt for now, get the Structure and make an AlignmentAnnotation + String struct = structs.get(1); + for (int i = 0; i < struct.length(); i++) { + + if (BPScores) { + // Return all the contacts associated with position i + List contacts = isContact(basePairs, i+1); + + if (contacts.size() == 0) { + anns[i] = new Annotation(struct.substring(i, i+1), "", struct.charAt(i), 0f); + } + else if (contacts.size() == 1) { + // There is only one contact associated with this base + float prob = basePairs.get(contacts.get(i)); + anns[i] = new Annotation(struct.substring(i, i+1), "", struct.charAt(i), prob); + } + else if (contacts.size() > 1) { + // For now we will simply deal with alternate contact information by mentioning its + // existance in the description + float prob = basePairs.get(contacts.get(i)); + anns[i] = new Annotation(struct.substring(i, i+1), "This base has alternate contact(s)", + struct.charAt(i), prob); + } + } + else { + // Same as the first if from the previous block + anns[i] = new Annotation(struct.substring(i, i+1), "", struct.charAt(i), 0f); + } + } + + AlignmentAnnotation annot = new AlignmentAnnotation("Consensus Structure", "Free Energy", anns); + annot.setScore(data.get(1).first().getScores().get(0)); + + if (ourAnnot.size() > 0) { + updateOurAnnots(ourAnnot); + } + + } + } + + // Check whether, at position i there is a base contact and return all the + // contacts at this position. Should be in order of descending probability. + private List isContact(TreeMap basePairs, int i) { + + List contacts = new ArrayList(); + + for (Range contact : basePairs.keySet()) { + // finds the contacts associtated with position i ordered by the natural + // ordering of the Scores TreeSet in ScoreManager which is, descending probability + if (contact.from == i || contact.to == i) contacts.add(contact); + } + + return contacts; + } +} -- 1.7.10.2