plugins/base1/se.lu.onk/trunk/QPackage/src/qpackage/qscore/Qscore.java

Code
Comments
Other
Rev Date Author Line
66 09 Feb 06 enell 1 /*
66 09 Feb 06 enell 2  * Created on 07-Oct-2004
66 09 Feb 06 enell 3  * 
66 09 Feb 06 enell 4  * Qscore.java is a part of CalculateQ
66 09 Feb 06 enell 5  * Copyright (C) 2004 Johan Enell, Dept Oncology, Lund University
66 09 Feb 06 enell 6  * 
66 09 Feb 06 enell 7  * This program is free software; you can redistribute it and/or
66 09 Feb 06 enell 8  * modify it under the terms of the GNU General Public License
66 09 Feb 06 enell 9  * as published by the Free Software Foundation; either version 2
66 09 Feb 06 enell 10  * of the License, or (at your option) any later version.
66 09 Feb 06 enell 11  * 
66 09 Feb 06 enell 12  * This program is distributed in the hope that it will be useful,
66 09 Feb 06 enell 13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
66 09 Feb 06 enell 14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
66 09 Feb 06 enell 15  * GNU General Public License for more details.
66 09 Feb 06 enell 16  * 
66 09 Feb 06 enell 17  * You should have received a copy of the GNU General Public License
66 09 Feb 06 enell 18  * along with this program; if not, write toX the Free Software
66 09 Feb 06 enell 19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
66 09 Feb 06 enell 20  */
67 10 Feb 06 enell 21 package qpackage.qscore;
66 09 Feb 06 enell 22
66 09 Feb 06 enell 23 import java.io.File;
66 09 Feb 06 enell 24 import java.io.FileNotFoundException;
66 09 Feb 06 enell 25 import java.io.IOException;
66 09 Feb 06 enell 26 import java.util.HashMap;
66 09 Feb 06 enell 27 import java.util.List;
66 09 Feb 06 enell 28
66 09 Feb 06 enell 29 import basefile.BASEFileException;
66 09 Feb 06 enell 30 import basefile.BASEFileReader;
66 09 Feb 06 enell 31 import basefile.BASEFileSection;
66 09 Feb 06 enell 32 import basefile.MissingOptionException;
66 09 Feb 06 enell 33
67 10 Feb 06 enell 34 import qpackage.calculator.Calculator;
67 10 Feb 06 enell 35 import qpackage.calculator.EquationException;
67 10 Feb 06 enell 36 import qpackage.calculator.Variable;
66 09 Feb 06 enell 37
66 09 Feb 06 enell 38 /**
66 09 Feb 06 enell 39  * 
66 09 Feb 06 enell 40  * @author Johan Enell, johan.enell@onk.lu.se, Dept Oncology, Lund University, S-221 85 Lund, Sweden
66 09 Feb 06 enell 41  */
66 09 Feb 06 enell 42 public class Qscore
66 09 Feb 06 enell 43 {
66 09 Feb 06 enell 44   /**
66 09 Feb 06 enell 45    * The Calculator for the weight function.
66 09 Feb 06 enell 46    */
66 09 Feb 06 enell 47   private Calculator calc = null;
66 09 Feb 06 enell 48
66 09 Feb 06 enell 49   private Qscore(BASEFileReader bfr) throws BASEFileException, IOException, EquationException
66 09 Feb 06 enell 50   {
66 09 Feb 06 enell 51     BASEFileSection section = bfr.readSection(true);
66 09 Feb 06 enell 52     while (section != null)
66 09 Feb 06 enell 53     {
66 09 Feb 06 enell 54       if (section.isType("settings"))
66 09 Feb 06 enell 55       {
66 09 Feb 06 enell 56         extractSettings(section);
66 09 Feb 06 enell 57       }
66 09 Feb 06 enell 58       else if (section.isType("assays"))
66 09 Feb 06 enell 59       {
66 09 Feb 06 enell 60         extractAssays(section, bfr);
66 09 Feb 06 enell 61       }
66 09 Feb 06 enell 62       else if (section.isType("spots"))
66 09 Feb 06 enell 63       {
66 09 Feb 06 enell 64         extractSpots(section, bfr);
66 09 Feb 06 enell 65       }
66 09 Feb 06 enell 66       section = bfr.readSection();
66 09 Feb 06 enell 67     }
66 09 Feb 06 enell 68   }
66 09 Feb 06 enell 69
66 09 Feb 06 enell 70   private void extractSettings(BASEFileSection section) throws MissingOptionException, EquationException
66 09 Feb 06 enell 71   {
66 09 Feb 06 enell 72     String equation = section.findStringOpt("equation");
66 09 Feb 06 enell 73     calc = new Calculator(equation);
66 09 Feb 06 enell 74
66 09 Feb 06 enell 75   }
66 09 Feb 06 enell 76
66 09 Feb 06 enell 77   private void extractAssays(BASEFileSection section, BASEFileReader bfr)
66 09 Feb 06 enell 78   {
66 09 Feb 06 enell 79     System.out.println("BASEfile");
66 09 Feb 06 enell 80   }
66 09 Feb 06 enell 81
66 09 Feb 06 enell 82   private void extractSpots(BASEFileSection section, BASEFileReader bfr) throws EquationException, BASEFileException, IOException
66 09 Feb 06 enell 83   {
66 09 Feb 06 enell 84     List<String> assayFieldsMap;
66 09 Feb 06 enell 85     List<String> columnsMap;
66 09 Feb 06 enell 86     List<String> assaysMap;
66 09 Feb 06 enell 87
66 09 Feb 06 enell 88     int positionPos = -1;
66 09 Feb 06 enell 89     int assayDataPos = -1;
66 09 Feb 06 enell 90     int reporterPos = -1;
66 09 Feb 06 enell 91     int intensity1Pos = -1;
66 09 Feb 06 enell 92     int intensity2Pos = -1;
66 09 Feb 06 enell 93
66 09 Feb 06 enell 94     assaysMap = section.findFieldList("assays");
66 09 Feb 06 enell 95     if (assaysMap == null)
66 09 Feb 06 enell 96     {
66 09 Feb 06 enell 97       System.err.print("assaysMap row in spots section not found\n");
66 09 Feb 06 enell 98       System.exit(0);
66 09 Feb 06 enell 99     }
66 09 Feb 06 enell 100     if (assaysMap.size() > 1)
66 09 Feb 06 enell 101     {
66 09 Feb 06 enell 102       throw new BASEFileException("Data must be exported to a serial BASEfile");
66 09 Feb 06 enell 103     }
66 09 Feb 06 enell 104
66 09 Feb 06 enell 105     columnsMap = section.findFieldList("columns");
66 09 Feb 06 enell 106     if (columnsMap == null)
66 09 Feb 06 enell 107     {
66 09 Feb 06 enell 108       System.err.print("Columns row in spots section not found\n");
66 09 Feb 06 enell 109       System.exit(0);
66 09 Feb 06 enell 110     }
66 09 Feb 06 enell 111
66 09 Feb 06 enell 112     assayFieldsMap = section.findFieldList("assayFields");
66 09 Feb 06 enell 113     if (assayFieldsMap == null)
66 09 Feb 06 enell 114     {
66 09 Feb 06 enell 115       System.err.print("assayFields row in spots section not found\n");
66 09 Feb 06 enell 116       System.exit(0);
66 09 Feb 06 enell 117     }
66 09 Feb 06 enell 118
66 09 Feb 06 enell 119     positionPos = columnsMap.indexOf("position");
66 09 Feb 06 enell 120     if (positionPos == -1)
66 09 Feb 06 enell 121     {
66 09 Feb 06 enell 122       System.err.print("position column in columns row missing\n");
66 09 Feb 06 enell 123       System.exit(0);
66 09 Feb 06 enell 124     }
66 09 Feb 06 enell 125
66 09 Feb 06 enell 126     reporterPos = columnsMap.indexOf("reporter!");
66 09 Feb 06 enell 127     if (reporterPos == -1)
66 09 Feb 06 enell 128     {
66 09 Feb 06 enell 129       System.err.print("reporter column in columns row missing\n");
66 09 Feb 06 enell 130       System.exit(0);
66 09 Feb 06 enell 131     }
66 09 Feb 06 enell 132
66 09 Feb 06 enell 133     assayDataPos = columnsMap.indexOf("assayData");
66 09 Feb 06 enell 134     if (assayDataPos == -1)
66 09 Feb 06 enell 135     {
66 09 Feb 06 enell 136       System.err.print("assayData column in columns row missing\n");
66 09 Feb 06 enell 137       System.exit(0);
66 09 Feb 06 enell 138     }
66 09 Feb 06 enell 139
66 09 Feb 06 enell 140     intensity1Pos = assayFieldsMap.indexOf("intensity1");
66 09 Feb 06 enell 141     if (intensity1Pos == -1)
66 09 Feb 06 enell 142     {
66 09 Feb 06 enell 143       System.err.print("intensity1 field in assayFields row missing\n");
66 09 Feb 06 enell 144       System.exit(0);
66 09 Feb 06 enell 145     }
66 09 Feb 06 enell 146     intensity1Pos += assayDataPos;
66 09 Feb 06 enell 147
66 09 Feb 06 enell 148     intensity2Pos = assayFieldsMap.indexOf("intensity2");
66 09 Feb 06 enell 149     if (intensity2Pos == -1)
66 09 Feb 06 enell 150     {
66 09 Feb 06 enell 151       System.err.print("intensity2 field in assayFields row missing\n");
66 09 Feb 06 enell 152       System.exit(0);
66 09 Feb 06 enell 153     }
66 09 Feb 06 enell 154     intensity2Pos += assayDataPos;
66 09 Feb 06 enell 155
66 09 Feb 06 enell 156     HashMap<Variable, Integer> variables = new HashMap<Variable, Integer>();
66 09 Feb 06 enell 157     for (int i = 0; i < calc.getVariables().length; i++)
66 09 Feb 06 enell 158     {
66 09 Feb 06 enell 159       Variable v = calc.getVariables()[i];
66 09 Feb 06 enell 160       int col = assayFieldsMap.indexOf(v.getName());
66 09 Feb 06 enell 161       if (col == -1)
66 09 Feb 06 enell 162       {
66 09 Feb 06 enell 163         throw new EquationException(v + " field in assayFields row missing\n");
66 09 Feb 06 enell 164       }
66 09 Feb 06 enell 165       col += assayDataPos;
66 09 Feb 06 enell 166       variables.put(v, new Integer(col));
66 09 Feb 06 enell 167     }
66 09 Feb 06 enell 168
66 09 Feb 06 enell 169     String assay = assaysMap.get(0);
66 09 Feb 06 enell 170
66 09 Feb 06 enell 171     System.out.println("section\tspots");
66 09 Feb 06 enell 172     System.out.println("columns\tposition\treporter\tassayData");
66 09 Feb 06 enell 173     System.out.println("setExtraFloats\tonk_q");
66 09 Feb 06 enell 174     System.out.println("assayFields\tintensity1\tintensity2\tonk_q");
66 09 Feb 06 enell 175     System.out.println("assays\t" + assay);
66 09 Feb 06 enell 176     System.out.println("%");
66 09 Feb 06 enell 177
66 09 Feb 06 enell 178     String[] row = bfr.readDataRow();
66 09 Feb 06 enell 179     while (row != null && row.length > 1)
66 09 Feb 06 enell 180     {
66 09 Feb 06 enell 181       double product = 1;
66 09 Feb 06 enell 182       float value = 0;
66 09 Feb 06 enell 183       for (Variable v : variables.keySet())
66 09 Feb 06 enell 184       {
66 09 Feb 06 enell 185         try
66 09 Feb 06 enell 186         {
66 09 Feb 06 enell 187           int col = variables.get(v);
66 09 Feb 06 enell 188           value = Float.parseFloat(row[col]);
66 09 Feb 06 enell 189           calc.setVariable(v, value);
66 09 Feb 06 enell 190
66 09 Feb 06 enell 191           product *= value;
66 09 Feb 06 enell 192         }
66 09 Feb 06 enell 193         catch (NumberFormatException e)
66 09 Feb 06 enell 194         {
66 09 Feb 06 enell 195           calc.setVariable(v, Float.NaN);
66 09 Feb 06 enell 196         }
66 09 Feb 06 enell 197       }
66 09 Feb 06 enell 198
66 09 Feb 06 enell 199       System.out.println(row[positionPos] + "\t" + row[reporterPos] + "\t" + row[intensity1Pos] + "\t" + row[intensity2Pos] + "\t" + calc.getValue());
66 09 Feb 06 enell 200
66 09 Feb 06 enell 201       row = bfr.readDataRow();
66 09 Feb 06 enell 202     }
66 09 Feb 06 enell 203     System.out.println();
66 09 Feb 06 enell 204   }
66 09 Feb 06 enell 205
66 09 Feb 06 enell 206   public static void main(String[] args)
66 09 Feb 06 enell 207   {
66 09 Feb 06 enell 208     try
66 09 Feb 06 enell 209     {
66 09 Feb 06 enell 210       BASEFileReader bfr = null;
66 09 Feb 06 enell 211       if (args.length == 1)
66 09 Feb 06 enell 212       {
66 09 Feb 06 enell 213         bfr = new BASEFileReader(new File(args[0]));
66 09 Feb 06 enell 214       }
66 09 Feb 06 enell 215       else if (args.length == 0)
66 09 Feb 06 enell 216       {
66 09 Feb 06 enell 217         bfr = new BASEFileReader(new File("stdin.txt"));
66 09 Feb 06 enell 218       }
66 09 Feb 06 enell 219       else
66 09 Feb 06 enell 220       {
66 09 Feb 06 enell 221         System.err.println("Q Score: invalid input given");
66 09 Feb 06 enell 222         System.exit(-1);
66 09 Feb 06 enell 223       }
66 09 Feb 06 enell 224
66 09 Feb 06 enell 225       new Qscore(bfr);
66 09 Feb 06 enell 226     }
66 09 Feb 06 enell 227     catch (OutOfMemoryError e)
66 09 Feb 06 enell 228     {
66 09 Feb 06 enell 229       System.err.println("No more memory in the java virtual machine. Try to start the application with the flag '-Xmx256m' or '-Xmx512m'. If you need even more memory choose a larger digit (max 1024)");
66 09 Feb 06 enell 230       e.printStackTrace();
66 09 Feb 06 enell 231       System.exit(-1);
66 09 Feb 06 enell 232     }
66 09 Feb 06 enell 233     catch (FileNotFoundException e)
66 09 Feb 06 enell 234     {
66 09 Feb 06 enell 235       System.out.println("Q Score: Could not find the file " + args[0]);
66 09 Feb 06 enell 236       e.printStackTrace();
66 09 Feb 06 enell 237     }
66 09 Feb 06 enell 238     catch (BASEFileException e)
66 09 Feb 06 enell 239     {
66 09 Feb 06 enell 240       e.printStackTrace();
66 09 Feb 06 enell 241     }
66 09 Feb 06 enell 242     catch (IOException e)
66 09 Feb 06 enell 243     {
66 09 Feb 06 enell 244       e.printStackTrace();
66 09 Feb 06 enell 245     }
66 09 Feb 06 enell 246     catch (EquationException e)
66 09 Feb 06 enell 247     {
66 09 Feb 06 enell 248       e.printStackTrace();
66 09 Feb 06 enell 249     }
66 09 Feb 06 enell 250   }
66 09 Feb 06 enell 251 }