mev-4.0.01/source/org/tigr/microarray/mev/r/Rama.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Jul 22, 2005
2 26 Feb 07 jari 3  */
2 26 Feb 07 jari 4 package org.tigr.microarray.mev.r;
2 26 Feb 07 jari 5
2 26 Feb 07 jari 6 import java.awt.Dimension;
2 26 Feb 07 jari 7 import java.awt.Toolkit;
2 26 Feb 07 jari 8 import java.io.File;
2 26 Feb 07 jari 9 import java.io.FileWriter;
2 26 Feb 07 jari 10 import java.io.IOException;
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.JPanel;
2 26 Feb 07 jari 17 import javax.swing.JProgressBar;
2 26 Feb 07 jari 18 import javax.swing.tree.DefaultMutableTreeNode;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 21 import org.tigr.microarray.mev.Manager;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.MultipleArrayMenubar;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.MultipleArrayViewer;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.SlideDataElement;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.LeafInfo;
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30 /**
2 26 Feb 07 jari 31  * @author iVu
2 26 Feb 07 jari 32  */
2 26 Feb 07 jari 33 public class Rama {
2 26 Feb 07 jari 34   public static String COMMA = ",";
2 26 Feb 07 jari 35   public static String END_LINE = "\r\n";
2 26 Feb 07 jari 36   public static String TAB = "\t";
2 26 Feb 07 jari 37   public static String R_VECTOR_NAME = "ramaData";
2 26 Feb 07 jari 38   
2 26 Feb 07 jari 39   private MultipleArrayViewer mav;
2 26 Feb 07 jari 40   private MultipleArrayMenubar menuBar;
2 26 Feb 07 jari 41   private IData data;
2 26 Feb 07 jari 42   private RamaInitDialog initDialog;
2 26 Feb 07 jari 43   
2 26 Feb 07 jari 44   private int B;
2 26 Feb 07 jari 45   private int minIter;
2 26 Feb 07 jari 46   private int iGene;
2 26 Feb 07 jari 47   
2 26 Feb 07 jari 48   private RconnectionManager rcMan;
2 26 Feb 07 jari 49   private Rconnection rc;
2 26 Feb 07 jari 50   
2 26 Feb 07 jari 51   
2 26 Feb 07 jari 52   /**
2 26 Feb 07 jari 53    * 
2 26 Feb 07 jari 54    * @param mavP
2 26 Feb 07 jari 55    * @param menuBarP
2 26 Feb 07 jari 56    */
2 26 Feb 07 jari 57   public Rama( MultipleArrayViewer mavP, MultipleArrayMenubar menuBarP ) {
2 26 Feb 07 jari 58     this.mav = mavP;
2 26 Feb 07 jari 59     this.menuBar = menuBarP;
2 26 Feb 07 jari 60       
2 26 Feb 07 jari 61     //gather up necessary data
2 26 Feb 07 jari 62     this.data = this.mav.getData();
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     //might as well verify that there is even enough data loaded to continue
2 26 Feb 07 jari 65     if( this.data.getFeaturesCount() < 2 ) {
2 26 Feb 07 jari 66       //not enough to normalize
2 26 Feb 07 jari 67       this.error( "The loaded dataset doesn't appear to be \"Ramalizable\"" 
2 26 Feb 07 jari 68           + "\r\nYou must have at least 2 replicates of each sample" );
2 26 Feb 07 jari 69     } else if( data.getDataType() == IData.DATA_TYPE_RATIO_ONLY ) {
2 26 Feb 07 jari 70       this.error( "Rama does not work on Ratio data.\nIt only works with Intensity data." );
2 26 Feb 07 jari 71     } else if( data.getDataType() == IData.DATA_TYPE_AFFY_MEAN ) {
2 26 Feb 07 jari 72       this.error( "Rama does not work on Ratio data.\nIt only works with Intensity data." );
2 26 Feb 07 jari 73     } else if( data.getDataType() == IData.DATA_TYPE_AFFY_MEDIAN ) {
2 26 Feb 07 jari 74       this.error( "Rama does not work on Ratio data.\nIt only works with Intensity data." );
2 26 Feb 07 jari 75     } else if( data.getDataType() == IData.DATA_TYPE_AFFY_REF ) {
2 26 Feb 07 jari 76       this.error( "Rama does not work on Ratio data.\nIt only works with Intensity data." );
2 26 Feb 07 jari 77     } else if( data.getDataType() == IData.DATA_TYPE_AFFY_ABS ) {
2 26 Feb 07 jari 78       //deal with Affy Data
2 26 Feb 07 jari 79       //System.out.println( "Affy Abs" );
2 26 Feb 07 jari 80       this.ramify( this.data, true );
2 26 Feb 07 jari 81     } else {
2 26 Feb 07 jari 82       this.ramify( this.data, false );
2 26 Feb 07 jari 83     }//end else - data looks like it may work
2 26 Feb 07 jari 84   }//constructor
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86   
2 26 Feb 07 jari 87   /**
2 26 Feb 07 jari 88    * 
2 26 Feb 07 jari 89    * @param data
2 26 Feb 07 jari 90    */
2 26 Feb 07 jari 91   private void ramify( IData data, boolean isAffy ) {
2 26 Feb 07 jari 92     //we need to gather up the data and format it for RAMA
2 26 Feb 07 jari 93     String[] hybNames = this.gatherHybNames( data );
2 26 Feb 07 jari 94     
2 26 Feb 07 jari 95     //deal with two-color and affy data differently
2 26 Feb 07 jari 96     if( isAffy ) {
2 26 Feb 07 jari 97       this.initDialog = new RamaInitDialog( this.mav.getFrame(), hybNames, IData.DATA_TYPE_AFFY_ABS );
2 26 Feb 07 jari 98     } else {
2 26 Feb 07 jari 99       this.initDialog = new RamaInitDialog( this.mav.getFrame(), hybNames, IData.DATA_TYPE_TWO_INTENSITY );
2 26 Feb 07 jari 100     }
2 26 Feb 07 jari 101     
2 26 Feb 07 jari 102     //make sure that the user clicked OK
2 26 Feb 07 jari 103     if( this.initDialog.showModal() == JOptionPane.OK_OPTION ) {
2 26 Feb 07 jari 104       //get the advanced parameters
2 26 Feb 07 jari 105       this.B = this.initDialog.getNumIter();
2 26 Feb 07 jari 106       this.minIter = this.initDialog.getBurnIn();
2 26 Feb 07 jari 107       boolean allOut = this.initDialog.getAllOut();
2 26 Feb 07 jari 108       String sConnPort = this.initDialog.getSelectedConnString();
2 26 Feb 07 jari 109       String sConn = this.parseSPort( sConnPort );
2 26 Feb 07 jari 110       int iPort = this.parseIPort( sConnPort );
2 26 Feb 07 jari 111       
2 26 Feb 07 jari 112       //Object to format MeV-IData structure into R data String
2 26 Feb 07 jari 113       RDataFormatter rDataFormatter = new RDataFormatter( data );
2 26 Feb 07 jari 114       
2 26 Feb 07 jari 115       //declare all the necessary variables for the mcmc
2 26 Feb 07 jari 116       String sData;
2 26 Feb 07 jari 117       int nbCol1;
2 26 Feb 07 jari 118       int iHybKount;
2 26 Feb 07 jari 119       int iColorKount;
2 26 Feb 07 jari 120       int iTwo;
2 26 Feb 07 jari 121       
2 26 Feb 07 jari 122       RHybSet rhs = this.initDialog.getRamaHybSet();
2 26 Feb 07 jari 123       
2 26 Feb 07 jari 124       //deal with affy and 2 color differently
2 26 Feb 07 jari 125       if( isAffy ) {  //this is an affy array
2 26 Feb 07 jari 126         sData =  rDataFormatter.rNonSwapString( Rama.R_VECTOR_NAME, rhs.getVRamaHyb() );
2 26 Feb 07 jari 127         this.iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 128         nbCol1 = 0;
2 26 Feb 07 jari 129         iHybKount = rhs.getVRamaHyb().size();
2 26 Feb 07 jari 130         iColorKount = iHybKount * 2;
2 26 Feb 07 jari 131         iTwo = iHybKount + 1;
2 26 Feb 07 jari 132       } else {  //this is a 2 color array
2 26 Feb 07 jari 133         if( rhs.isFlip() ) {  //dealing with a dye swap experiment
2 26 Feb 07 jari 134           //Split into color state
2 26 Feb 07 jari 135           Vector vTreatCy3 = this.getVRamaHybTreatCy3( rhs.getVRamaHyb() );
2 26 Feb 07 jari 136           Vector vTreatCy5 = this.getVRamaHybTreatCy5( rhs.getVRamaHyb() );
2 26 Feb 07 jari 137           
2 26 Feb 07 jari 138           //sData =  this.swapDataString( data, vTreatCy3, vTreatCy5 );
2 26 Feb 07 jari 139           sData = rDataFormatter.rSwapString( Rama.R_VECTOR_NAME, vTreatCy3, vTreatCy5 );
2 26 Feb 07 jari 140           this.iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 141           nbCol1 = vTreatCy3.size();
2 26 Feb 07 jari 142           iHybKount = vTreatCy3.size() + vTreatCy5.size();
2 26 Feb 07 jari 143           iColorKount = iHybKount * 2;
2 26 Feb 07 jari 144           iTwo = iHybKount + 1;
2 26 Feb 07 jari 145         } else {  //not dye swap
2 26 Feb 07 jari 146           //sData =  this.nonSwapDataString( data, rhs.getVRamaHyb() );
2 26 Feb 07 jari 147           sData = rDataFormatter.rNonSwapString( Rama.R_VECTOR_NAME, rhs.getVRamaHyb() );
2 26 Feb 07 jari 148           this.iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 149           nbCol1 = 0;
2 26 Feb 07 jari 150           iHybKount = rhs.getVRamaHyb().size();
2 26 Feb 07 jari 151           iColorKount = iHybKount * 2;
2 26 Feb 07 jari 152           iTwo = iHybKount + 1;
2 26 Feb 07 jari 153         }//end rhs.isFlip() else
2 26 Feb 07 jari 154       }//end if( isAffy )
2 26 Feb 07 jari 155       
2 26 Feb 07 jari 156       //display an inderterminate progress bar so user knows it's working
2 26 Feb 07 jari 157       String message = "As a reference, 4 arrays (640 genes) takes about half an hour";
2 26 Feb 07 jari 158       RProgress progress = new RProgress( this.mav.getFrame(), message );
2 26 Feb 07 jari 159       
2 26 Feb 07 jari 160       //try to get a connection
2 26 Feb 07 jari 161       this.rcMan = new RconnectionManager( this.mav.getFrame(), sConn, iPort );
2 26 Feb 07 jari 162       this.rc = this.rcMan.getConnection();
2 26 Feb 07 jari 163       
2 26 Feb 07 jari 164       //don't continue if we can't get a connection
2 26 Feb 07 jari 165       if( rc != null ) {
2 26 Feb 07 jari 166         //prepare all the R command strings
2 26 Feb 07 jari 167         String sClear = "rm( " + Rama.R_VECTOR_NAME + " )";
2 26 Feb 07 jari 168         String sLibrary = "library(rama)";
2 26 Feb 07 jari 169         String sReform = "dim(" + Rama.R_VECTOR_NAME + ") <- c(" + iGene + "," + iColorKount + ")";
2 26 Feb 07 jari 170         String sMcmc;
2 26 Feb 07 jari 171         if( rhs.isFlip() ) {
2 26 Feb 07 jari 172           sMcmc = this.createMcMc( allOut, iGene, iHybKount, iTwo, iColorKount, B, minIter, nbCol1, true );
2 26 Feb 07 jari 173         } else {
2 26 Feb 07 jari 174           sMcmc = this.createMcMc( allOut, iGene, iHybKount, iTwo, iColorKount, B, minIter, nbCol1, false );
2 26 Feb 07 jari 175         }
2 26 Feb 07 jari 176         String sAvgGamma1 = "gamma1<-mat.mean(mcmc." + Rama.R_VECTOR_NAME + "$gamma1)[,1]";
2 26 Feb 07 jari 177         String sAvgGamma2 = "gamma2<-mat.mean(mcmc." + Rama.R_VECTOR_NAME + "$gamma2)[,1]";
2 26 Feb 07 jari 178         String sQLo = "mcmc." + Rama.R_VECTOR_NAME + "$q.low";
2 26 Feb 07 jari 179         String sQUp = "mcmc." + Rama.R_VECTOR_NAME + "$q.up";
2 26 Feb 07 jari 180         String sShift = "mcmc." + Rama.R_VECTOR_NAME + "$shift";
2 26 Feb 07 jari 181         
2 26 Feb 07 jari 182         //run the R process in its own thread through a SwingWorker object
2 26 Feb 07 jari 183             final RSwingWorker rThread = new RSwingWorker( rc, sClear, 
2 26 Feb 07 jari 184                 sLibrary, sData, sReform, sMcmc, allOut, sAvgGamma1, 
2 26 Feb 07 jari 185             sAvgGamma2, sQLo, sQUp, sShift, progress, this );
2 26 Feb 07 jari 186             rThread.start();
2 26 Feb 07 jari 187       } else {  //end if( rc != null )
2 26 Feb 07 jari 188         //couldn't get a connection, kill everything
2 26 Feb 07 jari 189         progress.kill();
2 26 Feb 07 jari 190         this.error( "MeV could not establish a connection with Rserve" );
2 26 Feb 07 jari 191         System.out.println( "MeV could not establish a connection with Rserve" );
2 26 Feb 07 jari 192       }
2 26 Feb 07 jari 193     }//end if( RamaInitDialog.showModal == JOptionPane.OK_OPTION )
2 26 Feb 07 jari 194   }//ramaTwoIntensityData()
2 26 Feb 07 jari 195   
2 26 Feb 07 jari 196   
2 26 Feb 07 jari 197   /**
2 26 Feb 07 jari 198    * 
2 26 Feb 07 jari 199    * @param worker
2 26 Feb 07 jari 200    * @param result
2 26 Feb 07 jari 201    */
2 26 Feb 07 jari 202   public void fireThreadFinished( RSwingWorker worker, RamaResult result ) {
2 26 Feb 07 jari 203     //check to see if it went ok
2 26 Feb 07 jari 204     if( worker.isOk() ) {
2 26 Feb 07 jari 205       //need to know the gene annotation data
2 26 Feb 07 jari 206       String[] geneNames = new String[ this.iGene ];
2 26 Feb 07 jari 207       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 208         geneNames[ g ] = data.getGeneName( g );
2 26 Feb 07 jari 209       }//g
2 26 Feb 07 jari 210       
2 26 Feb 07 jari 211       //see if there were any non null genenames
2 26 Feb 07 jari 212       for( int i = 0; i < geneNames.length; i ++ ) {
2 26 Feb 07 jari 213         if( !geneNames[ i ].equalsIgnoreCase( "" ) ) {
2 26 Feb 07 jari 214           result.setGenes( geneNames );
2 26 Feb 07 jari 215         }
2 26 Feb 07 jari 216       }//i
2 26 Feb 07 jari 217       result.setB( this.B );
2 26 Feb 07 jari 218       result.setMinIter( this.minIter );
2 26 Feb 07 jari 219       
2 26 Feb 07 jari 220       //save
2 26 Feb 07 jari 221       result.saveRamaResult( this.mav.getFrame() );
2 26 Feb 07 jari 222           
2 26 Feb 07 jari 223           //seemed to have worked so save the connection strings
2 26 Feb 07 jari 224           if( initDialog.connAdded() ) {
2 26 Feb 07 jari 225             TMEV.updateRPath( this.initDialog.getRPathToWrite() );
2 26 Feb 07 jari 226           }
2 26 Feb 07 jari 227       
2 26 Feb 07 jari 228           //close old mav, open new one with results
2 26 Feb 07 jari 229       MultipleArrayViewer newMav = this.spawnNewMav( data, result.getGamma1(), 
2 26 Feb 07 jari 230           result.getGamma2(), result.getGenes(), result.getShift() );
2 26 Feb 07 jari 231       //RamaSummaryViewer sumViewer = new RamaSummaryViewer( result.getShift(), 
2 26 Feb 07 jari 232           //this.B, this.minIter, rc, newMav.getFrame() );
2 26 Feb 07 jari 233       RamaSummaryViewer sumViewer = new RamaSummaryViewer( result );
2 26 Feb 07 jari 234       LeafInfo li = new LeafInfo( "Rama Summary", sumViewer );
2 26 Feb 07 jari 235       DefaultMutableTreeNode node = new DefaultMutableTreeNode( "Rama" );
2 26 Feb 07 jari 236       node.add( new DefaultMutableTreeNode( li ) );
2 26 Feb 07 jari 237       newMav.addAnalysisResult( node );
2 26 Feb 07 jari 238     }//worker.isOK()
2 26 Feb 07 jari 239   }//fireThreadFinished()
2 26 Feb 07 jari 240   
2 26 Feb 07 jari 241   
2 26 Feb 07 jari 242   /**
2 26 Feb 07 jari 243    * 
2 26 Feb 07 jari 244    * @param allOut
2 26 Feb 07 jari 245    * @param iGene
2 26 Feb 07 jari 246    * @param iHybKount
2 26 Feb 07 jari 247    * @param iTwo
2 26 Feb 07 jari 248    * @param iColorKount
2 26 Feb 07 jari 249    * @param B
2 26 Feb 07 jari 250    * @param minIter
2 26 Feb 07 jari 251    * @param nbCol1
2 26 Feb 07 jari 252    * @param isDyeSwap
2 26 Feb 07 jari 253    * @return
2 26 Feb 07 jari 254    */
2 26 Feb 07 jari 255   private String createMcMc( boolean allOut, int iGene, int iHybKount, int iTwo, 
2 26 Feb 07 jari 256       int iColorKount, int B, int minIter, int nbCol1, boolean isDyeSwap ) {
2 26 Feb 07 jari 257     StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 258     sb.append( "mcmc." + Rama.R_VECTOR_NAME + " <- fit.model( " + Rama.R_VECTOR_NAME + "[ 1:" );
2 26 Feb 07 jari 259     sb.append( iGene );
2 26 Feb 07 jari 260     sb.append( " , c( 1:" );
2 26 Feb 07 jari 261     sb.append( iHybKount );
2 26 Feb 07 jari 262     sb.append( " )], " + Rama.R_VECTOR_NAME + "[ 1:" );
2 26 Feb 07 jari 263     sb.append( iGene );
2 26 Feb 07 jari 264     sb.append( ", c( " );
2 26 Feb 07 jari 265     sb.append( iTwo );
2 26 Feb 07 jari 266     sb.append( ":" );
2 26 Feb 07 jari 267     sb.append( iColorKount );
2 26 Feb 07 jari 268     sb.append( " )], B = " );
2 26 Feb 07 jari 269     sb.append( B );
2 26 Feb 07 jari 270     sb.append( ", min.iter = " );
2 26 Feb 07 jari 271     sb.append( minIter );
2 26 Feb 07 jari 272     sb.append( ", batch = 1, shift = NULL, mcmc.obj = NULL, dye.swap = " );
2 26 Feb 07 jari 273     //sb.append( ", batch = 1, shift = 30, mcmc.obj = NULL, dye.swap = " );
2 26 Feb 07 jari 274     //System.out.println("Dev Shift = 30");
2 26 Feb 07 jari 275     if( isDyeSwap ) {
2 26 Feb 07 jari 276       sb.append( "TRUE" );
2 26 Feb 07 jari 277       sb.append( ", nb.col1 = " );
2 26 Feb 07 jari 278       sb.append( nbCol1 );
2 26 Feb 07 jari 279     } else {
2 26 Feb 07 jari 280       sb.append( "FALSE" );
2 26 Feb 07 jari 281     }
2 26 Feb 07 jari 282     if( allOut ) {
2 26 Feb 07 jari 283       sb.append( ", all.out = TRUE" );
2 26 Feb 07 jari 284     } else {
2 26 Feb 07 jari 285       sb.append( ", all.out = FALSE" );
2 26 Feb 07 jari 286     }
2 26 Feb 07 jari 287     sb.append( ")" );
2 26 Feb 07 jari 288     //System.out.println(sb.toString());
2 26 Feb 07 jari 289     return sb.toString();
2 26 Feb 07 jari 290   }//createMcMc()
2 26 Feb 07 jari 291   
2 26 Feb 07 jari 292   
2 26 Feb 07 jari 293   /**
2 26 Feb 07 jari 294    * 
2 26 Feb 07 jari 295    * @param data
2 26 Feb 07 jari 296    * @return
2 26 Feb 07 jari 297    */
2 26 Feb 07 jari 298   private String[] gatherHybNames( IData data ) {
2 26 Feb 07 jari 299     String[] hybNames = new String[ data.getFeaturesCount() ];
2 26 Feb 07 jari 300     for( int h = 0; h < hybNames.length; h ++ ) {
2 26 Feb 07 jari 301       hybNames[ h ] = data.getFullSampleName( h );
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303     return hybNames;
2 26 Feb 07 jari 304   }//gatherHybNames()
2 26 Feb 07 jari 305   
2 26 Feb 07 jari 306   
2 26 Feb 07 jari 307   /**
2 26 Feb 07 jari 308    * 
2 26 Feb 07 jari 309    * @return
2 26 Feb 07 jari 310    */
2 26 Feb 07 jari 311   private JProgressBar createProgress(  ) {
2 26 Feb 07 jari 312     //create a progressbar
2 26 Feb 07 jari 313     JProgressBar bar = new JProgressBar();
2 26 Feb 07 jari 314     bar.setString( "" );
2 26 Feb 07 jari 315     bar.setIndeterminate( true );
2 26 Feb 07 jari 316     bar.repaint();
2 26 Feb 07 jari 317     
2 26 Feb 07 jari 318     JPanel barPanel = new JPanel();
2 26 Feb 07 jari 319     barPanel.add( bar );
2 26 Feb 07 jari 320     barPanel.setSize( 200, 100 );
2 26 Feb 07 jari 321     
2 26 Feb 07 jari 322         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 323         JFrame frame = new JFrame( "Talking to R" );
2 26 Feb 07 jari 324     frame.setSize( 300, 200 );
2 26 Feb 07 jari 325     frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
2 26 Feb 07 jari 326     frame.setLocation( ( screenSize.width - frame.getSize().width)/2, 
2 26 Feb 07 jari 327     ( screenSize.height - frame.getSize().height)/2 );
2 26 Feb 07 jari 328     frame.setContentPane( barPanel );
2 26 Feb 07 jari 329     frame.show();
2 26 Feb 07 jari 330     
2 26 Feb 07 jari 331     return bar;
2 26 Feb 07 jari 332   }//createProgress()
2 26 Feb 07 jari 333   
2 26 Feb 07 jari 334   
2 26 Feb 07 jari 335   /**
2 26 Feb 07 jari 336    * 
2 26 Feb 07 jari 337    * @param gamma1
2 26 Feb 07 jari 338    * @param gamma2
2 26 Feb 07 jari 339    * @param genes
2 26 Feb 07 jari 340    */
2 26 Feb 07 jari 341   private MultipleArrayViewer spawnNewMav( IData data, double[] gamma1, double[] gamma2, 
2 26 Feb 07 jari 342       String[] genes, double shift ) {
2 26 Feb 07 jari 343     //get the field names before they're cleared from creating a new mav
2 26 Feb 07 jari 344     //String[] currentFieldNames = TMEV.getFieldNames();
2 26 Feb 07 jari 345     String[] currentFieldNames = data.getFieldNames();
2 26 Feb 07 jari 346     
2 26 Feb 07 jari 347     //create the new mav
2 26 Feb 07 jari 348     Manager.createNewMultipleArrayViewer( 20, 20 );
2 26 Feb 07 jari 349     
2 26 Feb 07 jari 350     //reset the fieldnames
2 26 Feb 07 jari 351     //EH field names are set in SlideData now.
2 26 Feb 07 jari 352     //TMEV.setFieldNames( currentFieldNames );
2 26 Feb 07 jari 353     
2 26 Feb 07 jari 354     //un log2 transform the ramafied intensities
2 26 Feb 07 jari 355     double[] norm1 = this.unLogify( gamma1, 2 );
2 26 Feb 07 jari 356     double[] norm2 = this.unLogify( gamma2, 2 );
2 26 Feb 07 jari 357     //double[] norm1 = gamma1;
2 26 Feb 07 jari 358     //double[] norm2 = gamma2;
2 26 Feb 07 jari 359     
2 26 Feb 07 jari 360     //array to hold SlideData objects for mav
2 26 Feb 07 jari 361     ISlideData[] features = new ISlideData[ 1 ];
2 26 Feb 07 jari 362     
2 26 Feb 07 jari 363     //SlideData will be iNumGenes (rows) by 1 column
2 26 Feb 07 jari 364     SlideData slideData = new SlideData( gamma1.length,1 );
2 26 Feb 07 jari 365     //EH
2 26 Feb 07 jari 366     slideData.setFieldNames(currentFieldNames);
2 26 Feb 07 jari 367     
2 26 Feb 07 jari 368     //loop through the genes
2 26 Feb 07 jari 369     for( int i = 0; i < norm1.length; i ++ ) {
2 26 Feb 07 jari 370       int[] rows = new int[ 3 ];
2 26 Feb 07 jari 371       int[] cols = new int[ 3 ];
2 26 Feb 07 jari 372       float[] intensities = new float[ 2 ];
2 26 Feb 07 jari 373       //[ 0 ] is R, [ 1 ] is MR, [ 2 ] is SR
2 26 Feb 07 jari 374       rows[ 0 ] = ( i + 1 );
2 26 Feb 07 jari 375       rows[ 1 ] = 1;
2 26 Feb 07 jari 376       rows[ 2 ] = 0;
2 26 Feb 07 jari 377       cols[ 0 ] = 1;
2 26 Feb 07 jari 378       cols[ 1 ] = 1;
2 26 Feb 07 jari 379       cols[ 2 ] = 0;
2 26 Feb 07 jari 380       //intensities[ 0 ] is Cy3, [ 1 ] is Cy5
2 26 Feb 07 jari 381       intensities[ 0 ] = ( float ) norm1[ i ];
2 26 Feb 07 jari 382       intensities[ 1 ] = ( float ) norm2[ i ];
2 26 Feb 07 jari 383       
2 26 Feb 07 jari 384       //take care of annotations
2 26 Feb 07 jari 385       String[] extraFields = new String[ currentFieldNames.length ];
2 26 Feb 07 jari 386       SlideDataElement loadedSDE = ( SlideDataElement ) data.getSlideDataElement( 0, i );
2 26 Feb 07 jari 387       for( int e = 0; e < extraFields.length; e ++ ) {
2 26 Feb 07 jari 388         extraFields[ e ] = loadedSDE.getFieldAt( e );
2 26 Feb 07 jari 389       }
2 26 Feb 07 jari 390       
2 26 Feb 07 jari 391       SlideDataElement sde = new SlideDataElement( data.getUniqueId( i ), 
2 26 Feb 07 jari 392           rows, cols, intensities, extraFields );
2 26 Feb 07 jari 393       slideData.add( sde );
2 26 Feb 07 jari 394     }
2 26 Feb 07 jari 395     
2 26 Feb 07 jari 396     features[ 0 ] = slideData;
2 26 Feb 07 jari 397     features[ 0 ].setSlideFileName( "Rama Intensities" );
2 26 Feb 07 jari 398     features[ 0 ].setSlideDataName( "Rama Intensities" );
2 26 Feb 07 jari 399     
2 26 Feb 07 jari 400     MultipleArrayViewer newMav = ( MultipleArrayViewer ) Manager.getLastComponent();
2 26 Feb 07 jari 401     newMav.fireDataLoaded( features, IData.DATA_TYPE_TWO_INTENSITY );
2 26 Feb 07 jari 402     this.mav.getFrame().dispose();
2 26 Feb 07 jari 403     return newMav;
2 26 Feb 07 jari 404   }//spawnNewMav()
2 26 Feb 07 jari 405   
2 26 Feb 07 jari 406   
2 26 Feb 07 jari 407   /**
2 26 Feb 07 jari 408    * Takes a connection string in the form ipaddress:port# and returns just the
2 26 Feb 07 jari 409    * port number part
2 26 Feb 07 jari 410    * @param connPort
2 26 Feb 07 jari 411    * @return
2 26 Feb 07 jari 412    */
2 26 Feb 07 jari 413   private int parseIPort( String connPort ) {
2 26 Feb 07 jari 414     if( connPort == null ) {
2 26 Feb 07 jari 415       return 6311;
2 26 Feb 07 jari 416     } else {
2 26 Feb 07 jari 417       int iColon = connPort.indexOf( ":" );
2 26 Feb 07 jari 418       if( iColon == -1 ) {
2 26 Feb 07 jari 419         return 6311;
2 26 Feb 07 jari 420       } else {
2 26 Feb 07 jari 421         int toReturn = Integer.parseInt( connPort.substring( iColon + 1 ) );
2 26 Feb 07 jari 422         return toReturn;
2 26 Feb 07 jari 423       }
2 26 Feb 07 jari 424     }
2 26 Feb 07 jari 425   }
2 26 Feb 07 jari 426   /**
2 26 Feb 07 jari 427    * Takes a connection string in the form ipaddress:port# and returns just the
2 26 Feb 07 jari 428    * ipaddress part
2 26 Feb 07 jari 429    * @param connPort
2 26 Feb 07 jari 430    * @return
2 26 Feb 07 jari 431    */
2 26 Feb 07 jari 432   private String parseSPort( String connPort ) {
2 26 Feb 07 jari 433     if( connPort == null ) {
2 26 Feb 07 jari 434       return "127.0.0.1";
2 26 Feb 07 jari 435     } else {
2 26 Feb 07 jari 436       int iColon = connPort.indexOf( ":" );
2 26 Feb 07 jari 437       if( iColon == -1 ) {
2 26 Feb 07 jari 438         return "127.0.0.1";
2 26 Feb 07 jari 439       } else {
2 26 Feb 07 jari 440         return connPort.substring( 0, iColon );
2 26 Feb 07 jari 441       }
2 26 Feb 07 jari 442     }
2 26 Feb 07 jari 443   }
2 26 Feb 07 jari 444   
2 26 Feb 07 jari 445   
2 26 Feb 07 jari 446   
2 26 Feb 07 jari 447   /**
2 26 Feb 07 jari 448    * Creates a Vector of RamaHybs where: treated-Cy3 | control-Cy5
2 26 Feb 07 jari 449    * @return
2 26 Feb 07 jari 450    */
2 26 Feb 07 jari 451   private Vector getVRamaHybTreatCy3( Vector ramaHybs ) {
2 26 Feb 07 jari 452     Vector vReturn = new Vector();
2 26 Feb 07 jari 453     
2 26 Feb 07 jari 454     for( int h = 0; h < ramaHybs.size(); h ++ ) {
2 26 Feb 07 jari 455       RHyb hyb = ( RHyb ) ramaHybs.elementAt( h );
2 26 Feb 07 jari 456       if( ! hyb.controlCy3() ) {
2 26 Feb 07 jari 457         vReturn.add( hyb );
2 26 Feb 07 jari 458       }
2 26 Feb 07 jari 459     }
2 26 Feb 07 jari 460     
2 26 Feb 07 jari 461     return vReturn;
2 26 Feb 07 jari 462   }
2 26 Feb 07 jari 463   /**
2 26 Feb 07 jari 464    * Creates a Vector of RamaHybs where: control-Cy3 | treated-Cy5
2 26 Feb 07 jari 465    * @return
2 26 Feb 07 jari 466    */
2 26 Feb 07 jari 467   private Vector getVRamaHybTreatCy5( Vector ramaHybs ) {
2 26 Feb 07 jari 468     Vector vReturn = new Vector();
2 26 Feb 07 jari 469
2 26 Feb 07 jari 470     for( int h = 0; h < ramaHybs.size(); h ++ ) {
2 26 Feb 07 jari 471       RHyb hyb = ( RHyb ) ramaHybs.elementAt( h );
2 26 Feb 07 jari 472       if( hyb.controlCy3() ) {
2 26 Feb 07 jari 473         vReturn.add( hyb );
2 26 Feb 07 jari 474       }
2 26 Feb 07 jari 475     }
2 26 Feb 07 jari 476     
2 26 Feb 07 jari 477     return vReturn;
2 26 Feb 07 jari 478   }//
2 26 Feb 07 jari 479   
2 26 Feb 07 jari 480   
2 26 Feb 07 jari 481   /**
2 26 Feb 07 jari 482    * Just un Log transforms a double array by base
2 26 Feb 07 jari 483    * @param log
2 26 Feb 07 jari 484    * @param base
2 26 Feb 07 jari 485    * @return
2 26 Feb 07 jari 486    */
2 26 Feb 07 jari 487   private double[] unLogify( double[] log, int base ) {
2 26 Feb 07 jari 488     double[] toReturn = new double[ log.length ];
2 26 Feb 07 jari 489     
2 26 Feb 07 jari 490     for( int i = 0; i < log.length; i ++ ) {
2 26 Feb 07 jari 491       double d = log[ i ];
2 26 Feb 07 jari 492       double y = Math.pow( 2, d );
2 26 Feb 07 jari 493       toReturn[ i ] = y;
2 26 Feb 07 jari 494     }
2 26 Feb 07 jari 495     
2 26 Feb 07 jari 496     return toReturn;
2 26 Feb 07 jari 497   }//unLogify()
2 26 Feb 07 jari 498
2 26 Feb 07 jari 499
2 26 Feb 07 jari 500     /**
2 26 Feb 07 jari 501      * 
2 26 Feb 07 jari 502      * @param gamma1
2 26 Feb 07 jari 503      * @param gamma2
2 26 Feb 07 jari 504      * @param genes
2 26 Feb 07 jari 505      */
2 26 Feb 07 jari 506     private void onSave( double[] gamma1, double[] gamma2, double[] qLo, 
2 26 Feb 07 jari 507         double[] qUp, boolean allOut, String[] genes) {
2 26 Feb 07 jari 508         String currentPath = TMEV.getDataPath();
2 26 Feb 07 jari 509         RamaTextFileFilter textFilter = new RamaTextFileFilter();
2 26 Feb 07 jari 510         JFileChooser chooser = new JFileChooser(currentPath);
2 26 Feb 07 jari 511         chooser.addChoosableFileFilter(textFilter);
2 26 Feb 07 jari 512         if( chooser.showSaveDialog(this.mav.getFrame()) == JFileChooser.APPROVE_OPTION ) {
2 26 Feb 07 jari 513             File saveFile;
2 26 Feb 07 jari 514
2 26 Feb 07 jari 515             if( chooser.getFileFilter() == textFilter ) {
2 26 Feb 07 jari 516                 //make sure to add .txt
2 26 Feb 07 jari 517                 String path = chooser.getSelectedFile().getPath();
2 26 Feb 07 jari 518                 //System.out.println( "path" + path );
2 26 Feb 07 jari 519                 if( path.toLowerCase().endsWith("txt") ) {
2 26 Feb 07 jari 520                     //great, already ok
2 26 Feb 07 jari 521                     saveFile = new File(path);
2 26 Feb 07 jari 522                 } else {
2 26 Feb 07 jari 523                     //add it
2 26 Feb 07 jari 524                     String subPath;
2 26 Feb 07 jari 525                     int period = path.lastIndexOf(".txt");
2 26 Feb 07 jari 526                     //System.out.println( "period:" + period );
2 26 Feb 07 jari 527                     if( period != -1 ) {
2 26 Feb 07 jari 528                         //System.out.println("period found");
2 26 Feb 07 jari 529                         subPath = path.substring(0, period);
2 26 Feb 07 jari 530                     } else {
2 26 Feb 07 jari 531                         //System.out.println("period not found");
2 26 Feb 07 jari 532                         subPath = path;
2 26 Feb 07 jari 533                     }
2 26 Feb 07 jari 534                     String newPath = subPath + ".txt";
2 26 Feb 07 jari 535                     //System.out.println( "newPath:" + newPath );
2 26 Feb 07 jari 536                     saveFile = new File(newPath);
2 26 Feb 07 jari 537                 }
2 26 Feb 07 jari 538             } else {
2 26 Feb 07 jari 539                 saveFile = chooser.getSelectedFile();
2 26 Feb 07 jari 540             }
2 26 Feb 07 jari 541             StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 542             sb.append( "GeneName" );
2 26 Feb 07 jari 543             sb.append( Rama.TAB );
2 26 Feb 07 jari 544             sb.append( "IntensityA" );
2 26 Feb 07 jari 545             sb.append( Rama.TAB );
2 26 Feb 07 jari 546             sb.append( "IntensityB" );
2 26 Feb 07 jari 547             if( allOut ) {
2 26 Feb 07 jari 548               sb.append( Rama.TAB );
2 26 Feb 07 jari 549               sb.append( "qLow" );
2 26 Feb 07 jari 550               sb.append( Rama.TAB );
2 26 Feb 07 jari 551               sb.append( "qUp" );
2 26 Feb 07 jari 552             }
2 26 Feb 07 jari 553             sb.append( Rama.END_LINE );
2 26 Feb 07 jari 554             
2 26 Feb 07 jari 555             for( int i = 0; i < genes.length; i++ ) {
2 26 Feb 07 jari 556               sb.append( genes[ i ] );
2 26 Feb 07 jari 557                 sb.append( Rama.TAB );
2 26 Feb 07 jari 558               sb.append( gamma1[ i ] );
2 26 Feb 07 jari 559                 sb.append( Rama.TAB );
2 26 Feb 07 jari 560               sb.append( gamma2[ i ] );
2 26 Feb 07 jari 561               if( allOut ) {
2 26 Feb 07 jari 562                 sb.append( Rama.TAB );
2 26 Feb 07 jari 563                 sb.append( qLo[ i ] );
2 26 Feb 07 jari 564                 sb.append( Rama.TAB );
2 26 Feb 07 jari 565                 sb.append( qUp[ i ] );
2 26 Feb 07 jari 566               }
2 26 Feb 07 jari 567         sb.append( Rama.END_LINE );
2 26 Feb 07 jari 568             }
2 26 Feb 07 jari 569             
2 26 Feb 07 jari 570             this.writeFile(saveFile, sb.toString());
2 26 Feb 07 jari 571         } else {
2 26 Feb 07 jari 572             //System.out.println("User cancelled Gene List Save");
2 26 Feb 07 jari 573         }
2 26 Feb 07 jari 574     }//onSaveGeneList()
2 26 Feb 07 jari 575
2 26 Feb 07 jari 576
2 26 Feb 07 jari 577     /**
2 26 Feb 07 jari 578      * Write the String s to File f
2 26 Feb 07 jari 579      * 
2 26 Feb 07 jari 580      * @param f
2 26 Feb 07 jari 581      * @param s
2 26 Feb 07 jari 582      */
2 26 Feb 07 jari 583     private void writeFile(File f, String s) {
2 26 Feb 07 jari 584         try {
2 26 Feb 07 jari 585             FileWriter fw = new FileWriter(f);
2 26 Feb 07 jari 586             fw.write(s);
2 26 Feb 07 jari 587             fw.flush();
2 26 Feb 07 jari 588             fw.close();
2 26 Feb 07 jari 589         } catch( IOException e ) {
2 26 Feb 07 jari 590             e.printStackTrace();
2 26 Feb 07 jari 591         }
2 26 Feb 07 jari 592     }//writeFile()
2 26 Feb 07 jari 593   
2 26 Feb 07 jari 594   
2 26 Feb 07 jari 595   /**
2 26 Feb 07 jari 596    * Transposes the ith and jth elements of a 2D double[ i ][ j ] matrix
2 26 Feb 07 jari 597    * @param m
2 26 Feb 07 jari 598    * @return
2 26 Feb 07 jari 599    */
2 26 Feb 07 jari 600   private float[][] transpose( float[][] m ) {
2 26 Feb 07 jari 601     float[][] toReturn = new float[ m[ 0 ].length ][ m.length ];
2 26 Feb 07 jari 602     
2 26 Feb 07 jari 603     for( int i = 0; i < m.length; i ++ ) {
2 26 Feb 07 jari 604       for( int j = 0; j < m[ 0 ].length; j ++ ) {
2 26 Feb 07 jari 605         toReturn[ j ][ i ] = m[ i ][ j ];
2 26 Feb 07 jari 606       }
2 26 Feb 07 jari 607     }
2 26 Feb 07 jari 608     
2 26 Feb 07 jari 609     return toReturn;
2 26 Feb 07 jari 610   }//end transpose()
2 26 Feb 07 jari 611   
2 26 Feb 07 jari 612   
2 26 Feb 07 jari 613   /**
2 26 Feb 07 jari 614    * Casts a float[][] to a double[][]
2 26 Feb 07 jari 615    * @param floatMatrix
2 26 Feb 07 jari 616    * @return
2 26 Feb 07 jari 617    */
2 26 Feb 07 jari 618   static double[][] castFloatToDoubleArray( float[][] floatMatrix ) {
2 26 Feb 07 jari 619     double[][] toReturn = new double[ floatMatrix.length ][ floatMatrix[ 0 ].length ];
2 26 Feb 07 jari 620     for( int i = 0; i < floatMatrix.length; i ++ ) {
2 26 Feb 07 jari 621       for( int j = 0; j < floatMatrix[ i ].length; j ++ ) {
2 26 Feb 07 jari 622         toReturn[ i ][ j ] = ( double ) floatMatrix[ i ][ j ];
2 26 Feb 07 jari 623       }
2 26 Feb 07 jari 624     }
2 26 Feb 07 jari 625     return toReturn;
2 26 Feb 07 jari 626   }//castFloatToDoubleArray()
2 26 Feb 07 jari 627   
2 26 Feb 07 jari 628   
2 26 Feb 07 jari 629   /**
2 26 Feb 07 jari 630    * 
2 26 Feb 07 jari 631    * @param message
2 26 Feb 07 jari 632    */
2 26 Feb 07 jari 633   public void error( String message ) {
2 26 Feb 07 jari 634     JOptionPane.showMessageDialog( ( JFrame ) this.mav.getFrame(), 
2 26 Feb 07 jari 635         message, "Input Error", JOptionPane.ERROR_MESSAGE );
2 26 Feb 07 jari 636   }//end error()
2 26 Feb 07 jari 637 }//end class
2 26 Feb 07 jari 638
2 26 Feb 07 jari 639 /*
2 26 Feb 07 jari 640  * mcmc.hiv <- fit.model(hiv[1:10, c(1:4)], hiv[1:10, c(5:8)], B = 5000, min.iter = 4000, batch = 1, shift = 30, mcmc.obj = NULL, dye.swap = TRUE, nb.col1 = 2, all.out = TRUE) 
2 26 Feb 07 jari 641  */
2 26 Feb 07 jari 642 /*
2 26 Feb 07 jari 643 private void ramaAffyData( IData data ) {
2 26 Feb 07 jari 644   //we need to gather up the data and format it for RAMA
2 26 Feb 07 jari 645   String[] hybNames = new String[ data.getFeaturesCount() ];
2 26 Feb 07 jari 646   for( int h = 0; h < hybNames.length; h ++ ) {
2 26 Feb 07 jari 647     hybNames[ h ] = data.getFullSampleName( h );
2 26 Feb 07 jari 648   }
2 26 Feb 07 jari 649   
2 26 Feb 07 jari 650   //have user label loaded data
2 26 Feb 07 jari 651   RamaInitDialog initDialog = new RamaInitDialog( this.mav.getFrame(), 
2 26 Feb 07 jari 652       hybNames, IData.DATA_TYPE_AFFY_ABS );
2 26 Feb 07 jari 653   if( initDialog.showModal() == JOptionPane.OK_OPTION ) {
2 26 Feb 07 jari 654     //get the advanced parameters
2 26 Feb 07 jari 655     int B = initDialog.getNumIter();
2 26 Feb 07 jari 656     int minIter = initDialog.getBurnIn();
2 26 Feb 07 jari 657     boolean allOut = initDialog.getAllOut();
2 26 Feb 07 jari 658     String sConnPort = initDialog.getSelectedConnString();
2 26 Feb 07 jari 659     int iPort = this.parseIPort( sConnPort );
2 26 Feb 07 jari 660     String sConn = this.parseSPort( sConnPort );
2 26 Feb 07 jari 661
2 26 Feb 07 jari 662     RamaHybSet rhs = initDialog.getRamaHybSet();
2 26 Feb 07 jari 663     
2 26 Feb 07 jari 664     String sData =  this.nonSwapDataString( data, rhs.getVRamaHyb() );
2 26 Feb 07 jari 665     int iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 666     int nbCol1 = 0;
2 26 Feb 07 jari 667     int iHybKount = rhs.getVRamaHyb().size();
2 26 Feb 07 jari 668     int iColorKount = iHybKount * 2;
2 26 Feb 07 jari 669     int iTwo = iHybKount + 1;
2 26 Feb 07 jari 670     
2 26 Feb 07 jari 671     //get a connection
2 26 Feb 07 jari 672     RconnectionManager rcMan = new RconnectionManager( this.mav.getFrame(), sConn, iPort );
2 26 Feb 07 jari 673     Rconnection rc = rcMan.getConnection();
2 26 Feb 07 jari 674       
2 26 Feb 07 jari 675     //don't continue if we can't get a connection
2 26 Feb 07 jari 676     if( rc != null ) {
2 26 Feb 07 jari 677       try {
2 26 Feb 07 jari 678         //should clear R
2 26 Feb 07 jari 679         rc.voidEval( "rm( hiv )" );
2 26 Feb 07 jari 680         
2 26 Feb 07 jari 681         //load rama
2 26 Feb 07 jari 682         rc.voidEval( "library(rama)" );
2 26 Feb 07 jari 683         
2 26 Feb 07 jari 684         //load data as vector
2 26 Feb 07 jari 685         rc.voidEval( sData );
2 26 Feb 07 jari 686         
2 26 Feb 07 jari 687         //reform vector data into matrix
2 26 Feb 07 jari 688         rc.voidEval( "dim(" + Rama.R_VECTOR_NAME + ") <- c(" + iGene + "," 
2 26 Feb 07 jari 689             + iColorKount + ")" );
2 26 Feb 07 jari 690         
2 26 Feb 07 jari 691         if( rhs.isFlip() ) {
2 26 Feb 07 jari 692           //call fit.model()
2 26 Feb 07 jari 693           rc.voidEval( this.createMcMc( allOut, iGene, iHybKount, 
2 26 Feb 07 jari 694               iTwo, iColorKount, B, minIter, nbCol1, true ) );
2 26 Feb 07 jari 695         } else {
2 26 Feb 07 jari 696           //call fit.model()
2 26 Feb 07 jari 697           rc.voidEval( this.createMcMc( allOut, iGene, iHybKount, 
2 26 Feb 07 jari 698               iTwo, iColorKount, B, minIter, 0, false ) );
2 26 Feb 07 jari 699         }
2 26 Feb 07 jari 700         
2 26 Feb 07 jari 701         //get normalized data vectors
2 26 Feb 07 jari 702         double[] gamma1 = rc.eval( "mcmc.hiv$gamma1" ).asDoubleArray();
2 26 Feb 07 jari 703         double[] gamma2 = rc.eval( "mcmc.hiv$gamma2" ).asDoubleArray();
2 26 Feb 07 jari 704         
2 26 Feb 07 jari 705         
2 26 Feb 07 jari 706         //need to know the gene annotation data
2 26 Feb 07 jari 707         String[] geneNames = new String[ iGene ];
2 26 Feb 07 jari 708         for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 709           geneNames[ g ] = data.getGeneName( g );
2 26 Feb 07 jari 710         }
2 26 Feb 07 jari 711         
2 26 Feb 07 jari 712         //save
2 26 Feb 07 jari 713             //this.onSave( gamma1, gamma2, geneNames );
2 26 Feb 07 jari 714             
2 26 Feb 07 jari 715             //seemed to have worked so save the connection strings
2 26 Feb 07 jari 716             if( initDialog.connAdded() ) {
2 26 Feb 07 jari 717               TMEV.updateRPath( initDialog.getRPathToWrite() );
2 26 Feb 07 jari 718             }
2 26 Feb 07 jari 719         
2 26 Feb 07 jari 720         this.spawnNewMav( data, gamma1, gamma2, geneNames );
2 26 Feb 07 jari 721       } catch( RSrvException e ) {
2 26 Feb 07 jari 722         e.printStackTrace();
2 26 Feb 07 jari 723         this.error( e.getMessage() );
2 26 Feb 07 jari 724       }
2 26 Feb 07 jari 725     }//end if( rc != null )
2 26 Feb 07 jari 726   }//end if( RamaInitDialog.showModal == JOptionPane.OK_OPTION )
2 26 Feb 07 jari 727 }//
2 26 Feb 07 jari 728   
2 26 Feb 07 jari 729   
2 26 Feb 07 jari 730   /**
2 26 Feb 07 jari 731    * Creates formatted String for loading data to R from a non dye swap experiment
2 26 Feb 07 jari 732    * @param data
2 26 Feb 07 jari 733    * @param vRamaHyb
2 26 Feb 07 jari 734    * @return
2 26 Feb 07 jari 735    
2 26 Feb 07 jari 736   private String nonSwapDataString( IData data, Vector vRamaHyb ) {
2 26 Feb 07 jari 737     StringBuffer sbTreat = new StringBuffer( Rama.R_VECTOR_NAME + " <- c(" );
2 26 Feb 07 jari 738     StringBuffer sbControl = new StringBuffer();
2 26 Feb 07 jari 739     
2 26 Feb 07 jari 740     //figure out which color is which
2 26 Feb 07 jari 741     RamaHyb firstHyb = ( RamaHyb ) vRamaHyb.elementAt( 0 );
2 26 Feb 07 jari 742     boolean controlCy3 = firstHyb.controlCy3();
2 26 Feb 07 jari 743     
2 26 Feb 07 jari 744     //loop through all the hybs, they will all be the same color state
2 26 Feb 07 jari 745     for( int i = 0; i < vRamaHyb.size(); i ++ ) {
2 26 Feb 07 jari 746       if( i > 0 ) { 
2 26 Feb 07 jari 747         sbTreat.append( "," );
2 26 Feb 07 jari 748         sbControl.append( "," );
2 26 Feb 07 jari 749       }
2 26 Feb 07 jari 750       
2 26 Feb 07 jari 751       RamaHyb hyb = ( RamaHyb ) vRamaHyb.elementAt( i );
2 26 Feb 07 jari 752       int iHyb = hyb.getHybIndex();
2 26 Feb 07 jari 753       
2 26 Feb 07 jari 754       //loop through the genes
2 26 Feb 07 jari 755       int iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 756       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 757         if( g > 0 ) {
2 26 Feb 07 jari 758           sbTreat.append( "," );
2 26 Feb 07 jari 759           sbControl.append( "," );
2 26 Feb 07 jari 760         }
2 26 Feb 07 jari 761         
2 26 Feb 07 jari 762         if( controlCy3 ) {
2 26 Feb 07 jari 763           //treatment is Cy5 for all hybs since they're all the same
2 26 Feb 07 jari 764           sbTreat.append( data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 765           sbControl.append( data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 766           //System.out.println( i + "," + g + ":" + data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 767         } else {
2 26 Feb 07 jari 768           //treatment is Cy3 for all hybs since they're all the same
2 26 Feb 07 jari 769           sbTreat.append( data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 770           sbControl.append( data.getCY5( iHyb, g ) );
2 26 Feb 07 jari 771           //System.out.println( i + "," + g + ":" + data.getCY3( iHyb, g ) );
2 26 Feb 07 jari 772         }
2 26 Feb 07 jari 773       }//g
2 26 Feb 07 jari 774     }//i
2 26 Feb 07 jari 775     
2 26 Feb 07 jari 776     sbTreat.append( "," );
2 26 Feb 07 jari 777     sbTreat.append( sbControl );
2 26 Feb 07 jari 778     sbTreat.append( ")" );
2 26 Feb 07 jari 779     
2 26 Feb 07 jari 780     return sbTreat.toString();
2 26 Feb 07 jari 781   }
2 26 Feb 07 jari 782   /**
2 26 Feb 07 jari 783    * Pretty convoluted to allow the user to load dye swap exp
2 26 Feb 07 jari 784    * @param data
2 26 Feb 07 jari 785    * @param vTreatCy3
2 26 Feb 07 jari 786    * @param vTreatCy5
2 26 Feb 07 jari 787    * @return
2 26 Feb 07 jari 788    
2 26 Feb 07 jari 789   private String swapDataString( IData data, Vector vTreatCy3, Vector vTreatCy5 ) {
2 26 Feb 07 jari 790     StringBuffer sbTreat = new StringBuffer( Rama.R_VECTOR_NAME + " <- c(" );
2 26 Feb 07 jari 791     StringBuffer sbControl = new StringBuffer();
2 26 Feb 07 jari 792     
2 26 Feb 07 jari 793     int iTreat3 = vTreatCy3.size();
2 26 Feb 07 jari 794     int iTreat5 = vTreatCy5.size();
2 26 Feb 07 jari 795     
2 26 Feb 07 jari 796     int iGene = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 797     
2 26 Feb 07 jari 798     //first gather all treat3
2 26 Feb 07 jari 799     for( int i = 0; i < iTreat3; i ++ ) {
2 26 Feb 07 jari 800       if( i > 0 ) {
2 26 Feb 07 jari 801         sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 802       }
2 26 Feb 07 jari 803       RamaHyb hyb = ( RamaHyb ) vTreatCy3.elementAt( i );
2 26 Feb 07 jari 804       int hybIndex = hyb.getHybIndex();
2 26 Feb 07 jari 805       
2 26 Feb 07 jari 806       //loop through the genes of this hyb
2 26 Feb 07 jari 807       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 808         if( g > 0 ) {
2 26 Feb 07 jari 809           sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 810         }
2 26 Feb 07 jari 811         sbTreat.append( data.getCY3( hybIndex, g ) );
2 26 Feb 07 jari 812         //System.out.println( "TreatCy3("+i+","+g+"):" + data.getCY3( hybIndex, g ) );
2 26 Feb 07 jari 813       }//g
2 26 Feb 07 jari 814     }//i
2 26 Feb 07 jari 815     sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 816     //next do all treat5
2 26 Feb 07 jari 817     for( int i = 0; i < iTreat5; i ++ ) {
2 26 Feb 07 jari 818       if( i > 0 ) {
2 26 Feb 07 jari 819         sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 820       }
2 26 Feb 07 jari 821       RamaHyb hyb = ( RamaHyb ) vTreatCy5.elementAt( i );
2 26 Feb 07 jari 822       int hybIndex = hyb.getHybIndex();
2 26 Feb 07 jari 823       
2 26 Feb 07 jari 824       //loop through the genes of this hyb
2 26 Feb 07 jari 825       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 826         if( g > 0 ) {
2 26 Feb 07 jari 827           sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 828         }
2 26 Feb 07 jari 829         sbTreat.append( data.getCY5( hybIndex, g ) );
2 26 Feb 07 jari 830         //System.out.println( "TreatCy5("+i+","+g+"):" + data.getCY5( hybIndex, g ) );
2 26 Feb 07 jari 831       }//g
2 26 Feb 07 jari 832     }//i
2 26 Feb 07 jari 833     sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 834     //next control5
2 26 Feb 07 jari 835     for( int i = 0; i < iTreat3; i ++ ) {
2 26 Feb 07 jari 836       if( i > 0 ) {
2 26 Feb 07 jari 837         sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 838       }
2 26 Feb 07 jari 839       RamaHyb hyb = ( RamaHyb ) vTreatCy3.elementAt( i );
2 26 Feb 07 jari 840       int hybIndex = hyb.getHybIndex();
2 26 Feb 07 jari 841       
2 26 Feb 07 jari 842       //loop through the genes of this hyb
2 26 Feb 07 jari 843       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 844         if( g > 0 ) {
2 26 Feb 07 jari 845           sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 846         }
2 26 Feb 07 jari 847         sbTreat.append( data.getCY5( hybIndex, g ) );
2 26 Feb 07 jari 848         //System.out.println( "ControlCy3("+i+","+g+"):" + data.getCY5( hybIndex, g ) );
2 26 Feb 07 jari 849       }//g
2 26 Feb 07 jari 850     }//i
2 26 Feb 07 jari 851     sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 852     //finally control3
2 26 Feb 07 jari 853     for( int i = 0; i < iTreat5; i ++ ) {
2 26 Feb 07 jari 854       if( i > 0 ) {
2 26 Feb 07 jari 855         sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 856       }
2 26 Feb 07 jari 857       RamaHyb hyb = ( RamaHyb ) vTreatCy5.elementAt( i );
2 26 Feb 07 jari 858       int hybIndex = hyb.getHybIndex();
2 26 Feb 07 jari 859       
2 26 Feb 07 jari 860       //loop through the genes of this hyb
2 26 Feb 07 jari 861       for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 862         if( g > 0 ) {
2 26 Feb 07 jari 863           sbTreat.append( Rama.COMMA );
2 26 Feb 07 jari 864         }
2 26 Feb 07 jari 865         sbTreat.append( data.getCY3( hybIndex, g ) );
2 26 Feb 07 jari 866         //System.out.println( "ControlCy5("+i+","+g+"):" + data.getCY3( hybIndex, g ) );
2 26 Feb 07 jari 867       }//g
2 26 Feb 07 jari 868     }//i
2 26 Feb 07 jari 869     sbTreat.append( ")" );
2 26 Feb 07 jari 870     //System.out.println(sbTreat.toString());
2 26 Feb 07 jari 871     return sbTreat.toString();
2 26 Feb 07 jari 872   }//createDataString()
2 26 Feb 07 jari 873 */
2 26 Feb 07 jari 874 /*
2 26 Feb 07 jari 875 try {
2 26 Feb 07 jari 876   //should clear R
2 26 Feb 07 jari 877   rc.voidEval( "rm( " + Rama.R_VECTOR_NAME + " )" );
2 26 Feb 07 jari 878   
2 26 Feb 07 jari 879   //load rama
2 26 Feb 07 jari 880   rc.voidEval( "library(rama)" );
2 26 Feb 07 jari 881   
2 26 Feb 07 jari 882   //load data as vector
2 26 Feb 07 jari 883   rc.voidEval( sData );
2 26 Feb 07 jari 884   
2 26 Feb 07 jari 885   //reform vector data into matrix
2 26 Feb 07 jari 886   rc.voidEval( sReform );
2 26 Feb 07 jari 887   
2 26 Feb 07 jari 888   //call fit.model()
2 26 Feb 07 jari 889   rc.voidEval( sMcmc );
2 26 Feb 07 jari 890   
2 26 Feb 07 jari 891   //if the user wishes, output credible intervals
2 26 Feb 07 jari 892   double[] qLo;
2 26 Feb 07 jari 893   double[] qUp;
2 26 Feb 07 jari 894   if( allOut ) {
2 26 Feb 07 jari 895     //average the rows when doing all.out = TRUE
2 26 Feb 07 jari 896     rc.voidEval( "gamma1<-mat.mean(mcmc.hiv$gamma1)[,1]" );
2 26 Feb 07 jari 897     rc.voidEval( "gamma2<-mat.mean(mcmc.hiv$gamma2)[,1]" );
2 26 Feb 07 jari 898                       
2 26 Feb 07 jari 899     qLo = rc.eval( "mcmc.hiv$q.low" ).asDoubleArray();
2 26 Feb 07 jari 900     qUp = rc.eval( "mcmc.hiv$q.up" ).asDoubleArray();
2 26 Feb 07 jari 901   } else {
2 26 Feb 07 jari 902     qLo = new double[ 0 ];
2 26 Feb 07 jari 903     qUp = new double[ 0 ];
2 26 Feb 07 jari 904   }
2 26 Feb 07 jari 905   
2 26 Feb 07 jari 906   //get normalized data vectors
2 26 Feb 07 jari 907   double[] gamma1 = rc.eval( "gamma1" ).asDoubleArray();
2 26 Feb 07 jari 908   double[] gamma2 = rc.eval( "gamma2" ).asDoubleArray();
2 26 Feb 07 jari 909   
2 26 Feb 07 jari 910   //get the shift
2 26 Feb 07 jari 911   double shift = rc.eval( "mcmc.hiv$shift" ).asDouble();
2 26 Feb 07 jari 912   */
2 26 Feb 07 jari 913 /*
2 26 Feb 07 jari 914 } catch( RSrvException e ) {
2 26 Feb 07 jari 915   e.printStackTrace();
2 26 Feb 07 jari 916   this.error( e.getMessage() );
2 26 Feb 07 jari 917 }*/
2 26 Feb 07 jari 918
2 26 Feb 07 jari 919
2 26 Feb 07 jari 920
2 26 Feb 07 jari 921 /*
2 26 Feb 07 jari 922 //check to see if it went ok
2 26 Feb 07 jari 923 if( rThread.isOk() ) {
2 26 Feb 07 jari 924   //get the credible intervals (if allOut == true)
2 26 Feb 07 jari 925   double[] qLo;
2 26 Feb 07 jari 926   double[] qUp;
2 26 Feb 07 jari 927   if( allOut ) {
2 26 Feb 07 jari 928     qLo = rThread.getQLo();
2 26 Feb 07 jari 929     qUp = rThread.getQUp();
2 26 Feb 07 jari 930   } else {
2 26 Feb 07 jari 931     qLo = new double[ 0 ];
2 26 Feb 07 jari 932     qUp = new double[ 0 ];
2 26 Feb 07 jari 933   }
2 26 Feb 07 jari 934   
2 26 Feb 07 jari 935   //get gammas
2 26 Feb 07 jari 936   double[] gamma1 = rThread.getGamma1();
2 26 Feb 07 jari 937   double[] gamma2 = rThread.getGamma2();
2 26 Feb 07 jari 938   
2 26 Feb 07 jari 939   //get shift
2 26 Feb 07 jari 940   double shift = rThread.getShift();
2 26 Feb 07 jari 941
2 26 Feb 07 jari 942   //need to know the gene annotation data
2 26 Feb 07 jari 943   String[] geneNames = new String[ iGene ];
2 26 Feb 07 jari 944   for( int g = 0; g < iGene; g ++ ) {
2 26 Feb 07 jari 945     geneNames[ g ] = data.getGeneName( g );
2 26 Feb 07 jari 946   }
2 26 Feb 07 jari 947   
2 26 Feb 07 jari 948   //save
2 26 Feb 07 jari 949     this.onSave( gamma1, gamma2, qLo, qUp, allOut, geneNames );
2 26 Feb 07 jari 950     
2 26 Feb 07 jari 951     //seemed to have worked so save the connection strings
2 26 Feb 07 jari 952     if( initDialog.connAdded() ) {
2 26 Feb 07 jari 953       TMEV.updateRPath( initDialog.getRPathToWrite() );
2 26 Feb 07 jari 954     }
2 26 Feb 07 jari 955   
2 26 Feb 07 jari 956   MultipleArrayViewer newMav = this.spawnNewMav( data, gamma1, 
2 26 Feb 07 jari 957       gamma2, geneNames, shift );
2 26 Feb 07 jari 958   RamaSummaryViewer sumViewer = new RamaSummaryViewer( shift, 
2 26 Feb 07 jari 959       B, minIter, rc, newMav.getFrame() );
2 26 Feb 07 jari 960   LeafInfo li = new LeafInfo( "Rama Summary", sumViewer );
2 26 Feb 07 jari 961   DefaultMutableTreeNode node = new DefaultMutableTreeNode( "Rama" );
2 26 Feb 07 jari 962   node.add( new DefaultMutableTreeNode( li ) );
2 26 Feb 07 jari 963   newMav.addAnalysisResult( node );
2 26 Feb 07 jari 964 } else {
2 26 Feb 07 jari 965   //throw error
2 26 Feb 07 jari 966   System.out.println( "Rama Failed" );
2 26 Feb 07 jari 967 }
2 26 Feb 07 jari 968 */