/* * #%L * gitools-ui-app * %% * Copyright (C) 2013 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.htest.wizard; import org.gitools.analysis.ToolConfig; import org.gitools.analysis.stats.test.factory.BinomialTestFactory; import org.gitools.analysis.stats.test.factory.TestFactory; import org.gitools.analysis.stats.test.factory.ZscoreTestFactory; import org.gitools.ui.platform.IconUtils; import org.gitools.ui.platform.icons.IconNames; import org.gitools.ui.platform.wizard.AbstractWizardPage; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Map; /** * @noinspection ALL */ public class StatisticalTestPage extends AbstractWizardPage { private static final long serialVersionUID = -2043719552247673856L; private static class Test { public final String name; public final String description; public Test(String name, String description) { this.name = name; this.description = description; } @Override public String toString() { return name; } } /** * Creates new form StatisticalTestPanel */ public StatisticalTestPage() { initComponents(); setTitle("Select statistical test"); setLogo(IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_METHOD, 96)); setComplete(true); testCbox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Test test = (Test) testCbox.getSelectedItem(); descLabel.setText(test.description); boolean isZ = testCbox.getSelectedIndex() == 2; samplingSizeLabel.setVisible(isZ); samplingSizeCbox.setVisible(isZ); estimatorLabel.setVisible(isZ); estimatorCbox.setVisible(isZ); } }); testCbox.setModel(new DefaultComboBoxModel( new Test[]{new Test("Binomial (Bernoulli)", "Binomial: Use with binary data and big sample sizes"), new Test("Fisher Exact", "Fisher's Exact: Use with binary data and small sample sizes"), new Test("Z Score", "Z-Score: Use with continuous data and obtaining detailed enrichment status. The greater the sampling size the more accurate the result")})); testCbox.setSelectedIndex(0); samplingSizeCbox.setSelectedItem(String.valueOf(ZscoreTestFactory.DEFAULT_NUM_SAMPLES)); estimatorCbox.setModel(new DefaultComboBoxModel(new String[]{ZscoreTestFactory.MEAN_ESTIMATOR, ZscoreTestFactory.MEDIAN_ESTIMATOR})); } @Override public JComponent createControls() { return this; } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { testCbox = new javax.swing.JComboBox(); descLabel = new javax.swing.JLabel(); samplingSizeLabel = new javax.swing.JLabel(); samplingSizeCbox = new javax.swing.JComboBox(); estimatorLabel = new javax.swing.JLabel(); estimatorCbox = new javax.swing.JComboBox(); jLabel1 = new javax.swing.JLabel(); mtcCb = new javax.swing.JComboBox(); testCbox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Binomial (Bernoulli)", "Fisher Exact", "Z-Score"})); descLabel.setText("Description"); samplingSizeLabel.setText("Sampling size"); samplingSizeCbox.setEditable(true); samplingSizeCbox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"100", "1000", "10000"})); samplingSizeCbox.setSelectedIndex(2); estimatorLabel.setText("Estimator"); estimatorCbox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"mean", "median"})); jLabel1.setText("Multiple test correction"); mtcCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Bonferroni", "Benjamini Hochberg FDR"})); mtcCb.setSelectedIndex(1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(descLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE).addComponent(testCbox, 0, 376, Short.MAX_VALUE).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(estimatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(samplingSizeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(estimatorCbox, 0, 275, Short.MAX_VALUE).addComponent(samplingSizeCbox, 0, 275, Short.MAX_VALUE))).addGroup(layout.createSequentialGroup().addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(mtcCb, 0, 218, Short.MAX_VALUE))).addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(testCbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(descLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(samplingSizeLabel).addComponent(samplingSizeCbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(estimatorCbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(estimatorLabel)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 37, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(mtcCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap())); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel descLabel; private javax.swing.JComboBox estimatorCbox; private javax.swing.JLabel estimatorLabel; private javax.swing.JLabel jLabel1; private javax.swing.JComboBox mtcCb; private javax.swing.JComboBox samplingSizeCbox; private javax.swing.JLabel samplingSizeLabel; private javax.swing.JComboBox testCbox; // End of variables declaration//GEN-END:variables public ToolConfig getTestConfig() { ToolConfig config = new ToolConfig(ToolConfig.ENRICHMENT); switch (testCbox.getSelectedIndex()) { case 0: config.put(TestFactory.TEST_NAME_PROPERTY, TestFactory.BINOMIAL_TEST); config.put(BinomialTestFactory.APROXIMATION_PROPERTY, BinomialTestFactory.EXACT_APROX); break; case 1: config.put(TestFactory.TEST_NAME_PROPERTY, TestFactory.FISHER_EXACT_TEST); break; case 2: config.put(TestFactory.TEST_NAME_PROPERTY, TestFactory.ZSCORE_TEST); config.put(ZscoreTestFactory.NUM_SAMPLES_PROPERTY, samplingSizeCbox.getSelectedItem().toString()); config.put(ZscoreTestFactory.ESTIMATOR_PROPERTY, estimatorCbox.getSelectedItem().toString()); break; } return config; } public void setTestConfig(ToolConfig testConfig) { Map<String, String> cfg = testConfig.getConfiguration(); String testName = cfg.get(TestFactory.TEST_NAME_PROPERTY); int index = 0; if (TestFactory.BINOMIAL_TEST.equals(testName)) { index = 0; } else if (TestFactory.FISHER_EXACT_TEST.equals(testName)) { index = 1; } else if (TestFactory.ZSCORE_TEST.equals(testName)) { index = 2; samplingSizeCbox.setSelectedItem(cfg.get(ZscoreTestFactory.NUM_SAMPLES_PROPERTY)); estimatorCbox.setSelectedItem(cfg.get(ZscoreTestFactory.ESTIMATOR_PROPERTY)); } testCbox.setSelectedIndex(index); boolean vis = index == 2; samplingSizeLabel.setVisible(vis); samplingSizeCbox.setVisible(vis); estimatorLabel.setVisible(vis); estimatorCbox.setVisible(vis); } // FIXME public String getMtc() { switch (mtcCb.getSelectedIndex()) { case 0: return "bonferroni"; case 1: return "bh"; } return "bh"; } // FIXME public void setMtc(String mtc) { if (mtc.equals("bonferroni")) { mtcCb.setSelectedIndex(0); } else if (mtc.equals("bh")) { mtcCb.setSelectedIndex(1); } } }