src/core/net/sf/basedb/util/export/spotdata/MatrixBfsExporter.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
5213 12 Jan 10 nicklas 28 import net.sf.basedb.core.Path;
5199 15 Dec 09 nicklas 29 import net.sf.basedb.util.bfs.DataWriter;
5199 15 Dec 09 nicklas 30
5199 15 Dec 09 nicklas 31 /**
5199 15 Dec 09 nicklas 32   BFS exporter implementation that exports spot data in matrix format. This
5199 15 Dec 09 nicklas 33   format creates one file per spot data field. Each data file contains
5199 15 Dec 09 nicklas 34   data columns for all assays in the bioassay set. For example, the 'sdata1'
5199 15 Dec 09 nicklas 35   file contains channel 1 intensity and 'sdata2' contains channel 2 intensity.
5199 15 Dec 09 nicklas 36   
5199 15 Dec 09 nicklas 37   @author Nicklas
5199 15 Dec 09 nicklas 38   @version 2.15
5199 15 Dec 09 nicklas 39   @base.modified $Date$
5199 15 Dec 09 nicklas 40 */
5199 15 Dec 09 nicklas 41 public class MatrixBfsExporter
5199 15 Dec 09 nicklas 42   extends BfsExporter
5199 15 Dec 09 nicklas 43 {
5319 20 Apr 10 nicklas 44   
5319 20 Apr 10 nicklas 45   public static final String SUBTYPE = "matrix";
5199 15 Dec 09 nicklas 46
5199 15 Dec 09 nicklas 47   /**
5199 15 Dec 09 nicklas 48     Create a new matrix BFS exporter.
5199 15 Dec 09 nicklas 49   */
5199 15 Dec 09 nicklas 50   public MatrixBfsExporter()
5199 15 Dec 09 nicklas 51   {}
5199 15 Dec 09 nicklas 52   
5199 15 Dec 09 nicklas 53   /*
5199 15 Dec 09 nicklas 54     From the BfsExporter class
5199 15 Dec 09 nicklas 55     --------------------------
5199 15 Dec 09 nicklas 56   */
5199 15 Dec 09 nicklas 57   /**
5199 15 Dec 09 nicklas 58     @return "matrix"
5199 15 Dec 09 nicklas 59   */
5199 15 Dec 09 nicklas 60   @Override
5199 15 Dec 09 nicklas 61   public String getBFSSubtype()
5199 15 Dec 09 nicklas 62   {
5319 20 Apr 10 nicklas 63     return SUBTYPE;
5199 15 Dec 09 nicklas 64   }
5199 15 Dec 09 nicklas 65
5199 15 Dec 09 nicklas 66   /**
5199 15 Dec 09 nicklas 67     Create one data writer for each registered spot field. Each data 
5199 15 Dec 09 nicklas 68     writer is configured with one column per assay in the bioassay set.
5199 15 Dec 09 nicklas 69   */
5199 15 Dec 09 nicklas 70   @Override
5199 15 Dec 09 nicklas 71   protected List<DataWriter> createDataWriters()
5199 15 Dec 09 nicklas 72     throws IOException
5199 15 Dec 09 nicklas 73   {
5199 15 Dec 09 nicklas 74     prepareAssayIndexMap(getBioAssays(), 0, 1);
5199 15 Dec 09 nicklas 75     List<DynamicField> spotFields = getSpotFields();
5199 15 Dec 09 nicklas 76     int numAssays = getBioAssays().size();
5199 15 Dec 09 nicklas 77     List<DataWriter> writers = new ArrayList<DataWriter>(spotFields.size());
5199 15 Dec 09 nicklas 78     for (DynamicField df : spotFields)
5199 15 Dec 09 nicklas 79     {
5213 12 Jan 10 nicklas 80       DataWriter writer = createDataWriter(df, Path.makeSafeFilename(df.getTitle() + ".txt", ""));
5199 15 Dec 09 nicklas 81       writer.setColumnCount(numAssays);
5199 15 Dec 09 nicklas 82       writers.add(writer);
5199 15 Dec 09 nicklas 83     }
5199 15 Dec 09 nicklas 84     return writers;
5199 15 Dec 09 nicklas 85   }
5199 15 Dec 09 nicklas 86
5199 15 Dec 09 nicklas 87   /**
5199 15 Dec 09 nicklas 88     The column number is used to find the assay index. Then,
5199 15 Dec 09 nicklas 89     the spot data is copied to the correct data writer.
5199 15 Dec 09 nicklas 90   */
5199 15 Dec 09 nicklas 91   @Override
5199 15 Dec 09 nicklas 92   protected void arrangeData(int position, short column, 
5199 15 Dec 09 nicklas 93     Object[][] data, Object[] spotData)
5199 15 Dec 09 nicklas 94   {
5199 15 Dec 09 nicklas 95     int columnToArrayIndex = getAssayIndex(column);
5199 15 Dec 09 nicklas 96     for (int i = 0; i < data.length; ++i)
5199 15 Dec 09 nicklas 97     {
5199 15 Dec 09 nicklas 98       data[i][columnToArrayIndex] = spotData[i];
5199 15 Dec 09 nicklas 99     }
5199 15 Dec 09 nicklas 100   }
5199 15 Dec 09 nicklas 101   // -------------------------------------------------------
5199 15 Dec 09 nicklas 102
5199 15 Dec 09 nicklas 103
5199 15 Dec 09 nicklas 104 }