/*
* #%L
* org.gitools.ui.app
* %%
* Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.analysis.clustering;
import org.gitools.analysis.clustering.distance.DistanceMeasure;
import org.gitools.analysis.clustering.distance.EuclideanDistance;
import org.gitools.analysis.clustering.distance.ManhattanDistance;
import org.gitools.analysis.clustering.hierarchical.HierarchicalMethod;
import org.gitools.analysis.clustering.hierarchical.strategy.AverageLinkageStrategy;
import org.gitools.analysis.clustering.hierarchical.strategy.CompleteLinkageStrategy;
import org.gitools.analysis.clustering.hierarchical.strategy.LinkageStrategy;
import org.gitools.analysis.clustering.hierarchical.strategy.SingleLinkageStrategy;
import org.gitools.ui.platform.wizard.AbstractWizardPage;
import org.gitools.utils.aggregation.SumAggregator;
import javax.swing.*;
public class HCLParamsPage extends AbstractWizardPage {
private HierarchicalMethod method;
private JComboBox distAlgCombo;
private JTextPane explanationTextPane;
private JComboBox linkTypeCombo;
private JPanel root;
public HCLParamsPage(HierarchicalMethod method) {
super();
this.method = method;
setTitle("Select hierarchical clustering settings");
setComplete(true);
linkTypeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Average", "Complete (maximum)", "Single (minimum)"}));
distAlgCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Euclidean", "Manhattan"}));
explanationTextPane.setText("<html>\n" +
" <head>\n" +
" \n" +
" </head>\n" +
" <body>\n" +
" <i>Linkage</i>\n" +
"\n" +
" <ul>\n" +
" <li>\n" +
" Choose average linkage by default\n" +
" </li>\n" +
" <li>\n" +
" Minimum linkage makes distances seem bigger and similar samples may be \n" +
" separated in sublty different clusteres.\n" +
" </li>\n" +
" <li>\n" +
" Maximum linkage makes distances seem smaller and the differently \n" +
" detected clusters should be very distinct.\n" +
" </li>\n" +
" </ul>\n" +
" </body>\n" +
"</html>\n");
}
@Override
public void updateModel() {
DistanceMeasure distanceMeasure;
LinkageStrategy linkageStrategy;
switch (linkTypeCombo.getSelectedItem().toString()) {
case "Single (minimum)": linkageStrategy = new SingleLinkageStrategy(); break;
case "Complete (maximum)": linkageStrategy = new CompleteLinkageStrategy(); break;
case "Average": linkageStrategy = new AverageLinkageStrategy(); break;
default: linkageStrategy = new AverageLinkageStrategy();
}
if (distAlgCombo.getSelectedItem().toString().equalsIgnoreCase("euclidean")) {
distanceMeasure = EuclideanDistance.get();
} else {
distanceMeasure = ManhattanDistance.get();
}
method.setDistanceMeasure(distanceMeasure);
method.setLinkageStrategy(linkageStrategy);
//TODO Add aggregator selector
method.setAggregator(SumAggregator.INSTANCE);
}
@Override
public JComponent createControls() {
return root;
}
}