Update the last commit which missed some files. RNAStructScoreManager
[jabaws.git] / datamodel / compbio / data / sequence / RNAStructScoreManager.java
1 package compbio.data.sequence;\r
2 \r
3 \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
13 \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
17 \r
18 import compbio.data.sequence.ScoreManager.ScoreHolder;\r
19 import compbio.util.SysPrefs;\r
20 \r
21 @XmlAccessorType(XmlAccessType.FIELD)\r
22 public class RNAStructScoreManager extends ScoreManager {\r
23 \r
24         \r
25         private RNAStructScoreManager() {\r
26                 //Default JAXB constructor\r
27         }\r
28         \r
29 \r
30         public RNAStructScoreManager(List<String> structs, List<TreeSet<Score>> data) {\r
31                 assert(structs.size() == data.size());\r
32                 \r
33                 List<ScoreHolder> seqScores = new ArrayList<ScoreHolder>();\r
34                 \r
35                 for (int i = 0; i < structs.size(); i++) {\r
36                         seqScores.add(new ScoreHolder(structs.get(i), data.get(i)));\r
37                 }\r
38                 this.seqScores = seqScores;\r
39         }\r
40         \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
44         }\r
45         \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
50                 }\r
51                 return structs;\r
52         }\r
53         \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
58                 }\r
59                 return data;\r
60         }\r
61 \r
62         // Send this data Structure back to something approximating the stdoutFile\r
63         // with extra information from alifold.out\r
64         @Override\r
65         public String toString() {\r
66                 String out = "";\r
67                 // The first objects hold the Consensus Alignment and the alifold.out info\r
68                 out += this.getStructs().get(0) + SysPrefs.newlinechar;\r
69 \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
73 \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
80                                 }\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
84                                 }\r
85                                 else if (scores.size() >= 2) {\r
86                                         out = out + " [" + scores.get(0).toString() + ", " \r
87                                                         + scores.get(1).toString() + "]" + SysPrefs.newlinechar;\r
88 \r
89                                 }\r
90                         } else out += SysPrefs.newlinechar; \r
91                 }\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
100                                                 score);\r
101                         }\r
102                 }\r
103 \r
104 \r
105                 return out;\r
106         }\r
107 \r
108         @Override \r
109         public boolean equals(Object obj) {\r
110                 if (obj == null) {\r
111                         return false;\r
112                 }\r
113                 if (!(obj instanceof RNAStructScoreManager)) {\r
114                         return false;\r
115                 }\r
116                 RNAStructScoreManager other = (RNAStructScoreManager) obj;\r
117                 if (this.getStructs() == null) {\r
118                         if (other.getStructs() != null) {\r
119                                 return false;\r
120                         }\r
121                 } else if (!this.getStructs().equals(other.getStructs()))\r
122                         return false;\r
123                 if (this.getData() == null) {\r
124                         if (other.getData() != null)\r
125                                 return false;\r
126                 } else if (!this.getData().equals(other.getData()))\r
127                         return false;\r
128 \r
129                 return true;\r
130         }\r
131 }\r