2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
DetectionFilter holds data required by MAD to filter out user specified affy data. |
2 |
26 Feb 07 |
jari |
3 |
|
2 |
26 Feb 07 |
jari |
Patrick Cahan |
2 |
26 Feb 07 |
jari |
pcahan1@umbc.edu |
2 |
26 Feb 07 |
jari |
6 |
*/ |
2 |
26 Feb 07 |
jari |
7 |
package org.tigr.microarray.mev; |
2 |
26 Feb 07 |
jari |
8 |
|
2 |
26 Feb 07 |
jari |
9 |
import java.io.Serializable; |
2 |
26 Feb 07 |
jari |
10 |
|
2 |
26 Feb 07 |
jari |
11 |
public class FoldFilter implements Serializable { |
2 |
26 Feb 07 |
jari |
12 |
public static final long serialVersionUID = 100010201100001L; |
2 |
26 Feb 07 |
jari |
13 |
|
2 |
26 Feb 07 |
jari |
14 |
private float fold_change; |
2 |
26 Feb 07 |
jari |
// index corresponds to file index returned by MAD.getsample(int) |
2 |
26 Feb 07 |
jari |
16 |
private int[] group_membership; |
2 |
26 Feb 07 |
jari |
17 |
private String divider; |
2 |
26 Feb 07 |
jari |
18 |
|
2 |
26 Feb 07 |
jari |
19 |
private static int NUM_OF_GROUPS = 3; |
2 |
26 Feb 07 |
jari |
20 |
private static String BOTH = "both"; |
2 |
26 Feb 07 |
jari |
21 |
private static String GREATER_THAN = ">"; |
2 |
26 Feb 07 |
jari |
22 |
private static String LESS_THAN = "<"; |
2 |
26 Feb 07 |
jari |
23 |
private static float INITAL_FOLD_CHANGE = 2.0f; |
2 |
26 Feb 07 |
jari |
24 |
|
2 |
26 Feb 07 |
jari |
25 |
|
2 |
26 Feb 07 |
jari |
// Initially place all files in group 1 |
2 |
26 Feb 07 |
jari |
27 |
public FoldFilter(String[] names){ |
2 |
26 Feb 07 |
jari |
28 |
group_membership = new int[names.length]; |
2 |
26 Feb 07 |
jari |
29 |
|
2 |
26 Feb 07 |
jari |
// initialize all in group 0 |
2 |
26 Feb 07 |
jari |
31 |
for (int i = 0; i < names.length; i++){ |
2 |
26 Feb 07 |
jari |
32 |
group_membership[i] = 0; |
2 |
26 Feb 07 |
jari |
33 |
} |
2 |
26 Feb 07 |
jari |
34 |
|
2 |
26 Feb 07 |
jari |
35 |
divider = BOTH; |
2 |
26 Feb 07 |
jari |
36 |
fold_change = INITAL_FOLD_CHANGE; |
2 |
26 Feb 07 |
jari |
37 |
} |
2 |
26 Feb 07 |
jari |
38 |
|
2 |
26 Feb 07 |
jari |
39 |
public void set_fold_change(float fold_change){ |
2 |
26 Feb 07 |
jari |
40 |
this.fold_change = fold_change; |
2 |
26 Feb 07 |
jari |
41 |
} |
2 |
26 Feb 07 |
jari |
42 |
|
2 |
26 Feb 07 |
jari |
43 |
public float get_fold_change(){ |
2 |
26 Feb 07 |
jari |
44 |
return fold_change; |
2 |
26 Feb 07 |
jari |
45 |
} |
2 |
26 Feb 07 |
jari |
46 |
|
2 |
26 Feb 07 |
jari |
47 |
public int get_group_membership(int file_index){ |
2 |
26 Feb 07 |
jari |
48 |
return group_membership[file_index]; |
2 |
26 Feb 07 |
jari |
49 |
} |
2 |
26 Feb 07 |
jari |
50 |
|
2 |
26 Feb 07 |
jari |
51 |
public String get_divider(){ |
2 |
26 Feb 07 |
jari |
52 |
return divider; |
2 |
26 Feb 07 |
jari |
53 |
} |
2 |
26 Feb 07 |
jari |
54 |
|
2 |
26 Feb 07 |
jari |
55 |
public void set_group_membership(int group_index, int file_index){ |
2 |
26 Feb 07 |
jari |
56 |
group_membership[file_index] = group_index; |
2 |
26 Feb 07 |
jari |
//System.out.println("file" + file_index + " is now in grp:" + group_membership[file_index]); |
2 |
26 Feb 07 |
jari |
58 |
} |
2 |
26 Feb 07 |
jari |
59 |
|
2 |
26 Feb 07 |
jari |
60 |
public void set_divider(String divider){ |
2 |
26 Feb 07 |
jari |
61 |
this.divider = divider; |
2 |
26 Feb 07 |
jari |
62 |
} |
2 |
26 Feb 07 |
jari |
63 |
|
2 |
26 Feb 07 |
jari |
// returns the number of samples in a specified group |
2 |
26 Feb 07 |
jari |
65 |
public int get_num_members(int index){ |
2 |
26 Feb 07 |
jari |
66 |
int num_members = 0; |
2 |
26 Feb 07 |
jari |
67 |
for (int i = 0; i < group_membership.length; i++ ){ |
2 |
26 Feb 07 |
jari |
68 |
if (get_group_membership(i) == index) { |
2 |
26 Feb 07 |
jari |
69 |
num_members++; |
2 |
26 Feb 07 |
jari |
70 |
} |
2 |
26 Feb 07 |
jari |
71 |
} |
2 |
26 Feb 07 |
jari |
72 |
return num_members; |
2 |
26 Feb 07 |
jari |
73 |
} |
2 |
26 Feb 07 |
jari |
74 |
|
2 |
26 Feb 07 |
jari |
75 |
public boolean keep_gene(float[] signals){ |
2 |
26 Feb 07 |
jari |
// get mean signal for each group |
2 |
26 Feb 07 |
jari |
77 |
float mean[] = new float[3]; |
2 |
26 Feb 07 |
jari |
78 |
mean[0] = mean[1] = mean[2] = 0.0f; |
2 |
26 Feb 07 |
jari |
79 |
|
2 |
26 Feb 07 |
jari |
80 |
for (int i = 0; i < signals.length; i++){ |
2 |
26 Feb 07 |
jari |
81 |
mean[get_group_membership(i)] += signals[i]; |
2 |
26 Feb 07 |
jari |
82 |
} |
2 |
26 Feb 07 |
jari |
83 |
mean[0] = mean[0]/get_num_members(0); |
2 |
26 Feb 07 |
jari |
84 |
mean[1] = mean[1]/get_num_members(1); |
2 |
26 Feb 07 |
jari |
85 |
|
2 |
26 Feb 07 |
jari |
86 |
if (divider.equals(GREATER_THAN)){ |
2 |
26 Feb 07 |
jari |
87 |
return ( mean[0]/mean[1] > fold_change ); |
2 |
26 Feb 07 |
jari |
88 |
} |
2 |
26 Feb 07 |
jari |
89 |
if (divider.equals(LESS_THAN)){ |
2 |
26 Feb 07 |
jari |
90 |
return ( mean[1]/mean[0] > fold_change ); |
2 |
26 Feb 07 |
jari |
91 |
} |
2 |
26 Feb 07 |
jari |
92 |
else { |
2 |
26 Feb 07 |
jari |
93 |
return ( (mean[0]/mean[1] > fold_change) || (mean[1]/mean[0] > fold_change) ); |
2 |
26 Feb 07 |
jari |
94 |
} |
2 |
26 Feb 07 |
jari |
95 |
} |
2 |
26 Feb 07 |
jari |
96 |
|
2 |
26 Feb 07 |
jari |
97 |
public String toString(){ |
2 |
26 Feb 07 |
jari |
98 |
String out = "x"; |
2 |
26 Feb 07 |
jari |
99 |
if (divider.equals(BOTH)){ |
2 |
26 Feb 07 |
jari |
100 |
out = "All genes with a fold change of greater than: " + fold_change; |
2 |
26 Feb 07 |
jari |
101 |
} |
2 |
26 Feb 07 |
jari |
102 |
if (divider.equals(GREATER_THAN)){ |
2 |
26 Feb 07 |
jari |
103 |
out = "Group A > Group B by " + fold_change + " fold."; |
2 |
26 Feb 07 |
jari |
104 |
} |
2 |
26 Feb 07 |
jari |
105 |
if (divider.equals(LESS_THAN)){ |
2 |
26 Feb 07 |
jari |
106 |
out = "Group B > Group A by " + fold_change + "fold."; |
2 |
26 Feb 07 |
jari |
107 |
} |
2 |
26 Feb 07 |
jari |
108 |
for (int i = 0; i < group_membership.length; i++){ |
2 |
26 Feb 07 |
jari |
109 |
out += "\nsample: " + i + " is in group: " + get_group_membership(i); |
2 |
26 Feb 07 |
jari |
110 |
} |
2 |
26 Feb 07 |
jari |
111 |
return out; |
2 |
26 Feb 07 |
jari |
112 |
} |
2 |
26 Feb 07 |
jari |
113 |
} |