mev-4.0.01/source/org/tigr/microarray/mev/cluster/clusterUtil/submit/lola/LOLASubmitter.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, 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  * LolaSubmission.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on July 2, 2004, 12:03 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.cluster.clusterUtil.submit.lola;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.util.Hashtable;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import javax.swing.JOptionPane;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 import org.tigr.microarray.mev.cluster.clusterUtil.Cluster;
2 26 Feb 07 jari 18 import org.tigr.microarray.mev.cluster.clusterUtil.submit.IClusterSubmitter;
2 26 Feb 07 jari 19 import org.tigr.microarray.mev.cluster.clusterUtil.submit.RepositoryConfigParser;
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.IData;
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Logger;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 /**
2 26 Feb 07 jari 27  *
2 26 Feb 07 jari 28  * @author  braisted
2 26 Feb 07 jari 29  */
2 26 Feb 07 jari 30 public class LOLASubmitter implements IClusterSubmitter {
2 26 Feb 07 jari 31     
2 26 Feb 07 jari 32     private Cluster cluster;
2 26 Feb 07 jari 33     private IFramework framework;
2 26 Feb 07 jari 34     private RepositoryConfigParser parser;
2 26 Feb 07 jari 35     private Submitter submitter;
2 26 Feb 07 jari 36     private Thread thread;
2 26 Feb 07 jari 37     private boolean stop = false;
2 26 Feb 07 jari 38     
2 26 Feb 07 jari 39     /** Creates a new instance of LolaSubmission */
2 26 Feb 07 jari 40     public LOLASubmitter() {
2 26 Feb 07 jari 41         
2 26 Feb 07 jari 42     }
2 26 Feb 07 jari 43     
2 26 Feb 07 jari 44     public boolean submit(Cluster cluster, IFramework framework, RepositoryConfigParser parser) {
2 26 Feb 07 jari 45         this.cluster = cluster;
2 26 Feb 07 jari 46         this.framework = framework;
2 26 Feb 07 jari 47         this.parser = parser;
2 26 Feb 07 jari 48         
2 26 Feb 07 jari 49         try {
2 26 Feb 07 jari 50             submitter = new Submitter();
2 26 Feb 07 jari 51             thread = new Thread(submitter);
2 26 Feb 07 jari 52             thread.start();
2 26 Feb 07 jari 53         } catch (Exception e) {
2 26 Feb 07 jari 54             JOptionPane.showMessageDialog(framework.getFrame(), "Error starting the submission thread, submission aborted", "Submission Thread Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 55             return false;
2 26 Feb 07 jari 56         }
2 26 Feb 07 jari 57         return true;
2 26 Feb 07 jari 58         /*
2 26 Feb 07 jari 59         //get the sample names in order that are contained in the cluster
2 26 Feb 07 jari 60         IData data = framework.getData();
2 26 Feb 07 jari 61          
2 26 Feb 07 jari 62         if( ! ( data.getDataType() == IData.DATA_TYPE_AFFY_ABS  ||
2 26 Feb 07 jari 63         data.getDataType() == IData.DATA_TYPE_AFFY_REF  ||
2 26 Feb 07 jari 64         data.getDataType() == IData.DATA_TYPE_AFFY_MEAN  ||
2 26 Feb 07 jari 65         data.getDataType() == IData.DATA_TYPE_AFFY_MEDIAN )) {
2 26 Feb 07 jari 66             JOptionPane.showMessageDialog(framework.getFrame(), "The Data Type must be Human Affymetrix data to comply with the LOLA repository.", "Data Type Mismatch Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 67             return false;
2 26 Feb 07 jari 68         }
2 26 Feb 07 jari 69          
2 26 Feb 07 jari 70         Experiment experiment = cluster.getExperiment();
2 26 Feb 07 jari 71         int count = experiment.getNumberOfSamples();
2 26 Feb 07 jari 72         int [] sampleOrder = experiment.getColumnIndicesCopy();  //sample indices
2 26 Feb 07 jari 73         String [] expNames = new String[count];
2 26 Feb 07 jari 74         for(int i = 0; i < count; i++) {
2 26 Feb 07 jari 75             expNames[i] = data.getSampleName(sampleOrder[i]);
2 26 Feb 07 jari 76         }
2 26 Feb 07 jari 77          
2 26 Feb 07 jari 78         //get email and password information
2 26 Feb 07 jari 79         Hashtable userInfo = parser.getUserInfo("LOLA");
2 26 Feb 07 jari 80         String email = (String)(userInfo.get("email"));
2 26 Feb 07 jari 81         String pw = (String)(userInfo.get("password"));
2 26 Feb 07 jari 82         LOLAPasswordDialog passDialog = new LOLAPasswordDialog(email, pw);
2 26 Feb 07 jari 83          
2 26 Feb 07 jari 84         if(passDialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 85             JOptionPane.showMessageDialog(framework.getFrame(), "Submission aborted prior to login.", "Abort LOLA Submission", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 86             return false;
2 26 Feb 07 jari 87         }
2 26 Feb 07 jari 88          
2 26 Feb 07 jari 89         email = passDialog.getUserName();
2 26 Feb 07 jari 90         pw = passDialog.getPassword();
2 26 Feb 07 jari 91          
2 26 Feb 07 jari 92         //have user info open lola dialog
2 26 Feb 07 jari 93         LOLADialog dialog = new LOLADialog("Export Gene List to LOLA", expNames, cluster);
2 26 Feb 07 jari 94         int [] sampleGroupings;
2 26 Feb 07 jari 95         if(dialog.showModal() == JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 96             sampleGroupings = dialog.getGroupAssignments();
2 26 Feb 07 jari 97          
2 26 Feb 07 jari 98             float [] folds = getFolds(data, cluster, expNames, sampleGroupings);
2 26 Feb 07 jari 99          
2 26 Feb 07 jari 100             String geneList = constructGeneList(data, cluster.getIndices(), folds);
2 26 Feb 07 jari 101          
2 26 Feb 07 jari 102             if( email != null && pw != null) {
2 26 Feb 07 jari 103                 // connect to LOLA
2 26 Feb 07 jari 104                 connLOLA connection = new connLOLA(email, pw);
2 26 Feb 07 jari 105                 String sessionID = connection.login();
2 26 Feb 07 jari 106                 if(sessionID.equals("")) {
2 26 Feb 07 jari 107                     JOptionPane.showMessageDialog(framework.getFrame(), "Error during login to LOLA.  Please go to http://lola.gwu.edu to establish an account.\n"+
2 26 Feb 07 jari 108                     "If you have an account edit the user information for LOLA in the archive_submission_config.xml (in the config folder) to reflect\nyour email and LOLA password.", "LOLA Login Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 109                     return false;
2 26 Feb 07 jari 110                 }
2 26 Feb 07 jari 111                 if(!connection.submit_list(cluster.getClusterLabel(), cluster.getClusterDescription(), geneList)) {
2 26 Feb 07 jari 112                     JOptionPane.showMessageDialog(framework.getFrame(), "After login, an error occurred during list submission to LOLA.\nPlease check that the primary identifiers are Affy ID's or LocusLink.\n"+
2 26 Feb 07 jari 113                     "The submission page for LOLA describes the submission requirements.", "LOLA Submission Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 114                     return false;
2 26 Feb 07 jari 115                 }
2 26 Feb 07 jari 116                 connection.create_list();
2 26 Feb 07 jari 117                 connection.logout();
2 26 Feb 07 jari 118                 JOptionPane.showMessageDialog(framework.getFrame(), "Submission to LOLA completed successfully.  Thank you.", "LOLA Submission Confirmation", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 119             } else {
2 26 Feb 07 jari 120                 JOptionPane.showMessageDialog(framework.getFrame(), "Error during login to LOLA.  No login information available.  Please go to http://lola.gwu.edu to establish an account.\n"+
2 26 Feb 07 jari 121                 "If you have an account edit the user information for LOLA in the archive_submission_config.xml (in the config folder) to reflect\nyour email and LOLA password.", "LOLA Login Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 122                 return false;
2 26 Feb 07 jari 123             }
2 26 Feb 07 jari 124         }
2 26 Feb 07 jari 125         return true;
2 26 Feb 07 jari 126          **/
2 26 Feb 07 jari 127     }
2 26 Feb 07 jari 128     
2 26 Feb 07 jari 129     
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     
2 26 Feb 07 jari 132     private float [] getFolds(IData data, Cluster cluster, String [] sampleNames, int [] groupings) {
2 26 Feb 07 jari 133         
2 26 Feb 07 jari 134         int sns = sampleNames.length;
2 26 Feb 07 jari 135         int[] genes = cluster.getIndices();
2 26 Feb 07 jari 136         float[] signals = new float[sns];
2 26 Feb 07 jari 137         float[] folds = new float[genes.length];
2 26 Feb 07 jari 138         
2 26 Feb 07 jari 139         for(int i=0; i<genes.length; i++){
2 26 Feb 07 jari 140             for(int j = 0; j<sns; j++){
2 26 Feb 07 jari 141                 signals[j] = data.getRatio(j,genes[i], IData.LINEAR);
2 26 Feb 07 jari 142             }
2 26 Feb 07 jari 143             folds[i] = get_fold(signals, groupings);
2 26 Feb 07 jari 144         }
2 26 Feb 07 jari 145         return folds;
2 26 Feb 07 jari 146     }
2 26 Feb 07 jari 147     
2 26 Feb 07 jari 148     //pcahan
2 26 Feb 07 jari 149     private float get_fold(float[] signals, int [] groupings){
2 26 Feb 07 jari 150         float mean[] = new float[3];
2 26 Feb 07 jari 151         mean[0] = mean[1] = mean[2] = 0.0f;
2 26 Feb 07 jari 152         int num_a, num_b;
2 26 Feb 07 jari 153         num_a = num_b = 0;
2 26 Feb 07 jari 154         for (int i = 0; i < signals.length; i++){
2 26 Feb 07 jari 155             //System.out.println("sig i: " + signals[i]);
2 26 Feb 07 jari 156             if (groupings[i] == 0){
2 26 Feb 07 jari 157                 num_a++;
2 26 Feb 07 jari 158             }
2 26 Feb 07 jari 159             else if(groupings[i] == 1){
2 26 Feb 07 jari 160                 num_b++;
2 26 Feb 07 jari 161             }
2 26 Feb 07 jari 162             mean[groupings[i]] += signals[i];
2 26 Feb 07 jari 163         }
2 26 Feb 07 jari 164         mean[0] = mean[0]/num_a;
2 26 Feb 07 jari 165         mean[1] = mean[1]/num_b;
2 26 Feb 07 jari 166         //System.out.println("Mean a: " + mean[0] + "Mean b: " + mean[1]);
2 26 Feb 07 jari 167         return mean[0]/mean[1];
2 26 Feb 07 jari 168     }
2 26 Feb 07 jari 169     
2 26 Feb 07 jari 170     
2 26 Feb 07 jari 171     private String constructGeneList(IData data, int [] rows, float [] folds) {
2 26 Feb 07 jari 172         String gene_list = new String();
2 26 Feb 07 jari 173         // loops over genes
2 26 Feb 07 jari 174         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 175             gene_list += data.getElementAttribute(rows[i], 0) + "\t"+folds[i]+"\n";
2 26 Feb 07 jari 176         }
2 26 Feb 07 jari 177         return gene_list;
2 26 Feb 07 jari 178     }
2 26 Feb 07 jari 179     
2 26 Feb 07 jari 180     private class Submitter implements Runnable {
2 26 Feb 07 jari 181         public void run() {
2 26 Feb 07 jari 182             
2 26 Feb 07 jari 183             Logger logger = new Logger(framework.getFrame(), "LOLA Submission Log", new SubmissionListener());
2 26 Feb 07 jari 184             logger.show();
2 26 Feb 07 jari 185             logger.append("Begin LOLA Submission Process\n");
2 26 Feb 07 jari 186             //get the sample names in order that are contained in the cluster
2 26 Feb 07 jari 187             IData data = framework.getData();
2 26 Feb 07 jari 188             
2 26 Feb 07 jari 189             logger.append("Data Type Verification\n");
2 26 Feb 07 jari 190             
2 26 Feb 07 jari 191             if( ! ( data.getDataType() == IData.DATA_TYPE_AFFY_ABS  ||
2 26 Feb 07 jari 192             data.getDataType() == IData.DATA_TYPE_AFFY_REF  ||
2 26 Feb 07 jari 193             data.getDataType() == IData.DATA_TYPE_AFFY_MEAN  ||
2 26 Feb 07 jari 194             data.getDataType() == IData.DATA_TYPE_AFFY_MEDIAN )) {
2 26 Feb 07 jari 195                 JOptionPane.showMessageDialog(framework.getFrame(), "The Data Type must be Human Affymetrix data to comply with the LOLA repository.", "Data Type Mismatch Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 196                 return;
2 26 Feb 07 jari 197             }
2 26 Feb 07 jari 198             
2 26 Feb 07 jari 199             if(stop)
2 26 Feb 07 jari 200                 return;
2 26 Feb 07 jari 201
2 26 Feb 07 jari 202             logger.append("Extract Sample Names\n");
2 26 Feb 07 jari 203             
2 26 Feb 07 jari 204             Experiment experiment = cluster.getExperiment();
2 26 Feb 07 jari 205             int count = experiment.getNumberOfSamples();
2 26 Feb 07 jari 206             int [] sampleOrder = experiment.getColumnIndicesCopy();  //sample indices
2 26 Feb 07 jari 207             String [] expNames = new String[count];
2 26 Feb 07 jari 208             for(int i = 0; i < count; i++) {
2 26 Feb 07 jari 209                 expNames[i] = data.getSampleName(sampleOrder[i]);
2 26 Feb 07 jari 210             }
2 26 Feb 07 jari 211             
2 26 Feb 07 jari 212             logger.append("Get User Login Info\n");
2 26 Feb 07 jari 213             //get email and password information
2 26 Feb 07 jari 214             Hashtable userInfo = parser.getUserInfo("LOLA");
2 26 Feb 07 jari 215             String email = (String)(userInfo.get("email"));
2 26 Feb 07 jari 216             String pw = (String)(userInfo.get("password"));
2 26 Feb 07 jari 217             LOLAPasswordDialog passDialog = new LOLAPasswordDialog(email, pw);
2 26 Feb 07 jari 218             
2 26 Feb 07 jari 219             if(stop)
2 26 Feb 07 jari 220                 return;
2 26 Feb 07 jari 221             
2 26 Feb 07 jari 222             if(passDialog.showModal() != JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 223                 JOptionPane.showMessageDialog(framework.getFrame(), "Submission aborted prior to login.", "Abort LOLA Submission", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 224                 return;
2 26 Feb 07 jari 225             }
2 26 Feb 07 jari 226             
2 26 Feb 07 jari 227             email = passDialog.getUserName();
2 26 Feb 07 jari 228             pw = passDialog.getPassword();
2 26 Feb 07 jari 229             
2 26 Feb 07 jari 230             logger.append("Collect Grouping Information and Fold Changes\n");
2 26 Feb 07 jari 231             
2 26 Feb 07 jari 232             //have user info open lola dialog
2 26 Feb 07 jari 233             LOLADialog dialog = new LOLADialog("Export Gene List to LOLA", expNames, cluster);
2 26 Feb 07 jari 234             int [] sampleGroupings;
2 26 Feb 07 jari 235             if(dialog.showModal() == JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 236                 sampleGroupings = dialog.getGroupAssignments();
2 26 Feb 07 jari 237                 
2 26 Feb 07 jari 238                 float [] folds = getFolds(data, cluster, expNames, sampleGroupings);
2 26 Feb 07 jari 239                 
2 26 Feb 07 jari 240                 logger.append("Construct Gene List\n");
2 26 Feb 07 jari 241                 
2 26 Feb 07 jari 242                 String geneList = constructGeneList(data, cluster.getIndices(), folds);
2 26 Feb 07 jari 243                                               
2 26 Feb 07 jari 244                 if(stop)
2 26 Feb 07 jari 245                     return;
2 26 Feb 07 jari 246                 
2 26 Feb 07 jari 247                 if( email != null && pw != null) {
2 26 Feb 07 jari 248                     // connect to LOLA
2 26 Feb 07 jari 249                     connLOLA connection = new connLOLA(email, pw);
2 26 Feb 07 jari 250                     
2 26 Feb 07 jari 251                     logger.append("Login to LOLA\n");
2 26 Feb 07 jari 252                     
2 26 Feb 07 jari 253                     String sessionID = connection.login();
2 26 Feb 07 jari 254                     
2 26 Feb 07 jari 255                     if(stop)
2 26 Feb 07 jari 256                         return;
2 26 Feb 07 jari 257                     
2 26 Feb 07 jari 258                     if(sessionID.equals("")) {
2 26 Feb 07 jari 259                         JOptionPane.showMessageDialog(framework.getFrame(), "Error during login to LOLA.  Please go to http://lola.gwu.edu to establish an account.\n"+
2 26 Feb 07 jari 260                         "If you have an account please try again. You may Edit the user information for LOLA in the archive_submission_config.xml (in the config folder) to reflect\nyour email and LOLA password so that MeV will retain this information for you.", "LOLA Login Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 261                         return;
2 26 Feb 07 jari 262                     }
2 26 Feb 07 jari 263                     
2 26 Feb 07 jari 264                     logger.append("Login Complete\n");
2 26 Feb 07 jari 265                     logger.append("Submit List\n");
2 26 Feb 07 jari 266                     
2 26 Feb 07 jari 267                     if(!connection.submit_list(cluster.getClusterLabel(), cluster.getClusterDescription(), geneList)) {
2 26 Feb 07 jari 268                         JOptionPane.showMessageDialog(framework.getFrame(), "After login, an error occurred during list submission to LOLA.\nPlease check that the primary identifiers are Affy ID's or LocusLink.\n"+
2 26 Feb 07 jari 269                         "The submission page for LOLA describes the submission requirements.", "LOLA Submission Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 270                         return;
2 26 Feb 07 jari 271                     }
2 26 Feb 07 jari 272                     
2 26 Feb 07 jari 273                     logger.append("Commit List\n");
2 26 Feb 07 jari 274                     connection.create_list();
2 26 Feb 07 jari 275                     
2 26 Feb 07 jari 276                     logger.append("Logout from LOLA\n");
2 26 Feb 07 jari 277                     connection.logout();
2 26 Feb 07 jari 278                     
2 26 Feb 07 jari 279                     JOptionPane.showMessageDialog(framework.getFrame(), "Submission to LOLA completed successfully.  Thank you.", "LOLA Submission Confirmation", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 280                     logger.append("Record Submission to History Node\n");
2 26 Feb 07 jari 281                     
2 26 Feb 07 jari 282                     framework.addHistory("Gene submission to LOLA, Cluster #"+cluster.getSerialNumber()+", containing "+cluster.getSize()+" genes.");
2 26 Feb 07 jari 283                     logger.dispose();
2 26 Feb 07 jari 284                 } else {
2 26 Feb 07 jari 285                     JOptionPane.showMessageDialog(framework.getFrame(), "Error during login to LOLA.  No login information available.  Please go to http://lola.gwu.edu to establish an account.\n"+
2 26 Feb 07 jari 286                     "If you have an account edit the user information for LOLA in the archive_submission_config.xml (in the config folder) to reflect\nyour email and LOLA password.", "LOLA Login Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 287                     return;
2 26 Feb 07 jari 288                 }
2 26 Feb 07 jari 289             }
2 26 Feb 07 jari 290             return;
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     private class SubmissionListener extends DialogListener {
2 26 Feb 07 jari 296         
2 26 Feb 07 jari 297         public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
2 26 Feb 07 jari 298             if(thread != null)
2 26 Feb 07 jari 299                 stop = true;
2 26 Feb 07 jari 300         }
2 26 Feb 07 jari 301         
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303     
2 26 Feb 07 jari 304 }