plugins/base1/se.lu.onk/trunk/OneClass/src/oneclass/ztest/Start.java

Code
Comments
Other
Rev Date Author Line
187 13 Oct 06 enell 1 /*
187 13 Oct 06 enell 2  $Id$
187 13 Oct 06 enell 3
187 13 Oct 06 enell 4  Copyright (C) 2006 Johan Enell
187 13 Oct 06 enell 5
187 13 Oct 06 enell 6  This file is part of BASE - BioArray Software Environment.
187 13 Oct 06 enell 7  Available at http://base.thep.lu.se/
187 13 Oct 06 enell 8
187 13 Oct 06 enell 9  BASE is free software; you can redistribute it and/or modify it
187 13 Oct 06 enell 10  under the terms of the GNU General Public License as published by
187 13 Oct 06 enell 11  the Free Software Foundation; either version 2 of the License, or
187 13 Oct 06 enell 12  (at your option) any later version.
187 13 Oct 06 enell 13
187 13 Oct 06 enell 14  BASE is distributed in the hope that it will be useful, but
187 13 Oct 06 enell 15  WITHOUT ANY WARRANTY; without even the implied warranty of
187 13 Oct 06 enell 16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
187 13 Oct 06 enell 17  General Public License for more details.
187 13 Oct 06 enell 18
187 13 Oct 06 enell 19  You should have received a copy of the GNU General Public License
187 13 Oct 06 enell 20  along with this program; if not, write to the Free Software
187 13 Oct 06 enell 21  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
187 13 Oct 06 enell 22  02111-1307, USA.
187 13 Oct 06 enell 23  */
241 28 Feb 07 enell 24 package oneclass.ztest;
187 13 Oct 06 enell 25
241 28 Feb 07 enell 26 import oneclass.plot.HistogramDataset;
241 28 Feb 07 enell 27 import oneclass.plot.ZPlot;
241 28 Feb 07 enell 28
213 07 Dec 06 enell 29 import org.jfree.data.xy.XYSeries;
213 07 Dec 06 enell 30
187 13 Oct 06 enell 31 import java.io.File;
187 13 Oct 06 enell 32 import java.io.FileNotFoundException;
187 13 Oct 06 enell 33 import java.io.IOException;
187 13 Oct 06 enell 34 import java.io.PrintWriter;
187 13 Oct 06 enell 35 import java.util.Comparator;
187 13 Oct 06 enell 36 import java.util.List;
187 13 Oct 06 enell 37
187 13 Oct 06 enell 38 import basefile.BASEFileException;
187 13 Oct 06 enell 39 import basefile.BASEFileReader;
187 13 Oct 06 enell 40 import basefile.BASEFileSpotSection;
187 13 Oct 06 enell 41 import basefile.BadFormatException;
187 13 Oct 06 enell 42
187 13 Oct 06 enell 43 public class Start
187 13 Oct 06 enell 44 {
217 08 Dec 06 enell 45   
217 08 Dec 06 enell 46   private static ZTest ztest = new ZTest();
187 13 Oct 06 enell 47
187 13 Oct 06 enell 48   /**
187 13 Oct 06 enell 49    * @param args
187 13 Oct 06 enell 50    */
187 13 Oct 06 enell 51   public static void main(String[] args)
187 13 Oct 06 enell 52   {
187 13 Oct 06 enell 53     BASEFileReader bfr;
187 13 Oct 06 enell 54     try
187 13 Oct 06 enell 55     {
187 13 Oct 06 enell 56       bfr = new BASEFileReader(new File(args.length == 1 ? args[0] : "stdin.txt"));
187 13 Oct 06 enell 57       BASEFileSpotSection<Reporter, Spot> bfss = bfr.readSpotSection();
187 13 Oct 06 enell 58
187 13 Oct 06 enell 59       List<String> columns = bfss.findFieldList("columns");
187 13 Oct 06 enell 60       List<Integer> assays = bfss.findFieldIntList("assays");
187 13 Oct 06 enell 61       List<String> assayFields = bfss.findFieldList("assayFields");
187 13 Oct 06 enell 62
187 13 Oct 06 enell 63       int mCol = assayFields.indexOf("l2ratio1_2");
221 20 Dec 06 enell 64       int aCol = assayFields.indexOf("l10intgmean1_2");
187 13 Oct 06 enell 65       int repCol = columns.indexOf("reporter");
207 04 Dec 06 enell 66       int repidCol = columns.indexOf("reporterId");
207 04 Dec 06 enell 67       int symCol = columns.indexOf("geneSymbol");
207 04 Dec 06 enell 68       int llCol = columns.indexOf("locusLink");
187 13 Oct 06 enell 69       int assayDataCol = columns.indexOf("assayData");
187 13 Oct 06 enell 70
221 20 Dec 06 enell 71       if (aCol == -1 || mCol == -1 || repCol == -1 || repidCol == -1 || symCol == -1 || llCol == -1 || assayDataCol == -1)
187 13 Oct 06 enell 72       {
187 13 Oct 06 enell 73         throw new BASEFileException("Cant find the columns l2ratio1_2, reporter or assayData");
187 13 Oct 06 enell 74       }
187 13 Oct 06 enell 75       mCol += assayDataCol;
221 20 Dec 06 enell 76       aCol += assayDataCol;
187 13 Oct 06 enell 77
187 13 Oct 06 enell 78       int dataLength = columns.size() + assays.size() * assayFields.size() - 1;
221 20 Dec 06 enell 79       bfss.setDataMatrix(bfss.findIntOpt("count"), assays.size());
187 13 Oct 06 enell 80       String[] data = bfr.readDataRow(dataLength);
187 13 Oct 06 enell 81       while (data != null)
187 13 Oct 06 enell 82       {
187 13 Oct 06 enell 83         Spot[] spots = new Spot[assays.size()];
221 20 Dec 06 enell 84         Double a = 0.0;
221 20 Dec 06 enell 85         int aCount = 0;
187 13 Oct 06 enell 86         for (int i = 0; i < assays.size(); i++)
187 13 Oct 06 enell 87         {
221 20 Dec 06 enell 88           int mIndex = mCol + i * assayFields.size();
221 20 Dec 06 enell 89           int aIndex = aCol + i * assayFields.size();
197 21 Nov 06 enell 90           Double m = Double.NaN;
221 20 Dec 06 enell 91           if (!data[mIndex].equals(""))
221 20 Dec 06 enell 92             m = new Double(data[mIndex]);
221 20 Dec 06 enell 93           if (!data[aIndex].equals(""))
187 13 Oct 06 enell 94           {
221 20 Dec 06 enell 95             a += new Double(data[aIndex]);
221 20 Dec 06 enell 96             aCount++;
187 13 Oct 06 enell 97           }
187 13 Oct 06 enell 98           spots[i] = new Spot(m);
187 13 Oct 06 enell 99         }
221 20 Dec 06 enell 100         Reporter r = new Reporter(new Integer(data[repCol]), data[repidCol], data[symCol], data[llCol], a/aCount);
187 13 Oct 06 enell 101         bfss.addData(r, spots);
187 13 Oct 06 enell 102         data = bfr.readDataRow(dataLength);
187 13 Oct 06 enell 103       }
187 13 Oct 06 enell 104       ztest.calculate(bfss);
187 13 Oct 06 enell 105
187 13 Oct 06 enell 106       bfss.sortReporter(new Comparator<Reporter>()
187 13 Oct 06 enell 107       {
187 13 Oct 06 enell 108
187 13 Oct 06 enell 109         public int compare(Reporter r1, Reporter r2)
187 13 Oct 06 enell 110         {
187 13 Oct 06 enell 111           if (r1.getP() < r2.getP()) return -1;
187 13 Oct 06 enell 112           else if (r1.getP() == r2.getP()) return 0;
187 13 Oct 06 enell 113           else return 1;
187 13 Oct 06 enell 114         }
187 13 Oct 06 enell 115       });
187 13 Oct 06 enell 116       print(bfss);
213 07 Dec 06 enell 117       
187 13 Oct 06 enell 118     }
187 13 Oct 06 enell 119     catch (FileNotFoundException e)
187 13 Oct 06 enell 120     {
187 13 Oct 06 enell 121       System.err.println("Can't find the file " + (args.length == 1 ? args[0] : "stdin.txt"));
187 13 Oct 06 enell 122     }
187 13 Oct 06 enell 123     catch (BadFormatException e)
187 13 Oct 06 enell 124     {
187 13 Oct 06 enell 125       System.err.println((args.length == 1 ? args[0] : "stdin.txt") + " is not a basefile");
187 13 Oct 06 enell 126     }
187 13 Oct 06 enell 127     catch (IOException e)
187 13 Oct 06 enell 128     {
187 13 Oct 06 enell 129       System.err.println("An error when reading file " + (args.length == 1 ? args[0] : "stdin.txt"));
187 13 Oct 06 enell 130       e.printStackTrace();
187 13 Oct 06 enell 131     }
187 13 Oct 06 enell 132     catch (BASEFileException e)
187 13 Oct 06 enell 133     {
187 13 Oct 06 enell 134       e.printStackTrace();
187 13 Oct 06 enell 135     }
187 13 Oct 06 enell 136   }
187 13 Oct 06 enell 137
187 13 Oct 06 enell 138   private static void print(BASEFileSpotSection<Reporter, Spot> bfss)
187 13 Oct 06 enell 139   {
187 13 Oct 06 enell 140     try
187 13 Oct 06 enell 141     {
213 07 Dec 06 enell 142       XYSeries oSeries = new XYSeries("Observed");
213 07 Dec 06 enell 143       XYSeries eSeries = new XYSeries("Expected");
214 07 Dec 06 enell 144       XYSeries fdrSeries = new XYSeries("FDR");
241 28 Feb 07 enell 145       HistogramDataset mHist = new HistogramDataset("M", 0.1);
217 08 Dec 06 enell 146
204 24 Nov 06 enell 147       PrintWriter html = new PrintWriter(new File("index.html"));
206 24 Nov 06 enell 148       PrintWriter tab = new PrintWriter(new File("result.tsv"));
187 13 Oct 06 enell 149       int numOfReporters = bfss.getReporterSize();
220 19 Dec 06 enell 150       
220 19 Dec 06 enell 151       Object[] tableRow = {"Reporter","GeneSymbol","LocusLink","AverageM","up/down","P","Rank","Expected","FDR","NumberOfValues"};
187 13 Oct 06 enell 152
221 20 Dec 06 enell 153       System.out.println("BASEfile");
221 20 Dec 06 enell 154       System.out.println("section\tassays");
221 20 Dec 06 enell 155       System.out.println("annotationColumns\t");
221 20 Dec 06 enell 156       System.out.println("columns\tid\tname\tparents");
221 20 Dec 06 enell 157       System.out.println("count\t1");
221 20 Dec 06 enell 158       System.out.println("%");
221 20 Dec 06 enell 159       System.out.println("1\tztest\t"+bfss.findStringOpt("assays").replaceAll("\t", "/"));
221 20 Dec 06 enell 160       System.out.println();
221 20 Dec 06 enell 161       System.out.println("section\tspots");
221 20 Dec 06 enell 162       System.out.println("channels\t2");
221 20 Dec 06 enell 163       System.out.println("setExtraFloats\tJE_nbrOfElements\tJE_rank\tJE_Expected\tJE_fdr");
221 20 Dec 06 enell 164       System.out.println("assayFields\tl2ratio1_2\tl10intgmean1_2\tJE_nbrOfElements\tJE_rank\tJE_Expected\tJE_fdr");
221 20 Dec 06 enell 165       System.out.println("columns\tposition\treporter\tassayData");
221 20 Dec 06 enell 166       System.out.println("assays\t1");
221 20 Dec 06 enell 167       System.out.println("count\t"+bfss.getReporterSize());
221 20 Dec 06 enell 168       System.out.println("%");
221 20 Dec 06 enell 169       
204 24 Nov 06 enell 170       html.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">");
204 24 Nov 06 enell 171       html.println("<html>");
204 24 Nov 06 enell 172       html.println("<head>");
204 24 Nov 06 enell 173       html.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />");
204 24 Nov 06 enell 174       html.println("<title>BASE 1.2.16dev - Experiment Enell:Enell Plugin</title>");
204 24 Nov 06 enell 175       html.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"base.css\" />");
204 24 Nov 06 enell 176       html.println("</head>");
204 24 Nov 06 enell 177       html.println("<table>");
220 19 Dec 06 enell 178       html.printf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n", tableRow);
221 20 Dec 06 enell 179       
220 19 Dec 06 enell 180       tab.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", tableRow);
217 08 Dec 06 enell 181
204 24 Nov 06 enell 182       for (int i = 0; i < bfss.getReporterSize(); i++)
187 13 Oct 06 enell 183       {
197 21 Nov 06 enell 184         int rank = i + 1;
187 13 Oct 06 enell 185         Reporter r = bfss.getReporter(i);
206 24 Nov 06 enell 186         double expected = r.getP() * numOfReporters;
206 24 Nov 06 enell 187         double fdr = (expected / rank);
197 21 Nov 06 enell 188         
221 20 Dec 06 enell 189         System.out.printf("%d\t%d\t", (-1*rank), r.getId());
221 20 Dec 06 enell 190         System.out.printf("%f\t%f\t", r.getM(), r.getA());
221 20 Dec 06 enell 191         System.out.printf("%d\t%d\t%f\t%f\n", r.getSize(), rank, expected, fdr);
221 20 Dec 06 enell 192         
221 20 Dec 06 enell 193         tableRow[0] = r.getReporter();
221 20 Dec 06 enell 194         tableRow[1] = r.getSymbol();
221 20 Dec 06 enell 195         tableRow[2] = r.getLocusLink();
221 20 Dec 06 enell 196         tableRow[3] = r.getM();
221 20 Dec 06 enell 197         tableRow[4] = r.getM() > 0 ? "+" : "-";
221 20 Dec 06 enell 198         tableRow[5] = r.getP();
221 20 Dec 06 enell 199         tableRow[6] = rank;
221 20 Dec 06 enell 200         tableRow[7] = expected;
221 20 Dec 06 enell 201         tableRow[8] = fdr;
221 20 Dec 06 enell 202         tableRow[9] = r.getSize();
221 20 Dec 06 enell 203
207 04 Dec 06 enell 204         if (i < 1000)
207 04 Dec 06 enell 205         {
207 04 Dec 06 enell 206           html.printf(
220 19 Dec 06 enell 207             "<tr class=\"row" + (i % 2 + 1) + "\"><td>%s</td><td>%s</td><td>%s</td><td>%f</td>" +
220 19 Dec 06 enell 208             "<td>%s</td><td>%f</td><td>%d</td><td>%f</td><td>%.2f</td><td>%d</td></tr>\n",
220 19 Dec 06 enell 209             tableRow);
207 04 Dec 06 enell 210         }
220 19 Dec 06 enell 211         tab.printf("%s\t%s\t%s\t%f\t%s\t%f\t%d\t%f\t%f\t%d\n", tableRow);
213 07 Dec 06 enell 212         
220 19 Dec 06 enell 213         oSeries.add(rank, rank);
220 19 Dec 06 enell 214         eSeries.add(rank, expected);
220 19 Dec 06 enell 215         fdrSeries.add(rank, fdr);
220 19 Dec 06 enell 216         mHist.addObservation(r.getM());
187 13 Oct 06 enell 217       }
221 20 Dec 06 enell 218       System.out.println();
221 20 Dec 06 enell 219       
204 24 Nov 06 enell 220       html.println("</table>");
204 24 Nov 06 enell 221       html.print("</html>");
204 24 Nov 06 enell 222       html.close();
206 24 Nov 06 enell 223       
206 24 Nov 06 enell 224       tab.close();
213 07 Dec 06 enell 225       
241 28 Feb 07 enell 226       ZPlot.plotFDR(fdrSeries);
241 28 Feb 07 enell 227       ZPlot.plotOE(oSeries, eSeries);
241 28 Feb 07 enell 228       ZPlot.plotOE_FDR(oSeries, eSeries, fdrSeries);
241 28 Feb 07 enell 229       ZPlot.plotMHist(mHist, ztest.getTotalMean(), ztest.getTotalSD());
187 13 Oct 06 enell 230     }
213 07 Dec 06 enell 231     catch (IOException e)
213 07 Dec 06 enell 232     {
213 07 Dec 06 enell 233       e.printStackTrace();
213 07 Dec 06 enell 234     }
216 07 Dec 06 enell 235   }  
187 13 Oct 06 enell 236 }