mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ttest/TTestVolcanoPlotViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, 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: TTestVolcanoPlotViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.11 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:57:56 $
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 package org.tigr.microarray.mev.cluster.gui.impl.ttest;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.BasicStroke;
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Component;
2 26 Feb 07 jari 17 import java.awt.Dimension;
2 26 Feb 07 jari 18 import java.awt.Frame;
2 26 Feb 07 jari 19 import java.awt.Graphics;
2 26 Feb 07 jari 20 import java.awt.Graphics2D;
2 26 Feb 07 jari 21 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 22 import java.awt.GridBagLayout;
2 26 Feb 07 jari 23 import java.awt.Toolkit;
2 26 Feb 07 jari 24 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 25 import java.awt.event.ActionListener;
2 26 Feb 07 jari 26 import java.awt.event.FocusEvent;
2 26 Feb 07 jari 27 import java.awt.event.FocusListener;
2 26 Feb 07 jari 28 import java.awt.event.ItemEvent;
2 26 Feb 07 jari 29 import java.awt.event.ItemListener;
2 26 Feb 07 jari 30 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 31 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 32 import java.awt.event.MouseMotionListener;
2 26 Feb 07 jari 33 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 34 import java.beans.Expression;
2 26 Feb 07 jari 35 import java.io.File;
2 26 Feb 07 jari 36 import java.io.FileOutputStream;
2 26 Feb 07 jari 37 import java.io.PrintWriter;
2 26 Feb 07 jari 38 import java.text.DecimalFormat;
2 26 Feb 07 jari 39 import java.util.Vector;
2 26 Feb 07 jari 40
2 26 Feb 07 jari 41 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 42 import javax.swing.JButton;
2 26 Feb 07 jari 43 import javax.swing.JCheckBoxMenuItem;
2 26 Feb 07 jari 44 import javax.swing.JComponent;
2 26 Feb 07 jari 45 import javax.swing.JFileChooser;
2 26 Feb 07 jari 46 import javax.swing.JFrame;
2 26 Feb 07 jari 47 import javax.swing.JLabel;
2 26 Feb 07 jari 48 import javax.swing.JMenuItem;
2 26 Feb 07 jari 49 import javax.swing.JOptionPane;
2 26 Feb 07 jari 50 import javax.swing.JPanel;
2 26 Feb 07 jari 51 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 52 import javax.swing.JRadioButton;
2 26 Feb 07 jari 53 import javax.swing.JSlider;
2 26 Feb 07 jari 54 import javax.swing.JTextField;
2 26 Feb 07 jari 55 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 56 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 57 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 58
2 26 Feb 07 jari 59 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 60 import org.tigr.microarray.mev.cluster.clusterUtil.Cluster;
2 26 Feb 07 jari 61 import org.tigr.microarray.mev.cluster.clusterUtil.ClusterRepository;
2 26 Feb 07 jari 62 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 63 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 64 import org.tigr.microarray.mev.cluster.gui.IDisplayMenu;
2 26 Feb 07 jari 65 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 66 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 67 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileFilter;
2 26 Feb 07 jari 68 import org.tigr.microarray.mev.cluster.gui.helpers.ExpressionFileView;
2 26 Feb 07 jari 69 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 70 import org.tigr.util.awt.ActionInfoDialog;
2 26 Feb 07 jari 71
2 26 Feb 07 jari 72 /**
2 26 Feb 07 jari 73  *
2 26 Feb 07 jari 74  * @author  nbhagaba
2 26 Feb 07 jari 75  * @version
2 26 Feb 07 jari 76  */
2 26 Feb 07 jari 77 public class TTestVolcanoPlotViewer extends JPanel implements IViewer /*, MouseMotionListener */{
2 26 Feb 07 jari 78     
2 26 Feb 07 jari 79     private Experiment experiment;
2 26 Feb 07 jari 80     private IFramework framework;
2 26 Feb 07 jari 81     private IData data;
2 26 Feb 07 jari 82     
2 26 Feb 07 jari 83     private double[] yArray, xArray;
2 26 Feb 07 jari 84     private boolean[] isSig;
2 26 Feb 07 jari 85     int originX, originY;
2 26 Feb 07 jari 86     int currentMouseX, currentMouseY;
2 26 Feb 07 jari 87     private boolean useRefLines, projectClusters, usePosAndNeg, usePosOnly, useNegOnly;
2 26 Feb 07 jari 88     private JPopupMenu popup;
2 26 Feb 07 jari 89     private JCheckBoxMenuItem useRefLinesBox, projectClustersBox;
2 26 Feb 07 jari 90     int currentXSliderPosition, currentYSliderPosition;
2 26 Feb 07 jari 91     double currentP, currentMean, oneClassMean;
2 26 Feb 07 jari 92     int tTestDesign;
2 26 Feb 07 jari 93     private Vector rawPValues, adjPValues, tValues, dfValues, meansA, meansB, sdA, sdB, oneClassMeans, oneClassSDs;
2 26 Feb 07 jari 94     private int exptID;
2 26 Feb 07 jari 95     
2 26 Feb 07 jari 96     /** Creates new TTestVolcanoPlotViewer */
2 26 Feb 07 jari 97     public TTestVolcanoPlotViewer(Experiment experiment, double[] xArray, double[] yArray, 
2 26 Feb 07 jari 98         boolean[] isSig, int tTestDesign, double oneClassMean, Vector oneClassMeans, 
2 26 Feb 07 jari 99       Vector oneClassSDs, Vector meansA, Vector meansB, Vector sdA, Vector sdB, 
2 26 Feb 07 jari 100       Vector rawPValues, Vector adjPValues, Vector tValues, Vector dfValues) {
2 26 Feb 07 jari 101         //System.out.println("Created Volcano plot");
2 26 Feb 07 jari 102         //this.tTestFrame = tTestFrame;
2 26 Feb 07 jari 103         this.experiment = experiment;
2 26 Feb 07 jari 104         setExperimentID(experiment.getId());
2 26 Feb 07 jari 105         initialize(xArray, yArray, isSig, tTestDesign, oneClassMean, oneClassMeans, 
2 26 Feb 07 jari 106             oneClassSDs, meansA, meansB, sdA, sdB, 
2 26 Feb 07 jari 107         rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 108     }
2 26 Feb 07 jari 109  
2 26 Feb 07 jari 110     public TTestVolcanoPlotViewer(Experiment e, double[] xArray, double[] yArray, 
2 26 Feb 07 jari 111         boolean[] isSig, Integer tTestDesign, Double oneClassMean, Vector oneClassMeans, 
2 26 Feb 07 jari 112       Vector oneClassSDs, Vector meansA, Vector meansB, Vector sdA, Vector sdB, 
2 26 Feb 07 jari 113       Vector rawPValues, Vector adjPValues, Vector tValues, Vector dfValues){
2 26 Feb 07 jari 114       this(e, xArray, yArray, isSig, tTestDesign.intValue(), oneClassMean.doubleValue(), oneClassMeans, 
2 26 Feb 07 jari 115             oneClassSDs, meansA, meansB, sdA, sdB, 
2 26 Feb 07 jari 116         rawPValues, adjPValues, tValues, dfValues);
2 26 Feb 07 jari 117     }
2 26 Feb 07 jari 118     public Expression getExpression(){
2 26 Feb 07 jari 119       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 120           new Object[]{this.experiment, this.xArray, this.yArray,
2 26 Feb 07 jari 121           this.isSig, new Integer(tTestDesign), new Double(oneClassMean), oneClassMeans, 
2 26 Feb 07 jari 122         oneClassSDs, meansA, meansB, sdA, sdB,
2 26 Feb 07 jari 123         rawPValues, adjPValues, tValues, dfValues});
2 26 Feb 07 jari 124     }
2 26 Feb 07 jari 125     
2 26 Feb 07 jari 126     private void initialize(double[] xArray, double[] yArray, 
2 26 Feb 07 jari 127         boolean[] isSig, int tTestDesign, double oneClassMean, Vector oneClassMeans, 
2 26 Feb 07 jari 128       Vector oneClassSDs, Vector meansA, Vector meansB, Vector sdA, Vector sdB, 
2 26 Feb 07 jari 129       Vector rawPValues, Vector adjPValues, Vector tValues, Vector dfValues){
2 26 Feb 07 jari 130         this.xArray = xArray;
2 26 Feb 07 jari 131         this.yArray = yArray;
2 26 Feb 07 jari 132         this.isSig = isSig;
2 26 Feb 07 jari 133         this.rawPValues = rawPValues;
2 26 Feb 07 jari 134         this.adjPValues = adjPValues;
2 26 Feb 07 jari 135         this.tValues = tValues;
2 26 Feb 07 jari 136         this.dfValues = dfValues;
2 26 Feb 07 jari 137         this.meansA = meansA;
2 26 Feb 07 jari 138         this.meansB = meansB;
2 26 Feb 07 jari 139         this.tTestDesign = tTestDesign;
2 26 Feb 07 jari 140         this.oneClassMeans = oneClassMeans;
2 26 Feb 07 jari 141         this.oneClassMean = oneClassMean;
2 26 Feb 07 jari 142         this.oneClassSDs = oneClassSDs;
2 26 Feb 07 jari 143         this.sdA = sdA;
2 26 Feb 07 jari 144         this.sdB =sdB;
2 26 Feb 07 jari 145         //this.tTestDesign =TtestInitDialog.BETWEEN_SUBJECTS;  //for now
2 26 Feb 07 jari 146         useRefLines = true;
2 26 Feb 07 jari 147         projectClusters = false;
2 26 Feb 07 jari 148         usePosAndNeg = true;
2 26 Feb 07 jari 149         usePosOnly = false;
2 26 Feb 07 jari 150         useNegOnly = false;
2 26 Feb 07 jari 151         currentMouseX = 0;
2 26 Feb 07 jari 152         currentMouseY = 0;
2 26 Feb 07 jari 153         currentXSliderPosition = 0;
2 26 Feb 07 jari 154         currentYSliderPosition = 0;
2 26 Feb 07 jari 155         this.setBorder(new EtchedBorder());
2 26 Feb 07 jari 156         this.setBackground(Color.white);
2 26 Feb 07 jari 157         
2 26 Feb 07 jari 158         this.addMouseMotionListener(new MouseMotionListener() {
2 26 Feb 07 jari 159             public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {
2 26 Feb 07 jari 160                 if (useRefLines) {
2 26 Feb 07 jari 161                     currentMouseX = mouseEvent.getX();
2 26 Feb 07 jari 162                     currentMouseY = mouseEvent.getY();
2 26 Feb 07 jari 163                     //System.out.println("X = " + currentMouseX + ", Y = " + currentMouseY);
2 26 Feb 07 jari 164                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 165                 }
2 26 Feb 07 jari 166             }
2 26 Feb 07 jari 167             public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
2 26 Feb 07 jari 168             }
2 26 Feb 07 jari 169         });
2 26 Feb 07 jari 170         
2 26 Feb 07 jari 171         popup = new JPopupMenu();
2 26 Feb 07 jari 172         useRefLinesBox = new JCheckBoxMenuItem("Use reference lines", true);
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         useRefLinesBox.addItemListener(new ItemListener() {
2 26 Feb 07 jari 175             public void itemStateChanged(ItemEvent evt) {
2 26 Feb 07 jari 176                 if (evt.getStateChange() == ItemEvent.SELECTED) {
2 26 Feb 07 jari 177                     useRefLines = true;
2 26 Feb 07 jari 178                 } else {
2 26 Feb 07 jari 179                     useRefLines = false;
2 26 Feb 07 jari 180                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 181                 }
2 26 Feb 07 jari 182             }
2 26 Feb 07 jari 183         });
2 26 Feb 07 jari 184         popup.add(useRefLinesBox);
2 26 Feb 07 jari 185         popup.addSeparator();
2 26 Feb 07 jari 186         
2 26 Feb 07 jari 187         projectClustersBox = new JCheckBoxMenuItem("Project previously stored cluster colors", false);
2 26 Feb 07 jari 188         projectClustersBox.addItemListener(new ItemListener() {
2 26 Feb 07 jari 189             public void itemStateChanged(ItemEvent evt) {
2 26 Feb 07 jari 190                 if (evt.getStateChange() == ItemEvent.SELECTED) {
2 26 Feb 07 jari 191                     projectClusters = true;
2 26 Feb 07 jari 192                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 193                 } else {
2 26 Feb 07 jari 194                     projectClusters = false;
2 26 Feb 07 jari 195                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 196                 }
2 26 Feb 07 jari 197             }
2 26 Feb 07 jari 198         });
2 26 Feb 07 jari 199         popup.add(projectClustersBox);
2 26 Feb 07 jari 200         popup.addSeparator();
2 26 Feb 07 jari 201         
2 26 Feb 07 jari 202         JMenuItem showCutoffLines = new JMenuItem("Use gene selection sliders");
2 26 Feb 07 jari 203         showCutoffLines.addActionListener(new ActionListener() {
2 26 Feb 07 jari 204             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 205                 SelectionSliderPanel ssPanel = new SelectionSliderPanel(currentYSliderPosition, currentXSliderPosition);
2 26 Feb 07 jari 206                 TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 207                 ssPanel.setVisible(true);
2 26 Feb 07 jari 208             }
2 26 Feb 07 jari 209         });
2 26 Feb 07 jari 210         popup.add(showCutoffLines);
2 26 Feb 07 jari 211         
2 26 Feb 07 jari 212         popup.addSeparator();
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214         JMenuItem storeClusterItem = new JMenuItem("Store selected genes as cluster", GUIFactory.getIcon("new16.gif"));
2 26 Feb 07 jari 215         storeClusterItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 216             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 217                 storeCluster();
2 26 Feb 07 jari 218             }
2 26 Feb 07 jari 219         });
2 26 Feb 07 jari 220         popup.add(storeClusterItem);
2 26 Feb 07 jari 221         
2 26 Feb 07 jari 222         popup.addSeparator();
2 26 Feb 07 jari 223         
2 26 Feb 07 jari 224         JMenuItem launchNewSessionItem = new JMenuItem("Launch new session with selected genes", GUIFactory.getIcon("launch_new_mav.gif"));
2 26 Feb 07 jari 225         launchNewSessionItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 226             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 227                 launchNewSession();
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229         });
2 26 Feb 07 jari 230         popup.add(launchNewSessionItem);
2 26 Feb 07 jari 231         
2 26 Feb 07 jari 232         popup.addSeparator();
2 26 Feb 07 jari 233         
2 26 Feb 07 jari 234         JMenuItem saveGenesItem = new JMenuItem("Save selected genes as cluster", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 235         saveGenesItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 236             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 237                 onSaveCluster();
2 26 Feb 07 jari 238             }
2 26 Feb 07 jari 239         });
2 26 Feb 07 jari 240         popup.add(saveGenesItem);
2 26 Feb 07 jari 241         
2 26 Feb 07 jari 242         this.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 243             public void mousePressed(MouseEvent e) {
2 26 Feb 07 jari 244                 maybeShowPopup(e);
2 26 Feb 07 jari 245             }
2 26 Feb 07 jari 246             
2 26 Feb 07 jari 247             public void mouseReleased(MouseEvent e) {
2 26 Feb 07 jari 248                 maybeShowPopup(e);
2 26 Feb 07 jari 249             }
2 26 Feb 07 jari 250             
2 26 Feb 07 jari 251             private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 252                 if (e.isPopupTrigger()) {
2 26 Feb 07 jari 253                     if ((currentXSliderPosition == 0) && (currentYSliderPosition == 0) && usePosAndNeg) {
2 26 Feb 07 jari 254                         for (int i = 6; i < popup.getComponentCount(); i++) {
2 26 Feb 07 jari 255                             Component item = popup.getComponent(i);
2 26 Feb 07 jari 256                             if (item instanceof JMenuItem) {
2 26 Feb 07 jari 257                                 item.setEnabled(false);
2 26 Feb 07 jari 258                             }
2 26 Feb 07 jari 259                         }
2 26 Feb 07 jari 260                     } else {
2 26 Feb 07 jari 261                         for (int i = 6; i < popup.getComponentCount(); i++) {
2 26 Feb 07 jari 262                             Component item = popup.getComponent(i);
2 26 Feb 07 jari 263                             if (item instanceof JMenuItem) {
2 26 Feb 07 jari 264                                 item.setEnabled(true);
2 26 Feb 07 jari 265                             }
2 26 Feb 07 jari 266                         }
2 26 Feb 07 jari 267                         
2 26 Feb 07 jari 268                     }
2 26 Feb 07 jari 269                     popup.show(e.getComponent(),
2 26 Feb 07 jari 270                     e.getX(), e.getY());
2 26 Feb 07 jari 271                 }
2 26 Feb 07 jari 272             }
2 26 Feb 07 jari 273         });
2 26 Feb 07 jari 274         
2 26 Feb 07 jari 275     }
2 26 Feb 07 jari 276     
2 26 Feb 07 jari 277         
2 26 Feb 07 jari 278         
2 26 Feb 07 jari 279   /* (non-Javadoc)
2 26 Feb 07 jari 280    * @see org.tigr.microarray.mev.cluster.gui.IViewer#setExperiment(org.tigr.microarray.mev.cluster.gui.Experiment)
2 26 Feb 07 jari 281    */
2 26 Feb 07 jari 282   public void setExperiment(Experiment e) {
2 26 Feb 07 jari 283     this.experiment = e;
2 26 Feb 07 jari 284     this.exptID = e.getId();
2 26 Feb 07 jari 285     }
2 26 Feb 07 jari 286             
2 26 Feb 07 jari 287   /* (non-Javadoc)
2 26 Feb 07 jari 288    * @see org.tigr.microarray.mev.cluster.gui.IViewer#getExperimentID()
2 26 Feb 07 jari 289    */
2 26 Feb 07 jari 290   public int getExperimentID() {
2 26 Feb 07 jari 291     return exptID;
2 26 Feb 07 jari 292                         }
2 26 Feb 07 jari 293                         
2 26 Feb 07 jari 294   /* (non-Javadoc)
2 26 Feb 07 jari 295    * @see org.tigr.microarray.mev.cluster.gui.IViewer#setExperimentID(int)
2 26 Feb 07 jari 296    */
2 26 Feb 07 jari 297   public void setExperimentID(int id) {
2 26 Feb 07 jari 298     this.exptID = id;
2 26 Feb 07 jari 299                     }
2 26 Feb 07 jari 300         
2 26 Feb 07 jari 301     
2 26 Feb 07 jari 302     public void paint(Graphics g) {
2 26 Feb 07 jari 303         super.paint(g);
2 26 Feb 07 jari 304         Graphics2D g2D = (Graphics2D)g;
2 26 Feb 07 jari 305         int panelWidth = this.getWidth();
2 26 Feb 07 jari 306         int panelHeight = this.getHeight();
2 26 Feb 07 jari 307         
2 26 Feb 07 jari 308         double[] maxXAndY = getMaxXAndY();
2 26 Feb 07 jari 309         double[] minXAndY = getMinXAndY();
2 26 Feb 07 jari 310         
2 26 Feb 07 jari 311         double origMaxXValue = maxXAndY[0];
2 26 Feb 07 jari 312         double origMaxYValue = maxXAndY[1];
2 26 Feb 07 jari 313         double origMinXValue = minXAndY[0];
2 26 Feb 07 jari 314         double origMinYValue = minXAndY[1];
2 26 Feb 07 jari 315         
2 26 Feb 07 jari 316         double xScalingFactor = getXScalingFactor(origMaxXValue, origMinXValue);
2 26 Feb 07 jari 317         double yScalingFactor = getYScalingFactor(origMaxYValue, origMinYValue);
2 26 Feb 07 jari 318         
2 26 Feb 07 jari 319         final float dash1[] = {10.0f};
2 26 Feb 07 jari 320         final BasicStroke dashed = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f);
2 26 Feb 07 jari 321         
2 26 Feb 07 jari 322         g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 323         //g2D.setColor(Color.lightGray.darker());
2 26 Feb 07 jari 324         //g2D.drawLine(10, 10, this.getWidth() - 10, 10);
2 26 Feb 07 jari 325         //g2D.drawLine(10, this.getHeight() - 10, this.getWidth() - 10, this.getHeight() - 10);
2 26 Feb 07 jari 326         g2D.drawLine(40, 10, this.getWidth() - 10, 10);
2 26 Feb 07 jari 327         g2D.drawLine(this.getWidth() - 10, 10, this.getWidth() - 10, this.getHeight() - 50);
2 26 Feb 07 jari 328         originX = (int)Math.round((double)(this.getWidth()/2));
2 26 Feb 07 jari 329         originY = (int)Math.round((double)(this.getHeight() - 50));
2 26 Feb 07 jari 330         
2 26 Feb 07 jari 331         g2D.setColor(Color.black);
2 26 Feb 07 jari 332         /*
2 26 Feb 07 jari 333         if (currentYSliderPosition > 0) {
2 26 Feb 07 jari 334             g2D.setStroke(dashed);
2 26 Feb 07 jari 335             g2D.drawLine(40, (int)Math.round(this.getHeight() - 50 - currentP*yScalingFactor), this.getWidth() - 10, (int)Math.round(this.getHeight() - 50 - currentP*yScalingFactor));
2 26 Feb 07 jari 336         }
2 26 Feb 07 jari 337          
2 26 Feb 07 jari 338         if (currentXSliderPosition > 0) {
2 26 Feb 07 jari 339             g2D.setStroke(dashed);
2 26 Feb 07 jari 340             if (usePosAndNeg) {
2 26 Feb 07 jari 341               g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 342               g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 343             } else if (usePosOnly) {
2 26 Feb 07 jari 344                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 345             } else if (useNegOnly) {
2 26 Feb 07 jari 346                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 347             }
2 26 Feb 07 jari 348         }
2 26 Feb 07 jari 349          
2 26 Feb 07 jari 350         //draw axes
2 26 Feb 07 jari 351         //g2D.setColor(Color.black);
2 26 Feb 07 jari 352         g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 353          */
2 26 Feb 07 jari 354         g2D.drawLine(40, (int)Math.round((double)(this.getHeight() - 50)), this.getWidth() - 10, (int)Math.round((double)(this.getHeight() - 50)));
2 26 Feb 07 jari 355         g2D.drawLine((int)Math.round((double)(this.getWidth()/2)), 10, (int)Math.round((double)(this.getWidth()/2)), this.getHeight() - 50);
2 26 Feb 07 jari 356         //g2D.setStroke(new BasicStroke(1.0f));
2 26 Feb 07 jari 357         g2D.drawLine(40, 10, 40, this.getHeight() - 50);
2 26 Feb 07 jari 358         
2 26 Feb 07 jari 359         g2D.setStroke(new BasicStroke(1.0f));
2 26 Feb 07 jari 360         if ((useRefLines) && (currentMouseX >= 40) && (currentMouseX <= this.getWidth() - 10) && (currentMouseY >= 10) && (currentMouseY <= (this.getHeight() - 50))) {
2 26 Feb 07 jari 361             g2D.setColor(Color.magenta);
2 26 Feb 07 jari 362             g2D.drawLine(40, currentMouseY, this.getWidth() - 10, currentMouseY);
2 26 Feb 07 jari 363             g2D.drawLine(currentMouseX, 10, currentMouseX, this.getHeight() - 50);
2 26 Feb 07 jari 364         }
2 26 Feb 07 jari 365         g2D.setColor(Color.black);
2 26 Feb 07 jari 366         g2D.rotate(-Math.PI/2);
2 26 Feb 07 jari 367         //g2D.drawString("-log10(p)", 20, this.getHeight()/2 + 10);
2 26 Feb 07 jari 368         //g2D.drawString("-log10(p)", -1 * this.getWidth()/2, this.getHeight()/2);
2 26 Feb 07 jari 369         g2D.drawString("-log10(p)", -1*this.getHeight()/2, 15);
2 26 Feb 07 jari 370         g2D.rotate(Math.PI/2);
2 26 Feb 07 jari 371 /*
2 26 Feb 07 jari 372         double[] maxXAndY = getMaxXAndY();
2 26 Feb 07 jari 373         double[] minXAndY = getMinXAndY();
2 26 Feb 07 jari 374  
2 26 Feb 07 jari 375         double origMaxXValue = maxXAndY[0];
2 26 Feb 07 jari 376         double origMaxYValue = maxXAndY[1];
2 26 Feb 07 jari 377         double origMinXValue = minXAndY[0];
2 26 Feb 07 jari 378         double origMinYValue = minXAndY[1];
2 26 Feb 07 jari 379  */
2 26 Feb 07 jari 380         /*
2 26 Feb 07 jari 381         double origMaxXValue = getMax(xArray);
2 26 Feb 07 jari 382         double origMaxYValue = getMax(yArray);
2 26 Feb 07 jari 383         double origMinXValue = getMin(xArray);
2 26 Feb 07 jari 384         double origMinYValue = getMin(yArray);
2 26 Feb 07 jari 385          */
2 26 Feb 07 jari 386         
2 26 Feb 07 jari 387         //double xScalingFactor = getXScalingFactor(origMaxXValue, origMinXValue); // relative to originX and originY
2 26 Feb 07 jari 388         double[] xIntervalArray = new double[6];
2 26 Feb 07 jari 389         double xIncrement = 0.0d;
2 26 Feb 07 jari 390         
2 26 Feb 07 jari 391         if (Math.abs(origMaxXValue) > Math.abs(origMinXValue)) {
2 26 Feb 07 jari 392             xIncrement = Math.abs((double)(origMaxXValue/5.0d));
2 26 Feb 07 jari 393         } else {
2 26 Feb 07 jari 394             xIncrement = Math.abs((double)(origMinXValue/5.0d));
2 26 Feb 07 jari 395         }
2 26 Feb 07 jari 396         double xCounter = 0.0d;
2 26 Feb 07 jari 397         
2 26 Feb 07 jari 398         for (int i = 0; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 399             xIntervalArray[i] = xCounter;
2 26 Feb 07 jari 400             xCounter = xCounter + xIncrement;
2 26 Feb 07 jari 401             //yIntervalArray[i] = yCounter;
2 26 Feb 07 jari 402             //yCounter = yCounter + yIncrement;
2 26 Feb 07 jari 403         }
2 26 Feb 07 jari 404         
2 26 Feb 07 jari 405         //draw x tick marks
2 26 Feb 07 jari 406         g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 407         for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 408             g2D.drawLine((int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2, this.getHeight() - 50 - 5, (int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2, this.getHeight() - 50 + 5);
2 26 Feb 07 jari 409         }
2 26 Feb 07 jari 410         
2 26 Feb 07 jari 411         for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 412             g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight() - 50 - 5, this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight() - 50 + 5);
2 26 Feb 07 jari 413         }
2 26 Feb 07 jari 414         
2 26 Feb 07 jari 415         DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 416         nf.setMaximumFractionDigits(2);
2 26 Feb 07 jari 417         
2 26 Feb 07 jari 418         //tick labels
2 26 Feb 07 jari 419         for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 420             g2D.drawString(nf.format((double)xIntervalArray[i]), (int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2 - 10, this.getHeight() - 30);
2 26 Feb 07 jari 421         }
2 26 Feb 07 jari 422         
2 26 Feb 07 jari 423         for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 424             g2D.drawString("-" + nf.format((double)xIntervalArray[i]), this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor) - 10, this.getHeight() - 30);
2 26 Feb 07 jari 425         }
2 26 Feb 07 jari 426         
2 26 Feb 07 jari 427         if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 428             g2D.drawString("Gene Mean - Hypothesized Mean (" + oneClassMean + ")", this.getWidth()/2 - 85, this.getHeight() - 15);
2 26 Feb 07 jari 429         } else {
2 26 Feb 07 jari 430             g2D.drawString("Mean(GroupB) - Mean(GroupA)", this.getWidth()/2 - 85, this.getHeight() - 15);
2 26 Feb 07 jari 431         }
2 26 Feb 07 jari 432         
2 26 Feb 07 jari 433         int maxYInt = (int)(Math.round(origMaxYValue));
2 26 Feb 07 jari 434         
2 26 Feb 07 jari 435         int currY = 1;
2 26 Feb 07 jari 436         //double yScalingFactor = getYScalingFactor(origMaxYValue, origMinYValue); // relative to originX and originY
2 26 Feb 07 jari 437         //draw horizontal lines
2 26 Feb 07 jari 438         g2D.setColor(Color.gray);
2 26 Feb 07 jari 439         g2D.setStroke(new BasicStroke(1.0f));
2 26 Feb 07 jari 440         
2 26 Feb 07 jari 441         while ((currY <= maxYInt) && ((this.getHeight() - 50 - (int)Math.round(currY*yScalingFactor)) >= 10)) {
2 26 Feb 07 jari 442             g2D.drawLine(40, this.getHeight() - 50 - (int)Math.round(currY*yScalingFactor), this.getWidth() - 10, this.getHeight() - 50 - (int)Math.round(currY*yScalingFactor));
2 26 Feb 07 jari 443             currY++;
2 26 Feb 07 jari 444         }
2 26 Feb 07 jari 445         g2D.setColor(Color.black);
2 26 Feb 07 jari 446         for (int i = 1; i <= maxYInt; i++) {
2 26 Feb 07 jari 447             int position = 25;
2 26 Feb 07 jari 448             if (i >= 10) {
2 26 Feb 07 jari 449                 position = 20;
2 26 Feb 07 jari 450             }
2 26 Feb 07 jari 451             if ((this.getHeight() - 50 - (int)Math.round(i*yScalingFactor)) >= 10) {
2 26 Feb 07 jari 452                 g2D.drawString(nf.format(i), position, this.getHeight() - 50 - (int)Math.round(i*yScalingFactor));
2 26 Feb 07 jari 453             }
2 26 Feb 07 jari 454         }
2 26 Feb 07 jari 455         
2 26 Feb 07 jari 456         //draw data points
2 26 Feb 07 jari 457         for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 458             if ((!Double.isNaN(xArray[i])) && (!Double.isNaN(yArray[i])) && (!Double.isInfinite(xArray[i])) && (!Double.isInfinite(yArray[i]))) {
2 26 Feb 07 jari 459                 if (!projectClusters){
2 26 Feb 07 jari 460                     if ((currentXSliderPosition == 0) && (currentYSliderPosition == 0) && (usePosAndNeg)) {
2 26 Feb 07 jari 461                         if (isSig[i]) {
2 26 Feb 07 jari 462                             g2D.setColor(Color.red);
2 26 Feb 07 jari 463                         } else {
2 26 Feb 07 jari 464                             g2D.setColor(Color.black);
2 26 Feb 07 jari 465                         }
2 26 Feb 07 jari 466                     } else {
2 26 Feb 07 jari 467                         if (usePosAndNeg) {
2 26 Feb 07 jari 468                             if ((Math.abs(xArray[i]) >= currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 469                                 g2D.setColor(Color.green);
2 26 Feb 07 jari 470                             } else {
2 26 Feb 07 jari 471                                 if (isSig[i]) {
2 26 Feb 07 jari 472                                     g2D.setColor(Color.red);
2 26 Feb 07 jari 473                                 } else {
2 26 Feb 07 jari 474                                     g2D.setColor(Color.black);
2 26 Feb 07 jari 475                                 }
2 26 Feb 07 jari 476                             }
2 26 Feb 07 jari 477                         } else if (usePosOnly) {
2 26 Feb 07 jari 478                             if ((xArray[i] >= currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 479                                 g2D.setColor(Color.green);
2 26 Feb 07 jari 480                             } else {
2 26 Feb 07 jari 481                                 if (isSig[i]) {
2 26 Feb 07 jari 482                                     g2D.setColor(Color.red);
2 26 Feb 07 jari 483                                 } else {
2 26 Feb 07 jari 484                                     g2D.setColor(Color.black);
2 26 Feb 07 jari 485                                 }
2 26 Feb 07 jari 486                             }
2 26 Feb 07 jari 487                         } else if (useNegOnly) {
2 26 Feb 07 jari 488                             if ((xArray[i] <= -1*currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 489                                 g2D.setColor(Color.green);
2 26 Feb 07 jari 490                             } else {
2 26 Feb 07 jari 491                                 if (isSig[i]) {
2 26 Feb 07 jari 492                                     g2D.setColor(Color.red);
2 26 Feb 07 jari 493                                 } else {
2 26 Feb 07 jari 494                                     g2D.setColor(Color.black);
2 26 Feb 07 jari 495                                 }
2 26 Feb 07 jari 496                             }
2 26 Feb 07 jari 497                         }
2 26 Feb 07 jari 498                     }
2 26 Feb 07 jari 499                     
2 26 Feb 07 jari 500                 } else { // if (projectClusters)
2 26 Feb 07 jari 501                     Color pointColor = this.data.getProbeColor(this.experiment.getGeneIndexMappedToData(i));
2 26 Feb 07 jari 502                     if (pointColor == null) pointColor = Color.black;
2 26 Feb 07 jari 503                     g2D.setColor(pointColor);
2 26 Feb 07 jari 504                 }
2 26 Feb 07 jari 505                 drawPoint(g2D, xArray[i], yArray[i], getXScalingFactor(origMaxXValue, origMinXValue), getYScalingFactor(origMaxYValue, origMinYValue), 5);
2 26 Feb 07 jari 506             }
2 26 Feb 07 jari 507         }
2 26 Feb 07 jari 508         
2 26 Feb 07 jari 509         g2D.setColor(Color.black);
2 26 Feb 07 jari 510         
2 26 Feb 07 jari 511         if (currentYSliderPosition > 0) {
2 26 Feb 07 jari 512             g2D.setStroke(dashed);
2 26 Feb 07 jari 513             g2D.drawLine(40, (int)Math.round(this.getHeight() - 50 - currentP*yScalingFactor), this.getWidth() - 10, (int)Math.round(this.getHeight() - 50 - currentP*yScalingFactor));
2 26 Feb 07 jari 514         }
2 26 Feb 07 jari 515         
2 26 Feb 07 jari 516         if (currentXSliderPosition > 0) {
2 26 Feb 07 jari 517             g2D.setStroke(dashed);
2 26 Feb 07 jari 518             if (usePosAndNeg) {
2 26 Feb 07 jari 519                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 520                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 521             } else if (usePosOnly) {
2 26 Feb 07 jari 522                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) + currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 523             } else if (useNegOnly) {
2 26 Feb 07 jari 524                 g2D.drawLine((int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), 10, (int)Math.round(Math.round(this.getWidth()/2) - currentMean*xScalingFactor), (int)Math.round(this.getHeight() - 50));
2 26 Feb 07 jari 525             }
2 26 Feb 07 jari 526         }
2 26 Feb 07 jari 527         
2 26 Feb 07 jari 528         //draw axes
2 26 Feb 07 jari 529         //g2D.setColor(Color.black);
2 26 Feb 07 jari 530         g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 531         
2 26 Feb 07 jari 532         g2D.setColor(Color.black);
2 26 Feb 07 jari 533         
2 26 Feb 07 jari 534     }
2 26 Feb 07 jari 535     
2 26 Feb 07 jari 536     private void drawPoint(Graphics2D g2D, double xValue, double yValue, double xScale, double yScale, int diameter) {
2 26 Feb 07 jari 537         int xRaw = (int)Math.round(xValue*xScale);
2 26 Feb 07 jari 538         int yRaw = (int)Math.round(yValue*yScale);
2 26 Feb 07 jari 539         //System.out.println("xValue = " + xValue + " , yValue = " + yValue + ", xRaw = " + xRaw + ", yRaw  = " + yRaw);
2 26 Feb 07 jari 540         
2 26 Feb 07 jari 541         int xCoord = 0;
2 26 Feb 07 jari 542         int yCoord = 0;
2 26 Feb 07 jari 543         
2 26 Feb 07 jari 544         xCoord = (int)Math.round((double)(this.getWidth()/2)) + xRaw;
2 26 Feb 07 jari 545         yCoord = (int)Math.round((double)(this.getHeight() - 50)) - yRaw;
2 26 Feb 07 jari 546         
2 26 Feb 07 jari 547         g2D.fillOval(xCoord, yCoord, diameter, diameter);
2 26 Feb 07 jari 548         
2 26 Feb 07 jari 549     }
2 26 Feb 07 jari 550     
2 26 Feb 07 jari 551     /*
2 26 Feb 07 jari 552     private double getMax(double[] array) {
2 26 Feb 07 jari 553         double max = Double.NEGATIVE_INFINITY;
2 26 Feb 07 jari 554         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 555             if (!Double.isInfinite(array[i])) {
2 26 Feb 07 jari 556                 if (max < array[i]) {
2 26 Feb 07 jari 557                     max = array[i];
2 26 Feb 07 jari 558                 }
2 26 Feb 07 jari 559             }
2 26 Feb 07 jari 560         }
2 26 Feb 07 jari 561         return max;
2 26 Feb 07 jari 562     }
2 26 Feb 07 jari 563      
2 26 Feb 07 jari 564     private double getMin(double[] array) {
2 26 Feb 07 jari 565         double min = Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 566         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 567             if (!Double.isInfinite(array[i])) {
2 26 Feb 07 jari 568                 if (min > array[i]) {
2 26 Feb 07 jari 569                     min = array[i];
2 26 Feb 07 jari 570                 }
2 26 Feb 07 jari 571             }
2 26 Feb 07 jari 572         }
2 26 Feb 07 jari 573         return min;
2 26 Feb 07 jari 574     }
2 26 Feb 07 jari 575      */
2 26 Feb 07 jari 576     
2 26 Feb 07 jari 577     /**
2 26 Feb 07 jari 578      * Sets public color for the current cluster.
2 26 Feb 07 jari 579      */
2 26 Feb 07 jari 580     public void setClusterColor(Color color) {
2 26 Feb 07 jari 581         if(color ==null){  //indicates removal of cluster
2 26 Feb 07 jari 582             framework.removeCluster(getArrayMappedToData(), experiment, ClusterRepository.GENE_CLUSTER);
2 26 Feb 07 jari 583         }
2 26 Feb 07 jari 584     }
2 26 Feb 07 jari 585     
2 26 Feb 07 jari 586     /**
2 26 Feb 07 jari 587      *  Sets cluster color
2 26 Feb 07 jari 588      */
2 26 Feb 07 jari 589     public void storeCluster(){
2 26 Feb 07 jari 590         framework.storeSubCluster(getArrayMappedToData(), experiment, ClusterRepository.GENE_CLUSTER);
2 26 Feb 07 jari 591         onDataChanged(this.data);
2 26 Feb 07 jari 592     }
2 26 Feb 07 jari 593     
2 26 Feb 07 jari 594     public void setData(IData data) {
2 26 Feb 07 jari 595         this.data = data;
2 26 Feb 07 jari 596     }
2 26 Feb 07 jari 597     
2 26 Feb 07 jari 598     private int [] getArrayMappedToData(){
2 26 Feb 07 jari 599         int [] clusterIndices = getCluster();
2 26 Feb 07 jari 600         if(clusterIndices == null || clusterIndices.length < 1)
2 26 Feb 07 jari 601             return clusterIndices;
2 26 Feb 07 jari 602         
2 26 Feb 07 jari 603         int [] dataIndices = new int [clusterIndices.length];
2 26 Feb 07 jari 604         for(int i = 0; i < clusterIndices.length; i++){
2 26 Feb 07 jari 605             dataIndices[i] = this.experiment.getGeneIndexMappedToData(clusterIndices[i]);
2 26 Feb 07 jari 606         }
2 26 Feb 07 jari 607         return dataIndices;
2 26 Feb 07 jari 608     }
2 26 Feb 07 jari 609     
2 26 Feb 07 jari 610     private int[] getCluster() {
2 26 Feb 07 jari 611         Vector clusterVector = new Vector();
2 26 Feb 07 jari 612         for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 613             if (usePosAndNeg) {
2 26 Feb 07 jari 614                 if ((Math.abs(xArray[i]) >= currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 615                     clusterVector.add(new Integer(i));
2 26 Feb 07 jari 616                 }
2 26 Feb 07 jari 617             } else if (usePosOnly) {
2 26 Feb 07 jari 618                 if ((xArray[i] >= currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 619                     clusterVector.add(new Integer(i));
2 26 Feb 07 jari 620                 }
2 26 Feb 07 jari 621             } else if (useNegOnly) {
2 26 Feb 07 jari 622                 if ((xArray[i] <= -1*currentMean) && (yArray[i] >= currentP)) {
2 26 Feb 07 jari 623                     clusterVector.add(new Integer(i));
2 26 Feb 07 jari 624                 }
2 26 Feb 07 jari 625             }
2 26 Feb 07 jari 626         }
2 26 Feb 07 jari 627         
2 26 Feb 07 jari 628         int[] clust = new int[clusterVector.size()];
2 26 Feb 07 jari 629         for (int i = 0; i < clust.length; i++) {
2 26 Feb 07 jari 630             clust[i] = ((Integer)(clusterVector.get(i))).intValue();
2 26 Feb 07 jari 631         }
2 26 Feb 07 jari 632         //System.out.println("clust.length = " + clust.length);
2 26 Feb 07 jari 633         return clust;
2 26 Feb 07 jari 634     }
2 26 Feb 07 jari 635     
2 26 Feb 07 jari 636     public void launchNewSession(){
2 26 Feb 07 jari 637         framework.launchNewMAV(getArrayMappedToData(), this.experiment, "Multiple Experiment Viewer - Volcano Plot Selected Genes Viewer", Cluster.GENE_CLUSTER);
2 26 Feb 07 jari 638     }
2 26 Feb 07 jari 639     
2 26 Feb 07 jari 640     /**
2 26 Feb 07 jari 641      * Returns a file choosed by the user.
2 26 Feb 07 jari 642      */
2 26 Feb 07 jari 643     private static File getFile(Frame frame) {
2 26 Feb 07 jari 644         File file = null;
2 26 Feb 07 jari 645         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 646         fc.addChoosableFileFilter(new ExpressionFileFilter());
2 26 Feb 07 jari 647         fc.setFileView(new ExpressionFileView());
2 26 Feb 07 jari 648         int ret = fc.showSaveDialog(frame);
2 26 Feb 07 jari 649         if (ret == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 650             file = fc.getSelectedFile();
2 26 Feb 07 jari 651         }
2 26 Feb 07 jari 652         return file;
2 26 Feb 07 jari 653     }
2 26 Feb 07 jari 654     
2 26 Feb 07 jari 655     /**
2 26 Feb 07 jari 656      * Save the viewer cluster.
2 26 Feb 07 jari 657      */
2 26 Feb 07 jari 658     private void onSaveCluster() {
2 26 Feb 07 jari 659         Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 660         try {
2 26 Feb 07 jari 661             saveExperiment(frame, getExperiment(), getData(), getCluster());
2 26 Feb 07 jari 662         } catch (Exception e) {
2 26 Feb 07 jari 663             JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 664             e.printStackTrace();
2 26 Feb 07 jari 665         }
2 26 Feb 07 jari 666     }
2 26 Feb 07 jari 667     
2 26 Feb 07 jari 668     /**
2 26 Feb 07 jari 669      * Returns the experiment data (ratio values).
2 26 Feb 07 jari 670      */
2 26 Feb 07 jari 671     public Experiment getExperiment() {
2 26 Feb 07 jari 672         return experiment;
2 26 Feb 07 jari 673     }
2 26 Feb 07 jari 674     
2 26 Feb 07 jari 675     /**
2 26 Feb 07 jari 676      * Returns data values.
2 26 Feb 07 jari 677      */
2 26 Feb 07 jari 678     public IData getData() {
2 26 Feb 07 jari 679         return data;
2 26 Feb 07 jari 680     }
2 26 Feb 07 jari 681     
2 26 Feb 07 jari 682     /**
2 26 Feb 07 jari 683      * Saves values from specified experiment and its rows.
2 26 Feb 07 jari 684      */
2 26 Feb 07 jari 685     public void saveExperiment(Frame frame, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 686         File file = getFile(frame);
2 26 Feb 07 jari 687         if (file != null) {
2 26 Feb 07 jari 688             saveCluster(file, experiment, data, rows);
2 26 Feb 07 jari 689         }
2 26 Feb 07 jari 690     }
2 26 Feb 07 jari 691     
2 26 Feb 07 jari 692     private void saveCluster(File file, Experiment experiment, IData data, int[] rows) throws Exception {
2 26 Feb 07 jari 693         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 694         String[] fieldNames = data.getFieldNames();
2 26 Feb 07 jari 695         out.print("Original row");
2 26 Feb 07 jari 696         out.print("\t");
2 26 Feb 07 jari 697         for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 698             out.print(fieldNames[i]);
2 26 Feb 07 jari 699             //if (i < fieldNames.length - 1) {
2 26 Feb 07 jari 700             out.print("\t");
2 26 Feb 07 jari 701             //}
2 26 Feb 07 jari 702         }
2 26 Feb 07 jari 703         if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 704             out.print("GroupA mean\t");
2 26 Feb 07 jari 705             out.print("GroupA std.dev.\t");
2 26 Feb 07 jari 706             out.print("GroupB mean\t");
2 26 Feb 07 jari 707             out.print("GroupB std.dev.\t");
2 26 Feb 07 jari 708             out.print("Absolute t value");
2 26 Feb 07 jari 709             
2 26 Feb 07 jari 710         } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 711             out.print("Gene mean\t");
2 26 Feb 07 jari 712             out.print("Gene std.dev.\t");
2 26 Feb 07 jari 713             out.print("t value");
2 26 Feb 07 jari 714         }
2 26 Feb 07 jari 715         //out.print("\t");
2 26 Feb 07 jari 716         
2 26 Feb 07 jari 717         out.print("\t");
2 26 Feb 07 jari 718         out.print("Degrees of freedom\t");
2 26 Feb 07 jari 719         out.print("Raw p value\t");
2 26 Feb 07 jari 720         out.print("Adj p value");
2 26 Feb 07 jari 721         
2 26 Feb 07 jari 722         //out.print("UniqueID\tName");
2 26 Feb 07 jari 723         for (int i=0; i<experiment.getNumberOfSamples(); i++) {
2 26 Feb 07 jari 724             out.print("\t");
2 26 Feb 07 jari 725             out.print(data.getSampleName(experiment.getSampleIndex(i)));
2 26 Feb 07 jari 726         }
2 26 Feb 07 jari 727         out.print("\n");
2 26 Feb 07 jari 728         for (int i=0; i<rows.length; i++) {
2 26 Feb 07 jari 729             out.print(Integer.toString(experiment.getGeneIndexMappedToData(rows[i]) + 1));
2 26 Feb 07 jari 730             //out.print(data.getUniqueId(rows[i]));
2 26 Feb 07 jari 731             out.print("\t");
2 26 Feb 07 jari 732             //out.print(data.getGeneName(rows[i]));
2 26 Feb 07 jari 733             for (int k = 0; k < fieldNames.length; k++) {
2 26 Feb 07 jari 734                 out.print(data.getElementAttribute(experiment.getGeneIndexMappedToData(rows[i]), k));
2 26 Feb 07 jari 735                 //if (k < fieldNames.length - 1) {
2 26 Feb 07 jari 736                 out.print("\t");
2 26 Feb 07 jari 737                 //}
2 26 Feb 07 jari 738             }
2 26 Feb 07 jari 739             if (tTestDesign == TtestInitDialog.BETWEEN_SUBJECTS) {
2 26 Feb 07 jari 740                 out.print(((Float)meansA.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 741                 out.print(((Float)sdA.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 742                 out.print(((Float)meansB.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 743                 out.print(((Float)sdB.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 744             } else if (tTestDesign == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 745                 out.print(((Float)oneClassMeans.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 746                 out.print(((Float)oneClassSDs.get(rows[i])).floatValue() + "\t");
2 26 Feb 07 jari 747             }
2 26 Feb 07 jari 748             //out.print("\t");
2 26 Feb 07 jari 749             out.print("" + ((Float)tValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 750             out.print("\t");
2 26 Feb 07 jari 751             out.print("" + ((Float)dfValues.get(rows[i])).intValue());
2 26 Feb 07 jari 752             out.print("\t");
2 26 Feb 07 jari 753             out.print("" + ((Float)rawPValues.get(rows[i])).floatValue());
2 26 Feb 07 jari 754             out.print("\t");
2 26 Feb 07 jari 755             out.print("" + ((Float)adjPValues.get(rows[i])).floatValue());            
2 26 Feb 07 jari 756             for (int j=0; j<experiment.getNumberOfSamples(); j++) {
2 26 Feb 07 jari 757                 out.print("\t");
2 26 Feb 07 jari 758                 out.print(Float.toString(experiment.get(rows[i], j)));
2 26 Feb 07 jari 759             }
2 26 Feb 07 jari 760             out.print("\n");
2 26 Feb 07 jari 761         }
2 26 Feb 07 jari 762         out.flush();
2 26 Feb 07 jari 763         out.close();
2 26 Feb 07 jari 764     }
2 26 Feb 07 jari 765     
2 26 Feb 07 jari 766     private double[] getMaxXAndY() { // used to scale the graph using only points that have valid values for both x and y
2 26 Feb 07 jari 767         double[] maxXAndY = new double[2];
2 26 Feb 07 jari 768         
2 26 Feb 07 jari 769         double maxX = Double.NEGATIVE_INFINITY;
2 26 Feb 07 jari 770         double maxY = Double.NEGATIVE_INFINITY;
2 26 Feb 07 jari 771         for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 772             if ((!Double.isInfinite(xArray[i])) && (!Double.isNaN(xArray[i])) && (!Double.isInfinite(yArray[i])) && (!Double.isNaN(yArray[i]))) {
2 26 Feb 07 jari 773                 if (maxX < xArray[i]) {
2 26 Feb 07 jari 774                     maxX = xArray[i];
2 26 Feb 07 jari 775                 }
2 26 Feb 07 jari 776                 if (maxY < yArray[i]) {
2 26 Feb 07 jari 777                     maxY = yArray[i];
2 26 Feb 07 jari 778                 }
2 26 Feb 07 jari 779             }
2 26 Feb 07 jari 780         }
2 26 Feb 07 jari 781         
2 26 Feb 07 jari 782         maxXAndY[0] = maxX;
2 26 Feb 07 jari 783         maxXAndY[1] = maxY;
2 26 Feb 07 jari 784         
2 26 Feb 07 jari 785         return maxXAndY;
2 26 Feb 07 jari 786     }
2 26 Feb 07 jari 787     
2 26 Feb 07 jari 788     private double[] getMinXAndY() { // used to scale the graph using only points that have valid values for both x and y
2 26 Feb 07 jari 789         double[] minXAndY = new double[2];
2 26 Feb 07 jari 790         
2 26 Feb 07 jari 791         double minX = Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 792         double minY = Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 793         for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 794             if ((!Double.isInfinite(xArray[i])) && (!Double.isNaN(xArray[i])) && (!Double.isInfinite(yArray[i])) && (!Double.isNaN(yArray[i]))) {
2 26 Feb 07 jari 795                 if (minX > xArray[i]) {
2 26 Feb 07 jari 796                     minX = xArray[i];
2 26 Feb 07 jari 797                 }
2 26 Feb 07 jari 798                 if (minY > yArray[i]) {
2 26 Feb 07 jari 799                     minY = yArray[i];
2 26 Feb 07 jari 800                 }
2 26 Feb 07 jari 801             }
2 26 Feb 07 jari 802         }
2 26 Feb 07 jari 803         
2 26 Feb 07 jari 804         minXAndY[0] = minX;
2 26 Feb 07 jari 805         minXAndY[1] = minY;
2 26 Feb 07 jari 806         
2 26 Feb 07 jari 807         return minXAndY;
2 26 Feb 07 jari 808     }
2 26 Feb 07 jari 809     
2 26 Feb 07 jari 810     
2 26 Feb 07 jari 811     private double getXScalingFactor(double maxValue, double minValue) {
2 26 Feb 07 jari 812         double largest = 1;
2 26 Feb 07 jari 813         if ((maxValue > 0)&&(minValue > 0)) {
2 26 Feb 07 jari 814             largest = maxValue;
2 26 Feb 07 jari 815         } else if ((maxValue > 0)&&(minValue < 0)) {
2 26 Feb 07 jari 816             if (maxValue > Math.abs(minValue)) {
2 26 Feb 07 jari 817                 largest = maxValue;
2 26 Feb 07 jari 818             } else {
2 26 Feb 07 jari 819                 largest = Math.abs(minValue);
2 26 Feb 07 jari 820             }
2 26 Feb 07 jari 821         } else if (maxValue <= 0) {
2 26 Feb 07 jari 822             largest = Math.abs(minValue);
2 26 Feb 07 jari 823         } else if (minValue == 0) {
2 26 Feb 07 jari 824             largest = maxValue;
2 26 Feb 07 jari 825         }
2 26 Feb 07 jari 826         
2 26 Feb 07 jari 827         //double scalingFactor =0;
2 26 Feb 07 jari 828         
2 26 Feb 07 jari 829         double scalingFactor = (this.getWidth()/2 - 50)/largest;
2 26 Feb 07 jari 830         
2 26 Feb 07 jari 831         
2 26 Feb 07 jari 832         return scalingFactor;
2 26 Feb 07 jari 833     }
2 26 Feb 07 jari 834     
2 26 Feb 07 jari 835     private double getYScalingFactor(double maxValue, double minValue) {
2 26 Feb 07 jari 836         double largest = 1;
2 26 Feb 07 jari 837         if ((maxValue > 0)&&(minValue > 0)) {
2 26 Feb 07 jari 838             largest = maxValue;
2 26 Feb 07 jari 839         } else if ((maxValue > 0)&&(minValue < 0)) {
2 26 Feb 07 jari 840             if (maxValue > Math.abs(minValue)) {
2 26 Feb 07 jari 841                 largest = maxValue;
2 26 Feb 07 jari 842             } else {
2 26 Feb 07 jari 843                 largest = Math.abs(minValue);
2 26 Feb 07 jari 844             }
2 26 Feb 07 jari 845         } else if (maxValue <= 0) {
2 26 Feb 07 jari 846             largest = Math.abs(minValue);
2 26 Feb 07 jari 847         } else if (minValue == 0) {
2 26 Feb 07 jari 848             largest = maxValue;
2 26 Feb 07 jari 849         }
2 26 Feb 07 jari 850         double scalingFactor = ((this.getHeight() - 50) - 50)/largest;
2 26 Feb 07 jari 851         return scalingFactor;
2 26 Feb 07 jari 852     }
2 26 Feb 07 jari 853     
2 26 Feb 07 jari 854     public void showReferenceLines() {
2 26 Feb 07 jari 855     }
2 26 Feb 07 jari 856     
2 26 Feb 07 jari 857     /**
2 26 Feb 07 jari 858      * Invoked by the framework when this viewer was deselected.
2 26 Feb 07 jari 859      */
2 26 Feb 07 jari 860     public void onDeselected() {
2 26 Feb 07 jari 861     }
2 26 Feb 07 jari 862     
2 26 Feb 07 jari 863     /**
2 26 Feb 07 jari 864      * Invoked by the framework when data is changed,
2 26 Feb 07 jari 865      * if this viewer is selected.
2 26 Feb 07 jari 866      * @see IData
2 26 Feb 07 jari 867      */
2 26 Feb 07 jari 868     public void onDataChanged(IData data) {
2 26 Feb 07 jari 869         setData(data);
2 26 Feb 07 jari 870     }
2 26 Feb 07 jari 871     
2 26 Feb 07 jari 872     /**
2 26 Feb 07 jari 873      * Invoked when the framework is going to be closed.
2 26 Feb 07 jari 874      */
2 26 Feb 07 jari 875     public void onClosed() {
2 26 Feb 07 jari 876     }
2 26 Feb 07 jari 877     
2 26 Feb 07 jari 878     /**
2 26 Feb 07 jari 879      * Returns a component to be inserted into scroll pane view port.
2 26 Feb 07 jari 880      */
2 26 Feb 07 jari 881     public JComponent getContentComponent() {
2 26 Feb 07 jari 882         return this;
2 26 Feb 07 jari 883     }
2 26 Feb 07 jari 884     
2 26 Feb 07 jari 885     /**
2 26 Feb 07 jari 886      * Invoked by the framework to save or to print viewer image.
2 26 Feb 07 jari 887      */
2 26 Feb 07 jari 888     public BufferedImage getImage() {
2 26 Feb 07 jari 889         return null;
2 26 Feb 07 jari 890     }
2 26 Feb 07 jari 891     
2 26 Feb 07 jari 892     /**
2 26 Feb 07 jari 893      * Invoked by the framework when this viewer is selected.
2 26 Feb 07 jari 894      */
2 26 Feb 07 jari 895     public void onSelected(IFramework framework) {
2 26 Feb 07 jari 896         this.framework = framework;
2 26 Feb 07 jari 897         setData(framework.getData());
2 26 Feb 07 jari 898     }
2 26 Feb 07 jari 899     
2 26 Feb 07 jari 900     /**
2 26 Feb 07 jari 901      * Invoked by the framework when display menu is changed,
2 26 Feb 07 jari 902      * if this viewer is selected.
2 26 Feb 07 jari 903      * @see IDisplayMenu
2 26 Feb 07 jari 904      */
2 26 Feb 07 jari 905     public void onMenuChanged(IDisplayMenu menu) {
2 26 Feb 07 jari 906     }
2 26 Feb 07 jari 907     
2 26 Feb 07 jari 908     /**
2 26 Feb 07 jari 909      * Returns a component to be inserted into scroll pane header.
2 26 Feb 07 jari 910      */
2 26 Feb 07 jari 911     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 912         return null;
2 26 Feb 07 jari 913     }
2 26 Feb 07 jari 914     
2 26 Feb 07 jari 915     /*
2 26 Feb 07 jari 916     public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
2 26 Feb 07 jari 917     }
2 26 Feb 07 jari 918      
2 26 Feb 07 jari 919     public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {
2 26 Feb 07 jari 920         currentMouseX = mouseEvent.getX();
2 26 Feb 07 jari 921         currentMouseY = mouseEvent.getY();
2 26 Feb 07 jari 922         System.out.println("X = " + currentMouseX + ", Y = " + currentMouseY);
2 26 Feb 07 jari 923         this.repaint();
2 26 Feb 07 jari 924     }
2 26 Feb 07 jari 925      */
2 26 Feb 07 jari 926     
2 26 Feb 07 jari 927     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 928     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 929         
2 26 Feb 07 jari 930         gbc.gridx = gx;
2 26 Feb 07 jari 931         gbc.gridy = gy;
2 26 Feb 07 jari 932         gbc.gridwidth = gw;
2 26 Feb 07 jari 933         gbc.gridheight = gh;
2 26 Feb 07 jari 934         gbc.weightx = wx;
2 26 Feb 07 jari 935         gbc.weighty = wy;
2 26 Feb 07 jari 936     }
2 26 Feb 07 jari 937     
2 26 Feb 07 jari 938     /** Returns a component to be inserted into the scroll pane row header
2 26 Feb 07 jari 939      */
2 26 Feb 07 jari 940     public JComponent getRowHeaderComponent() {
2 26 Feb 07 jari 941         return null;
2 26 Feb 07 jari 942     }
2 26 Feb 07 jari 943     
2 26 Feb 07 jari 944     /** Returns the corner component corresponding to the indicated corner,
2 26 Feb 07 jari 945      * posibly null
2 26 Feb 07 jari 946      */
2 26 Feb 07 jari 947     public JComponent getCornerComponent(int cornerIndex) {
2 26 Feb 07 jari 948         return null;
2 26 Feb 07 jari 949     }
2 26 Feb 07 jari 950
2 26 Feb 07 jari 951     /** Returns the viewer's clusters or null
2 26 Feb 07 jari 952      */
2 26 Feb 07 jari 953     public int[][] getClusters() {
2 26 Feb 07 jari 954         return null;
2 26 Feb 07 jari 955     }    
2 26 Feb 07 jari 956  
2 26 Feb 07 jari 957     /** Returns int value indicating viewer type
2 26 Feb 07 jari 958      * Cluster.GENE_CLUSTER, Cluster.EXPERIMENT_CLUSTER, or -1 for both or unspecified
2 26 Feb 07 jari 959      */
2 26 Feb 07 jari 960     public int getViewerType() {
2 26 Feb 07 jari 961         return Cluster.GENE_CLUSTER;
2 26 Feb 07 jari 962     }    
2 26 Feb 07 jari 963     
2 26 Feb 07 jari 964     class SelectionSliderPanel extends ActionInfoDialog {
2 26 Feb 07 jari 965         JSlider pValueSlider, meanSlider;
2 26 Feb 07 jari 966         JTextField pValueField, meanField;
2 26 Feb 07 jari 967         JRadioButton posAndNeg, posOnly, negOnly;
2 26 Feb 07 jari 968         JButton closeButton, resetButton;
2 26 Feb 07 jari 969         int initP, initMean;
2 26 Feb 07 jari 970         double maxP, maxMean;
2 26 Feb 07 jari 971         
2 26 Feb 07 jari 972         SelectionSliderPanel(int initP, int initMean) {
2 26 Feb 07 jari 973             super((JFrame)(JOptionPane.getFrameForComponent(TTestVolcanoPlotViewer.this)), "Select genes", true);
2 26 Feb 07 jari 974             this.setBackground(Color.white);
2 26 Feb 07 jari 975             //super(new JFrame(), "Select genes", true);
2 26 Feb 07 jari 976             this.initP = initP;
2 26 Feb 07 jari 977             this.initMean = initMean;
2 26 Feb 07 jari 978             this.maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 979             this.maxMean = Math.max(Math.abs(getMaxXAndY()[0]), Math.abs(getMinXAndY()[0]));
2 26 Feb 07 jari 980             setBounds(0, 0, 450, 200);
2 26 Feb 07 jari 981             setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 982             GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 983             GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 984             //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 985             JPanel pane = new JPanel();
2 26 Feb 07 jari 986             pane.setLayout(gridbag);
2 26 Feb 07 jari 987             
2 26 Feb 07 jari 988             JPanel sliderPanel = new JPanel();
2 26 Feb 07 jari 989             GridBagLayout grid1 = new GridBagLayout();
2 26 Feb 07 jari 990             sliderPanel.setLayout(grid1);
2 26 Feb 07 jari 991             
2 26 Feb 07 jari 992             JLabel pValueLabel = new JLabel("Select -log10(p) cutoff: ");
2 26 Feb 07 jari 993             buildConstraints(constraints, 0, 0, 1, 1, 30, 50);
2 26 Feb 07 jari 994             grid1.setConstraints(pValueLabel, constraints);
2 26 Feb 07 jari 995             sliderPanel.add(pValueLabel);
2 26 Feb 07 jari 996             
2 26 Feb 07 jari 997             pValueSlider = new JSlider(0, 100, initP);
2 26 Feb 07 jari 998             pValueField = new JTextField("" + getDisplayPValue(initP), 7);
2 26 Feb 07 jari 999             pValueField.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1000                 public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1001                     int sliderValue;
2 26 Feb 07 jari 1002                     try {
2 26 Feb 07 jari 1003                         String s = pValueField.getText();
2 26 Feb 07 jari 1004                         //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1005                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 1006                         sliderValue = (int)Math.round(f*100/maxP);
2 26 Feb 07 jari 1007                         if (sliderValue >= 100) {
2 26 Feb 07 jari 1008                             pValueSlider.setValue(100);
2 26 Feb 07 jari 1009                             pValueField.setText("" + (float)maxP);
2 26 Feb 07 jari 1010                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 1011                             pValueSlider.setValue(0);
2 26 Feb 07 jari 1012                             pValueField.setText("" + 0.0f);
2 26 Feb 07 jari 1013                         } else {
2 26 Feb 07 jari 1014                             pValueSlider.setValue(sliderValue);
2 26 Feb 07 jari 1015                             pValueField.setText("" + (float)f);
2 26 Feb 07 jari 1016                         }
2 26 Feb 07 jari 1017                     } catch (Exception exc) {
2 26 Feb 07 jari 1018                         pValueSlider.setValue(0);
2 26 Feb 07 jari 1019                         pValueField.setText("" + 0.0f);
2 26 Feb 07 jari 1020                     }
2 26 Feb 07 jari 1021                     
2 26 Feb 07 jari 1022                     currentYSliderPosition = pValueSlider.getValue();
2 26 Feb 07 jari 1023                     currentP = getDisplayPValue(currentYSliderPosition);
2 26 Feb 07 jari 1024                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1025                 }
2 26 Feb 07 jari 1026             });
2 26 Feb 07 jari 1027             pValueField.addFocusListener(new FocusListener() {
2 26 Feb 07 jari 1028                 public void focusLost(FocusEvent e) {
2 26 Feb 07 jari 1029                     int sliderValue;
2 26 Feb 07 jari 1030                     try {
2 26 Feb 07 jari 1031                         String s = pValueField.getText();
2 26 Feb 07 jari 1032                         //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1033                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 1034                         sliderValue = (int)Math.round(f*100/maxP);
2 26 Feb 07 jari 1035                         if (sliderValue >= 100) {
2 26 Feb 07 jari 1036                             pValueSlider.setValue(100);
2 26 Feb 07 jari 1037                             pValueField.setText("" + (float)maxP);
2 26 Feb 07 jari 1038                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 1039                             pValueSlider.setValue(0);
2 26 Feb 07 jari 1040                             pValueField.setText("" + 0.0f);
2 26 Feb 07 jari 1041                         } else {
2 26 Feb 07 jari 1042                             pValueSlider.setValue(sliderValue);
2 26 Feb 07 jari 1043                             pValueField.setText("" + (float)f);
2 26 Feb 07 jari 1044                         }
2 26 Feb 07 jari 1045                     } catch (Exception exc) {
2 26 Feb 07 jari 1046                         pValueSlider.setValue(0);
2 26 Feb 07 jari 1047                         pValueField.setText("" + 0.0f);
2 26 Feb 07 jari 1048                     }
2 26 Feb 07 jari 1049                     
2 26 Feb 07 jari 1050                     currentYSliderPosition = pValueSlider.getValue();
2 26 Feb 07 jari 1051                     currentP = getDisplayPValue(currentYSliderPosition);
2 26 Feb 07 jari 1052                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1053                 }
2 26 Feb 07 jari 1054                 
2 26 Feb 07 jari 1055                 public void focusGained(FocusEvent e) {
2 26 Feb 07 jari 1056                 }
2 26 Feb 07 jari 1057             });
2 26 Feb 07 jari 1058             pValueSlider.addChangeListener(new ChangeListener() {
2 26 Feb 07 jari 1059                 public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 1060                     int value = pValueSlider.getValue();
2 26 Feb 07 jari 1061                     //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1062                     double displayValue = (double)(value*maxP/100);
2 26 Feb 07 jari 1063                     if (value == 0) {
2 26 Feb 07 jari 1064                         displayValue = 0.0f;
2 26 Feb 07 jari 1065                     }
2 26 Feb 07 jari 1066                     pValueField.setText("" + (float)displayValue);
2 26 Feb 07 jari 1067                     
2 26 Feb 07 jari 1068                     currentYSliderPosition = pValueSlider.getValue();
2 26 Feb 07 jari 1069                     currentP = getDisplayPValue(currentYSliderPosition);
2 26 Feb 07 jari 1070                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1071                 }
2 26 Feb 07 jari 1072             });
2 26 Feb 07 jari 1073             
2 26 Feb 07 jari 1074             pValueSlider.setBackground(Color.white);
2 26 Feb 07 jari 1075             buildConstraints(constraints, 1, 0, 1, 1, 50, 0);
2 26 Feb 07 jari 1076             grid1.setConstraints(pValueSlider, constraints);
2 26 Feb 07 jari 1077             sliderPanel.add(pValueSlider);
2 26 Feb 07 jari 1078             
2 26 Feb 07 jari 1079             
2 26 Feb 07 jari 1080             buildConstraints(constraints, 2, 0, 1, 1, 20, 0);
2 26 Feb 07 jari 1081             grid1.setConstraints(pValueField, constraints);
2 26 Feb 07 jari 1082             sliderPanel.add(pValueField);
2 26 Feb 07 jari 1083             
2 26 Feb 07 jari 1084             JLabel meanLabel = new JLabel("Select mean diff. cutoff: ");
2 26 Feb 07 jari 1085             buildConstraints(constraints, 0, 1, 1, 1, 30, 50);
2 26 Feb 07 jari 1086             grid1.setConstraints(meanLabel, constraints);
2 26 Feb 07 jari 1087             sliderPanel.add(meanLabel);
2 26 Feb 07 jari 1088             
2 26 Feb 07 jari 1089             meanSlider = new JSlider(0, 100, initMean);
2 26 Feb 07 jari 1090             meanField = new JTextField("" + getDisplayMean(initMean), 7);
2 26 Feb 07 jari 1091             meanSlider.addChangeListener(new ChangeListener() {
2 26 Feb 07 jari 1092                 public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 1093                     int value = meanSlider.getValue();
2 26 Feb 07 jari 1094                     //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1095                     double displayValue = (double)(value*maxMean/100);
2 26 Feb 07 jari 1096                     if (value == 0) {
2 26 Feb 07 jari 1097                         displayValue = 0.0f;
2 26 Feb 07 jari 1098                     }
2 26 Feb 07 jari 1099                     meanField.setText("" + (float)displayValue);
2 26 Feb 07 jari 1100                     
2 26 Feb 07 jari 1101                     currentXSliderPosition = meanSlider.getValue();
2 26 Feb 07 jari 1102                     currentMean = getDisplayMean(currentXSliderPosition);
2 26 Feb 07 jari 1103                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1104                 }
2 26 Feb 07 jari 1105             });
2 26 Feb 07 jari 1106             meanField.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1107                 public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1108                     int sliderValue;
2 26 Feb 07 jari 1109                     try {
2 26 Feb 07 jari 1110                         String s = meanField.getText();
2 26 Feb 07 jari 1111                         //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1112                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 1113                         sliderValue = (int)Math.round(f*100/maxMean);
2 26 Feb 07 jari 1114                         if (sliderValue >= 100) {
2 26 Feb 07 jari 1115                             meanSlider.setValue(100);
2 26 Feb 07 jari 1116                             meanField.setText("" + (float)maxMean);
2 26 Feb 07 jari 1117                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 1118                             meanSlider.setValue(0);
2 26 Feb 07 jari 1119                             meanField.setText("" + 0.0f);
2 26 Feb 07 jari 1120                         } else {
2 26 Feb 07 jari 1121                             meanSlider.setValue(sliderValue);
2 26 Feb 07 jari 1122                             meanField.setText("" + (float)f);
2 26 Feb 07 jari 1123                         }
2 26 Feb 07 jari 1124                     } catch (Exception exc) {
2 26 Feb 07 jari 1125                         meanSlider.setValue(0);
2 26 Feb 07 jari 1126                         meanField.setText("" + 0.0f);
2 26 Feb 07 jari 1127                     }
2 26 Feb 07 jari 1128                     
2 26 Feb 07 jari 1129                     currentXSliderPosition = meanSlider.getValue();
2 26 Feb 07 jari 1130                     currentMean = getDisplayMean(currentXSliderPosition);
2 26 Feb 07 jari 1131                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1132                 }
2 26 Feb 07 jari 1133             });
2 26 Feb 07 jari 1134             meanField.addFocusListener(new FocusListener() {
2 26 Feb 07 jari 1135                 public void focusLost(FocusEvent e) {
2 26 Feb 07 jari 1136                     int sliderValue;
2 26 Feb 07 jari 1137                     try {
2 26 Feb 07 jari 1138                         String s = meanField.getText();
2 26 Feb 07 jari 1139                         //double maxP = getMaxXAndY()[1];
2 26 Feb 07 jari 1140                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 1141                         sliderValue = (int)Math.round(f*100/maxMean);
2 26 Feb 07 jari 1142                         if (sliderValue >= 100) {
2 26 Feb 07 jari 1143                             meanSlider.setValue(100);
2 26 Feb 07 jari 1144                             meanField.setText("" + (float)maxMean);
2 26 Feb 07 jari 1145                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 1146                             meanSlider.setValue(0);
2 26 Feb 07 jari 1147                             meanField.setText("" + 0.0f);
2 26 Feb 07 jari 1148                         } else {
2 26 Feb 07 jari 1149                             meanSlider.setValue(sliderValue);
2 26 Feb 07 jari 1150                             meanField.setText("" + (float)f);
2 26 Feb 07 jari 1151                         }
2 26 Feb 07 jari 1152                     } catch (Exception exc) {
2 26 Feb 07 jari 1153                         meanSlider.setValue(0);
2 26 Feb 07 jari 1154                         meanField.setText("" + 0.0f);
2 26 Feb 07 jari 1155                     }
2 26 Feb 07 jari 1156                     
2 26 Feb 07 jari 1157                     currentXSliderPosition = meanSlider.getValue();
2 26 Feb 07 jari 1158                     currentMean = getDisplayMean(currentXSliderPosition);
2 26 Feb 07 jari 1159                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1160                 }
2 26 Feb 07 jari 1161                 
2 26 Feb 07 jari 1162                 public void focusGained(FocusEvent e) {
2 26 Feb 07 jari 1163                 }
2 26 Feb 07 jari 1164             });
2 26 Feb 07 jari 1165             
2 26 Feb 07 jari 1166             meanSlider.setBackground(Color.white);
2 26 Feb 07 jari 1167             buildConstraints(constraints, 1, 1, 1, 1, 50, 0);
2 26 Feb 07 jari 1168             grid1.setConstraints(meanSlider, constraints);
2 26 Feb 07 jari 1169             sliderPanel.add(meanSlider);
2 26 Feb 07 jari 1170             
2 26 Feb 07 jari 1171             
2 26 Feb 07 jari 1172             buildConstraints(constraints, 2, 1, 1, 1, 20, 0);
2 26 Feb 07 jari 1173             grid1.setConstraints(meanField, constraints);
2 26 Feb 07 jari 1174             sliderPanel.add(meanField);
2 26 Feb 07 jari 1175             
2 26 Feb 07 jari 1176             JPanel chooseMeansPanel = new JPanel();
2 26 Feb 07 jari 1177             GridBagLayout grid2 = new GridBagLayout();
2 26 Feb 07 jari 1178             chooseMeansPanel.setLayout(grid2);
2 26 Feb 07 jari 1179             
2 26 Feb 07 jari 1180             ButtonGroup group = new ButtonGroup();
2 26 Feb 07 jari 1181             posAndNeg = new JRadioButton("Both pos. and neg.");
2 26 Feb 07 jari 1182             posOnly = new JRadioButton("Pos. only");
2 26 Feb 07 jari 1183             negOnly = new JRadioButton("Neg. only");
2 26 Feb 07 jari 1184             if (usePosAndNeg) {
2 26 Feb 07 jari 1185                 //usePosAndNeg = true;
2 26 Feb 07 jari 1186                 posAndNeg.setSelected(true);
2 26 Feb 07 jari 1187                 posOnly.setSelected(false);
2 26 Feb 07 jari 1188                 negOnly.setSelected(false);
2 26 Feb 07 jari 1189             } else if (usePosOnly) {
2 26 Feb 07 jari 1190                 posAndNeg.setSelected(false);
2 26 Feb 07 jari 1191                 posOnly.setSelected(true);
2 26 Feb 07 jari 1192                 negOnly.setSelected(false);
2 26 Feb 07 jari 1193             } else if (useNegOnly) {
2 26 Feb 07 jari 1194                 posAndNeg.setSelected(false);
2 26 Feb 07 jari 1195                 posOnly.setSelected(false);
2 26 Feb 07 jari 1196                 negOnly.setSelected(true);
2 26 Feb 07 jari 1197             }
2 26 Feb 07 jari 1198             posAndNeg.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1199                 public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1200                     usePosAndNeg = true;
2 26 Feb 07 jari 1201                     usePosOnly = false;
2 26 Feb 07 jari 1202                     useNegOnly = false;
2 26 Feb 07 jari 1203                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1204                 }
2 26 Feb 07 jari 1205             });
2 26 Feb 07 jari 1206             posAndNeg.setBackground(Color.white);
2 26 Feb 07 jari 1207             
2 26 Feb 07 jari 1208             //posOnly = new JRadioButton("Pos. only", false);
2 26 Feb 07 jari 1209             posOnly.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1210                 public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1211                     usePosAndNeg = false;
2 26 Feb 07 jari 1212                     usePosOnly = true;
2 26 Feb 07 jari 1213                     useNegOnly = false;
2 26 Feb 07 jari 1214                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1215                 }
2 26 Feb 07 jari 1216             });
2 26 Feb 07 jari 1217             posOnly.setBackground(Color.white);
2 26 Feb 07 jari 1218             
2 26 Feb 07 jari 1219             //negOnly = new JRadioButton("Neg. only", false);
2 26 Feb 07 jari 1220             negOnly.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1221                 public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1222                     usePosAndNeg = false;
2 26 Feb 07 jari 1223                     usePosOnly = false;
2 26 Feb 07 jari 1224                     useNegOnly = true;
2 26 Feb 07 jari 1225                     TTestVolcanoPlotViewer.this.repaint();
2 26 Feb 07 jari 1226                 }
2 26 Feb 07 jari 1227             });
2 26 Feb 07 jari 1228             negOnly.setBackground(Color.white);
2 26 Feb 07 jari 1229             
2 26 Feb 07 jari 1230             group.add(posAndNeg);
2 26 Feb 07 jari 1231             group.add(posOnly);
2 26 Feb 07 jari 1232             group.add(negOnly);
2 26 Feb 07 jari 1233             
2 26 Feb 07 jari 1234             buildConstraints(constraints, 0, 0, 1, 1, 33, 100);
2 26 Feb 07 jari 1235             grid2.setConstraints(posAndNeg, constraints);
2 26 Feb 07 jari 1236             chooseMeansPanel.add(posAndNeg);
2 26 Feb 07 jari 1237             
2 26 Feb 07 jari 1238             buildConstraints(constraints, 1, 0, 1, 1, 33, 0);
2 26 Feb 07 jari 1239             grid2.setConstraints(posOnly, constraints);
2 26 Feb 07 jari 1240             chooseMeansPanel.add(posOnly);
2 26 Feb 07 jari 1241             
2 26 Feb 07 jari 1242             buildConstraints(constraints, 2, 0, 1, 1, 34, 0);
2 26 Feb 07 jari 1243             grid2.setConstraints(negOnly, constraints);
2 26 Feb 07 jari 1244             chooseMeansPanel.add(negOnly);
2 26 Feb 07 jari 1245             
2 26 Feb 07 jari 1246             JPanel resetClosePanel = new JPanel();
2 26 Feb 07 jari 1247             GridBagLayout grid3 = new GridBagLayout();
2 26 Feb 07 jari 1248             resetClosePanel.setLayout(grid3);
2 26 Feb 07 jari 1249             
2 26 Feb 07 jari 1250             resetButton = new JButton("Reset");
2 26 Feb 07 jari 1251             resetButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 1252                 public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1253                     pValueSlider.setValue(0);
2 26 Feb 07 jari 1254                     pValueField.setText("0.0");
2 26 Feb 07 jari 1255                     meanSlider.setValue(0);
2 26 Feb 07 jari 1256                     meanField.setText("0.0");
2 26 Feb 07 jari 1257                     posAndNeg.setSelected(true);
2 26 Feb 07 jari 1258                     usePosAndNeg = true;
2 26 Feb 07 jari 1259                     usePosOnly = false;
2 26 Feb 07 jari 1260                     useNegOnly = false;
2 26 Feb 07 jari 1261                     currentXSliderPosition = 0;
2 26 Feb 07 jari 1262                     currentYSliderPosition = 0;
2 26 Feb 07 jari 1263                 }
2 26 Feb 07 jari 1264             });
2 26 Feb 07 jari 1265             buildConstraints(constraints, 0, 0, 1, 1, 50, 100);
2 26 Feb 07 jari 1266             constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 1267             grid3.setConstraints(resetButton, constraints);
2 26 Feb 07 jari 1268             resetClosePanel.add(resetButton);
2 26 Feb 07 jari 1269             
2 26 Feb 07 jari 1270             closeButton = new JButton("OK");
2 26 Feb 07 jari 1271             closeButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 1272                 public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1273                     SelectionSliderPanel.this.dispose();
2 26 Feb 07 jari 1274                 }
2 26 Feb 07 jari 1275             });
2 26 Feb 07 jari 1276             buildConstraints(constraints, 1, 0, 1, 1, 50, 0);
2 26 Feb 07 jari 1277             constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 1278             grid3.setConstraints(closeButton, constraints);
2 26 Feb 07 jari 1279             resetClosePanel.add(closeButton);
2 26 Feb 07 jari 1280             
2 26 Feb 07 jari 1281             constraints.anchor = GridBagConstraints.CENTER;
2 26 Feb 07 jari 1282             
2 26 Feb 07 jari 1283             sliderPanel.setBorder(new EtchedBorder());
2 26 Feb 07 jari 1284             chooseMeansPanel.setBorder(new EtchedBorder());
2 26 Feb 07 jari 1285             resetClosePanel.setBorder(new EtchedBorder());
2 26 Feb 07 jari 1286             
2 26 Feb 07 jari 1287             sliderPanel.setBackground(Color.white);
2 26 Feb 07 jari 1288             chooseMeansPanel.setBackground(Color.white);
2 26 Feb 07 jari 1289             resetClosePanel.setBackground(Color.white);
2 26 Feb 07 jari 1290             
2 26 Feb 07 jari 1291             constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 1292             
2 26 Feb 07 jari 1293             buildConstraints(constraints, 0, 0, 1, 1, 100, 40);
2 26 Feb 07 jari 1294             //constraints.fill = GridBagConstraints.VERTICAL;
2 26 Feb 07 jari 1295             gridbag.setConstraints(sliderPanel, constraints);
2 26 Feb 07 jari 1296             pane.add(sliderPanel);
2 26 Feb 07 jari 1297             
2 26 Feb 07 jari 1298             //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 1299             
2 26 Feb 07 jari 1300             buildConstraints(constraints, 0, 1, 1, 1, 0, 30);
2 26 Feb 07 jari 1301             gridbag.setConstraints(chooseMeansPanel, constraints);
2 26 Feb 07 jari 1302             pane.add(chooseMeansPanel);
2 26 Feb 07 jari 1303             
2 26 Feb 07 jari 1304             buildConstraints(constraints, 0, 2, 1, 1, 0, 30);
2 26 Feb 07 jari 1305             gridbag.setConstraints(resetClosePanel, constraints);
2 26 Feb 07 jari 1306             pane.add(resetClosePanel);
2 26 Feb 07 jari 1307             
2 26 Feb 07 jari 1308             setContentPane(pane);
2 26 Feb 07 jari 1309         }
2 26 Feb 07 jari 1310         
2 26 Feb 07 jari 1311         private float getDisplayPValue(int pSliderVal) {
2 26 Feb 07 jari 1312             double d = (double)(pSliderVal*maxP/100);
2 26 Feb 07 jari 1313             
2 26 Feb 07 jari 1314             return (float)d;
2 26 Feb 07 jari 1315         }
2 26 Feb 07 jari 1316         
2 26 Feb 07 jari 1317         private float getDisplayMean(int meanSliderVal) {
2 26 Feb 07 jari 1318             double d = (double)(meanSliderVal*maxMean/100);
2 26 Feb 07 jari 1319             return (float)d;
2 26 Feb 07 jari 1320         }
2 26 Feb 07 jari 1321         
2 26 Feb 07 jari 1322         public void setVisible(boolean visible) {
2 26 Feb 07 jari 1323             Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 1324             setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 1325             
2 26 Feb 07 jari 1326             super.setVisible(visible);
2 26 Feb 07 jari 1327         }
2 26 Feb 07 jari 1328         
2 26 Feb 07 jari 1329         
2 26 Feb 07 jari 1330     }
2 26 Feb 07 jari 1331     
2 26 Feb 07 jari 1332     
2 26 Feb 07 jari 1333 }