mev-4.0.01/source/org/tigr/microarray/mev/cluster/algorithm/impl/NodeSupports.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: NodeSupports.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2006/04/28 13:52:49 $
2 26 Feb 07 jari 9  * $Author: braistedj $
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.Collection;
2 26 Feb 07 jari 15 import java.util.HashSet;
2 26 Feb 07 jari 16 import java.util.Iterator;
2 26 Feb 07 jari 17 import java.util.Set;
2 26 Feb 07 jari 18 import java.util.Vector;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.cluster.algorithm.AbortException;
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.cluster.algorithm.AbstractAlgorithm;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmEvent;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters;
2 26 Feb 07 jari 27 import org.tigr.microarray.util.BootstrappedMatrixByExps;
2 26 Feb 07 jari 28 import org.tigr.microarray.util.BootstrappedMatrixByGenes;
2 26 Feb 07 jari 29 import org.tigr.microarray.util.JacknifedMatrixByExps;
2 26 Feb 07 jari 30 import org.tigr.microarray.util.JacknifedMatrixByGenes;
2 26 Feb 07 jari 31 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34 public class NodeSupports extends AbstractAlgorithm {
2 26 Feb 07 jari 35     
2 26 Feb 07 jari 36     public final static int NONE = 0;
2 26 Feb 07 jari 37     public final static int BOOT_EXPTS = 1;
2 26 Feb 07 jari 38     public final static int BOOT_GENES = 2;
2 26 Feb 07 jari 39     public final static int JACK_EXPTS = 3;
2 26 Feb 07 jari 40     public final static int JACK_GENES = 4;
2 26 Feb 07 jari 41     
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     private boolean stop = false;
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     public void abort() {
2 26 Feb 07 jari 46   stop = true;
2 26 Feb 07 jari 47     }
2 26 Feb 07 jari 48     
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50     public AlgorithmData execute(AlgorithmData data) throws AlgorithmException {
2 26 Feb 07 jari 51   AlgorithmParameters map = data.getParams();
2 26 Feb 07 jari 52                            
2 26 Feb 07 jari 53   int function = map.getInt("distance-function", EUCLIDEAN); 
2 26 Feb 07 jari 54   float factor   = map.getFloat("distance-factor", 1.0f);
2 26 Feb 07 jari 55   boolean absolute = map.getBoolean("distance-absolute", false);
2 26 Feb 07 jari 56   boolean drawGeneTree = map.getBoolean("drawGeneTree", true);
2 26 Feb 07 jari 57   boolean drawExptTree = map.getBoolean("drawExptTree", true);
2 26 Feb 07 jari 58     /*
2 26 Feb 07 jari 59     System.out.println("distance-function: " + function);
2 26 Feb 07 jari 60     System.out.println("factor: " + factor);
2 26 Feb 07 jari 61     System.out.println("absolute: " + absolute);
2 26 Feb 07 jari 62     System.out.println("drawGeneTree: " + drawGeneTree);
2 26 Feb 07 jari 63     System.out.println("drawExptTree: " + drawExptTree);
2 26 Feb 07 jari 64      */
2 26 Feb 07 jari 65   
2 26 Feb 07 jari 66   int method_linkage = map.getInt("method-linkage", 0);
2 26 Feb 07 jari 67   int geneTreeAnalysisOption = map.getInt("geneTreeAnalysisOption", 0);; //5 options: no resampling, bootstrap or jackknife exps or genes
2 26 Feb 07 jari 68   int exptTreeAnalysisOption = map.getInt("exptTreeAnalysisOption", 0);; //5 options: no resampling, bootstrap or jackknife exps or genes
2 26 Feb 07 jari 69     /*
2 26 Feb 07 jari 70     System.out.println("method-linkage: " + method_linkage);
2 26 Feb 07 jari 71     System.out.println("geneTreeAnalysisOption: " + geneTreeAnalysisOption);
2 26 Feb 07 jari 72     System.out.println("exptTreeAnalysisOption: " + exptTreeAnalysisOption);
2 26 Feb 07 jari 73      */
2 26 Feb 07 jari 74   int geneTreeIterations;
2 26 Feb 07 jari 75   int exptTreeIterations;
2 26 Feb 07 jari 76   
2 26 Feb 07 jari 77   if (geneTreeAnalysisOption == 0) {
2 26 Feb 07 jari 78       geneTreeIterations = 0;
2 26 Feb 07 jari 79   } else {
2 26 Feb 07 jari 80       geneTreeIterations = map.getInt("geneTreeIterations", 0);
2 26 Feb 07 jari 81   }
2 26 Feb 07 jari 82   
2 26 Feb 07 jari 83   if (exptTreeAnalysisOption == 0) {
2 26 Feb 07 jari 84       exptTreeIterations = 0;
2 26 Feb 07 jari 85   } else {
2 26 Feb 07 jari 86       exptTreeIterations = map.getInt("exptTreeIterations", 0);
2 26 Feb 07 jari 87   }
2 26 Feb 07 jari 88   
2 26 Feb 07 jari 89   //System.out.println("geneTreeIterations: " + geneTreeIterations);
2 26 Feb 07 jari 90   //System.out.println("exptTreeIterations: " + exptTreeIterations);
2 26 Feb 07 jari 91   
2 26 Feb 07 jari 92   FloatMatrix expMatrix = data.getMatrix("experiment");
2 26 Feb 07 jari 93   
2 26 Feb 07 jari 94   printFloatMatrix(expMatrix);
2 26 Feb 07 jari 95   
2 26 Feb 07 jari 96   int number_of_genes   = expMatrix.getRowDimension();
2 26 Feb 07 jari 97   int number_of_samples = expMatrix.getColumnDimension();
2 26 Feb 07 jari 98
2 26 Feb 07 jari 99   Algorithm sub_algo = new HCL();
2 26 Feb 07 jari 100   AlgorithmData sub_algo_data = new AlgorithmData();
2 26 Feb 07 jari 101   
2 26 Feb 07 jari 102   sub_algo_data.addMatrix("experiment", expMatrix);
2 26 Feb 07 jari 103   sub_algo_data.addParam("distance-factor", String.valueOf(factor));
2 26 Feb 07 jari 104   sub_algo_data.addParam("distance-absolute", String.valueOf(absolute));
2 26 Feb 07 jari 105   //HCL expects hcl-distance-function rather than distance-function tag
2 26 Feb 07 jari 106   sub_algo_data.addParam("hcl-distance-function", String.valueOf(function));
2 26 Feb 07 jari 107   
2 26 Feb 07 jari 108   sub_algo_data.addParam("method-linkage", String.valueOf(method_linkage));
2 26 Feb 07 jari 109   
2 26 Feb 07 jari 110   int iterations = (drawGeneTree) ? geneTreeIterations : exptTreeIterations;
2 26 Feb 07 jari 111   
2 26 Feb 07 jari 112   //System.out.println("iterations: " + iterations);
2 26 Feb 07 jari 113   
2 26 Feb 07 jari 114   AlgorithmEvent event = new AlgorithmEvent(this, AlgorithmEvent.SET_UNITS, iterations);
2 26 Feb 07 jari 115   fireValueChanged(event);
2 26 Feb 07 jari 116   event.setId(AlgorithmEvent.PROGRESS_VALUE);
2 26 Feb 07 jari 117   
2 26 Feb 07 jari 118   AlgorithmData sub_algo_result;
2 26 Feb 07 jari 119   int[] child1Arr = null;
2 26 Feb 07 jari 120   int[] child2Arr = null;
2 26 Feb 07 jari 121   int[] nodeOrder = null;
2 26 Feb 07 jari 122   FloatMatrix height = null;
2 26 Feb 07 jari 123   
2 26 Feb 07 jari 124   Vector geneTreeSupportVector = new Vector();
2 26 Feb 07 jari 125   Vector exptTreeSupportVector = new Vector();
2 26 Feb 07 jari 126   
2 26 Feb 07 jari 127   if(drawExptTree) {
2 26 Feb 07 jari 128       
2 26 Feb 07 jari 129       //System.out.println("Inside  if(drawExptTree): ");
2 26 Feb 07 jari 130       
2 26 Feb 07 jari 131       sub_algo_data.addParam("calculate-genes", "false");
2 26 Feb 07 jari 132       sub_algo_result = sub_algo.execute(sub_algo_data);
2 26 Feb 07 jari 133       
2 26 Feb 07 jari 134       child1Arr = sub_algo_result.getIntArray("child-1-array");
2 26 Feb 07 jari 135       child2Arr = sub_algo_result.getIntArray("child-2-array");
2 26 Feb 07 jari 136       nodeOrder = sub_algo_result.getIntArray("node-order");
2 26 Feb 07 jari 137       height = sub_algo_result.getMatrix("height");
2 26 Feb 07 jari 138       
2 26 Feb 07 jari 139       //System.out.println("Original child1 array: ");
2 26 Feb 07 jari 140       printIntArray(child1Arr);
2 26 Feb 07 jari 141       
2 26 Feb 07 jari 142       //System.out.println("Original child2 array: ");
2 26 Feb 07 jari 143       printIntArray(child2Arr);
2 26 Feb 07 jari 144       
2 26 Feb 07 jari 145       //System.out.println("Orig Node Order: ");
2 26 Feb 07 jari 146       printIntArray(nodeOrder);
2 26 Feb 07 jari 147       
2 26 Feb 07 jari 148       //System.out.println("Orig Height: ");
2 26 Feb 07 jari 149       printFloatMatrix(height);
2 26 Feb 07 jari 150       
2 26 Feb 07 jari 151       int[] resampArr1;
2 26 Feb 07 jari 152       int[] resampArr2;
2 26 Feb 07 jari 153       
2 26 Feb 07 jari 154       
2 26 Feb 07 jari 155       Vector childrenSetOfOrigTree = getAllSetsOfChildren(child1Arr, child2Arr);
2 26 Feb 07 jari 156       
2 26 Feb 07 jari 157       //System.out.println("childrenSetOfOrigTree: ");
2 26 Feb 07 jari 158       printVectorOfSets(childrenSetOfOrigTree);
2 26 Feb 07 jari 159       
2 26 Feb 07 jari 160       
2 26 Feb 07 jari 161       int numNodes = childrenSetOfOrigTree.size();
2 26 Feb 07 jari 162       
2 26 Feb 07 jari 163       //System.out.println("numNodes: " + numNodes);
2 26 Feb 07 jari 164       
2 26 Feb 07 jari 165       
2 26 Feb 07 jari 166       int[] supportArray =new int[numNodes];
2 26 Feb 07 jari 167       int[] denomArray = new int[numNodes];
2 26 Feb 07 jari 168       double[] supportPercentageArray = new double[numNodes];
2 26 Feb 07 jari 169       
2 26 Feb 07 jari 170       for (int j = 0; j < numNodes; j++) {
2 26 Feb 07 jari 171     supportArray[j] = 0;
2 26 Feb 07 jari 172     denomArray[j] = 0;
2 26 Feb 07 jari 173       }
2 26 Feb 07 jari 174       
2 26 Feb 07 jari 175       Vector childrenSetOfResampTree;
2 26 Feb 07 jari 176       HashSet indexSetInResampledMatrix = null;
2 26 Feb 07 jari 177       HashSet origLeavesOfNodeN;
2 26 Feb 07 jari 178       
2 26 Feb 07 jari 179       int denom = 0;
2 26 Feb 07 jari 180       int support = 0;
2 26 Feb 07 jari 181       
2 26 Feb 07 jari 182       for (int i=0; i<exptTreeIterations; i++) {
2 26 Feb 07 jari 183     if (stop) {
2 26 Feb 07 jari 184         throw new AbortException();
2 26 Feb 07 jari 185     }
2 26 Feb 07 jari 186     event.setIntValue(i);
2 26 Feb 07 jari 187     event.setDescription("Sample Tree Resampling: iteration "+String.valueOf(i+1));
2 26 Feb 07 jari 188     fireValueChanged(event);
2 26 Feb 07 jari 189     
2 26 Feb 07 jari 190     FloatMatrix resampExpMatrix = null;
2 26 Feb 07 jari 191     
2 26 Feb 07 jari 192     if (exptTreeAnalysisOption == 1) {
2 26 Feb 07 jari 193         BootstrappedMatrixByExps resampMatrix = new BootstrappedMatrixByExps();
2 26 Feb 07 jari 194         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 195         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 196     }
2 26 Feb 07 jari 197     
2 26 Feb 07 jari 198     else if (exptTreeAnalysisOption == 2) {
2 26 Feb 07 jari 199         BootstrappedMatrixByGenes resampMatrix = new BootstrappedMatrixByGenes();
2 26 Feb 07 jari 200         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 201         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 202     }
2 26 Feb 07 jari 203     
2 26 Feb 07 jari 204     else if (exptTreeAnalysisOption == 3) {
2 26 Feb 07 jari 205         JacknifedMatrixByExps resampMatrix = new JacknifedMatrixByExps();
2 26 Feb 07 jari 206         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 207         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 208     }
2 26 Feb 07 jari 209     
2 26 Feb 07 jari 210     else if (exptTreeAnalysisOption == 4) {
2 26 Feb 07 jari 211         JacknifedMatrixByGenes resampMatrix = new JacknifedMatrixByGenes();
2 26 Feb 07 jari 212         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 213         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 214     }
2 26 Feb 07 jari 215     
2 26 Feb 07 jari 216     //System.out.println("resampExpMatrix: ");
2 26 Feb 07 jari 217     printFloatMatrix(resampExpMatrix);
2 26 Feb 07 jari 218     
2 26 Feb 07 jari 219     //System.out.println("indexSetInResampledMatrix: ");
2 26 Feb 07 jari 220     printHashSet(indexSetInResampledMatrix);
2 26 Feb 07 jari 221     
2 26 Feb 07 jari 222     Algorithm resamp_algo = new HCL();
2 26 Feb 07 jari 223     AlgorithmData resamp_algo_data = new AlgorithmData();
2 26 Feb 07 jari 224     
2 26 Feb 07 jari 225     resamp_algo_data.addMatrix("experiment", resampExpMatrix);
2 26 Feb 07 jari 226     resamp_algo_data.addParam("distance-factor", String.valueOf(factor));
2 26 Feb 07 jari 227     resamp_algo_data.addParam("distance-absolute", String.valueOf(absolute));
2 26 Feb 07 jari 228     resamp_algo_data.addParam("hcl-distance-function", String.valueOf(function));
2 26 Feb 07 jari 229     resamp_algo_data.addParam("method-linkage", String.valueOf(method_linkage));
2 26 Feb 07 jari 230     resamp_algo_data.addParam("calculate-genes", "false");
2 26 Feb 07 jari 231     
2 26 Feb 07 jari 232     AlgorithmData resamp_algo_result = resamp_algo.execute(resamp_algo_data);
2 26 Feb 07 jari 233     
2 26 Feb 07 jari 234     resampArr1 = resamp_algo_result.getIntArray("child-1-array");
2 26 Feb 07 jari 235     resampArr2 = resamp_algo_result.getIntArray("child-2-array");
2 26 Feb 07 jari 236     
2 26 Feb 07 jari 237     //System.out.println("child-1-array: ");
2 26 Feb 07 jari 238     
2 26 Feb 07 jari 239     printIntArray(resampArr1);
2 26 Feb 07 jari 240     
2 26 Feb 07 jari 241     //System.out.println("child-2-array: ");
2 26 Feb 07 jari 242     
2 26 Feb 07 jari 243     printIntArray(resampArr2);
2 26 Feb 07 jari 244     
2 26 Feb 07 jari 245     childrenSetOfResampTree = new Vector();
2 26 Feb 07 jari 246     childrenSetOfResampTree = getAllSetsOfChildren(resampArr1, resampArr2); //upto here, have original leaf sets, and resampled leaf sets for this iteration
2 26 Feb 07 jari 247     
2 26 Feb 07 jari 248     //System.out.println("childrenSetOfResampTree: ");
2 26 Feb 07 jari 249     printVectorOfSets(childrenSetOfResampTree);
2 26 Feb 07 jari 250     
2 26 Feb 07 jari 251     for (int n = 0; n < numNodes; n++) {
2 26 Feb 07 jari 252         origLeavesOfNodeN = new HashSet();
2 26 Feb 07 jari 253         origLeavesOfNodeN = (HashSet)childrenSetOfOrigTree.get(n);
2 26 Feb 07 jari 254         
2 26 Feb 07 jari 255         //System.out.println("origLeavesOfNode " + n + " :");
2 26 Feb 07 jari 256         printHashSet(origLeavesOfNodeN);
2 26 Feb 07 jari 257         
2 26 Feb 07 jari 258         if ((exptTreeAnalysisOption == 1)||(exptTreeAnalysisOption == 3)) {
2 26 Feb 07 jari 259       
2 26 Feb 07 jari 260       if (indexSetInResampledMatrix.containsAll(origLeavesOfNodeN)) {
2 26 Feb 07 jari 261           denom++;
2 26 Feb 07 jari 262           if (leafSetFound((HashSet) origLeavesOfNodeN, childrenSetOfResampTree)) support++;
2 26 Feb 07 jari 263       }
2 26 Feb 07 jari 264       
2 26 Feb 07 jari 265       supportArray[n] += support;
2 26 Feb 07 jari 266       denomArray[n] += denom;
2 26 Feb 07 jari 267       
2 26 Feb 07 jari 268       //System.out.println("supportArray[" + n + "] :" + supportArray[n]);
2 26 Feb 07 jari 269       //System.out.println("denomArray[" + n + "] :" + denomArray[n]);
2 26 Feb 07 jari 270       
2 26 Feb 07 jari 271       
2 26 Feb 07 jari 272       support = 0; //re-initialize
2 26 Feb 07 jari 273       denom = 0;
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275         
2 26 Feb 07 jari 276         else if ((exptTreeAnalysisOption == 2)||(exptTreeAnalysisOption == 4)) {
2 26 Feb 07 jari 277       if (leafSetFound((HashSet) origLeavesOfNodeN, childrenSetOfResampTree)) support++;
2 26 Feb 07 jari 278       supportArray[n] += support;
2 26 Feb 07 jari 279       //System.out.println("supportArray[" + n + "] :" + supportArray[n]);
2 26 Feb 07 jari 280       
2 26 Feb 07 jari 281       support = 0; //re-initialize
2 26 Feb 07 jari 282         }
2 26 Feb 07 jari 283     }
2 26 Feb 07 jari 284     
2 26 Feb 07 jari 285     
2 26 Feb 07 jari 286       }
2 26 Feb 07 jari 287       
2 26 Feb 07 jari 288       
2 26 Feb 07 jari 289       if ((exptTreeAnalysisOption == 1)||(exptTreeAnalysisOption == 3)) {
2 26 Feb 07 jari 290     
2 26 Feb 07 jari 291     for (int k = 0; k < numNodes; k++) {
2 26 Feb 07 jari 292         if (denomArray[k] != 0) {supportPercentageArray[k] = supportArray[k]*100/denomArray[k];}
2 26 Feb 07 jari 293         else supportPercentageArray[k] = -10;
2 26 Feb 07 jari 294         exptTreeSupportVector.add(new Double(supportPercentageArray[k]));
2 26 Feb 07 jari 295     }
2 26 Feb 07 jari 296       }
2 26 Feb 07 jari 297       
2 26 Feb 07 jari 298       else if ((exptTreeAnalysisOption == 2)||(exptTreeAnalysisOption == 4)) {
2 26 Feb 07 jari 299     for (int k = 0; k < numNodes; k++) {
2 26 Feb 07 jari 300         supportPercentageArray[k] = supportArray[k]*100/exptTreeIterations;
2 26 Feb 07 jari 301         exptTreeSupportVector.add(new Double(supportPercentageArray[k]));
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303       }
2 26 Feb 07 jari 304       
2 26 Feb 07 jari 305       //System.out.println("Finished if(drawExptTree): ");
2 26 Feb 07 jari 306       
2 26 Feb 07 jari 307   }
2 26 Feb 07 jari 308   
2 26 Feb 07 jari 309   
2 26 Feb 07 jari 310   if(drawGeneTree) {
2 26 Feb 07 jari 311       
2 26 Feb 07 jari 312       //System.out.println("Inside  if(drawGeneTree): ");
2 26 Feb 07 jari 313       
2 26 Feb 07 jari 314       sub_algo_data.addParam("calculate-genes", "true");
2 26 Feb 07 jari 315       sub_algo_result = sub_algo.execute(sub_algo_data);
2 26 Feb 07 jari 316       
2 26 Feb 07 jari 317       child1Arr = sub_algo_result.getIntArray("child-1-array");
2 26 Feb 07 jari 318       child2Arr = sub_algo_result.getIntArray("child-2-array");
2 26 Feb 07 jari 319       nodeOrder = sub_algo_result.getIntArray("node-order");
2 26 Feb 07 jari 320       height = sub_algo_result.getMatrix("height");
2 26 Feb 07 jari 321       
2 26 Feb 07 jari 322       //System.out.println("Original child1 array: ");
2 26 Feb 07 jari 323       printIntArray(child1Arr);
2 26 Feb 07 jari 324       
2 26 Feb 07 jari 325       //System.out.println("Original child2 array: ");
2 26 Feb 07 jari 326       printIntArray(child2Arr);
2 26 Feb 07 jari 327       
2 26 Feb 07 jari 328       //System.out.println("Orig Node Order: ");
2 26 Feb 07 jari 329       printIntArray(nodeOrder);
2 26 Feb 07 jari 330       
2 26 Feb 07 jari 331       //System.out.println("Orig Height: ");
2 26 Feb 07 jari 332       printFloatMatrix(height);
2 26 Feb 07 jari 333       
2 26 Feb 07 jari 334       int[] resampArr1;
2 26 Feb 07 jari 335       int[] resampArr2;
2 26 Feb 07 jari 336       
2 26 Feb 07 jari 337       Vector childrenSetOfOrigTree = getAllSetsOfChildren(child1Arr, child2Arr);
2 26 Feb 07 jari 338       
2 26 Feb 07 jari 339       //System.out.println("childrenSetOfOrigTree: ");
2 26 Feb 07 jari 340       printVectorOfSets(childrenSetOfOrigTree);
2 26 Feb 07 jari 341       
2 26 Feb 07 jari 342       int numNodes = childrenSetOfOrigTree.size();
2 26 Feb 07 jari 343       
2 26 Feb 07 jari 344       //System.out.println("numNodes: " + numNodes);
2 26 Feb 07 jari 345       
2 26 Feb 07 jari 346       
2 26 Feb 07 jari 347       int[] supportArray =new int[numNodes];
2 26 Feb 07 jari 348       int[] denomArray = new int[numNodes];
2 26 Feb 07 jari 349       double[] supportPercentageArray = new double[numNodes];
2 26 Feb 07 jari 350       
2 26 Feb 07 jari 351       for (int j = 0; j < numNodes; j++) {
2 26 Feb 07 jari 352     supportArray[j] = 0;
2 26 Feb 07 jari 353     denomArray[j] = 0;
2 26 Feb 07 jari 354       }
2 26 Feb 07 jari 355       
2 26 Feb 07 jari 356       Vector childrenSetOfResampTree;
2 26 Feb 07 jari 357       HashSet indexSetInResampledMatrix = null;
2 26 Feb 07 jari 358       HashSet origLeavesOfNodeN;
2 26 Feb 07 jari 359       
2 26 Feb 07 jari 360       int denom = 0;
2 26 Feb 07 jari 361       int support = 0;
2 26 Feb 07 jari 362       
2 26 Feb 07 jari 363       for (int i=0; i<geneTreeIterations; i++) {
2 26 Feb 07 jari 364     if (stop) {
2 26 Feb 07 jari 365         throw new AbortException();
2 26 Feb 07 jari 366     }
2 26 Feb 07 jari 367     event.setIntValue(i);
2 26 Feb 07 jari 368     event.setDescription("Gene Tree Resampling: iteration "+String.valueOf(i+1));
2 26 Feb 07 jari 369     fireValueChanged(event);
2 26 Feb 07 jari 370     
2 26 Feb 07 jari 371     FloatMatrix resampExpMatrix = null;
2 26 Feb 07 jari 372     
2 26 Feb 07 jari 373     if (geneTreeAnalysisOption == 1) {
2 26 Feb 07 jari 374         BootstrappedMatrixByExps resampMatrix = new BootstrappedMatrixByExps();
2 26 Feb 07 jari 375         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 376         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 377     }
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     else if (geneTreeAnalysisOption == 2) {
2 26 Feb 07 jari 380         BootstrappedMatrixByGenes resampMatrix = new BootstrappedMatrixByGenes();
2 26 Feb 07 jari 381         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 382         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 383     }
2 26 Feb 07 jari 384     
2 26 Feb 07 jari 385     else if (geneTreeAnalysisOption == 3) {
2 26 Feb 07 jari 386         JacknifedMatrixByExps resampMatrix = new JacknifedMatrixByExps();
2 26 Feb 07 jari 387         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 388         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 389     }
2 26 Feb 07 jari 390     
2 26 Feb 07 jari 391     else if (geneTreeAnalysisOption == 4) {
2 26 Feb 07 jari 392         JacknifedMatrixByGenes resampMatrix = new JacknifedMatrixByGenes();
2 26 Feb 07 jari 393         resampExpMatrix = resampMatrix.createResampExpMatrixObject(expMatrix);
2 26 Feb 07 jari 394         indexSetInResampledMatrix = new HashSet(resampMatrix.resampledIndices);
2 26 Feb 07 jari 395     }
2 26 Feb 07 jari 396     
2 26 Feb 07 jari 397     //System.out.println("resampExpMatrix: ");
2 26 Feb 07 jari 398     printFloatMatrix(resampExpMatrix);
2 26 Feb 07 jari 399     
2 26 Feb 07 jari 400     //System.out.println("indexSetInResampledMatrix: ");
2 26 Feb 07 jari 401     printHashSet(indexSetInResampledMatrix);
2 26 Feb 07 jari 402     
2 26 Feb 07 jari 403     Algorithm resamp_algo = new HCL();
2 26 Feb 07 jari 404     AlgorithmData resamp_algo_data = new AlgorithmData();
2 26 Feb 07 jari 405     
2 26 Feb 07 jari 406     resamp_algo_data.addMatrix("experiment", resampExpMatrix);
2 26 Feb 07 jari 407     resamp_algo_data.addParam("distance-factor", String.valueOf(factor));
2 26 Feb 07 jari 408     resamp_algo_data.addParam("distance-absolute", String.valueOf(absolute));
2 26 Feb 07 jari 409     resamp_algo_data.addParam("hcl-distance-function", String.valueOf(function));
2 26 Feb 07 jari 410     resamp_algo_data.addParam("method-linkage", String.valueOf(method_linkage));
2 26 Feb 07 jari 411     resamp_algo_data.addParam("calculate-genes", "true");
2 26 Feb 07 jari 412     
2 26 Feb 07 jari 413     AlgorithmData resamp_algo_result = resamp_algo.execute(resamp_algo_data);
2 26 Feb 07 jari 414     
2 26 Feb 07 jari 415     resampArr1 = resamp_algo_result.getIntArray("child-1-array");
2 26 Feb 07 jari 416     resampArr2 = resamp_algo_result.getIntArray("child-2-array");
2 26 Feb 07 jari 417     
2 26 Feb 07 jari 418     //System.out.println("child-1-array: ");
2 26 Feb 07 jari 419     
2 26 Feb 07 jari 420     printIntArray(resampArr1);
2 26 Feb 07 jari 421     
2 26 Feb 07 jari 422     //System.out.println("child-2-array: ");
2 26 Feb 07 jari 423     
2 26 Feb 07 jari 424     printIntArray(resampArr2);
2 26 Feb 07 jari 425     
2 26 Feb 07 jari 426     childrenSetOfResampTree = new Vector();
2 26 Feb 07 jari 427     childrenSetOfResampTree = getAllSetsOfChildren(resampArr1, resampArr2); //upto here, have original leaf sets, and resampled leaf sets for this iteration
2 26 Feb 07 jari 428     
2 26 Feb 07 jari 429     //System.out.println("childrenSetOfResampTree: ");
2 26 Feb 07 jari 430     printVectorOfSets(childrenSetOfResampTree);
2 26 Feb 07 jari 431     
2 26 Feb 07 jari 432     for (int n = 0; n < numNodes; n++) {
2 26 Feb 07 jari 433         origLeavesOfNodeN = new HashSet();
2 26 Feb 07 jari 434         origLeavesOfNodeN = (HashSet)childrenSetOfOrigTree.get(n);
2 26 Feb 07 jari 435         
2 26 Feb 07 jari 436         //System.out.println("origLeavesOfNode " + n + " :");
2 26 Feb 07 jari 437         printHashSet(origLeavesOfNodeN);
2 26 Feb 07 jari 438         
2 26 Feb 07 jari 439         if ((geneTreeAnalysisOption == 2)||(geneTreeAnalysisOption == 4)) {
2 26 Feb 07 jari 440       
2 26 Feb 07 jari 441       if (indexSetInResampledMatrix.containsAll(origLeavesOfNodeN)) {
2 26 Feb 07 jari 442           denom++;
2 26 Feb 07 jari 443           if (leafSetFound((HashSet) origLeavesOfNodeN, childrenSetOfResampTree)) support++;
2 26 Feb 07 jari 444       }
2 26 Feb 07 jari 445       
2 26 Feb 07 jari 446       supportArray[n] += support;
2 26 Feb 07 jari 447       denomArray[n] += denom;
2 26 Feb 07 jari 448       
2 26 Feb 07 jari 449       //System.out.println("supportArray[" + n + "] :" + supportArray[n]);
2 26 Feb 07 jari 450       //System.out.println("denomArray[" + n + "] :" + denomArray[n]);
2 26 Feb 07 jari 451       
2 26 Feb 07 jari 452       support = 0; //re-initialize
2 26 Feb 07 jari 453       denom = 0;
2 26 Feb 07 jari 454         }
2 26 Feb 07 jari 455         
2 26 Feb 07 jari 456         else if ((geneTreeAnalysisOption == 1)||(geneTreeAnalysisOption == 3)) {
2 26 Feb 07 jari 457       if (leafSetFound((HashSet) origLeavesOfNodeN, childrenSetOfResampTree)) support++;
2 26 Feb 07 jari 458       supportArray[n] += support;
2 26 Feb 07 jari 459       
2 26 Feb 07 jari 460       //System.out.println("supportArray[" + n + "] :" + supportArray[n]);
2 26 Feb 07 jari 461       
2 26 Feb 07 jari 462       support = 0; //re-initialize
2 26 Feb 07 jari 463         }
2 26 Feb 07 jari 464     }
2 26 Feb 07 jari 465       }
2 26 Feb 07 jari 466       
2 26 Feb 07 jari 467       
2 26 Feb 07 jari 468       if ((geneTreeAnalysisOption == 2)||(geneTreeAnalysisOption == 4)) {
2 26 Feb 07 jari 469     
2 26 Feb 07 jari 470     for (int k = 0; k < numNodes; k++) {
2 26 Feb 07 jari 471         if (denomArray[k] != 0) {supportPercentageArray[k] = supportArray[k]*100/denomArray[k];}
2 26 Feb 07 jari 472         else supportPercentageArray[k] = -10;
2 26 Feb 07 jari 473         geneTreeSupportVector.add(new Double(supportPercentageArray[k]));
2 26 Feb 07 jari 474     }
2 26 Feb 07 jari 475       }
2 26 Feb 07 jari 476       
2 26 Feb 07 jari 477       else if ((geneTreeAnalysisOption == 1)||(geneTreeAnalysisOption == 3)) {
2 26 Feb 07 jari 478     for (int k = 0; k < numNodes; k++) {
2 26 Feb 07 jari 479         supportPercentageArray[k] = supportArray[k]*100/geneTreeIterations;
2 26 Feb 07 jari 480         geneTreeSupportVector.add(new Double(supportPercentageArray[k]));
2 26 Feb 07 jari 481     }
2 26 Feb 07 jari 482       }
2 26 Feb 07 jari 483       
2 26 Feb 07 jari 484       //System.out.println("Finished if(drawGeneTree): ");
2 26 Feb 07 jari 485       
2 26 Feb 07 jari 486   }
2 26 Feb 07 jari 487   
2 26 Feb 07 jari 488   
2 26 Feb 07 jari 489   
2 26 Feb 07 jari 490   
2 26 Feb 07 jari 491   AlgorithmData result = new AlgorithmData();
2 26 Feb 07 jari 492   
2 26 Feb 07 jari 493   if(drawGeneTree) {
2 26 Feb 07 jari 494       FloatMatrix geneTreeSupportMatrix = new FloatMatrix(1, geneTreeSupportVector.size());
2 26 Feb 07 jari 495       for (int i = 0; i < geneTreeSupportVector.size(); i++) {
2 26 Feb 07 jari 496     geneTreeSupportMatrix.A[0][i] = ((Double)(geneTreeSupportVector.get(i))).floatValue();
2 26 Feb 07 jari 497       }
2 26 Feb 07 jari 498       
2 26 Feb 07 jari 499       //System.out.println("geneTreeSupportMatrix: ");
2 26 Feb 07 jari 500       printFloatMatrix(geneTreeSupportMatrix);
2 26 Feb 07 jari 501       
2 26 Feb 07 jari 502       result.addMatrix("geneTreeSupportMatrix", geneTreeSupportMatrix);
2 26 Feb 07 jari 503       //result.addMatrix("exptTreeSupportMatrix", new FloatMatrix(0,0));
2 26 Feb 07 jari 504   }
2 26 Feb 07 jari 505   if(drawExptTree) {
2 26 Feb 07 jari 506       FloatMatrix exptTreeSupportMatrix = new FloatMatrix(1, exptTreeSupportVector.size());
2 26 Feb 07 jari 507       for (int i = 0; i < exptTreeSupportVector.size(); i++) {
2 26 Feb 07 jari 508     exptTreeSupportMatrix.A[0][i] = ((Double)(exptTreeSupportVector.get(i))).floatValue();
2 26 Feb 07 jari 509       }
2 26 Feb 07 jari 510       
2 26 Feb 07 jari 511       //System.out.println("exptTreeSupportMatrix: ");
2 26 Feb 07 jari 512       printFloatMatrix(exptTreeSupportMatrix);
2 26 Feb 07 jari 513       
2 26 Feb 07 jari 514       
2 26 Feb 07 jari 515       
2 26 Feb 07 jari 516       result.addMatrix("exptTreeSupportMatrix", exptTreeSupportMatrix);
2 26 Feb 07 jari 517       //result.addMatrix("geneTreeSupportMatrix", new FloatMatrix(0,0));
2 26 Feb 07 jari 518   }
2 26 Feb 07 jari 519   
2 26 Feb 07 jari 520   result.addIntArray("orig-child-1-array", child1Arr);
2 26 Feb 07 jari 521   result.addIntArray("orig-child-2-array", child2Arr);
2 26 Feb 07 jari 522   result.addIntArray("orig-node-order", nodeOrder);
2 26 Feb 07 jari 523   result.addMatrix("orig-height", height);
2 26 Feb 07 jari 524   
2 26 Feb 07 jari 525   return result;
2 26 Feb 07 jari 526     }
2 26 Feb 07 jari 527     
2 26 Feb 07 jari 528     
2 26 Feb 07 jari 529     
2 26 Feb 07 jari 530     private void identifyChildren(int node, Vector v, int[] arr1, int[] arr2) {// get the vector v of children of a given node in the tree that specified by the two children arrays arr1 and arr2
2 26 Feb 07 jari 531   
2 26 Feb 07 jari 532   if (arr1[node] == -1) {return;}
2 26 Feb 07 jari 533   
2 26 Feb 07 jari 534   else
2 26 Feb 07 jari 535       if ((arr1[arr1[node]] == -1) && (arr1[arr2[node]] == -1)) {
2 26 Feb 07 jari 536     v.add(new Integer(arr1[node]));
2 26 Feb 07 jari 537     v.add(new Integer(arr2[node]));
2 26 Feb 07 jari 538     return;
2 26 Feb 07 jari 539       }
2 26 Feb 07 jari 540   
2 26 Feb 07 jari 541       else
2 26 Feb 07 jari 542     if ((arr1[arr1[node]] == -1) && (arr1[arr2[node]] != -1)) {
2 26 Feb 07 jari 543         v.add(new Integer(arr1[node]));
2 26 Feb 07 jari 544         identifyChildren(arr2[node], v, arr1, arr2);
2 26 Feb 07 jari 545         return;
2 26 Feb 07 jari 546     }
2 26 Feb 07 jari 547   
2 26 Feb 07 jari 548     else
2 26 Feb 07 jari 549         if ((arr1[arr1[node]] != -1) && (arr1[arr2[node]] == -1)) {
2 26 Feb 07 jari 550       identifyChildren(arr1[node], v, arr1, arr2);
2 26 Feb 07 jari 551       v.add(new Integer(arr2[node]));
2 26 Feb 07 jari 552       return;
2 26 Feb 07 jari 553         }
2 26 Feb 07 jari 554   
2 26 Feb 07 jari 555         else
2 26 Feb 07 jari 556       if ((arr1[arr1[node]] != -1) && (arr1[arr2[node]] != -1)) {
2 26 Feb 07 jari 557           identifyChildren(arr1[node], v, arr1, arr2);
2 26 Feb 07 jari 558           identifyChildren(arr2[node], v, arr1, arr2);
2 26 Feb 07 jari 559           return;
2 26 Feb 07 jari 560       }
2 26 Feb 07 jari 561   
2 26 Feb 07 jari 562     }
2 26 Feb 07 jari 563     
2 26 Feb 07 jari 564     
2 26 Feb 07 jari 565     private Vector getAllSetsOfChildren(int[] child1arr, int[] child2arr) {// get the vectors of children for all nodes of the tree specified by the two children arrays
2 26 Feb 07 jari 566   
2 26 Feb 07 jari 567   Vector allSetsOfChildren = new Vector();
2 26 Feb 07 jari 568   Vector childrenOfANode = new Vector();
2 26 Feb 07 jari 569   Set childrenSetOfANode = new HashSet();
2 26 Feb 07 jari 570   int nLeaves = (int)(child1arr.length/2); // the number of leaves
2 26 Feb 07 jari 571   for(int j = 0; j < (nLeaves - 1); j++) {// in a binary tree, the number of nodes is (nLeaves - 1)
2 26 Feb 07 jari 572       
2 26 Feb 07 jari 573       if (stop == true) return null;
2 26 Feb 07 jari 574       identifyChildren(j + nLeaves /*+ 1*/, childrenOfANode, child1arr, child2arr); // in origChild1[] and origChild2[], the indices of the nodes go from [nLeaves+1] to [2*nLeaves - 1]
2 26 Feb 07 jari 575       childrenSetOfANode = new HashSet(childrenOfANode);
2 26 Feb 07 jari 576       allSetsOfChildren.add(childrenSetOfANode);
2 26 Feb 07 jari 577       childrenOfANode = new Vector(); //re-initializing childrenOfANode, as we don't want it to contain the values from the previous iteration
2 26 Feb 07 jari 578       childrenSetOfANode = new HashSet();//re-initializing childrenSetOfANode, as we don't want it to contain the values from the previous iteration
2 26 Feb 07 jari 579   }
2 26 Feb 07 jari 580   
2 26 Feb 07 jari 581   return allSetsOfChildren;
2 26 Feb 07 jari 582     }
2 26 Feb 07 jari 583     
2 26 Feb 07 jari 584     
2 26 Feb 07 jari 585     protected void printVectorOfSets(Vector v) {
2 26 Feb 07 jari 586   
2 26 Feb 07 jari 587   if (true) return; //Disable the vector printing
2 26 Feb 07 jari 588   if (v == null) {
2 26 Feb 07 jari 589       System.out.println("NULL VECTOR!");
2 26 Feb 07 jari 590       return;
2 26 Feb 07 jari 591   }
2 26 Feb 07 jari 592   
2 26 Feb 07 jari 593   if (v.size() == 0) {
2 26 Feb 07 jari 594       System.out.println("NO VECTOR!");
2 26 Feb 07 jari 595       return;
2 26 Feb 07 jari 596   }
2 26 Feb 07 jari 597   
2 26 Feb 07 jari 598   for (int i = 0; i < v.size(); i++) {
2 26 Feb 07 jari 599       System.out.println("Node: " + i);
2 26 Feb 07 jari 600       HashSet h = (HashSet) v.elementAt(i);
2 26 Feb 07 jari 601       for (Iterator it = h.iterator(); it.hasNext(); ) {
2 26 Feb 07 jari 602     System.out.print(((Integer) it.next()) + ", ");
2 26 Feb 07 jari 603       }
2 26 Feb 07 jari 604       System.out.print("\n\n\n");
2 26 Feb 07 jari 605   }
2 26 Feb 07 jari 606     }
2 26 Feb 07 jari 607     
2 26 Feb 07 jari 608     
2 26 Feb 07 jari 609     protected void printHashSet(HashSet h) {
2 26 Feb 07 jari 610   if (true) return; //Disable the printing
2 26 Feb 07 jari 611   
2 26 Feb 07 jari 612   for (Iterator it = h.iterator(); it.hasNext(); ) {
2 26 Feb 07 jari 613       System.out.print(((Integer) it.next()) + ", ");
2 26 Feb 07 jari 614   }
2 26 Feb 07 jari 615   System.out.print("\n\n\n");
2 26 Feb 07 jari 616   
2 26 Feb 07 jari 617     }
2 26 Feb 07 jari 618     
2 26 Feb 07 jari 619     
2 26 Feb 07 jari 620     boolean leafSetFound(HashSet leavesAtANode, Vector leafSets) {
2 26 Feb 07 jari 621   boolean found = false;
2 26 Feb 07 jari 622   int n = leafSets.size();
2 26 Feb 07 jari 623   Set leaves;
2 26 Feb 07 jari 624   for (int i = 0; i < n; i++) {
2 26 Feb 07 jari 625       leaves = new HashSet((Collection) leafSets.get(i));
2 26 Feb 07 jari 626       if (leavesAtANode.equals(leaves)) {
2 26 Feb 07 jari 627     found = true;
2 26 Feb 07 jari 628     return found;
2 26 Feb 07 jari 629       }
2 26 Feb 07 jari 630   }
2 26 Feb 07 jari 631   
2 26 Feb 07 jari 632   return found;
2 26 Feb 07 jari 633     }
2 26 Feb 07 jari 634     
2 26 Feb 07 jari 635     
2 26 Feb 07 jari 636     void printFloatMatrix(FloatMatrix matrix) {
2 26 Feb 07 jari 637   if (true) return; //Disable the printing
2 26 Feb 07 jari 638   
2 26 Feb 07 jari 639   for (int i = 0; i < matrix.getRowDimension(); i++) {
2 26 Feb 07 jari 640       for (int j = 0; j < matrix.getColumnDimension(); j++) {
2 26 Feb 07 jari 641     System.out.print("" + matrix.A[i][j]*100 + " ");
2 26 Feb 07 jari 642       }
2 26 Feb 07 jari 643       System.out.println();
2 26 Feb 07 jari 644   }
2 26 Feb 07 jari 645   
2 26 Feb 07 jari 646   System.out.println();
2 26 Feb 07 jari 647     }
2 26 Feb 07 jari 648     
2 26 Feb 07 jari 649     
2 26 Feb 07 jari 650     void printIntArray(int[] array) {
2 26 Feb 07 jari 651   if (true) return; //Disable the printing
2 26 Feb 07 jari 652   
2 26 Feb 07 jari 653   for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 654       System.out.print("" + array[i]);
2 26 Feb 07 jari 655   }
2 26 Feb 07 jari 656   
2 26 Feb 07 jari 657   System.out.println();
2 26 Feb 07 jari 658     }
2 26 Feb 07 jari 659     
2 26 Feb 07 jari 660 }
2 26 Feb 07 jari 661
2 26 Feb 07 jari 662
2 26 Feb 07 jari 663
2 26 Feb 07 jari 664
2 26 Feb 07 jari 665
2 26 Feb 07 jari 666
2 26 Feb 07 jari 667
2 26 Feb 07 jari 668
2 26 Feb 07 jari 669
2 26 Feb 07 jari 670
2 26 Feb 07 jari 671
2 26 Feb 07 jari 672
2 26 Feb 07 jari 673
2 26 Feb 07 jari 674
2 26 Feb 07 jari 675
2 26 Feb 07 jari 676
2 26 Feb 07 jari 677
2 26 Feb 07 jari 678
2 26 Feb 07 jari 679
2 26 Feb 07 jari 680
2 26 Feb 07 jari 681
2 26 Feb 07 jari 682
2 26 Feb 07 jari 683
2 26 Feb 07 jari 684
2 26 Feb 07 jari 685
2 26 Feb 07 jari 686
2 26 Feb 07 jari 687
2 26 Feb 07 jari 688
2 26 Feb 07 jari 689
2 26 Feb 07 jari 690
2 26 Feb 07 jari 691
2 26 Feb 07 jari 692
2 26 Feb 07 jari 693
2 26 Feb 07 jari 694
2 26 Feb 07 jari 695
2 26 Feb 07 jari 696
2 26 Feb 07 jari 697
2 26 Feb 07 jari 698
2 26 Feb 07 jari 699
2 26 Feb 07 jari 700
2 26 Feb 07 jari 701
2 26 Feb 07 jari 702
2 26 Feb 07 jari 703
2 26 Feb 07 jari 704
2 26 Feb 07 jari 705
2 26 Feb 07 jari 706