mev-4.0.01/source/org/tigr/microarray/mev/FoldFilter.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2     DetectionFilter holds data required by MAD to filter out user specified affy data.
2 26 Feb 07 jari 3
2 26 Feb 07 jari 4     Patrick Cahan
2 26 Feb 07 jari 5     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 15     // 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 26     // 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 30         // 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 57         //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 64     // 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 76         // 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 }