15 |
14 Oct 05 |
enell |
1 |
/* |
784 |
18 Sep 08 |
jari |
$Id$ |
784 |
18 Sep 08 |
jari |
3 |
|
784 |
18 Sep 08 |
jari |
Copyright (C) 2005 Johan Enell |
800 |
01 Oct 08 |
jari |
Copyright (C) 2008 Jari Häkkinen |
784 |
18 Sep 08 |
jari |
6 |
|
784 |
18 Sep 08 |
jari |
This file is part of the se.lu.onk.ReplicateError plug-in for |
784 |
18 Sep 08 |
jari |
BASE. Available at http://baseplugins.thep.lu.se/ and BASE web |
784 |
18 Sep 08 |
jari |
site is http://base.thep.lu.se |
784 |
18 Sep 08 |
jari |
10 |
|
784 |
18 Sep 08 |
jari |
This is free software; you can redistribute it and/or modify it |
784 |
18 Sep 08 |
jari |
under the terms of the GNU General Public License as published by |
784 |
18 Sep 08 |
jari |
the Free Software Foundation; either version 3 of the License, or |
784 |
18 Sep 08 |
jari |
(at your option) any later version. |
784 |
18 Sep 08 |
jari |
15 |
|
784 |
18 Sep 08 |
jari |
The software is distributed in the hope that it will be useful, but |
784 |
18 Sep 08 |
jari |
WITHOUT ANY WARRANTY; without even the implied warranty of |
784 |
18 Sep 08 |
jari |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
784 |
18 Sep 08 |
jari |
General Public License for more details. |
784 |
18 Sep 08 |
jari |
20 |
|
784 |
18 Sep 08 |
jari |
You should have received a copy of the GNU General Public License |
784 |
18 Sep 08 |
jari |
along with BASE. If not, see <http://www.gnu.org/licenses/>. |
784 |
18 Sep 08 |
jari |
23 |
*/ |
15 |
14 Oct 05 |
enell |
24 |
package replicateerror.AcrossAssays; |
15 |
14 Oct 05 |
enell |
25 |
|
15 |
14 Oct 05 |
enell |
26 |
import java.io.File; |
15 |
14 Oct 05 |
enell |
27 |
import java.io.IOException; |
20 |
19 Oct 05 |
enell |
28 |
import java.io.PrintStream; |
15 |
14 Oct 05 |
enell |
29 |
import java.util.ArrayList; |
56 |
08 Dec 05 |
enell |
30 |
import java.util.Arrays; |
55 |
07 Dec 05 |
enell |
31 |
import java.util.Collections; |
55 |
07 Dec 05 |
enell |
32 |
import java.util.Comparator; |
15 |
14 Oct 05 |
enell |
33 |
import java.util.HashMap; |
80 |
24 Mar 06 |
enell |
34 |
import java.util.HashSet; |
17 |
18 Oct 05 |
enell |
35 |
import java.util.Iterator; |
15 |
14 Oct 05 |
enell |
36 |
import java.util.List; |
80 |
24 Mar 06 |
enell |
37 |
import java.util.Set; |
15 |
14 Oct 05 |
enell |
38 |
import java.util.regex.Matcher; |
15 |
14 Oct 05 |
enell |
39 |
import java.util.regex.Pattern; |
15 |
14 Oct 05 |
enell |
40 |
|
15 |
14 Oct 05 |
enell |
41 |
import basefile.BASEFileException; |
15 |
14 Oct 05 |
enell |
42 |
import basefile.BASEFileReader; |
15 |
14 Oct 05 |
enell |
43 |
import basefile.BASEFileSection; |
15 |
14 Oct 05 |
enell |
44 |
import basefile.InvalidSettingException; |
15 |
14 Oct 05 |
enell |
45 |
import basefile.PluginException; |
52 |
25 Nov 05 |
enell |
46 |
import replicateerror.R; |
43 |
21 Nov 05 |
enell |
47 |
import replicateerror.Replicate; |
15 |
14 Oct 05 |
enell |
48 |
import replicateerror.ReplicateError; |
80 |
24 Mar 06 |
enell |
49 |
import replicateerror.Spot; |
15 |
14 Oct 05 |
enell |
50 |
|
15 |
14 Oct 05 |
enell |
51 |
public class ReplicateErrorAA extends ReplicateError |
15 |
14 Oct 05 |
enell |
52 |
{ |
55 |
07 Dec 05 |
enell |
53 |
private Pattern assayPattern = null; |
15 |
14 Oct 05 |
enell |
54 |
|
55 |
07 Dec 05 |
enell |
55 |
private List<Integer> group; |
15 |
14 Oct 05 |
enell |
56 |
|
80 |
24 Mar 06 |
enell |
57 |
private HashMap<String, List<Integer>> groups; |
15 |
14 Oct 05 |
enell |
58 |
|
80 |
24 Mar 06 |
enell |
59 |
private HashMap<Integer, String> assayName; |
32 |
09 Nov 05 |
enell |
60 |
|
80 |
24 Mar 06 |
enell |
61 |
private List<Integer> noGroup; |
32 |
09 Nov 05 |
enell |
62 |
|
55 |
07 Dec 05 |
enell |
63 |
private int sort; |
80 |
24 Mar 06 |
enell |
64 |
|
80 |
24 Mar 06 |
enell |
65 |
private Set<String> includeAssays; |
80 |
24 Mar 06 |
enell |
66 |
|
15 |
14 Oct 05 |
enell |
67 |
public ReplicateErrorAA() |
15 |
14 Oct 05 |
enell |
68 |
{ |
15 |
14 Oct 05 |
enell |
69 |
super(); |
80 |
24 Mar 06 |
enell |
70 |
includeAssays = new HashSet<String>(); |
80 |
24 Mar 06 |
enell |
71 |
groups = new HashMap<String, List<Integer>>(); |
80 |
24 Mar 06 |
enell |
72 |
assayName = new HashMap<Integer, String>(); |
80 |
24 Mar 06 |
enell |
73 |
noGroup = new ArrayList<Integer>(); |
20 |
19 Oct 05 |
enell |
74 |
File dataDir = new File("data"); |
20 |
19 Oct 05 |
enell |
75 |
dataDir.mkdir(); |
15 |
14 Oct 05 |
enell |
76 |
} |
15 |
14 Oct 05 |
enell |
77 |
|
15 |
14 Oct 05 |
enell |
78 |
@Override |
15 |
14 Oct 05 |
enell |
79 |
public void extractSettings(BASEFileSection section) throws PluginException |
15 |
14 Oct 05 |
enell |
80 |
{ |
15 |
14 Oct 05 |
enell |
81 |
super.extractSettings(section); |
15 |
14 Oct 05 |
enell |
82 |
String name = ""; |
15 |
14 Oct 05 |
enell |
83 |
int groupCount = 0; |
15 |
14 Oct 05 |
enell |
84 |
for (char c : section.findStringOpt("assayname").toCharArray()) |
15 |
14 Oct 05 |
enell |
85 |
{ |
15 |
14 Oct 05 |
enell |
86 |
switch (c) |
15 |
14 Oct 05 |
enell |
87 |
{ |
15 |
14 Oct 05 |
enell |
88 |
case '\\': |
15 |
14 Oct 05 |
enell |
89 |
name += "\\\\"; |
15 |
14 Oct 05 |
enell |
90 |
break; |
15 |
14 Oct 05 |
enell |
91 |
case '[': |
15 |
14 Oct 05 |
enell |
92 |
case ']': |
15 |
14 Oct 05 |
enell |
93 |
case '.': |
15 |
14 Oct 05 |
enell |
94 |
case '^': |
15 |
14 Oct 05 |
enell |
95 |
case '$': |
15 |
14 Oct 05 |
enell |
96 |
case '?': |
15 |
14 Oct 05 |
enell |
97 |
case '*': |
15 |
14 Oct 05 |
enell |
98 |
case '+': |
15 |
14 Oct 05 |
enell |
99 |
case '{': |
15 |
14 Oct 05 |
enell |
100 |
case '}': |
15 |
14 Oct 05 |
enell |
101 |
case '|': |
15 |
14 Oct 05 |
enell |
102 |
case '(': |
15 |
14 Oct 05 |
enell |
103 |
case ')': |
15 |
14 Oct 05 |
enell |
104 |
name += "\\" + c; |
15 |
14 Oct 05 |
enell |
105 |
break; |
15 |
14 Oct 05 |
enell |
106 |
case '%': |
20 |
19 Oct 05 |
enell |
107 |
name += "(.*?)"; |
15 |
14 Oct 05 |
enell |
108 |
groupCount++; |
15 |
14 Oct 05 |
enell |
109 |
break; |
15 |
14 Oct 05 |
enell |
110 |
default: |
15 |
14 Oct 05 |
enell |
111 |
name += c; |
15 |
14 Oct 05 |
enell |
112 |
break; |
15 |
14 Oct 05 |
enell |
113 |
} |
55 |
07 Dec 05 |
enell |
114 |
assayPattern = Pattern.compile(name); |
15 |
14 Oct 05 |
enell |
115 |
} |
55 |
07 Dec 05 |
enell |
116 |
group = new ArrayList<Integer>(); |
55 |
07 Dec 05 |
enell |
117 |
for (String g : section.findStringOpt("group").trim().split("\\s*,\\s*")) |
15 |
14 Oct 05 |
enell |
118 |
{ |
55 |
07 Dec 05 |
enell |
119 |
Integer i = new Integer(g); |
55 |
07 Dec 05 |
enell |
120 |
if (i > groupCount) |
55 |
07 Dec 05 |
enell |
121 |
{ |
55 |
07 Dec 05 |
enell |
122 |
throw new InvalidSettingException("Group " + i + " can't be found in assayname: " + section.findStringOpt("assayname")); |
55 |
07 Dec 05 |
enell |
123 |
} |
55 |
07 Dec 05 |
enell |
124 |
group.add(i); |
15 |
14 Oct 05 |
enell |
125 |
} |
55 |
07 Dec 05 |
enell |
126 |
if (section.findStringOpt("sort").equals("")) |
55 |
07 Dec 05 |
enell |
127 |
{ |
55 |
07 Dec 05 |
enell |
128 |
sort = -1; |
55 |
07 Dec 05 |
enell |
129 |
} |
55 |
07 Dec 05 |
enell |
130 |
else |
55 |
07 Dec 05 |
enell |
131 |
{ |
55 |
07 Dec 05 |
enell |
132 |
sort = section.findIntOpt("sort"); |
55 |
07 Dec 05 |
enell |
133 |
if (sort > groupCount) |
55 |
07 Dec 05 |
enell |
134 |
{ |
55 |
07 Dec 05 |
enell |
135 |
throw new InvalidSettingException("The sortgroup can't be found in assayname: " + section.findStringOpt("assayname")); |
55 |
07 Dec 05 |
enell |
136 |
} |
55 |
07 Dec 05 |
enell |
137 |
} |
80 |
24 Mar 06 |
enell |
138 |
if (!section.findStringOpt("includeassays").equals("")) |
80 |
24 Mar 06 |
enell |
139 |
{ |
80 |
24 Mar 06 |
enell |
140 |
includeAssays.addAll(Arrays.asList(section.findStringOpt("includeassays").trim().split("\\s*\\|\\s*"))); |
80 |
24 Mar 06 |
enell |
141 |
} |
15 |
14 Oct 05 |
enell |
142 |
} |
15 |
14 Oct 05 |
enell |
143 |
|
15 |
14 Oct 05 |
enell |
144 |
@Override |
15 |
14 Oct 05 |
enell |
145 |
public void extractAssays(BASEFileSection section, BASEFileReader bfr) |
15 |
14 Oct 05 |
enell |
146 |
throws PluginException |
15 |
14 Oct 05 |
enell |
147 |
{ |
15 |
14 Oct 05 |
enell |
148 |
try |
15 |
14 Oct 05 |
enell |
149 |
{ |
15 |
14 Oct 05 |
enell |
150 |
int nameCol = section.findFieldList("columns").indexOf("name"); |
22 |
20 Oct 05 |
enell |
151 |
int idCol = section.findFieldList("columns").indexOf("id"); |
15 |
14 Oct 05 |
enell |
152 |
|
30 |
08 Nov 05 |
enell |
153 |
HTML.openGroup(); |
15 |
14 Oct 05 |
enell |
154 |
String[] vals; |
15 |
14 Oct 05 |
enell |
155 |
while ((vals = bfr.readDataRow()) != null) |
15 |
14 Oct 05 |
enell |
156 |
{ |
80 |
24 Mar 06 |
enell |
157 |
assayName.put(new Integer(vals[idCol]), vals[nameCol]); |
22 |
20 Oct 05 |
enell |
158 |
|
80 |
24 Mar 06 |
enell |
159 |
if (includeAssays.isEmpty() || includeAssays.contains(vals[nameCol])) |
15 |
14 Oct 05 |
enell |
160 |
{ |
80 |
24 Mar 06 |
enell |
161 |
Matcher m = assayPattern.matcher(vals[nameCol]); |
80 |
24 Mar 06 |
enell |
162 |
if (m.matches()) |
55 |
07 Dec 05 |
enell |
163 |
{ |
80 |
24 Mar 06 |
enell |
164 |
String groupName = m.group(group.get(0)); |
80 |
24 Mar 06 |
enell |
165 |
for (int i = 1; i < group.size(); i++) |
80 |
24 Mar 06 |
enell |
166 |
{ |
80 |
24 Mar 06 |
enell |
167 |
groupName += "_" + m.group(group.get(i)); |
80 |
24 Mar 06 |
enell |
168 |
} |
80 |
24 Mar 06 |
enell |
169 |
List<Integer> assayGroup = groups.get(groupName); |
80 |
24 Mar 06 |
enell |
170 |
if (assayGroup == null) |
80 |
24 Mar 06 |
enell |
171 |
{ |
80 |
24 Mar 06 |
enell |
172 |
assayGroup = new ArrayList<Integer>(); |
80 |
24 Mar 06 |
enell |
173 |
} |
80 |
24 Mar 06 |
enell |
174 |
assayGroup.add(new Integer(vals[idCol])); |
80 |
24 Mar 06 |
enell |
175 |
groups.put(groupName, assayGroup); |
55 |
07 Dec 05 |
enell |
176 |
} |
80 |
24 Mar 06 |
enell |
177 |
else |
15 |
14 Oct 05 |
enell |
178 |
{ |
80 |
24 Mar 06 |
enell |
179 |
HTML.addGroupNoGroup(vals[nameCol]); |
80 |
24 Mar 06 |
enell |
180 |
noGroup.add(new Integer(vals[idCol])); |
80 |
24 Mar 06 |
enell |
181 |
System.err.println(vals[nameCol] + " didn't match " + assayPattern.pattern()); |
15 |
14 Oct 05 |
enell |
182 |
} |
15 |
14 Oct 05 |
enell |
183 |
} |
15 |
14 Oct 05 |
enell |
184 |
else |
15 |
14 Oct 05 |
enell |
185 |
{ |
30 |
08 Nov 05 |
enell |
186 |
HTML.addGroupNoGroup(vals[nameCol]); |
80 |
24 Mar 06 |
enell |
187 |
noGroup.add(new Integer(vals[idCol])); |
80 |
24 Mar 06 |
enell |
188 |
System.err.println(vals[nameCol] + " was exculded from the filtering due to the \"includeassay\" parameter"); |
15 |
14 Oct 05 |
enell |
189 |
} |
15 |
14 Oct 05 |
enell |
190 |
} |
55 |
07 Dec 05 |
enell |
191 |
|
55 |
07 Dec 05 |
enell |
// Sort the assayGroups |
55 |
07 Dec 05 |
enell |
193 |
if (sort >= 0) |
55 |
07 Dec 05 |
enell |
194 |
{ |
80 |
24 Mar 06 |
enell |
195 |
for (List<Integer> assayGroup : groups.values()) |
55 |
07 Dec 05 |
enell |
196 |
{ |
80 |
24 Mar 06 |
enell |
197 |
Collections.sort(assayGroup, new Comparator<Integer>() |
55 |
07 Dec 05 |
enell |
198 |
{ |
80 |
24 Mar 06 |
enell |
199 |
public int compare(Integer assay1, Integer assay2) |
55 |
07 Dec 05 |
enell |
200 |
{ |
55 |
07 Dec 05 |
enell |
201 |
Matcher m1 = assayPattern.matcher(assayName.get(assay1)); |
55 |
07 Dec 05 |
enell |
202 |
Matcher m2 = assayPattern.matcher(assayName.get(assay2)); |
55 |
07 Dec 05 |
enell |
203 |
m1.matches(); |
55 |
07 Dec 05 |
enell |
204 |
m2.matches(); |
55 |
07 Dec 05 |
enell |
205 |
return m1.group(sort).compareTo(m2.group(sort)); |
55 |
07 Dec 05 |
enell |
206 |
} |
55 |
07 Dec 05 |
enell |
207 |
}); |
55 |
07 Dec 05 |
enell |
208 |
} |
55 |
07 Dec 05 |
enell |
209 |
} |
55 |
07 Dec 05 |
enell |
210 |
|
20 |
19 Oct 05 |
enell |
211 |
Iterator<String> it = groups.keySet().iterator(); |
20 |
19 Oct 05 |
enell |
212 |
while (it.hasNext()) |
20 |
19 Oct 05 |
enell |
213 |
{ |
27 |
07 Nov 05 |
enell |
214 |
String key = it.next(); |
80 |
24 Mar 06 |
enell |
215 |
List<Integer> group = groups.get(key); |
27 |
07 Nov 05 |
enell |
216 |
if (group.size() == 1) |
20 |
19 Oct 05 |
enell |
217 |
{ |
52 |
25 Nov 05 |
enell |
218 |
HTML.addGroupNoGroup(assayName.get(group.get(0))); |
52 |
25 Nov 05 |
enell |
219 |
noGroup.add(group.get(0)); |
20 |
19 Oct 05 |
enell |
220 |
it.remove(); |
20 |
19 Oct 05 |
enell |
221 |
} |
56 |
08 Dec 05 |
enell |
222 |
else |
27 |
07 Nov 05 |
enell |
223 |
{ |
27 |
07 Nov 05 |
enell |
224 |
HTML.addGroup(key, assayIdToName(group)); |
27 |
07 Nov 05 |
enell |
225 |
} |
20 |
19 Oct 05 |
enell |
226 |
} |
27 |
07 Nov 05 |
enell |
227 |
HTML.closeGroup(); |
15 |
14 Oct 05 |
enell |
228 |
} |
15 |
14 Oct 05 |
enell |
229 |
catch (IOException e) |
15 |
14 Oct 05 |
enell |
230 |
{ |
15 |
14 Oct 05 |
enell |
231 |
throw new BASEFileException(e); |
15 |
14 Oct 05 |
enell |
232 |
} |
15 |
14 Oct 05 |
enell |
233 |
} |
15 |
14 Oct 05 |
enell |
234 |
|
80 |
24 Mar 06 |
enell |
235 |
private List<String> assayIdToName(List<Integer> assayId) |
27 |
07 Nov 05 |
enell |
236 |
{ |
27 |
07 Nov 05 |
enell |
237 |
List<String> result = new ArrayList<String>(assayId.size()); |
80 |
24 Mar 06 |
enell |
238 |
for (Integer id : assayId) |
27 |
07 Nov 05 |
enell |
239 |
{ |
27 |
07 Nov 05 |
enell |
240 |
result.add(assayName.get(id)); |
27 |
07 Nov 05 |
enell |
241 |
} |
27 |
07 Nov 05 |
enell |
242 |
return result; |
27 |
07 Nov 05 |
enell |
243 |
} |
27 |
07 Nov 05 |
enell |
244 |
|
15 |
14 Oct 05 |
enell |
245 |
@Override |
15 |
14 Oct 05 |
enell |
246 |
public void extractSpots(BASEFileSection section, BASEFileReader bfr) |
15 |
14 Oct 05 |
enell |
247 |
{ |
15 |
14 Oct 05 |
enell |
248 |
List<String> columns = section.findFieldList("columns"); |
15 |
14 Oct 05 |
enell |
249 |
List<String> assayFields = section.findFieldList("assayFields"); |
80 |
24 Mar 06 |
enell |
250 |
List<Integer> assays = section.findFieldIntList("assays"); |
15 |
14 Oct 05 |
enell |
251 |
|
15 |
14 Oct 05 |
enell |
252 |
int posCol = columns.indexOf("position"); |
15 |
14 Oct 05 |
enell |
253 |
int repCol = columns.indexOf("reporter"); |
15 |
14 Oct 05 |
enell |
254 |
int assayData = columns.indexOf("assayData"); |
15 |
14 Oct 05 |
enell |
255 |
int int1Col = assayFields.indexOf("intensity1"); |
15 |
14 Oct 05 |
enell |
256 |
int int2Col = assayFields.indexOf("intensity2"); |
15 |
14 Oct 05 |
enell |
257 |
|
80 |
24 Mar 06 |
enell |
258 |
HashMap<Integer, Integer> assayColumns = new HashMap<Integer, Integer>(); |
17 |
18 Oct 05 |
enell |
259 |
for (int i = 0; i < assays.size(); i++) |
17 |
18 Oct 05 |
enell |
260 |
{ |
17 |
18 Oct 05 |
enell |
261 |
assayColumns.put(assays.get(i), assayData + assayFields.size() * i); |
17 |
18 Oct 05 |
enell |
262 |
} |
22 |
20 Oct 05 |
enell |
263 |
|
17 |
18 Oct 05 |
enell |
264 |
BASEFileSection spotSection = new BASEFileSection(); |
17 |
18 Oct 05 |
enell |
265 |
spotSection.setHeader("section", "spots"); |
17 |
18 Oct 05 |
enell |
266 |
spotSection.setHeader("channels", "2"); |
17 |
18 Oct 05 |
enell |
267 |
spotSection.setHeader("assayFields", "intensity1\tintensity2"); |
17 |
18 Oct 05 |
enell |
268 |
spotSection.setHeader("columns", "position\treporter\tassayData"); |
17 |
18 Oct 05 |
enell |
269 |
spotSection.setHeader("assays", ""); |
17 |
18 Oct 05 |
enell |
270 |
|
15 |
14 Oct 05 |
enell |
271 |
try |
15 |
14 Oct 05 |
enell |
272 |
{ |
43 |
21 Nov 05 |
enell |
273 |
HTML.openPlotsTable(center.toString()); |
56 |
08 Dec 05 |
enell |
274 |
for (String groupName : groups.keySet()) |
15 |
14 Oct 05 |
enell |
275 |
{ |
80 |
24 Mar 06 |
enell |
276 |
List<Integer> assayGroup = groups.get(groupName); |
80 |
24 Mar 06 |
enell |
277 |
HashMap<Integer, Replicate> replicates = new HashMap<Integer, Replicate>(); |
80 |
24 Mar 06 |
enell |
278 |
HashMap<Integer, Replicate> singletons = new HashMap<Integer, Replicate>(); |
80 |
24 Mar 06 |
enell |
279 |
|
17 |
18 Oct 05 |
enell |
280 |
String[] vals; |
17 |
18 Oct 05 |
enell |
281 |
while ((vals = bfr.readDataRow()) != null) |
15 |
14 Oct 05 |
enell |
282 |
{ |
17 |
18 Oct 05 |
enell |
283 |
int reporter = new Integer(vals[repCol]); |
80 |
24 Mar 06 |
enell |
284 |
Replicate replicate = replicates.get(reporter); |
32 |
09 Nov 05 |
enell |
285 |
if (replicate == null) |
15 |
14 Oct 05 |
enell |
286 |
{ |
80 |
24 Mar 06 |
enell |
287 |
replicate = new Replicate(); |
17 |
18 Oct 05 |
enell |
288 |
} |
17 |
18 Oct 05 |
enell |
289 |
|
17 |
18 Oct 05 |
enell |
290 |
for (int i = 0; i < assayGroup.size(); i++) |
17 |
18 Oct 05 |
enell |
291 |
{ |
32 |
09 Nov 05 |
enell |
292 |
float int1; |
32 |
09 Nov 05 |
enell |
293 |
float int2; |
87 |
04 Apr 06 |
enell |
294 |
int position = Integer.MIN_VALUE; |
15 |
14 Oct 05 |
enell |
295 |
try |
15 |
14 Oct 05 |
enell |
296 |
{ |
80 |
24 Mar 06 |
enell |
297 |
int assayCol = assayColumns.get(assayGroup.get(i)); |
80 |
24 Mar 06 |
enell |
298 |
position = new Integer(vals[posCol]); |
80 |
24 Mar 06 |
enell |
299 |
int1 = new Float(vals[assayCol + int1Col]); |
80 |
24 Mar 06 |
enell |
300 |
int2 = new Float(vals[assayCol + int2Col]); |
32 |
09 Nov 05 |
enell |
301 |
if (int1 <= 0 || int2 <= 0) |
17 |
18 Oct 05 |
enell |
302 |
{ |
32 |
09 Nov 05 |
enell |
303 |
int1 = Float.NaN; |
32 |
09 Nov 05 |
enell |
304 |
int2 = Float.NaN; |
17 |
18 Oct 05 |
enell |
305 |
} |
15 |
14 Oct 05 |
enell |
306 |
} |
15 |
14 Oct 05 |
enell |
307 |
catch (NumberFormatException e) |
15 |
14 Oct 05 |
enell |
308 |
{ |
32 |
09 Nov 05 |
enell |
309 |
int1 = Float.NaN; |
32 |
09 Nov 05 |
enell |
310 |
int2 = Float.NaN; |
15 |
14 Oct 05 |
enell |
311 |
} |
87 |
04 Apr 06 |
enell |
312 |
if (position > Integer.MIN_VALUE) |
80 |
24 Mar 06 |
enell |
313 |
{ |
792 |
24 Sep 08 |
jari |
// This construct is not pretty but it is a consequence |
792 |
24 Sep 08 |
jari |
// of fixing a bug in ReplicateErrarWA.java. Here we |
792 |
24 Sep 08 |
jari |
// expect the ArrayList to be of size 0 or 1 nothng |
792 |
24 Sep 08 |
jari |
// else. |
792 |
24 Sep 08 |
jari |
318 |
ArrayList<Spot> als = replicate.getAssaySpot(assayGroup.get(i)); |
792 |
24 Sep 08 |
jari |
319 |
if (als.size() == 0) |
80 |
24 Mar 06 |
enell |
320 |
{ |
792 |
24 Sep 08 |
jari |
321 |
Spot s = new Spot(assayGroup.get(i)); |
792 |
24 Sep 08 |
jari |
322 |
s.add(position, int1, int2); |
80 |
24 Mar 06 |
enell |
323 |
replicate.add(s); |
80 |
24 Mar 06 |
enell |
324 |
} |
792 |
24 Sep 08 |
jari |
325 |
else |
792 |
24 Sep 08 |
jari |
326 |
{ |
792 |
24 Sep 08 |
jari |
327 |
als.get(0).add(position, int1, int2); |
792 |
24 Sep 08 |
jari |
328 |
} |
80 |
24 Mar 06 |
enell |
329 |
} |
15 |
14 Oct 05 |
enell |
330 |
} |
80 |
24 Mar 06 |
enell |
331 |
replicates.put(reporter, replicate); |
80 |
24 Mar 06 |
enell |
332 |
} |
80 |
24 Mar 06 |
enell |
333 |
|
791 |
24 Sep 08 |
jari |
// remove unusable replicates |
791 |
24 Sep 08 |
jari |
335 |
purgeUnusableReplicates(replicates, singletons); |
80 |
24 Mar 06 |
enell |
336 |
|
795 |
01 Oct 08 |
jari |
// calculate mean or median before filter |
80 |
24 Mar 06 |
enell |
338 |
List<Float> mList = getMList(replicates.values()); |
32 |
09 Nov 05 |
enell |
339 |
float averageBefore; |
56 |
08 Dec 05 |
enell |
340 |
int nbrBefore = mList.size(); |
43 |
21 Nov 05 |
enell |
341 |
if (center == Center.median) |
32 |
09 Nov 05 |
enell |
342 |
{ |
43 |
21 Nov 05 |
enell |
343 |
averageBefore = median(mList); |
32 |
09 Nov 05 |
enell |
344 |
} |
32 |
09 Nov 05 |
enell |
345 |
else |
32 |
09 Nov 05 |
enell |
346 |
{ |
43 |
21 Nov 05 |
enell |
347 |
averageBefore = mean(mList); |
32 |
09 Nov 05 |
enell |
348 |
} |
80 |
24 Mar 06 |
enell |
// Calculate standard deviation befor filter |
43 |
21 Nov 05 |
enell |
350 |
float sdBefore = standardDiviation(mList, mean(mList)); |
55 |
07 Dec 05 |
enell |
351 |
|
80 |
24 Mar 06 |
enell |
352 |
R.setABRBefore(groupName, caluculateABR(replicates.values())); |
17 |
18 Oct 05 |
enell |
353 |
|
791 |
24 Sep 08 |
jari |
// print result to file for later use in R |
80 |
24 Mar 06 |
enell |
355 |
printDuplicates(replicates.values(), groupName + ".data"); |
80 |
24 Mar 06 |
enell |
356 |
|
80 |
24 Mar 06 |
enell |
// filter replicates abs(M - mean) against 'sdLimit' number of sd's |
2011 |
09 Jul 13 |
olle |
// A negative 'sdLimit' indicates no filtering |
2011 |
09 Jul 13 |
olle |
359 |
if (sdLimit > 0f) |
17 |
18 Oct 05 |
enell |
360 |
{ |
2011 |
09 Jul 13 |
olle |
361 |
for (Replicate r : replicates.values()) |
2011 |
09 Jul 13 |
olle |
362 |
{ |
2011 |
09 Jul 13 |
olle |
363 |
r.filter(averageBefore, sdLimit * sdBefore); |
2011 |
09 Jul 13 |
olle |
364 |
} |
17 |
18 Oct 05 |
enell |
365 |
} |
791 |
24 Sep 08 |
jari |
// print result to file for later use in R |
80 |
24 Mar 06 |
enell |
367 |
printDuplicates(replicates.values(), groupName + "good.data"); |
80 |
24 Mar 06 |
enell |
368 |
|
80 |
24 Mar 06 |
enell |
// calculate mean after filter |
80 |
24 Mar 06 |
enell |
370 |
mList = getMList(replicates.values()); |
32 |
09 Nov 05 |
enell |
371 |
float averageAfter; |
43 |
21 Nov 05 |
enell |
372 |
if (center == Center.median) |
32 |
09 Nov 05 |
enell |
373 |
{ |
43 |
21 Nov 05 |
enell |
374 |
averageAfter = median(mList); |
32 |
09 Nov 05 |
enell |
375 |
} |
32 |
09 Nov 05 |
enell |
376 |
else |
32 |
09 Nov 05 |
enell |
377 |
{ |
43 |
21 Nov 05 |
enell |
378 |
averageAfter = mean(mList); |
32 |
09 Nov 05 |
enell |
379 |
} |
80 |
24 Mar 06 |
enell |
// Calculate standard deviation after filter |
43 |
21 Nov 05 |
enell |
381 |
float sdAfter = standardDiviation(mList, mean(mList)); |
32 |
09 Nov 05 |
enell |
382 |
|
80 |
24 Mar 06 |
enell |
383 |
R.setABRAfter(groupName, caluculateABR(replicates.values())); |
55 |
07 Dec 05 |
enell |
384 |
|
80 |
24 Mar 06 |
enell |
385 |
for (Integer assay : assayGroup) |
80 |
24 Mar 06 |
enell |
386 |
{ |
80 |
24 Mar 06 |
enell |
387 |
spotSection.setHeader("assays", assay); |
80 |
24 Mar 06 |
enell |
388 |
System.out.println(spotSection); |
80 |
24 Mar 06 |
enell |
389 |
printSpots(assay, replicates); |
80 |
24 Mar 06 |
enell |
390 |
printSpots(assay, singletons); |
80 |
24 Mar 06 |
enell |
391 |
System.out.println(); |
80 |
24 Mar 06 |
enell |
392 |
} |
80 |
24 Mar 06 |
enell |
393 |
|
795 |
01 Oct 08 |
jari |
394 |
HTML.addPlotsTable(groupName, averageBefore, sdBefore, nbrBefore, |
795 |
01 Oct 08 |
jari |
395 |
averageAfter, sdAfter, mList.size()); |
795 |
01 Oct 08 |
jari |
396 |
|
17 |
18 Oct 05 |
enell |
397 |
bfr.resetDataPosition(section); |
15 |
14 Oct 05 |
enell |
398 |
} |
27 |
07 Nov 05 |
enell |
399 |
HTML.closePlotsTable(); |
52 |
25 Nov 05 |
enell |
400 |
R.printPlotFile(); |
32 |
09 Nov 05 |
enell |
401 |
|
30 |
08 Nov 05 |
enell |
402 |
if (noGroup.size() > 0) |
27 |
07 Nov 05 |
enell |
403 |
{ |
30 |
08 Nov 05 |
enell |
404 |
spotSection.setHeader("assays", noGroup.toArray()); |
27 |
07 Nov 05 |
enell |
405 |
System.out.println(spotSection); |
27 |
07 Nov 05 |
enell |
406 |
String[] vals; |
27 |
07 Nov 05 |
enell |
407 |
while ((vals = bfr.readDataRow()) != null) |
27 |
07 Nov 05 |
enell |
408 |
{ |
54 |
05 Dec 05 |
enell |
409 |
System.out.print(vals[posCol] + "\t" + vals[repCol]); |
27 |
07 Nov 05 |
enell |
410 |
|
80 |
24 Mar 06 |
enell |
411 |
for (Integer assay : noGroup) |
27 |
07 Nov 05 |
enell |
412 |
{ |
27 |
07 Nov 05 |
enell |
413 |
System.out.print("\t" + vals[assayColumns.get(assay) + int1Col]); |
27 |
07 Nov 05 |
enell |
414 |
System.out.print("\t" + vals[assayColumns.get(assay) + int2Col]); |
27 |
07 Nov 05 |
enell |
415 |
} |
27 |
07 Nov 05 |
enell |
416 |
System.out.println(); |
27 |
07 Nov 05 |
enell |
417 |
} |
27 |
07 Nov 05 |
enell |
418 |
} |
32 |
09 Nov 05 |
enell |
419 |
|
15 |
14 Oct 05 |
enell |
420 |
} |
17 |
18 Oct 05 |
enell |
421 |
catch (IOException e) |
17 |
18 Oct 05 |
enell |
422 |
{ |
17 |
18 Oct 05 |
enell |
423 |
e.printStackTrace(); |
17 |
18 Oct 05 |
enell |
424 |
} |
15 |
14 Oct 05 |
enell |
425 |
} |
784 |
18 Sep 08 |
jari |
426 |
} |