RNAStruct replaced by RNAStructScoreManager. Why does webservice
[jabaws.git] / datamodel / compbio / data / sequence / RNAStructScoreManager.java
diff --git a/datamodel/compbio/data/sequence/RNAStructScoreManager.java b/datamodel/compbio/data/sequence/RNAStructScoreManager.java
new file mode 100644 (file)
index 0000000..3fb856c
--- /dev/null
@@ -0,0 +1,131 @@
+package compbio.data.sequence;\r
+\r
+\r
+import java.io.IOException;\r
+import java.io.Writer;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+import java.util.TreeMap;\r
+import java.util.TreeSet;\r
+\r
+import javax.xml.bind.annotation.XmlAccessType;\r
+import javax.xml.bind.annotation.XmlAccessorType;\r
+import javax.xml.bind.annotation.XmlTransient;\r
+\r
+import compbio.data.sequence.ScoreManager.ScoreHolder;\r
+import compbio.util.SysPrefs;\r
+\r
+@XmlAccessorType(XmlAccessType.FIELD)\r
+public class RNAStructScoreManager extends ScoreManager {\r
+\r
+       \r
+       private RNAStructScoreManager() {\r
+               //Default JAXB constructor\r
+       }\r
+       \r
+\r
+       public RNAStructScoreManager(List<String> structs, List<TreeSet<Score>> data) {\r
+               assert(structs.size() == data.size());\r
+               \r
+               List<ScoreHolder> seqScores = new ArrayList<ScoreHolder>();\r
+               \r
+               for (int i = 0; i < structs.size(); i++) {\r
+                       seqScores.add(new ScoreHolder(structs.get(i), data.get(i)));\r
+               }\r
+               this.seqScores = seqScores;\r
+       }\r
+       \r
+       // I put this in purely because it mirrors a method in ScoreManager, not because I need it :/\r
+       public static RNAStructScoreManager newInstance(List<String> structs, List<TreeSet<Score>> data) {\r
+               return new RNAStructScoreManager(structs, data);\r
+       }\r
+       \r
+       public List<String> getStructs() {\r
+               List<String> structs = new ArrayList<String>();\r
+               for (ScoreHolder sch : this.seqScores) {\r
+                       structs.add(sch.id);\r
+               }\r
+               return structs;\r
+       }\r
+       \r
+       public List<TreeSet<Score>> getData() {\r
+               List<TreeSet<Score>> data = new ArrayList<TreeSet<Score>>();\r
+               for (ScoreHolder sch : this.seqScores) {\r
+                       data.add(sch.scores);\r
+               }\r
+               return data;\r
+       }\r
+\r
+       // Send this data Structure back to something approximating the stdoutFile\r
+       // with extra information from alifold.out\r
+       @Override\r
+       public String toString() {\r
+               String out = "";\r
+               // The first objects hold the Consensus Alignment and the alifold.out info\r
+               out += this.getStructs().get(0) + SysPrefs.newlinechar;\r
+\r
+               // Now the rest of the structures with energies/frequencies\r
+               for (int i = 1; i < this.getStructs().size(); i++) {\r
+                       out = out + this.getStructs().get(i).toString();\r
+\r
+                       if (this.getData().get(i).first().getScores().size() > 0) {\r
+                               List<Float> scores = this.getData().get(i).first().getScores();\r
+                               if (scores.size() >= 3) {\r
+                                       out = out + " (" + scores.get(0).toString() + " = " \r
+                                                       + scores.get(1).toString() + " + " + scores.get(2).toString()\r
+                                                       + ")" + SysPrefs.newlinechar;\r
+                               }\r
+                               else if (this.getData().get(i).first().getMethod().equals("alifoldMEA")) {\r
+                                       out = out + " { " + scores.get(0).toString() + " MEA=" \r
+                                                       + scores.get(1).toString() + "}" + SysPrefs.newlinechar;\r
+                               }\r
+                               else if (scores.size() >= 2) {\r
+                                       out = out + " [" + scores.get(0).toString() + ", " \r
+                                                       + scores.get(1).toString() + "]" + SysPrefs.newlinechar;\r
+\r
+                               }\r
+                       } else out += SysPrefs.newlinechar; \r
+               }\r
+               if (this.getData().get(0).first().getScores().size() > 0) {\r
+                       Iterator<Score> iScores = this.getData().get(0).iterator();\r
+                       out += "Base Pairings followed by probability" + SysPrefs.newlinechar;\r
+                       for (int i = 0; i < this.getData().get(0).size(); i++) {\r
+                               Score s = iScores.next();\r
+                               Range r = s.getRanges().first();\r
+                               Float score = s.getScores().get(0);\r
+                               out += String.format("%4d  %4d    %.1f%n", r.getFrom(), r.getTo(),\r
+                                               score);\r
+                       }\r
+               }\r
+\r
+\r
+               return out;\r
+       }\r
+\r
+       @Override \r
+       public boolean equals(Object obj) {\r
+               if (obj == null) {\r
+                       return false;\r
+               }\r
+               if (!(obj instanceof RNAStructScoreManager)) {\r
+                       return false;\r
+               }\r
+               RNAStructScoreManager other = (RNAStructScoreManager) obj;\r
+               if (this.getStructs() == null) {\r
+                       if (other.getStructs() != null) {\r
+                               return false;\r
+                       }\r
+               } else if (!this.getStructs().equals(other.getStructs()))\r
+                       return false;\r
+               if (this.getData() == null) {\r
+                       if (other.getData() != null)\r
+                               return false;\r
+               } else if (!this.getData().equals(other.getData()))\r
+                       return false;\r
+\r
+               return true;\r
+       }\r
+}\r