mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/svm/SVMTrainViewer.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  * $RCSfile: SVMTrainViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.8 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:57:36 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.cluster.gui.impl.svm;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Dimension;
2 26 Feb 07 jari 17 import java.awt.Font;
2 26 Feb 07 jari 18 import java.awt.FontMetrics;
2 26 Feb 07 jari 19 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 20 import java.awt.Insets;
2 26 Feb 07 jari 21 import java.beans.Expression;
2 26 Feb 07 jari 22 import java.io.BufferedWriter;
2 26 Feb 07 jari 23 import java.io.File;
2 26 Feb 07 jari 24 import java.io.FileOutputStream;
2 26 Feb 07 jari 25 import java.io.OutputStreamWriter;
2 26 Feb 07 jari 26 import java.text.DecimalFormat;
2 26 Feb 07 jari 27
2 26 Feb 07 jari 28 import javax.swing.JComponent;
2 26 Feb 07 jari 29 import javax.swing.JFileChooser;
2 26 Feb 07 jari 30 import javax.swing.JOptionPane;
2 26 Feb 07 jari 31 import javax.swing.JScrollPane;
2 26 Feb 07 jari 32 import javax.swing.JTable;
2 26 Feb 07 jari 33 import javax.swing.table.AbstractTableModel;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.impl.svm.SVMResultViewer.MyListener;
2 26 Feb 07 jari 40
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42 public class SVMTrainViewer extends SVMResultViewer {
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     private float[] weights;
2 26 Feb 07 jari 45     private Experiment experiment;
2 26 Feb 07 jari 46     private SVMData data;
2 26 Feb 07 jari 47     private GeneralInfo info;
2 26 Feb 07 jari 48     private boolean classifyGenes;
2 26 Feb 07 jari 49     TrainViewerTableModel cvtm;
2 26 Feb 07 jari 50     DecimalFormat floatFormat;
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     public SVMTrainViewer(Experiment expt, float[] weights, boolean classifyGenes, SVMData data){
2 26 Feb 07 jari 53       super(expt);
2 26 Feb 07 jari 54       init(weights, classifyGenes, data);
2 26 Feb 07 jari 55     }   
2 26 Feb 07 jari 56     public SVMTrainViewer(Experiment experiment, float[] weights, Boolean classifyGenes, SVMData data){
2 26 Feb 07 jari 57       this(experiment, weights, classifyGenes.booleanValue(), data);
2 26 Feb 07 jari 58     }
2 26 Feb 07 jari 59     /**
2 26 Feb 07 jari 60      * @inheritDoc
2 26 Feb 07 jari 61      */
2 26 Feb 07 jari 62     public Expression getExpression(){
2 26 Feb 07 jari 63       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 64           new Object[]{super.getExpression().getArguments()[0], weights, new Boolean(classifyGenes), data});
2 26 Feb 07 jari 65     }
2 26 Feb 07 jari 66     private void init(float[] weights, boolean classifyGenes, SVMData data){
2 26 Feb 07 jari 67         this.weights = weights;
2 26 Feb 07 jari 68         this.classifyGenes = classifyGenes;
2 26 Feb 07 jari 69       this.data = data;
2 26 Feb 07 jari 70     
2 26 Feb 07 jari 71         floatFormat = new DecimalFormat();
2 26 Feb 07 jari 72         floatFormat.setMaximumFractionDigits(4);
2 26 Feb 07 jari 73         floatFormat.setMinimumFractionDigits(4);
2 26 Feb 07 jari 74         floatFormat.setGroupingUsed(false);
2 26 Feb 07 jari 75         
2 26 Feb 07 jari 76         setBackground(Color.white);
2 26 Feb 07 jari 77         cvtm = new TrainViewerTableModel();
2 26 Feb 07 jari 78        this.resultTable = new JTable(cvtm);
2 26 Feb 07 jari 79         
2 26 Feb 07 jari 80         this.add(new JScrollPane(resultTable), new GridBagConstraints(0,0,1,1,1.0,1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0), 0,0));
2 26 Feb 07 jari 81         
2 26 Feb 07 jari 82         MyListener listener = new MyListener();
2 26 Feb 07 jari 83         resultTable.addMouseListener(listener);
2 26 Feb 07 jari 84         resultTable.addMouseMotionListener(listener);
2 26 Feb 07 jari 85     }
2 26 Feb 07 jari 86     
2 26 Feb 07 jari 87     class TrainViewerTableModel extends AbstractTableModel{
2 26 Feb 07 jari 88         String[] header = new String[]{"Index", "Weight", annotationLabel};
2 26 Feb 07 jari 89       public TrainViewerTableModel(){}
2 26 Feb 07 jari 90       public String getColumnName(int col){
2 26 Feb 07 jari 91         return header[col];
2 26 Feb 07 jari 92       }
2 26 Feb 07 jari 93       public Object getValueAt(int row, int col){
2 26 Feb 07 jari 94         if(col == 0){
2 26 Feb 07 jari 95           return new Integer(row+1);
2 26 Feb 07 jari 96         } else if (col == 1) {
2 26 Feb 07 jari 97           return floatFormat.format(weights[row]).toString();
2 26 Feb 07 jari 98         } else if (col == 2) {
2 26 Feb 07 jari 99           try{
2 26 Feb 07 jari 100             if(classifyGenes){
2 26 Feb 07 jari 101               new Integer(labelIndex);
2 26 Feb 07 jari 102               getMultipleArrayDataRow(row);
2 26 Feb 07 jari 103               iData.toString();
2 26 Feb 07 jari 104             return iData.getElementAttribute(getMultipleArrayDataRow(row), labelIndex);
2 26 Feb 07 jari 105             } else {
2 26 Feb 07 jari 106             return iData.getFullSampleName(row);
2 26 Feb 07 jari 107             }
2 26 Feb 07 jari 108           } catch (NullPointerException npe){
2 26 Feb 07 jari 109               npe.printStackTrace();
2 26 Feb 07 jari 110             return "";
2 26 Feb 07 jari 111           }
2 26 Feb 07 jari 112         }
2 26 Feb 07 jari 113         return new String("");
2 26 Feb 07 jari 114       }  
2 26 Feb 07 jari 115       public boolean isCellEditable(int row, int col) { return false; }
2 26 Feb 07 jari 116
2 26 Feb 07 jari 117     public int getColumnCount() {
2 26 Feb 07 jari 118       return header.length;
2 26 Feb 07 jari 119     }
2 26 Feb 07 jari 120     
2 26 Feb 07 jari 121     public int getRowCount() {
2 26 Feb 07 jari 122       return weights.length;
2 26 Feb 07 jari 123     }
2 26 Feb 07 jari 124     }
2 26 Feb 07 jari 125     
2 26 Feb 07 jari 126     public void setExperiment(Experiment e){
2 26 Feb 07 jari 127       super.setExperiment(e);
2 26 Feb 07 jari 128       this.experiment = e;
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     public void onSelected(IFramework frm) {
2 26 Feb 07 jari 132       super.onSelected(frm);
2 26 Feb 07 jari 133         onMenuChanged(frm.getDisplayMenu());
2 26 Feb 07 jari 134     }
2 26 Feb 07 jari 135     
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137     /**
2 26 Feb 07 jari 138      * Displays train result.
2 26 Feb 07 jari 139      */
2 26 Feb 07 jari 140     protected void displayData() {
2 26 Feb 07 jari 141         if (weights == null) {
2 26 Feb 07 jari 142             return;
2 26 Feb 07 jari 143         }
2 26 Feb 07 jari 144         displayResult(this.classifyGenes);
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147     
2 26 Feb 07 jari 148     private void displayResult(boolean genes){
2 26 Feb 07 jari 149     }
2 26 Feb 07 jari 150     
2 26 Feb 07 jari 151     /**
2 26 Feb 07 jari 152      * Saves train result to a file.
2 26 Feb 07 jari 153      */
2 26 Feb 07 jari 154     protected void onSaveResult() {
2 26 Feb 07 jari 155         File SVMFile;
2 26 Feb 07 jari 156         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 157         fc.addChoosableFileFilter(new SVMFileFilter());
2 26 Feb 07 jari 158         fc.setFileView(new SVMFileView());
2 26 Feb 07 jari 159         int returnVal = fc.showSaveDialog(JOptionPane.getFrameForComponent(this));
2 26 Feb 07 jari 160         if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 161             SVMFile = fc.getSelectedFile();
2 26 Feb 07 jari 162         } else return;
2 26 Feb 07 jari 163         try {
2 26 Feb 07 jari 164             BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(SVMFile)));
2 26 Feb 07 jari 165             if(data.classificationFile != null)
2 26 Feb 07 jari 166                 out.write("Classification file: "+data.classificationFile.getPath()+"\n");
2 26 Feb 07 jari 167                 else
2 26 Feb 07 jari 168               out.write("Classification file: None (SVM classification editor was used)\n");
2 26 Feb 07 jari 169             out.write("Constant : "+Float.toString(data.constant)+"\n");
2 26 Feb 07 jari 170             out.write("Coefficient : "+Float.toString(data.coefficient)+"\n");
2 26 Feb 07 jari 171             out.write("Power : "+Float.toString(data.power)+"\n");
2 26 Feb 07 jari 172             out.write("Diagonal factor : "+Float.toString(data.diagonalFactor)+"\n");
2 26 Feb 07 jari 173             out.write("Convergence threshold : "+Float.toString(data.convergenceThreshold)+"\n");
2 26 Feb 07 jari 174             //buffer.append("Normalize : "+data.normalize+"\n");
2 26 Feb 07 jari 175             out.write("Radial : "+data.radial+"\n");
2 26 Feb 07 jari 176             out.write("Width factor : "+Float.toString(data.widthFactor)+"\n");
2 26 Feb 07 jari 177             out.write("Use Constraint : "+data.constrainWeights+"\n");
2 26 Feb 07 jari 178             out.write("Positive Constraint : "+Float.toString(data.positiveConstraint)+"\n");
2 26 Feb 07 jari 179             out.write("Negative Constraint : "+Float.toString(data.negativeConstraint)+"\n");
2 26 Feb 07 jari 180             out.write("Seed : "+Float.toString(data.seed)+"\n");
2 26 Feb 07 jari 181             //out.write("Calculation time : " + Float.toString( info.time )+" ms\n");
2 26 Feb 07 jari 182             out.write("Objective : "+Float.toString(data.objective1)+"\n\n");
2 26 Feb 07 jari 183             
2 26 Feb 07 jari 184             out.write("Weights\tGB#\n");
2 26 Feb 07 jari 185
2 26 Feb 07 jari 186             for(int row=0; row<cvtm.getRowCount(); row++){
2 26 Feb 07 jari 187               for(int col=1; col<cvtm.getColumnCount(); col++){
2 26 Feb 07 jari 188                 out.write(cvtm.getValueAt(row, col).toString() + '\t');
2 26 Feb 07 jari 189             }
2 26 Feb 07 jari 190               out.write('\n');
2 26 Feb 07 jari 191             }
2 26 Feb 07 jari 192             out.flush();
2 26 Feb 07 jari 193             out.close();
2 26 Feb 07 jari 194             out = null;
2 26 Feb 07 jari 195         } catch (Exception ex) {
2 26 Feb 07 jari 196             ex.printStackTrace();
2 26 Feb 07 jari 197             JOptionPane.showMessageDialog( this, "Error writing to file "+SVMFile.getPath()+"!","Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 198         }
2 26 Feb 07 jari 199     }
2 26 Feb 07 jari 200     
2 26 Feb 07 jari 201     /*
2 26 Feb 07 jari 202     protected Dimension updateSize(){
2 26 Feb 07 jari 203         return ((TrainResultPanel)resultPanel).updateSize();
2 26 Feb 07 jari 204     }*/
2 26 Feb 07 jari 205     
2 26 Feb 07 jari 206     /** Returns a component to be inserted into the scroll pane row header
2 26 Feb 07 jari 207      */
2 26 Feb 07 jari 208     public JComponent getRowHeaderComponent() {
2 26 Feb 07 jari 209         return null;
2 26 Feb 07 jari 210     }    
2 26 Feb 07 jari 211     
2 26 Feb 07 jari 212     /** Returns the corner component corresponding to the indicated corner,
2 26 Feb 07 jari 213      * posibly null
2 26 Feb 07 jari 214      */
2 26 Feb 07 jari 215     public JComponent getCornerComponent(int cornerIndex) {
2 26 Feb 07 jari 216         return null;  
2 26 Feb 07 jari 217     }
2 26 Feb 07 jari 218     
2 26 Feb 07 jari 219         
2 26 Feb 07 jari 220         
2 26 Feb 07 jari 221         protected Dimension updateSize(){
2 26 Feb 07 jari 222             FontMetrics fm = this.getFontMetrics(new Font("monospaced", Font.PLAIN, 14));
2 26 Feb 07 jari 223             int len = 0;
2 26 Feb 07 jari 224             
2 26 Feb 07 jari 225             
2 26 Feb 07 jari 226             return new Dimension(len+10, getHeight());
2 26 Feb 07 jari 227         }
2 26 Feb 07 jari 228      
2 26 Feb 07 jari 229 }
2 26 Feb 07 jari 230