mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/sam/SAMGraph.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, 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  * SAMGraph.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on January 2, 2003, 1:03 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.cluster.gui.impl.sam;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.BasicStroke;
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Dimension;
2 26 Feb 07 jari 16 import java.awt.Graphics;
2 26 Feb 07 jari 17 import java.awt.Graphics2D;
2 26 Feb 07 jari 18 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 19 import java.awt.GridBagLayout;
2 26 Feb 07 jari 20 import java.awt.Toolkit;
2 26 Feb 07 jari 21 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 22 import java.awt.event.ActionListener;
2 26 Feb 07 jari 23 import java.awt.event.FocusEvent;
2 26 Feb 07 jari 24 import java.awt.event.FocusListener;
2 26 Feb 07 jari 25 import java.awt.event.ItemEvent;
2 26 Feb 07 jari 26 import java.awt.event.ItemListener;
2 26 Feb 07 jari 27 import java.text.DecimalFormat;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import javax.swing.JButton;
2 26 Feb 07 jari 30 import javax.swing.JCheckBox;
2 26 Feb 07 jari 31 import javax.swing.JFrame;
2 26 Feb 07 jari 32 import javax.swing.JLabel;
2 26 Feb 07 jari 33 import javax.swing.JOptionPane;
2 26 Feb 07 jari 34 import javax.swing.JPanel;
2 26 Feb 07 jari 35 import javax.swing.JSlider;
2 26 Feb 07 jari 36 import javax.swing.JTextField;
2 26 Feb 07 jari 37 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 38 import javax.swing.border.LineBorder;
2 26 Feb 07 jari 39 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 40 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42 import org.tigr.util.awt.ActionInfoDialog;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44 /**
2 26 Feb 07 jari 45  *
2 26 Feb 07 jari 46  * @author  nbhagaba
2 26 Feb 07 jari 47  * @version
2 26 Feb 07 jari 48  */
2 26 Feb 07 jari 49 public class SAMGraph extends ActionInfoDialog {
2 26 Feb 07 jari 50     private double[] observedYArray, expectedXArray;
2 26 Feb 07 jari 51     private double delta, maxDelta, minDelta;
2 26 Feb 07 jari 52     int studyDesign;
2 26 Feb 07 jari 53     boolean infiniteDeltaEncountered;
2 26 Feb 07 jari 54     double[] deltaGrid; 
2 26 Feb 07 jari 55     int[] numSigGenesByDelta; 
2 26 Feb 07 jari 56     double[] medNumFalse, false90th, FDRMedian, FDR90th;
2 26 Feb 07 jari 57     GraphPanel gPanel; 
2 26 Feb 07 jari 58     BottomPanel bPanel; 
2 26 Feb 07 jari 59     /** Creates new SAMGraph */
2 26 Feb 07 jari 60     public SAMGraph(JFrame parentFrame, int studyDesign, double[] expectedXArray, double[] observedYArray, double delta, double[] deltaGrid, int[] numSigGenesByDelta, double[] medNumFalse, double[] false90th, double[] FDRMedian, double[] FDR90th, boolean modality) {
2 26 Feb 07 jari 61         //super("SAM Graph");
2 26 Feb 07 jari 62         super(parentFrame, "SAM Graph", modality);
2 26 Feb 07 jari 63         this.studyDesign = studyDesign;
2 26 Feb 07 jari 64         this.observedYArray = observedYArray;
2 26 Feb 07 jari 65         this.expectedXArray = expectedXArray;  
2 26 Feb 07 jari 66         this.delta = delta;
2 26 Feb 07 jari 67         this.deltaGrid = deltaGrid;
2 26 Feb 07 jari 68         this.numSigGenesByDelta = numSigGenesByDelta;
2 26 Feb 07 jari 69         this.medNumFalse = medNumFalse;
2 26 Feb 07 jari 70         this.false90th = false90th;
2 26 Feb 07 jari 71         this.FDRMedian = FDRMedian;
2 26 Feb 07 jari 72         this.FDR90th = FDR90th;
2 26 Feb 07 jari 73         infiniteDeltaEncountered = false;
2 26 Feb 07 jari 74         setBounds(0, 0, 800, 700);
2 26 Feb 07 jari 75         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 76         
2 26 Feb 07 jari 77         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 78         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 79         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 80         JPanel pane = new JPanel();
2 26 Feb 07 jari 81         pane.setLayout(gridbag);
2 26 Feb 07 jari 82         
2 26 Feb 07 jari 83         gPanel = new GraphPanel(expectedXArray, observedYArray); 
2 26 Feb 07 jari 84         buildConstraints(constraints, 0, 0, 1, 1, 100, 70);
2 26 Feb 07 jari 85         gridbag.setConstraints(gPanel, constraints);
2 26 Feb 07 jari 86         pane.add(gPanel);
2 26 Feb 07 jari 87         
2 26 Feb 07 jari 88         bPanel = new BottomPanel(); 
2 26 Feb 07 jari 89         buildConstraints(constraints, 0, 1, 1, 1, 0, 30);
2 26 Feb 07 jari 90         gridbag.setConstraints(bPanel, constraints);
2 26 Feb 07 jari 91         pane.add(bPanel);        
2 26 Feb 07 jari 92         
2 26 Feb 07 jari 93         setContentPane(pane);
2 26 Feb 07 jari 94     }
2 26 Feb 07 jari 95     
2 26 Feb 07 jari 96     public SAMGraph() {//just for testing
2 26 Feb 07 jari 97         super(new JFrame(), "SAM Graph", true);
2 26 Feb 07 jari 98         //this.setBorder(new EtchedBorder());
2 26 Feb 07 jari 99         setBounds(0, 0, 600, 600);
2 26 Feb 07 jari 100         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 101         
2 26 Feb 07 jari 102         // no effect this.observedYArray = observedYArray;
2 26 Feb 07 jari 103         // no effect this.expectedXArray = expectedXArray;
2 26 Feb 07 jari 104         
2 26 Feb 07 jari 105         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 106         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 107         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 108         JPanel pane = new JPanel();
2 26 Feb 07 jari 109         pane.setLayout(gridbag);
2 26 Feb 07 jari 110         
2 26 Feb 07 jari 111         gPanel = new GraphPanel(expectedXArray, observedYArray); 
2 26 Feb 07 jari 112         //GraphPanel gPanel = new GraphPanel(expectedXArray, observedYArray);
2 26 Feb 07 jari 113         buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 114         gridbag.setConstraints(gPanel, constraints);
2 26 Feb 07 jari 115         pane.add(gPanel);
2 26 Feb 07 jari 116         
2 26 Feb 07 jari 117         setContentPane(pane);
2 26 Feb 07 jari 118     }
2 26 Feb 07 jari 119     
2 26 Feb 07 jari 120     public void setVisible(boolean visible) {
2 26 Feb 07 jari 121         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 122         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 123         
2 26 Feb 07 jari 124         super.setVisible(visible);
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         if (visible) {
2 26 Feb 07 jari 127             //bPanel.okButton.requestFocus(); //UNCOMMMENT THIS LATER
2 26 Feb 07 jari 128         }
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 132     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 133         
2 26 Feb 07 jari 134         gbc.gridx = gx;
2 26 Feb 07 jari 135         gbc.gridy = gy;
2 26 Feb 07 jari 136         gbc.gridwidth = gw;
2 26 Feb 07 jari 137         gbc.gridheight = gh;
2 26 Feb 07 jari 138         gbc.weightx = wx;
2 26 Feb 07 jari 139         gbc.weighty = wy;
2 26 Feb 07 jari 140     }
2 26 Feb 07 jari 141     
2 26 Feb 07 jari 142     private float getMax(float[] array) {
2 26 Feb 07 jari 143         float max = Float.NEGATIVE_INFINITY;
2 26 Feb 07 jari 144         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 145             if (max < array[i]) {
2 26 Feb 07 jari 146                 max = array[i];
2 26 Feb 07 jari 147             }
2 26 Feb 07 jari 148         }
2 26 Feb 07 jari 149         return max;
2 26 Feb 07 jari 150     }
2 26 Feb 07 jari 151     
2 26 Feb 07 jari 152     private float getMin(float[] array) {
2 26 Feb 07 jari 153         float min = Float.POSITIVE_INFINITY;
2 26 Feb 07 jari 154         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 155             if (min > array[i]) {
2 26 Feb 07 jari 156                 min = array[i];
2 26 Feb 07 jari 157             }
2 26 Feb 07 jari 158         }
2 26 Feb 07 jari 159         return min;
2 26 Feb 07 jari 160     }
2 26 Feb 07 jari 161     
2 26 Feb 07 jari 162     private double getMax(double[] array) {
2 26 Feb 07 jari 163         double max = Double.NEGATIVE_INFINITY;
2 26 Feb 07 jari 164         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 165             if (max < array[i]) {
2 26 Feb 07 jari 166                 max = array[i];
2 26 Feb 07 jari 167             }
2 26 Feb 07 jari 168         }
2 26 Feb 07 jari 169         return max;
2 26 Feb 07 jari 170     }
2 26 Feb 07 jari 171     
2 26 Feb 07 jari 172     private double getMin(double[] array) {
2 26 Feb 07 jari 173         double min = Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 174         for (int i = 0; i < array.length; i++) {
2 26 Feb 07 jari 175             if (min > array[i]) {
2 26 Feb 07 jari 176                 min = array[i];
2 26 Feb 07 jari 177             }
2 26 Feb 07 jari 178         }
2 26 Feb 07 jari 179         return min;
2 26 Feb 07 jari 180     }    
2 26 Feb 07 jari 181     
2 26 Feb 07 jari 182     private class BottomPanel extends JPanel {
2 26 Feb 07 jari 183         
2 26 Feb 07 jari 184         JSlider deltaSlider;
2 26 Feb 07 jari 185         JTextField deltaTextField, foldChangeTextField;
2 26 Feb 07 jari 186         JLabel sigLabel, falseSigLabel;
2 26 Feb 07 jari 187         double maxValue; 
2 26 Feb 07 jari 188         double initDelta;
2 26 Feb 07 jari 189         JCheckBox useFoldChangeBox;
2 26 Feb 07 jari 190         JButton okButton;
2 26 Feb 07 jari 191         BottomPanel() {
2 26 Feb 07 jari 192             this.setBorder(new EtchedBorder());
2 26 Feb 07 jari 193             //deltaSlider = new JSlider(0, 100, 25);
2 26 Feb 07 jari 194             
2 26 Feb 07 jari 195             double[] diffValues = new double[observedYArray.length];
2 26 Feb 07 jari 196
2 26 Feb 07 jari 197             for (int i = 0; i < diffValues.length; i++) {
2 26 Feb 07 jari 198                 diffValues[i] = Math.abs(observedYArray[i] - expectedXArray[i]);
2 26 Feb 07 jari 199             }
2 26 Feb 07 jari 200             
2 26 Feb 07 jari 201
2 26 Feb 07 jari 202             maxDelta = getMax(diffValues);
2 26 Feb 07 jari 203             minDelta = getMin(diffValues);            
2 26 Feb 07 jari 204             //float[] absDiffArray = new float[expectedXArray.length];
2 26 Feb 07 jari 205             
2 26 Feb 07 jari 206             //initDelta = (double)(0.25*maxDelta);
2 26 Feb 07 jari 207             
2 26 Feb 07 jari 208             maxValue = 0.0f;
2 26 Feb 07 jari 209             double initMax = getMax(observedYArray);
2 26 Feb 07 jari 210             double initMin = getMin(observedYArray);
2 26 Feb 07 jari 211             
2 26 Feb 07 jari 212             if (Math.abs(initMax) > Math.abs(initMin)) {
2 26 Feb 07 jari 213                 //initDelta = (float)0.25*Math.abs(initMax);
2 26 Feb 07 jari 214                 maxValue = Math.abs(initMax);
2 26 Feb 07 jari 215             } else {
2 26 Feb 07 jari 216                 //initDelta = (float)0.25*Math.abs(initMin);
2 26 Feb 07 jari 217                 maxValue = Math.abs(initMin);
2 26 Feb 07 jari 218             }
2 26 Feb 07 jari 219             
2 26 Feb 07 jari 220             initDelta = delta;
2 26 Feb 07 jari 221             
2 26 Feb 07 jari 222             deltaSlider = new JSlider(0, 1000, (int)Math.round(initDelta*1000/maxValue));
2 26 Feb 07 jari 223             
2 26 Feb 07 jari 224             deltaTextField = new JTextField("" + initDelta, 7);
2 26 Feb 07 jari 225             deltaTextField.addActionListener(new ActionListener(){
2 26 Feb 07 jari 226                 public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 227                     int sliderValue;
2 26 Feb 07 jari 228                     try {
2 26 Feb 07 jari 229                         String s = deltaTextField.getText();
2 26 Feb 07 jari 230                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 231                         sliderValue = (int)Math.round(f*1000/maxValue);
2 26 Feb 07 jari 232                         if (sliderValue >= 1000) {
2 26 Feb 07 jari 233                             //sliderValue = 100;
2 26 Feb 07 jari 234                             deltaSlider.setValue(1000);
2 26 Feb 07 jari 235                             deltaTextField.setText("" + (float)maxValue);
2 26 Feb 07 jari 236                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 237                             //sliderValue = 0;
2 26 Feb 07 jari 238                             deltaSlider.setValue(0);
2 26 Feb 07 jari 239                             deltaTextField.setText("" + 0.0f);
2 26 Feb 07 jari 240                         } else {
2 26 Feb 07 jari 241                             deltaSlider.setValue(sliderValue);
2 26 Feb 07 jari 242                             deltaTextField.setText("" + (float)f);
2 26 Feb 07 jari 243                         }
2 26 Feb 07 jari 244                         
2 26 Feb 07 jari 245                         //if ()
2 26 Feb 07 jari 246                     } catch (Exception exc) {
2 26 Feb 07 jari 247                         deltaSlider.setValue(250);
2 26 Feb 07 jari 248                         deltaTextField.setText("" + (float)initDelta);
2 26 Feb 07 jari 249                     }
2 26 Feb 07 jari 250                     
2 26 Feb 07 jari 251                     String dString = deltaTextField.getText();
2 26 Feb 07 jari 252                     delta = Double.parseDouble(dString);
2 26 Feb 07 jari 253                     sigLabel.setText("Number of Significant Genes: " + getNumSig(delta));
2 26 Feb 07 jari 254                     falseSigLabel.setText("Median number of false significant genes" + getNumFalseSig(delta));
2 26 Feb 07 jari 255                     gPanel.repaint();
2 26 Feb 07 jari 256                     
2 26 Feb 07 jari 257                 }
2 26 Feb 07 jari 258             });
2 26 Feb 07 jari 259             deltaTextField.addFocusListener(new FocusListener() {
2 26 Feb 07 jari 260                 public void focusLost(FocusEvent e) {
2 26 Feb 07 jari 261                     int sliderValue;
2 26 Feb 07 jari 262                     try {
2 26 Feb 07 jari 263                         String s = deltaTextField.getText();
2 26 Feb 07 jari 264                         double f = Double.parseDouble(s);
2 26 Feb 07 jari 265                         sliderValue = (int)Math.round(f*1000/maxValue);
2 26 Feb 07 jari 266                         if (sliderValue >= 1000) {
2 26 Feb 07 jari 267                             //sliderValue = 100;
2 26 Feb 07 jari 268                             deltaSlider.setValue(1000);
2 26 Feb 07 jari 269                             deltaTextField.setText("" + (float)maxValue);
2 26 Feb 07 jari 270                         } else if (sliderValue <= 0) {
2 26 Feb 07 jari 271                             //sliderValue = 0;
2 26 Feb 07 jari 272                             deltaSlider.setValue(0);
2 26 Feb 07 jari 273                             deltaTextField.setText("" + 0.0f);
2 26 Feb 07 jari 274                         } else {
2 26 Feb 07 jari 275                             deltaSlider.setValue(sliderValue);
2 26 Feb 07 jari 276                             deltaTextField.setText("" + (float)f);
2 26 Feb 07 jari 277                         }                        
2 26 Feb 07 jari 278                         //deltaSlider.setValue(sliderValue);
2 26 Feb 07 jari 279                     } catch (Exception exc) {
2 26 Feb 07 jari 280                         deltaSlider.setValue(250);
2 26 Feb 07 jari 281                         deltaTextField.setText("" + (float)initDelta);
2 26 Feb 07 jari 282                         
2 26 Feb 07 jari 283                     }  
2 26 Feb 07 jari 284                     String dString = deltaTextField.getText();
2 26 Feb 07 jari 285                     delta = Double.parseDouble(dString);
2 26 Feb 07 jari 286                     sigLabel.setText("Number of Significant Genes: " + getNumSig(delta));
2 26 Feb 07 jari 287                     falseSigLabel.setText("Median number of false significant genes: " + getNumFalseSig(delta));                    
2 26 Feb 07 jari 288                     gPanel.repaint();                    
2 26 Feb 07 jari 289                 }
2 26 Feb 07 jari 290
2 26 Feb 07 jari 291                 public void focusGained(FocusEvent e) {
2 26 Feb 07 jari 292     }                
2 26 Feb 07 jari 293                 
2 26 Feb 07 jari 294             });
2 26 Feb 07 jari 295             
2 26 Feb 07 jari 296             
2 26 Feb 07 jari 297             deltaSlider.addChangeListener(new ChangeListener(){
2 26 Feb 07 jari 298                 public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 299                     JSlider source = (JSlider)e.getSource();
2 26 Feb 07 jari 300                     //if (!source.getValueIsAdjusting()) {
2 26 Feb 07 jari 301                     int value = (int)source.getValue();
2 26 Feb 07 jari 302                     double displayValue = (double)(value*maxValue/1000);
2 26 Feb 07 jari 303                     if (value == 0) {
2 26 Feb 07 jari 304                         displayValue = 0.0f;
2 26 Feb 07 jari 305                     }
2 26 Feb 07 jari 306                     deltaTextField.setText("" + (float)displayValue);
2 26 Feb 07 jari 307                     //if (!source.getValueIsAdjusting()) {
2 26 Feb 07 jari 308                         String dString = deltaTextField.getText();
2 26 Feb 07 jari 309                         if (!Double.isInfinite(displayValue)) {
2 26 Feb 07 jari 310                             delta = Double.parseDouble(dString);
2 26 Feb 07 jari 311                         } else {
2 26 Feb 07 jari 312                             infiniteDeltaEncountered = true;
2 26 Feb 07 jari 313                             delta = Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 314                         }
2 26 Feb 07 jari 315                         sigLabel.setText("Number of Significant Genes: " + getNumSig(delta));
2 26 Feb 07 jari 316                         falseSigLabel.setText("Median number of false significant genes: " + getNumFalseSig(delta));                        
2 26 Feb 07 jari 317                         gPanel.repaint();                            
2 26 Feb 07 jari 318                     //}
2 26 Feb 07 jari 319                     //}
2 26 Feb 07 jari 320                 }
2 26 Feb 07 jari 321             });
2 26 Feb 07 jari 322             
2 26 Feb 07 jari 323             
2 26 Feb 07 jari 324             GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 325             GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 326             //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 327             //JPanel pane = new JPanel();
2 26 Feb 07 jari 328             this.setLayout(gridbag);    
2 26 Feb 07 jari 329             
2 26 Feb 07 jari 330             sigLabel = new JLabel("Number of significant genes: " + getNumSig(delta));
2 26 Feb 07 jari 331             buildConstraints(constraints, 0, 0, 2, 1, 50, 30);
2 26 Feb 07 jari 332             constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 333             gridbag.setConstraints(sigLabel, constraints);
2 26 Feb 07 jari 334             this.add(sigLabel);  
2 26 Feb 07 jari 335             
2 26 Feb 07 jari 336             falseSigLabel = new JLabel("Median number of falsely significant genes: " + getNumFalseSig(delta));
2 26 Feb 07 jari 337             buildConstraints(constraints, 1, 0, 2, 1, 50, 0);
2 26 Feb 07 jari 338             constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 339             gridbag.setConstraints(falseSigLabel, constraints);
2 26 Feb 07 jari 340             this.add(falseSigLabel);            
2 26 Feb 07 jari 341             
2 26 Feb 07 jari 342             JLabel label1 = new JLabel("Use slider to set delta value: ");
2 26 Feb 07 jari 343             buildConstraints(constraints, 0, 1, 1, 1, 25, 40);
2 26 Feb 07 jari 344             constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 345             gridbag.setConstraints(label1, constraints);
2 26 Feb 07 jari 346             this.add(label1); 
2 26 Feb 07 jari 347             
2 26 Feb 07 jari 348             buildConstraints(constraints, 1, 1, 1, 1, 25, 0);
2 26 Feb 07 jari 349             constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 350             gridbag.setConstraints(deltaSlider, constraints);
2 26 Feb 07 jari 351             this.add(deltaSlider);  
2 26 Feb 07 jari 352             
2 26 Feb 07 jari 353             JLabel label2 = new JLabel("Or enter delta value here: ");
2 26 Feb 07 jari 354             buildConstraints(constraints, 2, 1, 1, 1, 25, 0);
2 26 Feb 07 jari 355             constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 356             gridbag.setConstraints(label2, constraints);
2 26 Feb 07 jari 357             this.add(label2);            
2 26 Feb 07 jari 358             
2 26 Feb 07 jari 359             buildConstraints(constraints, 3, 1, 1, 1, 25, 0);
2 26 Feb 07 jari 360             constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 361             gridbag.setConstraints(deltaTextField, constraints);
2 26 Feb 07 jari 362             this.add(deltaTextField);  
2 26 Feb 07 jari 363             
2 26 Feb 07 jari 364             useFoldChangeBox = new JCheckBox("Use Fold Change:", false);
2 26 Feb 07 jari 365             if ((studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED)) {
2 26 Feb 07 jari 366                 useFoldChangeBox.setEnabled(true);
2 26 Feb 07 jari 367             } else {
2 26 Feb 07 jari 368                 useFoldChangeBox.setEnabled(false);
2 26 Feb 07 jari 369             }
2 26 Feb 07 jari 370             
2 26 Feb 07 jari 371             
2 26 Feb 07 jari 372             //useFoldChangeBox.setEnabled(false); // **** FOR NOW, UNTIL FOLD CHANGE OPTION IS IMPLEMENTED
2 26 Feb 07 jari 373             
2 26 Feb 07 jari 374             foldChangeTextField = new JTextField("", 7);
2 26 Feb 07 jari 375             foldChangeTextField.setBackground(Color.darkGray);
2 26 Feb 07 jari 376             foldChangeTextField.setEnabled(false); 
2 26 Feb 07 jari 377             
2 26 Feb 07 jari 378             useFoldChangeBox.addItemListener(new ItemListener() {
2 26 Feb 07 jari 379                 public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 380                     if (e.getStateChange() == ItemEvent.DESELECTED) {
2 26 Feb 07 jari 381                         foldChangeTextField.setBackground(Color.darkGray);
2 26 Feb 07 jari 382                         foldChangeTextField.setText("");
2 26 Feb 07 jari 383                         foldChangeTextField.setEnabled(false);
2 26 Feb 07 jari 384                     } else if (e.getStateChange() == ItemEvent.SELECTED) {
2 26 Feb 07 jari 385                         foldChangeTextField.setBackground(Color.white);
2 26 Feb 07 jari 386                         foldChangeTextField.setText("2.0");
2 26 Feb 07 jari 387                         foldChangeTextField.setEnabled(true);
2 26 Feb 07 jari 388                     }
2 26 Feb 07 jari 389                 }
2 26 Feb 07 jari 390
2 26 Feb 07 jari 391             });
2 26 Feb 07 jari 392             buildConstraints(constraints, 0, 2, 1, 1, 30, 30);
2 26 Feb 07 jari 393             constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 394             gridbag.setConstraints(useFoldChangeBox, constraints);
2 26 Feb 07 jari 395             this.add(useFoldChangeBox);
2 26 Feb 07 jari 396             
2 26 Feb 07 jari 397             
2 26 Feb 07 jari 398             buildConstraints(constraints, 1, 2, 1, 1, 30, 0);
2 26 Feb 07 jari 399             constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 400             gridbag.setConstraints(foldChangeTextField, constraints);
2 26 Feb 07 jari 401             this.add(foldChangeTextField);  
2 26 Feb 07 jari 402             
2 26 Feb 07 jari 403             okButton = new JButton("OK");
2 26 Feb 07 jari 404             okButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 405                 public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 406                     if (useFoldChangeBox.isSelected()) {
2 26 Feb 07 jari 407                         try {
2 26 Feb 07 jari 408                             String foldStr = foldChangeTextField.getText();
2 26 Feb 07 jari 409                             double fl = Double.parseDouble(foldStr);
2 26 Feb 07 jari 410                             //*** HERE, GET VALUES AND PASS THEM TO THE ALGORITHM, SAME AS BELOW
2 26 Feb 07 jari 411                             //hide();
2 26 Feb 07 jari 412                             dispose();
2 26 Feb 07 jari 413                         } catch (Exception e) {
2 26 Feb 07 jari 414                             JOptionPane.showMessageDialog(null, "Either deselect the Use Fold Change CheckBox or enter a valid fold change value", "Error!", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 415                         }
2 26 Feb 07 jari 416                     } else {
2 26 Feb 07 jari 417                         //*** HERE, GET VALUES AND PASS THEM TO THE ALGORITHM
2 26 Feb 07 jari 418                         //hide();
2 26 Feb 07 jari 419                         dispose();
2 26 Feb 07 jari 420                     }
2 26 Feb 07 jari 421                 }
2 26 Feb 07 jari 422             });
2 26 Feb 07 jari 423             
2 26 Feb 07 jari 424             buildConstraints(constraints, 2, 2, 2, 1, 40, 0);
2 26 Feb 07 jari 425             constraints.anchor = GridBagConstraints.CENTER;
2 26 Feb 07 jari 426             gridbag.setConstraints(okButton, constraints);
2 26 Feb 07 jari 427             this.add(okButton);            
2 26 Feb 07 jari 428             
2 26 Feb 07 jari 429         }
2 26 Feb 07 jari 430         
2 26 Feb 07 jari 431
2 26 Feb 07 jari 432     }
2 26 Feb 07 jari 433     
2 26 Feb 07 jari 434     private String pubNumSig, pubNumFalseSigMed, pubNumFalseSig90th, pubFDRMed, pubFDR90th; 
2 26 Feb 07 jari 435     
2 26 Feb 07 jari 436     private String getNumSig(double currDel) {
2 26 Feb 07 jari 437         String numSig = "";
2 26 Feb 07 jari 438         int finalIndex = 0;
2 26 Feb 07 jari 439         if (currDel >=maxDelta) {
2 26 Feb 07 jari 440             numSig = "0";
2 26 Feb 07 jari 441         } else if (currDel <= minDelta) {
2 26 Feb 07 jari 442             numSig = String.valueOf(observedYArray.length);
2 26 Feb 07 jari 443         } else {
2 26 Feb 07 jari 444             int currentIndex = 0;
2 26 Feb 07 jari 445             for (int i = 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 446                 if (deltaGrid[i] > currDel) {
2 26 Feb 07 jari 447                     currentIndex = i;
2 26 Feb 07 jari 448                     break;
2 26 Feb 07 jari 449                 }
2 26 Feb 07 jari 450             }
2 26 Feb 07 jari 451             
2 26 Feb 07 jari 452             if ((deltaGrid[currentIndex] - currDel) > (currDel - deltaGrid[currentIndex - 1])) {
2 26 Feb 07 jari 453                 finalIndex = currentIndex - 1;
2 26 Feb 07 jari 454             } else {
2 26 Feb 07 jari 455                 finalIndex = currentIndex;
2 26 Feb 07 jari 456             }
2 26 Feb 07 jari 457             numSig = String.valueOf(numSigGenesByDelta[finalIndex]);
2 26 Feb 07 jari 458             
2 26 Feb 07 jari 459             
2 26 Feb 07 jari 460         }
2 26 Feb 07 jari 461         pubNumSig = numSig;
2 26 Feb 07 jari 462         return numSig;
2 26 Feb 07 jari 463     }
2 26 Feb 07 jari 464     
2 26 Feb 07 jari 465     
2 26 Feb 07 jari 466     
2 26 Feb 07 jari 467     private String getNumFalseSig(double currDel) {
2 26 Feb 07 jari 468         String numFalse = "";
2 26 Feb 07 jari 469         String numFalse90th = "";
2 26 Feb 07 jari 470         int finalIndex = 0;
2 26 Feb 07 jari 471         if ((currDel >=maxDelta) || (currDel <= minDelta) ) {
2 26 Feb 07 jari 472             numFalse = "N/A        ";
2 26 Feb 07 jari 473             pubNumFalseSigMed = numFalse;
2 26 Feb 07 jari 474             pubNumFalseSig90th = numFalse;
2 26 Feb 07 jari 475             pubFDRMed = numFalse;
2 26 Feb 07 jari 476             pubFDR90th = numFalse;
2 26 Feb 07 jari 477             return numFalse;
2 26 Feb 07 jari 478         } else {
2 26 Feb 07 jari 479             int currentIndex = 0;
2 26 Feb 07 jari 480             for (int i = 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 481                 if (deltaGrid[i] > currDel) {
2 26 Feb 07 jari 482                     currentIndex = i;
2 26 Feb 07 jari 483                     break;
2 26 Feb 07 jari 484                 }
2 26 Feb 07 jari 485             }
2 26 Feb 07 jari 486             
2 26 Feb 07 jari 487             if ((deltaGrid[currentIndex] - currDel) > (currDel - deltaGrid[currentIndex - 1])) {
2 26 Feb 07 jari 488                 finalIndex = currentIndex - 1;
2 26 Feb 07 jari 489             } else {
2 26 Feb 07 jari 490                 finalIndex = currentIndex;
2 26 Feb 07 jari 491             }
2 26 Feb 07 jari 492             DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 493             nf.setMaximumFractionDigits(5);
2 26 Feb 07 jari 494             nf.setMinimumFractionDigits(5);
2 26 Feb 07 jari 495             //numFalse = String.valueOf(medNumFalse[finalIndex]);
2 26 Feb 07 jari 496             numFalse = nf.format(medNumFalse[finalIndex]);
2 26 Feb 07 jari 497             pubNumFalseSig90th = nf.format(false90th[finalIndex]);
2 26 Feb 07 jari 498             pubFDRMed = nf.format(FDRMedian[finalIndex]);
2 26 Feb 07 jari 499             pubFDR90th = nf.format(FDR90th[finalIndex]);
2 26 Feb 07 jari 500         }
2 26 Feb 07 jari 501         
2 26 Feb 07 jari 502         
2 26 Feb 07 jari 503         pubNumFalseSigMed = numFalse;
2 26 Feb 07 jari 504         return numFalse;
2 26 Feb 07 jari 505     }  
2 26 Feb 07 jari 506     
2 26 Feb 07 jari 507     public String getNumSig() {
2 26 Feb 07 jari 508         return pubNumSig;
2 26 Feb 07 jari 509     }
2 26 Feb 07 jari 510     
2 26 Feb 07 jari 511     public String getNumFalseSigMed() {
2 26 Feb 07 jari 512         return pubNumFalseSigMed;
2 26 Feb 07 jari 513     }
2 26 Feb 07 jari 514     
2 26 Feb 07 jari 515     public String getNumFalseSig90th() {
2 26 Feb 07 jari 516         return pubNumFalseSig90th;
2 26 Feb 07 jari 517     }
2 26 Feb 07 jari 518     
2 26 Feb 07 jari 519     public String getFDRMedian() {
2 26 Feb 07 jari 520         return pubFDRMed;
2 26 Feb 07 jari 521     }
2 26 Feb 07 jari 522     
2 26 Feb 07 jari 523     public String getFDR90th() {
2 26 Feb 07 jari 524         return pubFDR90th;
2 26 Feb 07 jari 525     }
2 26 Feb 07 jari 526     
2 26 Feb 07 jari 527     private class GraphPanel extends JPanel {
2 26 Feb 07 jari 528         
2 26 Feb 07 jari 529         private double[] xArray, yArray;
2 26 Feb 07 jari 530         int originX, originY;
2 26 Feb 07 jari 531         
2 26 Feb 07 jari 532         GraphPanel(double[] xArray, double[] yArray) {
2 26 Feb 07 jari 533             this.setBorder(new LineBorder(Color.black));
2 26 Feb 07 jari 534             this.setBackground(Color.white);
2 26 Feb 07 jari 535             this.xArray = xArray;
2 26 Feb 07 jari 536             this.yArray = yArray;
2 26 Feb 07 jari 537
2 26 Feb 07 jari 538         }
2 26 Feb 07 jari 539         /*
2 26 Feb 07 jari 540         public void paintComponent(Graphics g) {
2 26 Feb 07 jari 541             Graphics2D g2D = (Graphics2D)g;
2 26 Feb 07 jari 542             int maxX = this.getWidth();
2 26 Feb 07 jari 543             int maxY = this.getHeight();
2 26 Feb 07 jari 544             int midX = Math.round((float)(maxX/2));
2 26 Feb 07 jari 545             int midY = Math.round((float)(maxY/2));
2 26 Feb 07 jari 546             g2D.drawLine(0, midY, maxX, midY);
2 26 Feb 07 jari 547             g2D.drawLine(midX, 0, midX, maxY);
2 26 Feb 07 jari 548             //g2D.drawLine(0, 300, 600, 300);
2 26 Feb 07 jari 549             //g2D.drawLine(300, 0, 300, 600);
2 26 Feb 07 jari 550         }
2 26 Feb 07 jari 551          */
2 26 Feb 07 jari 552         
2 26 Feb 07 jari 553         public void paint(Graphics g) {
2 26 Feb 07 jari 554             super.paint(g);
2 26 Feb 07 jari 555             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 556                 paint1(g);
2 26 Feb 07 jari 557             } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 558                 paint2(g);
2 26 Feb 07 jari 559             }
2 26 Feb 07 jari 560             
2 26 Feb 07 jari 561         }
2 26 Feb 07 jari 562         
2 26 Feb 07 jari 563         private void paint1(Graphics g) {
2 26 Feb 07 jari 564             Graphics2D g2D = (Graphics2D)g;
2 26 Feb 07 jari 565             int panelWidth = this.getWidth();
2 26 Feb 07 jari 566             int panelHeight = this.getHeight();
2 26 Feb 07 jari 567             originX = (int)Math.round((double)(this.getWidth()/2));
2 26 Feb 07 jari 568             originY = (int)Math.round((double)(this.getHeight()/2));
2 26 Feb 07 jari 569             double origMaxXValue = getMax(xArray);
2 26 Feb 07 jari 570             double origMaxYValue = getMax(yArray);
2 26 Feb 07 jari 571             double origMinXValue = getMin(xArray);
2 26 Feb 07 jari 572             double origMinYValue = getMin(yArray);            
2 26 Feb 07 jari 573             
2 26 Feb 07 jari 574             double xScalingFactor = getXScalingFactor(origMaxXValue, origMinXValue); // relative to originX and originY
2 26 Feb 07 jari 575             double yScalingFactor = getYScalingFactor(origMaxYValue, origMinYValue); // relative to originX and originY
2 26 Feb 07 jari 576             
2 26 Feb 07 jari 577             final float dash1[] = {10.0f};
2 26 Feb 07 jari 578             
2 26 Feb 07 jari 579             final BasicStroke dashed = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f);
2 26 Feb 07 jari 580             
2 26 Feb 07 jari 581             //System.out.println("xScalingFactor = " + xScalingFactor + ", yScalingFactor = " + yScalingFactor);
2 26 Feb 07 jari 582             
2 26 Feb 07 jari 583             //draw axes
2 26 Feb 07 jari 584             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 585             g2D.drawLine(0, (int)Math.round((double)(this.getHeight()/2)), this.getWidth(), (int)Math.round((double)(this.getHeight()/2)));
2 26 Feb 07 jari 586             g2D.drawLine((int)Math.round((double)(this.getWidth()/2)), 0, (int)Math.round((double)(this.getWidth()/2)), this.getHeight());
2 26 Feb 07 jari 587             
2 26 Feb 07 jari 588             double[] xIntervalArray = new double[6];
2 26 Feb 07 jari 589             double[] yIntervalArray = new double[6];
2 26 Feb 07 jari 590             
2 26 Feb 07 jari 591             double xIncrement = 0.0d; 
2 26 Feb 07 jari 592             double yIncrement = 0.0d;
2 26 Feb 07 jari 593             
2 26 Feb 07 jari 594             if (Math.abs(origMaxXValue) > Math.abs(origMinXValue)) {
2 26 Feb 07 jari 595                 xIncrement = Math.abs((double)(origMaxXValue/5.0d));
2 26 Feb 07 jari 596             } else {
2 26 Feb 07 jari 597                 xIncrement = Math.abs((double)(origMinXValue/5.0d));
2 26 Feb 07 jari 598             }
2 26 Feb 07 jari 599
2 26 Feb 07 jari 600             if (Math.abs(origMaxYValue) > Math.abs(origMinYValue)) {
2 26 Feb 07 jari 601                 yIncrement = Math.abs((double)(origMaxYValue/5.0d));
2 26 Feb 07 jari 602             } else {
2 26 Feb 07 jari 603                 yIncrement = Math.abs((double)(origMinYValue/5.0d));
2 26 Feb 07 jari 604             }            
2 26 Feb 07 jari 605             
2 26 Feb 07 jari 606             double xCounter = 0.0d;
2 26 Feb 07 jari 607             double yCounter = 0.0d;
2 26 Feb 07 jari 608             for (int i = 0; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 609                 xIntervalArray[i] = xCounter;
2 26 Feb 07 jari 610                 xCounter = xCounter + xIncrement;
2 26 Feb 07 jari 611                 yIntervalArray[i] = yCounter;
2 26 Feb 07 jari 612                 yCounter = yCounter + yIncrement;
2 26 Feb 07 jari 613             }
2 26 Feb 07 jari 614             
2 26 Feb 07 jari 615             //draw x tick marks
2 26 Feb 07 jari 616             
2 26 Feb 07 jari 617             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 618                 g2D.drawLine((int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2, this.getHeight()/2 - 5, (int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2, this.getHeight()/2 + 5);
2 26 Feb 07 jari 619             }
2 26 Feb 07 jari 620             
2 26 Feb 07 jari 621             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 622                 g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight()/2 - 5, this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight()/2 + 5);
2 26 Feb 07 jari 623             }  
2 26 Feb 07 jari 624             
2 26 Feb 07 jari 625             
2 26 Feb 07 jari 626             //draw  reference line of slope = 1
2 26 Feb 07 jari 627             g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 + (int)Math.round(xIntervalArray[5]*yScalingFactor), this.getWidth()/2 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 - (int)Math.round(xIntervalArray[5]*yScalingFactor));
2 26 Feb 07 jari 628             
2 26 Feb 07 jari 629             g2D.setColor(Color.gray);
2 26 Feb 07 jari 630             
2 26 Feb 07 jari 631             g2D.setStroke(new BasicStroke(1.0f));
2 26 Feb 07 jari 632             
2 26 Feb 07 jari 633             //draw horizonal grid lines
2 26 Feb 07 jari 634             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 635                 g2D.drawLine(0, this.getHeight()/2 + (int)Math.round(yIntervalArray[i]*yScalingFactor), this.getWidth(), this.getHeight()/2 + (int)Math.round(yIntervalArray[i]*yScalingFactor));
2 26 Feb 07 jari 636             } 
2 26 Feb 07 jari 637             
2 26 Feb 07 jari 638             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 639                 g2D.drawLine(0, this.getHeight()/2 - (int)Math.round(yIntervalArray[i]*yScalingFactor), this.getWidth(), this.getHeight()/2 - (int)Math.round(yIntervalArray[i]*yScalingFactor));
2 26 Feb 07 jari 640             }            
2 26 Feb 07 jari 641             
2 26 Feb 07 jari 642             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 643             g2D.setColor(Color.black);
2 26 Feb 07 jari 644             
2 26 Feb 07 jari 645             DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 646             nf.setMaximumFractionDigits(2);
2 26 Feb 07 jari 647             
2 26 Feb 07 jari 648             //tick labels
2 26 Feb 07 jari 649             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 650                 g2D.drawString(nf.format((double)xIntervalArray[i]), (int)Math.round(xIntervalArray[i]*xScalingFactor) +this.getWidth()/2 - 10, this.getHeight()/2 + 20);
2 26 Feb 07 jari 651             }
2 26 Feb 07 jari 652             
2 26 Feb 07 jari 653             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 654                 g2D.drawString("-" + nf.format((double)xIntervalArray[i]), this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor) - 10, this.getHeight()/2 + 20);
2 26 Feb 07 jari 655             }
2 26 Feb 07 jari 656             
2 26 Feb 07 jari 657             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 658                 g2D.drawString(nf.format((double)yIntervalArray[i]), this.getWidth()/2 - 30, this.getHeight()/2 - (int)Math.round(yIntervalArray[i]*yScalingFactor) - 5);
2 26 Feb 07 jari 659             }
2 26 Feb 07 jari 660             
2 26 Feb 07 jari 661             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 662                 g2D.drawString("-" + nf.format((double)yIntervalArray[i]), this.getWidth()/2 - 30, this.getHeight()/2 + (int)Math.round(yIntervalArray[i]*yScalingFactor) - 5);
2 26 Feb 07 jari 663             }            
2 26 Feb 07 jari 664             
2 26 Feb 07 jari 665             int deltaOffset = (int)Math.round(delta*yScalingFactor);
2 26 Feb 07 jari 666             
2 26 Feb 07 jari 667             //draw dashed lines for delta limits
2 26 Feb 07 jari 668             g2D.setStroke(dashed);
2 26 Feb 07 jari 669             
2 26 Feb 07 jari 670             g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 + (int)Math.round(xIntervalArray[5]*yScalingFactor) - deltaOffset, this.getWidth()/2 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 - (int)Math.round(xIntervalArray[5]*yScalingFactor) - deltaOffset);
2 26 Feb 07 jari 671             g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 + (int)Math.round(xIntervalArray[5]*yScalingFactor) + deltaOffset, this.getWidth()/2 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight()/2 - (int)Math.round(xIntervalArray[5]*yScalingFactor) + deltaOffset);
2 26 Feb 07 jari 672             
2 26 Feb 07 jari 673             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 674             
2 26 Feb 07 jari 675             boolean posSigEncountered = false;
2 26 Feb 07 jari 676             boolean negSigEncountered = false;
2 26 Feb 07 jari 677
2 26 Feb 07 jari 678             int lowestPosSigIndex = 0;
2 26 Feb 07 jari 679             int highestNegSigIndex = 0;
2 26 Feb 07 jari 680
2 26 Feb 07 jari 681             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 682                 if ( (xArray[i] > 0.0d) && ((yArray[i] - xArray[i]) > delta) ) {
2 26 Feb 07 jari 683                     lowestPosSigIndex = i;
2 26 Feb 07 jari 684                     posSigEncountered = true;
2 26 Feb 07 jari 685                     break;
2 26 Feb 07 jari 686                 }
2 26 Feb 07 jari 687             }
2 26 Feb 07 jari 688
2 26 Feb 07 jari 689             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 690                 if ( (xArray[i] < 0.0d) && ((xArray[i] - yArray[i]) > delta) ) {
2 26 Feb 07 jari 691                     highestNegSigIndex = i;
2 26 Feb 07 jari 692                     negSigEncountered = true; 
2 26 Feb 07 jari 693                 }
2 26 Feb 07 jari 694             }  
2 26 Feb 07 jari 695             
2 26 Feb 07 jari 696             Color[] pointColor = new Color[xArray.length];
2 26 Feb 07 jari 697             
2 26 Feb 07 jari 698             if ((posSigEncountered)&&(negSigEncountered)) {
2 26 Feb 07 jari 699                 for (int i = 0; i < (highestNegSigIndex + 1); i++) {
2 26 Feb 07 jari 700                     //negSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 701                     pointColor[i] = Color.green.darker();
2 26 Feb 07 jari 702                 }
2 26 Feb 07 jari 703
2 26 Feb 07 jari 704                 for (int i = (highestNegSigIndex + 1); i < lowestPosSigIndex; i++) {
2 26 Feb 07 jari 705                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 706                     pointColor[i] = Color.black;
2 26 Feb 07 jari 707                 }
2 26 Feb 07 jari 708
2 26 Feb 07 jari 709                 for (int i = lowestPosSigIndex; i < xArray.length; i++) {
2 26 Feb 07 jari 710                     //posSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 711                     pointColor[i] = Color.red;
2 26 Feb 07 jari 712                 }
2 26 Feb 07 jari 713
2 26 Feb 07 jari 714             } else if((posSigEncountered)&&(!negSigEncountered)) {
2 26 Feb 07 jari 715                 for (int i = 0; i < lowestPosSigIndex; i++) {
2 26 Feb 07 jari 716                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 717                     pointColor[i] = Color.black;
2 26 Feb 07 jari 718                 }
2 26 Feb 07 jari 719
2 26 Feb 07 jari 720                 for (int i = lowestPosSigIndex; i < xArray.length; i++) {
2 26 Feb 07 jari 721                     //posSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 722                     pointColor[i] = Color.red;
2 26 Feb 07 jari 723                 }
2 26 Feb 07 jari 724             } else if ((!posSigEncountered) && (negSigEncountered)) {
2 26 Feb 07 jari 725                 for (int i = 0; i < (highestNegSigIndex + 1); i++) {
2 26 Feb 07 jari 726                     //negSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 727                     pointColor[i] = Color.green.darker();
2 26 Feb 07 jari 728                 }
2 26 Feb 07 jari 729                 for (int i = (highestNegSigIndex + 1); i < xArray.length; i++) {
2 26 Feb 07 jari 730                     //nonSigGenes.add(new Integer[sortedDArrayIndices[i]]);
2 26 Feb 07 jari 731                     pointColor[i] = Color.black;
2 26 Feb 07 jari 732                 }
2 26 Feb 07 jari 733             } else if ((!posSigEncountered) && (!negSigEncountered)) {
2 26 Feb 07 jari 734                 for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 735                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 736                     pointColor[i] = Color.black;
2 26 Feb 07 jari 737                 }
2 26 Feb 07 jari 738             }            
2 26 Feb 07 jari 739             
2 26 Feb 07 jari 740             //draw data points
2 26 Feb 07 jari 741             for (int i = 0; i < expectedXArray.length; i++) {
2 26 Feb 07 jari 742                 /*
2 26 Feb 07 jari 743                 if (((yArray[i] - xArray[i]) > delta) && (yArray[i] > 0.0d) ) {
2 26 Feb 07 jari 744                     g2D.setColor(Color.red);
2 26 Feb 07 jari 745                 } else if (((yArray[i] - xArray[i]) < (-1.0d)*delta) && (yArray[i] < 0.0d) ) {
2 26 Feb 07 jari 746                     g2D.setColor(Color.green.darker());
2 26 Feb 07 jari 747                 }
2 26 Feb 07 jari 748                  */
2 26 Feb 07 jari 749                 g2D.setColor(pointColor[i]);
2 26 Feb 07 jari 750                 drawPoint(g2D, xArray[i], yArray[i], getXScalingFactor(origMaxXValue, origMinXValue), getYScalingFactor(origMaxYValue, origMinYValue), 5);
2 26 Feb 07 jari 751                 g2D.setColor(Color.black);
2 26 Feb 07 jari 752                 //g2D.drawOval((midX + expectedXArray[i]),
2 26 Feb 07 jari 753             }
2 26 Feb 07 jari 754             
2 26 Feb 07 jari 755             g2D.drawString( "X axis = Expected, Y axis = Observed", this.getWidth()/2 + 25, this.getHeight() - 25);            
2 26 Feb 07 jari 756         }
2 26 Feb 07 jari 757         
2 26 Feb 07 jari 758         private void paint2(Graphics g) {
2 26 Feb 07 jari 759             Graphics2D g2D = (Graphics2D)g;
2 26 Feb 07 jari 760             int panelWidth = this.getWidth();
2 26 Feb 07 jari 761             int panelHeight = this.getHeight();
2 26 Feb 07 jari 762             originX = 30;
2 26 Feb 07 jari 763             originY = (int)Math.round((double)(this.getHeight() - 30));
2 26 Feb 07 jari 764             double origMaxXValue = getMax(xArray);
2 26 Feb 07 jari 765             double origMaxYValue = getMax(yArray);
2 26 Feb 07 jari 766             double origMinXValue = getMin(xArray);
2 26 Feb 07 jari 767             double origMinYValue = getMin(yArray);            
2 26 Feb 07 jari 768             
2 26 Feb 07 jari 769             double xScalingFactor = getXScalingFactor(origMaxXValue, origMinXValue); // relative to originX and originY
2 26 Feb 07 jari 770             double yScalingFactor = getYScalingFactor(origMaxYValue, origMinYValue); // relative to originX and originY
2 26 Feb 07 jari 771             
2 26 Feb 07 jari 772             final float dash1[] = {10.0f};
2 26 Feb 07 jari 773             
2 26 Feb 07 jari 774             final BasicStroke dashed = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f);
2 26 Feb 07 jari 775             
2 26 Feb 07 jari 776             //System.out.println("xScalingFactor = " + xScalingFactor + ", yScalingFactor = " + yScalingFactor);
2 26 Feb 07 jari 777             
2 26 Feb 07 jari 778             //draw axes
2 26 Feb 07 jari 779             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 780             g2D.drawLine(0, (int)Math.round((double)(this.getHeight() - 30)), this.getWidth(), (int)Math.round((double)(this.getHeight() - 30)));
2 26 Feb 07 jari 781             g2D.drawLine(30, 0, 30, this.getHeight());
2 26 Feb 07 jari 782             
2 26 Feb 07 jari 783             double[] xIntervalArray = new double[6];
2 26 Feb 07 jari 784             double[] yIntervalArray = new double[6];
2 26 Feb 07 jari 785             
2 26 Feb 07 jari 786             double xIncrement = 0.0d; 
2 26 Feb 07 jari 787             double yIncrement = 0.0d;
2 26 Feb 07 jari 788             
2 26 Feb 07 jari 789             if (Math.abs(origMaxXValue) > Math.abs(origMinXValue)) {
2 26 Feb 07 jari 790                 xIncrement = Math.abs((double)(origMaxXValue/5.0d));
2 26 Feb 07 jari 791             } else {
2 26 Feb 07 jari 792                 xIncrement = Math.abs((double)(origMinXValue/5.0d));
2 26 Feb 07 jari 793             }
2 26 Feb 07 jari 794
2 26 Feb 07 jari 795             if (Math.abs(origMaxYValue) > Math.abs(origMinYValue)) {
2 26 Feb 07 jari 796                 yIncrement = Math.abs((double)(origMaxYValue/5.0d));
2 26 Feb 07 jari 797             } else {
2 26 Feb 07 jari 798                 yIncrement = Math.abs((double)(origMinYValue/5.0d));
2 26 Feb 07 jari 799             }            
2 26 Feb 07 jari 800             
2 26 Feb 07 jari 801             double xCounter = 0.0d;
2 26 Feb 07 jari 802             double yCounter = 0.0d;
2 26 Feb 07 jari 803             for (int i = 0; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 804                 xIntervalArray[i] = xCounter;
2 26 Feb 07 jari 805                 xCounter = xCounter + xIncrement;
2 26 Feb 07 jari 806                 yIntervalArray[i] = yCounter;
2 26 Feb 07 jari 807                 yCounter = yCounter + yIncrement;
2 26 Feb 07 jari 808             }
2 26 Feb 07 jari 809             
2 26 Feb 07 jari 810             //draw x tick marks
2 26 Feb 07 jari 811             
2 26 Feb 07 jari 812             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 813                 g2D.drawLine((int)Math.round(xIntervalArray[i]*xScalingFactor) + 30, (this.getHeight() - 30) - 5, (int)Math.round(xIntervalArray[i]*xScalingFactor) + 30, (this.getHeight() - 30) + 5);
2 26 Feb 07 jari 814             }
2 26 Feb 07 jari 815             
2 26 Feb 07 jari 816             
2 26 Feb 07 jari 817             
2 26 Feb 07 jari 818             //for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 819             //    g2D.drawLine(this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight()/2 - 5, this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor), this.getHeight()/2 + 5);
2 26 Feb 07 jari 820             //}  
2 26 Feb 07 jari 821             
2 26 Feb 07 jari 822             
2 26 Feb 07 jari 823             //draw reference line of slope = 1
2 26 Feb 07 jari 824             g2D.drawLine(30, this.getHeight() - 30, 30 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight() - 30 - (int)Math.round(xIntervalArray[5]*yScalingFactor));
2 26 Feb 07 jari 825             
2 26 Feb 07 jari 826             g2D.setColor(Color.gray);
2 26 Feb 07 jari 827             
2 26 Feb 07 jari 828             g2D.setStroke(new BasicStroke(1.0f));
2 26 Feb 07 jari 829             
2 26 Feb 07 jari 830             //draw horizonal grid lines
2 26 Feb 07 jari 831             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 832                 g2D.drawLine(0, this.getHeight() - 30 - (int)Math.round(yIntervalArray[i]*yScalingFactor), this.getWidth(), this.getHeight() - 30 - (int)Math.round(yIntervalArray[i]*yScalingFactor));
2 26 Feb 07 jari 833             } 
2 26 Feb 07 jari 834             
2 26 Feb 07 jari 835             //for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 836             //    g2D.drawLine(0, this.getHeight()/2 - (int)Math.round(yIntervalArray[i]*yScalingFactor), this.getWidth(), this.getHeight()/2 - (int)Math.round(yIntervalArray[i]*yScalingFactor));
2 26 Feb 07 jari 837             //}            
2 26 Feb 07 jari 838             
2 26 Feb 07 jari 839             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 840             g2D.setColor(Color.black);
2 26 Feb 07 jari 841             
2 26 Feb 07 jari 842             DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 843             nf.setMaximumFractionDigits(2);
2 26 Feb 07 jari 844             
2 26 Feb 07 jari 845             //tick labels
2 26 Feb 07 jari 846             for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 847                 g2D.drawString(nf.format((double)xIntervalArray[i]), (int)Math.round(xIntervalArray[i]*xScalingFactor) + 10, this.getHeight() - 5);
2 26 Feb 07 jari 848             }
2 26 Feb 07 jari 849             
2 26 Feb 07 jari 850             //for (int i = 1; i < xIntervalArray.length; i++) {
2 26 Feb 07 jari 851             //    g2D.drawString("-" + nf.format((double)xIntervalArray[i]), this.getWidth()/2 - (int)Math.round(xIntervalArray[i]*xScalingFactor) - 10, this.getHeight()/2 + 20);
2 26 Feb 07 jari 852             //}
2 26 Feb 07 jari 853             
2 26 Feb 07 jari 854             for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 855                 g2D.drawString(nf.format((double)yIntervalArray[i]), 5, this.getHeight() - 30 - (int)Math.round(yIntervalArray[i]*yScalingFactor) - 5);
2 26 Feb 07 jari 856             }
2 26 Feb 07 jari 857             
2 26 Feb 07 jari 858             //for (int i = 1; i < yIntervalArray.length; i++) {
2 26 Feb 07 jari 859             //    g2D.drawString("-" + nf.format((double)yIntervalArray[i]), this.getWidth()/2 - 30, this.getHeight()/2 + (int)Math.round(yIntervalArray[i]*yScalingFactor) - 5);
2 26 Feb 07 jari 860             //}            
2 26 Feb 07 jari 861             
2 26 Feb 07 jari 862             int deltaOffset = (int)Math.round(delta*yScalingFactor);
2 26 Feb 07 jari 863             
2 26 Feb 07 jari 864             //draw dashed lines for delta limits
2 26 Feb 07 jari 865             g2D.setStroke(dashed);
2 26 Feb 07 jari 866             
2 26 Feb 07 jari 867             g2D.drawLine(30, this.getHeight() - 30 - deltaOffset, 30 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight() - 30 - (int)Math.round(xIntervalArray[5]*yScalingFactor) - deltaOffset);
2 26 Feb 07 jari 868             g2D.drawLine(30, this.getHeight() - 30 + deltaOffset, 30 + (int)Math.round(xIntervalArray[5]*xScalingFactor), this.getHeight() - 30 - (int)Math.round(xIntervalArray[5]*yScalingFactor) + deltaOffset);
2 26 Feb 07 jari 869             
2 26 Feb 07 jari 870             g2D.setStroke(new BasicStroke(2.0f));
2 26 Feb 07 jari 871             
2 26 Feb 07 jari 872             boolean posSigEncountered = false;
2 26 Feb 07 jari 873             boolean negSigEncountered = false;
2 26 Feb 07 jari 874
2 26 Feb 07 jari 875             int lowestPosSigIndex = 0;
2 26 Feb 07 jari 876             int highestNegSigIndex = 0;
2 26 Feb 07 jari 877
2 26 Feb 07 jari 878             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 879                 if ( (xArray[i] > 0.0d) && ((yArray[i] - xArray[i]) > delta) ) {
2 26 Feb 07 jari 880                     lowestPosSigIndex = i;
2 26 Feb 07 jari 881                     posSigEncountered = true;
2 26 Feb 07 jari 882                     break;
2 26 Feb 07 jari 883                 }
2 26 Feb 07 jari 884             }
2 26 Feb 07 jari 885
2 26 Feb 07 jari 886             for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 887                 if ( (xArray[i] < 0.0d) && ((xArray[i] - yArray[i]) > delta) ) {
2 26 Feb 07 jari 888                     highestNegSigIndex = i;
2 26 Feb 07 jari 889                     negSigEncountered = true; 
2 26 Feb 07 jari 890                 }
2 26 Feb 07 jari 891             }  
2 26 Feb 07 jari 892             
2 26 Feb 07 jari 893             Color[] pointColor = new Color[xArray.length];
2 26 Feb 07 jari 894             
2 26 Feb 07 jari 895             if ((posSigEncountered)&&(negSigEncountered)) {
2 26 Feb 07 jari 896                 for (int i = 0; i < (highestNegSigIndex + 1); i++) {
2 26 Feb 07 jari 897                     //negSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 898                     pointColor[i] = Color.green.darker();
2 26 Feb 07 jari 899                 }
2 26 Feb 07 jari 900
2 26 Feb 07 jari 901                 for (int i = (highestNegSigIndex + 1); i < lowestPosSigIndex; i++) {
2 26 Feb 07 jari 902                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 903                     pointColor[i] = Color.black;
2 26 Feb 07 jari 904                 }
2 26 Feb 07 jari 905
2 26 Feb 07 jari 906                 for (int i = lowestPosSigIndex; i < xArray.length; i++) {
2 26 Feb 07 jari 907                     //posSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 908                     pointColor[i] = Color.red;
2 26 Feb 07 jari 909                 }
2 26 Feb 07 jari 910
2 26 Feb 07 jari 911             } else if((posSigEncountered)&&(!negSigEncountered)) {
2 26 Feb 07 jari 912                 for (int i = 0; i < lowestPosSigIndex; i++) {
2 26 Feb 07 jari 913                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 914                     pointColor[i] = Color.black;
2 26 Feb 07 jari 915                 }
2 26 Feb 07 jari 916
2 26 Feb 07 jari 917                 for (int i = lowestPosSigIndex; i < xArray.length; i++) {
2 26 Feb 07 jari 918                     //posSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 919                     pointColor[i] = Color.red;
2 26 Feb 07 jari 920                 }
2 26 Feb 07 jari 921             } else if ((!posSigEncountered) && (negSigEncountered)) {
2 26 Feb 07 jari 922                 for (int i = 0; i < (highestNegSigIndex + 1); i++) {
2 26 Feb 07 jari 923                     //negSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 924                     pointColor[i] = Color.green.darker();
2 26 Feb 07 jari 925                 }
2 26 Feb 07 jari 926                 for (int i = (highestNegSigIndex + 1); i < xArray.length; i++) {
2 26 Feb 07 jari 927                     //nonSigGenes.add(new Integer[sortedDArrayIndices[i]]);
2 26 Feb 07 jari 928                     pointColor[i] = Color.black;
2 26 Feb 07 jari 929                 }
2 26 Feb 07 jari 930             } else if ((!posSigEncountered) && (!negSigEncountered)) {
2 26 Feb 07 jari 931                 for (int i = 0; i < xArray.length; i++) {
2 26 Feb 07 jari 932                     //nonSigGenes.add(new Integer(sortedDArrayIndices[i]));
2 26 Feb 07 jari 933                     pointColor[i] = Color.black;
2 26 Feb 07 jari 934                 }
2 26 Feb 07 jari 935             }            
2 26 Feb 07 jari 936             
2 26 Feb 07 jari 937             //draw data points
2 26 Feb 07 jari 938             for (int i = 0; i < expectedXArray.length; i++) {
2 26 Feb 07 jari 939
2 26 Feb 07 jari 940                 g2D.setColor(pointColor[i]);
2 26 Feb 07 jari 941                 drawPoint(g2D, xArray[i], yArray[i], getXScalingFactor(origMaxXValue, origMinXValue), getYScalingFactor(origMaxYValue, origMinYValue), 5);
2 26 Feb 07 jari 942                 g2D.setColor(Color.black);
2 26 Feb 07 jari 943                 //g2D.drawOval((midX + expectedXArray[i]),
2 26 Feb 07 jari 944             }
2 26 Feb 07 jari 945             
2 26 Feb 07 jari 946             g2D.drawString( "X axis = Expected, Y axis = Observed", 40, 20); 
2 26 Feb 07 jari 947              
2 26 Feb 07 jari 948                        
2 26 Feb 07 jari 949         }        
2 26 Feb 07 jari 950         
2 26 Feb 07 jari 951         private void drawPoint(Graphics2D g2D, double xValue, double yValue, double xScale, double yScale, int diameter) {
2 26 Feb 07 jari 952             int xRaw = (int)Math.round(xValue*xScale);
2 26 Feb 07 jari 953             int yRaw = (int)Math.round(yValue*yScale);
2 26 Feb 07 jari 954             //System.out.println("xValue = " + xValue + " , yValue = " + yValue + ", xRaw = " + xRaw + ", yRaw  = " + yRaw);
2 26 Feb 07 jari 955             
2 26 Feb 07 jari 956             int xCoord = 0;
2 26 Feb 07 jari 957             int yCoord = 0;
2 26 Feb 07 jari 958             
2 26 Feb 07 jari 959             //if (xValue >= 0) {
2 26 Feb 07 jari 960             if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 961                 xCoord = (int)Math.round((double)(this.getWidth()/2)) + xRaw;
2 26 Feb 07 jari 962             //} else {
2 26 Feb 07 jari 963                 //xCoord = Math.round((float)(this.getWidth()/2)) - xRaw;
2 26 Feb 07 jari 964             //}
2 26 Feb 07 jari 965             
2 26 Feb 07 jari 966             //if (yValue >= 0) {
2 26 Feb 07 jari 967                 yCoord = (int)Math.round((double)(this.getHeight()/2)) - yRaw;
2 26 Feb 07 jari 968             //} else {
2 26 Feb 07 jari 969                 //yCoord = Math.round((float)(this.getHeight()/2)) + yRaw;
2 26 Feb 07 jari 970             //}
2 26 Feb 07 jari 971             } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 972                 xCoord = 30 + xRaw; 
2 26 Feb 07 jari 973                 yCoord = (int)Math.round((double)(this.getHeight() - 30)) - yRaw;                
2 26 Feb 07 jari 974             }
2 26 Feb 07 jari 975             
2 26 Feb 07 jari 976             g2D.fillOval(xCoord, yCoord, diameter, diameter);
2 26 Feb 07 jari 977             
2 26 Feb 07 jari 978         }
2 26 Feb 07 jari 979          
2 26 Feb 07 jari 980         
2 26 Feb 07 jari 981        private double getXScalingFactor(double maxValue, double minValue) {
2 26 Feb 07 jari 982            double largest = 1;
2 26 Feb 07 jari 983            if ((maxValue > 0)&&(minValue > 0)) {
2 26 Feb 07 jari 984                largest = maxValue;
2 26 Feb 07 jari 985            } else if ((maxValue > 0)&&(minValue < 0)) {
2 26 Feb 07 jari 986                if (maxValue > Math.abs(minValue)) {
2 26 Feb 07 jari 987                    largest = maxValue;
2 26 Feb 07 jari 988                } else {
2 26 Feb 07 jari 989                    largest = Math.abs(minValue);
2 26 Feb 07 jari 990                }
2 26 Feb 07 jari 991            } else if (maxValue <= 0) {
2 26 Feb 07 jari 992                largest = Math.abs(minValue);
2 26 Feb 07 jari 993            } else if (minValue == 0) {
2 26 Feb 07 jari 994                largest = maxValue;
2 26 Feb 07 jari 995            }
2 26 Feb 07 jari 996            
2 26 Feb 07 jari 997            double scalingFactor =0; 
2 26 Feb 07 jari 998            if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 999                scalingFactor = (this.getWidth()/2 - 50)/largest;
2 26 Feb 07 jari 1000            } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1001                scalingFactor = ((this.getWidth() - 50) - 30)/largest;
2 26 Feb 07 jari 1002            }
2 26 Feb 07 jari 1003            
2 26 Feb 07 jari 1004            return scalingFactor;
2 26 Feb 07 jari 1005        }
2 26 Feb 07 jari 1006
2 26 Feb 07 jari 1007        private double getYScalingFactor(double maxValue, double minValue) {
2 26 Feb 07 jari 1008            double largest = 1;
2 26 Feb 07 jari 1009            if ((maxValue > 0)&&(minValue > 0)) {
2 26 Feb 07 jari 1010                largest = maxValue;
2 26 Feb 07 jari 1011            } else if ((maxValue > 0)&&(minValue < 0)) {
2 26 Feb 07 jari 1012                if (maxValue > Math.abs(minValue)) {
2 26 Feb 07 jari 1013                    largest = maxValue;
2 26 Feb 07 jari 1014                } else {
2 26 Feb 07 jari 1015                    largest = Math.abs(minValue);
2 26 Feb 07 jari 1016                }
2 26 Feb 07 jari 1017            } else if (maxValue <= 0) {
2 26 Feb 07 jari 1018                largest = Math.abs(minValue);
2 26 Feb 07 jari 1019            } else if (minValue == 0) {
2 26 Feb 07 jari 1020                largest = maxValue;
2 26 Feb 07 jari 1021            }
2 26 Feb 07 jari 1022            
2 26 Feb 07 jari 1023           double scalingFactor = 0; 
2 26 Feb 07 jari 1024           if ((studyDesign == SAMInitDialog.TWO_CLASS_UNPAIRED) || (studyDesign == SAMInitDialog.TWO_CLASS_PAIRED) || (studyDesign == SAMInitDialog.CENSORED_SURVIVAL) || (studyDesign == SAMInitDialog.ONE_CLASS)) {
2 26 Feb 07 jari 1025               scalingFactor = (this.getHeight()/2 - 50)/largest;
2 26 Feb 07 jari 1026           } else if (studyDesign == SAMInitDialog.MULTI_CLASS) {
2 26 Feb 07 jari 1027               scalingFactor = ((this.getHeight() - 30) - 50)/largest;
2 26 Feb 07 jari 1028           }
2 26 Feb 07 jari 1029            
2 26 Feb 07 jari 1030            return scalingFactor;
2 26 Feb 07 jari 1031        }       
2 26 Feb 07 jari 1032        
2 26 Feb 07 jari 1033         
2 26 Feb 07 jari 1034     }
2 26 Feb 07 jari 1035     
2 26 Feb 07 jari 1036     public boolean useFoldChange() {
2 26 Feb 07 jari 1037         return bPanel.useFoldChangeBox.isSelected();
2 26 Feb 07 jari 1038     }
2 26 Feb 07 jari 1039     
2 26 Feb 07 jari 1040     public double getFoldChangeValue() {
2 26 Feb 07 jari 1041         String s2 = bPanel.foldChangeTextField.getText();
2 26 Feb 07 jari 1042         return Double.parseDouble(s2);
2 26 Feb 07 jari 1043     }
2 26 Feb 07 jari 1044     
2 26 Feb 07 jari 1045     public double getDelta() {
2 26 Feb 07 jari 1046         String s = bPanel.deltaTextField.getText();
2 26 Feb 07 jari 1047         if (infiniteDeltaEncountered) {
2 26 Feb 07 jari 1048             return Double.POSITIVE_INFINITY;
2 26 Feb 07 jari 1049         } else {
2 26 Feb 07 jari 1050             return Double.parseDouble(s);
2 26 Feb 07 jari 1051         }
2 26 Feb 07 jari 1052     }
2 26 Feb 07 jari 1053     
2 26 Feb 07 jari 1054     public static void main(String[] args) {
2 26 Feb 07 jari 1055         SAMGraph sg = new SAMGraph();
2 26 Feb 07 jari 1056         sg.setVisible(true);
2 26 Feb 07 jari 1057     }
2 26 Feb 07 jari 1058     
2 26 Feb 07 jari 1059 }