1 package compbio.data.sequence;
\r
4 import java.io.IOException;
\r
5 import java.io.Writer;
\r
6 import java.util.ArrayList;
\r
7 import java.util.Iterator;
\r
8 import java.util.List;
\r
9 import java.util.Map;
\r
10 import java.util.Set;
\r
11 import java.util.TreeMap;
\r
12 import java.util.TreeSet;
\r
14 import javax.xml.bind.annotation.XmlAccessType;
\r
15 import javax.xml.bind.annotation.XmlAccessorType;
\r
16 import javax.xml.bind.annotation.XmlTransient;
\r
18 import compbio.data.sequence.ScoreManager.ScoreHolder;
\r
19 import compbio.util.SysPrefs;
\r
21 @XmlAccessorType(XmlAccessType.FIELD)
\r
22 public class RNAStructScoreManager extends ScoreManager {
\r
25 private RNAStructScoreManager() {
\r
26 //Default JAXB constructor
\r
30 public RNAStructScoreManager(List<String> structs, List<TreeSet<Score>> data) {
\r
31 assert(structs.size() == data.size());
\r
33 List<ScoreHolder> seqScores = new ArrayList<ScoreHolder>();
\r
35 for (int i = 0; i < structs.size(); i++) {
\r
36 seqScores.add(new ScoreHolder(structs.get(i), data.get(i)));
\r
38 this.seqScores = seqScores;
\r
41 // I put this in purely because it mirrors a method in ScoreManager, not because I need it :/
\r
42 public static RNAStructScoreManager newInstance(List<String> structs, List<TreeSet<Score>> data) {
\r
43 return new RNAStructScoreManager(structs, data);
\r
46 public List<String> getStructs() {
\r
47 List<String> structs = new ArrayList<String>();
\r
48 for (ScoreHolder sch : this.seqScores) {
\r
49 structs.add(sch.id);
\r
54 public List<TreeSet<Score>> getData() {
\r
55 List<TreeSet<Score>> data = new ArrayList<TreeSet<Score>>();
\r
56 for (ScoreHolder sch : this.seqScores) {
\r
57 data.add(sch.scores);
\r
62 // Send this data Structure back to something approximating the stdoutFile
\r
63 // with extra information from alifold.out
\r
65 public String toString() {
\r
67 // The first objects hold the Consensus Alignment and the alifold.out info
\r
68 out += this.getStructs().get(0) + SysPrefs.newlinechar;
\r
70 // Now the rest of the structures with energies/frequencies
\r
71 for (int i = 1; i < this.getStructs().size(); i++) {
\r
72 out = out + this.getStructs().get(i).toString();
\r
74 if (this.getData().get(i).first().getScores().size() > 0) {
\r
75 List<Float> scores = this.getData().get(i).first().getScores();
\r
76 if (scores.size() >= 3) {
\r
77 out = out + " (" + scores.get(0).toString() + " = "
\r
78 + scores.get(1).toString() + " + " + scores.get(2).toString()
\r
79 + ")" + SysPrefs.newlinechar;
\r
81 else if (this.getData().get(i).first().getMethod().equals("alifoldMEA")) {
\r
82 out = out + " { " + scores.get(0).toString() + " MEA="
\r
83 + scores.get(1).toString() + "}" + SysPrefs.newlinechar;
\r
85 else if (scores.size() >= 2) {
\r
86 out = out + " [" + scores.get(0).toString() + ", "
\r
87 + scores.get(1).toString() + "]" + SysPrefs.newlinechar;
\r
90 } else out += SysPrefs.newlinechar;
\r
92 if (this.getData().get(0).first().getScores().size() > 0) {
\r
93 Iterator<Score> iScores = this.getData().get(0).iterator();
\r
94 out += "Base Pairings followed by probability" + SysPrefs.newlinechar;
\r
95 for (int i = 0; i < this.getData().get(0).size(); i++) {
\r
96 Score s = iScores.next();
\r
97 Range r = s.getRanges().first();
\r
98 Float score = s.getScores().get(0);
\r
99 out += String.format("%4d %4d %.1f%n", r.getFrom(), r.getTo(),
\r
109 public boolean equals(Object obj) {
\r
113 if (!(obj instanceof RNAStructScoreManager)) {
\r
116 RNAStructScoreManager other = (RNAStructScoreManager) obj;
\r
117 if (this.getStructs() == null) {
\r
118 if (other.getStructs() != null) {
\r
121 } else if (!this.getStructs().equals(other.getStructs()))
\r
123 if (this.getData() == null) {
\r
124 if (other.getData() != null)
\r
126 } else if (!this.getData().equals(other.getData()))
\r