plugins/base1/se.lu.onk.ReplicateError/trunk/src/replicateerror/AcrossAssays/ReplicateErrorAA.java

Code
Comments
Other
Rev Date Author Line
15 14 Oct 05 enell 1 /*
784 18 Sep 08 jari 2   $Id$
784 18 Sep 08 jari 3
784 18 Sep 08 jari 4   Copyright (C) 2005 Johan Enell
800 01 Oct 08 jari 5   Copyright (C) 2008 Jari Häkkinen
784 18 Sep 08 jari 6
784 18 Sep 08 jari 7   This file is part of the se.lu.onk.ReplicateError plug-in for
784 18 Sep 08 jari 8   BASE. Available at http://baseplugins.thep.lu.se/ and BASE web
784 18 Sep 08 jari 9   site is http://base.thep.lu.se
784 18 Sep 08 jari 10
784 18 Sep 08 jari 11   This is free software; you can redistribute it and/or modify it
784 18 Sep 08 jari 12   under the terms of the GNU General Public License as published by
784 18 Sep 08 jari 13   the Free Software Foundation; either version 3 of the License, or
784 18 Sep 08 jari 14   (at your option) any later version.
784 18 Sep 08 jari 15
784 18 Sep 08 jari 16   The software is distributed in the hope that it will be useful, but
784 18 Sep 08 jari 17   WITHOUT ANY WARRANTY; without even the implied warranty of
784 18 Sep 08 jari 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
784 18 Sep 08 jari 19   General Public License for more details.
784 18 Sep 08 jari 20
784 18 Sep 08 jari 21   You should have received a copy of the GNU General Public License
784 18 Sep 08 jari 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
784 18 Sep 08 jari 23 */
15 14 Oct 05 enell 24 package replicateerror.AcrossAssays;
15 14 Oct 05 enell 25
15 14 Oct 05 enell 26 import java.io.File;
15 14 Oct 05 enell 27 import java.io.IOException;
20 19 Oct 05 enell 28 import java.io.PrintStream;
15 14 Oct 05 enell 29 import java.util.ArrayList;
56 08 Dec 05 enell 30 import java.util.Arrays;
55 07 Dec 05 enell 31 import java.util.Collections;
55 07 Dec 05 enell 32 import java.util.Comparator;
15 14 Oct 05 enell 33 import java.util.HashMap;
80 24 Mar 06 enell 34 import java.util.HashSet;
17 18 Oct 05 enell 35 import java.util.Iterator;
15 14 Oct 05 enell 36 import java.util.List;
80 24 Mar 06 enell 37 import java.util.Set;
15 14 Oct 05 enell 38 import java.util.regex.Matcher;
15 14 Oct 05 enell 39 import java.util.regex.Pattern;
15 14 Oct 05 enell 40
15 14 Oct 05 enell 41 import basefile.BASEFileException;
15 14 Oct 05 enell 42 import basefile.BASEFileReader;
15 14 Oct 05 enell 43 import basefile.BASEFileSection;
15 14 Oct 05 enell 44 import basefile.InvalidSettingException;
15 14 Oct 05 enell 45 import basefile.PluginException;
52 25 Nov 05 enell 46 import replicateerror.R;
43 21 Nov 05 enell 47 import replicateerror.Replicate;
15 14 Oct 05 enell 48 import replicateerror.ReplicateError;
80 24 Mar 06 enell 49 import replicateerror.Spot;
15 14 Oct 05 enell 50
15 14 Oct 05 enell 51 public class ReplicateErrorAA extends ReplicateError
15 14 Oct 05 enell 52 {
55 07 Dec 05 enell 53   private Pattern assayPattern = null;
15 14 Oct 05 enell 54
55 07 Dec 05 enell 55   private List<Integer> group;
15 14 Oct 05 enell 56
80 24 Mar 06 enell 57   private HashMap<String, List<Integer>> groups;
15 14 Oct 05 enell 58
80 24 Mar 06 enell 59   private HashMap<Integer, String> assayName;
32 09 Nov 05 enell 60
80 24 Mar 06 enell 61   private List<Integer> noGroup;
32 09 Nov 05 enell 62
55 07 Dec 05 enell 63   private int sort;
80 24 Mar 06 enell 64   
80 24 Mar 06 enell 65   private Set<String> includeAssays;
80 24 Mar 06 enell 66   
15 14 Oct 05 enell 67   public ReplicateErrorAA()
15 14 Oct 05 enell 68   {
15 14 Oct 05 enell 69     super();
80 24 Mar 06 enell 70     includeAssays = new HashSet<String>();
80 24 Mar 06 enell 71     groups = new HashMap<String, List<Integer>>();
80 24 Mar 06 enell 72     assayName = new HashMap<Integer, String>();
80 24 Mar 06 enell 73     noGroup = new ArrayList<Integer>();
20 19 Oct 05 enell 74     File dataDir = new File("data");
20 19 Oct 05 enell 75     dataDir.mkdir();
15 14 Oct 05 enell 76   }
15 14 Oct 05 enell 77
15 14 Oct 05 enell 78   @Override
15 14 Oct 05 enell 79   public void extractSettings(BASEFileSection section) throws PluginException
15 14 Oct 05 enell 80   {
15 14 Oct 05 enell 81     super.extractSettings(section);
15 14 Oct 05 enell 82     String name = "";
15 14 Oct 05 enell 83     int groupCount = 0;
15 14 Oct 05 enell 84     for (char c : section.findStringOpt("assayname").toCharArray())
15 14 Oct 05 enell 85     {
15 14 Oct 05 enell 86       switch (c)
15 14 Oct 05 enell 87       {
15 14 Oct 05 enell 88         case '\\':
15 14 Oct 05 enell 89           name += "\\\\";
15 14 Oct 05 enell 90           break;
15 14 Oct 05 enell 91         case '[':
15 14 Oct 05 enell 92         case ']':
15 14 Oct 05 enell 93         case '.':
15 14 Oct 05 enell 94         case '^':
15 14 Oct 05 enell 95         case '$':
15 14 Oct 05 enell 96         case '?':
15 14 Oct 05 enell 97         case '*':
15 14 Oct 05 enell 98         case '+':
15 14 Oct 05 enell 99         case '{':
15 14 Oct 05 enell 100         case '}':
15 14 Oct 05 enell 101         case '|':
15 14 Oct 05 enell 102         case '(':
15 14 Oct 05 enell 103         case ')':
15 14 Oct 05 enell 104           name += "\\" + c;
15 14 Oct 05 enell 105           break;
15 14 Oct 05 enell 106         case '%':
20 19 Oct 05 enell 107           name += "(.*?)";
15 14 Oct 05 enell 108           groupCount++;
15 14 Oct 05 enell 109           break;
15 14 Oct 05 enell 110         default:
15 14 Oct 05 enell 111           name += c;
15 14 Oct 05 enell 112           break;
15 14 Oct 05 enell 113       }
55 07 Dec 05 enell 114       assayPattern = Pattern.compile(name);
15 14 Oct 05 enell 115     }
55 07 Dec 05 enell 116     group = new ArrayList<Integer>();
55 07 Dec 05 enell 117     for (String g : section.findStringOpt("group").trim().split("\\s*,\\s*"))
15 14 Oct 05 enell 118     {
55 07 Dec 05 enell 119       Integer i = new Integer(g);
55 07 Dec 05 enell 120       if (i > groupCount)
55 07 Dec 05 enell 121       {
55 07 Dec 05 enell 122         throw new InvalidSettingException("Group " + i + " can't be found in assayname: " + section.findStringOpt("assayname"));
55 07 Dec 05 enell 123       }
55 07 Dec 05 enell 124       group.add(i);
15 14 Oct 05 enell 125     }
55 07 Dec 05 enell 126     if (section.findStringOpt("sort").equals(""))
55 07 Dec 05 enell 127     {
55 07 Dec 05 enell 128       sort = -1;
55 07 Dec 05 enell 129     }
55 07 Dec 05 enell 130     else
55 07 Dec 05 enell 131     {
55 07 Dec 05 enell 132       sort = section.findIntOpt("sort");
55 07 Dec 05 enell 133       if (sort > groupCount)
55 07 Dec 05 enell 134       {
55 07 Dec 05 enell 135         throw new InvalidSettingException("The sortgroup can't be found in assayname: " + section.findStringOpt("assayname"));
55 07 Dec 05 enell 136       }
55 07 Dec 05 enell 137     }
80 24 Mar 06 enell 138     if (!section.findStringOpt("includeassays").equals(""))
80 24 Mar 06 enell 139     {
80 24 Mar 06 enell 140       includeAssays.addAll(Arrays.asList(section.findStringOpt("includeassays").trim().split("\\s*\\|\\s*")));
80 24 Mar 06 enell 141     }
15 14 Oct 05 enell 142   }
15 14 Oct 05 enell 143
15 14 Oct 05 enell 144   @Override
15 14 Oct 05 enell 145   public void extractAssays(BASEFileSection section, BASEFileReader bfr)
15 14 Oct 05 enell 146     throws PluginException
15 14 Oct 05 enell 147   {
15 14 Oct 05 enell 148     try
15 14 Oct 05 enell 149     {
15 14 Oct 05 enell 150       int nameCol = section.findFieldList("columns").indexOf("name");
22 20 Oct 05 enell 151       int idCol = section.findFieldList("columns").indexOf("id");
15 14 Oct 05 enell 152
30 08 Nov 05 enell 153       HTML.openGroup();
15 14 Oct 05 enell 154       String[] vals;
15 14 Oct 05 enell 155       while ((vals = bfr.readDataRow()) != null)
15 14 Oct 05 enell 156       {
80 24 Mar 06 enell 157         assayName.put(new Integer(vals[idCol]), vals[nameCol]);
22 20 Oct 05 enell 158
80 24 Mar 06 enell 159         if (includeAssays.isEmpty() || includeAssays.contains(vals[nameCol]))
15 14 Oct 05 enell 160         {
80 24 Mar 06 enell 161           Matcher m = assayPattern.matcher(vals[nameCol]);
80 24 Mar 06 enell 162           if (m.matches())
55 07 Dec 05 enell 163           {
80 24 Mar 06 enell 164             String groupName = m.group(group.get(0));
80 24 Mar 06 enell 165             for (int i = 1; i < group.size(); i++)
80 24 Mar 06 enell 166             {
80 24 Mar 06 enell 167               groupName += "_" + m.group(group.get(i));
80 24 Mar 06 enell 168             }
80 24 Mar 06 enell 169             List<Integer> assayGroup = groups.get(groupName);
80 24 Mar 06 enell 170             if (assayGroup == null)
80 24 Mar 06 enell 171             {
80 24 Mar 06 enell 172               assayGroup = new ArrayList<Integer>();
80 24 Mar 06 enell 173             }
80 24 Mar 06 enell 174             assayGroup.add(new Integer(vals[idCol]));
80 24 Mar 06 enell 175             groups.put(groupName, assayGroup);
55 07 Dec 05 enell 176           }
80 24 Mar 06 enell 177           else
15 14 Oct 05 enell 178           {
80 24 Mar 06 enell 179             HTML.addGroupNoGroup(vals[nameCol]);
80 24 Mar 06 enell 180             noGroup.add(new Integer(vals[idCol]));
80 24 Mar 06 enell 181             System.err.println(vals[nameCol] + " didn't match " + assayPattern.pattern());
15 14 Oct 05 enell 182           }
15 14 Oct 05 enell 183         }
15 14 Oct 05 enell 184         else
15 14 Oct 05 enell 185         {
30 08 Nov 05 enell 186           HTML.addGroupNoGroup(vals[nameCol]);
80 24 Mar 06 enell 187           noGroup.add(new Integer(vals[idCol]));
80 24 Mar 06 enell 188           System.err.println(vals[nameCol] + " was exculded from the filtering due to the \"includeassay\" parameter");
15 14 Oct 05 enell 189         }
15 14 Oct 05 enell 190       }
55 07 Dec 05 enell 191       
55 07 Dec 05 enell 192       // Sort the assayGroups
55 07 Dec 05 enell 193       if (sort >= 0)
55 07 Dec 05 enell 194       {
80 24 Mar 06 enell 195         for (List<Integer> assayGroup : groups.values())
55 07 Dec 05 enell 196         {
80 24 Mar 06 enell 197           Collections.sort(assayGroup, new Comparator<Integer>()
55 07 Dec 05 enell 198           {
80 24 Mar 06 enell 199             public int compare(Integer assay1, Integer assay2)
55 07 Dec 05 enell 200             {
55 07 Dec 05 enell 201               Matcher m1 = assayPattern.matcher(assayName.get(assay1));
55 07 Dec 05 enell 202               Matcher m2 = assayPattern.matcher(assayName.get(assay2));
55 07 Dec 05 enell 203               m1.matches();
55 07 Dec 05 enell 204               m2.matches();
55 07 Dec 05 enell 205               return m1.group(sort).compareTo(m2.group(sort));
55 07 Dec 05 enell 206             }
55 07 Dec 05 enell 207           });
55 07 Dec 05 enell 208         }
55 07 Dec 05 enell 209       }
55 07 Dec 05 enell 210       
20 19 Oct 05 enell 211       Iterator<String> it = groups.keySet().iterator();
20 19 Oct 05 enell 212       while (it.hasNext())
20 19 Oct 05 enell 213       {
27 07 Nov 05 enell 214         String key = it.next();
80 24 Mar 06 enell 215         List<Integer> group = groups.get(key);
27 07 Nov 05 enell 216         if (group.size() == 1)
20 19 Oct 05 enell 217         {
52 25 Nov 05 enell 218           HTML.addGroupNoGroup(assayName.get(group.get(0)));
52 25 Nov 05 enell 219           noGroup.add(group.get(0));
20 19 Oct 05 enell 220           it.remove();
20 19 Oct 05 enell 221         }
56 08 Dec 05 enell 222         else
27 07 Nov 05 enell 223         {
27 07 Nov 05 enell 224           HTML.addGroup(key, assayIdToName(group));
27 07 Nov 05 enell 225         }
20 19 Oct 05 enell 226       }
27 07 Nov 05 enell 227       HTML.closeGroup();
15 14 Oct 05 enell 228     }
15 14 Oct 05 enell 229     catch (IOException e)
15 14 Oct 05 enell 230     {
15 14 Oct 05 enell 231       throw new BASEFileException(e);
15 14 Oct 05 enell 232     }
15 14 Oct 05 enell 233   }
15 14 Oct 05 enell 234
80 24 Mar 06 enell 235   private List<String> assayIdToName(List<Integer> assayId)
27 07 Nov 05 enell 236   {
27 07 Nov 05 enell 237     List<String> result = new ArrayList<String>(assayId.size());
80 24 Mar 06 enell 238     for (Integer id : assayId)
27 07 Nov 05 enell 239     {
27 07 Nov 05 enell 240       result.add(assayName.get(id));
27 07 Nov 05 enell 241     }
27 07 Nov 05 enell 242     return result;
27 07 Nov 05 enell 243   }
27 07 Nov 05 enell 244
15 14 Oct 05 enell 245   @Override
15 14 Oct 05 enell 246   public void extractSpots(BASEFileSection section, BASEFileReader bfr)
15 14 Oct 05 enell 247   {
15 14 Oct 05 enell 248     List<String> columns = section.findFieldList("columns");
15 14 Oct 05 enell 249     List<String> assayFields = section.findFieldList("assayFields");
80 24 Mar 06 enell 250     List<Integer> assays = section.findFieldIntList("assays");
15 14 Oct 05 enell 251
15 14 Oct 05 enell 252     int posCol = columns.indexOf("position");
15 14 Oct 05 enell 253     int repCol = columns.indexOf("reporter");
15 14 Oct 05 enell 254     int assayData = columns.indexOf("assayData");
15 14 Oct 05 enell 255     int int1Col = assayFields.indexOf("intensity1");
15 14 Oct 05 enell 256     int int2Col = assayFields.indexOf("intensity2");
15 14 Oct 05 enell 257
80 24 Mar 06 enell 258     HashMap<Integer, Integer> assayColumns = new HashMap<Integer, Integer>();
17 18 Oct 05 enell 259     for (int i = 0; i < assays.size(); i++)
17 18 Oct 05 enell 260     {
17 18 Oct 05 enell 261       assayColumns.put(assays.get(i), assayData + assayFields.size() * i);
17 18 Oct 05 enell 262     }
22 20 Oct 05 enell 263
17 18 Oct 05 enell 264     BASEFileSection spotSection = new BASEFileSection();
17 18 Oct 05 enell 265     spotSection.setHeader("section", "spots");
17 18 Oct 05 enell 266     spotSection.setHeader("channels", "2");
17 18 Oct 05 enell 267     spotSection.setHeader("assayFields", "intensity1\tintensity2");
17 18 Oct 05 enell 268     spotSection.setHeader("columns", "position\treporter\tassayData");
17 18 Oct 05 enell 269     spotSection.setHeader("assays", "");
17 18 Oct 05 enell 270
15 14 Oct 05 enell 271     try
15 14 Oct 05 enell 272     {
43 21 Nov 05 enell 273       HTML.openPlotsTable(center.toString());
56 08 Dec 05 enell 274       for (String groupName : groups.keySet())
15 14 Oct 05 enell 275       {
80 24 Mar 06 enell 276         List<Integer> assayGroup = groups.get(groupName);
80 24 Mar 06 enell 277         HashMap<Integer, Replicate> replicates = new HashMap<Integer, Replicate>();
80 24 Mar 06 enell 278         HashMap<Integer, Replicate> singletons = new HashMap<Integer, Replicate>();
80 24 Mar 06 enell 279         
17 18 Oct 05 enell 280         String[] vals;
17 18 Oct 05 enell 281         while ((vals = bfr.readDataRow()) != null)
15 14 Oct 05 enell 282         {
17 18 Oct 05 enell 283           int reporter = new Integer(vals[repCol]);
80 24 Mar 06 enell 284           Replicate replicate = replicates.get(reporter);
32 09 Nov 05 enell 285           if (replicate == null)
15 14 Oct 05 enell 286           {
80 24 Mar 06 enell 287             replicate = new Replicate();
17 18 Oct 05 enell 288           }
17 18 Oct 05 enell 289
17 18 Oct 05 enell 290           for (int i = 0; i < assayGroup.size(); i++)
17 18 Oct 05 enell 291           {
32 09 Nov 05 enell 292             float int1;
32 09 Nov 05 enell 293             float int2;
87 04 Apr 06 enell 294             int position = Integer.MIN_VALUE;
15 14 Oct 05 enell 295             try
15 14 Oct 05 enell 296             {
80 24 Mar 06 enell 297               int assayCol = assayColumns.get(assayGroup.get(i));
80 24 Mar 06 enell 298               position = new Integer(vals[posCol]);
80 24 Mar 06 enell 299               int1 = new Float(vals[assayCol + int1Col]);
80 24 Mar 06 enell 300               int2 = new Float(vals[assayCol + int2Col]);
32 09 Nov 05 enell 301               if (int1 <= 0 || int2 <= 0)
17 18 Oct 05 enell 302               {
32 09 Nov 05 enell 303                 int1 = Float.NaN;
32 09 Nov 05 enell 304                 int2 = Float.NaN;
17 18 Oct 05 enell 305               }
15 14 Oct 05 enell 306             }
15 14 Oct 05 enell 307             catch (NumberFormatException e)
15 14 Oct 05 enell 308             {
32 09 Nov 05 enell 309               int1 = Float.NaN;
32 09 Nov 05 enell 310               int2 = Float.NaN;
15 14 Oct 05 enell 311             }
87 04 Apr 06 enell 312             if (position > Integer.MIN_VALUE)
80 24 Mar 06 enell 313             {
792 24 Sep 08 jari 314               // This construct is not pretty but it is a consequence
792 24 Sep 08 jari 315               // of fixing a bug in ReplicateErrarWA.java. Here we
792 24 Sep 08 jari 316               // expect the ArrayList to be of size 0 or 1 nothng
792 24 Sep 08 jari 317               // else.
792 24 Sep 08 jari 318               ArrayList<Spot> als = replicate.getAssaySpot(assayGroup.get(i));
792 24 Sep 08 jari 319               if (als.size() == 0)
80 24 Mar 06 enell 320               {
792 24 Sep 08 jari 321                 Spot s = new Spot(assayGroup.get(i));
792 24 Sep 08 jari 322                 s.add(position, int1, int2);
80 24 Mar 06 enell 323                 replicate.add(s);
80 24 Mar 06 enell 324               }
792 24 Sep 08 jari 325               else
792 24 Sep 08 jari 326               {
792 24 Sep 08 jari 327                 als.get(0).add(position, int1, int2);
792 24 Sep 08 jari 328               }
80 24 Mar 06 enell 329             }
15 14 Oct 05 enell 330           }
80 24 Mar 06 enell 331           replicates.put(reporter, replicate);
80 24 Mar 06 enell 332         }
80 24 Mar 06 enell 333
791 24 Sep 08 jari 334         // remove unusable replicates
791 24 Sep 08 jari 335         purgeUnusableReplicates(replicates, singletons);
80 24 Mar 06 enell 336         
795 01 Oct 08 jari 337         // calculate mean or median before filter
80 24 Mar 06 enell 338         List<Float> mList = getMList(replicates.values());
32 09 Nov 05 enell 339         float averageBefore;
56 08 Dec 05 enell 340         int nbrBefore = mList.size();
43 21 Nov 05 enell 341         if (center == Center.median)
32 09 Nov 05 enell 342         {
43 21 Nov 05 enell 343           averageBefore = median(mList);
32 09 Nov 05 enell 344         }
32 09 Nov 05 enell 345         else
32 09 Nov 05 enell 346         {
43 21 Nov 05 enell 347           averageBefore = mean(mList);
32 09 Nov 05 enell 348         }
80 24 Mar 06 enell 349         // Calculate standard deviation befor filter
43 21 Nov 05 enell 350         float sdBefore = standardDiviation(mList, mean(mList));
55 07 Dec 05 enell 351
80 24 Mar 06 enell 352         R.setABRBefore(groupName, caluculateABR(replicates.values()));
17 18 Oct 05 enell 353
791 24 Sep 08 jari 354         // print result to file for later use in R
80 24 Mar 06 enell 355         printDuplicates(replicates.values(), groupName + ".data");
80 24 Mar 06 enell 356         
80 24 Mar 06 enell 357         // filter replicates abs(M - mean) against 'sdLimit' number of sd's
2011 09 Jul 13 olle 358         // A negative 'sdLimit' indicates no filtering
2011 09 Jul 13 olle 359         if (sdLimit > 0f)
17 18 Oct 05 enell 360         {
2011 09 Jul 13 olle 361           for (Replicate r : replicates.values())
2011 09 Jul 13 olle 362           {
2011 09 Jul 13 olle 363             r.filter(averageBefore, sdLimit * sdBefore);
2011 09 Jul 13 olle 364           }
17 18 Oct 05 enell 365         }
791 24 Sep 08 jari 366         // print result to file for later use in R
80 24 Mar 06 enell 367         printDuplicates(replicates.values(), groupName + "good.data");
80 24 Mar 06 enell 368         
80 24 Mar 06 enell 369         // calculate mean after filter
80 24 Mar 06 enell 370         mList = getMList(replicates.values());
32 09 Nov 05 enell 371         float averageAfter;
43 21 Nov 05 enell 372         if (center == Center.median)
32 09 Nov 05 enell 373         {
43 21 Nov 05 enell 374           averageAfter = median(mList);
32 09 Nov 05 enell 375         }
32 09 Nov 05 enell 376         else
32 09 Nov 05 enell 377         {
43 21 Nov 05 enell 378           averageAfter = mean(mList);
32 09 Nov 05 enell 379         }
80 24 Mar 06 enell 380         // Calculate standard deviation after filter
43 21 Nov 05 enell 381         float sdAfter = standardDiviation(mList, mean(mList));
32 09 Nov 05 enell 382
80 24 Mar 06 enell 383         R.setABRAfter(groupName, caluculateABR(replicates.values()));
55 07 Dec 05 enell 384
80 24 Mar 06 enell 385         for (Integer assay : assayGroup)
80 24 Mar 06 enell 386         {
80 24 Mar 06 enell 387           spotSection.setHeader("assays", assay);
80 24 Mar 06 enell 388           System.out.println(spotSection);
80 24 Mar 06 enell 389           printSpots(assay, replicates);
80 24 Mar 06 enell 390           printSpots(assay, singletons);
80 24 Mar 06 enell 391           System.out.println();
80 24 Mar 06 enell 392         }
80 24 Mar 06 enell 393         
795 01 Oct 08 jari 394         HTML.addPlotsTable(groupName, averageBefore, sdBefore, nbrBefore,
795 01 Oct 08 jari 395                            averageAfter, sdAfter, mList.size());
795 01 Oct 08 jari 396
17 18 Oct 05 enell 397         bfr.resetDataPosition(section);
15 14 Oct 05 enell 398       }
27 07 Nov 05 enell 399       HTML.closePlotsTable();
52 25 Nov 05 enell 400       R.printPlotFile();
32 09 Nov 05 enell 401
30 08 Nov 05 enell 402       if (noGroup.size() > 0)
27 07 Nov 05 enell 403       {
30 08 Nov 05 enell 404         spotSection.setHeader("assays", noGroup.toArray());
27 07 Nov 05 enell 405         System.out.println(spotSection);
27 07 Nov 05 enell 406         String[] vals;
27 07 Nov 05 enell 407         while ((vals = bfr.readDataRow()) != null)
27 07 Nov 05 enell 408         {
54 05 Dec 05 enell 409           System.out.print(vals[posCol] + "\t" + vals[repCol]);
27 07 Nov 05 enell 410
80 24 Mar 06 enell 411           for (Integer assay : noGroup)
27 07 Nov 05 enell 412           {
27 07 Nov 05 enell 413             System.out.print("\t" + vals[assayColumns.get(assay) + int1Col]);
27 07 Nov 05 enell 414             System.out.print("\t" + vals[assayColumns.get(assay) + int2Col]);
27 07 Nov 05 enell 415           }
27 07 Nov 05 enell 416           System.out.println();
27 07 Nov 05 enell 417         }
27 07 Nov 05 enell 418       }
32 09 Nov 05 enell 419
15 14 Oct 05 enell 420     }
17 18 Oct 05 enell 421     catch (IOException e)
17 18 Oct 05 enell 422     {
17 18 Oct 05 enell 423       e.printStackTrace();
17 18 Oct 05 enell 424     }
15 14 Oct 05 enell 425   }
784 18 Sep 08 jari 426 }