34 |
11 Nov 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 |
*/ |
43 |
21 Nov 05 |
enell |
24 |
package replicateerror; |
34 |
11 Nov 05 |
enell |
25 |
|
34 |
11 Nov 05 |
enell |
26 |
import java.util.ArrayList; |
80 |
24 Mar 06 |
enell |
27 |
import java.util.HashSet; |
80 |
24 Mar 06 |
enell |
28 |
import java.util.Iterator; |
80 |
24 Mar 06 |
enell |
29 |
import java.util.NoSuchElementException; |
80 |
24 Mar 06 |
enell |
30 |
import java.util.Set; |
34 |
11 Nov 05 |
enell |
31 |
|
34 |
11 Nov 05 |
enell |
32 |
public class Replicate |
80 |
24 Mar 06 |
enell |
33 |
extends ArrayList<Spot> |
34 |
11 Nov 05 |
enell |
34 |
{ |
34 |
11 Nov 05 |
enell |
35 |
|
792 |
24 Sep 08 |
jari |
36 |
public ArrayList<Spot> getAssaySpot(int assay) |
34 |
11 Nov 05 |
enell |
37 |
{ |
792 |
24 Sep 08 |
jari |
38 |
ArrayList<Spot> retVal=new ArrayList<Spot>(); |
80 |
24 Mar 06 |
enell |
39 |
for(Spot s : this) |
80 |
24 Mar 06 |
enell |
40 |
{ |
80 |
24 Mar 06 |
enell |
41 |
if (s.getAssay() == assay) |
80 |
24 Mar 06 |
enell |
42 |
{ |
792 |
24 Sep 08 |
jari |
43 |
retVal.add(s); |
80 |
24 Mar 06 |
enell |
44 |
} |
80 |
24 Mar 06 |
enell |
45 |
} |
792 |
24 Sep 08 |
jari |
46 |
return retVal; |
34 |
11 Nov 05 |
enell |
47 |
} |
80 |
24 Mar 06 |
enell |
48 |
|
80 |
24 Mar 06 |
enell |
49 |
public final float getReplicateRatio(int s1, int s2) |
34 |
11 Nov 05 |
enell |
50 |
{ |
80 |
24 Mar 06 |
enell |
51 |
return get(s1).getM() / get(s2).getM(); |
34 |
11 Nov 05 |
enell |
52 |
} |
34 |
11 Nov 05 |
enell |
53 |
|
80 |
24 Mar 06 |
enell |
54 |
public float getReplicateM(int s1, int s2) |
34 |
11 Nov 05 |
enell |
55 |
{ |
80 |
24 Mar 06 |
enell |
56 |
return (float) (Math.log(getReplicateRatio(s1, s2)) / Math.log(2)); |
34 |
11 Nov 05 |
enell |
57 |
} |
34 |
11 Nov 05 |
enell |
58 |
|
80 |
24 Mar 06 |
enell |
59 |
/** |
101 |
05 May 06 |
enell |
* Returns false if there isnt any duplicate i the replicate with a valid M value. |
80 |
24 Mar 06 |
enell |
61 |
*/ |
80 |
24 Mar 06 |
enell |
62 |
public final boolean valid() |
56 |
08 Dec 05 |
enell |
63 |
{ |
80 |
24 Mar 06 |
enell |
64 |
boolean result = false; |
80 |
24 Mar 06 |
enell |
65 |
if (size() < 2) return false; |
80 |
24 Mar 06 |
enell |
66 |
Iterator<Spot[]> i = duplicateIterator(); |
80 |
24 Mar 06 |
enell |
67 |
while (i.hasNext()) |
80 |
24 Mar 06 |
enell |
68 |
{ |
80 |
24 Mar 06 |
enell |
69 |
Spot[] d = i.next(); |
80 |
24 Mar 06 |
enell |
70 |
result |= !Float.isNaN(getReplicateRatio(d[0], d[1])); |
80 |
24 Mar 06 |
enell |
71 |
} |
80 |
24 Mar 06 |
enell |
72 |
return result; |
56 |
08 Dec 05 |
enell |
73 |
} |
56 |
08 Dec 05 |
enell |
74 |
|
80 |
24 Mar 06 |
enell |
75 |
public void filter(float from, float threshold) |
34 |
11 Nov 05 |
enell |
76 |
{ |
80 |
24 Mar 06 |
enell |
77 |
Set<Spot> good = new HashSet<Spot>(); |
80 |
24 Mar 06 |
enell |
78 |
Iterator<Spot[]> i = duplicateIterator(); |
80 |
24 Mar 06 |
enell |
79 |
while (i.hasNext()) |
80 |
24 Mar 06 |
enell |
80 |
{ |
80 |
24 Mar 06 |
enell |
81 |
Spot[] d = i.next(); |
101 |
05 May 06 |
enell |
82 |
if (Math.abs(getReplicateM(d[0], d[1]) - from) < threshold) |
80 |
24 Mar 06 |
enell |
83 |
{ |
80 |
24 Mar 06 |
enell |
84 |
good.add(d[0]); |
80 |
24 Mar 06 |
enell |
85 |
good.add(d[1]); |
80 |
24 Mar 06 |
enell |
86 |
} |
80 |
24 Mar 06 |
enell |
87 |
} |
80 |
24 Mar 06 |
enell |
88 |
this.retainAll(good); |
34 |
11 Nov 05 |
enell |
89 |
} |
80 |
24 Mar 06 |
enell |
90 |
|
80 |
24 Mar 06 |
enell |
91 |
public final Iterator<Spot[]> duplicateIterator() |
56 |
08 Dec 05 |
enell |
92 |
{ |
80 |
24 Mar 06 |
enell |
93 |
return new Iterator<Spot[]>() |
80 |
24 Mar 06 |
enell |
94 |
{ |
80 |
24 Mar 06 |
enell |
95 |
private int i = 0; |
80 |
24 Mar 06 |
enell |
96 |
private int j = 0; |
80 |
24 Mar 06 |
enell |
97 |
private Spot[] dup = null; |
80 |
24 Mar 06 |
enell |
98 |
|
80 |
24 Mar 06 |
enell |
99 |
public boolean hasNext() |
80 |
24 Mar 06 |
enell |
100 |
{ |
80 |
24 Mar 06 |
enell |
101 |
j++; |
80 |
24 Mar 06 |
enell |
102 |
if (j >= size()) |
80 |
24 Mar 06 |
enell |
103 |
{ |
80 |
24 Mar 06 |
enell |
104 |
i++; |
80 |
24 Mar 06 |
enell |
105 |
j = i+1; |
80 |
24 Mar 06 |
enell |
106 |
} |
789 |
18 Sep 08 |
jari |
107 |
dup = i < size() && j < size() ? new Spot[] {get(i), get(j)} : null; |
80 |
24 Mar 06 |
enell |
108 |
return dup != null; |
80 |
24 Mar 06 |
enell |
109 |
} |
56 |
08 Dec 05 |
enell |
110 |
|
80 |
24 Mar 06 |
enell |
111 |
public Spot[] next() |
80 |
24 Mar 06 |
enell |
112 |
{ |
80 |
24 Mar 06 |
enell |
113 |
if (dup != null) |
80 |
24 Mar 06 |
enell |
114 |
{ |
80 |
24 Mar 06 |
enell |
115 |
return dup; |
80 |
24 Mar 06 |
enell |
116 |
} |
80 |
24 Mar 06 |
enell |
117 |
throw new NoSuchElementException(); |
80 |
24 Mar 06 |
enell |
118 |
} |
47 |
22 Nov 05 |
enell |
119 |
|
80 |
24 Mar 06 |
enell |
120 |
public void remove() |
34 |
11 Nov 05 |
enell |
121 |
{ |
80 |
24 Mar 06 |
enell |
122 |
throw new UnsupportedOperationException(); |
34 |
11 Nov 05 |
enell |
123 |
} |
80 |
24 Mar 06 |
enell |
124 |
}; |
34 |
11 Nov 05 |
enell |
125 |
} |
80 |
24 Mar 06 |
enell |
126 |
|
80 |
24 Mar 06 |
enell |
127 |
public static float getReplicateRatio(Spot s1, Spot s2) |
34 |
11 Nov 05 |
enell |
128 |
{ |
80 |
24 Mar 06 |
enell |
129 |
return s1.getRatio() / s2.getRatio(); |
34 |
11 Nov 05 |
enell |
130 |
} |
80 |
24 Mar 06 |
enell |
131 |
|
80 |
24 Mar 06 |
enell |
132 |
public static float getReplicateM(Spot s1, Spot s2) |
34 |
11 Nov 05 |
enell |
133 |
{ |
80 |
24 Mar 06 |
enell |
134 |
return (float) (Math.log(getReplicateRatio(s1, s2)) / Math.log(2)); |
34 |
11 Nov 05 |
enell |
135 |
} |
34 |
11 Nov 05 |
enell |
136 |
} |