--- /dev/null
+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