mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ptm/PavlidisTemplateInitBox.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: PavlidisTemplateInitBox.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:22:03 $
2 26 Feb 07 jari 9  * $Author: braistedj $
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.ptm;
2 26 Feb 07 jari 13
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.GridBagConstraints;
2 26 Feb 07 jari 17 import java.awt.GridBagLayout;
2 26 Feb 07 jari 18 import java.awt.Toolkit;
2 26 Feb 07 jari 19 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 20 import java.awt.event.ActionListener;
2 26 Feb 07 jari 21 import java.awt.event.FocusEvent;
2 26 Feb 07 jari 22 import java.awt.event.FocusListener;
2 26 Feb 07 jari 23 import java.awt.event.ItemEvent;
2 26 Feb 07 jari 24 import java.awt.event.ItemListener;
2 26 Feb 07 jari 25 import java.io.DataOutputStream;
2 26 Feb 07 jari 26 import java.io.File;
2 26 Feb 07 jari 27 import java.io.FileOutputStream;
2 26 Feb 07 jari 28 import java.io.IOException;
2 26 Feb 07 jari 29 import java.util.Hashtable;
2 26 Feb 07 jari 30 import java.util.Vector;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 33 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 34 import javax.swing.JButton;
2 26 Feb 07 jari 35 import javax.swing.JCheckBox;
2 26 Feb 07 jari 36 import javax.swing.JFileChooser;
2 26 Feb 07 jari 37 import javax.swing.JFrame;
2 26 Feb 07 jari 38 import javax.swing.JLabel;
2 26 Feb 07 jari 39 import javax.swing.JList;
2 26 Feb 07 jari 40 import javax.swing.JOptionPane;
2 26 Feb 07 jari 41 import javax.swing.JPanel;
2 26 Feb 07 jari 42 import javax.swing.JRadioButton;
2 26 Feb 07 jari 43 import javax.swing.JScrollPane;
2 26 Feb 07 jari 44 import javax.swing.JSlider;
2 26 Feb 07 jari 45 import javax.swing.JSplitPane;
2 26 Feb 07 jari 46 import javax.swing.JTabbedPane;
2 26 Feb 07 jari 47 import javax.swing.JTextField;
2 26 Feb 07 jari 48 import javax.swing.ListSelectionModel;
2 26 Feb 07 jari 49 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 50 import javax.swing.SwingConstants;
2 26 Feb 07 jari 51 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 52 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 53 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 54 import javax.swing.event.ListSelectionListener;
2 26 Feb 07 jari 55
2 26 Feb 07 jari 56 import org.tigr.graph.GraphCanvas;
2 26 Feb 07 jari 57 import org.tigr.graph.GraphLine;
2 26 Feb 07 jari 58 import org.tigr.graph.GraphPoint;
2 26 Feb 07 jari 59 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 60 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 61
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63 public class PavlidisTemplateInitBox extends JPanel {
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     String[] SampleNames;
2 26 Feb 07 jari 66     Vector sampleNamesVector;
2 26 Feb 07 jari 67     Vector uniqueIDs;
2 26 Feb 07 jari 68     Vector clusters; //THIS IS A VECTOR OF VECTORS (EACH SUB-VECTOR CONTAINS THE INDICES OF UNIQUEIDS IN THAT CLUSTER)
2 26 Feb 07 jari 69     Color[] clusterColors;
2 26 Feb 07 jari 70     UniqueIDSelector uidSelectPanel;
2 26 Feb 07 jari 71     ClusterSelector clusterSelectPanel;
2 26 Feb 07 jari 72     SavedTemplateSelector templateSelectPanel;
2 26 Feb 07 jari 73     BottomPanel bott;
2 26 Feb 07 jari 74     TemplatePanel tempPanel;
2 26 Feb 07 jari 75     AbsolutePanel abs;
2 26 Feb 07 jari 76     ThresholdPanel thresh;
2 26 Feb 07 jari 77     FloatMatrix expMatrix;
2 26 Feb 07 jari 78     JCheckBox drawTreesBox;
2 26 Feb 07 jari 79     JPanel drawTreesPane;
2 26 Feb 07 jari 80     JTabbedPane tabbedPane;
2 26 Feb 07 jari 81     Vector template;
2 26 Feb 07 jari 82     FloatMatrix templateMatrix;
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     private boolean okPressed = false;
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86     
2 26 Feb 07 jari 87     public PavlidisTemplateInitBox(JFrame parentFrame, boolean modality, FloatMatrix expMatrix, Vector sampleNamesVector, Vector uniqueIDs, Vector clusters, Color[] clusterColors) {
2 26 Feb 07 jari 88   
2 26 Feb 07 jari 89   //super (parentFrame, "Gene Template Matching using Pearson's R", modality);
2 26 Feb 07 jari 90   
2 26 Feb 07 jari 91   this.expMatrix = expMatrix;
2 26 Feb 07 jari 92   this.sampleNamesVector = sampleNamesVector;
2 26 Feb 07 jari 93   this.uniqueIDs = uniqueIDs;
2 26 Feb 07 jari 94   this.clusters = clusters;
2 26 Feb 07 jari 95   this.clusterColors = clusterColors;
2 26 Feb 07 jari 96   SampleNames = getSampleNames();
2 26 Feb 07 jari 97   
2 26 Feb 07 jari 98   setBounds(0, 0, 1000, 800); // may need to tinker with this, to set the right size and position of the frame
2 26 Feb 07 jari 99   //setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 100   GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 101   GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 102   constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 103   JPanel pane = new JPanel();
2 26 Feb 07 jari 104   pane.setLayout(gridbag);
2 26 Feb 07 jari 105   
2 26 Feb 07 jari 106   buildConstraints(constraints, 0, 0, 2, 1, 0, 25);
2 26 Feb 07 jari 107   tabbedPane = new JTabbedPane();
2 26 Feb 07 jari 108   uidSelectPanel = new UniqueIDSelector();
2 26 Feb 07 jari 109   clusterSelectPanel = new ClusterSelector();
2 26 Feb 07 jari 110   templateSelectPanel = new SavedTemplateSelector();
2 26 Feb 07 jari 111   tabbedPane.addTab("Select a gene as template", uidSelectPanel);
2 26 Feb 07 jari 112   tabbedPane.addTab("Select a cluster mean as template", clusterSelectPanel);
2 26 Feb 07 jari 113   tabbedPane.addTab("Select a saved template", templateSelectPanel);
2 26 Feb 07 jari 114   gridbag.setConstraints(tabbedPane, constraints);
2 26 Feb 07 jari 115   pane.add(tabbedPane);
2 26 Feb 07 jari 116   
2 26 Feb 07 jari 117       /*
2 26 Feb 07 jari 118       uidSelectPanel = new UniqueIDSelector();
2 26 Feb 07 jari 119       gridbag.setConstraints(uidSelectPanel, constraints);
2 26 Feb 07 jari 120       pane.add(uidSelectPanel);
2 26 Feb 07 jari 121        */
2 26 Feb 07 jari 122   
2 26 Feb 07 jari 123   //placeholder button for top panel
2 26 Feb 07 jari 124   buildConstraints(constraints, 0, 1, 2, 1, 0, 55);
2 26 Feb 07 jari 125   tempPanel = new TemplatePanel();
2 26 Feb 07 jari 126   //JButton button1 = new JButton("Enter template");
2 26 Feb 07 jari 127   gridbag.setConstraints(tempPanel, constraints);
2 26 Feb 07 jari 128   pane.add(tempPanel);
2 26 Feb 07 jari 129   
2 26 Feb 07 jari 130   // Absolute Value panel
2 26 Feb 07 jari 131   buildConstraints(constraints, 0, 2, 1, 1, 70, 5);
2 26 Feb 07 jari 132   abs = new AbsolutePanel();
2 26 Feb 07 jari 133   gridbag.setConstraints(abs, constraints);
2 26 Feb 07 jari 134   pane.add(abs);
2 26 Feb 07 jari 135   
2 26 Feb 07 jari 136   // threshold prob panel
2 26 Feb 07 jari 137   buildConstraints(constraints, 0, 3, 1, 1, 0, 10);
2 26 Feb 07 jari 138   thresh = new ThresholdPanel();
2 26 Feb 07 jari 139   gridbag.setConstraints(thresh, constraints);
2 26 Feb 07 jari 140   pane.add(thresh);
2 26 Feb 07 jari 141   
2 26 Feb 07 jari 142   buildConstraints(constraints, 0, 4, 1, 1, 0, 5);
2 26 Feb 07 jari 143   drawTreesPane = new JPanel();
2 26 Feb 07 jari 144   drawTreesBox = new JCheckBox("Draw hierarchical trees?");
2 26 Feb 07 jari 145   drawTreesPane.add(drawTreesBox);
2 26 Feb 07 jari 146   //constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 147   gridbag.setConstraints(drawTreesPane, constraints);
2 26 Feb 07 jari 148   pane.add(drawTreesPane);
2 26 Feb 07 jari 149   
2 26 Feb 07 jari 150   // cancel / ok panel
2 26 Feb 07 jari 151   buildConstraints(constraints, 1, 2, 1, 3, 30, 0);
2 26 Feb 07 jari 152   bott = new BottomPanel();
2 26 Feb 07 jari 153   bott.cancelButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 154       public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 155     if (evt.getSource() == bott.cancelButton) {
2 26 Feb 07 jari 156     //    hide();
2 26 Feb 07 jari 157     //    dispose();
2 26 Feb 07 jari 158     }
2 26 Feb 07 jari 159       }
2 26 Feb 07 jari 160   });
2 26 Feb 07 jari 161   
2 26 Feb 07 jari 162   gridbag.setConstraints(bott, constraints);
2 26 Feb 07 jari 163   pane.add(bott);
2 26 Feb 07 jari 164   //JButton button4 = new JButton("Cancel / ok");
2 26 Feb 07 jari 165   //gridbag.setConstraints(button4, constraints);
2 26 Feb 07 jari 166   //pane.add(button4);
2 26 Feb 07 jari 167   this.add(pane);
2 26 Feb 07 jari 168   //setContentPane(pane);
2 26 Feb 07 jari 169     }
2 26 Feb 07 jari 170     
2 26 Feb 07 jari 171     
2 26 Feb 07 jari 172     public void setVisible(boolean visible) {
2 26 Feb 07 jari 173   
2 26 Feb 07 jari 174   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 175   setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 176   
2 26 Feb 07 jari 177   super.setVisible(visible);
2 26 Feb 07 jari 178     }
2 26 Feb 07 jari 179     
2 26 Feb 07 jari 180     
2 26 Feb 07 jari 181     
2 26 Feb 07 jari 182     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 183     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 184   
2 26 Feb 07 jari 185   gbc.gridx = gx;
2 26 Feb 07 jari 186   gbc.gridy = gy;
2 26 Feb 07 jari 187   gbc.gridwidth = gw;
2 26 Feb 07 jari 188   gbc.gridheight = gh;
2 26 Feb 07 jari 189   gbc.weightx = wx;
2 26 Feb 07 jari 190   gbc.weighty = wy;
2 26 Feb 07 jari 191     }
2 26 Feb 07 jari 192     
2 26 Feb 07 jari 193     
2 26 Feb 07 jari 194     
2 26 Feb 07 jari 195     String[] getSampleNames() {
2 26 Feb 07 jari 196   String[] SampleNames = new String[sampleNamesVector.size()];
2 26 Feb 07 jari 197   for(int i = 0; i < sampleNamesVector.size(); i++){
2 26 Feb 07 jari 198       SampleNames[i] = (String)sampleNamesVector.get(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   
2 26 Feb 07 jari 203   return SampleNames;
2 26 Feb 07 jari 204     }
2 26 Feb 07 jari 205     
2 26 Feb 07 jari 206     
2 26 Feb 07 jari 207     
2 26 Feb 07 jari 208     
2 26 Feb 07 jari 209     class UniqueIDSelector extends JPanel{
2 26 Feb 07 jari 210   JList uniqueIDList;
2 26 Feb 07 jari 211   GraphCanvas profileDisplayPanel;
2 26 Feb 07 jari 212   JScrollPane listScrollPane;
2 26 Feb 07 jari 213   JButton selectButton;
2 26 Feb 07 jari 214   int maxIndex = -1;
2 26 Feb 07 jari 215   int minIndex = -1;
2 26 Feb 07 jari 216   
2 26 Feb 07 jari 217   
2 26 Feb 07 jari 218   JSplitPane uIDSplitPane;
2 26 Feb 07 jari 219   
2 26 Feb 07 jari 220   UniqueIDSelector() {
2 26 Feb 07 jari 221       
2 26 Feb 07 jari 222       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 223       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 224       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 225       this.setLayout(gridbag);
2 26 Feb 07 jari 226       
2 26 Feb 07 jari 227       uniqueIDList = new JList(uniqueIDs);
2 26 Feb 07 jari 228       uniqueIDList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
2 26 Feb 07 jari 229       uniqueIDList.setSelectedIndex(0);
2 26 Feb 07 jari 230       
2 26 Feb 07 jari 231       //AIS -- Use the graph classes
2 26 Feb 07 jari 232       profileDisplayPanel = new GraphCanvas();
2 26 Feb 07 jari 233       profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);
2 26 Feb 07 jari 234       profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);
2 26 Feb 07 jari 235       profileDisplayPanel.setXAxisValue(0);
2 26 Feb 07 jari 236       profileDisplayPanel.setYAxisValue(0);
2 26 Feb 07 jari 237       
2 26 Feb 07 jari 238       uniqueIDList.addListSelectionListener(new ListSelectionListener(){
2 26 Feb 07 jari 239     public void valueChanged(ListSelectionEvent e) {
2 26 Feb 07 jari 240         refreshGraph();
2 26 Feb 07 jari 241     }
2 26 Feb 07 jari 242       });
2 26 Feb 07 jari 243       //-- AIS
2 26 Feb 07 jari 244       
2 26 Feb 07 jari 245       listScrollPane = new JScrollPane(uniqueIDList);
2 26 Feb 07 jari 246       
2 26 Feb 07 jari 247       uIDSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);
2 26 Feb 07 jari 248       uIDSplitPane.setOneTouchExpandable(true);
2 26 Feb 07 jari 249       uIDSplitPane.setDividerLocation(200);
2 26 Feb 07 jari 250       
2 26 Feb 07 jari 251       Dimension minimumSize = new Dimension(100,50);
2 26 Feb 07 jari 252       uniqueIDList.setMinimumSize(minimumSize);
2 26 Feb 07 jari 253       profileDisplayPanel.setMinimumSize(minimumSize);
2 26 Feb 07 jari 254       
2 26 Feb 07 jari 255       //uIDSplitPane.setPreferredSize(new Dimension(700,150));
2 26 Feb 07 jari 256       
2 26 Feb 07 jari 257       buildConstraints(constraints, 0, 0, 1, 1, 1, 80);
2 26 Feb 07 jari 258       constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 259       gridbag.setConstraints(uIDSplitPane, constraints);
2 26 Feb 07 jari 260       this.add(uIDSplitPane);
2 26 Feb 07 jari 261       
2 26 Feb 07 jari 262       buildConstraints(constraints, 0, 1, 1, 1, 0, 20);
2 26 Feb 07 jari 263       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 264       constraints.anchor = GridBagConstraints.SOUTH;
2 26 Feb 07 jari 265       selectButton = new JButton("Select highlighted gene from above list to use as template");
2 26 Feb 07 jari 266       selectButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 267     
2 26 Feb 07 jari 268     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 269         int index = uniqueIDList.getSelectedIndex();
2 26 Feb 07 jari 270         Vector expProfile = getGene(index);
2 26 Feb 07 jari 271         float max = getMax(expProfile);
2 26 Feb 07 jari 272         float min = getMin(expProfile);
2 26 Feb 07 jari 273         
2 26 Feb 07 jari 274         if ((max - min) == 0) {
2 26 Feb 07 jari 275       
2 26 Feb 07 jari 276       for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 277           expProfile.set(i, new Float(0.5));
2 26 Feb 07 jari 278       }
2 26 Feb 07 jari 279       
2 26 Feb 07 jari 280         } else {
2 26 Feb 07 jari 281       
2 26 Feb 07 jari 282       for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 283           float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);
2 26 Feb 07 jari 284           expProfile.set(i, new Float(f));
2 26 Feb 07 jari 285       }
2 26 Feb 07 jari 286         }
2 26 Feb 07 jari 287         
2 26 Feb 07 jari 288         for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){
2 26 Feb 07 jari 289       if (!Float.isNaN(((Float)expProfile.get(i)).floatValue())) {
2 26 Feb 07 jari 290           tempPanel.tempScr.tempGrid[i].activeBox.setSelected(true);
2 26 Feb 07 jari 291           tempPanel.tempScr.tempGrid[i].templateSlider.setEnabled(true);
2 26 Feb 07 jari 292           tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));
2 26 Feb 07 jari 293           tempPanel.tempScr.tempGrid[i].templateField.setEnabled(true);
2 26 Feb 07 jari 294           tempPanel.tempScr.tempGrid[i].templateField.setBackground(Color.white);
2 26 Feb 07 jari 295           tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());
2 26 Feb 07 jari 296       } else {
2 26 Feb 07 jari 297           tempPanel.tempScr.tempGrid[i].activeBox.setSelected(false);
2 26 Feb 07 jari 298           tempPanel.tempScr.tempGrid[i].templateSlider.setEnabled(false);
2 26 Feb 07 jari 299           tempPanel.tempScr.tempGrid[i].templateField.setText("NULL");
2 26 Feb 07 jari 300           tempPanel.tempScr.tempGrid[i].templateField.setBackground(Color.gray);
2 26 Feb 07 jari 301           tempPanel.tempScr.tempGrid[i].templateField.setEnabled(false);
2 26 Feb 07 jari 302       }
2 26 Feb 07 jari 303         }
2 26 Feb 07 jari 304     }
2 26 Feb 07 jari 305     
2 26 Feb 07 jari 306       });
2 26 Feb 07 jari 307       
2 26 Feb 07 jari 308       gridbag.setConstraints(selectButton, constraints);
2 26 Feb 07 jari 309       this.add(selectButton);
2 26 Feb 07 jari 310       refreshGraph();
2 26 Feb 07 jari 311   }
2 26 Feb 07 jari 312   
2 26 Feb 07 jari 313   private void refreshGraph() {
2 26 Feb 07 jari 314       
2 26 Feb 07 jari 315       int index = uniqueIDList.getSelectedIndex();
2 26 Feb 07 jari 316       Vector expProfile = getGene(index);
2 26 Feb 07 jari 317       float max = getMax(expProfile);
2 26 Feb 07 jari 318       float min = getMin(expProfile);
2 26 Feb 07 jari 319       
2 26 Feb 07 jari 320       profileDisplayPanel.removeAllGraphElements();
2 26 Feb 07 jari 321       for (int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 322     if (!Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) {
2 26 Feb 07 jari 323         GraphPoint gp = new GraphPoint(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(), Color.red, 5);
2 26 Feb 07 jari 324         profileDisplayPanel.addGraphElement(gp);
2 26 Feb 07 jari 325     }
2 26 Feb 07 jari 326       }
2 26 Feb 07 jari 327       
2 26 Feb 07 jari 328       for (int i = 0; i < expProfile.size() - 1; i++) {
2 26 Feb 07 jari 329     if ((Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) expProfile.elementAt(i+1)).floatValue()))) {
2 26 Feb 07 jari 330         continue;
2 26 Feb 07 jari 331     }
2 26 Feb 07 jari 332     GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(),
2 26 Feb 07 jari 333     i + 1, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.blue);
2 26 Feb 07 jari 334     profileDisplayPanel.addGraphElement(gl);
2 26 Feb 07 jari 335     
2 26 Feb 07 jari 336       }
2 26 Feb 07 jari 337       
2 26 Feb 07 jari 338       profileDisplayPanel.repaint();
2 26 Feb 07 jari 339   }
2 26 Feb 07 jari 340   
2 26 Feb 07 jari 341   
2 26 Feb 07 jari 342     }
2 26 Feb 07 jari 343     
2 26 Feb 07 jari 344     
2 26 Feb 07 jari 345     
2 26 Feb 07 jari 346     private Vector getGene(int index) {
2 26 Feb 07 jari 347   Vector gene = new Vector();
2 26 Feb 07 jari 348   
2 26 Feb 07 jari 349   for (int i = 0; i < sampleNamesVector.size(); i++) {
2 26 Feb 07 jari 350       gene.add(new Float(expMatrix.get(index, i)));
2 26 Feb 07 jari 351   }
2 26 Feb 07 jari 352   
2 26 Feb 07 jari 353   return gene;
2 26 Feb 07 jari 354     }
2 26 Feb 07 jari 355     
2 26 Feb 07 jari 356     
2 26 Feb 07 jari 357     
2 26 Feb 07 jari 358     private float getMax(Vector gene) {
2 26 Feb 07 jari 359   float max = Float.NEGATIVE_INFINITY;
2 26 Feb 07 jari 360   
2 26 Feb 07 jari 361   for(int i = 0; i < gene.size(); i++) {
2 26 Feb 07 jari 362       if (! Float.isNaN(((Float)gene.get(i)).floatValue())) {
2 26 Feb 07 jari 363     float current = ((Float)gene.get(i)).floatValue();
2 26 Feb 07 jari 364     if (current > max) max = current;
2 26 Feb 07 jari 365       }
2 26 Feb 07 jari 366   }
2 26 Feb 07 jari 367   
2 26 Feb 07 jari 368   return max;
2 26 Feb 07 jari 369     }
2 26 Feb 07 jari 370     
2 26 Feb 07 jari 371     
2 26 Feb 07 jari 372     private float getMin(Vector gene) {
2 26 Feb 07 jari 373   float min = Float.MAX_VALUE;
2 26 Feb 07 jari 374   
2 26 Feb 07 jari 375   for(int i = 0; i < gene.size(); i++) {
2 26 Feb 07 jari 376       if (! Float.isNaN(((Float)gene.get(i)).floatValue())) {
2 26 Feb 07 jari 377     float current = ((Float)gene.get(i)).floatValue();
2 26 Feb 07 jari 378     if (current < min) min = current;
2 26 Feb 07 jari 379       }
2 26 Feb 07 jari 380   }
2 26 Feb 07 jari 381   
2 26 Feb 07 jari 382   return min;
2 26 Feb 07 jari 383     }
2 26 Feb 07 jari 384     
2 26 Feb 07 jari 385     
2 26 Feb 07 jari 386     
2 26 Feb 07 jari 387     class ClusterSelector extends JPanel {
2 26 Feb 07 jari 388   JList clusterList;
2 26 Feb 07 jari 389   GraphCanvas profileDisplayPanel;
2 26 Feb 07 jari 390   JScrollPane listScrollPane;
2 26 Feb 07 jari 391   JButton selectButton;
2 26 Feb 07 jari 392   
2 26 Feb 07 jari 393   Vector clusterNames; // JUST THE NAMES OF THE CLUSTERS, i.e., "CLUSTER 1", "CLUSTER 2", ETC.
2 26 Feb 07 jari 394   //Vector clusterContents; // THIS IS A VECTOR OF VECTORS (= THE INDICES OF THE UNIQUE IDS IN A CLUSTER)
2 26 Feb 07 jari 395   Vector geneDataInClusters; // THIS IS A VECTOR OF VECTORS ( = CLUSTERS) OF VECTORS ( = EXPRESSION PROFILES OF GENES IN THAT CLUSTER).
2 26 Feb 07 jari 396   Vector averageClusterProfiles;
2 26 Feb 07 jari 397   
2 26 Feb 07 jari 398   JSplitPane clusterSplitPane;
2 26 Feb 07 jari 399   
2 26 Feb 07 jari 400   ClusterSelector() {
2 26 Feb 07 jari 401       
2 26 Feb 07 jari 402       clusterNames = new Vector();
2 26 Feb 07 jari 403       
2 26 Feb 07 jari 404       if (clusters.size() == 0) {
2 26 Feb 07 jari 405     clusterNames.add("No clusters to show");
2 26 Feb 07 jari 406       } else {
2 26 Feb 07 jari 407     
2 26 Feb 07 jari 408     for (int i = 0; i < clusters.size(); i++) {
2 26 Feb 07 jari 409         clusterNames.add("Cluster " + (i+1));
2 26 Feb 07 jari 410     }
2 26 Feb 07 jari 411     
2 26 Feb 07 jari 412     geneDataInClusters = new Vector();
2 26 Feb 07 jari 413     averageClusterProfiles = new Vector();
2 26 Feb 07 jari 414     
2 26 Feb 07 jari 415     for(int j = 0; j < clusters.size(); j++) {//IN THIS "FOR" LOOP, CURRENT CLUSTER INITIALLY CONTAINS THE INDICES OF THE GENES IN THE CLUSTER, BUT THESE ARE REPLACED BY THE ACUALLY EXPRESSION VECTORS
2 26 Feb 07 jari 416         Vector currentCluster = (Vector)clusters.get(j);
2 26 Feb 07 jari 417         
2 26 Feb 07 jari 418         for (int k = 0; k < currentCluster.size(); k++) {
2 26 Feb 07 jari 419       int index = ((Integer)currentCluster.get(k)).intValue();
2 26 Feb 07 jari 420       Vector currentGene = getGene(index);
2 26 Feb 07 jari 421       currentCluster.set(k, currentGene);
2 26 Feb 07 jari 422         }
2 26 Feb 07 jari 423         
2 26 Feb 07 jari 424         geneDataInClusters.add(currentCluster);
2 26 Feb 07 jari 425         
2 26 Feb 07 jari 426         Vector meanOfCurrentCluster = getMeanProfile(currentCluster);
2 26 Feb 07 jari 427         averageClusterProfiles.add(meanOfCurrentCluster);
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       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 433       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 434       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 435       this.setLayout(gridbag);
2 26 Feb 07 jari 436       
2 26 Feb 07 jari 437       clusterList = new JList(clusterNames);
2 26 Feb 07 jari 438       clusterList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
2 26 Feb 07 jari 439       clusterList.setSelectedIndex(0);
2 26 Feb 07 jari 440       
2 26 Feb 07 jari 441       //AIS -- Use the graph classes
2 26 Feb 07 jari 442       profileDisplayPanel = new GraphCanvas();
2 26 Feb 07 jari 443       profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);
2 26 Feb 07 jari 444       profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);
2 26 Feb 07 jari 445       profileDisplayPanel.setXAxisValue(0);
2 26 Feb 07 jari 446       profileDisplayPanel.setYAxisValue(0);
2 26 Feb 07 jari 447       
2 26 Feb 07 jari 448       clusterList.addListSelectionListener(new ListSelectionListener(){
2 26 Feb 07 jari 449     public void valueChanged(ListSelectionEvent e) {
2 26 Feb 07 jari 450         refreshGraph();
2 26 Feb 07 jari 451     }
2 26 Feb 07 jari 452       });
2 26 Feb 07 jari 453       //-- AIS
2 26 Feb 07 jari 454       
2 26 Feb 07 jari 455       listScrollPane = new JScrollPane(clusterList);
2 26 Feb 07 jari 456       
2 26 Feb 07 jari 457       clusterSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);
2 26 Feb 07 jari 458       clusterSplitPane.setOneTouchExpandable(true);
2 26 Feb 07 jari 459       clusterSplitPane.setDividerLocation(200);
2 26 Feb 07 jari 460       
2 26 Feb 07 jari 461       Dimension minimumSize = new Dimension(100,50);
2 26 Feb 07 jari 462       clusterList.setMinimumSize(minimumSize);
2 26 Feb 07 jari 463       profileDisplayPanel.setMinimumSize(minimumSize);
2 26 Feb 07 jari 464       
2 26 Feb 07 jari 465       //clusterSplitPane.setMinimumSize(new Dimension(700,150));
2 26 Feb 07 jari 466       
2 26 Feb 07 jari 467       buildConstraints(constraints, 0, 0, 1, 1, 1, 80);
2 26 Feb 07 jari 468       constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 469       gridbag.setConstraints(clusterSplitPane, constraints);
2 26 Feb 07 jari 470       this.add(clusterSplitPane);
2 26 Feb 07 jari 471       
2 26 Feb 07 jari 472       buildConstraints(constraints, 0, 1, 1, 1, 0, 20);
2 26 Feb 07 jari 473       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 474       //constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 475       selectButton = new JButton("Select highlighted cluster from above list to use its mean as template");
2 26 Feb 07 jari 476       selectButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 477     
2 26 Feb 07 jari 478     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 479         if (clusters.size() == 0){
2 26 Feb 07 jari 480       JOptionPane.showMessageDialog(null, "No clusters to select");
2 26 Feb 07 jari 481         } else {
2 26 Feb 07 jari 482       int index = clusterList.getSelectedIndex();
2 26 Feb 07 jari 483       Vector expProfile = (Vector) ((Vector) averageClusterProfiles.get(index)).clone();
2 26 Feb 07 jari 484       float max = getMax(expProfile);
2 26 Feb 07 jari 485       float min = getMin(expProfile);
2 26 Feb 07 jari 486       
2 26 Feb 07 jari 487       if ((max - min) == 0) {
2 26 Feb 07 jari 488           
2 26 Feb 07 jari 489           for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 490         expProfile.set(i, new Float(0.5));
2 26 Feb 07 jari 491           }
2 26 Feb 07 jari 492           
2 26 Feb 07 jari 493       } else {
2 26 Feb 07 jari 494           
2 26 Feb 07 jari 495           for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 496         float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);
2 26 Feb 07 jari 497         expProfile.set(i, new Float(f));
2 26 Feb 07 jari 498           }
2 26 Feb 07 jari 499       }
2 26 Feb 07 jari 500       
2 26 Feb 07 jari 501       for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){
2 26 Feb 07 jari 502           tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));
2 26 Feb 07 jari 503           tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());
2 26 Feb 07 jari 504       }
2 26 Feb 07 jari 505         }
2 26 Feb 07 jari 506     }
2 26 Feb 07 jari 507     
2 26 Feb 07 jari 508       });
2 26 Feb 07 jari 509       
2 26 Feb 07 jari 510       gridbag.setConstraints(selectButton, constraints);
2 26 Feb 07 jari 511       this.add(selectButton);
2 26 Feb 07 jari 512       refreshGraph();
2 26 Feb 07 jari 513   }
2 26 Feb 07 jari 514   
2 26 Feb 07 jari 515   private void refreshGraph() {
2 26 Feb 07 jari 516       
2 26 Feb 07 jari 517       int index = clusterList.getSelectedIndex();
2 26 Feb 07 jari 518       if (clusters.size() <= 0) return;
2 26 Feb 07 jari 519       Vector meanProfile = (Vector) averageClusterProfiles.elementAt(index);
2 26 Feb 07 jari 520       
2 26 Feb 07 jari 521       profileDisplayPanel.removeAllGraphElements();
2 26 Feb 07 jari 522       Vector selectedCluster = (Vector)geneDataInClusters.get(index);
2 26 Feb 07 jari 523       
2 26 Feb 07 jari 524       for (int j = 0; j < selectedCluster.size(); j++) {
2 26 Feb 07 jari 525     
2 26 Feb 07 jari 526     Vector currGene = (Vector)selectedCluster.get(j);
2 26 Feb 07 jari 527     for (int i = 0; i < currGene.size(); i++) {
2 26 Feb 07 jari 528     }
2 26 Feb 07 jari 529     
2 26 Feb 07 jari 530     for (int i = 0; i < currGene.size() - 1; i++) {
2 26 Feb 07 jari 531         if ((Float.isNaN(((Float) currGene.elementAt(i)).floatValue()))||(Float.isNaN(((Float) currGene.elementAt(i+1)).floatValue()))) {
2 26 Feb 07 jari 532       continue;
2 26 Feb 07 jari 533         }
2 26 Feb 07 jari 534         GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) currGene.elementAt(i)).floatValue(),
2 26 Feb 07 jari 535         i + 1, ((Float) currGene.elementAt(i + 1)).floatValue(), clusterColors[index]);
2 26 Feb 07 jari 536         profileDisplayPanel.addGraphElement(gl);
2 26 Feb 07 jari 537         
2 26 Feb 07 jari 538     }
2 26 Feb 07 jari 539       }
2 26 Feb 07 jari 540       
2 26 Feb 07 jari 541       for (int i = 0; i < meanProfile.size(); i++) {
2 26 Feb 07 jari 542     if (!Float.isNaN(((Float) meanProfile.elementAt(i)).floatValue())) {
2 26 Feb 07 jari 543         GraphPoint gp = new GraphPoint(i/* + 1*/, ((Float) meanProfile.elementAt(i)).floatValue(), Color.red, 5);
2 26 Feb 07 jari 544         profileDisplayPanel.addGraphElement(gp);
2 26 Feb 07 jari 545     }
2 26 Feb 07 jari 546       }
2 26 Feb 07 jari 547       
2 26 Feb 07 jari 548       for (int i = 0; i < meanProfile.size() - 1; i++) {
2 26 Feb 07 jari 549     GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) meanProfile.elementAt(i)).floatValue(),
2 26 Feb 07 jari 550     i + 1, ((Float) meanProfile.elementAt(i + 1)).floatValue(), Color.blue);
2 26 Feb 07 jari 551     profileDisplayPanel.addGraphElement(gl);
2 26 Feb 07 jari 552       }
2 26 Feb 07 jari 553       
2 26 Feb 07 jari 554       profileDisplayPanel.repaint();
2 26 Feb 07 jari 555   }
2 26 Feb 07 jari 556   
2 26 Feb 07 jari 557   
2 26 Feb 07 jari 558   Vector getMeanProfile(Vector genesInCluster) {
2 26 Feb 07 jari 559       Vector meanProfile = new Vector();
2 26 Feb 07 jari 560       float[][] geneMatrix = convertToFloatMatrix(genesInCluster);
2 26 Feb 07 jari 561       
2 26 Feb 07 jari 562       float[] meanArray;
2 26 Feb 07 jari 563       
2 26 Feb 07 jari 564       for (int i = 0; i < geneMatrix[0].length; i++){
2 26 Feb 07 jari 565     float sum = 0;
2 26 Feb 07 jari 566     
2 26 Feb 07 jari 567     for (int j = 0; j < geneMatrix.length; j++){
2 26 Feb 07 jari 568         if (!Float.isNaN(geneMatrix[j][i]))
2 26 Feb 07 jari 569       sum += geneMatrix[j][i];
2 26 Feb 07 jari 570     }
2 26 Feb 07 jari 571     
2 26 Feb 07 jari 572     float mean = sum / geneMatrix.length;
2 26 Feb 07 jari 573     meanProfile.add(new Float(mean));
2 26 Feb 07 jari 574       }
2 26 Feb 07 jari 575       
2 26 Feb 07 jari 576       return meanProfile;
2 26 Feb 07 jari 577   }
2 26 Feb 07 jari 578   
2 26 Feb 07 jari 579   
2 26 Feb 07 jari 580   
2 26 Feb 07 jari 581   float[][] convertToFloatMatrix(Vector geneCluster) {
2 26 Feb 07 jari 582       float[][] matrix = new float[geneCluster.size()][];
2 26 Feb 07 jari 583       
2 26 Feb 07 jari 584       for (int i = 0; i < geneCluster.size(); i++) {
2 26 Feb 07 jari 585     Vector currentGene = (Vector) ((Vector) geneCluster.get(i)).clone();
2 26 Feb 07 jari 586     matrix[i] = new float[currentGene.size()];
2 26 Feb 07 jari 587     for (int j = 0; j < currentGene.size(); j++) {
2 26 Feb 07 jari 588         matrix[i][j] = ((Float)currentGene.get(j)).floatValue();
2 26 Feb 07 jari 589     }
2 26 Feb 07 jari 590       }
2 26 Feb 07 jari 591       
2 26 Feb 07 jari 592       return matrix;
2 26 Feb 07 jari 593   }
2 26 Feb 07 jari 594   
2 26 Feb 07 jari 595     }
2 26 Feb 07 jari 596     
2 26 Feb 07 jari 597     
2 26 Feb 07 jari 598     class AbsolutePanel extends JPanel {
2 26 Feb 07 jari 599   
2 26 Feb 07 jari 600   JCheckBox absBox;
2 26 Feb 07 jari 601   JLabel absLabel1;
2 26 Feb 07 jari 602   JLabel absLabel2;
2 26 Feb 07 jari 603   
2 26 Feb 07 jari 604   AbsolutePanel() {
2 26 Feb 07 jari 605       
2 26 Feb 07 jari 606       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 607       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 608       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 609       //constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 610       this.setLayout(gridbag);
2 26 Feb 07 jari 611       
2 26 Feb 07 jari 612       buildConstraints(constraints, 0, 0, 1, 2, 30, 0);
2 26 Feb 07 jari 613       absBox = new JCheckBox("Match to Absolute R?");
2 26 Feb 07 jari 614       gridbag.setConstraints(absBox, constraints);
2 26 Feb 07 jari 615       this.add(absBox);
2 26 Feb 07 jari 616       
2 26 Feb 07 jari 617       buildConstraints(constraints, 1, 0, 1, 1, 70, 50);
2 26 Feb 07 jari 618       absLabel1 = new JLabel("Yes: both +vely and -vely correlated expression profiles will be matched");
2 26 Feb 07 jari 619       constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 620       gridbag.setConstraints(absLabel1, constraints);
2 26 Feb 07 jari 621       this.add(absLabel1);
2 26 Feb 07 jari 622       
2 26 Feb 07 jari 623       buildConstraints(constraints, 1, 1, 1, 1, 0, 50);
2 26 Feb 07 jari 624       absLabel2 = new JLabel("No: only +vely correlated expression profiles will be matched");
2 26 Feb 07 jari 625       constraints.anchor = GridBagConstraints.NORTHWEST;
2 26 Feb 07 jari 626       gridbag.setConstraints(absLabel2, constraints);
2 26 Feb 07 jari 627       this.add(absLabel2);
2 26 Feb 07 jari 628       
2 26 Feb 07 jari 629   }
2 26 Feb 07 jari 630   
2 26 Feb 07 jari 631     }
2 26 Feb 07 jari 632     
2 26 Feb 07 jari 633     
2 26 Feb 07 jari 634     class SavedTemplateSelector extends JPanel{
2 26 Feb 07 jari 635   JList templateList;
2 26 Feb 07 jari 636   GraphCanvas profileDisplayPanel;
2 26 Feb 07 jari 637   JScrollPane listScrollPane;
2 26 Feb 07 jari 638   JButton selectButton;
2 26 Feb 07 jari 639   JButton loadButton;
2 26 Feb 07 jari 640   Vector templatesVector = new Vector();
2 26 Feb 07 jari 641   DefaultListModel listModel;
2 26 Feb 07 jari 642   
2 26 Feb 07 jari 643   Vector templates;
2 26 Feb 07 jari 644   
2 26 Feb 07 jari 645   JSplitPane templateSplitPane;
2 26 Feb 07 jari 646   JPanel templateButtonPanel;
2 26 Feb 07 jari 647   
2 26 Feb 07 jari 648   SavedTemplateSelector() {
2 26 Feb 07 jari 649       
2 26 Feb 07 jari 650       /*
2 26 Feb 07 jari 651        
2 26 Feb 07 jari 652       listModel = new DefaultListModel();
2 26 Feb 07 jari 653        
2 26 Feb 07 jari 654       //
2 26 Feb 07 jari 655       //templates = new Vector();
2 26 Feb 07 jari 656       //for(int i = 0; i < templateArray.length; i++) {
2 26 Feb 07 jari 657       //  templates.add(templateArray[i]);
2 26 Feb 07 jari 658       //}
2 26 Feb 07 jari 659       //
2 26 Feb 07 jari 660        
2 26 Feb 07 jari 661       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 662       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 663       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 664       this.setLayout(gridbag);
2 26 Feb 07 jari 665        
2 26 Feb 07 jari 666       templateList = new JList(listModel);
2 26 Feb 07 jari 667       templateList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
2 26 Feb 07 jari 668       templateList.setSelectedIndex(0);
2 26 Feb 07 jari 669        
2 26 Feb 07 jari 670           //AIS -- Use the graph classes
2 26 Feb 07 jari 671       profileDisplayPanel = new GraphCanvas();
2 26 Feb 07 jari 672       profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);
2 26 Feb 07 jari 673       profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);
2 26 Feb 07 jari 674       profileDisplayPanel.setXAxisValue(0);
2 26 Feb 07 jari 675       profileDisplayPanel.setYAxisValue(0);
2 26 Feb 07 jari 676        
2 26 Feb 07 jari 677       templateList.addListSelectionListener(new ListSelectionListener(){
2 26 Feb 07 jari 678           public void valueChanged(ListSelectionEvent e) {
2 26 Feb 07 jari 679           refreshGraph();
2 26 Feb 07 jari 680         }
2 26 Feb 07 jari 681       });
2 26 Feb 07 jari 682             //-- AIS
2 26 Feb 07 jari 683        
2 26 Feb 07 jari 684     //uniqueIDList.addListSelectionListener(new listSelectionListener(){}); //IMPLEMENT THIS LATER
2 26 Feb 07 jari 685        
2 26 Feb 07 jari 686       listScrollPane = new JScrollPane(templateList);
2 26 Feb 07 jari 687        
2 26 Feb 07 jari 688       //profileDisplayPanel = new JPanel();
2 26 Feb 07 jari 689       templateSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);
2 26 Feb 07 jari 690       templateSplitPane.setOneTouchExpandable(true);
2 26 Feb 07 jari 691       templateSplitPane.setDividerLocation(200);
2 26 Feb 07 jari 692        
2 26 Feb 07 jari 693       Dimension minimumSize = new Dimension(100,50);
2 26 Feb 07 jari 694       templateList.setMinimumSize(minimumSize);
2 26 Feb 07 jari 695       profileDisplayPanel.setMinimumSize(minimumSize);
2 26 Feb 07 jari 696        
2 26 Feb 07 jari 697       //templateSplitPane.setPreferredSize(new Dimension(700,150));
2 26 Feb 07 jari 698        
2 26 Feb 07 jari 699       buildConstraints(constraints, 0, 0, 1, 1, 1, 80);
2 26 Feb 07 jari 700       gridbag.setConstraints(templateSplitPane, constraints);
2 26 Feb 07 jari 701       this.add(templateSplitPane);
2 26 Feb 07 jari 702        
2 26 Feb 07 jari 703        
2 26 Feb 07 jari 704       //buildConstraints(constraints, 0, 1, 1, 1, 50, 20);
2 26 Feb 07 jari 705       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 706       //constraints.anchor = GridBagConstraints.SOUTH;
2 26 Feb 07 jari 707       loadButton = new JButton("Load saved template(s) from file");
2 26 Feb 07 jari 708       loadButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 709         public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 710           if (evt.getSource() == loadButton) {
2 26 Feb 07 jari 711             JFileChooser fc = new JFileChooser(System.getProperty("user.dir"));
2 26 Feb 07 jari 712             fc.setCurrentDirectory(new File(fc.getCurrentDirectory().getParentFile(), "Data"));
2 26 Feb 07 jari 713        
2 26 Feb 07 jari 714             int returnVal = fc.showOpenDialog(SavedTemplateSelector.this);
2 26 Feb 07 jari 715             if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 716               listModel.removeAllElements();
2 26 Feb 07 jari 717               File file = fc.getSelectedFile();
2 26 Feb 07 jari 718               try {
2 26 Feb 07 jari 719                 DataInputStream in = new DataInputStream(new FileInputStream(file.getName()));
2 26 Feb 07 jari 720                 try {
2 26 Feb 07 jari 721                   //*****READING OF INPUT DATA TAKES PLACE IN THIS BLOCK
2 26 Feb 07 jari 722                   templatesVector = new Vector();
2 26 Feb 07 jari 723                   int index = 0;
2 26 Feb 07 jari 724                   while (true) {
2 26 Feb 07 jari 725                     Vector currentTemplate = new Vector();
2 26 Feb 07 jari 726                     System.out.println("Template " + index);
2 26 Feb 07 jari 727                     for(int i = 0; i < tempPanel.tempScr.tempGrid.length; i++) {
2 26 Feb 07 jari 728                       float f = in.readFloat();
2 26 Feb 07 jari 729                       System.out.println("" + f);
2 26 Feb 07 jari 730                       currentTemplate.add(new Float(f));
2 26 Feb 07 jari 731                     }
2 26 Feb 07 jari 732                     templatesVector.add(currentTemplate);
2 26 Feb 07 jari 733                     listModel.addElement("Template" + (index+1));
2 26 Feb 07 jari 734                     index++;
2 26 Feb 07 jari 735                   }
2 26 Feb 07 jari 736        
2 26 Feb 07 jari 737                 } catch (EOFException exc) {
2 26 Feb 07 jari 738                   in.close();
2 26 Feb 07 jari 739                 }
2 26 Feb 07 jari 740               } catch (IOException e){
2 26 Feb 07 jari 741                 System.out.println("Error: " + e.toString());
2 26 Feb 07 jari 742                 JOptionPane.showMessageDialog(null, e.toString());
2 26 Feb 07 jari 743               }
2 26 Feb 07 jari 744             }
2 26 Feb 07 jari 745           }
2 26 Feb 07 jari 746         }
2 26 Feb 07 jari 747       });
2 26 Feb 07 jari 748       //gridbag.setConstraints(loadButton, constraints);
2 26 Feb 07 jari 749       //this.add(loadButton);
2 26 Feb 07 jari 750        
2 26 Feb 07 jari 751       //buildConstraints(constraints, 1, 1, 1, 1, 50, 0);
2 26 Feb 07 jari 752       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 753       //constraints.anchor = GridBagConstraints.SOUTH;
2 26 Feb 07 jari 754       selectButton = new JButton("Select saved template from above list");
2 26 Feb 07 jari 755       selectButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 756        
2 26 Feb 07 jari 757         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 758               if (listModel.size() == 0){
2 26 Feb 07 jari 759                 JOptionPane.showMessageDialog(null, "No templates to select");
2 26 Feb 07 jari 760               } else {
2 26 Feb 07 jari 761                 int index = templateList.getSelectedIndex();
2 26 Feb 07 jari 762                 Vector expProfile = (Vector) ((Vector) templatesVector.get(index)).clone();
2 26 Feb 07 jari 763        
2 26 Feb 07 jari 764                 /*
2 26 Feb 07 jari 765                 float max = getMax(expProfile);
2 26 Feb 07 jari 766                 float min = getMin(expProfile);
2 26 Feb 07 jari 767        
2 26 Feb 07 jari 768                 if ((max - min) == 0) {
2 26 Feb 07 jari 769        
2 26 Feb 07 jari 770                   for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 771                     expProfile.set(i, new Float(0.5));
2 26 Feb 07 jari 772                   }
2 26 Feb 07 jari 773        
2 26 Feb 07 jari 774                 } else {
2 26 Feb 07 jari 775        
2 26 Feb 07 jari 776                   for(int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 777                     float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);
2 26 Feb 07 jari 778                     expProfile.set(i, new Float(f));
2 26 Feb 07 jari 779                   }
2 26 Feb 07 jari 780                 }
2 26 Feb 07 jari 781                 //
2 26 Feb 07 jari 782        
2 26 Feb 07 jari 783                 for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){
2 26 Feb 07 jari 784                   tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));
2 26 Feb 07 jari 785                   tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());
2 26 Feb 07 jari 786                 }
2 26 Feb 07 jari 787               }
2 26 Feb 07 jari 788             }
2 26 Feb 07 jari 789        
2 26 Feb 07 jari 790           });
2 26 Feb 07 jari 791       //gridbag.setConstraints(selectButton, constraints);
2 26 Feb 07 jari 792       //this.add(selectButton);
2 26 Feb 07 jari 793       buildConstraints(constraints, 0, 1, 1, 1, 0, 20);
2 26 Feb 07 jari 794        
2 26 Feb 07 jari 795       templateButtonPanel.add(loadButton);
2 26 Feb 07 jari 796       templateButtonPanel.add(selectButton);
2 26 Feb 07 jari 797       gridbag.setConstraints(templateButtonPanel, constraints);
2 26 Feb 07 jari 798       this.add(templateButtonPanel);
2 26 Feb 07 jari 799       refreshGraph();
2 26 Feb 07 jari 800        */
2 26 Feb 07 jari 801   }
2 26 Feb 07 jari 802   
2 26 Feb 07 jari 803   private void refreshGraph() {
2 26 Feb 07 jari 804       
2 26 Feb 07 jari 805       int index = templateList.getSelectedIndex();
2 26 Feb 07 jari 806       if (index < 0) return;
2 26 Feb 07 jari 807       Vector expProfile = (Vector) ((Vector) templatesVector.get(index)).clone();
2 26 Feb 07 jari 808       
2 26 Feb 07 jari 809       profileDisplayPanel.removeAllGraphElements();
2 26 Feb 07 jari 810       for (int i = 0; i < expProfile.size(); i++) {
2 26 Feb 07 jari 811     GraphPoint gp = new GraphPoint(i + 1, ((Float) expProfile.elementAt(i)).floatValue(), Color.red, 2);
2 26 Feb 07 jari 812     profileDisplayPanel.addGraphElement(gp);
2 26 Feb 07 jari 813       }
2 26 Feb 07 jari 814       
2 26 Feb 07 jari 815       for (int i = 0; i < expProfile.size() - 1; i++) {
2 26 Feb 07 jari 816     GraphLine gl = new GraphLine(i + 1, ((Float) expProfile.elementAt(i)).floatValue(),
2 26 Feb 07 jari 817     i + 2, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.blue);
2 26 Feb 07 jari 818     profileDisplayPanel.addGraphElement(gl);
2 26 Feb 07 jari 819       }
2 26 Feb 07 jari 820       
2 26 Feb 07 jari 821       profileDisplayPanel.repaint();
2 26 Feb 07 jari 822   }
2 26 Feb 07 jari 823   
2 26 Feb 07 jari 824   
2 26 Feb 07 jari 825     }
2 26 Feb 07 jari 826     
2 26 Feb 07 jari 827     
2 26 Feb 07 jari 828     
2 26 Feb 07 jari 829     class ThresholdPanel extends JPanel {
2 26 Feb 07 jari 830   
2 26 Feb 07 jari 831   JLabel threshLabel1;
2 26 Feb 07 jari 832   JLabel threshLabel2;
2 26 Feb 07 jari 833   JTextField threshInputField;
2 26 Feb 07 jari 834   JRadioButton chooseR;
2 26 Feb 07 jari 835   JRadioButton chooseP;
2 26 Feb 07 jari 836   
2 26 Feb 07 jari 837   ThresholdPanel() {
2 26 Feb 07 jari 838       
2 26 Feb 07 jari 839       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 840       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 841       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 842       
2 26 Feb 07 jari 843       this.setLayout(gridbag);
2 26 Feb 07 jari 844       
2 26 Feb 07 jari 845       ButtonGroup chooseRorP = new ButtonGroup();
2 26 Feb 07 jari 846       chooseR = new JRadioButton("Use Threshold R",false);
2 26 Feb 07 jari 847       chooseRorP.add(chooseR);
2 26 Feb 07 jari 848       chooseP = new JRadioButton("Use Threshold p-Value",true);
2 26 Feb 07 jari 849       chooseRorP.add(chooseP);
2 26 Feb 07 jari 850       
2 26 Feb 07 jari 851       buildConstraints(constraints, 0, 0, 1, 1, 10, 50);
2 26 Feb 07 jari 852       constraints.anchor = GridBagConstraints.SOUTHWEST;
2 26 Feb 07 jari 853       //constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 854       gridbag.setConstraints(chooseR, constraints);
2 26 Feb 07 jari 855       this.add(chooseR);
2 26 Feb 07 jari 856       
2 26 Feb 07 jari 857       buildConstraints(constraints, 0, 1, 1, 1, 0, 50);
2 26 Feb 07 jari 858       constraints.anchor = GridBagConstraints.NORTHWEST;
2 26 Feb 07 jari 859       gridbag.setConstraints(chooseP, constraints);
2 26 Feb 07 jari 860       this.add(chooseP);
2 26 Feb 07 jari 861       
2 26 Feb 07 jari 862       buildConstraints(constraints, 1, 0, 1, 1, 80, 0);
2 26 Feb 07 jari 863       constraints.anchor = GridBagConstraints.SOUTHWEST;
2 26 Feb 07 jari 864       threshLabel1 = new JLabel("Enter magnitude of threshold R or p-Value (between 0 and 1 inclusive)");
2 26 Feb 07 jari 865       gridbag.setConstraints(threshLabel1, constraints);
2 26 Feb 07 jari 866       this.add(threshLabel1);
2 26 Feb 07 jari 867       
2 26 Feb 07 jari 868       buildConstraints(constraints, 1, 1, 1, 1, 0, 0);
2 26 Feb 07 jari 869       constraints.anchor = GridBagConstraints.NORTHWEST;
2 26 Feb 07 jari 870       threshLabel2 = new JLabel("at which selected profiles should be correlated to template");
2 26 Feb 07 jari 871       gridbag.setConstraints(threshLabel2, constraints);
2 26 Feb 07 jari 872       this.add(threshLabel2);
2 26 Feb 07 jari 873       
2 26 Feb 07 jari 874       buildConstraints(constraints, 2, 0, 1, 2, 10, 0);
2 26 Feb 07 jari 875       constraints.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 876       //constraints.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 877       //threshInputField = new JTextField("0.80",7);
2 26 Feb 07 jari 878       threshInputField = new JTextField("", 7);
2 26 Feb 07 jari 879       threshInputField.addActionListener(new ActionListener(){
2 26 Feb 07 jari 880     public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 881         
2 26 Feb 07 jari 882         if(evt.getSource() == threshInputField){
2 26 Feb 07 jari 883       try {
2 26 Feb 07 jari 884                             
2 26 Feb 07 jari 885                             System.out.println("in gene dialog, ptm");
2 26 Feb 07 jari 886           String s = threshInputField.getText();
2 26 Feb 07 jari 887           double r = Double.parseDouble(s);
2 26 Feb 07 jari 888           
2 26 Feb 07 jari 889           if ((r > 1)||(r < 0)) {
2 26 Feb 07 jari 890         JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 891         threshInputField.setText("");
2 26 Feb 07 jari 892           }
2 26 Feb 07 jari 893       } catch (Exception exc) {
2 26 Feb 07 jari 894           JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 895           threshInputField.setText("");
2 26 Feb 07 jari 896       }
2 26 Feb 07 jari 897       
2 26 Feb 07 jari 898         }
2 26 Feb 07 jari 899         
2 26 Feb 07 jari 900     }
2 26 Feb 07 jari 901       });
2 26 Feb 07 jari 902       
2 26 Feb 07 jari 903       gridbag.setConstraints(threshInputField, constraints);
2 26 Feb 07 jari 904       this.add(threshInputField);
2 26 Feb 07 jari 905       
2 26 Feb 07 jari 906   }
2 26 Feb 07 jari 907   
2 26 Feb 07 jari 908     }
2 26 Feb 07 jari 909     
2 26 Feb 07 jari 910     
2 26 Feb 07 jari 911     class BottomPanel extends JPanel {
2 26 Feb 07 jari 912   
2 26 Feb 07 jari 913   JButton resetButton;
2 26 Feb 07 jari 914   JButton okButton;
2 26 Feb 07 jari 915   JButton cancelButton;
2 26 Feb 07 jari 916   JButton saveButton;
2 26 Feb 07 jari 917   
2 26 Feb 07 jari 918   BottomPanel() {
2 26 Feb 07 jari 919       
2 26 Feb 07 jari 920       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 921       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 922       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 923       this.setLayout(gridbag);
2 26 Feb 07 jari 924       
2 26 Feb 07 jari 925       buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 926       saveButton = new JButton("Save template to file");
2 26 Feb 07 jari 927       gridbag.setConstraints(saveButton, constraints);
2 26 Feb 07 jari 928       saveButton.setEnabled(false);
2 26 Feb 07 jari 929       this.add(saveButton);
2 26 Feb 07 jari 930       saveButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 931     public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 932         if (evt.getSource() == saveButton) {
2 26 Feb 07 jari 933       JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));
2 26 Feb 07 jari 934       
2 26 Feb 07 jari 935       int returnVal = fc.showSaveDialog(BottomPanel.this);
2 26 Feb 07 jari 936       if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 937           File file = fc.getSelectedFile();
2 26 Feb 07 jari 938           try {
2 26 Feb 07 jari 939         DataOutputStream templateData = new DataOutputStream(new FileOutputStream(file.getName(), true));
2 26 Feb 07 jari 940         for(int i = 0; i < tempPanel.tempScr.tempGrid.length; i++) {
2 26 Feb 07 jari 941             String s = tempPanel.tempScr.tempGrid[i].templateField.getText();
2 26 Feb 07 jari 942             float f = Float.parseFloat(s);
2 26 Feb 07 jari 943             templateData.writeFloat(f);
2 26 Feb 07 jari 944             
2 26 Feb 07 jari 945         }
2 26 Feb 07 jari 946         
2 26 Feb 07 jari 947         templateData.close();
2 26 Feb 07 jari 948           } catch (IOException e) {
2 26 Feb 07 jari 949         System.out.println("Error: " + e.toString());
2 26 Feb 07 jari 950           }
2 26 Feb 07 jari 951       }
2 26 Feb 07 jari 952         }
2 26 Feb 07 jari 953     }
2 26 Feb 07 jari 954       });
2 26 Feb 07 jari 955       
2 26 Feb 07 jari 956       
2 26 Feb 07 jari 957       buildConstraints(constraints, 0, 1, 1, 1, 100, 100);
2 26 Feb 07 jari 958       resetButton = new JButton("Reset");
2 26 Feb 07 jari 959       resetButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 960     public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 961         if (evt.getSource() == resetButton) {
2 26 Feb 07 jari 962       for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){
2 26 Feb 07 jari 963           tempPanel.tempScr.tempGrid[i].reset();
2 26 Feb 07 jari 964       }
2 26 Feb 07 jari 965       
2 26 Feb 07 jari 966       thresh.threshInputField.setText("");
2 26 Feb 07 jari 967       abs.absBox.setSelected(false);
2 26 Feb 07 jari 968         }
2 26 Feb 07 jari 969     }
2 26 Feb 07 jari 970     
2 26 Feb 07 jari 971       });
2 26 Feb 07 jari 972       
2 26 Feb 07 jari 973       gridbag.setConstraints(resetButton, constraints);
2 26 Feb 07 jari 974       this.add(resetButton);
2 26 Feb 07 jari 975       
2 26 Feb 07 jari 976       
2 26 Feb 07 jari 977       buildConstraints(constraints, 0, 2, 1, 1, 100, 100);
2 26 Feb 07 jari 978       okButton = new JButton("OK");
2 26 Feb 07 jari 979       okButton.addActionListener(new EventListener());
2 26 Feb 07 jari 980       
2 26 Feb 07 jari 981       
2 26 Feb 07 jari 982       gridbag.setConstraints(okButton, constraints);
2 26 Feb 07 jari 983       this.add(okButton);
2 26 Feb 07 jari 984       
2 26 Feb 07 jari 985       buildConstraints(constraints, 0, 3, 1, 1, 100, 100);
2 26 Feb 07 jari 986       cancelButton = new JButton("Cancel");
2 26 Feb 07 jari 987       gridbag.setConstraints(cancelButton, constraints);
2 26 Feb 07 jari 988       this.add(cancelButton);
2 26 Feb 07 jari 989       
2 26 Feb 07 jari 990   }
2 26 Feb 07 jari 991     }
2 26 Feb 07 jari 992     
2 26 Feb 07 jari 993     
2 26 Feb 07 jari 994     class TemplatePanel extends JPanel {
2 26 Feb 07 jari 995   
2 26 Feb 07 jari 996   TemplateScroller tempScr;
2 26 Feb 07 jari 997   
2 26 Feb 07 jari 998   TemplatePanel() {
2 26 Feb 07 jari 999       GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 1000       GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 1001       constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 1002       this.setLayout(gridbag);
2 26 Feb 07 jari 1003       
2 26 Feb 07 jari 1004       tempScr = new TemplateScroller();
2 26 Feb 07 jari 1005       JScrollPane scroller = tempScr.createTemplateScroller();
2 26 Feb 07 jari 1006       buildConstraints(constraints, 0, 0, 1, 1, 100, 95);
2 26 Feb 07 jari 1007       gridbag.setConstraints(scroller, constraints);
2 26 Feb 07 jari 1008       this.add(scroller);
2 26 Feb 07 jari 1009       
2 26 Feb 07 jari 1010       buildConstraints(constraints, 0, 1, 1, 1, 100, 5);
2 26 Feb 07 jari 1011       constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 1012       
2 26 Feb 07 jari 1013   }
2 26 Feb 07 jari 1014   
2 26 Feb 07 jari 1015   
2 26 Feb 07 jari 1016   
2 26 Feb 07 jari 1017   class TemplateScroller extends JPanel {
2 26 Feb 07 jari 1018       
2 26 Feb 07 jari 1019       TemplateElementGrid[] tempGrid = new TemplateElementGrid[SampleNames.length];
2 26 Feb 07 jari 1020       
2 26 Feb 07 jari 1021       JScrollPane createTemplateScroller() {
2 26 Feb 07 jari 1022     GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 1023     GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 1024     constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 1025     this.setLayout(gridbag);
2 26 Feb 07 jari 1026     
2 26 Feb 07 jari 1027     for (int i = 0; i < SampleNames.length; i++) {
2 26 Feb 07 jari 1028         tempGrid[i] = new TemplateElementGrid(SampleNames[i]);
2 26 Feb 07 jari 1029         buildConstraints(constraints, i, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 1030         gridbag.setConstraints(tempGrid[i], constraints);
2 26 Feb 07 jari 1031         this.add(tempGrid[i]);
2 26 Feb 07 jari 1032     }
2 26 Feb 07 jari 1033     
2 26 Feb 07 jari 1034     JScrollPane scroller = new JScrollPane(this);
2 26 Feb 07 jari 1035     scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
2 26 Feb 07 jari 1036     scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
2 26 Feb 07 jari 1037     return scroller;
2 26 Feb 07 jari 1038       }
2 26 Feb 07 jari 1039       
2 26 Feb 07 jari 1040       
2 26 Feb 07 jari 1041       
2 26 Feb 07 jari 1042       class TemplateElementGrid extends JPanel {
2 26 Feb 07 jari 1043     
2 26 Feb 07 jari 1044     JLabel exptName;
2 26 Feb 07 jari 1045     JTextField templateField;
2 26 Feb 07 jari 1046     JSlider templateSlider;
2 26 Feb 07 jari 1047     JCheckBox activeBox;
2 26 Feb 07 jari 1048     
2 26 Feb 07 jari 1049     TemplateElementGrid(String SampleName) {
2 26 Feb 07 jari 1050         GridBagLayout templateElement = new GridBagLayout();
2 26 Feb 07 jari 1051         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 1052         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 1053         this.setLayout(templateElement);
2 26 Feb 07 jari 1054         
2 26 Feb 07 jari 1055         buildConstraints(constraints, 0, 0, 1, 1, 50, 10);
2 26 Feb 07 jari 1056         exptName = new JLabel(SampleName, SwingConstants.CENTER);
2 26 Feb 07 jari 1057         templateElement.setConstraints(exptName, constraints);
2 26 Feb 07 jari 1058         this.add(exptName);
2 26 Feb 07 jari 1059         
2 26 Feb 07 jari 1060         buildConstraints(constraints, 1, 0, 1, 1, 50, 0);
2 26 Feb 07 jari 1061         activeBox = new JCheckBox();
2 26 Feb 07 jari 1062         activeBox.setSelected(true);
2 26 Feb 07 jari 1063         activeBox.addItemListener(new ItemListener() {
2 26 Feb 07 jari 1064       public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 1065           if (e.getStateChange() == ItemEvent.DESELECTED) {
2 26 Feb 07 jari 1066         //templateField.setText("NULL");
2 26 Feb 07 jari 1067         templateField.setBackground(Color.gray);
2 26 Feb 07 jari 1068         templateField.setEnabled(false);
2 26 Feb 07 jari 1069         templateSlider.setEnabled(false);
2 26 Feb 07 jari 1070           }
2 26 Feb 07 jari 1071           
2 26 Feb 07 jari 1072           if (e.getStateChange() == ItemEvent.SELECTED) {
2 26 Feb 07 jari 1073         //templateField.setText("NULL");
2 26 Feb 07 jari 1074         templateField.setBackground(Color.white);
2 26 Feb 07 jari 1075         templateField.setEnabled(true);
2 26 Feb 07 jari 1076         templateSlider.setEnabled(true);
2 26 Feb 07 jari 1077           }
2 26 Feb 07 jari 1078           
2 26 Feb 07 jari 1079       }
2 26 Feb 07 jari 1080         });
2 26 Feb 07 jari 1081         templateElement.setConstraints(activeBox, constraints);
2 26 Feb 07 jari 1082         this.add(activeBox);
2 26 Feb 07 jari 1083         
2 26 Feb 07 jari 1084         buildConstraints(constraints, 0, 1, 2, 1, 0, 5);
2 26 Feb 07 jari 1085         templateField = new JTextField("0.5", 4);
2 26 Feb 07 jari 1086         templateField.addActionListener(new ActionListener(){
2 26 Feb 07 jari 1087       public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 1088           int sliderValue;
2 26 Feb 07 jari 1089           if(e.getSource() == templateField){
2 26 Feb 07 jari 1090         try {
2 26 Feb 07 jari 1091             String s = templateField.getText();
2 26 Feb 07 jari 1092             double d = Double.parseDouble(s);
2 26 Feb 07 jari 1093             sliderValue = (int)Math.floor(d*100);
2 26 Feb 07 jari 1094             if ((d > 1)||(d < 0)) {
2 26 Feb 07 jari 1095           
2 26 Feb 07 jari 1096           sliderValue = 50;
2 26 Feb 07 jari 1097           templateField.setText("0.5");
2 26 Feb 07 jari 1098           JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1099           
2 26 Feb 07 jari 1100             }
2 26 Feb 07 jari 1101         } catch (Exception exc) {
2 26 Feb 07 jari 1102             
2 26 Feb 07 jari 1103             templateField.setText("0.5");
2 26 Feb 07 jari 1104             sliderValue = 50;
2 26 Feb 07 jari 1105             JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1106             
2 26 Feb 07 jari 1107         }
2 26 Feb 07 jari 1108         
2 26 Feb 07 jari 1109         templateSlider.setValue(sliderValue);
2 26 Feb 07 jari 1110           }
2 26 Feb 07 jari 1111           
2 26 Feb 07 jari 1112       }
2 26 Feb 07 jari 1113         });
2 26 Feb 07 jari 1114         
2 26 Feb 07 jari 1115         templateField.addFocusListener(new FocusListener(){
2 26 Feb 07 jari 1116       public void focusLost(FocusEvent e) {
2 26 Feb 07 jari 1117           int sliderValue;
2 26 Feb 07 jari 1118           if(e.getSource() == templateField){
2 26 Feb 07 jari 1119         try {
2 26 Feb 07 jari 1120             String s = templateField.getText();
2 26 Feb 07 jari 1121             double d = Double.parseDouble(s);
2 26 Feb 07 jari 1122             sliderValue = (int)Math.floor(d*100);
2 26 Feb 07 jari 1123             if ((d > 1)||(d < 0)) {
2 26 Feb 07 jari 1124           
2 26 Feb 07 jari 1125           sliderValue = 50;
2 26 Feb 07 jari 1126           templateField.setText("0.5");
2 26 Feb 07 jari 1127           JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1128           
2 26 Feb 07 jari 1129             }
2 26 Feb 07 jari 1130         } catch (Exception exc) {
2 26 Feb 07 jari 1131             
2 26 Feb 07 jari 1132             templateField.setText("0.5");
2 26 Feb 07 jari 1133             sliderValue = 50;
2 26 Feb 07 jari 1134             JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1135             
2 26 Feb 07 jari 1136         }
2 26 Feb 07 jari 1137         
2 26 Feb 07 jari 1138         templateSlider.setValue(sliderValue);
2 26 Feb 07 jari 1139           }
2 26 Feb 07 jari 1140       }
2 26 Feb 07 jari 1141       
2 26 Feb 07 jari 1142       
2 26 Feb 07 jari 1143       public void focusGained(FocusEvent e) {
2 26 Feb 07 jari 1144       }
2 26 Feb 07 jari 1145         });
2 26 Feb 07 jari 1146         
2 26 Feb 07 jari 1147         templateElement.setConstraints(templateField, constraints);
2 26 Feb 07 jari 1148         this.add(templateField);
2 26 Feb 07 jari 1149         
2 26 Feb 07 jari 1150         buildConstraints(constraints, 0, 2, 1, 2, 0, 85);
2 26 Feb 07 jari 1151         templateSlider = new JSlider(JSlider.VERTICAL, 0, 100, 50);
2 26 Feb 07 jari 1152         templateSlider.setMajorTickSpacing(20);
2 26 Feb 07 jari 1153         templateSlider.setMinorTickSpacing(10);
2 26 Feb 07 jari 1154         //templateSlider.setPaintTicks(true);
2 26 Feb 07 jari 1155         Hashtable labelTable = new Hashtable();
2 26 Feb 07 jari 1156         labelTable.put( new Integer( 0 ), new JLabel("Min") );
2 26 Feb 07 jari 1157         labelTable.put( new Integer( 100 ), new JLabel("Max") );
2 26 Feb 07 jari 1158         templateSlider.setLabelTable( labelTable );
2 26 Feb 07 jari 1159         templateSlider.setPaintLabels(true);
2 26 Feb 07 jari 1160         templateSlider.addChangeListener(new ChangeListener(){
2 26 Feb 07 jari 1161       public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 1162           JSlider source = (JSlider)e.getSource();
2 26 Feb 07 jari 1163           if (!source.getValueIsAdjusting()) {
2 26 Feb 07 jari 1164         int value = (int)source.getValue();
2 26 Feb 07 jari 1165         
2 26 Feb 07 jari 1166         if (value == 100) {
2 26 Feb 07 jari 1167             templateField.setText("1.0"); //CLUMSY WAY OF DISPLAYING INTEGER AS DOUBLE? MAYBE CHANGE?
2 26 Feb 07 jari 1168         } else if (value > 0 && value < 10) {
2 26 Feb 07 jari 1169             templateField.setText("0.0" + value);
2 26 Feb 07 jari 1170         } else {
2 26 Feb 07 jari 1171             templateField.setText("0." + value);
2 26 Feb 07 jari 1172         }
2 26 Feb 07 jari 1173           }
2 26 Feb 07 jari 1174       }
2 26 Feb 07 jari 1175       
2 26 Feb 07 jari 1176         });
2 26 Feb 07 jari 1177         templateElement.setConstraints(templateSlider, constraints);
2 26 Feb 07 jari 1178         this.add(templateSlider);
2 26 Feb 07 jari 1179         
2 26 Feb 07 jari 1180         
2 26 Feb 07 jari 1181     }
2 26 Feb 07 jari 1182     
2 26 Feb 07 jari 1183     
2 26 Feb 07 jari 1184     
2 26 Feb 07 jari 1185     public void reset() {
2 26 Feb 07 jari 1186         templateSlider.setValue(50);
2 26 Feb 07 jari 1187         templateField.setText("0.5");
2 26 Feb 07 jari 1188     }
2 26 Feb 07 jari 1189     
2 26 Feb 07 jari 1190     
2 26 Feb 07 jari 1191       }
2 26 Feb 07 jari 1192       
2 26 Feb 07 jari 1193       
2 26 Feb 07 jari 1194       
2 26 Feb 07 jari 1195   }
2 26 Feb 07 jari 1196   
2 26 Feb 07 jari 1197   
2 26 Feb 07 jari 1198     }
2 26 Feb 07 jari 1199     
2 26 Feb 07 jari 1200     
2 26 Feb 07 jari 1201     
2 26 Feb 07 jari 1202     public Vector getTemplate() {
2 26 Feb 07 jari 1203   Vector geneTemplate = new Vector();
2 26 Feb 07 jari 1204   
2 26 Feb 07 jari 1205   for(int i = 0; i < sampleNamesVector.size(); i++) {
2 26 Feb 07 jari 1206       String s = tempPanel.tempScr.tempGrid[i].templateField.getText();
2 26 Feb 07 jari 1207       if (s.equals("NaN")||(s.equals("NULL"))||(!(tempPanel.tempScr.tempGrid[i].activeBox.isSelected()))) {
2 26 Feb 07 jari 1208     geneTemplate.add(new Float(Float.NaN));
2 26 Feb 07 jari 1209       } else {
2 26 Feb 07 jari 1210     geneTemplate.add(new Float(s));
2 26 Feb 07 jari 1211       }
2 26 Feb 07 jari 1212   }
2 26 Feb 07 jari 1213   
2 26 Feb 07 jari 1214   return geneTemplate;
2 26 Feb 07 jari 1215     }
2 26 Feb 07 jari 1216     
2 26 Feb 07 jari 1217     
2 26 Feb 07 jari 1218     public FloatMatrix convertTemplateVectorToFloatMatrix() {
2 26 Feb 07 jari 1219   template = getTemplate();
2 26 Feb 07 jari 1220   FloatMatrix templateMatrix = new FloatMatrix(1, template.size());
2 26 Feb 07 jari 1221   for (int i = 0; i < template.size(); i++) {
2 26 Feb 07 jari 1222       templateMatrix.A[0][i] = ((Float) (template.get(i))).floatValue();
2 26 Feb 07 jari 1223   }
2 26 Feb 07 jari 1224   
2 26 Feb 07 jari 1225   return templateMatrix;
2 26 Feb 07 jari 1226     }
2 26 Feb 07 jari 1227     
2 26 Feb 07 jari 1228     
2 26 Feb 07 jari 1229     protected void fireOkButtonEvent() {
2 26 Feb 07 jari 1230   templateMatrix = convertTemplateVectorToFloatMatrix();
2 26 Feb 07 jari 1231   boolean absoluteSelected = abs.absBox.isSelected();
2 26 Feb 07 jari 1232   boolean drawTreesSelected = drawTreesBox.isSelected();
2 26 Feb 07 jari 1233   boolean rSelected = thresh.chooseR.isSelected();
2 26 Feb 07 jari 1234   String s = thresh.threshInputField.getText();
2 26 Feb 07 jari 1235   double threshR = Double.parseDouble(s);
2 26 Feb 07 jari 1236   
2 26 Feb 07 jari 1237   Hashtable hash = new Hashtable();
2 26 Feb 07 jari 1238   hash.put(new String("drawTrees"), new Boolean(drawTreesSelected)); //Should be a checkbox in the init dialog
2 26 Feb 07 jari 1239   hash.put(new String("useAbsolute"), new Boolean(absoluteSelected));
2 26 Feb 07 jari 1240   hash.put(new String("useR"), new Boolean(rSelected));
2 26 Feb 07 jari 1241   hash.put(new String("template"), template);
2 26 Feb 07 jari 1242   hash.put(new String("thresholdR"), new Double(threshR));
2 26 Feb 07 jari 1243   
2 26 Feb 07 jari 1244   //fireEvent(new ActionInfoEvent(this, hash));
2 26 Feb 07 jari 1245   
2 26 Feb 07 jari 1246     }
2 26 Feb 07 jari 1247     
2 26 Feb 07 jari 1248     public boolean isDrawTrees() {
2 26 Feb 07 jari 1249   return drawTreesBox.isSelected();
2 26 Feb 07 jari 1250     }
2 26 Feb 07 jari 1251     
2 26 Feb 07 jari 1252     public boolean isUseAbsolute() {
2 26 Feb 07 jari 1253   return abs.absBox.isSelected();
2 26 Feb 07 jari 1254     }
2 26 Feb 07 jari 1255     
2 26 Feb 07 jari 1256     public boolean isUseR() {
2 26 Feb 07 jari 1257   return thresh.chooseR.isSelected();
2 26 Feb 07 jari 1258     }
2 26 Feb 07 jari 1259     
2 26 Feb 07 jari 1260     public FloatMatrix getTemplateMatrix() {
2 26 Feb 07 jari 1261   return convertTemplateVectorToFloatMatrix();
2 26 Feb 07 jari 1262     }
2 26 Feb 07 jari 1263     
2 26 Feb 07 jari 1264     public double getThresholdR() {
2 26 Feb 07 jari 1265   return Double.parseDouble(thresh.threshInputField.getText());
2 26 Feb 07 jari 1266     }
2 26 Feb 07 jari 1267     
2 26 Feb 07 jari 1268     public boolean isOkPressed() {return this.okPressed;}
2 26 Feb 07 jari 1269     
2 26 Feb 07 jari 1270     protected class EventListener implements ActionListener {
2 26 Feb 07 jari 1271   
2 26 Feb 07 jari 1272   public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 1273       
2 26 Feb 07 jari 1274       Object source = event.getSource();
2 26 Feb 07 jari 1275       
2 26 Feb 07 jari 1276       if (source == bott.okButton) {
2 26 Feb 07 jari 1277     try {
2 26 Feb 07 jari 1278         String s = thresh.threshInputField.getText();
2 26 Feb 07 jari 1279         double r = Double.parseDouble(s);
2 26 Feb 07 jari 1280         
2 26 Feb 07 jari 1281         if ((r > 1)||(r < 0)) {
2 26 Feb 07 jari 1282       JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1283       thresh.threshInputField.setText("0.80");
2 26 Feb 07 jari 1284         }
2 26 Feb 07 jari 1285         else {
2 26 Feb 07 jari 1286       setVisible(false);
2 26 Feb 07 jari 1287       fireOkButtonEvent();
2 26 Feb 07 jari 1288       okPressed = true;
2 26 Feb 07 jari 1289       //dispose();
2 26 Feb 07 jari 1290         }
2 26 Feb 07 jari 1291         
2 26 Feb 07 jari 1292     } catch (Exception exc) {
2 26 Feb 07 jari 1293         //exc.printStackTrace();
2 26 Feb 07 jari 1294         JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");
2 26 Feb 07 jari 1295         thresh.threshInputField.setText("0.80");
2 26 Feb 07 jari 1296     }
2 26 Feb 07 jari 1297     
2 26 Feb 07 jari 1298     
2 26 Feb 07 jari 1299     
2 26 Feb 07 jari 1300       }
2 26 Feb 07 jari 1301   }
2 26 Feb 07 jari 1302     }
2 26 Feb 07 jari 1303     
2 26 Feb 07 jari 1304     
2 26 Feb 07 jari 1305 }