plugins/base1/se.lu.onk.MergeBioAssay/trunk/src/mergebioassay/mergers/GeometricRatioMerger.java

Code
Comments
Other
Rev Date Author Line
783 18 Sep 08 jari 1 /*
783 18 Sep 08 jari 2   $Id$
783 18 Sep 08 jari 3
783 18 Sep 08 jari 4   Copyright (C) 2006 Johan Enell
783 18 Sep 08 jari 5   Copyright (C) 2008 Jari Häkkinen
783 18 Sep 08 jari 6   
783 18 Sep 08 jari 7   This file is part of the se.lu.onk.MergeBioAssay plug-in for
783 18 Sep 08 jari 8   BASE. Available at http://baseplugins.thep.lu.se/ and BASE web
783 18 Sep 08 jari 9   site is http://base.thep.lu.se
783 18 Sep 08 jari 10
783 18 Sep 08 jari 11   This is free software; you can redistribute it and/or modify it
783 18 Sep 08 jari 12   under the terms of the GNU General Public License as published by
783 18 Sep 08 jari 13   the Free Software Foundation; either version 3 of the License, or
783 18 Sep 08 jari 14   (at your option) any later version.
783 18 Sep 08 jari 15
783 18 Sep 08 jari 16   The software is distributed in the hope that it will be useful, but
783 18 Sep 08 jari 17   WITHOUT ANY WARRANTY; without even the implied warranty of
783 18 Sep 08 jari 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
783 18 Sep 08 jari 19   General Public License for more details.
783 18 Sep 08 jari 20
783 18 Sep 08 jari 21   You should have received a copy of the GNU General Public License
783 18 Sep 08 jari 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
783 18 Sep 08 jari 23 */
149 10 Aug 06 enell 24 package mergebioassay.mergers;
149 10 Aug 06 enell 25
149 10 Aug 06 enell 26 import mergebioassay.BioAssay;
149 10 Aug 06 enell 27
149 10 Aug 06 enell 28 import java.io.IOException;
149 10 Aug 06 enell 29 import java.util.HashMap;
149 10 Aug 06 enell 30 import java.util.Iterator;
149 10 Aug 06 enell 31 import java.util.List;
149 10 Aug 06 enell 32
663 16 Apr 08 jari 33 import basefile.BASEFileException;
149 10 Aug 06 enell 34 import basefile.BASEFileReader;
149 10 Aug 06 enell 35 import basefile.BASEFileSection;
149 10 Aug 06 enell 36 import basefile.BadSectionException;
149 10 Aug 06 enell 37
149 10 Aug 06 enell 38 /**
149 10 Aug 06 enell 39  * @author Johan Enell
149 10 Aug 06 enell 40  * 
149 10 Aug 06 enell 41  * The GeometricRatioMerger implements the abstract merger class. It will use
149 10 Aug 06 enell 42  * the geometric mean of the ratios.
149 10 Aug 06 enell 43  */
149 10 Aug 06 enell 44 public class GeometricRatioMerger extends Merger
149 10 Aug 06 enell 45 {
149 10 Aug 06 enell 46   @Override
149 10 Aug 06 enell 47   public void merge(BASEFileSection section, BASEFileReader reader, HashMap<String, List<Merge_assay>> assayGroups)
149 10 Aug 06 enell 48   {
149 10 Aug 06 enell 49     int intensity1Pos = -1;
149 10 Aug 06 enell 50     int intensity2Pos = -1;
149 10 Aug 06 enell 51
149 10 Aug 06 enell 52     super.init(section, reader);
149 10 Aug 06 enell 53
149 10 Aug 06 enell 54     intensity1Pos = assayFieldsMap.indexOf("intensity1");
149 10 Aug 06 enell 55     if (intensity1Pos == -1)
149 10 Aug 06 enell 56     {
149 10 Aug 06 enell 57       System.err.print("intensity1 field in assayFields row missing\n");
149 10 Aug 06 enell 58       System.exit(0);
149 10 Aug 06 enell 59     }
149 10 Aug 06 enell 60
149 10 Aug 06 enell 61     intensity2Pos = assayFieldsMap.indexOf("intensity2");
149 10 Aug 06 enell 62     if (intensity2Pos == -1)
149 10 Aug 06 enell 63     {
149 10 Aug 06 enell 64       System.err.print("intensity2 field in assayFields row missing\n");
149 10 Aug 06 enell 65       System.exit(0);
149 10 Aug 06 enell 66     }
149 10 Aug 06 enell 67
149 10 Aug 06 enell 68     try
149 10 Aug 06 enell 69     {
149 10 Aug 06 enell 70       System.out.print("section\tspots\n");
149 10 Aug 06 enell 71       System.out.print("columns\tposition\treporter\tassayData\n");
149 10 Aug 06 enell 72       System.out.print("assayFields\tl2ratio1_2\tl10intgmean1_2\tJE_nbrOfElements\n");
149 10 Aug 06 enell 73       System.out.print("setExtraFloats\tJE_nbrOfElements\n");
149 10 Aug 06 enell 74       System.out.print("assays");
149 10 Aug 06 enell 75       for (int i = 0; i < assayGroups.size(); i++)
149 10 Aug 06 enell 76         System.out.print("\t" + (i + 1));
149 10 Aug 06 enell 77       System.out.print("\n%\n");
149 10 Aug 06 enell 78
149 10 Aug 06 enell 79       String[] row = reader.readDataRow(nbrOfColumns);
149 10 Aug 06 enell 80
149 10 Aug 06 enell 81       while (row != null)
149 10 Aug 06 enell 82       {
149 10 Aug 06 enell 83         System.out.print(row[positionPos] + "\t" + row[reporterPos]);
149 10 Aug 06 enell 84
149 10 Aug 06 enell 85         Iterator it = assayGroups.keySet().iterator();
149 10 Aug 06 enell 86
149 10 Aug 06 enell 87         while (it.hasNext())
149 10 Aug 06 enell 88         {
149 10 Aug 06 enell 89           String key = (String) it.next();
149 10 Aug 06 enell 90           List micro = assayGroups.get(key);
149 10 Aug 06 enell 91           double int1 = 0, int2 = 0;
149 10 Aug 06 enell 92           DoubleVector ratioVector = new DoubleVector();
149 10 Aug 06 enell 93           DoubleVector aVector = new DoubleVector();
149 10 Aug 06 enell 94           for (int i = 0; i < micro.size(); i++)
149 10 Aug 06 enell 95           {
149 10 Aug 06 enell 96             BioAssay tmp = (BioAssay) (micro.get(i));
149 10 Aug 06 enell 97             int assay = assaysMap.indexOf(tmp.id);
149 10 Aug 06 enell 98             try
149 10 Aug 06 enell 99             {
149 10 Aug 06 enell 100               int1 = Double.parseDouble(row[assayDataPos + intensity1Pos + assay * assayFieldsMap.size()]);
149 10 Aug 06 enell 101               int2 = Double.parseDouble(row[assayDataPos + intensity2Pos + assay * assayFieldsMap.size()]);
149 10 Aug 06 enell 102
149 10 Aug 06 enell 103               ratioVector.add(int1 / int2);
149 10 Aug 06 enell 104               aVector.add(Math.sqrt(int1 * int2));
149 10 Aug 06 enell 105             }
149 10 Aug 06 enell 106             catch (NumberFormatException nfe)
149 10 Aug 06 enell 107             {
149 10 Aug 06 enell 108               missingValues++;
149 10 Aug 06 enell 109             }
149 10 Aug 06 enell 110           }
149 10 Aug 06 enell 111           if (ratioVector.size() > 0)
149 10 Aug 06 enell 112           {
149 10 Aug 06 enell 113
149 10 Aug 06 enell 114             System.out.print("\t" + log(geometricMean(ratioVector.toArray()), 2));
149 10 Aug 06 enell 115             System.out.print("\t" + log(geometricMean(aVector.toArray()), 10));
149 10 Aug 06 enell 116           }
149 10 Aug 06 enell 117           else
149 10 Aug 06 enell 118           {
149 10 Aug 06 enell 119             System.out.print("\t\t");
149 10 Aug 06 enell 120           }
149 10 Aug 06 enell 121           if (ratioVector.size() > 0) System.out.print("\t" + ratioVector.size());
149 10 Aug 06 enell 122           else System.out.print("\t");
149 10 Aug 06 enell 123         }
149 10 Aug 06 enell 124         System.out.println();
149 10 Aug 06 enell 125         row = reader.readDataRow(nbrOfColumns);
149 10 Aug 06 enell 126       }
149 10 Aug 06 enell 127     }
149 10 Aug 06 enell 128     catch (BadSectionException e)
149 10 Aug 06 enell 129     {
149 10 Aug 06 enell 130       e.printStackTrace();
149 10 Aug 06 enell 131     }
663 16 Apr 08 jari 132     catch (BASEFileException e)
149 10 Aug 06 enell 133     {
149 10 Aug 06 enell 134       e.printStackTrace();
149 10 Aug 06 enell 135       System.exit(0);
149 10 Aug 06 enell 136     }
149 10 Aug 06 enell 137   }
149 10 Aug 06 enell 138
149 10 Aug 06 enell 139   private float log(double d, int base)
149 10 Aug 06 enell 140   {
149 10 Aug 06 enell 141     return (float) (Math.log(d) / Math.log(base));
149 10 Aug 06 enell 142   }
783 18 Sep 08 jari 143 }