mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/dialogs/DistanceMetricPanel.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * DistanceMetricPanel.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on November 15, 2004, 2:32 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.cluster.gui.impl.dialogs;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.Color;
2 26 Feb 07 jari 14 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 15 import java.awt.GridBagLayout;
2 26 Feb 07 jari 16 import java.awt.Insets;
2 26 Feb 07 jari 17 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 18 import java.awt.event.ActionListener;
2 26 Feb 07 jari 19 import java.util.Vector;
2 26 Feb 07 jari 20
2 26 Feb 07 jari 21 import javax.swing.BorderFactory;
2 26 Feb 07 jari 22 import javax.swing.JCheckBox;
2 26 Feb 07 jari 23 import javax.swing.JComboBox;
2 26 Feb 07 jari 24 import javax.swing.JFrame;
2 26 Feb 07 jari 25 import javax.swing.JLabel;
2 26 Feb 07 jari 26 import javax.swing.JPanel;
2 26 Feb 07 jari 27 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.algorithm.Algorithm;
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31 /**
2 26 Feb 07 jari 32  *
2 26 Feb 07 jari 33  * @author  braisted
2 26 Feb 07 jari 34  */
2 26 Feb 07 jari 35 public class DistanceMetricPanel extends JPanel {
2 26 Feb 07 jari 36     
2 26 Feb 07 jari 37     private JCheckBox absBox;
2 26 Feb 07 jari 38     private JComboBox metricBox;
2 26 Feb 07 jari 39     
2 26 Feb 07 jari 40     private String globalFunctionName;
2 26 Feb 07 jari 41     private boolean globalAbsoluteValue;
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     private ActionListener listener;
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     /** Creates a new instance of DistanceMetricPanel */
2 26 Feb 07 jari 46     public DistanceMetricPanel(String globalFunctionName, boolean globalAbsoluteValue, String defaultMetricName, String algName, boolean showTitle, boolean whiteBackground ) {
2 26 Feb 07 jari 47         super(new GridBagLayout());
2 26 Feb 07 jari 48         
2 26 Feb 07 jari 49         this.globalAbsoluteValue = globalAbsoluteValue;
2 26 Feb 07 jari 50         this.globalFunctionName = globalFunctionName;
2 26 Feb 07 jari 51         
2 26 Feb 07 jari 52         if(whiteBackground)
2 26 Feb 07 jari 53             setBackground(Color.white);
2 26 Feb 07 jari 54         
2 26 Feb 07 jari 55         if(showTitle)
2 26 Feb 07 jari 56             setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED),"Distance Metric Selection"));
2 26 Feb 07 jari 57         
2 26 Feb 07 jari 58         JLabel globalMetricLabel = new JLabel("Current Global Metric: "+globalFunctionName);        
2 26 Feb 07 jari 59         JLabel localSettingLabel = new JLabel("Current Metric: ");
2 26 Feb 07 jari 60
2 26 Feb 07 jari 61         absBox = new JCheckBox("Use Absolute Distance", globalAbsoluteValue);
2 26 Feb 07 jari 62         absBox.setOpaque(false);
2 26 Feb 07 jari 63         absBox.setFocusPainted(false);
2 26 Feb 07 jari 64          Vector metrics = buildMetricVector();
2 26 Feb 07 jari 65         metricBox = new JComboBox(metrics);    
2 26 Feb 07 jari 66         metricBox.addActionListener(new Listener());
2 26 Feb 07 jari 67         if(globalFunctionName.equals("not defined"))
2 26 Feb 07 jari 68             setMetricSelection(defaultMetricName);
2 26 Feb 07 jari 69         else
2 26 Feb 07 jari 70             setMetricSelection(globalFunctionName);
2 26 Feb 07 jari 71         
2 26 Feb 07 jari 72         metricBox.addActionListener(new Listener());
2 26 Feb 07 jari 73         
2 26 Feb 07 jari 74         enableAbsolute(globalFunctionName);
2 26 Feb 07 jari 75         
2 26 Feb 07 jari 76         JLabel defaultDistanceLabel = new JLabel("(The default distance metric for "+algName+ " is "+defaultMetricName+")");
2 26 Feb 07 jari 77         
2 26 Feb 07 jari 78         add(localSettingLabel, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,10),0,0));
2 26 Feb 07 jari 79         add(metricBox, new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 80         add(defaultDistanceLabel, new GridBagConstraints(0,1,2,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10,0,0,0),0,0));
2 26 Feb 07 jari 81         add(absBox, new GridBagConstraints(0,2,2,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10,0,0,0),0,0));
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     public int getMetricIndex() {
2 26 Feb 07 jari 85         DistanceMetric metric = (DistanceMetric)(metricBox.getSelectedItem());
2 26 Feb 07 jari 86         return metric.getIndex();
2 26 Feb 07 jari 87     }
2 26 Feb 07 jari 88     
2 26 Feb 07 jari 89     public boolean getAbsoluteSelection() {
2 26 Feb 07 jari 90         return absBox.isSelected();
2 26 Feb 07 jari 91     }
2 26 Feb 07 jari 92     
2 26 Feb 07 jari 93     public void reset() {        
2 26 Feb 07 jari 94         setMetricSelection(globalFunctionName);
2 26 Feb 07 jari 95         enableAbsolute(globalFunctionName);
2 26 Feb 07 jari 96         absBox.setSelected(this.globalAbsoluteValue);
2 26 Feb 07 jari 97     }
2 26 Feb 07 jari 98     
2 26 Feb 07 jari 99     private Vector buildMetricVector() {
2 26 Feb 07 jari 100         Vector distanceVector = new Vector();
2 26 Feb 07 jari 101         
2 26 Feb 07 jari 102         distanceVector.addElement(new DistanceMetric("Euclidean Distance", Algorithm.EUCLIDEAN));
2 26 Feb 07 jari 103         distanceVector.addElement(new DistanceMetric("Manhattan Distance", Algorithm.MANHATTAN));
2 26 Feb 07 jari 104         distanceVector.addElement(new DistanceMetric("Average Dot Product", Algorithm.DOTPRODUCT));
2 26 Feb 07 jari 105         distanceVector.addElement(new DistanceMetric("Pearson Correlation", Algorithm.PEARSON));
2 26 Feb 07 jari 106         distanceVector.addElement(new DistanceMetric("Pearson Uncentered", Algorithm.PEARSONUNCENTERED));
2 26 Feb 07 jari 107         distanceVector.addElement(new DistanceMetric("Pearson Squared", Algorithm.PEARSONSQARED));
2 26 Feb 07 jari 108         distanceVector.addElement(new DistanceMetric("Cosine Correlation", Algorithm.COSINE));
2 26 Feb 07 jari 109         distanceVector.addElement(new DistanceMetric("Covariance Value", Algorithm.COVARIANCE));
2 26 Feb 07 jari 110         distanceVector.addElement(new DistanceMetric("Spearman Rank Correlation", Algorithm.SPEARMANRANK));
2 26 Feb 07 jari 111         distanceVector.addElement(new DistanceMetric("Kendall's Tau", Algorithm.KENDALLSTAU));
2 26 Feb 07 jari 112         distanceVector.addElement(new DistanceMetric("Mutual Information", Algorithm.MUTUALINFORMATION));
2 26 Feb 07 jari 113         return distanceVector;
2 26 Feb 07 jari 114     }
2 26 Feb 07 jari 115      
2 26 Feb 07 jari 116     private void enableAbsolute(String metricName) {
2 26 Feb 07 jari 117         if(metricName.equals("Pearson Correlation")
2 26 Feb 07 jari 118         || metricName.equals("Pearson Uncentered")
2 26 Feb 07 jari 119         || metricName.equals("Cosine Correlation")
2 26 Feb 07 jari 120         || metricName.equals("Average Dot Product"))
2 26 Feb 07 jari 121             absBox.setEnabled(true);
2 26 Feb 07 jari 122         else
2 26 Feb 07 jari 123             absBox.setEnabled(false);
2 26 Feb 07 jari 124     }
2 26 Feb 07 jari 125     
2 26 Feb 07 jari 126     private void setMetricSelection(String metricName) {
2 26 Feb 07 jari 127         for(int i = 0; i < metricBox.getItemCount(); i++) {
2 26 Feb 07 jari 128             if((((DistanceMetric)(metricBox.getItemAt(i))).toString()).equals(metricName)) {
2 26 Feb 07 jari 129                 metricBox.setSelectedIndex(i);
2 26 Feb 07 jari 130                 break;
2 26 Feb 07 jari 131             }                
2 26 Feb 07 jari 132         }
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134     
2 26 Feb 07 jari 135     public void addActionListener(ActionListener listener) {
2 26 Feb 07 jari 136         this.listener = listener;
2 26 Feb 07 jari 137     }
2 26 Feb 07 jari 138     
2 26 Feb 07 jari 139     private void fireActionEvent() {
2 26 Feb 07 jari 140         ActionEvent ae = new ActionEvent(this, 0, "distance_metric_selection_command");
2 26 Feb 07 jari 141         listener.actionPerformed(ae);
2 26 Feb 07 jari 142     }
2 26 Feb 07 jari 143     
2 26 Feb 07 jari 144     private class DistanceMetric {
2 26 Feb 07 jari 145         private String name;
2 26 Feb 07 jari 146         private int index;
2 26 Feb 07 jari 147         
2 26 Feb 07 jari 148         public DistanceMetric(String name, int index) {
2 26 Feb 07 jari 149             this.name = name;
2 26 Feb 07 jari 150             this.index = index;
2 26 Feb 07 jari 151         }
2 26 Feb 07 jari 152         
2 26 Feb 07 jari 153         public String toString() {
2 26 Feb 07 jari 154             return name;
2 26 Feb 07 jari 155         }
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         public int getIndex() {
2 26 Feb 07 jari 158             return index;
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160     }
2 26 Feb 07 jari 161     
2 26 Feb 07 jari 162     
2 26 Feb 07 jari 163     private class Listener implements ActionListener {
2 26 Feb 07 jari 164         
2 26 Feb 07 jari 165         public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
2 26 Feb 07 jari 166             enableAbsolute(((DistanceMetric)(metricBox.getSelectedItem())).toString());
2 26 Feb 07 jari 167             if(listener != null)
2 26 Feb 07 jari 168                 fireActionEvent();
2 26 Feb 07 jari 169         }        
2 26 Feb 07 jari 170
2 26 Feb 07 jari 171     }
2 26 Feb 07 jari 172     
2 26 Feb 07 jari 173     public static void main(String [] args){ 
2 26 Feb 07 jari 174         DistanceMetricPanel panel = new DistanceMetricPanel("Pearson Correlation", true, "Euclidean Distance", "HCL", true, true);
2 26 Feb 07 jari 175         JFrame frame = new JFrame();
2 26 Feb 07 jari 176         frame.getContentPane().add(panel);
2 26 Feb 07 jari 177         frame.setSize(400, 200);
2 26 Feb 07 jari 178         frame.setVisible(true);
2 26 Feb 07 jari 179     }
2 26 Feb 07 jari 180 }