plugins/base1/se.lu.onk.MergeBioAssay/trunk/src/mergebioassay/mergers/ArithmeticRatioMerger.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 /**
149 10 Aug 06 enell 40  * @author Johan Enell
149 10 Aug 06 enell 41  * 
149 10 Aug 06 enell 42  * The ArithmeticRatioMerger implements the abstract merger class. It will use
149 10 Aug 06 enell 43  * the arithmetic mean of the ratios.
149 10 Aug 06 enell 44  */
149 10 Aug 06 enell 45 public class ArithmeticRatioMerger extends Merger
149 10 Aug 06 enell 46 {
149 10 Aug 06 enell 47   /*
149 10 Aug 06 enell 48    * (non-Javadoc)
149 10 Aug 06 enell 49    * 
149 10 Aug 06 enell 50    * @see mergers.Merger#merge(baseFile.BASEFileSection,
149 10 Aug 06 enell 51    *      baseFile.BASEFileReader, java.util.HashMap)
149 10 Aug 06 enell 52    */
149 10 Aug 06 enell 53   @Override
149 10 Aug 06 enell 54   public void merge(BASEFileSection section, BASEFileReader reader, HashMap<String, List<Merge_assay>> assayGroups)
149 10 Aug 06 enell 55   {
149 10 Aug 06 enell 56     int intensity1Pos = -1;
149 10 Aug 06 enell 57     int intensity2Pos = -1;
149 10 Aug 06 enell 58
149 10 Aug 06 enell 59     super.init(section, reader);
149 10 Aug 06 enell 60
149 10 Aug 06 enell 61     intensity1Pos = assayFieldsMap.indexOf("intensity1");
149 10 Aug 06 enell 62     if (intensity1Pos == -1)
149 10 Aug 06 enell 63     {
149 10 Aug 06 enell 64       System.err.print("intensity1 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     intensity2Pos = assayFieldsMap.indexOf("intensity2");
149 10 Aug 06 enell 69     if (intensity2Pos == -1)
149 10 Aug 06 enell 70     {
149 10 Aug 06 enell 71       System.err.print("intensity2 field in assayFields row missing\n");
149 10 Aug 06 enell 72       System.exit(0);
149 10 Aug 06 enell 73     }
149 10 Aug 06 enell 74
149 10 Aug 06 enell 75     try
149 10 Aug 06 enell 76     {
149 10 Aug 06 enell 77       System.out.print("section\tspots\n");
149 10 Aug 06 enell 78       System.out.print("columns\tposition\treporter\tassayData\n");
149 10 Aug 06 enell 79       System.out.print("assayFields\tl2ratio1_2\tl10intgmean1_2\tJE_nbrOfElements\n");
149 10 Aug 06 enell 80       System.out.print("setExtraFloats\tJE_nbrOfElements\n");
149 10 Aug 06 enell 81       System.out.print("assays");
149 10 Aug 06 enell 82       for (int i = 0; i < assayGroups.size(); i++)
149 10 Aug 06 enell 83         System.out.print("\t" + (i + 1));
149 10 Aug 06 enell 84       System.out.print("\n%\n");
149 10 Aug 06 enell 85
149 10 Aug 06 enell 86       String[] row = reader.readDataRow(nbrOfColumns);
149 10 Aug 06 enell 87
149 10 Aug 06 enell 88       while (row != null)
149 10 Aug 06 enell 89       {
149 10 Aug 06 enell 90         System.out.print(row[positionPos] + "\t" + row[reporterPos]);
149 10 Aug 06 enell 91
149 10 Aug 06 enell 92         Iterator it = assayGroups.keySet().iterator();
149 10 Aug 06 enell 93
149 10 Aug 06 enell 94         while (it.hasNext())
149 10 Aug 06 enell 95         {
149 10 Aug 06 enell 96           String key = (String) it.next();
149 10 Aug 06 enell 97           List<Merge_assay> micro = assayGroups.get(key);
149 10 Aug 06 enell 98           double int1 = 0, int2 = 0;
149 10 Aug 06 enell 99           DoubleVector ratioVector = new DoubleVector();
149 10 Aug 06 enell 100           DoubleVector aVector = new DoubleVector();
149 10 Aug 06 enell 101           for (int i = 0; i < micro.size(); i++)
149 10 Aug 06 enell 102           {
149 10 Aug 06 enell 103             BioAssay tmp = (micro.get(i));
149 10 Aug 06 enell 104             int assay = assaysMap.indexOf(tmp.id);
149 10 Aug 06 enell 105             try
149 10 Aug 06 enell 106             {
149 10 Aug 06 enell 107               int1 = Double.parseDouble(row[assayDataPos + intensity1Pos + assay * assayFieldsMap.size()]);
149 10 Aug 06 enell 108               int2 = Double.parseDouble(row[assayDataPos + intensity2Pos + assay * assayFieldsMap.size()]);
149 10 Aug 06 enell 109
149 10 Aug 06 enell 110               ratioVector.add(int1 / int2);
149 10 Aug 06 enell 111               aVector.add(Math.sqrt(int1 * int2));
149 10 Aug 06 enell 112             }
149 10 Aug 06 enell 113             catch (NumberFormatException nfe)
149 10 Aug 06 enell 114             {
149 10 Aug 06 enell 115               missingValues++;
149 10 Aug 06 enell 116             }
149 10 Aug 06 enell 117           }
149 10 Aug 06 enell 118           if (ratioVector.size() > 0)
149 10 Aug 06 enell 119           {
149 10 Aug 06 enell 120
149 10 Aug 06 enell 121             System.out.print("\t" + log(arithmeticMean(ratioVector.toArray()), 2));
149 10 Aug 06 enell 122             System.out.print("\t" + log(arithmeticMean(aVector.toArray()), 10));
149 10 Aug 06 enell 123           }
149 10 Aug 06 enell 124           else
149 10 Aug 06 enell 125           {
149 10 Aug 06 enell 126             System.out.print("\t\t");
149 10 Aug 06 enell 127           }
149 10 Aug 06 enell 128           if (ratioVector.size() > 0) System.out.print("\t" + ratioVector.size());
149 10 Aug 06 enell 129           else System.out.print("\t");
149 10 Aug 06 enell 130         }
149 10 Aug 06 enell 131         System.out.println();
149 10 Aug 06 enell 132         row = reader.readDataRow(nbrOfColumns);
149 10 Aug 06 enell 133       }
149 10 Aug 06 enell 134     }
149 10 Aug 06 enell 135     catch (BadSectionException e)
149 10 Aug 06 enell 136     {
149 10 Aug 06 enell 137       e.printStackTrace();
149 10 Aug 06 enell 138     }
663 16 Apr 08 jari 139     catch (BASEFileException e)
149 10 Aug 06 enell 140     {
149 10 Aug 06 enell 141       e.printStackTrace();
149 10 Aug 06 enell 142       System.exit(0);
149 10 Aug 06 enell 143     }
149 10 Aug 06 enell 144   }
149 10 Aug 06 enell 145
149 10 Aug 06 enell 146   private float log(double d, int base)
149 10 Aug 06 enell 147   {
149 10 Aug 06 enell 148     return (float) (Math.log(d) / Math.log(base));
149 10 Aug 06 enell 149   }
149 10 Aug 06 enell 150 }