mev-4.0.01/source/org/tigr/microarray/mev/cluster/algorithm/impl/SOTACell.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: SOTACell.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.2 $
2 26 Feb 07 jari 8  * $Date: 2006/02/23 20:59:45 $
2 26 Feb 07 jari 9  * $Author: caliente $
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.algorithm.impl;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.util.Vector;
2 26 Feb 07 jari 15
2 26 Feb 07 jari 16 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 public class SOTACell{
2 26 Feb 07 jari 19     
2 26 Feb 07 jari 20     public FloatMatrix dataMatrix;
2 26 Feb 07 jari 21     
2 26 Feb 07 jari 22     public SOTACell parent;
2 26 Feb 07 jari 23     public SOTACell left;
2 26 Feb 07 jari 24     public SOTACell right;
2 26 Feb 07 jari 25     public SOTACell pred;  //thread cells
2 26 Feb 07 jari 26     public SOTACell succ;
2 26 Feb 07 jari 27     
2 26 Feb 07 jari 28     public  FloatMatrix centroidGene;
2 26 Feb 07 jari 29     
2 26 Feb 07 jari 30     public Vector members;
2 26 Feb 07 jari 31     public double cellDiversity;
2 26 Feb 07 jari 32     public double cellVariance;
2 26 Feb 07 jari 33     private int numberOfSamples;
2 26 Feb 07 jari 34     
2 26 Feb 07 jari 35     public boolean changedMembership;
2 26 Feb 07 jari 36     
2 26 Feb 07 jari 37     public SOTACell(int NumberOfSamples, FloatMatrix DataMatrix){
2 26 Feb 07 jari 38   
2 26 Feb 07 jari 39   dataMatrix = DataMatrix;
2 26 Feb 07 jari 40   numberOfSamples =NumberOfSamples;
2 26 Feb 07 jari 41   changedMembership = false;
2 26 Feb 07 jari 42   
2 26 Feb 07 jari 43   centroidGene = new FloatMatrix(1,numberOfSamples);
2 26 Feb 07 jari 44   
2 26 Feb 07 jari 45   for(int i = 0; i < numberOfSamples; i++)
2 26 Feb 07 jari 46       centroidGene.set(0,i, 0);
2 26 Feb 07 jari 47   
2 26 Feb 07 jari 48   members = new Vector();
2 26 Feb 07 jari 49   cellDiversity = 0;
2 26 Feb 07 jari 50   cellVariance = 0;
2 26 Feb 07 jari 51   parent = left = right = pred = succ = null;
2 26 Feb 07 jari 52     }
2 26 Feb 07 jari 53     
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     public void removeMember(int geneNum){
2 26 Feb 07 jari 56   for(int i = 0; i < members.size() ; i++){
2 26 Feb 07 jari 57       if(geneNum == ((Integer)members.elementAt(i)).intValue()){
2 26 Feb 07 jari 58     members.removeElementAt(i);
2 26 Feb 07 jari 59     changedMembership = true;  //changedMemebership
2 26 Feb 07 jari 60     break;
2 26 Feb 07 jari 61       }
2 26 Feb 07 jari 62   }
2 26 Feb 07 jari 63     }
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     
2 26 Feb 07 jari 66     public void migrateCentroid(int geneIndex, float nu){
2 26 Feb 07 jari 67   
2 26 Feb 07 jari 68   for(int i = 0; i < numberOfSamples; i++){
2 26 Feb 07 jari 69       if(!Float.isNaN(dataMatrix.get(geneIndex,i)))
2 26 Feb 07 jari 70     centroidGene.set(0,i, (float)(centroidGene.get(0,i) + ((nu)*( dataMatrix.get(geneIndex,i) - centroidGene.get(0,i) ) )));
2 26 Feb 07 jari 71   }
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     public float getColumnVar(int index){
2 26 Feb 07 jari 78   int n = members.size();
2 26 Feb 07 jari 79   float sum = 0;
2 26 Feb 07 jari 80   int geneIndex;
2 26 Feb 07 jari 81   int numOfNaN = 0;
2 26 Feb 07 jari 82   
2 26 Feb 07 jari 83   float currVal;
2 26 Feb 07 jari 84   for(int i = 0 ; i < n; i++){
2 26 Feb 07 jari 85       geneIndex = ((Integer)(members.elementAt(i))).intValue();
2 26 Feb 07 jari 86       currVal = dataMatrix.get(geneIndex, index);
2 26 Feb 07 jari 87       
2 26 Feb 07 jari 88       if(!Float.isNaN(currVal)){
2 26 Feb 07 jari 89     sum += Math.pow(currVal - centroidGene.get(0,index) , 2 );
2 26 Feb 07 jari 90     numOfNaN++;
2 26 Feb 07 jari 91       }
2 26 Feb 07 jari 92       
2 26 Feb 07 jari 93   }
2 26 Feb 07 jari 94   if(numOfNaN > 1)
2 26 Feb 07 jari 95       return (float)Math.sqrt(sum/(numOfNaN-1));
2 26 Feb 07 jari 96   else
2 26 Feb 07 jari 97       return 0;
2 26 Feb 07 jari 98     }
2 26 Feb 07 jari 99     
2 26 Feb 07 jari 100     
2 26 Feb 07 jari 101     public void addMember(int geneNum){
2 26 Feb 07 jari 102   
2 26 Feb 07 jari 103   members.add(new Integer(geneNum));
2 26 Feb 07 jari 104   changedMembership = true;
2 26 Feb 07 jari 105     }
2 26 Feb 07 jari 106     
2 26 Feb 07 jari 107     
2 26 Feb 07 jari 108     public SOTACell findSister(){
2 26 Feb 07 jari 109   
2 26 Feb 07 jari 110   if(this != null){
2 26 Feb 07 jari 111       if(this.parent.left == this)
2 26 Feb 07 jari 112     return this.parent.right;
2 26 Feb 07 jari 113       else
2 26 Feb 07 jari 114     return this.parent.left;
2 26 Feb 07 jari 115   }
2 26 Feb 07 jari 116   else
2 26 Feb 07 jari 117       return null;
2 26 Feb 07 jari 118     }
2 26 Feb 07 jari 119 } //end SOTACell