/* Copyright (C) 2011 Diego Darriba, David Posada 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package es.uvigo.darwin.jmodeltest.gui; import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLayeredPane; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.BorderUIResource; import es.uvigo.darwin.jmodeltest.ApplicationOptions; import es.uvigo.darwin.jmodeltest.ModelTest; import es.uvigo.darwin.jmodeltest.selection.AIC; import es.uvigo.darwin.jmodeltest.selection.AICc; import es.uvigo.darwin.jmodeltest.utilities.Utilities; public class Frame_AIC extends JModelTestFrame { private static final long serialVersionUID = 201104031100L; private JPanel panelAICSettings = new JPanel(); private JTextField textTaxaAIC = new JTextField(); private JTextField textSizeAICc = new JTextField(); private JButton runButtonAIC = new JButton(); private JButton cancelButtonAIC = new JButton(); private JButton buttonDefaultAIC = new JButton(); private JCheckBox checkBoxAICc = new JCheckBox(); private JCheckBox checkBoxPAUPblock = new JCheckBox(); private JCheckBox checkBoxAveraging = new JCheckBox(); private JCheckBox checkBoxImportance = new JCheckBox(); private JSlider sliderInterval = new JSlider(); private AIC myAIC; private AICc myAICc; public Frame_AIC() { } public void initComponents() throws Exception { panelAICSettings.setSize(490, 240); panelAICSettings .setBorder(new BorderUIResource.TitledBorderUIResource( new LineBorder(new java.awt.Color( 153, 153, 153), 1, false), "AIC Settings", 4, 2, new java.awt.Font("Application", 1, 10), new java.awt.Color(102, 102, 153))); panelAICSettings.setLocation(10, 10); panelAICSettings.setVisible(true); panelAICSettings.setLayout(null); runButtonAIC.setVisible(true); runButtonAIC.setSize(190, 40); runButtonAIC.setText("Do AIC calculations"); runButtonAIC.setLocation(280, 190); getRootPane().setDefaultButton(runButtonAIC); buttonDefaultAIC.setVisible(true); buttonDefaultAIC.setSize(141, 40); buttonDefaultAIC.setText("Default Settings"); buttonDefaultAIC.setLocation(10, 190); cancelButtonAIC.setVisible(true); cancelButtonAIC.setSize(110, 40); cancelButtonAIC.setText("Cancel"); cancelButtonAIC.setLocation(160, 190); checkBoxAICc.setVisible(true); checkBoxAICc.setSize(170, 20); checkBoxAICc.setText("Use AICc correction"); checkBoxAICc.setLocation(30, 30); checkBoxAICc.setSelected(false); textSizeAICc.setEnabled(false); textSizeAICc .setToolTipText("Enter the sample size you want to use for the AICc correction and click RETURN. By default this is the number of sites in the alignment"); textSizeAICc .setBorder(new BorderUIResource.TitledBorderUIResource( new LineBorder(new java.awt.Color( 153, 153, 153), 1, false), "Sample size", 4, 2, new java.awt.Font("Application", 1, 10), new java.awt.Color(102, 102, 153))); textSizeAICc.setVisible(true); textSizeAICc.setSize(170, 40); textSizeAICc.setText(Utilities.format(options.getSampleSize(),10,4,false)); textSizeAICc.setHorizontalAlignment(JTextField.RIGHT); textSizeAICc.setLocation(300, 20); checkBoxImportance.setVisible(true); checkBoxImportance.setSize(260, 20); checkBoxImportance.setText("Calculate parameter importances"); checkBoxImportance.setLocation(30, 70); checkBoxImportance.setSelected(true); checkBoxAveraging.setVisible(true); checkBoxAveraging.setSize(260, 20); checkBoxAveraging.setText("Do model averaging"); checkBoxAveraging.setLocation(30, 110); checkBoxAveraging.setSelected(true); checkBoxPAUPblock.setVisible(true); checkBoxPAUPblock.setSize(260, 20); checkBoxPAUPblock.setText("Write PAUP* block"); checkBoxPAUPblock.setLocation(30, 150); checkBoxPAUPblock.setSelected(false); checkBoxPAUPblock .setToolTipText("Writes a block of PAUP* commands implementing the selected model"); sliderInterval.setVisible(true); sliderInterval .setToolTipText("Set the confidence interval for model averaging and/or parameter importance"); sliderInterval .setBorder(new BorderUIResource.TitledBorderUIResource( new LineBorder(new java.awt.Color( 153, 153, 153), 1, false), "Confidence interval = 100%", 4, 2, new java.awt.Font( "Application", 1, 10), new java.awt.Color(102, 102, 153))); sliderInterval.setSize(170, 70); sliderInterval.setLocation(300, 105); sliderInterval.setMinimum(0); sliderInterval.setMaximum(100); sliderInterval.setValue(100); sliderInterval.setMajorTickSpacing(20); sliderInterval.setMinorTickSpacing(5); sliderInterval.setPaintTicks(true); sliderInterval.setPaintLabels(true); sliderInterval.setEnabled(true); sliderInterval.setFont(XManager.FONT_SLIDER); setLocation(281, 80); getContentPane().setLayout(null); setTitle("Akaike Information Criterion (AIC) Settings"); panelAICSettings.add(runButtonAIC); panelAICSettings.add(buttonDefaultAIC); panelAICSettings.add(cancelButtonAIC); panelAICSettings.add(checkBoxAICc); panelAICSettings.add(textTaxaAIC); panelAICSettings.add(textSizeAICc); // PanelAICSettings.add(jCheckBoxIncludeBL_AIC); panelAICSettings.add(checkBoxAveraging); panelAICSettings.add(checkBoxImportance); panelAICSettings.add(checkBoxPAUPblock); panelAICSettings.add(sliderInterval); getContentPane().add(panelAICSettings); setSize(510, 280); setResizable(false); // event handling checkBoxAICc.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { jCheckBoxAICcStateChanged(e); } }); checkBoxAveraging .addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { jCheckBoxAveragingStateChanged(e); } }); checkBoxImportance .addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { jCheckBoxImportanceStateChanged(e); } }); sliderInterval .addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { JSliderIntervalStateChanged(e); } }); buttonDefaultAIC .addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JButtonDefaultAICActionPerformed(e); } }); cancelButtonAIC.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { CancelButtonAICActionPerformed(e); } }); runButtonAIC.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { RunButtonAICActionPerformed(e); } }); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { thisWindowClosing(e); } }); } private boolean mShown = false; public void addNotify() { super.addNotify(); if (mShown) return; // resize frame to account for menubar JMenuBar jMenuBar = getJMenuBar(); if (jMenuBar != null) { int jMenuBarHeight = jMenuBar.getPreferredSize().height; Dimension dimension = getSize(); dimension.height += jMenuBarHeight; setSize(dimension); // move down components in layered pane Component[] components = getLayeredPane().getComponentsInLayer( JLayeredPane.DEFAULT_LAYER.intValue()); for (int i = 0; i < components.length; i++) { Point location = components[i].getLocation(); location.move(location.x, location.y + jMenuBarHeight); components[i].setLocation(location); } } mShown = true; } // Close the window when the close box is clicked void thisWindowClosing(java.awt.event.WindowEvent e) { setVisible(false); dispose(); // System.exit(0); } public void jCheckBoxAICcStateChanged(ChangeEvent e) { if (checkBoxAICc.isSelected()) { textSizeAICc.setEnabled(true); runButtonAIC.setText("Do AICc calculations"); } else { textSizeAICc.setEnabled(false); runButtonAIC.setText("Do AIC calculations"); } } public void jCheckBoxImportanceStateChanged(ChangeEvent e) { if (checkBoxImportance.isSelected()) { sliderInterval.setEnabled(true); } else { if (!checkBoxAveraging.isSelected()) sliderInterval.setEnabled(false); } } public void jCheckBoxAveragingStateChanged(ChangeEvent e) { if (checkBoxAveraging.isSelected()) { sliderInterval.setEnabled(true); } else { if (!checkBoxImportance.isSelected()) sliderInterval.setEnabled(false); } } public void JSliderIntervalStateChanged(ChangeEvent e) { sliderInterval .setBorder(new BorderUIResource.TitledBorderUIResource( new LineBorder(new java.awt.Color( 153, 153, 153), 1, false), "Confidence interval = " + sliderInterval.getValue() + "%", 4, 2, new java.awt.Font("Application", 1, 10), new java.awt.Color(102, 102, 153))); } public void JButtonDefaultAICActionPerformed(java.awt.event.ActionEvent e) { checkBoxAICc.setSelected(false); textSizeAICc.setEnabled(false); runButtonAIC.setText("Do AIC calculations"); ApplicationOptions.getInstance().countBLasParameters = true; XManager.getInstance().selectedMenuResultsBLasParameters(true); checkBoxPAUPblock.setSelected(false); checkBoxAveraging.setSelected(true); checkBoxImportance.setSelected(true); sliderInterval.setValue(100); } public void CancelButtonAICActionPerformed(java.awt.event.ActionEvent e) { try { setVisible(false); dispose(); } catch (Exception f) { f.printStackTrace(); } } public void RunButtonAICActionPerformed(java.awt.event.ActionEvent e) { boolean writePAUPblock, doImportances, doModelAveraging; double credibleInterval; try { setVisible(false); dispose(); writePAUPblock = checkBoxPAUPblock.isSelected(); options.writePAUPblock |= writePAUPblock; doImportances = checkBoxImportance.isSelected(); doModelAveraging = checkBoxAveraging.isSelected(); credibleInterval = sliderInterval.getValue() / 100.0; if (checkBoxAICc.isSelected()) { myAICc = new AICc(writePAUPblock, doImportances, doModelAveraging, credibleInterval); myAICc.compute(); myAICc.print(ModelTest.getCurrentOutStream()); ModelTest.setMyAICc(myAICc); options.doAICc = myAICc != null; XManager.getInstance().resultsFrame.enablePane(FrameResults.TAB_AICc); XManager.getInstance().resultsFrame.populate(FrameResults.TAB_AICc); } else { myAIC = new AIC(writePAUPblock, doImportances, doModelAveraging, credibleInterval); myAIC.compute(); myAIC.print(ModelTest.getCurrentOutStream()); ModelTest.setMyAIC(myAIC); options.doAIC = myAIC != null; XManager.getInstance().resultsFrame.enablePane(FrameResults.TAB_AIC); XManager.getInstance().resultsFrame.populate(FrameResults.TAB_AIC); } XManager.getInstance().enableMenuAveraging(!options.fixedTopology); } catch (Exception f) { f.printStackTrace(); } } }