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

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /* 
2 26 Feb 07 jari 2 Copyright @ 1999-2006, 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: PTMInitDialog.java,v $ 
2 26 Feb 07 jari 7  * $Revision: 1.7 $ 
2 26 Feb 07 jari 8  * $Date: 2006/02/24 16:15:29 $ 
2 26 Feb 07 jari 9  * $Author: wwang67 $ 
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.Insets;
2 26 Feb 07 jari 19 import java.awt.Toolkit;
2 26 Feb 07 jari 20 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 21 import java.awt.event.ActionListener;
2 26 Feb 07 jari 22 import java.awt.event.FocusEvent;
2 26 Feb 07 jari 23 import java.awt.event.FocusListener;
2 26 Feb 07 jari 24 import java.awt.event.ItemEvent;
2 26 Feb 07 jari 25 import java.awt.event.ItemListener;
2 26 Feb 07 jari 26 import java.io.BufferedReader;
2 26 Feb 07 jari 27 import java.io.BufferedWriter;
2 26 Feb 07 jari 28 import java.io.EOFException;
2 26 Feb 07 jari 29 import java.io.File;
2 26 Feb 07 jari 30 import java.io.FileWriter;
2 26 Feb 07 jari 31 import java.io.IOException;
2 26 Feb 07 jari 32 import java.util.Hashtable;
2 26 Feb 07 jari 33 import java.util.Vector;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 import javax.swing.BorderFactory;
2 26 Feb 07 jari 36 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 37 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 38 import javax.swing.JButton;
2 26 Feb 07 jari 39 import javax.swing.JCheckBox;
2 26 Feb 07 jari 40 import javax.swing.JFileChooser;
2 26 Feb 07 jari 41 import javax.swing.JFrame;
2 26 Feb 07 jari 42 import javax.swing.JLabel;
2 26 Feb 07 jari 43 import javax.swing.JList;
2 26 Feb 07 jari 44 import javax.swing.JOptionPane;
2 26 Feb 07 jari 45 import javax.swing.JPanel;
2 26 Feb 07 jari 46 import javax.swing.JRadioButton;
2 26 Feb 07 jari 47 import javax.swing.JScrollPane;
2 26 Feb 07 jari 48 import javax.swing.JSlider;
2 26 Feb 07 jari 49 import javax.swing.JSplitPane;
2 26 Feb 07 jari 50 import javax.swing.JTabbedPane;
2 26 Feb 07 jari 51 import javax.swing.JTextField;
2 26 Feb 07 jari 52 import javax.swing.ListSelectionModel;
2 26 Feb 07 jari 53 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 54 import javax.swing.SwingConstants;
2 26 Feb 07 jari 55 import javax.swing.border.BevelBorder;
2 26 Feb 07 jari 56 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 57 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 58 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 59 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 60 import javax.swing.event.ListSelectionListener;
2 26 Feb 07 jari 61
2 26 Feb 07 jari 62 import org.tigr.graph.GraphCanvas;
2 26 Feb 07 jari 63 import org.tigr.graph.GraphLine;
2 26 Feb 07 jari 64 import org.tigr.graph.GraphPoint;
2 26 Feb 07 jari 65 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 66 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 67 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog;
2 26 Feb 07 jari 68 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.dialogHelpUtil.HelpWindow;
2 26 Feb 07 jari 69 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 70
2 26 Feb 07 jari 71
2 26 Feb 07 jari 72 public class PTMInitDialog extends AlgorithmDialog {   
2 26 Feb 07 jari 73   
2 26 Feb 07 jari 74     String[] SampleNames;   
2 26 Feb 07 jari 75     Vector sampleNamesVector;    
2 26 Feb 07 jari 76     Vector uniqueIDs;    
2 26 Feb 07 jari 77     Vector clusters; //THIS IS A VECTOR OF VECTORS (EACH SUB-VECTOR CONTAINS THE INDICES OF UNIQUEIDS IN THAT CLUSTER)    
2 26 Feb 07 jari 78     Vector expClusters;    
2 26 Feb 07 jari 79     Color[] clusterColors;    
2 26 Feb 07 jari 80     Color[] expClusterColors;    
2 26 Feb 07 jari 81     GeneSelector geneSelectPanel;    
2 26 Feb 07 jari 82     GeneClusterSelector geneClusterSelectPanel;    
2 26 Feb 07 jari 83     ExperimentSelector expSelectPanel;    
2 26 Feb 07 jari 84     ExperimentClusterSelector clusterSelectPanel;    
2 26 Feb 07 jari 85     SavedTemplateSelector templateSelectPanel;    
2 26 Feb 07 jari 86     TemplatePanel tempPanel;    
2 26 Feb 07 jari 87     ThresholdPanel thresh;    
2 26 Feb 07 jari 88     FloatMatrix expMatrix;    
2 26 Feb 07 jari 89     JCheckBox drawTreesBox;   
2 26 Feb 07 jari 90     private JRadioButton sigOnly, allClusters;    
2 26 Feb 07 jari 91     JPanel drawTreesPane;    
2 26 Feb 07 jari 92     JTabbedPane tabbedPane;    
2 26 Feb 07 jari 93     JButton saveTemplateButton;    
2 26 Feb 07 jari 94     Vector template = new Vector();
2 26 Feb 07 jari 95     
2 26 Feb 07 jari 96     FloatMatrix templateMatrix;    
2 26 Feb 07 jari 97     boolean setTemplate = false;    
2 26 Feb 07 jari 98     boolean clusterGenes = true;
2 26 Feb 07 jari 99     
2 26 Feb 07 jari 100     int numberOfExperiments;    
2 26 Feb 07 jari 101     private boolean okPressed = false;    
2 26 Feb 07 jari 102         
2 26 Feb 07 jari 103     public PTMInitDialog(JFrame parentFrame, boolean modality, FloatMatrix expMatrix, Vector uniqueIDs, Vector sampleNamesVector, Vector clusters, Vector expClusters, Color[] clusterColors, Color[] expClusterColors) {        
2 26 Feb 07 jari 104         super(parentFrame, "PTM: Pavlidis Template Matching", modality);                
2 26 Feb 07 jari 105         this.expMatrix = expMatrix;        
2 26 Feb 07 jari 106         this.numberOfExperiments = expMatrix.getColumnDimension();        
2 26 Feb 07 jari 107         this.uniqueIDs = uniqueIDs;        
2 26 Feb 07 jari 108         this.sampleNamesVector = sampleNamesVector;        
2 26 Feb 07 jari 109         this.clusters = clusters;        
2 26 Feb 07 jari 110         this.clusterColors = clusterColors;        
2 26 Feb 07 jari 111         this.expClusters = expClusters;        
2 26 Feb 07 jari 112         this.expClusterColors = expClusterColors;        
2 26 Feb 07 jari 113         SampleNames = getSampleNames();        
2 26 Feb 07 jari 114         //  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 115         setBounds(0,0,890,700);        
2 26 Feb 07 jari 116         setSize(890, 700);        
2 26 Feb 07 jari 117         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        
2 26 Feb 07 jari 118         GridBagLayout gridbag = new GridBagLayout();        
2 26 Feb 07 jari 119         GridBagConstraints constraints = new GridBagConstraints();        
2 26 Feb 07 jari 120         constraints.fill = GridBagConstraints.BOTH;        
2 26 Feb 07 jari 121         JPanel pane = new JPanel();        
2 26 Feb 07 jari 122         pane.setLayout(gridbag);        
2 26 Feb 07 jari 123                 
2 26 Feb 07 jari 124         buildConstraints(constraints, 0, 0, 2, 1, 0, 10);        
2 26 Feb 07 jari 125         tabbedPane = new JTabbedPane();        
2 26 Feb 07 jari 126         geneSelectPanel = new GeneSelector();        
2 26 Feb 07 jari 127         geneClusterSelectPanel = new GeneClusterSelector();        
2 26 Feb 07 jari 128         expSelectPanel = new ExperimentSelector();        
2 26 Feb 07 jari 129         clusterSelectPanel = new ExperimentClusterSelector();        
2 26 Feb 07 jari 130         templateSelectPanel = new SavedTemplateSelector();        
2 26 Feb 07 jari 131                 
2 26 Feb 07 jari 132         tabbedPane.addTab("Gene Templates", geneSelectPanel);        
2 26 Feb 07 jari 133         tabbedPane.addTab("Gene Cluster Templates", geneClusterSelectPanel);        
2 26 Feb 07 jari 134         tabbedPane.addTab("Sample Templates", expSelectPanel);        
2 26 Feb 07 jari 135         tabbedPane.addTab("Sample Cluster Templates", clusterSelectPanel);        
2 26 Feb 07 jari 136         tabbedPane.addTab("Select a Saved Template", templateSelectPanel);        
2 26 Feb 07 jari 137         tabbedPane.setSelectedIndex(0);        
2 26 Feb 07 jari 138                 
2 26 Feb 07 jari 139         gridbag.setConstraints(tabbedPane, constraints);        
2 26 Feb 07 jari 140         pane.add(tabbedPane);        
2 26 Feb 07 jari 141                 
2 26 Feb 07 jari 142         //placeholder button for top panel        
2 26 Feb 07 jari 143         buildConstraints(constraints, 0, 1, 2, 1, 0, 10);        
2 26 Feb 07 jari 144         tempPanel = new TemplatePanel();        
2 26 Feb 07 jari 145         tempPanel.setPreferredSize(new Dimension(80, 400));        
2 26 Feb 07 jari 146         //JButton button1 = new JButton("Enter template");        
2 26 Feb 07 jari 147         gridbag.setConstraints(tempPanel, constraints);        
2 26 Feb 07 jari 148         pane.add(tempPanel);        
2 26 Feb 07 jari 149                 
2 26 Feb 07 jari 150         tabbedPane.addChangeListener(new ChangeListener(){            
2 26 Feb 07 jari 151                         
2 26 Feb 07 jari 152             public void stateChanged(ChangeEvent evt){                
2 26 Feb 07 jari 153                 int index = tabbedPane.getSelectedIndex();                
2 26 Feb 07 jari 154                 if(index > 1){                    
2 26 Feb 07 jari 155                     tempPanel.setEnabled(false);                    
2 26 Feb 07 jari 156                     tempPanel.setVisible(false);                    
2 26 Feb 07 jari 157                 }                
2 26 Feb 07 jari 158                 else{                    
2 26 Feb 07 jari 159                     tempPanel.setEnabled(true);                    
2 26 Feb 07 jari 160                     tempPanel.setVisible(true);                    
2 26 Feb 07 jari 161                 }                
2 26 Feb 07 jari 162             }            
2 26 Feb 07 jari 163                         
2 26 Feb 07 jari 164         });        
2 26 Feb 07 jari 165                 
2 26 Feb 07 jari 166         // threshold prob panel        
2 26 Feb 07 jari 167         buildConstraints(constraints, 0, 2, 1, 1, 20, 0);        
2 26 Feb 07 jari 168         thresh = new ThresholdPanel();        
2 26 Feb 07 jari 169         gridbag.setConstraints(thresh, constraints);        
2 26 Feb 07 jari 170         pane.add(thresh);        
2 26 Feb 07 jari 171                 
2 26 Feb 07 jari 172         buildConstraints(constraints, 1,2, 1, 1, 5, 0);        
2 26 Feb 07 jari 173                 
2 26 Feb 07 jari 174         drawTreesPane = new JPanel();        
2 26 Feb 07 jari 175         drawTreesPane.setLayout(new GridBagLayout());        
2 26 Feb 07 jari 176         drawTreesBox = new JCheckBox("Construct Hierarchical Trees for:");        
2 26 Feb 07 jari 177         drawTreesBox.setFocusPainted(false);       
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         sigOnly = new JRadioButton("Matched genes only", true);
2 26 Feb 07 jari 180         //sigOnly.setBackground(Color.white);
2 26 Feb 07 jari 181         //sigOnly.setForeground(UIManager.getColor("Label.foreground"));     
2 26 Feb 07 jari 182         
2 26 Feb 07 jari 183         allClusters = new JRadioButton("All clusters", false);
2 26 Feb 07 jari 184         //allClusters.setBackground(Color.white);
2 26 Feb 07 jari 185         //allClusters.setForeground(UIManager.getColor("Label.foreground"));        
2 26 Feb 07 jari 186
2 26 Feb 07 jari 187         sigOnly.setEnabled(false);
2 26 Feb 07 jari 188         allClusters.setEnabled(false);
2 26 Feb 07 jari 189         
2 26 Feb 07 jari 190         ButtonGroup allOrSig = new ButtonGroup();
2 26 Feb 07 jari 191         allOrSig.add(sigOnly);
2 26 Feb 07 jari 192         allOrSig.add(allClusters);        
2 26 Feb 07 jari 193         
2 26 Feb 07 jari 194         saveTemplateButton = new JButton("Save Current Template", GUIFactory.getIcon("save16.gif"));        
2 26 Feb 07 jari 195         saveTemplateButton.setToolTipText("Saves template to file");        
2 26 Feb 07 jari 196         saveTemplateButton.setFocusPainted(false);        
2 26 Feb 07 jari 197         saveTemplateButton.setActionCommand("save-template-to-file-command");        
2 26 Feb 07 jari 198         saveTemplateButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));        
2 26 Feb 07 jari 199         saveTemplateButton.setMargin(new Insets(2,50,2,5));        
2 26 Feb 07 jari 200         saveTemplateButton.setPreferredSize(new Dimension(175,30));        
2 26 Feb 07 jari 201         saveTemplateButton.addActionListener(new ActionListener(){            
2 26 Feb 07 jari 202             public void actionPerformed(ActionEvent evt) {                
2 26 Feb 07 jari 203                 if (evt.getSource() == saveTemplateButton) {  
2 26 Feb 07 jari 204                   String dataPath = TMEV.getDataPath();
2 26 Feb 07 jari 205                     File fileLoc = TMEV.getFile("data/"); 
2 26 Feb 07 jari 206                     // if the data path is null go to default, if not null and not exist then to to default
2 26 Feb 07 jari 207                     // else use the dataPath
2 26 Feb 07 jari 208                     if(dataPath != null) {
2 26 Feb 07 jari 209                         fileLoc = new File(dataPath);
2 26 Feb 07 jari 210                         if(!fileLoc.exists()) {
2 26 Feb 07 jari 211                             fileLoc = TMEV.getFile("data/");
2 26 Feb 07 jari 212                         }
2 26 Feb 07 jari 213                     }
2 26 Feb 07 jari 214                     JFileChooser fc = new JFileChooser(fileLoc);                    
2 26 Feb 07 jari 215                                         
2 26 Feb 07 jari 216                     int returnVal = fc.showSaveDialog(PTMInitDialog.this);                    
2 26 Feb 07 jari 217                     if (returnVal == JFileChooser.APPROVE_OPTION) {                        
2 26 Feb 07 jari 218                         File file = fc.getSelectedFile();                        
2 26 Feb 07 jari 219                         try {                            
2 26 Feb 07 jari 220                             //   DataOutputStream templateData = new DataOutputStream(new FileOutputStream(file.getPath(), true));                            
2 26 Feb 07 jari 221                             BufferedWriter bw = new BufferedWriter(new FileWriter(file.getPath()));                            
2 26 Feb 07 jari 222                             if(tabbedPane.getSelectedIndex() < 2){                                
2 26 Feb 07 jari 223                                 for(int i = 0; i < tempPanel.tempScr.tempGrid.length; i++) {                                    
2 26 Feb 07 jari 224                                     String s = tempPanel.tempScr.tempGrid[i].templateField.getText();                                    
2 26 Feb 07 jari 225                                     float f = Float.parseFloat(s);                                    
2 26 Feb 07 jari 226                                     //                                    templateData.writeFloat(f);                                    
2 26 Feb 07 jari 227                                     bw.write(Float.toString(f)+"\n");                                    
2 26 Feb 07 jari 228                                 }                                
2 26 Feb 07 jari 229                             }                            
2 26 Feb 07 jari 230                             else{                                
2 26 Feb 07 jari 231                                 for(int i = 0; i < template.size() ; i++){                                    
2 26 Feb 07 jari 232                                     bw.write(((Float)template.elementAt(i)).toString()+"\n");                                    
2 26 Feb 07 jari 233                                     //templateData.writeFloat(((Float)template.elementAt(i)).floatValue());                                    
2 26 Feb 07 jari 234                                 }                                
2 26 Feb 07 jari 235                             }                            
2 26 Feb 07 jari 236                             bw.flush();                            
2 26 Feb 07 jari 237                             bw.close();                            
2 26 Feb 07 jari 238                             // templateData.close();                            
2 26 Feb 07 jari 239                         } catch (IOException e) {                            
2 26 Feb 07 jari 240                             System.out.println("Error: " + e.toString());                            
2 26 Feb 07 jari 241                         }                        
2 26 Feb 07 jari 242                     }                    
2 26 Feb 07 jari 243                 }                
2 26 Feb 07 jari 244             }            
2 26 Feb 07 jari 245         });        
2 26 Feb 07 jari 246         
2 26 Feb 07 jari 247         drawTreesBox.addItemListener(new ItemListener() {
2 26 Feb 07 jari 248             public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 249                 if (e.getStateChange() == ItemEvent.DESELECTED) {
2 26 Feb 07 jari 250                     sigOnly.setEnabled(false);
2 26 Feb 07 jari 251                     allClusters.setEnabled(false);
2 26 Feb 07 jari 252                 } else {
2 26 Feb 07 jari 253                     sigOnly.setEnabled(true);
2 26 Feb 07 jari 254                     allClusters.setEnabled(true);                    
2 26 Feb 07 jari 255                 }
2 26 Feb 07 jari 256             }
2 26 Feb 07 jari 257         });        
2 26 Feb 07 jari 258         
2 26 Feb 07 jari 259         drawTreesPane.add(saveTemplateButton, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,30,0,20),0,0));        
2 26 Feb 07 jari 260         drawTreesPane.add(drawTreesBox, new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,30,0,20),0,0));        
2 26 Feb 07 jari 261         drawTreesPane.add(sigOnly, new GridBagConstraints(1,1,1,1,0,0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(0,30,0,20),0,0));
2 26 Feb 07 jari 262         drawTreesPane.add(allClusters, new GridBagConstraints(1,2,1,1,0,0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(0,30,0,20),0,0));        
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         constraints.anchor = GridBagConstraints.CENTER;        
2 26 Feb 07 jari 265         gridbag.setConstraints(drawTreesPane, constraints);        
2 26 Feb 07 jari 266         buildConstraints(constraints, 1, 2, 1, 1, 5, 0);        
2 26 Feb 07 jari 267         gridbag.setConstraints(drawTreesPane, constraints);        
2 26 Feb 07 jari 268         pane.add(drawTreesPane);        
2 26 Feb 07 jari 269         addContent(pane);        
2 26 Feb 07 jari 270         setActionListeners(new EventListener());        
2 26 Feb 07 jari 271     }    
2 26 Feb 07 jari 272         
2 26 Feb 07 jari 273         
2 26 Feb 07 jari 274     public void setVisible(boolean visible) {        
2 26 Feb 07 jari 275                 
2 26 Feb 07 jari 276         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();        
2 26 Feb 07 jari 277         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);        
2 26 Feb 07 jari 278                 
2 26 Feb 07 jari 279         super.setVisible(visible);        
2 26 Feb 07 jari 280     }    
2 26 Feb 07 jari 281         
2 26 Feb 07 jari 282     public boolean isGeneTemplate(){        
2 26 Feb 07 jari 283         return this.clusterGenes;        
2 26 Feb 07 jari 284     }    
2 26 Feb 07 jari 285         
2 26 Feb 07 jari 286     void buildConstraints(GridBagConstraints gbc, int gx, int gy,    
2 26 Feb 07 jari 287     int gw, int gh, int wx, int wy) {        
2 26 Feb 07 jari 288                 
2 26 Feb 07 jari 289         gbc.gridx = gx;        
2 26 Feb 07 jari 290         gbc.gridy = gy;        
2 26 Feb 07 jari 291         gbc.gridwidth = gw;        
2 26 Feb 07 jari 292         gbc.gridheight = gh;        
2 26 Feb 07 jari 293         gbc.weightx = wx;        
2 26 Feb 07 jari 294         gbc.weighty = wy;        
2 26 Feb 07 jari 295     }    
2 26 Feb 07 jari 296         
2 26 Feb 07 jari 297         
2 26 Feb 07 jari 298     String[] getSampleNames() {        
2 26 Feb 07 jari 299         String[] SampleNames = new String[sampleNamesVector.size()];        
2 26 Feb 07 jari 300         for(int i = 0; i < sampleNamesVector.size(); i++){            
2 26 Feb 07 jari 301             SampleNames[i] = (String)sampleNamesVector.get(i);            
2 26 Feb 07 jari 302         }        
2 26 Feb 07 jari 303         return SampleNames;        
2 26 Feb 07 jari 304     }    
2 26 Feb 07 jari 305         
2 26 Feb 07 jari 306         
2 26 Feb 07 jari 307     class ExperimentSelector extends JPanel{        
2 26 Feb 07 jari 308         JList expList;        
2 26 Feb 07 jari 309         GraphCanvas profileDisplayPanel;        
2 26 Feb 07 jari 310         JScrollPane listScrollPane;        
2 26 Feb 07 jari 311         JButton selectButton;        
2 26 Feb 07 jari 312         int maxIndex = -1;        
2 26 Feb 07 jari 313         int minIndex = -1;        
2 26 Feb 07 jari 314                 
2 26 Feb 07 jari 315         JSplitPane expSplitPane;        
2 26 Feb 07 jari 316                 
2 26 Feb 07 jari 317         ExperimentSelector() {            
2 26 Feb 07 jari 318             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 319             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 320             this.setLayout(gridbag);            
2 26 Feb 07 jari 321                         
2 26 Feb 07 jari 322             expList = new JList(sampleNamesVector);            
2 26 Feb 07 jari 323             expList.setSelectedIndex(0);            
2 26 Feb 07 jari 324                         
2 26 Feb 07 jari 325             //AIS -- Use the graph classes            
2 26 Feb 07 jari 326             profileDisplayPanel = new GraphCanvas();            
2 26 Feb 07 jari 327             profileDisplayPanel.setGraphBounds(0, expMatrix.getRowDimension(), -3, 3);            
2 26 Feb 07 jari 328             profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);            
2 26 Feb 07 jari 329             profileDisplayPanel.setXAxisValue(0);            
2 26 Feb 07 jari 330             profileDisplayPanel.setYAxisValue(0);            
2 26 Feb 07 jari 331                         
2 26 Feb 07 jari 332             //AIS -- Use the graph classes            
2 26 Feb 07 jari 333         /*    expProfileDisplayPanel = new GraphCanvas();         
2 26 Feb 07 jari 334             expProfileDisplayPanel.setGraphBounds(0, expMatrix.getRowDimension(), -3, 3);         
2 26 Feb 07 jari 335             expProfileDisplayPanel.setGraphSpacing(20, 20, 20, 20);         
2 26 Feb 07 jari 336             expProfileDisplayPanel.setXAxisValue(0);         
2 26 Feb 07 jari 337             expProfileDisplayPanel.setYAxisValue(0);         
2 26 Feb 07 jari 338          */            
2 26 Feb 07 jari 339             expList.addListSelectionListener(new ListSelectionListener(){                
2 26 Feb 07 jari 340                 public void valueChanged(ListSelectionEvent e) {                    
2 26 Feb 07 jari 341                     refreshGraph();                    
2 26 Feb 07 jari 342                 }                
2 26 Feb 07 jari 343             });            
2 26 Feb 07 jari 344             //-- AIS            
2 26 Feb 07 jari 345                         
2 26 Feb 07 jari 346             listScrollPane = new JScrollPane(expList);            
2 26 Feb 07 jari 347             expSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);            
2 26 Feb 07 jari 348             expSplitPane.setOneTouchExpandable(true);            
2 26 Feb 07 jari 349             expSplitPane.setDividerLocation(200);            
2 26 Feb 07 jari 350                         
2 26 Feb 07 jari 351             Dimension minimumSize = new Dimension(100,50);            
2 26 Feb 07 jari 352             expList.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 353             profileDisplayPanel.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 354                         
2 26 Feb 07 jari 355             //uIDSplitPane.setPreferredSize(new Dimension(700,150));            
2 26 Feb 07 jari 356             
2 26 Feb 07 jari 357             buildConstraints(constraints, 0, 0, 1, 1, 1, 1);            
2 26 Feb 07 jari 358             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 359             gridbag.setConstraints(expSplitPane, constraints);            
2 26 Feb 07 jari 360             this.add(expSplitPane);
2 26 Feb 07 jari 361                         
2 26 Feb 07 jari 362             buildConstraints(constraints, 0, 1, 1, 1, 0, 0);            
2 26 Feb 07 jari 363             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 364             constraints.anchor = GridBagConstraints.CENTER;            
2 26 Feb 07 jari 365             constraints.insets = new Insets(10,0,10,0);            
2 26 Feb 07 jari 366             selectButton = new JButton("Select highlighted samples from above list to use as template", GUIFactory.getIcon("select_check24.gif"));            
2 26 Feb 07 jari 367             selectButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 368             selectButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 369             selectButton.setPreferredSize(new Dimension(400,30));            
2 26 Feb 07 jari 370             selectButton.setFocusPainted(false);            
2 26 Feb 07 jari 371             selectButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 372                                 
2 26 Feb 07 jari 373                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 374                     int [] index = expList.getSelectedIndices();                    
2 26 Feb 07 jari 375                     Vector expProfile = new Vector();                    
2 26 Feb 07 jari 376                     Vector expProfiles = new Vector();                    
2 26 Feb 07 jari 377                                         
2 26 Feb 07 jari 378                     for(int j = 0; j < index.length; j++){                        
2 26 Feb 07 jari 379                         expProfile = getExperiment(index[j]);                        
2 26 Feb 07 jari 380                         float max = getMax(expProfile);                        
2 26 Feb 07 jari 381                         float min = getMin(expProfile);                        
2 26 Feb 07 jari 382                                                 
2 26 Feb 07 jari 383                         if ((max - min) == 0) {                            
2 26 Feb 07 jari 384                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 385                                 expProfile.set(i, new Float(0.5));                                
2 26 Feb 07 jari 386                             }                            
2 26 Feb 07 jari 387                         } else {                            
2 26 Feb 07 jari 388                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 389                                 float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);                                
2 26 Feb 07 jari 390                                 expProfile.set(i, new Float(f));                                
2 26 Feb 07 jari 391                             }                            
2 26 Feb 07 jari 392                         }                        
2 26 Feb 07 jari 393                         expProfiles.add(expProfile);                        
2 26 Feb 07 jari 394                     }                    
2 26 Feb 07 jari 395                                         
2 26 Feb 07 jari 396                     template = getMeanProfile(expProfiles);                    
2 26 Feb 07 jari 397                     setTemplate = true;                    
2 26 Feb 07 jari 398                     clusterGenes = false;                    
2 26 Feb 07 jari 399                     refreshGraph();                    
2 26 Feb 07 jari 400                 }                
2 26 Feb 07 jari 401                                 
2 26 Feb 07 jari 402             });            
2 26 Feb 07 jari 403                         
2 26 Feb 07 jari 404             gridbag.setConstraints(selectButton, constraints);            
2 26 Feb 07 jari 405             this.add(selectButton);            
2 26 Feb 07 jari 406             refreshGraph();            
2 26 Feb 07 jari 407         }        
2 26 Feb 07 jari 408         
2 26 Feb 07 jari 409         
2 26 Feb 07 jari 410         private void refreshGraph() {            
2 26 Feb 07 jari 411             profileDisplayPanel.removeAllGraphElements();            
2 26 Feb 07 jari 412             //  int index = expList.getSelectedIndex();            
2 26 Feb 07 jari 413             int [] indices = expList.getSelectedIndices();            
2 26 Feb 07 jari 414             Vector expProfile;            
2 26 Feb 07 jari 415             Vector expProfiles = new Vector();            
2 26 Feb 07 jari 416             float max = Float.NEGATIVE_INFINITY;            
2 26 Feb 07 jari 417             float min = Float.POSITIVE_INFINITY;            
2 26 Feb 07 jari 418             float maxRange;            
2 26 Feb 07 jari 419             for(int exp = 0; exp < indices.length; exp++){                
2 26 Feb 07 jari 420                 expProfile = getExperiment(indices[exp]);                
2 26 Feb 07 jari 421                 expProfiles.add(expProfile);                
2 26 Feb 07 jari 422                 max = Math.max(max, getMax(expProfile));                
2 26 Feb 07 jari 423                 min = Math.min(min, getMin(expProfile));                
2 26 Feb 07 jari 424                 maxRange = Math.max(max, Math.abs(min));                
2 26 Feb 07 jari 425                 profileDisplayPanel.setGraphBounds(0,expProfile.size(),-maxRange,maxRange);                
2 26 Feb 07 jari 426                                 
2 26 Feb 07 jari 427                 for (int i = 0; i < expProfile.size(); i++) {                    
2 26 Feb 07 jari 428                     if (!Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) {                        
2 26 Feb 07 jari 429                         GraphPoint gp = new GraphPoint(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(), Color.red, 5);                        
2 26 Feb 07 jari 430                         profileDisplayPanel.addGraphElement(gp);                        
2 26 Feb 07 jari 431                     }                    
2 26 Feb 07 jari 432                 }                
2 26 Feb 07 jari 433                                 
2 26 Feb 07 jari 434                 for (int i = 0; i < expProfile.size() - 1; i++) {                    
2 26 Feb 07 jari 435                     if ((Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) expProfile.elementAt(i+1)).floatValue()))) {                        
2 26 Feb 07 jari 436                         continue;                        
2 26 Feb 07 jari 437                     }                    
2 26 Feb 07 jari 438                     GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(),                    
2 26 Feb 07 jari 439                     i + 1, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.blue);                    
2 26 Feb 07 jari 440                     profileDisplayPanel.addGraphElement(gl);                    
2 26 Feb 07 jari 441                 }                
2 26 Feb 07 jari 442             }            
2 26 Feb 07 jari 443                         
2 26 Feb 07 jari 444             expProfile = getMeanProfile(expProfiles);            
2 26 Feb 07 jari 445                         
2 26 Feb 07 jari 446             if(setTemplate){                
2 26 Feb 07 jari 447                                 
2 26 Feb 07 jari 448                 for (int i = 0; i < expProfile.size() - 1; i++) {                    
2 26 Feb 07 jari 449                     if ((Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) expProfile.elementAt(i+1)).floatValue()))) {                        
2 26 Feb 07 jari 450                         continue;                        
2 26 Feb 07 jari 451                     }                    
2 26 Feb 07 jari 452                     GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(),                    
2 26 Feb 07 jari 453                     i + 1, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.green);                    
2 26 Feb 07 jari 454                     profileDisplayPanel.addGraphElement(gl);                    
2 26 Feb 07 jari 455                 }                
2 26 Feb 07 jari 456             }            
2 26 Feb 07 jari 457             profileDisplayPanel.repaint();            
2 26 Feb 07 jari 458         }        
2 26 Feb 07 jari 459                 
2 26 Feb 07 jari 460         public void reset(){            
2 26 Feb 07 jari 461             expList.setSelectedIndex(0);            
2 26 Feb 07 jari 462             setTemplate = false;            
2 26 Feb 07 jari 463             refreshGraph();            
2 26 Feb 07 jari 464         }        
2 26 Feb 07 jari 465     }    
2 26 Feb 07 jari 466         
2 26 Feb 07 jari 467     Vector getMeanProfile(Vector expInCluster) {        
2 26 Feb 07 jari 468             
2 26 Feb 07 jari 469         Vector meanProfile = new Vector();        
2 26 Feb 07 jari 470         
2 26 Feb 07 jari 471         //if empty just return a NaN profile
2 26 Feb 07 jari 472         if(expInCluster.size() == 0) {
2 26 Feb 07 jari 473           Vector v = new Vector(this.numberOfExperiments);
2 26 Feb 07 jari 474       for(int i = 0; i < numberOfExperiments; i++) {
2 26 Feb 07 jari 475         v.add(new Float(Float.NaN));
2 26 Feb 07 jari 476       }
2 26 Feb 07 jari 477       return v;          
2 26 Feb 07 jari 478         }
2 26 Feb 07 jari 479           
2 26 Feb 07 jari 480         float[][] expMatrix = this.convertToFloatMatrix(expInCluster);        
2 26 Feb 07 jari 481         float[] meanArray;        
2 26 Feb 07 jari 482         int n = 0;        
2 26 Feb 07 jari 483         float mean;        
2 26 Feb 07 jari 484                 
2 26 Feb 07 jari 485         for (int i = 0; i < expMatrix[0].length; i++){            
2 26 Feb 07 jari 486             float sum = 0;            
2 26 Feb 07 jari 487             n = 0;            
2 26 Feb 07 jari 488             for (int j = 0; j < expMatrix.length; j++){                
2 26 Feb 07 jari 489                 if (!Float.isNaN(expMatrix[j][i])){                    
2 26 Feb 07 jari 490                     sum += expMatrix[j][i];                    
2 26 Feb 07 jari 491                     n++;                    
2 26 Feb 07 jari 492                 }                
2 26 Feb 07 jari 493             }            
2 26 Feb 07 jari 494             mean = (n > 0) ? (sum / (float)n) : 0;            
2 26 Feb 07 jari 495             meanProfile.add(new Float(mean));            
2 26 Feb 07 jari 496         }        
2 26 Feb 07 jari 497         return meanProfile;        
2 26 Feb 07 jari 498     }    
2 26 Feb 07 jari 499         
2 26 Feb 07 jari 500         
2 26 Feb 07 jari 501     float[][] convertToFloatMatrix(Vector geneCluster) {        
2 26 Feb 07 jari 502         float[][] matrix = new float[geneCluster.size()][];        
2 26 Feb 07 jari 503                 
2 26 Feb 07 jari 504         for (int i = 0; i < geneCluster.size(); i++) {            
2 26 Feb 07 jari 505             Vector currentGene = (Vector) ((Vector) geneCluster.get(i)).clone();            
2 26 Feb 07 jari 506             matrix[i] = new float[currentGene.size()];            
2 26 Feb 07 jari 507             for (int j = 0; j < currentGene.size(); j++) {                
2 26 Feb 07 jari 508                 matrix[i][j] = ((Float)currentGene.get(j)).floatValue();                
2 26 Feb 07 jari 509             }            
2 26 Feb 07 jari 510         }        
2 26 Feb 07 jari 511         return matrix;        
2 26 Feb 07 jari 512     }    
2 26 Feb 07 jari 513         
2 26 Feb 07 jari 514         
2 26 Feb 07 jari 515     private Vector getExperiment(int index) {        
2 26 Feb 07 jari 516         Vector exp = new Vector();        
2 26 Feb 07 jari 517         int rows = expMatrix.getRowDimension();        
2 26 Feb 07 jari 518         for (int i = 0; i < rows; i++) {            
2 26 Feb 07 jari 519             exp.add(new Float(expMatrix.get(i, index)));            
2 26 Feb 07 jari 520         }        
2 26 Feb 07 jari 521         return exp;        
2 26 Feb 07 jari 522     }    
2 26 Feb 07 jari 523         
2 26 Feb 07 jari 524         
2 26 Feb 07 jari 525     private float getMax(Vector element) {        
2 26 Feb 07 jari 526         float max = Float.NEGATIVE_INFINITY;        
2 26 Feb 07 jari 527                 
2 26 Feb 07 jari 528         for(int i = 0; i < element.size(); i++) {            
2 26 Feb 07 jari 529             if (! Float.isNaN(((Float)element.get(i)).floatValue())) {                
2 26 Feb 07 jari 530                 float current = ((Float)element.get(i)).floatValue();                
2 26 Feb 07 jari 531                 if (current > max) max = current;                
2 26 Feb 07 jari 532             }            
2 26 Feb 07 jari 533         }        
2 26 Feb 07 jari 534                 
2 26 Feb 07 jari 535         return max;        
2 26 Feb 07 jari 536     }    
2 26 Feb 07 jari 537         
2 26 Feb 07 jari 538         
2 26 Feb 07 jari 539     private float getMin(Vector element) {        
2 26 Feb 07 jari 540         float min = Float.MAX_VALUE;        
2 26 Feb 07 jari 541                 
2 26 Feb 07 jari 542         for(int i = 0; i < element.size(); i++) {            
2 26 Feb 07 jari 543             if (! Float.isNaN(((Float)element.get(i)).floatValue())) {                
2 26 Feb 07 jari 544                 float current = ((Float)element.get(i)).floatValue();                
2 26 Feb 07 jari 545                 if (current < min) min = current;                
2 26 Feb 07 jari 546             }            
2 26 Feb 07 jari 547         }        
2 26 Feb 07 jari 548         return min;        
2 26 Feb 07 jari 549     }    
2 26 Feb 07 jari 550         
2 26 Feb 07 jari 551         
2 26 Feb 07 jari 552         
2 26 Feb 07 jari 553     class ExperimentClusterSelector extends JPanel {        
2 26 Feb 07 jari 554         JList clusterList;        
2 26 Feb 07 jari 555         GraphCanvas profileDisplayPanel;        
2 26 Feb 07 jari 556         JScrollPane listScrollPane;        
2 26 Feb 07 jari 557         JButton selectButton;        
2 26 Feb 07 jari 558                 
2 26 Feb 07 jari 559         Vector clusterNames; // JUST THE NAMES OF THE CLUSTERS, i.e., "CLUSTER 1", "CLUSTER 2", ETC.        
2 26 Feb 07 jari 560         //Vector clusterContents; // THIS IS A VECTOR OF VECTORS (= THE INDICES OF THE UNIQUE IDS IN A CLUSTER)        
2 26 Feb 07 jari 561         Vector expDataInClusters; // THIS IS A VECTOR OF VECTORS ( = CLUSTERS) OF VECTORS ( = EXPRESSION PROFILES OF GENES IN THAT CLUSTER).        
2 26 Feb 07 jari 562         Vector averageClusterProfiles;        
2 26 Feb 07 jari 563                 
2 26 Feb 07 jari 564         JSplitPane clusterSplitPane;        
2 26 Feb 07 jari 565                 
2 26 Feb 07 jari 566         ExperimentClusterSelector() {            
2 26 Feb 07 jari 567                         
2 26 Feb 07 jari 568             clusterNames = new Vector();            
2 26 Feb 07 jari 569                         
2 26 Feb 07 jari 570             if (expClusters.size() == 0) {                
2 26 Feb 07 jari 571                 clusterNames.add("No sample clusters to show");                
2 26 Feb 07 jari 572             } else {                                
2 26 Feb 07 jari 573                 for (int i = 0; i < expClusters.size(); i++) {                    
2 26 Feb 07 jari 574                     clusterNames.add("Exp. Cluster " + (i+1));                    
2 26 Feb 07 jari 575                 }                
2 26 Feb 07 jari 576                                 
2 26 Feb 07 jari 577                 expDataInClusters = new Vector();                
2 26 Feb 07 jari 578                 averageClusterProfiles = new Vector();                
2 26 Feb 07 jari 579                 int index;                
2 26 Feb 07 jari 580                 for(int j = 0; j < expClusters.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 581                     Vector currentCluster = (Vector)expClusters.get(j);                    
2 26 Feb 07 jari 582                     Vector cluster = new Vector();                    
2 26 Feb 07 jari 583                     for (int k = 0; k < currentCluster.size(); k++) {                        
2 26 Feb 07 jari 584                         index = ((Integer)currentCluster.get(k)).intValue();                        
2 26 Feb 07 jari 585                         Vector currentGene = getExperiment(index);                        
2 26 Feb 07 jari 586                         //currentCluster.set(k, currentGene);                        
2 26 Feb 07 jari 587                         cluster.add(currentGene);                        
2 26 Feb 07 jari 588                     }                    
2 26 Feb 07 jari 589                                         
2 26 Feb 07 jari 590                     expDataInClusters.add(cluster);                                        
2 26 Feb 07 jari 591                     Vector meanOfCurrentCluster = getMeanProfile(cluster);                    
2 26 Feb 07 jari 592                     averageClusterProfiles.add(meanOfCurrentCluster);                    
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             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 598             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 599             //constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 600             this.setLayout(gridbag);            
2 26 Feb 07 jari 601                         
2 26 Feb 07 jari 602             clusterList = new JList(clusterNames);            
2 26 Feb 07 jari 603             clusterList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            
2 26 Feb 07 jari 604             clusterList.setSelectedIndex(0);            
2 26 Feb 07 jari 605                         
2 26 Feb 07 jari 606             //AIS -- Use the graph classes            
2 26 Feb 07 jari 607             profileDisplayPanel = new GraphCanvas();            
2 26 Feb 07 jari 608             profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);            
2 26 Feb 07 jari 609             profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);            
2 26 Feb 07 jari 610             profileDisplayPanel.setXAxisValue(0);            
2 26 Feb 07 jari 611             profileDisplayPanel.setYAxisValue(0);            
2 26 Feb 07 jari 612                         
2 26 Feb 07 jari 613             clusterList.addListSelectionListener(new ListSelectionListener(){                
2 26 Feb 07 jari 614                 public void valueChanged(ListSelectionEvent e) {                    
2 26 Feb 07 jari 615                     refreshGraph();                    
2 26 Feb 07 jari 616                 }                
2 26 Feb 07 jari 617             });            
2 26 Feb 07 jari 618             //-- AIS            
2 26 Feb 07 jari 619                         
2 26 Feb 07 jari 620             listScrollPane = new JScrollPane(clusterList);            
2 26 Feb 07 jari 621                         
2 26 Feb 07 jari 622             clusterSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);            
2 26 Feb 07 jari 623             clusterSplitPane.setOneTouchExpandable(true);            
2 26 Feb 07 jari 624             clusterSplitPane.setDividerLocation(200);            
2 26 Feb 07 jari 625                         
2 26 Feb 07 jari 626             Dimension minimumSize = new Dimension(100,50);            
2 26 Feb 07 jari 627             clusterList.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 628             profileDisplayPanel.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 629                         
2 26 Feb 07 jari 630             buildConstraints(constraints, 0, 0, 1, 1, 1, 1);            
2 26 Feb 07 jari 631             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 632             gridbag.setConstraints(clusterSplitPane, constraints);            
2 26 Feb 07 jari 633             this.add(clusterSplitPane);            
2 26 Feb 07 jari 634                         
2 26 Feb 07 jari 635             buildConstraints(constraints, 0, 1, 1, 1, 0, 0);            
2 26 Feb 07 jari 636             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 637             constraints.anchor = GridBagConstraints.CENTER;            
2 26 Feb 07 jari 638             constraints.insets = new Insets(10,0,10,0);            
2 26 Feb 07 jari 639             selectButton = new JButton("Select highlighted cluster from above list to use its mean as template", GUIFactory.getIcon("select_check24.gif"));            
2 26 Feb 07 jari 640             selectButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 641             selectButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 642             selectButton.setPreferredSize(new Dimension(430,30));            
2 26 Feb 07 jari 643             selectButton.setFocusPainted(false);            
2 26 Feb 07 jari 644             selectButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 645                                 
2 26 Feb 07 jari 646                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 647                     if (expClusters.size() == 0){                        
2 26 Feb 07 jari 648                         JOptionPane.showMessageDialog(null, "No sample clusters to select");                        
2 26 Feb 07 jari 649                     } else {                        
2 26 Feb 07 jari 650                         int c = clusterList.getSelectedIndex();                        
2 26 Feb 07 jari 651                         Vector v = (Vector)(expClusters.elementAt(c));                                                
2 26 Feb 07 jari 652                         int [] index = new int[v.size()];                        
2 26 Feb 07 jari 653                         for(int i = 0; i < index.length; i++)                            
2 26 Feb 07 jari 654                             index[i] = ((Integer)v.elementAt(i)).intValue();                        
2 26 Feb 07 jari 655                                                 
2 26 Feb 07 jari 656                         Vector expProfile = new Vector();                        
2 26 Feb 07 jari 657                         Vector expProfiles = new Vector();                        
2 26 Feb 07 jari 658                                                 
2 26 Feb 07 jari 659                         for(int j = 0; j < index.length; j++){                                                        
2 26 Feb 07 jari 660                             expProfile = getExperiment(index[j]);                            
2 26 Feb 07 jari 661                             float max = getMax(expProfile);                            
2 26 Feb 07 jari 662                             float min = getMin(expProfile);                            
2 26 Feb 07 jari 663                                                         
2 26 Feb 07 jari 664                             if ((max - min) == 0) {                                
2 26 Feb 07 jari 665                                 for(int i = 0; i < expProfile.size(); i++) {                                    
2 26 Feb 07 jari 666                                     expProfile.set(i, new Float(0.5));                                    
2 26 Feb 07 jari 667                                 }                                
2 26 Feb 07 jari 668                             } else {                                
2 26 Feb 07 jari 669                                 for(int i = 0; i < expProfile.size(); i++) {                                    
2 26 Feb 07 jari 670                                     float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);                                    
2 26 Feb 07 jari 671                                     expProfile.set(i, new Float(f));                                    
2 26 Feb 07 jari 672                                 }                                
2 26 Feb 07 jari 673                             }                            
2 26 Feb 07 jari 674                             expProfiles.add(expProfile);                            
2 26 Feb 07 jari 675                         }                        
2 26 Feb 07 jari 676                                                 
2 26 Feb 07 jari 677                         template = getMeanProfile(expProfiles);                        
2 26 Feb 07 jari 678                         setTemplate = true;                        
2 26 Feb 07 jari 679                         clusterGenes = false;                        
2 26 Feb 07 jari 680                         okButton.setEnabled(true);                        
2 26 Feb 07 jari 681                     }                    
2 26 Feb 07 jari 682                 }                
2 26 Feb 07 jari 683                                 
2 26 Feb 07 jari 684             });            
2 26 Feb 07 jari 685                         
2 26 Feb 07 jari 686             gridbag.setConstraints(selectButton, constraints);            
2 26 Feb 07 jari 687             this.add(selectButton);            
2 26 Feb 07 jari 688             refreshGraph();            
2 26 Feb 07 jari 689         }        
2 26 Feb 07 jari 690                 
2 26 Feb 07 jari 691         private void refreshGraph() {            
2 26 Feb 07 jari 692                         
2 26 Feb 07 jari 693             int index = clusterList.getSelectedIndex();            
2 26 Feb 07 jari 694             if (expClusters.size() <= 0) return;            
2 26 Feb 07 jari 695             Vector meanProfile = (Vector) averageClusterProfiles.elementAt(index);            
2 26 Feb 07 jari 696             Vector currExp;            
2 26 Feb 07 jari 697             GraphLine gL;            
2 26 Feb 07 jari 698             float min = Float.POSITIVE_INFINITY;            
2 26 Feb 07 jari 699             float max = Float.NEGATIVE_INFINITY;            
2 26 Feb 07 jari 700             float maxRange;            
2 26 Feb 07 jari 701             profileDisplayPanel.removeAllGraphElements();            
2 26 Feb 07 jari 702             Vector selectedCluster = (Vector)expDataInClusters.get(index);            
2 26 Feb 07 jari 703                         
2 26 Feb 07 jari 704             for (int j = 0; j < selectedCluster.size(); j++) {    
2 26 Feb 07 jari 705                                 
2 26 Feb 07 jari 706                 currExp = (Vector)selectedCluster.get(j);                
2 26 Feb 07 jari 707                                 
2 26 Feb 07 jari 708                 max = Math.max(max, getMax(currExp));                
2 26 Feb 07 jari 709                 min = Math.min(min, getMin(currExp));                
2 26 Feb 07 jari 710                 maxRange = Math.max(max, Math.abs(min));                
2 26 Feb 07 jari 711                 profileDisplayPanel.setGraphBounds(0, currExp.size(), -maxRange, maxRange);                
2 26 Feb 07 jari 712                                 
2 26 Feb 07 jari 713                 for (int i = 0; i < currExp.size() - 1; i++) {                    
2 26 Feb 07 jari 714                     if ((Float.isNaN(((Float) currExp.elementAt(i)).floatValue()))||(Float.isNaN(((Float) currExp.elementAt(i+1)).floatValue()))) {                        
2 26 Feb 07 jari 715                         continue;                        
2 26 Feb 07 jari 716                     }                    
2 26 Feb 07 jari 717                     gL = new GraphLine(i /*+ 1*/, ((Float) currExp.elementAt(i)).floatValue(),                    
2 26 Feb 07 jari 718                     i + 1, ((Float) currExp.elementAt(i + 1)).floatValue(), expClusterColors[index]);                    
2 26 Feb 07 jari 719                     profileDisplayPanel.addGraphElement(gL);                    
2 26 Feb 07 jari 720                 }                
2 26 Feb 07 jari 721             }            
2 26 Feb 07 jari 722                         
2 26 Feb 07 jari 723             for (int i = 0; i < meanProfile.size(); i++) {                
2 26 Feb 07 jari 724                 if (!Float.isNaN(((Float) meanProfile.elementAt(i)).floatValue())) {                    
2 26 Feb 07 jari 725                     GraphPoint gp = new GraphPoint(i/* + 1*/, ((Float) meanProfile.elementAt(i)).floatValue(), Color.red, 5);                    
2 26 Feb 07 jari 726                     profileDisplayPanel.addGraphElement(gp);                    
2 26 Feb 07 jari 727                 }                
2 26 Feb 07 jari 728             }            
2 26 Feb 07 jari 729                         
2 26 Feb 07 jari 730             for (int i = 0; i < meanProfile.size() - 1; i++) {                
2 26 Feb 07 jari 731                 gL = new GraphLine(i /*+ 1*/, ((Float) meanProfile.elementAt(i)).floatValue(),                
2 26 Feb 07 jari 732                 i + 1, ((Float) meanProfile.elementAt(i + 1)).floatValue(), Color.blue);                
2 26 Feb 07 jari 733                 profileDisplayPanel.addGraphElement(gL);                
2 26 Feb 07 jari 734             }            
2 26 Feb 07 jari 735                         
2 26 Feb 07 jari 736             if(setTemplate){                
2 26 Feb 07 jari 737                                 
2 26 Feb 07 jari 738                 for (int i = 0; i < meanProfile.size() - 1; i++) {                    
2 26 Feb 07 jari 739                     if ((Float.isNaN(((Float) meanProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) meanProfile.elementAt(i+1)).floatValue()))) {                        
2 26 Feb 07 jari 740                         continue;                        
2 26 Feb 07 jari 741                     }                    
2 26 Feb 07 jari 742                     gL = new GraphLine(i /*+ 1*/, ((Float) meanProfile.elementAt(i)).floatValue(),                    
2 26 Feb 07 jari 743                     i + 1, ((Float) meanProfile.elementAt(i + 1)).floatValue(), Color.green);                    
2 26 Feb 07 jari 744                     profileDisplayPanel.addGraphElement(gL);                    
2 26 Feb 07 jari 745                 }                
2 26 Feb 07 jari 746             }            
2 26 Feb 07 jari 747             profileDisplayPanel.repaint();            
2 26 Feb 07 jari 748         }        
2 26 Feb 07 jari 749                 
2 26 Feb 07 jari 750         public void reset(){            
2 26 Feb 07 jari 751             clusterList.setSelectedIndex(0);            
2 26 Feb 07 jari 752             setTemplate = false;            
2 26 Feb 07 jari 753             refreshGraph();            
2 26 Feb 07 jari 754         }        
2 26 Feb 07 jari 755                 
2 26 Feb 07 jari 756     }    
2 26 Feb 07 jari 757         
2 26 Feb 07 jari 758     /*     
2 26 Feb 07 jari 759     class AbsolutePanel extends JPanel {     
2 26 Feb 07 jari 760           
2 26 Feb 07 jari 761         JCheckBox absBox;     
2 26 Feb 07 jari 762         JLabel absLabel1;     
2 26 Feb 07 jari 763         JLabel absLabel2;     
2 26 Feb 07 jari 764           
2 26 Feb 07 jari 765         AbsolutePanel() {     
2 26 Feb 07 jari 766           
2 26 Feb 07 jari 767             GridBagLayout gridbag = new GridBagLayout();          
2 26 Feb 07 jari 768             GridBagLayout gridbag2 = new GridBagLayout();     
2 26 Feb 07 jari 769             GridBagConstraints constraints = new GridBagConstraints();     
2 26 Feb 07 jari 770             constraints.fill = GridBagConstraints.NONE;     
2 26 Feb 07 jari 771             //constraints.anchor = GridBagConstraints.WEST;     
2 26 Feb 07 jari 772             this.setLayout(gridbag);     
2 26 Feb 07 jari 773           
2 26 Feb 07 jari 774             buildConstraints(constraints, 0, 0, 1, 2, 30, 0);     
2 26 Feb 07 jari 775             absBox = new JCheckBox(" Match to Absolute R");     
2 26 Feb 07 jari 776             gridbag.setConstraints(absBox, constraints);     
2 26 Feb 07 jari 777             this.add(absBox);     
2 26 Feb 07 jari 778           
2 26 Feb 07 jari 779             JPanel tipPanel = new JPanel();     
2 26 Feb 07 jari 780             tipPanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Tip on Using Absolute R"));     
2 26 Feb 07 jari 781            // tipPanel.setLayout(gridbag2);     
2 26 Feb 07 jari 782           
2 26 Feb 07 jari 783             JTextArea text = new JTextArea("If checked, both positively and negatively correlated profiles\n"+     
2 26 Feb 07 jari 784                                             "will be matched.\n"+     
2 26 Feb 07 jari 785                                             "If not checked, only negatively correlated profiles will be matched");     
2 26 Feb 07 jari 786             text.setBackground(new Color(208,208,208));     
2 26 Feb 07 jari 787           
2 26 Feb 07 jari 788             text.setFont(new Font("Dialog", Font.PLAIN, 12));     
2 26 Feb 07 jari 789          //   buildConstraints(constraints, 0, 0, 1, 1, 70, 50);     
2 26 Feb 07 jari 790          //   absLabel1 = new JLabel("Yes: both +vely and -vely correlated expression profiles will be matched");     
2 26 Feb 07 jari 791         //    constraints.anchor = GridBagConstraints.WEST;     
2 26 Feb 07 jari 792           //  gridbag2.setConstraints(absLabel1, constraints);     
2 26 Feb 07 jari 793           //  tipPanel.add(absLabel1);     
2 26 Feb 07 jari 794           
2 26 Feb 07 jari 795           //  buildConstraints(constraints, 0, 1, 1, 1, 0, 50);     
2 26 Feb 07 jari 796          //   absLabel2 = new JLabel("No: only +vely correlated expression profiles will be matched");     
2 26 Feb 07 jari 797           //  constraints.anchor = GridBagConstraints.NORTHWEST;     
2 26 Feb 07 jari 798          //   gridbag2.setConstraints(absLabel2, constraints);     
2 26 Feb 07 jari 799          //   tipPanel.add(absLabel2);     
2 26 Feb 07 jari 800             tipPanel.add(text);
2 26 Feb 07 jari 801           
2 26 Feb 07 jari 802           
2 26 Feb 07 jari 803                  buildConstraints(constraints, 1, 0, 1, 2, 30, 0);     
2 26 Feb 07 jari 804             gridbag.setConstraints(tipPanel, constraints);     
2 26 Feb 07 jari 805             this.add(tipPanel);     
2 26 Feb 07 jari 806         }     
2 26 Feb 07 jari 807           
2 26 Feb 07 jari 808     }*/       
2 26 Feb 07 jari 809         
2 26 Feb 07 jari 810         
2 26 Feb 07 jari 811     class SavedTemplateSelector extends JPanel{        
2 26 Feb 07 jari 812         JList templateList;        
2 26 Feb 07 jari 813         GraphCanvas profileDisplayPanel;        
2 26 Feb 07 jari 814         JScrollPane listScrollPane;        
2 26 Feb 07 jari 815         JButton selectButton;        
2 26 Feb 07 jari 816         JButton loadButton;        
2 26 Feb 07 jari 817         Vector templatesVector = new Vector();        
2 26 Feb 07 jari 818         DefaultListModel listModel;        
2 26 Feb 07 jari 819                 
2 26 Feb 07 jari 820         Vector templates;        
2 26 Feb 07 jari 821                 
2 26 Feb 07 jari 822         JSplitPane templateSplitPane;        
2 26 Feb 07 jari 823         JPanel templateButtonPanel;        
2 26 Feb 07 jari 824         boolean savedTemplateSelected;        
2 26 Feb 07 jari 825                 
2 26 Feb 07 jari 826         SavedTemplateSelector() {            
2 26 Feb 07 jari 827                         
2 26 Feb 07 jari 828             listModel = new DefaultListModel();            
2 26 Feb 07 jari 829                         
2 26 Feb 07 jari 830             //            
2 26 Feb 07 jari 831             //templates = new Vector();            
2 26 Feb 07 jari 832             //for(int i = 0; i < templateArray.length; i++) {            
2 26 Feb 07 jari 833             //  templates.add(templateArray[i]);            
2 26 Feb 07 jari 834             //}            
2 26 Feb 07 jari 835             //            
2 26 Feb 07 jari 836                         
2 26 Feb 07 jari 837             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 838             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 839             //constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 840             this.setLayout(gridbag);            
2 26 Feb 07 jari 841                         
2 26 Feb 07 jari 842             templateList = new JList(listModel);            
2 26 Feb 07 jari 843             templateList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            
2 26 Feb 07 jari 844             templateList.setSelectedIndex(-1);            
2 26 Feb 07 jari 845                         
2 26 Feb 07 jari 846             //AIS -- Use the graph classes            
2 26 Feb 07 jari 847             profileDisplayPanel = new GraphCanvas();            
2 26 Feb 07 jari 848             profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);            
2 26 Feb 07 jari 849             profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);            
2 26 Feb 07 jari 850             profileDisplayPanel.setXAxisValue(0);            
2 26 Feb 07 jari 851             profileDisplayPanel.setYAxisValue(0);            
2 26 Feb 07 jari 852                         
2 26 Feb 07 jari 853             templateList.addListSelectionListener(new ListSelectionListener(){                
2 26 Feb 07 jari 854                 public void valueChanged(ListSelectionEvent e) {                    
2 26 Feb 07 jari 855                     if(templatesVector.size() > 0){                        
2 26 Feb 07 jari 856                         Vector temp = (Vector)templatesVector.elementAt(templateList.getSelectedIndex());                        
2 26 Feb 07 jari 857                         if(temp.size() == numberOfExperiments){                            
2 26 Feb 07 jari 858                             tempPanel.setVisible(true);                            
2 26 Feb 07 jari 859                             tempPanel.setEnabled(true);                            
2 26 Feb 07 jari 860                         } else {                            
2 26 Feb 07 jari 861                             tempPanel.setVisible(false);                            
2 26 Feb 07 jari 862                             tempPanel.setEnabled(false);                            
2 26 Feb 07 jari 863                         }                        
2 26 Feb 07 jari 864                     }                    
2 26 Feb 07 jari 865                     savedTemplateSelected = false;                    
2 26 Feb 07 jari 866                     refreshGraph();                    
2 26 Feb 07 jari 867                 }                
2 26 Feb 07 jari 868             });            
2 26 Feb 07 jari 869             //-- AIS            
2 26 Feb 07 jari 870                         
2 26 Feb 07 jari 871             //uniqueIDList.addListSelectionListener(new listSelectionListener(){}); //IMPLEMENT THIS LATER            
2 26 Feb 07 jari 872                         
2 26 Feb 07 jari 873             listScrollPane = new JScrollPane(templateList);           
2 26 Feb 07 jari 874                         
2 26 Feb 07 jari 875             //profileDisplayPanel = new JPanel();            
2 26 Feb 07 jari 876             templateSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);            
2 26 Feb 07 jari 877             templateSplitPane.setOneTouchExpandable(true);            
2 26 Feb 07 jari 878             templateSplitPane.setDividerLocation(200);            
2 26 Feb 07 jari 879                         
2 26 Feb 07 jari 880             Dimension minimumSize = new Dimension(100,50);            
2 26 Feb 07 jari 881             templateList.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 882             profileDisplayPanel.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 883                         
2 26 Feb 07 jari 884             templateSplitPane.setPreferredSize(new Dimension(700,150));            
2 26 Feb 07 jari 885                         
2 26 Feb 07 jari 886             buildConstraints(constraints, 0, 0, 1, 1, 1, 1);            
2 26 Feb 07 jari 887                         
2 26 Feb 07 jari 888             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 889             constraints.anchor = GridBagConstraints.CENTER;            
2 26 Feb 07 jari 890             constraints.insets = new Insets(5,5,5,5);            
2 26 Feb 07 jari 891             gridbag.setConstraints(templateSplitPane, constraints);            
2 26 Feb 07 jari 892             this.add(templateSplitPane);            
2 26 Feb 07 jari 893                         
2 26 Feb 07 jari 894             loadButton = new JButton("Load saved template", GUIFactory.getIcon("Open24.gif"));            
2 26 Feb 07 jari 895             loadButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 896             loadButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 897             loadButton.setFocusPainted(false);            
2 26 Feb 07 jari 898             loadButton.setPreferredSize(new Dimension(200, 30));            
2 26 Feb 07 jari 899             loadButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 900                 public void actionPerformed(ActionEvent evt) {                    
2 26 Feb 07 jari 901                     if (evt.getSource() == loadButton) {                        
2 26 Feb 07 jari 902                         JFileChooser fc = new JFileChooser(TMEV.getFile("data/"));                        
2 26 Feb 07 jari 903                                                 
2 26 Feb 07 jari 904                         int returnVal = fc.showOpenDialog(SavedTemplateSelector.this);                        
2 26 Feb 07 jari 905                         if (returnVal == JFileChooser.APPROVE_OPTION) {                            
2 26 Feb 07 jari 906                             //     listModel.removeAllElements();                            
2 26 Feb 07 jari 907                             File file = fc.getSelectedFile();                            
2 26 Feb 07 jari 908                             try {                                
2 26 Feb 07 jari 909                                 //  DataInputStream in = new DataInputStream(new FileInputStream(file.getPath()));                                
2 26 Feb 07 jari 910                                 BufferedReader br = new BufferedReader(new java.io.FileReader(file.getPath()));                                
2 26 Feb 07 jari 911                                 try {                                    
2 26 Feb 07 jari 912                                     //*****READING OF INPUT DATA TAKES PLACE IN THIS BLOCK                                    
2 26 Feb 07 jari 913                                     //  templatesVector = new Vector();                                    
2 26 Feb 07 jari 914                                     int index = templatesVector.size();                                    
2 26 Feb 07 jari 915                                     String value;                                    
2 26 Feb 07 jari 916                                     Vector currentTemplate = new Vector();                                    
2 26 Feb 07 jari 917                                     while ((value = br.readLine())!= null) {                                        
2 26 Feb 07 jari 918                                         currentTemplate.add(new Float((value)));                                        
2 26 Feb 07 jari 919                                     }                                    
2 26 Feb 07 jari 920                                     listModel.addElement(file.getName());                                    
2 26 Feb 07 jari 921                                     templatesVector.add(currentTemplate);                                    
2 26 Feb 07 jari 922                                     templateList.setSelectedIndex(templatesVector.size()-1);                                    
2 26 Feb 07 jari 923                                     br.close();                                    
2 26 Feb 07 jari 924                                     refreshGraph();                                    
2 26 Feb 07 jari 925                                     profileDisplayPanel.setGraphBounds(0, currentTemplate.size(), -3, 3);                                    
2 26 Feb 07 jari 926                                 } catch (EOFException exc) {                                    
2 26 Feb 07 jari 927                                     br.close();                                    
2 26 Feb 07 jari 928                                 }                                
2 26 Feb 07 jari 929                             } catch (IOException e){                                
2 26 Feb 07 jari 930                                 System.out.println("Error: " + e.toString());                                
2 26 Feb 07 jari 931                                 JOptionPane.showMessageDialog(null, e.toString());                                
2 26 Feb 07 jari 932                             }                            
2 26 Feb 07 jari 933                         }                        
2 26 Feb 07 jari 934                     }                    
2 26 Feb 07 jari 935                 }                
2 26 Feb 07 jari 936             });            
2 26 Feb 07 jari 937                         
2 26 Feb 07 jari 938             selectButton = new JButton("Select Displayed Template", GUIFactory.getIcon("select_check24.gif"));            
2 26 Feb 07 jari 939             selectButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 940             selectButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 941             selectButton.setFocusPainted(false);            
2 26 Feb 07 jari 942             selectButton.setPreferredSize(new Dimension(200, 30));            
2 26 Feb 07 jari 943             selectButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 944                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 945                     if (listModel.size() == 0){                        
2 26 Feb 07 jari 946                         JOptionPane.showMessageDialog(null, "No templates to select");                        
2 26 Feb 07 jari 947                     } else {                        
2 26 Feb 07 jari 948                         savedTemplateSelected = true;                        
2 26 Feb 07 jari 949                         int index = templateList.getSelectedIndex();                        
2 26 Feb 07 jari 950                         Vector expProfile = (Vector) ((Vector) templatesVector.get(index)).clone();                        
2 26 Feb 07 jari 951                                                 
2 26 Feb 07 jari 952                         float max = getMax(expProfile);                        
2 26 Feb 07 jari 953                         float min = getMin(expProfile);                        
2 26 Feb 07 jari 954                                                 
2 26 Feb 07 jari 955                         if ((max - min) == 0) {                                                        
2 26 Feb 07 jari 956                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 957                                 expProfile.set(i, new Float(0.5));                                
2 26 Feb 07 jari 958                             }                            
2 26 Feb 07 jari 959                                                         
2 26 Feb 07 jari 960                         } else {                            
2 26 Feb 07 jari 961                                                         
2 26 Feb 07 jari 962                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 963                                 float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);                                
2 26 Feb 07 jari 964                                 expProfile.set(i, new Float(f));                                
2 26 Feb 07 jari 965                             }                            
2 26 Feb 07 jari 966                         }                        
2 26 Feb 07 jari 967                         if(expProfile.size() == numberOfExperiments){                            
2 26 Feb 07 jari 968                             clusterGenes = true;                            
2 26 Feb 07 jari 969                             for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){                                
2 26 Feb 07 jari 970                                 tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));                                
2 26 Feb 07 jari 971                                 tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());                                
2 26 Feb 07 jari 972                             }                            
2 26 Feb 07 jari 973                         }                        
2 26 Feb 07 jari 974                         else{                            
2 26 Feb 07 jari 975                             clusterGenes = false;                            
2 26 Feb 07 jari 976                             template = expProfile;                            
2 26 Feb 07 jari 977                         }                        
2 26 Feb 07 jari 978                     }                    
2 26 Feb 07 jari 979                     refreshGraph();                    
2 26 Feb 07 jari 980                 }                
2 26 Feb 07 jari 981                                 
2 26 Feb 07 jari 982             });            
2 26 Feb 07 jari 983                         
2 26 Feb 07 jari 984             gridbag.setConstraints(selectButton, constraints);            
2 26 Feb 07 jari 985             this.add(selectButton);            
2 26 Feb 07 jari 986             buildConstraints(constraints, 0, 1, 1, 1, 0, 0);            
2 26 Feb 07 jari 987             templateButtonPanel = new JPanel();            
2 26 Feb 07 jari 988             templateButtonPanel.add(loadButton);            
2 26 Feb 07 jari 989             templateButtonPanel.add(selectButton);            
2 26 Feb 07 jari 990             gridbag.setConstraints(templateButtonPanel, constraints);            
2 26 Feb 07 jari 991             this.add(templateButtonPanel);            
2 26 Feb 07 jari 992             refreshGraph();            
2 26 Feb 07 jari 993                         
2 26 Feb 07 jari 994         }        
2 26 Feb 07 jari 995                 
2 26 Feb 07 jari 996         private void refreshGraph() {            
2 26 Feb 07 jari 997             float maxRange;            
2 26 Feb 07 jari 998             float min = Float.POSITIVE_INFINITY;            
2 26 Feb 07 jari 999             float max = Float.NEGATIVE_INFINITY;            
2 26 Feb 07 jari 1000             int index = templateList.getSelectedIndex();            
2 26 Feb 07 jari 1001             Color lineColor = Color.blue;            
2 26 Feb 07 jari 1002             if(savedTemplateSelected == true)                
2 26 Feb 07 jari 1003                 lineColor = Color.green;            
2 26 Feb 07 jari 1004                         
2 26 Feb 07 jari 1005             if (index < 0) return;            
2 26 Feb 07 jari 1006             Vector expProfile = (Vector) ((Vector) templatesVector.get(index)).clone();            
2 26 Feb 07 jari 1007                         
2 26 Feb 07 jari 1008             max = Math.max(max, getMax(expProfile));            
2 26 Feb 07 jari 1009             min = Math.min(min, getMin(expProfile));            
2 26 Feb 07 jari 1010             maxRange = Math.max(max, Math.abs(min));            
2 26 Feb 07 jari 1011             profileDisplayPanel.setGraphBounds(0,expProfile.size(),-maxRange,maxRange);            
2 26 Feb 07 jari 1012                         
2 26 Feb 07 jari 1013             profileDisplayPanel.removeAllGraphElements();            
2 26 Feb 07 jari 1014             for (int i = 0; i < expProfile.size(); i++) {                
2 26 Feb 07 jari 1015                 GraphPoint gp = new GraphPoint(i + 1, ((Float) expProfile.elementAt(i)).floatValue(), Color.red, 2);                
2 26 Feb 07 jari 1016                 profileDisplayPanel.addGraphElement(gp);                
2 26 Feb 07 jari 1017             }            
2 26 Feb 07 jari 1018                         
2 26 Feb 07 jari 1019             for (int i = 0; i < expProfile.size() - 1; i++) {                
2 26 Feb 07 jari 1020                 GraphLine gl = new GraphLine(i + 1, ((Float) expProfile.elementAt(i)).floatValue(),                
2 26 Feb 07 jari 1021                 i + 2, ((Float) expProfile.elementAt(i + 1)).floatValue(), lineColor);                
2 26 Feb 07 jari 1022                 profileDisplayPanel.addGraphElement(gl);                
2 26 Feb 07 jari 1023             }            
2 26 Feb 07 jari 1024                         
2 26 Feb 07 jari 1025             profileDisplayPanel.repaint();            
2 26 Feb 07 jari 1026         }        
2 26 Feb 07 jari 1027                 
2 26 Feb 07 jari 1028         public void reset(){            
2 26 Feb 07 jari 1029             savedTemplateSelected = false;            
2 26 Feb 07 jari 1030             refreshGraph();            
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         
2 26 Feb 07 jari 1037     class ThresholdPanel extends JPanel {        
2 26 Feb 07 jari 1038                 
2 26 Feb 07 jari 1039         JLabel threshLabel1;        
2 26 Feb 07 jari 1040         JLabel threshLabel2;        
2 26 Feb 07 jari 1041         JTextField threshInputField;        
2 26 Feb 07 jari 1042         JRadioButton chooseR;        
2 26 Feb 07 jari 1043         JRadioButton chooseP;        
2 26 Feb 07 jari 1044         JCheckBox useAbsolute;        
2 26 Feb 07 jari 1045         JLabel inputLabel;        
2 26 Feb 07 jari 1046                 
2 26 Feb 07 jari 1047         ThresholdPanel() {            
2 26 Feb 07 jari 1048                         
2 26 Feb 07 jari 1049             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 1050             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 1051             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1052             constraints.insets = new Insets(10, 30, 10, 0);            
2 26 Feb 07 jari 1053             this.setLayout(gridbag);            
2 26 Feb 07 jari 1054             this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Threshold Parameters"));            
2 26 Feb 07 jari 1055                         
2 26 Feb 07 jari 1056                         
2 26 Feb 07 jari 1057             useAbsolute = new JCheckBox("Use Absolute R");            
2 26 Feb 07 jari 1058             useAbsolute.setFocusPainted(false);            
2 26 Feb 07 jari 1059             buildConstraints(constraints, 0, 0, 3, 1, 0, 0);            
2 26 Feb 07 jari 1060             constraints.anchor = GridBagConstraints.WEST;            
2 26 Feb 07 jari 1061             gridbag.setConstraints(useAbsolute, constraints);            
2 26 Feb 07 jari 1062             this.add(useAbsolute);            
2 26 Feb 07 jari 1063                         
2 26 Feb 07 jari 1064             constraints.insets = new Insets(0, 30, 0, 0);           
2 26 Feb 07 jari 1065                         
2 26 Feb 07 jari 1066             ButtonGroup chooseRorP = new ButtonGroup();            
2 26 Feb 07 jari 1067             chooseR = new JRadioButton("Use Threshold R",false);            
2 26 Feb 07 jari 1068             chooseR.setFocusPainted(false);            
2 26 Feb 07 jari 1069             chooseRorP.add(chooseR);            
2 26 Feb 07 jari 1070             chooseP = new JRadioButton("Use Threshold p-Value",true);            
2 26 Feb 07 jari 1071             chooseP.setFocusPainted(false);            
2 26 Feb 07 jari 1072             chooseRorP.add(chooseP);            
2 26 Feb 07 jari 1073                         
2 26 Feb 07 jari 1074             buildConstraints(constraints, 0, 1, 1, 1, 10, 0);            
2 26 Feb 07 jari 1075             //constraints.anchor = GridBagConstraints.WEST;            
2 26 Feb 07 jari 1076             //constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1077             gridbag.setConstraints(chooseR, constraints);            
2 26 Feb 07 jari 1078             this.add(chooseR);            
2 26 Feb 07 jari 1079                         
2 26 Feb 07 jari 1080             buildConstraints(constraints, 0, 2, 1, 1, 0, 0);            
2 26 Feb 07 jari 1081             // constraints.anchor = GridBagConstraints.WEST;            
2 26 Feb 07 jari 1082             gridbag.setConstraints(chooseP, constraints);            
2 26 Feb 07 jari 1083             this.add(chooseP);            
2 26 Feb 07 jari 1084                         
2 26 Feb 07 jari 1085             buildConstraints(constraints, 1, 0, 1, 1, 80, 0);            
2 26 Feb 07 jari 1086             threshLabel1 = new JLabel("Enter magnitude of threshold R or p-Value (between 0 and 1 inclusive)");            
2 26 Feb 07 jari 1087             buildConstraints(constraints, 1, 1, 1, 1, 0, 0);            
2 26 Feb 07 jari 1088             threshLabel2 = new JLabel("at which selected profiles should be correlated to template");            
2 26 Feb 07 jari 1089             constraints.insets = new Insets(15, 5, 0, 0);            
2 26 Feb 07 jari 1090                         
2 26 Feb 07 jari 1091             JPanel thresholdInputPanel = new JPanel(new GridBagLayout());           
2 26 Feb 07 jari 1092                         
2 26 Feb 07 jari 1093             //            buildConstraints(constraints, 1, 0, 1, 3, 10, 0);            
2 26 Feb 07 jari 1094             inputLabel = new JLabel("Enter p-value [0,1] :");            
2 26 Feb 07 jari 1095             inputLabel.setForeground(Color.black);            
2 26 Feb 07 jari 1096             inputLabel.setAlignmentX(JLabel.RIGHT_ALIGNMENT);            
2 26 Feb 07 jari 1097             inputLabel.setSize(150, 40);            
2 26 Feb 07 jari 1098             inputLabel.setMinimumSize( new Dimension(150,40));            
2 26 Feb 07 jari 1099             gridbag.setConstraints(inputLabel, constraints);            
2 26 Feb 07 jari 1100             thresholdInputPanel.add(inputLabel, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0));            
2 26 Feb 07 jari 1101                         
2 26 Feb 07 jari 1102             chooseR.addChangeListener(new ChangeListener(){                
2 26 Feb 07 jari 1103                                 
2 26 Feb 07 jari 1104                 public void stateChanged(ChangeEvent evt){                    
2 26 Feb 07 jari 1105                     if(chooseR.isSelected())                        
2 26 Feb 07 jari 1106                         inputLabel.setText("Enter R [0,1] :");                    
2 26 Feb 07 jari 1107                     else                        
2 26 Feb 07 jari 1108                         inputLabel.setText("Enter p-value [0,1] :");                    
2 26 Feb 07 jari 1109                 }                
2 26 Feb 07 jari 1110                                 
2 26 Feb 07 jari 1111             });            
2 26 Feb 07 jari 1112                         
2 26 Feb 07 jari 1113             threshInputField = new JTextField("", 7);            
2 26 Feb 07 jari 1114             threshInputField.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 1115                 public void actionPerformed(ActionEvent evt) {                    
2 26 Feb 07 jari 1116                                         
2 26 Feb 07 jari 1117                     if(evt.getSource() == threshInputField){                        
2 26 Feb 07 jari 1118                         try {                            
2 26 Feb 07 jari 1119                             String s = threshInputField.getText();                            
2 26 Feb 07 jari 1120                             double r = Double.parseDouble(s);                            
2 26 Feb 07 jari 1121                             if ((r > 1)||(r < 0)) {                                
2 26 Feb 07 jari 1122                                 JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");                                
2 26 Feb 07 jari 1123                                 threshInputField.selectAll();                                
2 26 Feb 07 jari 1124                                 threshInputField.requestFocus();                                
2 26 Feb 07 jari 1125                             }                            
2 26 Feb 07 jari 1126                         } catch (Exception exc) {                            
2 26 Feb 07 jari 1127                             JOptionPane.showMessageDialog(null, "Input Format Error: Threshold R value must be between 0 and 1 (inclusive)");                            
2 26 Feb 07 jari 1128                             threshInputField.selectAll();                            
2 26 Feb 07 jari 1129                             threshInputField.requestFocus();                            
2 26 Feb 07 jari 1130                         }                        
2 26 Feb 07 jari 1131                                                 
2 26 Feb 07 jari 1132                     }                    
2 26 Feb 07 jari 1133                                         
2 26 Feb 07 jari 1134                 }                
2 26 Feb 07 jari 1135             });            
2 26 Feb 07 jari 1136                         
2 26 Feb 07 jari 1137             thresholdInputPanel.add(threshInputField, new GridBagConstraints(1,0,1,1,5,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,10,0,0),0,0));            
2 26 Feb 07 jari 1138                         
2 26 Feb 07 jari 1139             buildConstraints(constraints, 1, 0, 1, 3, 10, 0);            
2 26 Feb 07 jari 1140             constraints.anchor = GridBagConstraints.CENTER;            
2 26 Feb 07 jari 1141             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 1142                         
2 26 Feb 07 jari 1143             gridbag.setConstraints(thresholdInputPanel, constraints);            
2 26 Feb 07 jari 1144                         
2 26 Feb 07 jari 1145             this.add(thresholdInputPanel);            
2 26 Feb 07 jari 1146         }        
2 26 Feb 07 jari 1147                 
2 26 Feb 07 jari 1148     }        
2 26 Feb 07 jari 1149         
2 26 Feb 07 jari 1150         
2 26 Feb 07 jari 1151     class TemplatePanel extends JPanel {        
2 26 Feb 07 jari 1152                 
2 26 Feb 07 jari 1153         TemplateScroller tempScr;        
2 26 Feb 07 jari 1154                 
2 26 Feb 07 jari 1155         TemplatePanel() {            
2 26 Feb 07 jari 1156             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 1157             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 1158             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 1159             this.setLayout(gridbag);            
2 26 Feb 07 jari 1160                         
2 26 Feb 07 jari 1161             tempScr = new TemplateScroller();            
2 26 Feb 07 jari 1162             JScrollPane scroller = tempScr.createTemplateScroller();            
2 26 Feb 07 jari 1163             buildConstraints(constraints, 0, 0, 1, 1, 100, 95);            
2 26 Feb 07 jari 1164             gridbag.setConstraints(scroller, constraints);            
2 26 Feb 07 jari 1165             this.add(scroller);            
2 26 Feb 07 jari 1166                         
2 26 Feb 07 jari 1167             buildConstraints(constraints, 0, 1, 1, 1, 100, 5);            
2 26 Feb 07 jari 1168             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1169             setMaximumSize(new Dimension(600,100));            
2 26 Feb 07 jari 1170             setSize(600,100);            
2 26 Feb 07 jari 1171         }        
2 26 Feb 07 jari 1172                 
2 26 Feb 07 jari 1173         public void reset(){            
2 26 Feb 07 jari 1174             tempScr.reset();            
2 26 Feb 07 jari 1175         }        
2 26 Feb 07 jari 1176                 
2 26 Feb 07 jari 1177                 
2 26 Feb 07 jari 1178         class TemplateScroller extends JPanel {           
2 26 Feb 07 jari 1179                         
2 26 Feb 07 jari 1180             TemplateElementGrid[] tempGrid = new TemplateElementGrid[SampleNames.length];            
2 26 Feb 07 jari 1181                         
2 26 Feb 07 jari 1182             JScrollPane createTemplateScroller() {                
2 26 Feb 07 jari 1183                 GridBagLayout gridbag = new GridBagLayout();                
2 26 Feb 07 jari 1184                 GridBagConstraints constraints = new GridBagConstraints();                
2 26 Feb 07 jari 1185                 constraints.fill = GridBagConstraints.BOTH;                
2 26 Feb 07 jari 1186                 this.setLayout(gridbag);                
2 26 Feb 07 jari 1187                                 
2 26 Feb 07 jari 1188                 for (int i = 0; i < SampleNames.length; i++) {                    
2 26 Feb 07 jari 1189                     tempGrid[i] = new TemplateElementGrid(SampleNames[i]);                    
2 26 Feb 07 jari 1190                     buildConstraints(constraints, i, 0, 1, 1, 100, 100);                    
2 26 Feb 07 jari 1191                     gridbag.setConstraints(tempGrid[i], constraints);                    
2 26 Feb 07 jari 1192                     this.add(tempGrid[i]);                    
2 26 Feb 07 jari 1193                 }                
2 26 Feb 07 jari 1194                                 
2 26 Feb 07 jari 1195                 JScrollPane scroller = new JScrollPane(this);                
2 26 Feb 07 jari 1196                 scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);                
2 26 Feb 07 jari 1197                 scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);                
2 26 Feb 07 jari 1198                 return scroller;                
2 26 Feb 07 jari 1199             }            
2 26 Feb 07 jari 1200                         
2 26 Feb 07 jari 1201             public void reset(){                
2 26 Feb 07 jari 1202                 for(int i = 0; i < tempGrid.length; i++)                    
2 26 Feb 07 jari 1203                     tempGrid[i].reset();                
2 26 Feb 07 jari 1204             }            
2 26 Feb 07 jari 1205                         
2 26 Feb 07 jari 1206                         
2 26 Feb 07 jari 1207             class TemplateElementGrid extends JPanel {                
2 26 Feb 07 jari 1208                                 
2 26 Feb 07 jari 1209                 JLabel exptName;                
2 26 Feb 07 jari 1210                 JTextField templateField;                
2 26 Feb 07 jari 1211                 JSlider templateSlider;                
2 26 Feb 07 jari 1212                 JCheckBox activeBox;                
2 26 Feb 07 jari 1213                                 
2 26 Feb 07 jari 1214                 TemplateElementGrid(String SampleName) {                    
2 26 Feb 07 jari 1215                     GridBagLayout templateElement = new GridBagLayout();                    
2 26 Feb 07 jari 1216                     GridBagConstraints constraints = new GridBagConstraints();                    
2 26 Feb 07 jari 1217                     constraints.fill = GridBagConstraints.BOTH;                    
2 26 Feb 07 jari 1218                     this.setLayout(templateElement);                    
2 26 Feb 07 jari 1219                                         
2 26 Feb 07 jari 1220                     buildConstraints(constraints, 0, 0, 1, 1, 50, 10);                    
2 26 Feb 07 jari 1221                     exptName = new JLabel(SampleName, SwingConstants.CENTER);                    
2 26 Feb 07 jari 1222                     templateElement.setConstraints(exptName, constraints);                    
2 26 Feb 07 jari 1223                     this.add(exptName);                    
2 26 Feb 07 jari 1224                                         
2 26 Feb 07 jari 1225                     buildConstraints(constraints, 1, 0, 1, 1, 50, 0);                    
2 26 Feb 07 jari 1226                     activeBox = new JCheckBox();                    
2 26 Feb 07 jari 1227                     activeBox.setSelected(true);                    
2 26 Feb 07 jari 1228                     activeBox.addItemListener(new ItemListener() {                        
2 26 Feb 07 jari 1229                         public void itemStateChanged(ItemEvent e) {                            
2 26 Feb 07 jari 1230                             if (e.getStateChange() == ItemEvent.DESELECTED) {                                
2 26 Feb 07 jari 1231                                 //templateField.setText("NULL");                                
2 26 Feb 07 jari 1232                                 templateField.setBackground(Color.gray);                                
2 26 Feb 07 jari 1233                                 templateField.setEnabled(false);                                
2 26 Feb 07 jari 1234                                 templateSlider.setEnabled(false);                                
2 26 Feb 07 jari 1235                             }                            
2 26 Feb 07 jari 1236                                                         
2 26 Feb 07 jari 1237                             if (e.getStateChange() == ItemEvent.SELECTED) {                                
2 26 Feb 07 jari 1238                                 //templateField.setText("NULL");                                
2 26 Feb 07 jari 1239                                 templateField.setBackground(Color.white);                                
2 26 Feb 07 jari 1240                                 templateField.setEnabled(true);                                
2 26 Feb 07 jari 1241                                 templateSlider.setEnabled(true);                                
2 26 Feb 07 jari 1242                             }                            
2 26 Feb 07 jari 1243                                                         
2 26 Feb 07 jari 1244                         }                        
2 26 Feb 07 jari 1245                     });                    
2 26 Feb 07 jari 1246                     templateElement.setConstraints(activeBox, constraints);                    
2 26 Feb 07 jari 1247                     this.add(activeBox);                    
2 26 Feb 07 jari 1248                                         
2 26 Feb 07 jari 1249                     buildConstraints(constraints, 0, 1, 2, 1, 0, 5);                    
2 26 Feb 07 jari 1250                     templateField = new JTextField("0.5", 4);                    
2 26 Feb 07 jari 1251                     templateField.addActionListener(new ActionListener(){                        
2 26 Feb 07 jari 1252                         public void actionPerformed(ActionEvent e) {                            
2 26 Feb 07 jari 1253                             int sliderValue;                            
2 26 Feb 07 jari 1254                             if(e.getSource() == templateField){                                
2 26 Feb 07 jari 1255                                 try {                                    
2 26 Feb 07 jari 1256                                     String s = templateField.getText();                                    
2 26 Feb 07 jari 1257                                     double d = Double.parseDouble(s);                                    
2 26 Feb 07 jari 1258                                     sliderValue = (int)Math.floor(d*100);                                    
2 26 Feb 07 jari 1259                                     if ((d > 1)||(d < 0)) {                                        
2 26 Feb 07 jari 1260                                                                                 
2 26 Feb 07 jari 1261                                         sliderValue = 50;                                        
2 26 Feb 07 jari 1262                                         templateField.setText("0.5");                                        
2 26 Feb 07 jari 1263                                         JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                                        
2 26 Feb 07 jari 1264                                                                                 
2 26 Feb 07 jari 1265                                     }                                    
2 26 Feb 07 jari 1266                                 } catch (Exception exc) {                                    
2 26 Feb 07 jari 1267                                                                         
2 26 Feb 07 jari 1268                                     templateField.setText("0.5");                                    
2 26 Feb 07 jari 1269                                     sliderValue = 50;                                    
2 26 Feb 07 jari 1270                                     JOptionPane.showMessageDialog(null, "Input Format Error: Template values must be between 0 and 1 (inclusive)");                                    
2 26 Feb 07 jari 1271                                                                         
2 26 Feb 07 jari 1272                                 }                                
2 26 Feb 07 jari 1273                                                                 
2 26 Feb 07 jari 1274                                 templateSlider.setValue(sliderValue);                                
2 26 Feb 07 jari 1275                             }                            
2 26 Feb 07 jari 1276                                                         
2 26 Feb 07 jari 1277                         }                        
2 26 Feb 07 jari 1278                     });                    
2 26 Feb 07 jari 1279                                         
2 26 Feb 07 jari 1280                     templateField.addFocusListener(new FocusListener(){                        
2 26 Feb 07 jari 1281                         public void focusLost(FocusEvent e) {                            
2 26 Feb 07 jari 1282                             int sliderValue;                            
2 26 Feb 07 jari 1283                             if(e.getSource() == templateField){                                
2 26 Feb 07 jari 1284                                 try {                                    
2 26 Feb 07 jari 1285                                     String s = templateField.getText();                                    
2 26 Feb 07 jari 1286                                     double d = Double.parseDouble(s);                                    
2 26 Feb 07 jari 1287                                     sliderValue = (int)Math.floor(d*100);                                    
2 26 Feb 07 jari 1288                                     if ((d > 1)||(d < 0)) {                                        
2 26 Feb 07 jari 1289                                                                                 
2 26 Feb 07 jari 1290                                         sliderValue = 50;                                        
2 26 Feb 07 jari 1291                                         templateField.setText("0.5");                                        
2 26 Feb 07 jari 1292                                         JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                                        
2 26 Feb 07 jari 1293                                                                                 
2 26 Feb 07 jari 1294                                     }                                    
2 26 Feb 07 jari 1295                                 } catch (Exception exc) {                                    
2 26 Feb 07 jari 1296                                                                         
2 26 Feb 07 jari 1297                                     templateField.setText("0.5");                                    
2 26 Feb 07 jari 1298                                     sliderValue = 50;                                    
2 26 Feb 07 jari 1299                                     JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                                    
2 26 Feb 07 jari 1300                                                                         
2 26 Feb 07 jari 1301                                 }                                
2 26 Feb 07 jari 1302                                                                 
2 26 Feb 07 jari 1303                                 templateSlider.setValue(sliderValue);                                
2 26 Feb 07 jari 1304                             }                            
2 26 Feb 07 jari 1305                         }                        
2 26 Feb 07 jari 1306                                                 
2 26 Feb 07 jari 1307                                                 
2 26 Feb 07 jari 1308                         public void focusGained(FocusEvent e) {                            
2 26 Feb 07 jari 1309                         }                        
2 26 Feb 07 jari 1310                     });                    
2 26 Feb 07 jari 1311                                         
2 26 Feb 07 jari 1312                     templateElement.setConstraints(templateField, constraints);                    
2 26 Feb 07 jari 1313                     this.add(templateField);                    
2 26 Feb 07 jari 1314                                         
2 26 Feb 07 jari 1315                     buildConstraints(constraints, 0, 2, 2, 1, 0, 85);                    
2 26 Feb 07 jari 1316                     templateSlider = new JSlider(JSlider.VERTICAL, 0, 100, 50);  templateSlider.setPreferredSize(new Dimension(30,50));                    
2 26 Feb 07 jari 1317                     templateSlider.setMajorTickSpacing(20);                    
2 26 Feb 07 jari 1318                     templateSlider.setMinorTickSpacing(10);                    
2 26 Feb 07 jari 1319                     //templateSlider.setPaintTicks(true);                    
2 26 Feb 07 jari 1320                     Hashtable labelTable = new Hashtable();                    
2 26 Feb 07 jari 1321                     labelTable.put( new Integer( 0 ), new JLabel("Min") );                    
2 26 Feb 07 jari 1322                     labelTable.put( new Integer( 100 ), new JLabel("Max") );                    
2 26 Feb 07 jari 1323                     templateSlider.setLabelTable( labelTable );                    
2 26 Feb 07 jari 1324                     templateSlider.setPaintLabels(true);                    
2 26 Feb 07 jari 1325                     templateSlider.addChangeListener(new ChangeListener(){                        
2 26 Feb 07 jari 1326                         public void stateChanged(ChangeEvent e) {                            
2 26 Feb 07 jari 1327                             JSlider source = (JSlider)e.getSource();                            
2 26 Feb 07 jari 1328                             if (!source.getValueIsAdjusting()) {                                
2 26 Feb 07 jari 1329                                 int value = (int)source.getValue();                                
2 26 Feb 07 jari 1330                                                                 
2 26 Feb 07 jari 1331                                 if (value == 100) {                                    
2 26 Feb 07 jari 1332                                     templateField.setText("1.0"); //CLUMSY WAY OF DISPLAYING INTEGER AS DOUBLE? MAYBE CHANGE?                                    
2 26 Feb 07 jari 1333                                 } else if (value > 0 && value < 10) {                                    
2 26 Feb 07 jari 1334                                     templateField.setText("0.0" + value);                                    
2 26 Feb 07 jari 1335                                 } else {                                    
2 26 Feb 07 jari 1336                                     templateField.setText("0." + value);                                    
2 26 Feb 07 jari 1337                                 }                                
2 26 Feb 07 jari 1338                             }                            
2 26 Feb 07 jari 1339                         }                        
2 26 Feb 07 jari 1340                                                 
2 26 Feb 07 jari 1341                     });                    
2 26 Feb 07 jari 1342                     templateElement.setConstraints(templateSlider, constraints);                    
2 26 Feb 07 jari 1343                     this.add(templateSlider);                    
2 26 Feb 07 jari 1344                                         
2 26 Feb 07 jari 1345                                         
2 26 Feb 07 jari 1346                 }                
2 26 Feb 07 jari 1347                                 
2 26 Feb 07 jari 1348                 public void reset() {                    
2 26 Feb 07 jari 1349                     templateSlider.setValue(50);                    
2 26 Feb 07 jari 1350                     templateField.setText("0.5");                    
2 26 Feb 07 jari 1351                 }                
2 26 Feb 07 jari 1352             }            
2 26 Feb 07 jari 1353         }        
2 26 Feb 07 jari 1354     }    
2 26 Feb 07 jari 1355         
2 26 Feb 07 jari 1356         
2 26 Feb 07 jari 1357         
2 26 Feb 07 jari 1358     public Vector getTemplate() {        
2 26 Feb 07 jari 1359         Vector geneTemplate = new Vector();        
2 26 Feb 07 jari 1360         int paneIndex = tabbedPane.getSelectedIndex();        
2 26 Feb 07 jari 1361                 
2 26 Feb 07 jari 1362         //if a gene, gene cluster, or stored gene template        
2 26 Feb 07 jari 1363         if(paneIndex == 0 || paneIndex == 1 || ( paneIndex == 4 && tempPanel.isVisible() )){            
2 26 Feb 07 jari 1364                         
2 26 Feb 07 jari 1365             int numExp = this.expMatrix.getColumnDimension();            
2 26 Feb 07 jari 1366                         
2 26 Feb 07 jari 1367             for(int i = 0; i < numExp; i++) {                
2 26 Feb 07 jari 1368                 String s = tempPanel.tempScr.tempGrid[i].templateField.getText();                
2 26 Feb 07 jari 1369                 if (s.equals("NaN")||(s.equals("NULL"))||(!(tempPanel.tempScr.tempGrid[i].activeBox.isSelected()))) {                    
2 26 Feb 07 jari 1370                     geneTemplate.add(new Float(Float.NaN));                    
2 26 Feb 07 jari 1371                 } else {                    
2 26 Feb 07 jari 1372                     geneTemplate.add(new Float(s));                    
2 26 Feb 07 jari 1373                 }                
2 26 Feb 07 jari 1374             }            
2 26 Feb 07 jari 1375             return geneTemplate;            
2 26 Feb 07 jari 1376         }        
2 26 Feb 07 jari 1377         return template;        
2 26 Feb 07 jari 1378     }    
2 26 Feb 07 jari 1379         
2 26 Feb 07 jari 1380         
2 26 Feb 07 jari 1381         
2 26 Feb 07 jari 1382     public FloatMatrix convertTemplateVectorToFloatMatrix() {        
2 26 Feb 07 jari 1383         template = getTemplate();        
2 26 Feb 07 jari 1384         FloatMatrix templateMatrix = new FloatMatrix(1, template.size());        
2 26 Feb 07 jari 1385         for (int i = 0; i < template.size(); i++) {            
2 26 Feb 07 jari 1386             templateMatrix.A[0][i] = ((Float) (template.get(i))).floatValue();            
2 26 Feb 07 jari 1387         }        
2 26 Feb 07 jari 1388         return templateMatrix;        
2 26 Feb 07 jari 1389     }    
2 26 Feb 07 jari 1390         
2 26 Feb 07 jari 1391         
2 26 Feb 07 jari 1392     protected void fireOkButtonEvent() {        
2 26 Feb 07 jari 1393         templateMatrix = convertTemplateVectorToFloatMatrix();        
2 26 Feb 07 jari 1394         boolean absoluteSelected = thresh.useAbsolute.isSelected();        
2 26 Feb 07 jari 1395         boolean drawTreesSelected = drawTreesBox.isSelected();        
2 26 Feb 07 jari 1396         boolean rSelected = thresh.chooseR.isSelected();        
2 26 Feb 07 jari 1397         String s = thresh.threshInputField.getText();        
2 26 Feb 07 jari 1398         double threshR = Double.parseDouble(s);        
2 26 Feb 07 jari 1399                 
2 26 Feb 07 jari 1400         Hashtable hash = new Hashtable();        
2 26 Feb 07 jari 1401         hash.put(new String("drawTrees"), new Boolean(drawTreesSelected)); //Should be a checkbox in the init dialog        
2 26 Feb 07 jari 1402         hash.put(new String("useAbsolute"), new Boolean(absoluteSelected));        
2 26 Feb 07 jari 1403         hash.put(new String("useR"), new Boolean(rSelected));        
2 26 Feb 07 jari 1404         hash.put(new String("template"), getTemplate());        
2 26 Feb 07 jari 1405         hash.put(new String("thresholdR"), new Double(threshR));        
2 26 Feb 07 jari 1406                 
2 26 Feb 07 jari 1407         // fireEvent(new ActionInfoEvent(this, hash));        
2 26 Feb 07 jari 1408                 
2 26 Feb 07 jari 1409     }    
2 26 Feb 07 jari 1410         
2 26 Feb 07 jari 1411     public boolean isDrawTrees() {        
2 26 Feb 07 jari 1412         return drawTreesBox.isSelected();        
2 26 Feb 07 jari 1413     }    
2 26 Feb 07 jari 1414     
2 26 Feb 07 jari 1415     public boolean drawSigTreesOnly() {
2 26 Feb 07 jari 1416         return sigOnly.isSelected();
2 26 Feb 07 jari 1417     }    
2 26 Feb 07 jari 1418         
2 26 Feb 07 jari 1419     public boolean isUseAbsolute() {        
2 26 Feb 07 jari 1420         return thresh.useAbsolute.isSelected();        
2 26 Feb 07 jari 1421     }    
2 26 Feb 07 jari 1422         
2 26 Feb 07 jari 1423     public boolean isUseR() {        
2 26 Feb 07 jari 1424         return thresh.chooseR.isSelected();        
2 26 Feb 07 jari 1425     }    
2 26 Feb 07 jari 1426         
2 26 Feb 07 jari 1427     public FloatMatrix getTemplateMatrix() {        
2 26 Feb 07 jari 1428         return convertTemplateVectorToFloatMatrix();        
2 26 Feb 07 jari 1429     }    
2 26 Feb 07 jari 1430         
2 26 Feb 07 jari 1431     public double getThresholdR() {        
2 26 Feb 07 jari 1432         return Double.parseDouble(thresh.threshInputField.getText());        
2 26 Feb 07 jari 1433     }    
2 26 Feb 07 jari 1434         
2 26 Feb 07 jari 1435     public boolean isOkPressed() {return this.okPressed;}    
2 26 Feb 07 jari 1436         
2 26 Feb 07 jari 1437     protected class EventListener implements ActionListener {        
2 26 Feb 07 jari 1438                 
2 26 Feb 07 jari 1439         public void actionPerformed(ActionEvent event) {            
2 26 Feb 07 jari 1440                         
2 26 Feb 07 jari 1441             String command = event.getActionCommand();            
2 26 Feb 07 jari 1442             if (command.equals("ok-command")) {                
2 26 Feb 07 jari 1443                 try {                    
2 26 Feb 07 jari 1444                     String s = thresh.threshInputField.getText();                    
2 26 Feb 07 jari 1445                     double r = Double.parseDouble(s);                    
2 26 Feb 07 jari 1446                     if ((r > 1)||(r < 0)) {                        
2 26 Feb 07 jari 1447                         JOptionPane.showMessageDialog(null, "Threshold R value must be between 0 and 1 (inclusive)");                        
2 26 Feb 07 jari 1448                         thresh.threshInputField.selectAll();                        
2 26 Feb 07 jari 1449                         thresh.threshInputField.requestFocus();                        
2 26 Feb 07 jari 1450                     }                    
2 26 Feb 07 jari 1451                     else {                        
2 26 Feb 07 jari 1452                         okPressed = true;                        
2 26 Feb 07 jari 1453                         fireOkButtonEvent();                        
2 26 Feb 07 jari 1454                         setVisible(false);                        
2 26 Feb 07 jari 1455                     }                    
2 26 Feb 07 jari 1456                 } catch (Exception exc) {                    
2 26 Feb 07 jari 1457                     //  exc.printStackTrace();                    
2 26 Feb 07 jari 1458                     JOptionPane.showMessageDialog(null, "Input Format Error: Requires value between 0 and 1 (inclusive)");                    
2 26 Feb 07 jari 1459                     thresh.threshInputField.selectAll();                    
2 26 Feb 07 jari 1460                     thresh.threshInputField.requestFocus();                    
2 26 Feb 07 jari 1461                 }                
2 26 Feb 07 jari 1462             }            
2 26 Feb 07 jari 1463             else if (command.equals("reset-command")){                
2 26 Feb 07 jari 1464                 template = new Vector();                
2 26 Feb 07 jari 1465                 expSelectPanel.reset();                
2 26 Feb 07 jari 1466                 clusterSelectPanel.reset();                
2 26 Feb 07 jari 1467                 geneSelectPanel.reset();                
2 26 Feb 07 jari 1468                 geneClusterSelectPanel.reset();                
2 26 Feb 07 jari 1469                 tempPanel.reset();                
2 26 Feb 07 jari 1470                 templateSelectPanel.reset();                
2 26 Feb 07 jari 1471                 thresh.useAbsolute.setSelected(false);                
2 26 Feb 07 jari 1472                 thresh.chooseP.setSelected(true);                
2 26 Feb 07 jari 1473                 thresh.threshInputField.setText("0.01");                
2 26 Feb 07 jari 1474                 okPressed = false;                
2 26 Feb 07 jari 1475             }            
2 26 Feb 07 jari 1476             else if (command.equals("cancel-command")){                
2 26 Feb 07 jari 1477                 hide();                
2 26 Feb 07 jari 1478                 dispose();                
2 26 Feb 07 jari 1479             }            
2 26 Feb 07 jari 1480             else if (command.equals("info-command")){                
2 26 Feb 07 jari 1481                 HelpWindow hw = new HelpWindow(PTMInitDialog.this, "PTM Initialization Dialog");                
2 26 Feb 07 jari 1482                 if(hw.getWindowContent()){                    
2 26 Feb 07 jari 1483                     hw.setSize(450,650);                    
2 26 Feb 07 jari 1484                     hw.setLocation();                    
2 26 Feb 07 jari 1485                     hw.show();                    
2 26 Feb 07 jari 1486                 }                
2 26 Feb 07 jari 1487                 else {                    
2 26 Feb 07 jari 1488                     hw.setVisible(false);                    
2 26 Feb 07 jari 1489                     hw.dispose();                    
2 26 Feb 07 jari 1490                 }                
2 26 Feb 07 jari 1491             }            
2 26 Feb 07 jari 1492             else if (command.equals("save-template-command")){                
2 26 Feb 07 jari 1493                                 
2 26 Feb 07 jari 1494             }            
2 26 Feb 07 jari 1495         }        
2 26 Feb 07 jari 1496     }    
2 26 Feb 07 jari 1497         
2 26 Feb 07 jari 1498         
2 26 Feb 07 jari 1499     /*********************************************************************
2 26 Feb 07 jari 1500      *
2 26 Feb 07 jari 1501      *
2 26 Feb 07 jari 1502      *
2 26 Feb 07 jari 1503      *   Gene related code
2 26 Feb 07 jari 1504      *
2 26 Feb 07 jari 1505      *
2 26 Feb 07 jari 1506      *
2 26 Feb 07 jari 1507      *
2 26 Feb 07 jari 1508      *
2 26 Feb 07 jari 1509      */
2 26 Feb 07 jari 1510         
2 26 Feb 07 jari 1511     class GeneSelector extends JPanel{        
2 26 Feb 07 jari 1512         JList uniqueIDList;        
2 26 Feb 07 jari 1513         GraphCanvas profileDisplayPanel;        
2 26 Feb 07 jari 1514         JScrollPane listScrollPane;        
2 26 Feb 07 jari 1515         JButton selectButton;        
2 26 Feb 07 jari 1516         int maxIndex = -1;        
2 26 Feb 07 jari 1517         int minIndex = -1;        
2 26 Feb 07 jari 1518                 
2 26 Feb 07 jari 1519                 
2 26 Feb 07 jari 1520         JSplitPane uIDSplitPane;        
2 26 Feb 07 jari 1521                 
2 26 Feb 07 jari 1522         GeneSelector() {            
2 26 Feb 07 jari 1523                         
2 26 Feb 07 jari 1524             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 1525             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 1526             //constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1527             this.setLayout(gridbag);            
2 26 Feb 07 jari 1528                         
2 26 Feb 07 jari 1529             uniqueIDList = new JList(uniqueIDs);            
2 26 Feb 07 jari 1530             uniqueIDList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            
2 26 Feb 07 jari 1531             uniqueIDList.setSelectedIndex(0);            
2 26 Feb 07 jari 1532                         
2 26 Feb 07 jari 1533             //AIS -- Use the graph classes            
2 26 Feb 07 jari 1534             profileDisplayPanel = new GraphCanvas();            
2 26 Feb 07 jari 1535             profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);            
2 26 Feb 07 jari 1536             profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);            
2 26 Feb 07 jari 1537             profileDisplayPanel.setXAxisValue(0);            
2 26 Feb 07 jari 1538             profileDisplayPanel.setYAxisValue(0);            
2 26 Feb 07 jari 1539                         
2 26 Feb 07 jari 1540             uniqueIDList.addListSelectionListener(new ListSelectionListener(){                
2 26 Feb 07 jari 1541                 public void valueChanged(ListSelectionEvent e) {                    
2 26 Feb 07 jari 1542                     refreshGraph();                    
2 26 Feb 07 jari 1543                 }                
2 26 Feb 07 jari 1544             });            
2 26 Feb 07 jari 1545             //-- AIS            
2 26 Feb 07 jari 1546                         
2 26 Feb 07 jari 1547             listScrollPane = new JScrollPane(uniqueIDList);            
2 26 Feb 07 jari 1548                         
2 26 Feb 07 jari 1549             uIDSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);            
2 26 Feb 07 jari 1550             uIDSplitPane.setOneTouchExpandable(true);            
2 26 Feb 07 jari 1551             uIDSplitPane.setDividerLocation(200);            
2 26 Feb 07 jari 1552                         
2 26 Feb 07 jari 1553             Dimension minimumSize = new Dimension(100,50);            
2 26 Feb 07 jari 1554             uniqueIDList.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 1555             profileDisplayPanel.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 1556                         
2 26 Feb 07 jari 1557             //uIDSplitPane.setPreferredSize(new Dimension(700,150));            
2 26 Feb 07 jari 1558                         
2 26 Feb 07 jari 1559             buildConstraints(constraints, 0, 0, 1, 1, 1, 1);            
2 26 Feb 07 jari 1560             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 1561             constraints.anchor = GridBagConstraints.NORTH;            
2 26 Feb 07 jari 1562             gridbag.setConstraints(uIDSplitPane, constraints);            
2 26 Feb 07 jari 1563             this.add(uIDSplitPane);            
2 26 Feb 07 jari 1564                         
2 26 Feb 07 jari 1565             buildConstraints(constraints, 0, 1, 1, 1, 1, 0);            
2 26 Feb 07 jari 1566             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1567             constraints.anchor = GridBagConstraints.CENTER;            
2 26 Feb 07 jari 1568             constraints.insets = new Insets(10,10,10,10);            
2 26 Feb 07 jari 1569             selectButton = new JButton("Select highlighted gene from above list to use as template", GUIFactory.getIcon("select_check24.gif"));            
2 26 Feb 07 jari 1570             selectButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 1571             selectButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 1572             selectButton.setPreferredSize(new Dimension(400,30));            
2 26 Feb 07 jari 1573             selectButton.setFocusPainted(false);            
2 26 Feb 07 jari 1574                         
2 26 Feb 07 jari 1575             selectButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 1576                                 
2 26 Feb 07 jari 1577                                 
2 26 Feb 07 jari 1578                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 1579                     int index = uniqueIDList.getSelectedIndex();                    
2 26 Feb 07 jari 1580                     Vector expProfile = getGene(index);                    
2 26 Feb 07 jari 1581                     float max = getMax(expProfile);                    
2 26 Feb 07 jari 1582                     float min = getMin(expProfile);                    
2 26 Feb 07 jari 1583                                         
2 26 Feb 07 jari 1584                     if ((max - min) == 0) {                        
2 26 Feb 07 jari 1585                                                 
2 26 Feb 07 jari 1586                         for(int i = 0; i < expProfile.size(); i++) {                            
2 26 Feb 07 jari 1587                             expProfile.set(i, new Float(0.5));                            
2 26 Feb 07 jari 1588                         }                        
2 26 Feb 07 jari 1589                                                 
2 26 Feb 07 jari 1590                     } else {                        
2 26 Feb 07 jari 1591                                                 
2 26 Feb 07 jari 1592                         for(int i = 0; i < expProfile.size(); i++) {                            
2 26 Feb 07 jari 1593                             float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);                            
2 26 Feb 07 jari 1594                             expProfile.set(i, new Float(f));                            
2 26 Feb 07 jari 1595                         }                        
2 26 Feb 07 jari 1596                     }                    
2 26 Feb 07 jari 1597                                         
2 26 Feb 07 jari 1598                     for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){                        
2 26 Feb 07 jari 1599                         if (!Float.isNaN(((Float)expProfile.get(i)).floatValue())) {                            
2 26 Feb 07 jari 1600                             tempPanel.tempScr.tempGrid[i].activeBox.setSelected(true);                            
2 26 Feb 07 jari 1601                             tempPanel.tempScr.tempGrid[i].templateSlider.setEnabled(true);                            
2 26 Feb 07 jari 1602                             tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));                            
2 26 Feb 07 jari 1603                             tempPanel.tempScr.tempGrid[i].templateField.setEnabled(true);                            
2 26 Feb 07 jari 1604                             tempPanel.tempScr.tempGrid[i].templateField.setBackground(Color.white);                            
2 26 Feb 07 jari 1605                             tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());                            
2 26 Feb 07 jari 1606                         } else {                            
2 26 Feb 07 jari 1607                             tempPanel.tempScr.tempGrid[i].activeBox.setSelected(false);                            
2 26 Feb 07 jari 1608                             tempPanel.tempScr.tempGrid[i].templateSlider.setEnabled(false);                            
2 26 Feb 07 jari 1609                             tempPanel.tempScr.tempGrid[i].templateField.setText("NULL");                            
2 26 Feb 07 jari 1610                             tempPanel.tempScr.tempGrid[i].templateField.setBackground(Color.gray);                            
2 26 Feb 07 jari 1611                             tempPanel.tempScr.tempGrid[i].templateField.setEnabled(false);                            
2 26 Feb 07 jari 1612                         }                        
2 26 Feb 07 jari 1613                     }                    
2 26 Feb 07 jari 1614                     template = expProfile;                    
2 26 Feb 07 jari 1615                     setTemplate = true;                    
2 26 Feb 07 jari 1616                     clusterGenes = true;                    
2 26 Feb 07 jari 1617                     okButton.setEnabled(true);                    
2 26 Feb 07 jari 1618                 }                
2 26 Feb 07 jari 1619                                 
2 26 Feb 07 jari 1620             });            
2 26 Feb 07 jari 1621                         
2 26 Feb 07 jari 1622             gridbag.setConstraints(selectButton, constraints);            
2 26 Feb 07 jari 1623             this.add(selectButton);            
2 26 Feb 07 jari 1624             refreshGraph();            
2 26 Feb 07 jari 1625         }        
2 26 Feb 07 jari 1626                 
2 26 Feb 07 jari 1627         private void refreshGraph() {            
2 26 Feb 07 jari 1628                         
2 26 Feb 07 jari 1629             int index = uniqueIDList.getSelectedIndex();            
2 26 Feb 07 jari 1630             Vector expProfile = getGene(index);            
2 26 Feb 07 jari 1631             float max = getMax(expProfile);            
2 26 Feb 07 jari 1632             float min = getMin(expProfile);            
2 26 Feb 07 jari 1633             float maxRange = Math.max(max, Math.abs(min));            
2 26 Feb 07 jari 1634             profileDisplayPanel.removeAllGraphElements();            
2 26 Feb 07 jari 1635             profileDisplayPanel.setGraphBounds(0, expProfile.size(), -maxRange, maxRange);            
2 26 Feb 07 jari 1636                         
2 26 Feb 07 jari 1637             for (int i = 0; i < expProfile.size(); i++) {                
2 26 Feb 07 jari 1638                 if (!Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) {                    
2 26 Feb 07 jari 1639                     GraphPoint gp = new GraphPoint(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(), Color.red, 5);                    
2 26 Feb 07 jari 1640                     profileDisplayPanel.addGraphElement(gp);                    
2 26 Feb 07 jari 1641                 }                
2 26 Feb 07 jari 1642             }            
2 26 Feb 07 jari 1643                         
2 26 Feb 07 jari 1644             for (int i = 0; i < expProfile.size() - 1; i++) {                
2 26 Feb 07 jari 1645                 if ((Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) expProfile.elementAt(i+1)).floatValue()))) {                    
2 26 Feb 07 jari 1646                     continue;                    
2 26 Feb 07 jari 1647                 }                
2 26 Feb 07 jari 1648                 GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(),                
2 26 Feb 07 jari 1649                 i + 1, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.blue);                
2 26 Feb 07 jari 1650                 profileDisplayPanel.addGraphElement(gl);                
2 26 Feb 07 jari 1651                                 
2 26 Feb 07 jari 1652             }            
2 26 Feb 07 jari 1653                         
2 26 Feb 07 jari 1654             profileDisplayPanel.repaint();            
2 26 Feb 07 jari 1655         }        
2 26 Feb 07 jari 1656                 
2 26 Feb 07 jari 1657         public void reset(){            
2 26 Feb 07 jari 1658             uniqueIDList.setSelectedIndex(0);            
2 26 Feb 07 jari 1659             setTemplate = false;            
2 26 Feb 07 jari 1660             refreshGraph();            
2 26 Feb 07 jari 1661         }        
2 26 Feb 07 jari 1662     }    
2 26 Feb 07 jari 1663         
2 26 Feb 07 jari 1664     private Vector getGene(int index) {        
2 26 Feb 07 jari 1665         Vector gene = new Vector();      
2 26 Feb 07 jari 1666                 
2 26 Feb 07 jari 1667         for (int i = 0; i < sampleNamesVector.size(); i++) {            
2 26 Feb 07 jari 1668             gene.add(new Float(expMatrix.get(index, i)));            
2 26 Feb 07 jari 1669         }        
2 26 Feb 07 jari 1670                 
2 26 Feb 07 jari 1671         return gene;        
2 26 Feb 07 jari 1672     }    
2 26 Feb 07 jari 1673         
2 26 Feb 07 jari 1674         
2 26 Feb 07 jari 1675     class GeneClusterSelector extends JPanel {        
2 26 Feb 07 jari 1676         JList clusterList;        
2 26 Feb 07 jari 1677         GraphCanvas profileDisplayPanel;        
2 26 Feb 07 jari 1678         JScrollPane listScrollPane;        
2 26 Feb 07 jari 1679         JButton selectButton;        
2 26 Feb 07 jari 1680                 
2 26 Feb 07 jari 1681         Vector clusterNames; // JUST THE NAMES OF THE CLUSTERS, i.e., "CLUSTER 1", "CLUSTER 2", ETC.        
2 26 Feb 07 jari 1682         //Vector clusterContents; // THIS IS A VECTOR OF VECTORS (= THE INDICES OF THE UNIQUE IDS IN A CLUSTER)        
2 26 Feb 07 jari 1683         Vector geneDataInClusters; // THIS IS A VECTOR OF VECTORS ( = CLUSTERS) OF VECTORS ( = EXPRESSION PROFILES OF GENES IN THAT CLUSTER).        
2 26 Feb 07 jari 1684         Vector averageClusterProfiles;        
2 26 Feb 07 jari 1685                 
2 26 Feb 07 jari 1686         JSplitPane clusterSplitPane;        
2 26 Feb 07 jari 1687                 
2 26 Feb 07 jari 1688         GeneClusterSelector() {            
2 26 Feb 07 jari 1689                         
2 26 Feb 07 jari 1690             clusterNames = new Vector();            
2 26 Feb 07 jari 1691                         
2 26 Feb 07 jari 1692             if (clusters.size() == 0) {                
2 26 Feb 07 jari 1693                 clusterNames.add("No clusters to show");                
2 26 Feb 07 jari 1694             } else {                
2 26 Feb 07 jari 1695                                 
2 26 Feb 07 jari 1696                 for (int i = 0; i < clusters.size(); i++) {                    
2 26 Feb 07 jari 1697                     clusterNames.add("Cluster " + (i+1));                    
2 26 Feb 07 jari 1698                 }                
2 26 Feb 07 jari 1699                                 
2 26 Feb 07 jari 1700                 geneDataInClusters = new Vector();                
2 26 Feb 07 jari 1701                 averageClusterProfiles = new Vector();                
2 26 Feb 07 jari 1702                                 
2 26 Feb 07 jari 1703                 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 1704                     Vector currentCluster = (Vector)clusters.get(j);                    
2 26 Feb 07 jari 1705                                         
2 26 Feb 07 jari 1706                     for (int k = 0; k < currentCluster.size(); k++) {                        
2 26 Feb 07 jari 1707                         int index = ((Integer)currentCluster.get(k)).intValue();                        
2 26 Feb 07 jari 1708                         Vector currentGene = getGene(index);                        
2 26 Feb 07 jari 1709                         currentCluster.set(k, currentGene);                        
2 26 Feb 07 jari 1710                     }                    
2 26 Feb 07 jari 1711                                         
2 26 Feb 07 jari 1712                     geneDataInClusters.add(currentCluster);                    
2 26 Feb 07 jari 1713                                         
2 26 Feb 07 jari 1714                     Vector meanOfCurrentCluster = getMeanProfile(currentCluster);                    
2 26 Feb 07 jari 1715                                         
2 26 Feb 07 jari 1716                     averageClusterProfiles.add(meanOfCurrentCluster);                    
2 26 Feb 07 jari 1717                 }                
2 26 Feb 07 jari 1718             }            
2 26 Feb 07 jari 1719                         
2 26 Feb 07 jari 1720                         
2 26 Feb 07 jari 1721             GridBagLayout gridbag = new GridBagLayout();            
2 26 Feb 07 jari 1722             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 1723             //constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1724             this.setLayout(gridbag);            
2 26 Feb 07 jari 1725                         
2 26 Feb 07 jari 1726             clusterList = new JList(clusterNames);            
2 26 Feb 07 jari 1727             clusterList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            
2 26 Feb 07 jari 1728             clusterList.setSelectedIndex(0);            
2 26 Feb 07 jari 1729                         
2 26 Feb 07 jari 1730             //AIS -- Use the graph classes            
2 26 Feb 07 jari 1731             profileDisplayPanel = new GraphCanvas();            
2 26 Feb 07 jari 1732             profileDisplayPanel.setGraphBounds(0, sampleNamesVector.size(), -3, 3);            
2 26 Feb 07 jari 1733             profileDisplayPanel.setGraphSpacing(20, 20, 20, 20);            
2 26 Feb 07 jari 1734             profileDisplayPanel.setXAxisValue(0);            
2 26 Feb 07 jari 1735             profileDisplayPanel.setYAxisValue(0);            
2 26 Feb 07 jari 1736                         
2 26 Feb 07 jari 1737             clusterList.addListSelectionListener(new ListSelectionListener(){                
2 26 Feb 07 jari 1738                 public void valueChanged(ListSelectionEvent e) {                    
2 26 Feb 07 jari 1739                     refreshGraph();                    
2 26 Feb 07 jari 1740                 }                
2 26 Feb 07 jari 1741             });            
2 26 Feb 07 jari 1742             //-- AIS            
2 26 Feb 07 jari 1743                         
2 26 Feb 07 jari 1744             listScrollPane = new JScrollPane(clusterList);            
2 26 Feb 07 jari 1745                         
2 26 Feb 07 jari 1746             clusterSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, profileDisplayPanel);            
2 26 Feb 07 jari 1747             clusterSplitPane.setOneTouchExpandable(true);            
2 26 Feb 07 jari 1748             clusterSplitPane.setDividerLocation(200);            
2 26 Feb 07 jari 1749                         
2 26 Feb 07 jari 1750             Dimension minimumSize = new Dimension(100,50);            
2 26 Feb 07 jari 1751             clusterList.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 1752             profileDisplayPanel.setMinimumSize(minimumSize);            
2 26 Feb 07 jari 1753                         
2 26 Feb 07 jari 1754             //clusterSplitPane.setMinimumSize(new Dimension(700,150));            
2 26 Feb 07 jari 1755                         
2 26 Feb 07 jari 1756             buildConstraints(constraints, 0, 0, 1, 1, 1, 80);            
2 26 Feb 07 jari 1757             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 1758             gridbag.setConstraints(clusterSplitPane, constraints);            
2 26 Feb 07 jari 1759             this.add(clusterSplitPane);            
2 26 Feb 07 jari 1760                         
2 26 Feb 07 jari 1761             buildConstraints(constraints, 0, 1, 1, 1, 0, 20);            
2 26 Feb 07 jari 1762             constraints.fill = GridBagConstraints.NONE;            
2 26 Feb 07 jari 1763             //constraints.anchor = GridBagConstraints.WEST;            
2 26 Feb 07 jari 1764             selectButton = new JButton("Select highlighted cluster from above list to use its mean as template", GUIFactory.getIcon("select_check24.gif"));            
2 26 Feb 07 jari 1765             selectButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));            
2 26 Feb 07 jari 1766             selectButton.setMargin(new Insets(10,10,10,10));            
2 26 Feb 07 jari 1767             selectButton.setPreferredSize(new Dimension(430,30));            
2 26 Feb 07 jari 1768             selectButton.setFocusPainted(false);            
2 26 Feb 07 jari 1769                         
2 26 Feb 07 jari 1770             selectButton.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 1771                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 1772                     if (clusters.size() == 0){                        
2 26 Feb 07 jari 1773                         JOptionPane.showMessageDialog(null, "No clusters to select");                        
2 26 Feb 07 jari 1774                     } else {                        
2 26 Feb 07 jari 1775                         int index = clusterList.getSelectedIndex();                        
2 26 Feb 07 jari 1776                         Vector expProfile = (Vector) ((Vector) averageClusterProfiles.get(index)).clone();                        
2 26 Feb 07 jari 1777                         float max = getMax(expProfile);                        
2 26 Feb 07 jari 1778                         float min = getMin(expProfile);                        
2 26 Feb 07 jari 1779                                                 
2 26 Feb 07 jari 1780                         if ((max - min) == 0) {                            
2 26 Feb 07 jari 1781                                                         
2 26 Feb 07 jari 1782                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 1783                                 expProfile.set(i, new Float(0.5));                                
2 26 Feb 07 jari 1784                             }                            
2 26 Feb 07 jari 1785                                                         
2 26 Feb 07 jari 1786                         } else {                            
2 26 Feb 07 jari 1787                                                         
2 26 Feb 07 jari 1788                             for(int i = 0; i < expProfile.size(); i++) {                                
2 26 Feb 07 jari 1789                                 float f = (((Float)expProfile.get(i)).floatValue()- min)/(max - min);                                
2 26 Feb 07 jari 1790                                 expProfile.set(i, new Float(f));                                
2 26 Feb 07 jari 1791                             }                            
2 26 Feb 07 jari 1792                         }                        
2 26 Feb 07 jari 1793                                                 
2 26 Feb 07 jari 1794                         for(int i  = 0; i < tempPanel.tempScr.tempGrid.length; i++){                            
2 26 Feb 07 jari 1795                             tempPanel.tempScr.tempGrid[i].templateSlider.setValue((int) Math.floor(((Float)expProfile.get(i)).floatValue()*100));                            
2 26 Feb 07 jari 1796                             tempPanel.tempScr.tempGrid[i].templateField.setText("" + ((Float)expProfile.get(i)).floatValue());                            
2 26 Feb 07 jari 1797                         }                        
2 26 Feb 07 jari 1798                         if(setTemplate){                            
2 26 Feb 07 jari 1799                             for (int i = 0; i < expProfile.size() - 1; i++) {                                
2 26 Feb 07 jari 1800                                 if ((Float.isNaN(((Float) expProfile.elementAt(i)).floatValue())) || (Float.isNaN(((Float) expProfile.elementAt(i+1)).floatValue()))) {                                    
2 26 Feb 07 jari 1801                                     continue;                                    
2 26 Feb 07 jari 1802                                 }                                
2 26 Feb 07 jari 1803                                 GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) expProfile.elementAt(i)).floatValue(),                                
2 26 Feb 07 jari 1804                                 i + 1, ((Float) expProfile.elementAt(i + 1)).floatValue(), Color.green);                                
2 26 Feb 07 jari 1805                                 profileDisplayPanel.addGraphElement(gl);                                
2 26 Feb 07 jari 1806                             }                            
2 26 Feb 07 jari 1807                         }                        
2 26 Feb 07 jari 1808                         template = expProfile;                        
2 26 Feb 07 jari 1809                         setTemplate = true;                        
2 26 Feb 07 jari 1810                         clusterGenes = true;                        
2 26 Feb 07 jari 1811                         okButton.setEnabled(true);                        
2 26 Feb 07 jari 1812                     }                    
2 26 Feb 07 jari 1813                 }                
2 26 Feb 07 jari 1814             });            
2 26 Feb 07 jari 1815                         
2 26 Feb 07 jari 1816             gridbag.setConstraints(selectButton, constraints);            
2 26 Feb 07 jari 1817             this.add(selectButton);            
2 26 Feb 07 jari 1818             refreshGraph();            
2 26 Feb 07 jari 1819         }        
2 26 Feb 07 jari 1820                 
2 26 Feb 07 jari 1821         private void refreshGraph() {            
2 26 Feb 07 jari 1822                         
2 26 Feb 07 jari 1823             int index = clusterList.getSelectedIndex();            
2 26 Feb 07 jari 1824             if (clusters.size() <= 0) return;            
2 26 Feb 07 jari 1825             Vector meanProfile = (Vector) averageClusterProfiles.elementAt(index);            
2 26 Feb 07 jari 1826             float min = Float.POSITIVE_INFINITY;            
2 26 Feb 07 jari 1827             float max = Float.NEGATIVE_INFINITY;            
2 26 Feb 07 jari 1828             float maxRange;            
2 26 Feb 07 jari 1829             profileDisplayPanel.removeAllGraphElements();            
2 26 Feb 07 jari 1830             Vector selectedCluster = (Vector)geneDataInClusters.get(index);            
2 26 Feb 07 jari 1831                         
2 26 Feb 07 jari 1832             for (int j = 0; j < selectedCluster.size(); j++) {                
2 26 Feb 07 jari 1833                                 
2 26 Feb 07 jari 1834                 Vector currGene = (Vector)selectedCluster.get(j);                
2 26 Feb 07 jari 1835                                 
2 26 Feb 07 jari 1836                 max = Math.max(max, getMax(currGene));                
2 26 Feb 07 jari 1837                 min = Math.min(min, getMin(currGene));                
2 26 Feb 07 jari 1838                 maxRange = Math.max(max, Math.abs(min));                
2 26 Feb 07 jari 1839                 profileDisplayPanel.setGraphBounds(0, currGene.size(), -maxRange, maxRange);                
2 26 Feb 07 jari 1840                                 
2 26 Feb 07 jari 1841                 for (int i = 0; i < currGene.size(); i++) {                    
2 26 Feb 07 jari 1842                 }                
2 26 Feb 07 jari 1843                                 
2 26 Feb 07 jari 1844                 for (int i = 0; i < currGene.size() - 1; i++) {                    
2 26 Feb 07 jari 1845                     if ((Float.isNaN(((Float) currGene.elementAt(i)).floatValue()))||(Float.isNaN(((Float) currGene.elementAt(i+1)).floatValue()))) {                        
2 26 Feb 07 jari 1846                         continue;                        
2 26 Feb 07 jari 1847                     }                    
2 26 Feb 07 jari 1848            
2 26 Feb 07 jari 1849                     GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) currGene.elementAt(i)).floatValue(),                    
2 26 Feb 07 jari 1850                     i + 1, ((Float) currGene.elementAt(i + 1)).floatValue(), clusterColors[index]);                    
2 26 Feb 07 jari 1851                     profileDisplayPanel.addGraphElement(gl);                    
2 26 Feb 07 jari 1852                                         
2 26 Feb 07 jari 1853                 }                
2 26 Feb 07 jari 1854             }            
2 26 Feb 07 jari 1855                         
2 26 Feb 07 jari 1856             for (int i = 0; i < meanProfile.size(); i++) {                
2 26 Feb 07 jari 1857                 if (!Float.isNaN(((Float) meanProfile.elementAt(i)).floatValue())) {                    
2 26 Feb 07 jari 1858                     GraphPoint gp = new GraphPoint(i/* + 1*/, ((Float) meanProfile.elementAt(i)).floatValue(), Color.red, 5);                    
2 26 Feb 07 jari 1859                     profileDisplayPanel.addGraphElement(gp);                    
2 26 Feb 07 jari 1860                 }                
2 26 Feb 07 jari 1861             }            
2 26 Feb 07 jari 1862                         
2 26 Feb 07 jari 1863             for (int i = 0; i < meanProfile.size() - 1; i++) {                
2 26 Feb 07 jari 1864                 GraphLine gl = new GraphLine(i /*+ 1*/, ((Float) meanProfile.elementAt(i)).floatValue(),                
2 26 Feb 07 jari 1865                 i + 1, ((Float) meanProfile.elementAt(i + 1)).floatValue(), Color.blue);                
2 26 Feb 07 jari 1866                 profileDisplayPanel.addGraphElement(gl);                
2 26 Feb 07 jari 1867             }            
2 26 Feb 07 jari 1868                         
2 26 Feb 07 jari 1869             profileDisplayPanel.repaint();            
2 26 Feb 07 jari 1870         }        
2 26 Feb 07 jari 1871                 
2 26 Feb 07 jari 1872         public void reset(){            
2 26 Feb 07 jari 1873             clusterList.setSelectedIndex(0);            
2 26 Feb 07 jari 1874             setTemplate = false;            
2 26 Feb 07 jari 1875             refreshGraph();            
2 26 Feb 07 jari 1876         }        
2 26 Feb 07 jari 1877     }    
2 26 Feb 07 jari 1878         
2 26 Feb 07 jari 1879     class TemplateElementGrid extends JPanel {        
2 26 Feb 07 jari 1880                 
2 26 Feb 07 jari 1881         JLabel exptName;        
2 26 Feb 07 jari 1882         JTextField templateField;        
2 26 Feb 07 jari 1883         JSlider templateSlider;        
2 26 Feb 07 jari 1884         JCheckBox activeBox;        
2 26 Feb 07 jari 1885                 
2 26 Feb 07 jari 1886         TemplateElementGrid(String SampleName) {            
2 26 Feb 07 jari 1887             GridBagLayout templateElement = new GridBagLayout();            
2 26 Feb 07 jari 1888             GridBagConstraints constraints = new GridBagConstraints();            
2 26 Feb 07 jari 1889             constraints.fill = GridBagConstraints.BOTH;            
2 26 Feb 07 jari 1890             this.setLayout(templateElement);            
2 26 Feb 07 jari 1891                         
2 26 Feb 07 jari 1892             buildConstraints(constraints, 0, 0, 1, 1, 50, 10);            
2 26 Feb 07 jari 1893             exptName = new JLabel(SampleName, SwingConstants.CENTER);            
2 26 Feb 07 jari 1894             templateElement.setConstraints(exptName, constraints);            
2 26 Feb 07 jari 1895             this.add(exptName);            
2 26 Feb 07 jari 1896                         
2 26 Feb 07 jari 1897             buildConstraints(constraints, 1, 0, 1, 1, 50, 0);            
2 26 Feb 07 jari 1898             activeBox = new JCheckBox();            
2 26 Feb 07 jari 1899             activeBox.setSelected(true);            
2 26 Feb 07 jari 1900             activeBox.addItemListener(new ItemListener() {                
2 26 Feb 07 jari 1901                 public void itemStateChanged(ItemEvent e) {                    
2 26 Feb 07 jari 1902                     if (e.getStateChange() == ItemEvent.DESELECTED) {                        
2 26 Feb 07 jari 1903                         //templateField.setText("NULL");                        
2 26 Feb 07 jari 1904                         templateField.setBackground(Color.gray);                        
2 26 Feb 07 jari 1905                         templateField.setEnabled(false);                        
2 26 Feb 07 jari 1906                         templateSlider.setEnabled(false);                        
2 26 Feb 07 jari 1907                     }                    
2 26 Feb 07 jari 1908                                         
2 26 Feb 07 jari 1909                     if (e.getStateChange() == ItemEvent.SELECTED) {                        
2 26 Feb 07 jari 1910                         //templateField.setText("NULL");                        
2 26 Feb 07 jari 1911                         templateField.setBackground(Color.white);                        
2 26 Feb 07 jari 1912                         templateField.setEnabled(true);                        
2 26 Feb 07 jari 1913                         templateSlider.setEnabled(true);                        
2 26 Feb 07 jari 1914                     }                    
2 26 Feb 07 jari 1915                                         
2 26 Feb 07 jari 1916                 }                
2 26 Feb 07 jari 1917             });            
2 26 Feb 07 jari 1918             templateElement.setConstraints(activeBox, constraints);            
2 26 Feb 07 jari 1919             this.add(activeBox);            
2 26 Feb 07 jari 1920                         
2 26 Feb 07 jari 1921             buildConstraints(constraints, 0, 1, 2, 1, 0, 5);            
2 26 Feb 07 jari 1922             templateField = new JTextField("0.5", 4);            
2 26 Feb 07 jari 1923             templateField.addActionListener(new ActionListener(){                
2 26 Feb 07 jari 1924                 public void actionPerformed(ActionEvent e) {                    
2 26 Feb 07 jari 1925                     int sliderValue;                    
2 26 Feb 07 jari 1926                     if(e.getSource() == templateField){                        
2 26 Feb 07 jari 1927                         try {                            
2 26 Feb 07 jari 1928                             String s = templateField.getText();                            
2 26 Feb 07 jari 1929                             double d = Double.parseDouble(s);                            
2 26 Feb 07 jari 1930                             sliderValue = (int)Math.floor(d*100);                            
2 26 Feb 07 jari 1931                             if ((d > 1)||(d < 0)) {                                
2 26 Feb 07 jari 1932                                                                 
2 26 Feb 07 jari 1933                                 sliderValue = 50;                                
2 26 Feb 07 jari 1934                                 templateField.setText("0.5");                                
2 26 Feb 07 jari 1935                                 JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                                
2 26 Feb 07 jari 1936                                                                 
2 26 Feb 07 jari 1937                             }                            
2 26 Feb 07 jari 1938                         } catch (Exception exc) {                            
2 26 Feb 07 jari 1939                                                         
2 26 Feb 07 jari 1940                             templateField.setText("0.5");                            
2 26 Feb 07 jari 1941                             sliderValue = 50;                            
2 26 Feb 07 jari 1942                             JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                            
2 26 Feb 07 jari 1943                                                         
2 26 Feb 07 jari 1944                         }                        
2 26 Feb 07 jari 1945                                                 
2 26 Feb 07 jari 1946                         templateSlider.setValue(sliderValue);                        
2 26 Feb 07 jari 1947                     }                    
2 26 Feb 07 jari 1948                                         
2 26 Feb 07 jari 1949                 }                
2 26 Feb 07 jari 1950             });            
2 26 Feb 07 jari 1951                         
2 26 Feb 07 jari 1952             templateField.addFocusListener(new FocusListener(){                
2 26 Feb 07 jari 1953                 public void focusLost(FocusEvent e) {                    
2 26 Feb 07 jari 1954                     int sliderValue;                    
2 26 Feb 07 jari 1955                     if(e.getSource() == templateField){                        
2 26 Feb 07 jari 1956                         try {                            
2 26 Feb 07 jari 1957                             String s = templateField.getText();                            
2 26 Feb 07 jari 1958                             double d = Double.parseDouble(s);                            
2 26 Feb 07 jari 1959                             sliderValue = (int)Math.floor(d*100);                            
2 26 Feb 07 jari 1960                             if ((d > 1)||(d < 0)) {                                
2 26 Feb 07 jari 1961                                                                 
2 26 Feb 07 jari 1962                                 sliderValue = 50;                                
2 26 Feb 07 jari 1963                                 templateField.setText("0.5");                                
2 26 Feb 07 jari 1964                                 JOptionPane.showMessageDialog(null, "Template values must be between 0 and 1 (inclusive)");                                
2 26 Feb 07 jari 1965                                                                 
2 26 Feb 07 jari 1966                             }                            
2 26 Feb 07 jari 1967                         } catch (Exception exc) {                            
2 26 Feb 07 jari 1968                                                         
2 26 Feb 07 jari 1969                             templateField.setText("0.5");                            
2 26 Feb 07 jari 1970                             sliderValue = 50;                            
2 26 Feb 07 jari 1971                             JOptionPane.showMessageDialog(null, "Input Format Error: Template values must be between 0 and 1 (inclusive)");                            
2 26 Feb 07 jari 1972                                                         
2 26 Feb 07 jari 1973                         }                        
2 26 Feb 07 jari 1974                                                 
2 26 Feb 07 jari 1975                         templateSlider.setValue(sliderValue);                        
2 26 Feb 07 jari 1976                     }                    
2 26 Feb 07 jari 1977                 }                
2 26 Feb 07 jari 1978                                 
2 26 Feb 07 jari 1979                                 
2 26 Feb 07 jari 1980                 public void focusGained(FocusEvent e) {                    
2 26 Feb 07 jari 1981                 }                
2 26 Feb 07 jari 1982             });            
2 26 Feb 07 jari 1983                         
2 26 Feb 07 jari 1984             templateElement.setConstraints(templateField, constraints);            
2 26 Feb 07 jari 1985             this.add(templateField);            
2 26 Feb 07 jari 1986                         
2 26 Feb 07 jari 1987             buildConstraints(constraints, 0, 2, 1, 2, 0, 85);            
2 26 Feb 07 jari 1988             templateSlider = new JSlider(JSlider.VERTICAL, 0, 100, 50);            
2 26 Feb 07 jari 1989             templateSlider.setMajorTickSpacing(20);            
2 26 Feb 07 jari 1990             templateSlider.setMinorTickSpacing(10);            
2 26 Feb 07 jari 1991             //templateSlider.setPaintTicks(true);            
2 26 Feb 07 jari 1992             Hashtable labelTable = new Hashtable();            
2 26 Feb 07 jari 1993             labelTable.put( new Integer( 0 ), new JLabel("Min") );            
2 26 Feb 07 jari 1994             labelTable.put( new Integer( 100 ), new JLabel("Max") );            
2 26 Feb 07 jari 1995             templateSlider.setLabelTable( labelTable );            
2 26 Feb 07 jari 1996             templateSlider.setPaintLabels(true);            
2 26 Feb 07 jari 1997             templateSlider.addChangeListener(new ChangeListener(){                
2 26 Feb 07 jari 1998                 public void stateChanged(ChangeEvent e) {                    
2 26 Feb 07 jari 1999                     JSlider source = (JSlider)e.getSource();                    
2 26 Feb 07 jari 2000                     if (!source.getValueIsAdjusting()) {                        
2 26 Feb 07 jari 2001                         int value = (int)source.getValue();                        
2 26 Feb 07 jari 2002                                                 
2 26 Feb 07 jari 2003                         if (value == 100) {                            
2 26 Feb 07 jari 2004                             templateField.setText("1.0"); //CLUMSY WAY OF DISPLAYING INTEGER AS DOUBLE? MAYBE CHANGE?                            
2 26 Feb 07 jari 2005                         } else if (value > 0 && value < 10) {                            
2 26 Feb 07 jari 2006                             templateField.setText("0.0" + value);                            
2 26 Feb 07 jari 2007                         } else {                            
2 26 Feb 07 jari 2008                             templateField.setText("0." + value);                            
2 26 Feb 07 jari 2009                         }                        
2 26 Feb 07 jari 2010                     }                    
2 26 Feb 07 jari 2011                 }                
2 26 Feb 07 jari 2012                                 
2 26 Feb 07 jari 2013             });            
2 26 Feb 07 jari 2014             templateElement.setConstraints(templateSlider, constraints);            
2 26 Feb 07 jari 2015             this.add(templateSlider);            
2 26 Feb 07 jari 2016                         
2 26 Feb 07 jari 2017                         
2 26 Feb 07 jari 2018         }                
2 26 Feb 07 jari 2019                 
2 26 Feb 07 jari 2020         public void reset() {            
2 26 Feb 07 jari 2021             templateSlider.setValue(50);            
2 26 Feb 07 jari 2022             templateField.setText("0.5");            
2 26 Feb 07 jari 2023         }        
2 26 Feb 07 jari 2024                 
2 26 Feb 07 jari 2025                 
2 26 Feb 07 jari 2026     }    
2 26 Feb 07 jari 2027         
2 26 Feb 07 jari 2028     public static void main(String [] args){        
2 26 Feb 07 jari 2029         FloatMatrix expMatrix = new FloatMatrix(100,10);        
2 26 Feb 07 jari 2030         Vector uniqueIDs = new Vector();        
2 26 Feb 07 jari 2031         Vector sampleNamesVector = new Vector();        
2 26 Feb 07 jari 2032         Color [] colors = null;        
2 26 Feb 07 jari 2033         for(int i = 0; i < 100; i++)            
2 26 Feb 07 jari 2034             uniqueIDs.add(String.valueOf(i));        
2 26 Feb 07 jari 2035         for(int i = 0; i < 10; i++)            
2 26 Feb 07 jari 2036             sampleNamesVector.add(("Exp "+String.valueOf(i)));        
2 26 Feb 07 jari 2037         //             public (JFrame parentFrame, boolean modality, FloatMatrix expMatrix, Vector uniqueIDs, Vector sampleNamesVector, Vector clusters, Vector expClusters, Color[] clusterColors, Color [] expClusterColors) {        
2 26 Feb 07 jari 2038         
2 26 Feb 07 jari 2039         PTMInitDialog box = new PTMInitDialog(new JFrame(), true, expMatrix, uniqueIDs, sampleNamesVector, new Vector(), new Vector(), colors, colors);        
2 26 Feb 07 jari 2040         box.setVisible(true);        
2 26 Feb 07 jari 2041         System.exit(0);        
2 26 Feb 07 jari 2042     }    
2 26 Feb 07 jari 2043         
2 26 Feb 07 jari 2044 }