mev-4.0.01/source/org/tigr/microarray/mev/cluster/algorithm/impl/ease/EaseElementList.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: EaseElementList.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
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 /*
2 26 Feb 07 jari 13  * EaseElementList.java
2 26 Feb 07 jari 14  *
2 26 Feb 07 jari 15  * Created on August 28, 2003, 5:00 PM
2 26 Feb 07 jari 16  */
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 package org.tigr.microarray.mev.cluster.algorithm.impl.ease;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import java.io.BufferedReader;
2 26 Feb 07 jari 21 import java.io.FileNotFoundException;
2 26 Feb 07 jari 22 import java.io.FileReader;
2 26 Feb 07 jari 23 import java.io.IOException;
2 26 Feb 07 jari 24 import java.util.Hashtable;
2 26 Feb 07 jari 25 import java.util.Vector;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27 /** The EaseElementList class is used to hold and manage <CODE>EaseDataElements</CODE>
2 26 Feb 07 jari 28  * and to assist in mapping primary annotation indices (from MeV's <CODE>IData</CODE> data structure
2 26 Feb 07 jari 29  * to annotation keys used in ease files to map to biological themes.
2 26 Feb 07 jari 30  * @author braisted
2 26 Feb 07 jari 31  */
2 26 Feb 07 jari 32 public class EaseElementList extends Vector{
2 26 Feb 07 jari 33     
2 26 Feb 07 jari 34     /** Creates a new instance of EaseElementList */
2 26 Feb 07 jari 35     public EaseElementList() {
2 26 Feb 07 jari 36         super();
2 26 Feb 07 jari 37     }
2 26 Feb 07 jari 38     
2 26 Feb 07 jari 39     /** Constructs an ease element list with the passed indices
2 26 Feb 07 jari 40      * and associated array of keys.  The indices map the element
2 26 Feb 07 jari 41      * to a particular genes in the <CODE>Experiment</CODE> data structure.
2 26 Feb 07 jari 42      * @param indices Gene indices (to identify a gene within an data set.
2 26 Feb 07 jari 43      * @param keys Key values for the EaseDataElement objects. */    
2 26 Feb 07 jari 44     public EaseElementList(int [] indices, String [] keys){
2 26 Feb 07 jari 45         super(Math.min(indices.length, keys.length));
2 26 Feb 07 jari 46         int numberOfElements = Math.min(indices.length, keys.length);
2 26 Feb 07 jari 47         for(int i = 0; i < numberOfElements; i++){
2 26 Feb 07 jari 48             addElement(new EaseDataElement(indices[i], keys[i]));
2 26 Feb 07 jari 49         }
2 26 Feb 07 jari 50     }
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     /** Creates a list using the provided keys.
2 26 Feb 07 jari 53      * Note that the elements will be sequentially numbered.
2 26 Feb 07 jari 54      * @param keys Key values
2 26 Feb 07 jari 55      */    
2 26 Feb 07 jari 56     public EaseElementList(String [] keys){
2 26 Feb 07 jari 57         super(keys.length);
2 26 Feb 07 jari 58         int numberOfElements = keys.length;
2 26 Feb 07 jari 59         for(int i = 0; i < numberOfElements; i++){
2 26 Feb 07 jari 60             addElement(new EaseDataElement(i, keys[i]));
2 26 Feb 07 jari 61         }
2 26 Feb 07 jari 62     }
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     /** Returns the indicated data element.
2 26 Feb 07 jari 65      * @param index Index to retrieve
2 26 Feb 07 jari 66      * @return
2 26 Feb 07 jari 67      */    
2 26 Feb 07 jari 68     public EaseDataElement dataElementAt(int index){
2 26 Feb 07 jari 69         return (EaseDataElement)super.elementAt(index);
2 26 Feb 07 jari 70     }
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     /** Inserts a new key and single value into the list.
2 26 Feb 07 jari 73      * @param key
2 26 Feb 07 jari 74      * @param value  */    
2 26 Feb 07 jari 75     public void setValue(String key, String value){
2 26 Feb 07 jari 76         int size = size();
2 26 Feb 07 jari 77         for(int i = 0; i < size; i++){
2 26 Feb 07 jari 78             dataElementAt(i).ifEqualsAdd(key,value);
2 26 Feb 07 jari 79         }
2 26 Feb 07 jari 80     }
2 26 Feb 07 jari 81     
2 26 Feb 07 jari 82     /** Returns all values within the list.
2 26 Feb 07 jari 83      * (note that each element could have several values)
2 26 Feb 07 jari 84      */    
2 26 Feb 07 jari 85     public Vector getValueList(){
2 26 Feb 07 jari 86         Vector list = new Vector();
2 26 Feb 07 jari 87         int size = size();
2 26 Feb 07 jari 88         EaseDataElement element;
2 26 Feb 07 jari 89         Vector values;
2 26 Feb 07 jari 90         
2 26 Feb 07 jari 91         for(int i = 0; i < size; i++){
2 26 Feb 07 jari 92             values = dataElementAt(i).getEaseKeys();
2 26 Feb 07 jari 93             //System.out.println("values size = "+values.size());
2 26 Feb 07 jari 94             for(int j = 0; j < values.size(); j++){
2 26 Feb 07 jari 95                // if(!list.contains((String)values.elementAt(j)))
2 26 Feb 07 jari 96                     list.add((String)values.elementAt(j));
2 26 Feb 07 jari 97             }
2 26 Feb 07 jari 98         }        
2 26 Feb 07 jari 99         return list;
2 26 Feb 07 jari 100     }
2 26 Feb 07 jari 101     
2 26 Feb 07 jari 102     /** Returns a list of the values contained in the list in which each value is represented once.
2 26 Feb 07 jari 103      */    
2 26 Feb 07 jari 104     public Vector getUniqueValueList(){
2 26 Feb 07 jari 105         Vector list = new Vector();
2 26 Feb 07 jari 106         int size = size();
2 26 Feb 07 jari 107         EaseDataElement element;
2 26 Feb 07 jari 108         Vector values;
2 26 Feb 07 jari 109         
2 26 Feb 07 jari 110         for(int i = 0; i < size; i++){
2 26 Feb 07 jari 111             values = dataElementAt(i).getEaseKeys();
2 26 Feb 07 jari 112             for(int j = 0; j < values.size(); j++){
2 26 Feb 07 jari 113                 if(!list.contains((String)values.elementAt(j))){
2 26 Feb 07 jari 114                     list.addElement((String)values.elementAt(j));
2 26 Feb 07 jari 115                 }
2 26 Feb 07 jari 116             }
2 26 Feb 07 jari 117         }        
2 26 Feb 07 jari 118         return list;
2 26 Feb 07 jari 119     }
2 26 Feb 07 jari 120     
2 26 Feb 07 jari 121     /** Povided a list of values this method returns all associated element indices.
2 26 Feb 07 jari 122      * @param valuesList List of values on which to search.
2 26 Feb 07 jari 123      * @return
2 26 Feb 07 jari 124      */    
2 26 Feb 07 jari 125     public int [] getIndices(String [] valuesList){
2 26 Feb 07 jari 126         Vector indices = new Vector();
2 26 Feb 07 jari 127         int index;
2 26 Feb 07 jari 128         String value;
2 26 Feb 07 jari 129         Integer intObj;
2 26 Feb 07 jari 130         int size = size();
2 26 Feb 07 jari 131         for(int i = 0; i < valuesList.length; i++){
2 26 Feb 07 jari 132             value = valuesList[i];
2 26 Feb 07 jari 133             for(int j = 0; j < size; j++){
2 26 Feb 07 jari 134                 index = dataElementAt(j).ifContainsValueGetIndex(value);
2 26 Feb 07 jari 135                 if(index > -1){
2 26 Feb 07 jari 136                     intObj = new Integer(index);
2 26 Feb 07 jari 137                     if(!indices.contains(intObj))
2 26 Feb 07 jari 138                         indices.addElement(intObj);
2 26 Feb 07 jari 139                 }
2 26 Feb 07 jari 140             }
2 26 Feb 07 jari 141         }
2 26 Feb 07 jari 142         size = indices.size();
2 26 Feb 07 jari 143         int [] list = new int[size];
2 26 Feb 07 jari 144         for(int i = 0 ; i < size; i++){
2 26 Feb 07 jari 145             list[i] = ((Integer)indices.elementAt(i)).intValue();
2 26 Feb 07 jari 146         }
2 26 Feb 07 jari 147         return list;
2 26 Feb 07 jari 148     }
2 26 Feb 07 jari 149     
2 26 Feb 07 jari 150     /** Loads keys and values from file.
2 26 Feb 07 jari 151      * @param fileName File containing values.
2 26 Feb 07 jari 152      * @throws FileNotFoundException
2 26 Feb 07 jari 153      * @throws IOException
2 26 Feb 07 jari 154      */    
2 26 Feb 07 jari 155     public void loadValues(String fileName) throws FileNotFoundException, IOException {
2 26 Feb 07 jari 156         BufferedReader in = new BufferedReader(new FileReader(fileName));
2 26 Feb 07 jari 157         String line = "", key = "", value = "";
2 26 Feb 07 jari 158         int delIndex = 0;
2 26 Feb 07 jari 159         
2 26 Feb 07 jari 160         int cnt = 0;
2 26 Feb 07 jari 161         
2 26 Feb 07 jari 162         //First load the file into a hash
2 26 Feb 07 jari 163         Hashtable ht = new Hashtable();
2 26 Feb 07 jari 164         while( (line = in.readLine()) != null ){        
2 26 Feb 07 jari 165             delIndex = line.indexOf('\t');
2 26 Feb 07 jari 166             if(delIndex < 0)
2 26 Feb 07 jari 167                 continue;
2 26 Feb 07 jari 168             value = line.substring(0, delIndex).trim();             
2 26 Feb 07 jari 169             key = line.substring(delIndex+1).trim();
2 26 Feb 07 jari 170             ht.put(key,value);
2 26 Feb 07 jari 171         }
2 26 Feb 07 jari 172         
2 26 Feb 07 jari 173         //Now get Values
2 26 Feb 07 jari 174         int size = this.size();
2 26 Feb 07 jari 175         EaseDataElement ede;
2 26 Feb 07 jari 176         for(int i = 0; i < size; i++){
2 26 Feb 07 jari 177             ede = this.dataElementAt(i);
2 26 Feb 07 jari 178             value = ((String)ht.get(ede.getMevKey()));
2 26 Feb 07 jari 179             if(value != null)
2 26 Feb 07 jari 180                 ede.addValue(value);
2 26 Feb 07 jari 181         }
2 26 Feb 07 jari 182         in.close();
2 26 Feb 07 jari 183     }
2 26 Feb 07 jari 184     
2 26 Feb 07 jari 185     /** Sets default values in which element values are set
2 26 Feb 07 jari 186      * equal to the entered keys.  This handles the case where
2 26 Feb 07 jari 187      * indices need not map through an intermediate annotation step.
2 26 Feb 07 jari 188      */    
2 26 Feb 07 jari 189     public void setDefaultValues() {
2 26 Feb 07 jari 190         int size = size();
2 26 Feb 07 jari 191         EaseDataElement ede;
2 26 Feb 07 jari 192         for(int i = 0; i < size; i++){
2 26 Feb 07 jari 193             ede = dataElementAt(i);
2 26 Feb 07 jari 194             ede.addValue(ede.getMevKey());
2 26 Feb 07 jari 195         }
2 26 Feb 07 jari 196     }
2 26 Feb 07 jari 197 }