mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/bridge/BridgeGUI.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Aug 30, 2005
2 26 Feb 07 jari 3  */
2 26 Feb 07 jari 4 package org.tigr.microarray.mev.cluster.gui.impl.bridge;
2 26 Feb 07 jari 5
2 26 Feb 07 jari 6 import java.io.File;
2 26 Feb 07 jari 7 import java.io.FileWriter;
2 26 Feb 07 jari 8 import java.io.IOException;
2 26 Feb 07 jari 9 import java.text.DecimalFormat;
2 26 Feb 07 jari 10 import java.util.StringTokenizer;
2 26 Feb 07 jari 11 import java.util.Vector;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import javax.swing.JFileChooser;
2 26 Feb 07 jari 14 import javax.swing.JFrame;
2 26 Feb 07 jari 15 import javax.swing.JOptionPane;
2 26 Feb 07 jari 16 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 19 import org.tigr.microarray.mev.cluster.algorithm.AlgorithmException;
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.cluster.gui.IClusterGUI;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidUserObject;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.helpers.ClusterTableViewer;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentViewer;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.r.RDataFormatter;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.r.RHyb;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.r.RHybSet;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.r.RProgress;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.r.RamaTextFileFilter;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.r.Rconnection;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.r.RconnectionManager;
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37 /**
2 26 Feb 07 jari 38  * @author iVu
2 26 Feb 07 jari 39  */
2 26 Feb 07 jari 40 public class BridgeGUI implements IClusterGUI {
2 26 Feb 07 jari 41   public static String TAB = "\t";
2 26 Feb 07 jari 42   public static String END_LINE = "\r\n";
2 26 Feb 07 jari 43   public static String R_VECTOR_NAME = "bData";
2 26 Feb 07 jari 44   
2 26 Feb 07 jari 45   private double threshold;
2 26 Feb 07 jari 46   
2 26 Feb 07 jari 47   private RProgress progress;
2 26 Feb 07 jari 48   
2 26 Feb 07 jari 49   //Labels for the Y Axis of Expression Graphs
2 26 Feb 07 jari 50   private String yNum = "IntB";
2 26 Feb 07 jari 51   private String yDenom = "IntA";
2 26 Feb 07 jari 52   private String dataPath;
2 26 Feb 07 jari 53   
2 26 Feb 07 jari 54   
2 26 Feb 07 jari 55   
2 26 Feb 07 jari 56   public DefaultMutableTreeNode execute(IFramework framework)
2 26 Feb 07 jari 57       throws AlgorithmException {
2 26 Feb 07 jari 58     this.dataPath = TMEV.getDataPath();
2 26 Feb 07 jari 59     DefaultMutableTreeNode root = new DefaultMutableTreeNode( "BRIDGE" );
2 26 Feb 07 jari 60     IData data = framework.getData();
2 26 Feb 07 jari 61     Experiment exp = data.getExperiment();
2 26 Feb 07 jari 62     int dataType = data.getDataType();
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     if( dataType == IData.DATA_TYPE_RATIO_ONLY ) {
2 26 Feb 07 jari 65       this.error( "bridge does not work on Ratio data.\nIt only works with Intensity data." );
2 26 Feb 07 jari 66       return null;
2 26 Feb 07 jari 67     } else if( dataType == IData.DATA_TYPE_AFFY_MEAN ) {
2 26 Feb 07 jari 68       this.error( "bridge does not work on Affy Mean data.\nIt only works with Affy Absolute data." );
2 26 Feb 07 jari 69       return null;
2 26 Feb 07 jari 70     } else if( dataType == IData.DATA_TYPE_AFFY_MEDIAN ) {
2 26 Feb 07 jari 71       this.error( "bridge does not work on Affy Median data.\nIt only works with Affy Absolute data." );
2 26 Feb 07 jari 72       return null;
2 26 Feb 07 jari 73     } else if( dataType == IData.DATA_TYPE_AFFY_REF ) {
2 26 Feb 07 jari 74       this.error( "bridge does not work on Affy Reference data.\nIt only works with Affy Absolute data." );
2 26 Feb 07 jari 75       return null;
2 26 Feb 07 jari 76     } else {
2 26 Feb 07 jari 77       //data is either Affy or 2 color (both colors present as IA & IB rather than just a ratio)
2 26 Feb 07 jari 78       
2 26 Feb 07 jari 79       //first check to see if there is enough data to run (4 affy or 2 2Color)
2 26 Feb 07 jari 80       int minFeatures = 4;
2 26 Feb 07 jari 81       if( dataType == IData.DATA_TYPE_TWO_INTENSITY ) {
2 26 Feb 07 jari 82         minFeatures = 2;
2 26 Feb 07 jari 83       }
2 26 Feb 07 jari 84       if( data.getFeaturesCount() < minFeatures ) {
2 26 Feb 07 jari 85         //not enough
2 26 Feb 07 jari 86         this.error( "bridge requires a minimum of 2 replicates per treatment type" );
2 26 Feb 07 jari 87         return null;
2 26 Feb 07 jari 88       } else {
2 26 Feb 07 jari 89         //now prescreen for NaN
2 26 Feb 07 jari 90         if( this.dataHasNulls( data ) ) {
2 26 Feb 07 jari 91           //problem
2 26 Feb 07 jari 92           this.error( "Your dataset has null values in it.\r\n" +
2 26 Feb 07 jari 93               "It will not work with bridge.\r\n" + 
2 26 Feb 07 jari 94               "You may consider removing genes where null values appear." );
2 26 Feb 07 jari 95           return null;
2 26 Feb 07 jari 96         } else {
2 26 Feb 07 jari 97           BridgeResult br = this.bridgify( framework, data, data.getDataType() );
2 26 Feb 07 jari 98           if( br != null ) {
2 26 Feb 07 jari 99             this.createExpressionImages( root, data, br, this.yNum, this.yDenom );
2 26 Feb 07 jari 100             
2 26 Feb 07 jari 101             //kill the progress bar if it is lingering (if user cancels)
2 26 Feb 07 jari 102             if( this.progress != null ) {
2 26 Feb 07 jari 103               this.progress.kill();
2 26 Feb 07 jari 104             }
2 26 Feb 07 jari 105             
2 26 Feb 07 jari 106             return root;
2 26 Feb 07 jari 107           } else {
2 26 Feb 07 jari 108             //deal with null result
2 26 Feb 07 jari 109   
2 26 Feb 07 jari 110             //kill the progress bar if it is lingering (if user cancels)
2 26 Feb 07 jari 111             if( this.progress != null ) {
2 26 Feb 07 jari 112               this.progress.kill();
2 26 Feb 07 jari 113             }
2 26 Feb 07 jari 114             
2 26 Feb 07 jari 115             return null;
2 26 Feb 07 jari 116           }
2 26 Feb 07 jari 117         }
2 26 Feb 07 jari 118       }
2 26 Feb 07 jari 119     }//else
2 26 Feb 07 jari 120   }//constructor
2 26 Feb 07 jari 121   
2 26 Feb 07 jari 122   
2 26 Feb 07 jari 123   /**
2 26 Feb 07 jari 124    * Prescreening method to look for NaN values in the dataset.
2 26 Feb 07 jari 125    * @param data
2 26 Feb 07 jari 126    * @return
2 26 Feb 07 jari 127    */
2 26 Feb 07 jari 128   private boolean dataHasNulls( IData data ) {
2 26 Feb 07 jari 129     boolean toReturn = false;
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     Experiment exp = data.getExperiment();
2 26 Feb 07 jari 132     
2 26 Feb 07 jari 133     float[][] matrix = exp.getValues();
2 26 Feb 07 jari 134     for( int i = 0; i < matrix.length; i ++ ) {
2 26 Feb 07 jari 135       for( int j = 0; j < matrix[ i ].length; j ++ ) {
2 26 Feb 07 jari 136         float fValue = matrix[ i ][ j ];
2 26 Feb 07 jari 137         
2 26 Feb 07 jari 138         //Float.compare( fValue, Float.NaN );
2 26 Feb 07 jari 139         if( Float.isNaN( fValue ) ) {
2 26 Feb 07 jari 140           //System.out.println( i + "," + j + " is NaN" );
2 26 Feb 07 jari 141           toReturn = true;
2 26 Feb 07 jari 142           break;
2 26 Feb 07 jari 143         }
2 26 Feb 07 jari 144       }
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147     return toReturn;
2 26 Feb 07 jari 148   }//datahasNulls()
2 26 Feb 07 jari 149   
2 26 Feb 07 jari 150   
2 26 Feb 07 jari 151   /**
2 26 Feb 07 jari 152    * 
2 26 Feb 07 jari 153    * @param framework
2 26 Feb 07 jari 154    * @param data
2 26 Feb 07 jari 155    * @param dataType
2 26 Feb 07 jari 156    * @return
2 26 Feb 07 jari 157    */
2 26 Feb 07 jari 158   private BridgeResult bridgify( IFramework framework, IData data, int dataType ) {
2 26 Feb 07 jari 159     BridgeResult toReturn = null;
2 26 Feb 07 jari 160     
2 26 Feb 07 jari 161     //we need to gather up the data and format it for RAMA
2 26 Feb 07 jari 162     String[] hybNames = new String[ data.getFeaturesCount() ];
2 26 Feb 07 jari 163     for( int h = 0; h < hybNames.length; h ++ ) {
2 26 Feb 07 jari 164       hybNames[ h ] = data.getFullSampleName( h );
2 26 Feb 07 jari 165     }
2 26 Feb 07 jari 166     
2 26 Feb 07 jari 167     //have user label loaded data
2 26 Feb 07 jari 168     BridgeInitDialog initDialog = new BridgeInitDialog( framework.getFrame(),
2 26 Feb 07 jari 169         hybNames, dataType );
2 26 Feb 07 jari 170     if( initDialog.showModal() == JOptionPane.OK_OPTION ) {
2 26 Feb 07 jari 171       //get the advanced parameters
2 26 Feb 07 jari 172       int B = initDialog.getNumIter();
2 26 Feb 07 jari 173       int minIter = initDialog.getBurnIn();
2 26 Feb 07 jari 174       this.threshold = initDialog.getThreshold();
2 26 Feb 07 jari 175       String sConnPort = initDialog.getSelectedConnString();
2 26 Feb 07 jari 176       int iPort = this.parseIPort( sConnPort );
2 26 Feb 07 jari 177       String sConn = this.parseSPort( sConnPort );
2 26 Feb 07 jari 178       this.setYNum( initDialog.getYNum() );
2 26 Feb 07 jari 179       this.setYDenom( initDialog.getYDen() );
2 26 Feb 07 jari 180
2 26 Feb 07 jari 181       //Object to format MeV-IData structure into R data String
2 26 Feb 07 jari 182       RDataFormatter rDataFormatter = new RDataFormatter( data );
2 26 Feb 07 jari 183       RHybSet bhs = initDialog.getBridgeHybSet();
2 26 Feb 07 jari 184       
2 26 Feb 07 jari 185       //data that characterizes loaded data
2 26 Feb 07 jari 186       String sData;    //
2 26 Feb 07 jari 187       int iGene;      //# genes
2 26 Feb 07 jari 188       int iHybKount;    //# hybs
2 26 Feb 07 jari 189       int iColorKount;  //# data points for both colors/all hybs (#hybs * 2)
2 26 Feb 07 jari 190       int iTwo;      //start index of 2nd color
2 26 Feb 07 jari 191       int nbCol1;      //# of hybs in 1st color state
2 26 Feb 07 jari 192       
2 26 Feb 07 jari 193       if( bhs.isFlip() ) {  //dealing with a dye swap experiment
2 26 Feb 07 jari 194         //Split into color state
2 26 Feb 07 jari 195         Vector vTreatCy3 = this.getVRamaHybTreatCy3( bhs.getVRamaHyb() );
2 26 Feb 07 jari 196         Vector vTreatCy5 = this.getVRamaHybTreatCy5( bhs.getVRamaHyb() );
2 26 Feb 07 jari 197         
2 26 Feb 07 jari 198         sData = rDataFormatter.rSwapString( BridgeGUI.R_VECTOR_NAME, vTreatCy3, vTreatCy5 );
2 26 Feb 07 jari 199         iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 200         nbCol1 = vTreatCy3.size();
2 26 Feb 07 jari 201         iHybKount = vTreatCy3.size() + vTreatCy5.size();
2 26 Feb 07 jari 202         iColorKount = iHybKount * 2;
2 26 Feb 07 jari 203         iTwo = iHybKount + 1;
2 26 Feb 07 jari 204       } else {  //not dye swap
2 26 Feb 07 jari 205         sData = rDataFormatter.rNonSwapString( BridgeGUI.R_VECTOR_NAME, bhs.getVRamaHyb() );
2 26 Feb 07 jari 206         iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 207         nbCol1 = 0;
2 26 Feb 07 jari 208         iHybKount = bhs.getVRamaHyb().size();
2 26 Feb 07 jari 209         iColorKount = iHybKount * 2;
2 26 Feb 07 jari 210         iTwo = iHybKount + 1;
2 26 Feb 07 jari 211       }//end rhs.isFlip() else
2 26 Feb 07 jari 212       
2 26 Feb 07 jari 213       //display an inderterminate progress bar so user knows it's working
2 26 Feb 07 jari 214       double dTimePerCalc = 0.000015d;
2 26 Feb 07 jari 215       double dIntensityKount = ( double ) iGene * ( double ) iHybKount;
2 26 Feb 07 jari 216       double dTotalTime = dIntensityKount * dTimePerCalc * B;
2 26 Feb 07 jari 217       double dMinutes = dTotalTime / 60d;
2 26 Feb 07 jari 218       DecimalFormat df = new DecimalFormat( "###.#" );
2 26 Feb 07 jari 219       String estTime = df.format( dMinutes );
2 26 Feb 07 jari 220       String message = "It may take as long as " + estTime + " minutes with your data set";
2 26 Feb 07 jari 221       this.progress = new RProgress( ( JFrame ) framework.getFrame(), message );
2 26 Feb 07 jari 222       
2 26 Feb 07 jari 223       //get a connection
2 26 Feb 07 jari 224       RconnectionManager rcMan = new RconnectionManager( 
2 26 Feb 07 jari 225           framework.getFrame(), sConn, iPort );
2 26 Feb 07 jari 226       Rconnection rc = rcMan.getConnection();
2 26 Feb 07 jari 227       
2 26 Feb 07 jari 228       //don't continue if we can't get a connection
2 26 Feb 07 jari 229       if( rc != null ) {
2 26 Feb 07 jari 230         //create R command strings
2 26 Feb 07 jari 231         String sClear = "rm(" + BridgeGUI.R_VECTOR_NAME + ")";
2 26 Feb 07 jari 232         String sLibrary = "library(bridge)";
2 26 Feb 07 jari 233         String sReform = "dim(" + BridgeGUI.R_VECTOR_NAME + ") <- c(" + iGene + "," + iColorKount + ")";
2 26 Feb 07 jari 234         String sMcMc = this.createMcMc( iGene, iHybKount, iHybKount, iTwo, iColorKount, B, minIter, dataType );
2 26 Feb 07 jari 235         String sAvg1 = "gamma1<-mat.mean(bridge." + BridgeGUI.R_VECTOR_NAME + "$gamma1)[,1]";
2 26 Feb 07 jari 236         String sAvg2 = "gamma2<-mat.mean(bridge." + BridgeGUI.R_VECTOR_NAME + "$gamma2)[,1]";
2 26 Feb 07 jari 237         String sPostP = "bridge." + BridgeGUI.R_VECTOR_NAME + "$post.p";
2 26 Feb 07 jari 238         
2 26 Feb 07 jari 239         final BridgeWorker bThread = new BridgeWorker( rc, sClear, 
2 26 Feb 07 jari 240             sLibrary, sData, sReform, sMcMc, sAvg1, sAvg2, 
2 26 Feb 07 jari 241             sPostP, this.threshold, progress );
2 26 Feb 07 jari 242         bThread.start();
2 26 Feb 07 jari 243         
2 26 Feb 07 jari 244         //wait to allow the worker to finish before proceeding
2 26 Feb 07 jari 245         while( !bThread.isDone() ) {
2 26 Feb 07 jari 246           try {
2 26 Feb 07 jari 247             Thread.sleep( 10000 );
2 26 Feb 07 jari 248           } catch( InterruptedException e ) {
2 26 Feb 07 jari 249             e.printStackTrace();
2 26 Feb 07 jari 250           }
2 26 Feb 07 jari 251         }//while()
2 26 Feb 07 jari 252         
2 26 Feb 07 jari 253         //get the result
2 26 Feb 07 jari 254         toReturn = bThread.getResult();
2 26 Feb 07 jari 255         
2 26 Feb 07 jari 256         if( toReturn != null ) {
2 26 Feb 07 jari 257           //need to know the gene annotation data
2 26 Feb 07 jari 258           String[] geneNames = new String[ iGene ];
2 26 Feb 07 jari 259           for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 260             String name = data.getGeneName( g );
2 26 Feb 07 jari 261             if( name == null ) {
2 26 Feb 07 jari 262               name = Integer.toString( g + 1 );
2 26 Feb 07 jari 263             }
2 26 Feb 07 jari 264             geneNames[ g ] = name;
2 26 Feb 07 jari 265           }//g
2 26 Feb 07 jari 266           
2 26 Feb 07 jari 267           //store these arrays in BridgeResult object
2 26 Feb 07 jari 268           //toReturn = new BridgeResult( gamma1, gamma2, pprob, this.threshold );
2 26 Feb 07 jari 269           toReturn.setGeneNames( geneNames );
2 26 Feb 07 jari 270               
2 26 Feb 07 jari 271               //seemed to have worked so save the connection strings
2 26 Feb 07 jari 272               if( initDialog.connAdded() ) {
2 26 Feb 07 jari 273                 TMEV.updateRPath( initDialog.getRPathToWrite() );
2 26 Feb 07 jari 274               }
2 26 Feb 07 jari 275         } else {
2 26 Feb 07 jari 276           System.out.println("Null Results from BridgeWorker" );
2 26 Feb 07 jari 277         }
2 26 Feb 07 jari 278       } else { //end if( rc != null )
2 26 Feb 07 jari 279         //deal with null connection, kill everything
2 26 Feb 07 jari 280         this.error( "Couldn't establish an Rserve Connection" );
2 26 Feb 07 jari 281       }
2 26 Feb 07 jari 282     }//end OK_OPTION
2 26 Feb 07 jari 283     
2 26 Feb 07 jari 284     return toReturn;
2 26 Feb 07 jari 285   }//twoIntensity()
2 26 Feb 07 jari 286   
2 26 Feb 07 jari 287   
2 26 Feb 07 jari 288   
2 26 Feb 07 jari 289   /**
2 26 Feb 07 jari 290    * Creates a Vector of RHybs where: treated-Cy3 | control-Cy5
2 26 Feb 07 jari 291    * @return
2 26 Feb 07 jari 292    */
2 26 Feb 07 jari 293   private Vector getVRamaHybTreatCy3( Vector ramaHybs ) {
2 26 Feb 07 jari 294     Vector vReturn = new Vector();
2 26 Feb 07 jari 295     
2 26 Feb 07 jari 296     for( int h = 0; h < ramaHybs.size(); h ++ ) {
2 26 Feb 07 jari 297       RHyb hyb = ( RHyb ) ramaHybs.elementAt( h );
2 26 Feb 07 jari 298       if( ! hyb.controlCy3() ) {
2 26 Feb 07 jari 299         vReturn.add( hyb );
2 26 Feb 07 jari 300       }
2 26 Feb 07 jari 301     }
2 26 Feb 07 jari 302     
2 26 Feb 07 jari 303     return vReturn;
2 26 Feb 07 jari 304   }
2 26 Feb 07 jari 305   /**
2 26 Feb 07 jari 306    * Creates a Vector of RHybs where: control-Cy3 | treated-Cy5
2 26 Feb 07 jari 307    * @return
2 26 Feb 07 jari 308    */
2 26 Feb 07 jari 309   private Vector getVRamaHybTreatCy5( Vector ramaHybs ) {
2 26 Feb 07 jari 310     Vector vReturn = new Vector();
2 26 Feb 07 jari 311
2 26 Feb 07 jari 312     for( int h = 0; h < ramaHybs.size(); h ++ ) {
2 26 Feb 07 jari 313       RHyb hyb = ( RHyb ) ramaHybs.elementAt( h );
2 26 Feb 07 jari 314       if( hyb.controlCy3() ) {
2 26 Feb 07 jari 315         vReturn.add( hyb );
2 26 Feb 07 jari 316       }
2 26 Feb 07 jari 317     }
2 26 Feb 07 jari 318     
2 26 Feb 07 jari 319     return vReturn;
2 26 Feb 07 jari 320   }//
2 26 Feb 07 jari 321   
2 26 Feb 07 jari 322   
2 26 Feb 07 jari 323   /**
2 26 Feb 07 jari 324    * 
2 26 Feb 07 jari 325    * @param iGene
2 26 Feb 07 jari 326    * @param iHybKount
2 26 Feb 07 jari 327    * @param iOne
2 26 Feb 07 jari 328    * @param iTwo
2 26 Feb 07 jari 329    * @param iColorKount
2 26 Feb 07 jari 330    * @param B
2 26 Feb 07 jari 331    * @param minIter
2 26 Feb 07 jari 332    * @param dataType
2 26 Feb 07 jari 333    * @return
2 26 Feb 07 jari 334    */
2 26 Feb 07 jari 335   private String createMcMc( int iGene, int iHybKount, int iOne, int iTwo, 
2 26 Feb 07 jari 336       int iColorKount, int B, int minIter, int dataType ) {
2 26 Feb 07 jari 337     StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 338     sb.append( "bridge." );
2 26 Feb 07 jari 339     sb.append( BridgeGUI.R_VECTOR_NAME );
2 26 Feb 07 jari 340     sb.append( "<- bridge.2samples( " );
2 26 Feb 07 jari 341     sb.append( BridgeGUI.R_VECTOR_NAME );
2 26 Feb 07 jari 342     sb.append( "[ 1:" );
2 26 Feb 07 jari 343     sb.append( iGene );
2 26 Feb 07 jari 344     sb.append( " , c( 1:" );
2 26 Feb 07 jari 345     sb.append( iHybKount );
2 26 Feb 07 jari 346     sb.append( " )], " + BridgeGUI.R_VECTOR_NAME + "[ 1:" );
2 26 Feb 07 jari 347     sb.append( iGene );
2 26 Feb 07 jari 348     sb.append( ", c( " );
2 26 Feb 07 jari 349     sb.append( iTwo );
2 26 Feb 07 jari 350     sb.append( ":" );
2 26 Feb 07 jari 351     sb.append( iColorKount );
2 26 Feb 07 jari 352     sb.append( " )], B = " );
2 26 Feb 07 jari 353     sb.append( B );
2 26 Feb 07 jari 354     sb.append( ", min.iter = " );
2 26 Feb 07 jari 355     sb.append( minIter );
2 26 Feb 07 jari 356     sb.append( ", batch = 1, mcmc.obj = NULL, affy = " );
2 26 Feb 07 jari 357     if( dataType == IData.DATA_TYPE_TWO_INTENSITY ) {
2 26 Feb 07 jari 358       sb.append( "FALSE" );
2 26 Feb 07 jari 359     } else {
2 26 Feb 07 jari 360       sb.append( "TRUE" );
2 26 Feb 07 jari 361     }
2 26 Feb 07 jari 362     sb.append( ", verbose = TRUE )" );
2 26 Feb 07 jari 363     //System.out.println(sb.toString());
2 26 Feb 07 jari 364     return sb.toString();
2 26 Feb 07 jari 365     //return "mcmc.hiv <- bridge.2samples( hiv[ 1:10 , c( 1:2 )], hiv[ 1:10, c( 2:2 )], B = 21000, min.iter = 1000, batch = 1, mcmc.obj = NULL, affy = FALSE, verbose = TRUE )";
2 26 Feb 07 jari 366   }//createMcMc()
2 26 Feb 07 jari 367   
2 26 Feb 07 jari 368   
2 26 Feb 07 jari 369   /**
2 26 Feb 07 jari 370    * Creates Heat Maps of Significant and Non Significant genes
2 26 Feb 07 jari 371    * @param root
2 26 Feb 07 jari 372    * @param data
2 26 Feb 07 jari 373    * @param br
2 26 Feb 07 jari 374    * @return
2 26 Feb 07 jari 375    */
2 26 Feb 07 jari 376   private void createExpressionImages( DefaultMutableTreeNode root,
2 26 Feb 07 jari 377       IData data, BridgeResult br, String yNum, String yDenom ) {
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     DefaultMutableTreeNode expViewerNode = new DefaultMutableTreeNode( 
2 26 Feb 07 jari 380         "Expression Images" );
2 26 Feb 07 jari 381     DefaultMutableTreeNode cenViewerNode = new DefaultMutableTreeNode(
2 26 Feb 07 jari 382         "Expression Graphs" );
2 26 Feb 07 jari 383         DefaultMutableTreeNode tableNode = new DefaultMutableTreeNode("Table Views");
2 26 Feb 07 jari 384     
2 26 Feb 07 jari 385     Experiment exp = data.getExperiment();
2 26 Feb 07 jari 386     
2 26 Feb 07 jari 387     //create new clusters for sig/nonsig gene sets
2 26 Feb 07 jari 388     int[][] newClusters = this.createClusters( br );
2 26 Feb 07 jari 389     
2 26 Feb 07 jari 390     //create heat map viewers for sig/nonsig gene sets
2 26 Feb 07 jari 391     ExperimentViewer expViewer = new ExperimentViewer( exp, newClusters );
2 26 Feb 07 jari 392     expViewerNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", expViewer, new Integer(0))));
2 26 Feb 07 jari 393     expViewerNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", expViewer, new Integer(1))));
2 26 Feb 07 jari 394     
2 26 Feb 07 jari 395     //create centroid viewers for sig/nonsig gene sets
2 26 Feb 07 jari 396     BridgeCentroidViewer centViewer = new BridgeCentroidViewer( exp, newClusters, yNum, yDenom );
2 26 Feb 07 jari 397     centViewer.setMeans( this.calculateMeans( exp, br ) );
2 26 Feb 07 jari 398     cenViewerNode.add(new DefaultMutableTreeNode(new LeafInfo(
2 26 Feb 07 jari 399             "Significant Genes ", centViewer, new CentroidUserObject( 0, 
2 26 Feb 07 jari 400                 CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 401     cenViewerNode.add(new DefaultMutableTreeNode(new LeafInfo(
2 26 Feb 07 jari 402             "Non-significant Genes ", centViewer, new CentroidUserObject( 1, 
2 26 Feb 07 jari 403                 CentroidUserObject.VALUES_MODE))));
2 26 Feb 07 jari 404     //
2 26 Feb 07 jari 405     String[] headers = br.getHeaders();
2 26 Feb 07 jari 406     String[][] auxData = br.getAuxData();
2 26 Feb 07 jari 407         IViewer tabViewer = new ClusterTableViewer( exp, newClusters, data, headers, auxData );
2 26 Feb 07 jari 408         tableNode.add(new DefaultMutableTreeNode(new LeafInfo("Significant Genes ", tabViewer, new Integer(0))));
2 26 Feb 07 jari 409     tableNode.add(new DefaultMutableTreeNode(new LeafInfo("Non-significant Genes ", tabViewer, new Integer(1))));
2 26 Feb 07 jari 410     
2 26 Feb 07 jari 411     root.add( expViewerNode );
2 26 Feb 07 jari 412     root.add( cenViewerNode );
2 26 Feb 07 jari 413     root.add( tableNode );
2 26 Feb 07 jari 414   }//createViews()
2 26 Feb 07 jari 415   
2 26 Feb 07 jari 416   
2 26 Feb 07 jari 417   /**
2 26 Feb 07 jari 418    * clusters = int[ dataset index ][ row index ]
2 26 Feb 07 jari 419    * @param br
2 26 Feb 07 jari 420    * @return
2 26 Feb 07 jari 421    */
2 26 Feb 07 jari 422   private int[][] createClusters( BridgeResult br ) {
2 26 Feb 07 jari 423     int[][] toReturn = new int[ 2 ][];
2 26 Feb 07 jari 424     toReturn[ 0 ] = br.getSigIndices();
2 26 Feb 07 jari 425     toReturn[ 1 ] = br.getNonIndices();
2 26 Feb 07 jari 426     
2 26 Feb 07 jari 427     return toReturn;
2 26 Feb 07 jari 428   }//createClusters()
2 26 Feb 07 jari 429   
2 26 Feb 07 jari 430   
2 26 Feb 07 jari 431   /**
2 26 Feb 07 jari 432    * 
2 26 Feb 07 jari 433    * @param exp
2 26 Feb 07 jari 434    * @return
2 26 Feb 07 jari 435    */
2 26 Feb 07 jari 436   private float[][] calculateMeans( Experiment exp, BridgeResult br ) {
2 26 Feb 07 jari 437     int[] sigIndices = br.getSigIndices();
2 26 Feb 07 jari 438     int[] nonIndices = br.getNonIndices();
2 26 Feb 07 jari 439     float[][] ratios = exp.getValues();
2 26 Feb 07 jari 440     float[][] toReturn = new float[ 2 ][ ratios[ 0 ].length ];
2 26 Feb 07 jari 441     
2 26 Feb 07 jari 442     //loop through the hybs
2 26 Feb 07 jari 443     for( int h = 0; h < ratios[ 0 ].length; h ++ ) {
2 26 Feb 07 jari 444       //avg sig genes for each hyb
2 26 Feb 07 jari 445       float sigTotal = 0;
2 26 Feb 07 jari 446       float nonTotal = 0;
2 26 Feb 07 jari 447       
2 26 Feb 07 jari 448       //loop through the sig genes
2 26 Feb 07 jari 449       for( int i = 0; i < sigIndices.length; i ++ ) {
2 26 Feb 07 jari 450         sigTotal = sigTotal + ratios[ sigIndices[ i ] ][ h ];
2 26 Feb 07 jari 451       }//i
2 26 Feb 07 jari 452       
2 26 Feb 07 jari 453       float sigAvg = sigTotal / ( float ) sigIndices.length;
2 26 Feb 07 jari 454       toReturn[ 0 ][ h ] = sigAvg;
2 26 Feb 07 jari 455       
2 26 Feb 07 jari 456       //loop through the nonsig genes
2 26 Feb 07 jari 457       for( int i = 0; i < nonIndices.length; i ++ ) {
2 26 Feb 07 jari 458         nonTotal = nonTotal + ratios[ nonIndices[ i ] ][ h ];
2 26 Feb 07 jari 459       }
2 26 Feb 07 jari 460       
2 26 Feb 07 jari 461       float nonAvg = nonTotal / ( float ) nonIndices.length;
2 26 Feb 07 jari 462       toReturn [ 1 ][ h ] = nonAvg;
2 26 Feb 07 jari 463     }//h
2 26 Feb 07 jari 464     
2 26 Feb 07 jari 465     return toReturn;
2 26 Feb 07 jari 466   }//calculateMeans()
2 26 Feb 07 jari 467
2 26 Feb 07 jari 468
2 26 Feb 07 jari 469     /**
2 26 Feb 07 jari 470      * 
2 26 Feb 07 jari 471      * @param gamma1
2 26 Feb 07 jari 472      * @param gamma2
2 26 Feb 07 jari 473      * @param genes
2 26 Feb 07 jari 474      */
2 26 Feb 07 jari 475     private void onSave( double[] gamma1, double[] gamma2, String[] genes) {
2 26 Feb 07 jari 476         String currentPath = TMEV.getDataPath();
2 26 Feb 07 jari 477         RamaTextFileFilter textFilter = new RamaTextFileFilter();
2 26 Feb 07 jari 478         JFileChooser chooser = new JFileChooser(currentPath);
2 26 Feb 07 jari 479         chooser.addChoosableFileFilter(textFilter);
2 26 Feb 07 jari 480         if( chooser.showSaveDialog(new JFrame()) == JFileChooser.APPROVE_OPTION ) {
2 26 Feb 07 jari 481             File saveFile;
2 26 Feb 07 jari 482
2 26 Feb 07 jari 483             if( chooser.getFileFilter() == textFilter ) {
2 26 Feb 07 jari 484                 //make sure to add .txt
2 26 Feb 07 jari 485                 String path = chooser.getSelectedFile().getPath();
2 26 Feb 07 jari 486                 if( path.toLowerCase().endsWith("txt") ) {
2 26 Feb 07 jari 487                     //great, already ok
2 26 Feb 07 jari 488                     saveFile = new File(path);
2 26 Feb 07 jari 489                 } else {
2 26 Feb 07 jari 490                     //add it
2 26 Feb 07 jari 491                     String subPath;
2 26 Feb 07 jari 492                     int period = path.lastIndexOf(".");
2 26 Feb 07 jari 493                     if( period != -1 ) {
2 26 Feb 07 jari 494                         System.out.println("period  = -1");
2 26 Feb 07 jari 495                         subPath = path.substring(0, period);
2 26 Feb 07 jari 496                     } else {
2 26 Feb 07 jari 497                         subPath = path;
2 26 Feb 07 jari 498                     }
2 26 Feb 07 jari 499                     String newPath = subPath + ".txt";
2 26 Feb 07 jari 500                     saveFile = new File(newPath);
2 26 Feb 07 jari 501                 }
2 26 Feb 07 jari 502             } else {
2 26 Feb 07 jari 503                 saveFile = chooser.getSelectedFile();
2 26 Feb 07 jari 504             }
2 26 Feb 07 jari 505             StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 506             sb.append( "GeneName" );
2 26 Feb 07 jari 507             sb.append( BridgeGUI.TAB );
2 26 Feb 07 jari 508             sb.append( "RatioA" );
2 26 Feb 07 jari 509             sb.append( BridgeGUI.TAB );
2 26 Feb 07 jari 510             sb.append( "RatioB" );
2 26 Feb 07 jari 511             sb.append( BridgeGUI.END_LINE );
2 26 Feb 07 jari 512             
2 26 Feb 07 jari 513             for( int i = 0; i < gamma1.length; i++ ) {
2 26 Feb 07 jari 514               sb.append( genes[ i ] );
2 26 Feb 07 jari 515                 sb.append( BridgeGUI.TAB );
2 26 Feb 07 jari 516               sb.append( gamma1[ i ] );
2 26 Feb 07 jari 517                 sb.append( BridgeGUI.TAB );
2 26 Feb 07 jari 518               sb.append( gamma2[ i ] );
2 26 Feb 07 jari 519         sb.append( BridgeGUI.END_LINE );
2 26 Feb 07 jari 520             }
2 26 Feb 07 jari 521             
2 26 Feb 07 jari 522             this.writeFile(saveFile, sb.toString());
2 26 Feb 07 jari 523             
2 26 Feb 07 jari 524             //looks like it all went ok, save path
2 26 Feb 07 jari 525             this.updateDataPath( saveFile.getAbsolutePath() );
2 26 Feb 07 jari 526         } else {
2 26 Feb 07 jari 527             //System.out.println("User cancelled Gene List Save");
2 26 Feb 07 jari 528         }
2 26 Feb 07 jari 529     }//onSaveGeneList()
2 26 Feb 07 jari 530     
2 26 Feb 07 jari 531
2 26 Feb 07 jari 532   private void updateDataPath(String dataPath) {
2 26 Feb 07 jari 533     if (dataPath == null)
2 26 Feb 07 jari 534       return;
2 26 Feb 07 jari 535     String renderedSep = "/";
2 26 Feb 07 jari 536     String renderedPath = new String();
2 26 Feb 07 jari 537
2 26 Feb 07 jari 538     String sep = System.getProperty("file.separator");
2 26 Feb 07 jari 539     String lineSep = System.getProperty("line.separator");
2 26 Feb 07 jari 540
2 26 Feb 07 jari 541     StringTokenizer stok = new StringTokenizer(dataPath, sep);
2 26 Feb 07 jari 542
2 26 Feb 07 jari 543     this.dataPath = new String();
2 26 Feb 07 jari 544
2 26 Feb 07 jari 545     String str;
2 26 Feb 07 jari 546     while (stok.hasMoreTokens() && stok.countTokens() > 1) {
2 26 Feb 07 jari 547       str = stok.nextToken();
2 26 Feb 07 jari 548       renderedPath += str + renderedSep;
2 26 Feb 07 jari 549       this.dataPath += str + sep;
2 26 Feb 07 jari 550     }
2 26 Feb 07 jari 551     // sets the data path in config to render well
2 26 Feb 07 jari 552     TMEV.updateDataPath(renderedPath);
2 26 Feb 07 jari 553
2 26 Feb 07 jari 554     // sets variable to conform to OS spec.
2 26 Feb 07 jari 555     TMEV.setDataPath(this.dataPath);
2 26 Feb 07 jari 556   }
2 26 Feb 07 jari 557
2 26 Feb 07 jari 558
2 26 Feb 07 jari 559     /**
2 26 Feb 07 jari 560      * Write the String s to File f
2 26 Feb 07 jari 561      * 
2 26 Feb 07 jari 562      * @param f
2 26 Feb 07 jari 563      * @param s
2 26 Feb 07 jari 564      */
2 26 Feb 07 jari 565     private void writeFile(File f, String s) {
2 26 Feb 07 jari 566         try {
2 26 Feb 07 jari 567             FileWriter fw = new FileWriter(f);
2 26 Feb 07 jari 568             fw.write(s);
2 26 Feb 07 jari 569             fw.flush();
2 26 Feb 07 jari 570             fw.close();
2 26 Feb 07 jari 571         } catch( IOException e ) {
2 26 Feb 07 jari 572             e.printStackTrace();
2 26 Feb 07 jari 573         }
2 26 Feb 07 jari 574     }//writeFile()
2 26 Feb 07 jari 575   
2 26 Feb 07 jari 576   
2 26 Feb 07 jari 577   /**
2 26 Feb 07 jari 578    * Just un Log transforms a double array by base
2 26 Feb 07 jari 579    * @param log
2 26 Feb 07 jari 580    * @param base
2 26 Feb 07 jari 581    * @return
2 26 Feb 07 jari 582    */
2 26 Feb 07 jari 583   private double[] unLogify( double[] log, int base ) {
2 26 Feb 07 jari 584     double[] toReturn = new double[ log.length ];
2 26 Feb 07 jari 585     
2 26 Feb 07 jari 586     for( int i = 0; i < log.length; i ++ ) {
2 26 Feb 07 jari 587       double d = log[ i ];
2 26 Feb 07 jari 588       double y = Math.pow( 2, d );
2 26 Feb 07 jari 589       toReturn[ i ] = y;
2 26 Feb 07 jari 590     }
2 26 Feb 07 jari 591     
2 26 Feb 07 jari 592     return toReturn;
2 26 Feb 07 jari 593   }//unLogify()
2 26 Feb 07 jari 594   
2 26 Feb 07 jari 595   
2 26 Feb 07 jari 596   /**
2 26 Feb 07 jari 597    * Takes a connection string in the form ipaddress:port# and returns just the
2 26 Feb 07 jari 598    * port number part
2 26 Feb 07 jari 599    * @param connPort
2 26 Feb 07 jari 600    * @return
2 26 Feb 07 jari 601    */
2 26 Feb 07 jari 602   private int parseIPort( String connPort ) {
2 26 Feb 07 jari 603     if( connPort == null ) {
2 26 Feb 07 jari 604       return 6311;
2 26 Feb 07 jari 605     } else {
2 26 Feb 07 jari 606       int iColon = connPort.indexOf( ":" );
2 26 Feb 07 jari 607       if( iColon == -1 ) {
2 26 Feb 07 jari 608         return 6311;
2 26 Feb 07 jari 609       } else {
2 26 Feb 07 jari 610         int toReturn = Integer.parseInt( connPort.substring( iColon + 1 ) );
2 26 Feb 07 jari 611         return toReturn;
2 26 Feb 07 jari 612       }
2 26 Feb 07 jari 613     }
2 26 Feb 07 jari 614   }
2 26 Feb 07 jari 615   /**
2 26 Feb 07 jari 616    * Takes a connection string in the form ipaddress:port# and returns just the
2 26 Feb 07 jari 617    * ipaddress part
2 26 Feb 07 jari 618    * @param connPort
2 26 Feb 07 jari 619    * @return
2 26 Feb 07 jari 620    */
2 26 Feb 07 jari 621   private String parseSPort( String connPort ) {
2 26 Feb 07 jari 622     if( connPort == null ) {
2 26 Feb 07 jari 623       return "127.0.0.1";
2 26 Feb 07 jari 624     } else {
2 26 Feb 07 jari 625       int iColon = connPort.indexOf( ":" );
2 26 Feb 07 jari 626       if( iColon == -1 ) {
2 26 Feb 07 jari 627         return "127.0.0.1";
2 26 Feb 07 jari 628       } else {
2 26 Feb 07 jari 629         return connPort.substring( 0, iColon );
2 26 Feb 07 jari 630       }
2 26 Feb 07 jari 631     }
2 26 Feb 07 jari 632   }
2 26 Feb 07 jari 633   
2 26 Feb 07 jari 634   
2 26 Feb 07 jari 635   /**
2 26 Feb 07 jari 636    * Displays an error dialog
2 26 Feb 07 jari 637    * @param message
2 26 Feb 07 jari 638    */
2 26 Feb 07 jari 639   public void error( String message ) {
2 26 Feb 07 jari 640     JOptionPane.showMessageDialog( new JFrame(), 
2 26 Feb 07 jari 641         message, "Input Error", JOptionPane.ERROR_MESSAGE );
2 26 Feb 07 jari 642   }//end error()
2 26 Feb 07 jari 643   
2 26 Feb 07 jari 644   
2 26 Feb 07 jari 645   public void setYNum( String s ) {
2 26 Feb 07 jari 646     this.yNum = s;
2 26 Feb 07 jari 647   }
2 26 Feb 07 jari 648   public void setYDenom( String s ) {
2 26 Feb 07 jari 649     this.yDenom = s;
2 26 Feb 07 jari 650   }
2 26 Feb 07 jari 651 }//end class
2 26 Feb 07 jari 652 /*
2 26 Feb 07 jari 653   
2 26 Feb 07 jari 654   
2 26 Feb 07 jari 655   private String BridgeNonSwapString( IData data, Vector vBridgeHyb ) {
2 26 Feb 07 jari 656     StringBuffer sbTreat = new StringBuffer( BridgeGUI.R_VECTOR_NAME + " <- c(" );
2 26 Feb 07 jari 657     StringBuffer sbControl = new StringBuffer();
2 26 Feb 07 jari 658     
2 26 Feb 07 jari 659     //figure out which color is treated, which is control
2 26 Feb 07 jari 660     BridgeHyb firstHyb = ( BridgeHyb ) vBridgeHyb.elementAt( 0 );
2 26 Feb 07 jari 661     boolean controlCy3 = firstHyb.controlCy3();
2 26 Feb 07 jari 662     
2 26 Feb 07 jari 663     //loop through all the hybs
2 26 Feb 07 jari 664     for( int i = 0; i < vBridgeHyb.size(); i ++ ) {
2 26 Feb 07 jari 665       if( i > 0 ) { 
2 26 Feb 07 jari 666         sbTreat.append( "," );
2 26 Feb 07 jari 667         sbControl.append( "," );
2 26 Feb 07 jari 668       }
2 26 Feb 07 jari 669       
2 26 Feb 07 jari 670       BridgeHyb hyb = ( BridgeHyb ) vBridgeHyb.elementAt( i );
2 26 Feb 07 jari 671       int iHyb = hyb.getHybIndex();
2 26 Feb 07 jari 672       
2 26 Feb 07 jari 673       //loop through the genes
2 26 Feb 07 jari 674       int iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 675       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 676         if( g > 0 ) {
2 26 Feb 07 jari 677           sbTreat.append( "," );
2 26 Feb 07 jari 678           sbControl.append( "," );
2 26 Feb 07 jari 679         }
2 26 Feb 07 jari 680         
2 26 Feb 07 jari 681         float cy5 = data.getCY5( iHyb, g );
2 26 Feb 07 jari 682         float cy3 = data.getCY3( iHyb, g );
2 26 Feb 07 jari 683         
2 26 Feb 07 jari 684         if( controlCy3 ) {
2 26 Feb 07 jari 685           //treated is Cy5 for all hybs since they're all the same
2 26 Feb 07 jari 686           //sbTreat.append( data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 687           //sbControl.append( data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 688           sbTreat.append( cy5 );
2 26 Feb 07 jari 689           sbTreat.append( cy3 );
2 26 Feb 07 jari 690           //System.out.println( i + "," + g + ":" + data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 691         } else {
2 26 Feb 07 jari 692           //treated is Cy3 for all hybs since they're all the same
2 26 Feb 07 jari 693           //sbTreat.append( data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 694           //sbControl.append( data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 695           sbTreat.append( cy3 );
2 26 Feb 07 jari 696           sbTreat.append( cy5 );
2 26 Feb 07 jari 697           //System.out.println( i + "," + g + ":" + data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 698         }
2 26 Feb 07 jari 699       }//g
2 26 Feb 07 jari 700     }//i
2 26 Feb 07 jari 701     
2 26 Feb 07 jari 702     sbTreat.append( "," );
2 26 Feb 07 jari 703     sbTreat.append( sbControl );
2 26 Feb 07 jari 704     sbTreat.append( ")" );
2 26 Feb 07 jari 705     
2 26 Feb 07 jari 706     return sbTreat.toString();
2 26 Feb 07 jari 707   }//BridgeNonSwapString()
2 26 Feb 07 jari 708 //flip doesn't matter for bridge
2 26 Feb 07 jari 709 String sData =  this.BridgeNonSwapString( data, bhs.getVHyb() );
2 26 Feb 07 jari 710 int iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 711 int nbCol1 = 0;
2 26 Feb 07 jari 712 int iHybKount = bhs.getVHyb().size();
2 26 Feb 07 jari 713 int iColorKount = iHybKount * 2;
2 26 Feb 07 jari 714 int iOne = iHybKount;
2 26 Feb 07 jari 715 int iTwo = iHybKount + 1;
2 26 Feb 07 jari 716 */
2 26 Feb 07 jari 717 /*
2 26 Feb 07 jari 718 //should clear R
2 26 Feb 07 jari 719 rc.voidEval( "rm(" + BridgeGUI.R_VECTOR_NAME + " )" );
2 26 Feb 07 jari 720
2 26 Feb 07 jari 721 //load rama
2 26 Feb 07 jari 722 rc.voidEval( "library(bridge)" );
2 26 Feb 07 jari 723
2 26 Feb 07 jari 724 //load data as vector
2 26 Feb 07 jari 725 rc.voidEval( sData );
2 26 Feb 07 jari 726
2 26 Feb 07 jari 727 //reform vector data into matrix
2 26 Feb 07 jari 728 rc.voidEval( "dim(" + BridgeGUI.R_VECTOR_NAME + ") <- c(" + iGene + "," 
2 26 Feb 07 jari 729     + iColorKount + ")" );
2 26 Feb 07 jari 730
2 26 Feb 07 jari 731
2 26 Feb 07 jari 732 //call fit.model()
2 26 Feb 07 jari 733 rc.voidEval( this.createMcMc( iGene, iHybKount, iOne, iTwo, 
2 26 Feb 07 jari 734     iColorKount, B, minIter, dataType ) );
2 26 Feb 07 jari 735
2 26 Feb 07 jari 736 rc.voidEval( "gamma1<-mat.mean(mcmc.hiv$gamma1)[,1]" );
2 26 Feb 07 jari 737 rc.voidEval( "gamma2<-mat.mean(mcmc.hiv$gamma2)[,1]" );
2 26 Feb 07 jari 738
2 26 Feb 07 jari 739 //get normalized data vectors
2 26 Feb 07 jari 740 double[] gamma1 = rc.eval( "gamma1" ).asDoubleArray();
2 26 Feb 07 jari 741 double[] gamma2 = rc.eval( "gamma2" ).asDoubleArray();
2 26 Feb 07 jari 742 double[] pprob = rc.eval( "mcmc.hiv$post.p" ).asDoubleArray();
2 26 Feb 07 jari 743 */