mev-4.0.01/source/org/tigr/microarray/mev/cluster/clusterUtil/Cluster.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: Cluster.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.10 $
2 26 Feb 07 jari 8  * $Date: 2006/05/18 20:07:49 $
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.clusterUtil;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.beans.Encoder;
2 26 Feb 07 jari 16 import java.beans.Expression;
2 26 Feb 07 jari 17 import java.beans.PersistenceDelegate;
2 26 Feb 07 jari 18 import java.util.HashSet;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 23 //import org.tigr.microarray.mev.cluster.gui.impl.ptm.PTMExperimentHeader;
2 26 Feb 07 jari 24
2 26 Feb 07 jari 25 /** The Cluster class encapsulates information required to define a cluster.
2 26 Feb 07 jari 26  * Methods include standard set... and get... methods to access and alter
2 26 Feb 07 jari 27  * the cluster definition.
2 26 Feb 07 jari 28  */
2 26 Feb 07 jari 29 public class Cluster {
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31     public static final int GENE_CLUSTER = 0;
2 26 Feb 07 jari 32     public static final int EXPERIMENT_CLUSTER = 1;
2 26 Feb 07 jari 33     
2 26 Feb 07 jari 34     /** Cluster color
2 26 Feb 07 jari 35      */    
2 26 Feb 07 jari 36     private Color clusterColor;
2 26 Feb 07 jari 37     /** Element indices in IData.
2 26 Feb 07 jari 38      */    
2 26 Feb 07 jari 39     private int [] indices;
2 26 Feb 07 jari 40     /** Indices to the Experiment Object's matrix
2 26 Feb 07 jari 41      */
2 26 Feb 07 jari 42     private int [] experimentIndices;
2 26 Feb 07 jari 43     /** Cluster source type
2 26 Feb 07 jari 44      */    
2 26 Feb 07 jari 45     private String source;
2 26 Feb 07 jari 46     /** Cluster origin node name
2 26 Feb 07 jari 47      */    
2 26 Feb 07 jari 48     private String clusterID;
2 26 Feb 07 jari 49     /** User defined cluster label
2 26 Feb 07 jari 50      */    
2 26 Feb 07 jari 51     private String clusterLabel;
2 26 Feb 07 jari 52     /** Algorithm node name
2 26 Feb 07 jari 53      */    
2 26 Feb 07 jari 54     private String algorithmName;
2 26 Feb 07 jari 55     /** Cluster remarks/description
2 26 Feb 07 jari 56      */    
2 26 Feb 07 jari 57     private String clusterDescription;
2 26 Feb 07 jari 58     /** Result index on result tree.
2 26 Feb 07 jari 59      */    
2 26 Feb 07 jari 60     private int algorithmIndex;
2 26 Feb 07 jari 61     /** Cluster sequential serial numbe
2 26 Feb 07 jari 62      */    
2 26 Feb 07 jari 63     private int serialNumber;
2 26 Feb 07 jari 64     /** Cluster node of origin, possibly null.
2 26 Feb 07 jari 65      */    
2 26 Feb 07 jari 66     private DefaultMutableTreeNode node;
2 26 Feb 07 jari 67     /** Cluster's Experiment of origin
2 26 Feb 07 jari 68      */
2 26 Feb 07 jari 69     private Experiment experiment;
2 26 Feb 07 jari 70     /** Node objects userObject
2 26 Feb 07 jari 71      */
2 26 Feb 07 jari 72     private Object userObject;
2 26 Feb 07 jari 73     /** boolean to indicate if cluster color should be displayed
2 26 Feb 07 jari 74      */
2 26 Feb 07 jari 75     private boolean isShowColor;
2 26 Feb 07 jari 76
2 26 Feb 07 jari 77     //EH
2 26 Feb 07 jari 78     private int exptID = 0;
2 26 Feb 07 jari 79
2 26 Feb 07 jari 80     /** 
2 26 Feb 07 jari 81      * EH Creates new cluster object
2 26 Feb 07 jari 82      * @deprecated Left in place for compatibility with saved analysis files from
2 26 Feb 07 jari 83      * an early release of v4.0b.
2 26 Feb 07 jari 84      */
2 26 Feb 07 jari 85     public Cluster(int [] indices, String source, String clusterLabel, String algorithmName, 
2 26 Feb 07 jari 86         String clusterID, String clusterDescription, Integer index, 
2 26 Feb 07 jari 87       Integer serialNumber, Color clusterColor, Integer exptID) {
2 26 Feb 07 jari 88         this.indices = indices;
2 26 Feb 07 jari 89         this.source = source;
2 26 Feb 07 jari 90         this.clusterLabel = clusterLabel;
2 26 Feb 07 jari 91         this.clusterID = clusterID;
2 26 Feb 07 jari 92         this.algorithmName = algorithmName;
2 26 Feb 07 jari 93         this.algorithmIndex = index.intValue();
2 26 Feb 07 jari 94         this.clusterColor = clusterColor;
2 26 Feb 07 jari 95         this.clusterDescription = clusterDescription;
2 26 Feb 07 jari 96         this.serialNumber = serialNumber.intValue();
2 26 Feb 07 jari 97         this.exptID = exptID.intValue();
2 26 Feb 07 jari 98         this.isShowColor = true;
2 26 Feb 07 jari 99     }
2 26 Feb 07 jari 100     /** Creates new cluster object
2 26 Feb 07 jari 101      */
2 26 Feb 07 jari 102     public Cluster(int [] indices, String source, String clusterLabel, String algorithmName, String clusterID, String clusterDescription, int index, int serialNumber, Color clusterColor, Experiment experiment) {
2 26 Feb 07 jari 103       this.indices = indices;
2 26 Feb 07 jari 104         this.source = source;
2 26 Feb 07 jari 105         this.clusterLabel = clusterLabel;
2 26 Feb 07 jari 106         this.clusterID = clusterID;
2 26 Feb 07 jari 107         this.algorithmName = algorithmName;
2 26 Feb 07 jari 108         this.algorithmIndex = index;
2 26 Feb 07 jari 109         this.clusterColor = clusterColor;
2 26 Feb 07 jari 110         this.clusterDescription = clusterDescription;
2 26 Feb 07 jari 111         this.serialNumber = serialNumber;
2 26 Feb 07 jari 112         this.experiment = experiment;
2 26 Feb 07 jari 113         this.isShowColor = true;
2 26 Feb 07 jari 114         this.experimentIndices = getIndicesMappedToExperiment();
2 26 Feb 07 jari 115     }
2 26 Feb 07 jari 116     
2 26 Feb 07 jari 117     /**
2 26 Feb 07 jari 118      * State-saving constructor. 
2 26 Feb 07 jari 119      * @param indices
2 26 Feb 07 jari 120      * @param source
2 26 Feb 07 jari 121      * @param clusterLabel
2 26 Feb 07 jari 122      * @param algorithmName
2 26 Feb 07 jari 123      * @param clusterID
2 26 Feb 07 jari 124      * @param clusterDescription
2 26 Feb 07 jari 125      * @param index
2 26 Feb 07 jari 126      * @param serialNumber
2 26 Feb 07 jari 127      * @param clusterColor
2 26 Feb 07 jari 128      * @param node
2 26 Feb 07 jari 129      * @param experiment
2 26 Feb 07 jari 130      */
2 26 Feb 07 jari 131     public Cluster(int [] indices, String source, String clusterLabel, String algorithmName, String clusterID, String clusterDescription, Integer index, Integer serialNumber, Color clusterColor, DefaultMutableTreeNode node, Experiment experiment) {
2 26 Feb 07 jari 132       this(indices, source, clusterLabel, algorithmName, clusterID, clusterDescription, index.intValue(), serialNumber.intValue(), clusterColor, null, experiment);
2 26 Feb 07 jari 133 //      TODO
2 26 Feb 07 jari 134       System.out.println("constructor 3");
2 26 Feb 07 jari 135     }    
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137    /** Creates new cluster object
2 26 Feb 07 jari 138     */
2 26 Feb 07 jari 139     public Cluster(int [] indices, String source, String clusterLabel, String algorithmName, String clusterID, String clusterDescription, int index, int serialNumber, Color clusterColor, DefaultMutableTreeNode node, Experiment experiment) {
2 26 Feb 07 jari 140         this.indices = indices;
2 26 Feb 07 jari 141         this.source = source;
2 26 Feb 07 jari 142         this.clusterLabel = clusterLabel;
2 26 Feb 07 jari 143         this.clusterID = clusterID;
2 26 Feb 07 jari 144         this.algorithmName = algorithmName;
2 26 Feb 07 jari 145         this.algorithmIndex = index;
2 26 Feb 07 jari 146         this.clusterColor = clusterColor;
2 26 Feb 07 jari 147         this.clusterDescription = clusterDescription;
2 26 Feb 07 jari 148         this.serialNumber = serialNumber;
2 26 Feb 07 jari 149         if(node != null){
2 26 Feb 07 jari 150           this.node = node;
2 26 Feb 07 jari 151           this.userObject = node.getUserObject();
2 26 Feb 07 jari 152         }
2 26 Feb 07 jari 153         this.experiment = experiment;
2 26 Feb 07 jari 154         this.exptID = experiment.getId();
2 26 Feb 07 jari 155         this.isShowColor = true;
2 26 Feb 07 jari 156         this.experimentIndices = getIndicesMappedToExperiment();
2 26 Feb 07 jari 157     }
2 26 Feb 07 jari 158     
2 26 Feb 07 jari 159     /** Returns cluster color
2 26 Feb 07 jari 160      */    
2 26 Feb 07 jari 161     public Color getClusterColor(){ 
2 26 Feb 07 jari 162         if(this.isShowColor)
2 26 Feb 07 jari 163             return this.clusterColor;
2 26 Feb 07 jari 164         else
2 26 Feb 07 jari 165             return null;
2 26 Feb 07 jari 166     }
2 26 Feb 07 jari 167     
2 26 Feb 07 jari 168     /** Sets boolean to show color
2 26 Feb 07 jari 169      */
2 26 Feb 07 jari 170     public void enableShowColor(boolean show) {
2 26 Feb 07 jari 171         this.isShowColor = show;
2 26 Feb 07 jari 172     }
2 26 Feb 07 jari 173     /** returns true if color is to be shown
2 26 Feb 07 jari 174      */
2 26 Feb 07 jari 175     public boolean showColor() {
2 26 Feb 07 jari 176         return this.isShowColor;
2 26 Feb 07 jari 177     }
2 26 Feb 07 jari 178     /** Returns cluster indices
2 26 Feb 07 jari 179      */    
2 26 Feb 07 jari 180     public int []  getIndices(){ return this.indices; }
2 26 Feb 07 jari 181     /** Returns the cluster indices to the Experiment object associated with the cluster.
2 26 Feb 07 jari 182      */
2 26 Feb 07 jari 183     public int [] getExperimentIndices(){ return this.experimentIndices; }
2 26 Feb 07 jari 184     /** Returns source type
2 26 Feb 07 jari 185      */    
2 26 Feb 07 jari 186     public String getSource(){ return this.source; }
2 26 Feb 07 jari 187     /** Get user defined cluser label
2 26 Feb 07 jari 188      */    
2 26 Feb 07 jari 189     public String getClusterLabel(){ return this.clusterLabel; }
2 26 Feb 07 jari 190     /** Returns cluster node name.
2 26 Feb 07 jari 191      */    
2 26 Feb 07 jari 192     public String getClusterID(){ return this.clusterID; }
2 26 Feb 07 jari 193     /** Returns algorithm node name
2 26 Feb 07 jari 194      */    
2 26 Feb 07 jari 195     public String getAlgorithmName(){ return this.algorithmName; }
2 26 Feb 07 jari 196     /** Returns cluster description/remarks
2 26 Feb 07 jari 197      */    
2 26 Feb 07 jari 198     public String getClusterDescription(){ return this.clusterDescription; }
2 26 Feb 07 jari 199     /** Returns result index
2 26 Feb 07 jari 200      */    
2 26 Feb 07 jari 201     public int getAlgorithmIndex(){ return this.algorithmIndex; }
2 26 Feb 07 jari 202     /** Returns cluster serial number
2 26 Feb 07 jari 203      */    
2 26 Feb 07 jari 204     public int getSerialNumber(){ return this.serialNumber; }
2 26 Feb 07 jari 205     /** Returns the population of the cluster
2 26 Feb 07 jari 206      */    
2 26 Feb 07 jari 207     public int getSize(){ return this.indices.length; }
2 26 Feb 07 jari 208     /** Returns the node of origin or null if N/A
2 26 Feb 07 jari 209      */    
2 26 Feb 07 jari 210     public DefaultMutableTreeNode getNode(){ return node; }
2 26 Feb 07 jari 211     /** Returns the cluster's experiment
2 26 Feb 07 jari 212      */
2 26 Feb 07 jari 213     public Experiment getExperiment(){ return experiment; }
2 26 Feb 07 jari 214     /** Returns the cluster's node objects userObject
2 26 Feb 07 jari 215      */
2 26 Feb 07 jari 216     public Object getUserObject(){ return userObject; }
2 26 Feb 07 jari 217     /** Sets cluster color
2 26 Feb 07 jari 218      */    
2 26 Feb 07 jari 219     public void setClusterColor(Color color){ this.clusterColor = color; }
2 26 Feb 07 jari 220     /** Sets cluster label
2 26 Feb 07 jari 221      * @param clusterLabel Cluster label
2 26 Feb 07 jari 222      */    
2 26 Feb 07 jari 223     public void setClusterLabel(String clusterLabel){ this.clusterLabel = clusterLabel; }
2 26 Feb 07 jari 224     /** Sets cluster description
2 26 Feb 07 jari 225      */    
2 26 Feb 07 jari 226     public void setClusterDescription(String clusterDescription){ this.clusterDescription = clusterDescription; }
2 26 Feb 07 jari 227     /** Sets node of origin or reference node.
2 26 Feb 07 jari 228      * @param myNode node
2 26 Feb 07 jari 229      */    
2 26 Feb 07 jari 230     public void setNode(DefaultMutableTreeNode myNode){ node = myNode; }
2 26 Feb 07 jari 231     /** Sets the Experiment for the cluster
2 26 Feb 07 jari 232      */
2 26 Feb 07 jari 233     public void setExperiment(Experiment experiment){ 
2 26 Feb 07 jari 234       this.experiment = experiment;
2 26 Feb 07 jari 235       this.exptID = experiment.getId();
2 26 Feb 07 jari 236       this.experimentIndices = getIndicesMappedToExperiment();
2 26 Feb 07 jari 237     }
2 26 Feb 07 jari 238
2 26 Feb 07 jari 239     //EH
2 26 Feb 07 jari 240     public int getExptID(){return exptID;}
2 26 Feb 07 jari 241     
2 26 Feb 07 jari 242     /** Returns true if supplied element index is a
2 26 Feb 07 jari 243      * member of the cluster
2 26 Feb 07 jari 244      * @param index Element index
2 26 Feb 07 jari 245      * @return Returns boolean indicating membership
2 26 Feb 07 jari 246      */    
2 26 Feb 07 jari 247     public boolean isMember(int index){
2 26 Feb 07 jari 248         for(int i = 0; i < this.indices.length; i++)
2 26 Feb 07 jari 249             if(index == indices[i])
2 26 Feb 07 jari 250                 return true;
2 26 Feb 07 jari 251         return false;
2 26 Feb 07 jari 252     }
2 26 Feb 07 jari 253     
2 26 Feb 07 jari 254     /** Removes an element index from cluster
2 26 Feb 07 jari 255      * membership.
2 26 Feb 07 jari 256      * @param memberIndex Index of member to remove.
2 26 Feb 07 jari 257      */    
2 26 Feb 07 jari 258     public boolean removeMember(int memberIndex){
2 26 Feb 07 jari 259
2 26 Feb 07 jari 260         if(!isMember(memberIndex))
2 26 Feb 07 jari 261             return false;
2 26 Feb 07 jari 262         
2 26 Feb 07 jari 263         int [] newIndices = new int[this.indices.length - 1];
2 26 Feb 07 jari 264         int cnt = 0;
2 26 Feb 07 jari 265         for(int i = 0; i < indices.length; i++){
2 26 Feb 07 jari 266             if(indices[i] != memberIndex){
2 26 Feb 07 jari 267                 newIndices[cnt] = indices[i];
2 26 Feb 07 jari 268                 cnt++;
2 26 Feb 07 jari 269             }
2 26 Feb 07 jari 270         }
2 26 Feb 07 jari 271         return true;
2 26 Feb 07 jari 272     }
2 26 Feb 07 jari 273     
2 26 Feb 07 jari 274     /** Returns a Hashset which contains the indices
2 26 Feb 07 jari 275      * of the cluster
2 26 Feb 07 jari 276      */    
2 26 Feb 07 jari 277     public HashSet getHashSet(){
2 26 Feb 07 jari 278         HashSet set = new HashSet(indices.length);
2 26 Feb 07 jari 279         for(int i = 0; i < indices.length; i++){
2 26 Feb 07 jari 280             set.add(new Integer(indices[i]));
2 26 Feb 07 jari 281         }
2 26 Feb 07 jari 282         return set;
2 26 Feb 07 jari 283     }  
2 26 Feb 07 jari 284     
2 26 Feb 07 jari 285     /** Returns true if indices are a match
2 26 Feb 07 jari 286      *
2 26 Feb 07 jari 287      */
2 26 Feb 07 jari 288     public boolean doIndicesMatch(int [] indices){
2 26 Feb 07 jari 289         if(indices.length != this.indices.length)
2 26 Feb 07 jari 290             return false;        
2 26 Feb 07 jari 291         HashSet clusterSet = getHashSet();
2 26 Feb 07 jari 292         HashSet testSet = makeHashSet(indices);
2 26 Feb 07 jari 293         return clusterSet.containsAll(testSet);
2 26 Feb 07 jari 294     }
2 26 Feb 07 jari 295     
2 26 Feb 07 jari 296     private HashSet makeHashSet(int [] indices){
2 26 Feb 07 jari 297         HashSet set = new HashSet(indices.length);
2 26 Feb 07 jari 298         for( int i = 0; i < indices.length; i++ ){
2 26 Feb 07 jari 299             set.add(new Integer(indices[i]));
2 26 Feb 07 jari 300         }
2 26 Feb 07 jari 301         return set;
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303     
2 26 Feb 07 jari 304     private int [] getIndicesMappedToExperiment(){
2 26 Feb 07 jari 305         int [] expIndices= new int[indices.length];
2 26 Feb 07 jari 306         int [] map = this.experiment.getRowMappingArrayCopy();
2 26 Feb 07 jari 307         int cnt = 0;
2 26 Feb 07 jari 308       /*  for(int i = 0; i < map.length; i++){
2 26 Feb 07 jari 309             if(map[i] == indices[cnt]){
2 26 Feb 07 jari 310                 expIndices[cnt] = i;
2 26 Feb 07 jari 311                 cnt++;
2 26 Feb 07 jari 312             }
2 26 Feb 07 jari 313         }
2 26 Feb 07 jari 314        **/
2 26 Feb 07 jari 315         int currIndex;
2 26 Feb 07 jari 316         for(int i = 0; i < expIndices.length; i++){
2 26 Feb 07 jari 317             currIndex = indices[i];
2 26 Feb 07 jari 318             
2 26 Feb 07 jari 319             for(int j = 0; j < map.length; j++){
2 26 Feb 07 jari 320                 if(map[j] == currIndex){
2 26 Feb 07 jari 321                     expIndices[i] = j;
2 26 Feb 07 jari 322                 }                    
2 26 Feb 07 jari 323             }
2 26 Feb 07 jari 324         }
2 26 Feb 07 jari 325         return expIndices;
2 26 Feb 07 jari 326     }
2 26 Feb 07 jari 327     private static class ClusterPersistenceDelegate extends PersistenceDelegate {
2 26 Feb 07 jari 328     
2 26 Feb 07 jari 329     protected Expression instantiate(Object o, Encoder encoder) {
2 26 Feb 07 jari 330       Cluster oldInstance = (Cluster)o;
2 26 Feb 07 jari 331       return new Expression(oldInstance, oldInstance.getClass(), "new", 
2 26 Feb 07 jari 332         new Object[]{oldInstance.indices, oldInstance.source, oldInstance.clusterLabel,
2 26 Feb 07 jari 333         oldInstance.algorithmName, oldInstance.clusterID, oldInstance.clusterDescription, 
2 26 Feb 07 jari 334         new Integer(oldInstance.algorithmIndex), new Integer(oldInstance.serialNumber), oldInstance.clusterColor, 
2 26 Feb 07 jari 335         oldInstance.node, oldInstance.experiment
2 26 Feb 07 jari 336         });
2 26 Feb 07 jari 337     }        
2 26 Feb 07 jari 338     public void initialize(Class type, Object oldInstance, Object newInstance, Encoder encoder) {
2 26 Feb 07 jari 339       return;
2 26 Feb 07 jari 340     }
2 26 Feb 07 jari 341     
2 26 Feb 07 jari 342         }            
2 26 Feb 07 jari 343   /**
2 26 Feb 07 jari 344    * @return
2 26 Feb 07 jari 345    */
2 26 Feb 07 jari 346   public static PersistenceDelegate getPersistenceDelegate() {
2 26 Feb 07 jari 347     return new ClusterPersistenceDelegate();
2 26 Feb 07 jari 348     }
2 26 Feb 07 jari 349 }