src/core/net/sf/basedb/util/export/spotdata/SerialBfsExporter.java

Code
Comments
Other
Rev Date Author Line
5199 15 Dec 09 nicklas 1 /**
5199 15 Dec 09 nicklas 2   $Id$
5199 15 Dec 09 nicklas 3
5199 15 Dec 09 nicklas 4   Copyright (C) 2009 Nicklas Nordborg
5199 15 Dec 09 nicklas 5
5199 15 Dec 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
5199 15 Dec 09 nicklas 7   Available at http://base.thep.lu.se/
5199 15 Dec 09 nicklas 8
5199 15 Dec 09 nicklas 9   BASE is free software; you can redistribute it and/or
5199 15 Dec 09 nicklas 10   modify it under the terms of the GNU General Public License
5199 15 Dec 09 nicklas 11   as published by the Free Software Foundation; either version 3
5199 15 Dec 09 nicklas 12   of the License, or (at your option) any later version.
5199 15 Dec 09 nicklas 13
5199 15 Dec 09 nicklas 14   BASE is distributed in the hope that it will be useful,
5199 15 Dec 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5199 15 Dec 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5199 15 Dec 09 nicklas 17   GNU General Public License for more details.
5199 15 Dec 09 nicklas 18
5199 15 Dec 09 nicklas 19   You should have received a copy of the GNU General Public License
5199 15 Dec 09 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5199 15 Dec 09 nicklas 21 */
5199 15 Dec 09 nicklas 22 package net.sf.basedb.util.export.spotdata;
5199 15 Dec 09 nicklas 23
5199 15 Dec 09 nicklas 24 import java.io.IOException;
5199 15 Dec 09 nicklas 25 import java.util.ArrayList;
5199 15 Dec 09 nicklas 26 import java.util.List;
5199 15 Dec 09 nicklas 27
5199 15 Dec 09 nicklas 28 import net.sf.basedb.core.BioAssay;
5213 12 Jan 10 nicklas 29 import net.sf.basedb.core.Path;
5199 15 Dec 09 nicklas 30 import net.sf.basedb.util.bfs.DataWriter;
5199 15 Dec 09 nicklas 31
5199 15 Dec 09 nicklas 32 /**
5199 15 Dec 09 nicklas 33   BFS exporter implementation that exports spot data in serial format. This
5199 15 Dec 09 nicklas 34   format creates one file per assay in the bioassay set. Each data file contains
5199 15 Dec 09 nicklas 35   columns for the registered spot fields. For example, the 'sdata1'
5199 15 Dec 09 nicklas 36   file contains channel 1 and 2 intensity for the first assay, 
5199 15 Dec 09 nicklas 37   and 'sdata2' contains the same data for the second assay, etc.
5199 15 Dec 09 nicklas 38
5199 15 Dec 09 nicklas 39   @author Nicklas
5199 15 Dec 09 nicklas 40   @version 2.15
5199 15 Dec 09 nicklas 41   @base.modified $Date$
5199 15 Dec 09 nicklas 42 */
5199 15 Dec 09 nicklas 43 public class SerialBfsExporter
5199 15 Dec 09 nicklas 44   extends BfsExporter
5199 15 Dec 09 nicklas 45 {
5319 20 Apr 10 nicklas 46   
5319 20 Apr 10 nicklas 47   public static final String SUBTYPE = "serial";
5319 20 Apr 10 nicklas 48   
5199 15 Dec 09 nicklas 49   /**
5199 15 Dec 09 nicklas 50     Create a new serial BFS exporter.
5199 15 Dec 09 nicklas 51   */
5199 15 Dec 09 nicklas 52   public SerialBfsExporter()
5199 15 Dec 09 nicklas 53   {}
5199 15 Dec 09 nicklas 54
5199 15 Dec 09 nicklas 55   
5199 15 Dec 09 nicklas 56   /*
5199 15 Dec 09 nicklas 57     From the BfsExporter class
5199 15 Dec 09 nicklas 58     --------------------------
5199 15 Dec 09 nicklas 59   */
5199 15 Dec 09 nicklas 60   /**
5199 15 Dec 09 nicklas 61     @return "serial"
5199 15 Dec 09 nicklas 62   */
5199 15 Dec 09 nicklas 63   @Override
5199 15 Dec 09 nicklas 64   public String getBFSSubtype()
5199 15 Dec 09 nicklas 65   {
5319 20 Apr 10 nicklas 66     return SUBTYPE;
5199 15 Dec 09 nicklas 67   }
5199 15 Dec 09 nicklas 68   
5199 15 Dec 09 nicklas 69   /**
5199 15 Dec 09 nicklas 70     Create one data writer for each assay in the bioassay set. Each data 
5199 15 Dec 09 nicklas 71     writer is configured with one column per spot field.
5199 15 Dec 09 nicklas 72   */
5199 15 Dec 09 nicklas 73   @Override
5199 15 Dec 09 nicklas 74   protected List<DataWriter> createDataWriters()
5199 15 Dec 09 nicklas 75     throws IOException
5199 15 Dec 09 nicklas 76   {
5199 15 Dec 09 nicklas 77     prepareAssayIndexMap(getBioAssays(), 0, 1);
5199 15 Dec 09 nicklas 78     List<BioAssay> bioassays = getBioAssays();
5199 15 Dec 09 nicklas 79     int numSpotFields = getSpotFields().size();
5199 15 Dec 09 nicklas 80     List<DataWriter> writers = new ArrayList<DataWriter>();
5199 15 Dec 09 nicklas 81     for (BioAssay ba : bioassays)
5199 15 Dec 09 nicklas 82     {
5213 12 Jan 10 nicklas 83       DataWriter writer = createDataWriter(ba, Path.makeSafeFilename(ba.getName() + "-" + ba.getId() + ".txt", ""));
5199 15 Dec 09 nicklas 84       writer.setColumnCount(numSpotFields);
5199 15 Dec 09 nicklas 85       writers.add(writer);
5199 15 Dec 09 nicklas 86     }
5199 15 Dec 09 nicklas 87     return writers;
5199 15 Dec 09 nicklas 88   }
5199 15 Dec 09 nicklas 89
5199 15 Dec 09 nicklas 90   /**
5199 15 Dec 09 nicklas 91     The column number is used to find the assay index. Then,
5199 15 Dec 09 nicklas 92     the spot data is copied to the correct data writer.
5199 15 Dec 09 nicklas 93   */
5199 15 Dec 09 nicklas 94   @Override
5199 15 Dec 09 nicklas 95   protected void arrangeData(int position, short column, 
5199 15 Dec 09 nicklas 96      Object[][] data, Object[] spotData)
5199 15 Dec 09 nicklas 97   {
5199 15 Dec 09 nicklas 98     int columnToArrayIndex = getAssayIndex(column);
5199 15 Dec 09 nicklas 99     Object[] assayData = data[columnToArrayIndex];
5199 15 Dec 09 nicklas 100     for (int i = 0; i < assayData.length; ++i)
5199 15 Dec 09 nicklas 101     {
5199 15 Dec 09 nicklas 102       assayData[i] = spotData[i];
5199 15 Dec 09 nicklas 103     }
5199 15 Dec 09 nicklas 104   }
5199 15 Dec 09 nicklas 105   // -------------------------------------------------------
5199 15 Dec 09 nicklas 106   
5199 15 Dec 09 nicklas 107 }