mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/Experiment.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: Experiment.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2006/08/22 17:53:19 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 15
2 26 Feb 07 jari 16 /**
2 26 Feb 07 jari 17  * This class is used to store experiment data (ratio values).
2 26 Feb 07 jari 18  *
2 26 Feb 07 jari 19  * @version 1.0
2 26 Feb 07 jari 20  * @author Aleksey D.Rezantsev
2 26 Feb 07 jari 21  */
2 26 Feb 07 jari 22 public class Experiment {
2 26 Feb 07 jari 23     
2 26 Feb 07 jari 24     /**
2 26 Feb 07 jari 25     * EH this count is used as a unique identifier for each newly-created Experiment
2 26 Feb 07 jari 26     */ 
2 26 Feb 07 jari 27     public static int exptCount = 1;
2 26 Feb 07 jari 28     // matrix of ratio values
2 26 Feb 07 jari 29     private FloatMatrix matrix; 
2 26 Feb 07 jari 30     // data indices 
2 26 Feb 07 jari 31     private int[] columns;
2 26 Feb 07 jari 32     // gene indices to map from a FloatMatrix that is a subset of the
2 26 Feb 07 jari 33     //full dataset back to a row index in the MultipleArrayData.
2 26 Feb 07 jari 34     private int[] rowMapping;
2 26 Feb 07 jari 35     private int id;
2 26 Feb 07 jari 36     
2 26 Feb 07 jari 37     public Experiment(int[] columns, int[] rows, int id, FloatMatrix fm) {
2 26 Feb 07 jari 38       this(null, columns, rows);
2 26 Feb 07 jari 39       this.matrix = fm;
2 26 Feb 07 jari 40     }
2 26 Feb 07 jari 41    
2 26 Feb 07 jari 42
2 26 Feb 07 jari 43     /**
2 26 Feb 07 jari 44      * Constructs an <code>Experiment</code> with specified
2 26 Feb 07 jari 45      * matrix of ratio values and columns indices.
2 26 Feb 07 jari 46      */
2 26 Feb 07 jari 47     public Experiment(FloatMatrix matrix, int[] columns) {
2 26 Feb 07 jari 48         this(matrix, columns, makeDefaultRowMapping( matrix.getRowDimension() ));
2 26 Feb 07 jari 49     }
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     /**
2 26 Feb 07 jari 52      * Constructs an <code>Experiment</code> with specified
2 26 Feb 07 jari 53      * matrix of ratio values, columns indices, and row indices
2 26 Feb 07 jari 54      */
2 26 Feb 07 jari 55     public Experiment(FloatMatrix matrix, int[] columns, int[] rows){
2 26 Feb 07 jari 56       exptCount++;
2 26 Feb 07 jari 57         this.matrix = matrix;
2 26 Feb 07 jari 58         this.columns = columns;
2 26 Feb 07 jari 59         this.rowMapping = rows;
2 26 Feb 07 jari 60         if (new Integer(this.id).equals(null))
2 26 Feb 07 jari 61           this.id = exptCount;
2 26 Feb 07 jari 62     }
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     public int[] getRows() {return rowMapping;}
2 26 Feb 07 jari 65     public int[] getColumns(){return columns;}
2 26 Feb 07 jari 66
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     public int getId(){return this.id;}
2 26 Feb 07 jari 69     
2 26 Feb 07 jari 70     public void fillMatrix(FloatMatrix fm){
2 26 Feb 07 jari 71       this.matrix = fm;
2 26 Feb 07 jari 72     }
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74
2 26 Feb 07 jari 75     
2 26 Feb 07 jari 76     /**
2 26 Feb 07 jari 77      * Makes default sequential mapping of row indices
2 26 Feb 07 jari 78      */
2 26 Feb 07 jari 79     private static int[] makeDefaultRowMapping(int numberOfRows){
2 26 Feb 07 jari 80         int [] rowMap = new int[numberOfRows];
2 26 Feb 07 jari 81         for(int i = 0; i < numberOfRows; i++){
2 26 Feb 07 jari 82             rowMap[i] = i;
2 26 Feb 07 jari 83         }
2 26 Feb 07 jari 84         return rowMap;
2 26 Feb 07 jari 85     }
2 26 Feb 07 jari 86     
2 26 Feb 07 jari 87     /**
2 26 Feb 07 jari 88      * Returns a copy of the row mapping array.  This array provides
2 26 Feb 07 jari 89      * a mapping from a row in the Experiment to a IData index.
2 26 Feb 07 jari 90      */
2 26 Feb 07 jari 91     public int [] getRowMappingArrayCopy(){
2 26 Feb 07 jari 92         int [] copyArray = new int[this.rowMapping.length];
2 26 Feb 07 jari 93         System.arraycopy(this.rowMapping, 0, copyArray, 0, copyArray.length);
2 26 Feb 07 jari 94         return copyArray;
2 26 Feb 07 jari 95     }
2 26 Feb 07 jari 96     
2 26 Feb 07 jari 97     /**
2 26 Feb 07 jari 98      *  Returns a copy of the column indices
2 26 Feb 07 jari 99      */
2 26 Feb 07 jari 100     public int [] getColumnIndicesCopy() {
2 26 Feb 07 jari 101         int [] copyArray = new int[this.columns.length];
2 26 Feb 07 jari 102         System.arraycopy(this.columns, 0, copyArray, 0, copyArray.length);
2 26 Feb 07 jari 103         return copyArray;
2 26 Feb 07 jari 104     }
2 26 Feb 07 jari 105     
2 26 Feb 07 jari 106     /**
2 26 Feb 07 jari 107      * Returns clone of this <code>Experiment</code>.
2 26 Feb 07 jari 108      */
2 26 Feb 07 jari 109     public Experiment copy() {
2 26 Feb 07 jari 110         int[] columns = new int[this.columns.length];
2 26 Feb 07 jari 111         System.arraycopy(this.columns, 0, columns, 0, this.columns.length);
2 26 Feb 07 jari 112         return new Experiment(matrix.copy(), columns, getRowMappingArrayCopy());
2 26 Feb 07 jari 113     }
2 26 Feb 07 jari 114     
2 26 Feb 07 jari 115     /**
2 26 Feb 07 jari 116      * Returns ratio value.
2 26 Feb 07 jari 117      */
2 26 Feb 07 jari 118     public float get(int i, int j) {
2 26 Feb 07 jari 119         return matrix.get(i, j);
2 26 Feb 07 jari 120     }
2 26 Feb 07 jari 121     
2 26 Feb 07 jari 122     /**
2 26 Feb 07 jari 123      * Returns array of ratio values.
2 26 Feb 07 jari 124      */
2 26 Feb 07 jari 125     public float[][] getValues() {
2 26 Feb 07 jari 126         return matrix.A;
2 26 Feb 07 jari 127     }
2 26 Feb 07 jari 128     
2 26 Feb 07 jari 129     /**
2 26 Feb 07 jari 130      * Returns float matrix of ratio values.
2 26 Feb 07 jari 131      */
2 26 Feb 07 jari 132     public FloatMatrix getMatrix() {
2 26 Feb 07 jari 133         return matrix;
2 26 Feb 07 jari 134     }
2 26 Feb 07 jari 135     
2 26 Feb 07 jari 136     /**
2 26 Feb 07 jari 137      * Returns column index in micro array.
2 26 Feb 07 jari 138      */
2 26 Feb 07 jari 139     public int getSampleIndex(int column) {
2 26 Feb 07 jari 140         return columns[column];
2 26 Feb 07 jari 141     }
2 26 Feb 07 jari 142     
2 26 Feb 07 jari 143     /**
2 26 Feb 07 jari 144      * Returns row index in MultipleArrayData that maps from passed row
2 26 Feb 07 jari 145      * index.
2 26 Feb 07 jari 146      */
2 26 Feb 07 jari 147     public int getGeneIndexMappedToData(int row){
2 26 Feb 07 jari 148         if( row >= 0 && row < rowMapping.length)
2 26 Feb 07 jari 149             return rowMapping[row];
2 26 Feb 07 jari 150         else
2 26 Feb 07 jari 151             return -1;
2 26 Feb 07 jari 152     }
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     /**
2 26 Feb 07 jari 155      * Returns count of genes.
2 26 Feb 07 jari 156      */
2 26 Feb 07 jari 157     public int getNumberOfGenes(){
2 26 Feb 07 jari 158         return matrix.getRowDimension();
2 26 Feb 07 jari 159     }
2 26 Feb 07 jari 160     
2 26 Feb 07 jari 161     /**
2 26 Feb 07 jari 162      * Returns count of columns in this experiment.
2 26 Feb 07 jari 163      */
2 26 Feb 07 jari 164     public int getNumberOfSamples() {
2 26 Feb 07 jari 165         return matrix.getColumnDimension();
2 26 Feb 07 jari 166     }
2 26 Feb 07 jari 167     
2 26 Feb 07 jari 168     public float[] getMinAndMax(){
2 26 Feb 07 jari 169         float val = 0;
2 26 Feb 07 jari 170         int rows = matrix.getRowDimension();
2 26 Feb 07 jari 171         int cols = matrix.getColumnDimension();
2 26 Feb 07 jari 172         float [] minMax = new float[2];
2 26 Feb 07 jari 173         minMax[0] = Float.POSITIVE_INFINITY;
2 26 Feb 07 jari 174         minMax[1] = Float.NEGATIVE_INFINITY;
2 26 Feb 07 jari 175         for(int row = 0; row < rows; row++){
2 26 Feb 07 jari 176             for(int col = 0; col < cols; col++){
2 26 Feb 07 jari 177                 val = matrix.get(row,col);
2 26 Feb 07 jari 178                 if(!Float.isNaN(val)){
2 26 Feb 07 jari 179                     if(val < minMax[0])
2 26 Feb 07 jari 180                         minMax[0] = val;
2 26 Feb 07 jari 181                     if(val > minMax[1])
2 26 Feb 07 jari 182                         minMax[1] = val;
2 26 Feb 07 jari 183                 }
2 26 Feb 07 jari 184             }
2 26 Feb 07 jari 185         }
2 26 Feb 07 jari 186         return minMax;
2 26 Feb 07 jari 187     }
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     public float getMaxAbsValue(){
2 26 Feb 07 jari 190         float [] minMax = getMinAndMax();
2 26 Feb 07 jari 191         return Math.max(Math.abs(minMax[0]), Math.abs(minMax[1]));
2 26 Feb 07 jari 192     }
2 26 Feb 07 jari 193 }