mev-4.0.01/source/org/tigr/microarray/mev/cgh/CGHDataModel/CGHBrowserModelAdaptor.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * CGHBrowserModelAdaptor.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on July 4, 2003, 8:13 AM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cgh.CGHDataModel;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 //import org.tigr.microarray.mev.cgh.CGHDataObj.ICGHFeatureData;
2 26 Feb 07 jari 10 import java.util.EventListener;
2 26 Feb 07 jari 11
2 26 Feb 07 jari 12 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 13 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 14 import javax.swing.event.EventListenerList;
2 26 Feb 07 jari 15
2 26 Feb 07 jari 16 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 17 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 18
2 26 Feb 07 jari 19 /**
2 26 Feb 07 jari 20  *
2 26 Feb 07 jari 21  * @author  Adam Margolin
2 26 Feb 07 jari 22  * @author Raktim Sinha
2 26 Feb 07 jari 23  */
2 26 Feb 07 jari 24
2 26 Feb 07 jari 25 public class CGHBrowserModelAdaptor {
2 26 Feb 07 jari 26     public static final int ALL_EXPERIMENTS = -1;
2 26 Feb 07 jari 27     public static final int ALL_CHROMOSOMES = -1;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29     public static final int CLONE_VALUES_P_SCORE = 0;
2 26 Feb 07 jari 30     public static final int CLONE_VALUES_DYE_SWAP = 1;
2 26 Feb 07 jari 31     public static final int CLONE_VALUES_LOG_AVERAGE_INVERTED= 2;
2 26 Feb 07 jari 32     public static final int CLONE_VALUES_LOG_DYE_SWAP = 3;
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34     public static final int CLONE_VALUES_RATIOS= 4;
2 26 Feb 07 jari 35     public static final int CLONE_VALUES_LOG_RATIOS = 5;
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37     int cloneValueType;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39     EventListenerList listenerList = new EventListenerList();
2 26 Feb 07 jari 40
2 26 Feb 07 jari 41     int[] mapCloneToIndex;
2 26 Feb 07 jari 42     int[] mapIndexToClone;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     int experimentIndices[];
2 26 Feb 07 jari 45     int chromosomeIndex;
2 26 Feb 07 jari 46     int numClones;
2 26 Feb 07 jari 47     IData data;
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49     /** Creates a new instance of CGHBrowserModelAdaptor */
2 26 Feb 07 jari 50     public CGHBrowserModelAdaptor(IData data, int experimentIndex, int chromosomeIndex, int cloneValueType) {
2 26 Feb 07 jari 51         this.data = data;
2 26 Feb 07 jari 52         setExperimentIndex(experimentIndex);
2 26 Feb 07 jari 53         setChromosomeIndex(chromosomeIndex);
2 26 Feb 07 jari 54         this.cloneValueType = cloneValueType;
2 26 Feb 07 jari 55         setNumClones(data.getNumDataPointsInChrom(chromosomeIndex));
2 26 Feb 07 jari 56     }
2 26 Feb 07 jari 57
2 26 Feb 07 jari 58     /**
2 26 Feb 07 jari 59      * Generates a mapping between the clone indexes as stored in the data, and
2 26 Feb 07 jari 60      * their positions on the viewable chart or table
2 26 Feb 07 jari 61      */
2 26 Feb 07 jari 62     public void generateIndices(){
2 26 Feb 07 jari 63
2 26 Feb 07 jari 64         mapCloneToIndex = new int[numClones];
2 26 Feb 07 jari 65         int[] mapTmpIndexToClone = new int[numClones];
2 26 Feb 07 jari 66
2 26 Feb 07 jari 67         ISlideData[] sampleData = new ISlideData[experimentIndices.length];
2 26 Feb 07 jari 68         for(int i = 0; i < experimentIndices.length; i++){
2 26 Feb 07 jari 69             sampleData[i] = (ISlideData)data.getFeaturesList().get(experimentIndices[i]);
2 26 Feb 07 jari 70         }
2 26 Feb 07 jari 71
2 26 Feb 07 jari 72         int chartIndex = 0;
2 26 Feb 07 jari 73
2 26 Feb 07 jari 74         for(int i = 0; i < numClones; i++){
2 26 Feb 07 jari 75             boolean isMissing = true;
2 26 Feb 07 jari 76             for(int sampleIndex = 0; sampleIndex < sampleData.length; sampleIndex++){
2 26 Feb 07 jari 77                 if(! sampleData[sampleIndex].isMissingData(getDataCloneIndex(i))){
2 26 Feb 07 jari 78                     isMissing = false;
2 26 Feb 07 jari 79                     break;
2 26 Feb 07 jari 80                 }
2 26 Feb 07 jari 81             }
2 26 Feb 07 jari 82
2 26 Feb 07 jari 83             if(isMissing){
2 26 Feb 07 jari 84                 mapCloneToIndex[i] = -1;
2 26 Feb 07 jari 85             }else{
2 26 Feb 07 jari 86                 mapCloneToIndex[i] = chartIndex;
2 26 Feb 07 jari 87                 mapTmpIndexToClone[chartIndex] = i;
2 26 Feb 07 jari 88                 chartIndex++;
2 26 Feb 07 jari 89             }
2 26 Feb 07 jari 90         }
2 26 Feb 07 jari 91
2 26 Feb 07 jari 92         mapIndexToClone = new int[chartIndex];
2 26 Feb 07 jari 93         for(int i = 0; i < mapIndexToClone.length; i++){
2 26 Feb 07 jari 94             mapIndexToClone[i] = mapTmpIndexToClone[i];
2 26 Feb 07 jari 95         }
2 26 Feb 07 jari 96     }
2 26 Feb 07 jari 97
2 26 Feb 07 jari 98     public int getSeriesSize(){
2 26 Feb 07 jari 99         return mapIndexToClone.length;
2 26 Feb 07 jari 100     }
2 26 Feb 07 jari 101
2 26 Feb 07 jari 102     public void addChangeListener(ChangeListener listener){
2 26 Feb 07 jari 103         listenerList.add(ChangeListener.class, listener);
2 26 Feb 07 jari 104     }
2 26 Feb 07 jari 105
2 26 Feb 07 jari 106     /** This method is just used to determine whether to get the relative or absolute
2 26 Feb 07 jari 107      * clone index from the data
2 26 Feb 07 jari 108      */
2 26 Feb 07 jari 109     public int getDataCloneIndex(int index){
2 26 Feb 07 jari 110         if(chromosomeIndex == ALL_CHROMOSOMES){
2 26 Feb 07 jari 111             return index;
2 26 Feb 07 jari 112         }else{
2 26 Feb 07 jari 113             return data.getCloneIndex(index, chromosomeIndex);
2 26 Feb 07 jari 114         }
2 26 Feb 07 jari 115     }
2 26 Feb 07 jari 116
2 26 Feb 07 jari 117     /* Returns the index of a clone as stored in the data, given its relative chart index
2 26 Feb 07 jari 118      * @param coordinateIndex the index of the clone on the chart
2 26 Feb 07 jari 119      */
2 26 Feb 07 jari 120     public int getCloneIndex(int coordinateIndex){
2 26 Feb 07 jari 121         return getDataCloneIndex(mapIndexToClone[coordinateIndex]);
2 26 Feb 07 jari 122     }
2 26 Feb 07 jari 123
2 26 Feb 07 jari 124     /* Returns the index on the chart of a clone
2 26 Feb 07 jari 125      * @param cloneIndex the index of the clone as stored in the data
2 26 Feb 07 jari 126      */
2 26 Feb 07 jari 127     public int getIndexOf(int cloneIndex){
2 26 Feb 07 jari 128         return mapCloneToIndex[cloneIndex];
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130
2 26 Feb 07 jari 131     /** Getter for property mapCloneToIndex.
2 26 Feb 07 jari 132      * @return Value of property mapCloneToIndex.
2 26 Feb 07 jari 133      */
2 26 Feb 07 jari 134     public int[] getMapCloneToIndex() {
2 26 Feb 07 jari 135         return this.mapCloneToIndex;
2 26 Feb 07 jari 136     }
2 26 Feb 07 jari 137
2 26 Feb 07 jari 138     /** Setter for property mapCloneToIndex.
2 26 Feb 07 jari 139      * @param mapCloneToIndex New value of property mapCloneToIndex.
2 26 Feb 07 jari 140      */
2 26 Feb 07 jari 141     public void setMapCloneToIndex(int[] mapCloneToIndex) {
2 26 Feb 07 jari 142         this.mapCloneToIndex = mapCloneToIndex;
2 26 Feb 07 jari 143     }
2 26 Feb 07 jari 144
2 26 Feb 07 jari 145     /** Getter for property mapIndexToClone.
2 26 Feb 07 jari 146      * @return Value of property mapIndexToClone.
2 26 Feb 07 jari 147      */
2 26 Feb 07 jari 148     public int[] getMapIndexToClone() {
2 26 Feb 07 jari 149         return this.mapIndexToClone;
2 26 Feb 07 jari 150     }
2 26 Feb 07 jari 151
2 26 Feb 07 jari 152     /** Setter for property mapIndexToClone.
2 26 Feb 07 jari 153      * @param mapIndexToClone New value of property mapIndexToClone.
2 26 Feb 07 jari 154      */
2 26 Feb 07 jari 155     public void setMapIndexToClone(int[] mapIndexToClone) {
2 26 Feb 07 jari 156         this.mapIndexToClone = mapIndexToClone;
2 26 Feb 07 jari 157     }
2 26 Feb 07 jari 158
2 26 Feb 07 jari 159     /** Getter for property experimentIndices.
2 26 Feb 07 jari 160      * @return Value of property experimentIndices.
2 26 Feb 07 jari 161      */
2 26 Feb 07 jari 162     public int[] getExperimentIndices() {
2 26 Feb 07 jari 163         return this.experimentIndices;
2 26 Feb 07 jari 164     }
2 26 Feb 07 jari 165
2 26 Feb 07 jari 166     /** Setter for property experimentIndices.
2 26 Feb 07 jari 167      * @param experimentIndices New value of property experimentIndices.
2 26 Feb 07 jari 168      */
2 26 Feb 07 jari 169     public void setExperimentIndices(int[] experimentIndices) {
2 26 Feb 07 jari 170         this.experimentIndices = experimentIndices;
2 26 Feb 07 jari 171     }
2 26 Feb 07 jari 172
2 26 Feb 07 jari 173     /** Getter for property chromosomeIndex.
2 26 Feb 07 jari 174      * @return Value of property chromosomeIndex.
2 26 Feb 07 jari 175      */
2 26 Feb 07 jari 176     public int getChromosomeIndex() {
2 26 Feb 07 jari 177         return chromosomeIndex;
2 26 Feb 07 jari 178     }
2 26 Feb 07 jari 179
2 26 Feb 07 jari 180     public void setChromosomeIndex(int chromosomeIndex){
2 26 Feb 07 jari 181         this.chromosomeIndex = chromosomeIndex;
2 26 Feb 07 jari 182         if(chromosomeIndex == ALL_CHROMOSOMES){
2 26 Feb 07 jari 183             this.numClones = data.getFeaturesSize();
2 26 Feb 07 jari 184         }else{
2 26 Feb 07 jari 185             this.numClones = data.getNumDataPointsInChrom(chromosomeIndex);
2 26 Feb 07 jari 186         }
2 26 Feb 07 jari 187
2 26 Feb 07 jari 188         generateIndices();
2 26 Feb 07 jari 189         fireDataChanged();
2 26 Feb 07 jari 190     }
2 26 Feb 07 jari 191
2 26 Feb 07 jari 192     /** Getter for property numClones.
2 26 Feb 07 jari 193      * @return Value of property numClones.
2 26 Feb 07 jari 194      */
2 26 Feb 07 jari 195     public int getNumClones() {
2 26 Feb 07 jari 196         return numClones;
2 26 Feb 07 jari 197     }
2 26 Feb 07 jari 198
2 26 Feb 07 jari 199     /** Setter for property numClones.
2 26 Feb 07 jari 200      * @param numClones New value of property numClones.
2 26 Feb 07 jari 201      */
2 26 Feb 07 jari 202     public void setNumClones(int numClones) {
2 26 Feb 07 jari 203         this.numClones = numClones;
2 26 Feb 07 jari 204     }
2 26 Feb 07 jari 205
2 26 Feb 07 jari 206     /** Getter for property data.
2 26 Feb 07 jari 207      * @return Value of property data.
2 26 Feb 07 jari 208      */
2 26 Feb 07 jari 209     public IData getData() {
2 26 Feb 07 jari 210         return data;
2 26 Feb 07 jari 211     }
2 26 Feb 07 jari 212
2 26 Feb 07 jari 213     /** Setter for property data.
2 26 Feb 07 jari 214      * @param data New value of property data.
2 26 Feb 07 jari 215      */
2 26 Feb 07 jari 216     public void setData(IData data) {
2 26 Feb 07 jari 217         this.data = data;
2 26 Feb 07 jari 218     }
2 26 Feb 07 jari 219
2 26 Feb 07 jari 220     public void setExperimentIndex(int experimentIndex){
2 26 Feb 07 jari 221       //Raktim
2 26 Feb 07 jari 222       System.out.println("CGHBrowserModelAdaptor.setExperimentIndex experimentIndex: " + experimentIndex);
2 26 Feb 07 jari 223         if(experimentIndex == ALL_EXPERIMENTS){
2 26 Feb 07 jari 224             this.experimentIndices = new int[data.getFeaturesCount()];
2 26 Feb 07 jari 225             for(int i = 0; i < experimentIndices.length; i++){
2 26 Feb 07 jari 226                 experimentIndices[i] = i;
2 26 Feb 07 jari 227             }
2 26 Feb 07 jari 228         }else{
2 26 Feb 07 jari 229             this.experimentIndices = new int[1];
2 26 Feb 07 jari 230             this.experimentIndices[0] = experimentIndex;
2 26 Feb 07 jari 231         }
2 26 Feb 07 jari 232
2 26 Feb 07 jari 233         generateIndices();
2 26 Feb 07 jari 234         fireDataChanged();
2 26 Feb 07 jari 235     }
2 26 Feb 07 jari 236
2 26 Feb 07 jari 237
2 26 Feb 07 jari 238     public void fireDataChanged(){
2 26 Feb 07 jari 239         EventListener[] listeners = listenerList.getListeners(ChangeListener.class);
2 26 Feb 07 jari 240         for(int i = 0; i < listeners.length; i++){
2 26 Feb 07 jari 241             ((ChangeListener)listeners[i]).stateChanged(new ChangeEvent(new Object()));
2 26 Feb 07 jari 242         }
2 26 Feb 07 jari 243     }
2 26 Feb 07 jari 244
2 26 Feb 07 jari 245     /** Getter for property cloneValueType.
2 26 Feb 07 jari 246      * @return Value of property cloneValueType.
2 26 Feb 07 jari 247      */
2 26 Feb 07 jari 248     public int getCloneValueType() {
2 26 Feb 07 jari 249         return cloneValueType;
2 26 Feb 07 jari 250     }
2 26 Feb 07 jari 251
2 26 Feb 07 jari 252     /** Setter for property cloneValueType.
2 26 Feb 07 jari 253      * @param cloneValueType New value of property cloneValueType.
2 26 Feb 07 jari 254      */
2 26 Feb 07 jari 255     public void setCloneValueType(int cloneValueType) {
2 26 Feb 07 jari 256         this.cloneValueType = cloneValueType;
2 26 Feb 07 jari 257         fireDataChanged();
2 26 Feb 07 jari 258     }
2 26 Feb 07 jari 259
2 26 Feb 07 jari 260 }