/* Copyright (C) 2009 Diego Darriba 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 2 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.xprottest.compute; import es.uvigo.darwin.xprottest.*; import es.uvigo.darwin.xprottest.util.OptimizationStrategyWrapper; import es.uvigo.darwin.prottest.facade.util.ProtTestParameterVO; import static es.uvigo.darwin.prottest.global.AminoAcidApplicationGlobals.*; import es.uvigo.darwin.prottest.global.options.ApplicationOptions; import es.uvigo.darwin.prottest.util.exception.AlignmentParseException; import es.uvigo.darwin.prottest.util.exception.ProtTestInternalException; import es.uvigo.darwin.prottest.util.exception.TreeFormatException; import java.awt.Color; import java.awt.FileDialog; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.ResourceBundle; import javax.swing.GroupLayout; import javax.swing.JCheckBox; import org.jdesktop.application.Action; import pal.tree.Tree; import pal.alignment.Alignment; import pal.misc.Identifier; /** * The execution settings. The options chosen in this view will lead the * execution of ProtTest-HPC likelihood computation. * * @author Diego Darriba */ public class OptionsView extends javax.swing.JFrame { private XProtTestView mainFrame; private ArrayList<JCheckBox> cbMatrices; private String alignmentFilePath; private String treeFilePath; private Alignment alignment; private Tree userTree; private boolean running; private ResourceBundle resource; /** Creates new form OptionsView */ public OptionsView(XProtTestView mainFrame, Alignment alignment, String alignmentFilePath) { resource = java.util.ResourceBundle.getBundle("es/uvigo/darwin/xprottest/compute/resources/OptionsView"); this.alignment = alignment; this.mainFrame = mainFrame; this.alignmentFilePath = alignmentFilePath; this.running = false; initComponents(); msgValidate.setVisible(false); GroupLayout jPanel1Layout = new GroupLayout(subMatricesPanel); GroupLayout.ParallelGroup pg1 = jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING); GroupLayout.ParallelGroup pg2 = jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING); GroupLayout.SequentialGroup horizontalGroup = jPanel1Layout.createSequentialGroup() .addContainerGap(); GroupLayout.ParallelGroup verticalGroup = jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING); GroupLayout.SequentialGroup sg1 = jPanel1Layout.createSequentialGroup() .addContainerGap(); GroupLayout.SequentialGroup sg2 = jPanel1Layout.createSequentialGroup() .addContainerGap(); String[] matrices = ALL_MATRICES; cbMatrices = new ArrayList<JCheckBox>(matrices.length); int i = 0; for (String matrix : matrices) { JCheckBox cbMatrix = new JCheckBox(); cbMatrix.setText(matrix); cbMatrix.setSelected(true); cbMatrix.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onChangeOptions(evt); } }); cbMatrices.add(cbMatrix); if (i < matrices.length/2) { pg1.addComponent(cbMatrix); sg1.addComponent(cbMatrix) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED); } else { pg2.addComponent(cbMatrix); sg2.addComponent(cbMatrix) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED); } i++; } horizontalGroup.addGroup(pg1); horizontalGroup.addGroup(pg2); verticalGroup.addGroup(sg1); verticalGroup.addGroup(sg2); subMatricesPanel.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(horizontalGroup) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(verticalGroup) ); lblNumModels.setText(String.valueOf(calculateNumberOfModels())); } /** 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() { subMatPanel = new javax.swing.JPanel(); subMatricesPanel = new javax.swing.JPanel(); distributionsPanel = new javax.swing.JPanel(); rateVarPanel = new javax.swing.JPanel(); lblNCat = new javax.swing.JLabel(); cbDistGroupCat = new javax.swing.JCheckBox(); cbDistInvariant = new javax.swing.JCheckBox(); txtNCat = new javax.swing.JTextField(); cbDistInvGC = new javax.swing.JCheckBox(); msgValidate = new javax.swing.JLabel(); empiricalFPanel = new javax.swing.JPanel(); cbEmpiricalF = new javax.swing.JCheckBox(); lblNumModelsLabel = new javax.swing.JLabel(); lblNumModels = new javax.swing.JLabel(); btnCompute = new javax.swing.JButton(); processorsPanel = new javax.swing.JPanel(); sliderProcessors = new javax.swing.JSlider(); lblNumProc = new javax.swing.JLabel(); btnSetDefault = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); startingTopologiesPanel = new javax.swing.JPanel(); lblStrategyMode = new javax.swing.JLabel(); cmbStrategyMode = new javax.swing.JComboBox(); lblUserTree = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(OptionsView.class); setTitle(resourceMap.getString("Form.title")); // NOI18N setName("Form"); // NOI18N addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosed(java.awt.event.WindowEvent evt) { onClose(evt); } }); subMatPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("subMatPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_PANEL_TITLE, resourceMap.getColor("subMatPanel.border.titleColor"))); // NOI18N subMatPanel.setName("subMatPanel"); // NOI18N subMatricesPanel.setToolTipText(resourceMap.getString("subMatricesPanel.toolTipText")); // NOI18N subMatricesPanel.setName("subMatricesPanel"); // NOI18N javax.swing.GroupLayout subMatricesPanelLayout = new javax.swing.GroupLayout(subMatricesPanel); subMatricesPanel.setLayout(subMatricesPanelLayout); subMatricesPanelLayout.setHorizontalGroup( subMatricesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 172, Short.MAX_VALUE) ); subMatricesPanelLayout.setVerticalGroup( subMatricesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 283, Short.MAX_VALUE) ); javax.swing.GroupLayout subMatPanelLayout = new javax.swing.GroupLayout(subMatPanel); subMatPanel.setLayout(subMatPanelLayout); subMatPanelLayout.setHorizontalGroup( subMatPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(subMatPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(subMatricesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); subMatPanelLayout.setVerticalGroup( subMatPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(subMatPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(subMatricesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); distributionsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("distributionsPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_LABEL, resourceMap.getColor("distributionsPanel.border.titleColor"))); // NOI18N distributionsPanel.setName("distributionsPanel"); // NOI18N rateVarPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("rateVarPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_PANEL_TITLE, resourceMap.getColor("rateVarPanel.border.titleColor"))); // NOI18N rateVarPanel.setName("rateVarPanel"); // NOI18N lblNCat.setFont(lblNCat.getFont()); lblNCat.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); lblNCat.setText(resourceMap.getString("lblNCat.text")); // NOI18N lblNCat.setName("lblNCat"); // NOI18N cbDistGroupCat.setFont(cbDistGroupCat.getFont()); cbDistGroupCat.setSelected(true); cbDistGroupCat.setText(resourceMap.getString("cbDistGroupCat.text")); // NOI18N cbDistGroupCat.setToolTipText(resourceMap.getString("cbDistGroupCat.toolTipText")); // NOI18N cbDistGroupCat.setName("cbDistGroupCat"); // NOI18N cbDistGroupCat.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onChangeOptions(evt); } }); cbDistInvariant.setFont(cbDistInvariant.getFont()); cbDistInvariant.setSelected(true); cbDistInvariant.setText(resourceMap.getString("cbDistInvariant.text")); // NOI18N cbDistInvariant.setToolTipText(resourceMap.getString("cbDistInvariant.toolTipText")); // NOI18N cbDistInvariant.setName("cbDistInvariant"); // NOI18N cbDistInvariant.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onChangeOptions(evt); } }); txtNCat.setHorizontalAlignment(javax.swing.JTextField.RIGHT); txtNCat.setText(String.valueOf(DEFAULT_NCAT)); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("es/uvigo/darwin/xprottest/compute/resources/OptionsView"); // NOI18N txtNCat.setToolTipText(bundle.getString("txtNCat.toolTip")); // NOI18N txtNCat.setName("txtNCat"); // NOI18N cbDistInvGC.setFont(cbDistInvGC.getFont()); cbDistInvGC.setSelected(true); cbDistInvGC.setText(resourceMap.getString("cbDistInvGC.text")); // NOI18N cbDistInvGC.setName("cbDistInvGC"); // NOI18N cbDistInvGC.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onChangeOptions(evt); } }); msgValidate.setFont(XProtTestApp.FONT_OPTION_LABEL); msgValidate.setForeground(XProtTestView.CRITIC_COLOR); msgValidate.setText(resourceMap.getString("msgValidate.text")); // NOI18N msgValidate.setName("msgValidate"); // NOI18N javax.swing.GroupLayout rateVarPanelLayout = new javax.swing.GroupLayout(rateVarPanel); rateVarPanel.setLayout(rateVarPanelLayout); rateVarPanelLayout.setHorizontalGroup( rateVarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(rateVarPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(cbDistInvariant) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cbDistGroupCat) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cbDistInvGC) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblNCat) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(txtNCat, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rateVarPanelLayout.createSequentialGroup() .addContainerGap(94, Short.MAX_VALUE) .addComponent(msgValidate) .addContainerGap()) ); rateVarPanelLayout.setVerticalGroup( rateVarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(rateVarPanelLayout.createSequentialGroup() .addComponent(msgValidate) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(rateVarPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cbDistInvariant) .addComponent(cbDistGroupCat) .addComponent(cbDistInvGC) .addComponent(txtNCat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblNCat)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); empiricalFPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("empiricalFPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_PANEL_TITLE, resourceMap.getColor("empiricalFPanel.border.titleColor"))); // NOI18N empiricalFPanel.setName("empiricalFPanel"); // NOI18N cbEmpiricalF.setFont(cbEmpiricalF.getFont()); cbEmpiricalF.setSelected(true); cbEmpiricalF.setText(bundle.getString("cbEmpiricalF.text")); // NOI18N cbEmpiricalF.setToolTipText(resourceMap.getString("cbEmpiricalF.toolTipText")); // NOI18N cbEmpiricalF.setName("cbEmpiricalF"); // NOI18N cbEmpiricalF.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onChangeOptions(evt); } }); javax.swing.GroupLayout empiricalFPanelLayout = new javax.swing.GroupLayout(empiricalFPanel); empiricalFPanel.setLayout(empiricalFPanelLayout); empiricalFPanelLayout.setHorizontalGroup( empiricalFPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(empiricalFPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(cbEmpiricalF) .addContainerGap(223, Short.MAX_VALUE)) ); empiricalFPanelLayout.setVerticalGroup( empiricalFPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(empiricalFPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(cbEmpiricalF) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); lblNumModelsLabel.setFont(XProtTestApp.FONT_OPTION_LABEL); lblNumModelsLabel.setForeground(resourceMap.getColor("lblNumModelsLabel.foreground")); // NOI18N lblNumModelsLabel.setText(resourceMap.getString("lblNumModelsLabel.text")); // NOI18N lblNumModelsLabel.setName("lblNumModelsLabel"); // NOI18N lblNumModels.setFont(XProtTestApp.FONT_OPTION_LABEL); lblNumModels.setForeground(resourceMap.getColor("lblNumModelsLabel.foreground")); // NOI18N lblNumModels.setName("lblNumModels"); // NOI18N javax.swing.GroupLayout distributionsPanelLayout = new javax.swing.GroupLayout(distributionsPanel); distributionsPanel.setLayout(distributionsPanelLayout); distributionsPanelLayout.setHorizontalGroup( distributionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, distributionsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(distributionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(rateVarPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(empiricalFPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(distributionsPanelLayout.createSequentialGroup() .addComponent(lblNumModelsLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(lblNumModels, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); distributionsPanelLayout.setVerticalGroup( distributionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(distributionsPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(rateVarPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(empiricalFPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(distributionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblNumModels, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblNumModelsLabel)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(OptionsView.class, this); btnCompute.setAction(actionMap.get("computeLikelihood")); // NOI18N btnCompute.setText(resourceMap.getString("btnCompute.text")); // NOI18N btnCompute.setName("btnCompute"); // NOI18N processorsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("processorsPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_PANEL_TITLE, resourceMap.getColor("processorsPanel.border.titleColor"))); // NOI18N processorsPanel.setName("processorsPanel"); // NOI18N sliderProcessors.setMinimum(1); sliderProcessors.setMaximum( Runtime.getRuntime().availableProcessors() ); sliderProcessors.setValue( mainFrame.getFacade().getNumberOfThreads() ); sliderProcessors.setPaintLabels(true); sliderProcessors.setPaintTicks(true); sliderProcessors.setSnapToTicks(true); sliderProcessors.setToolTipText(resourceMap.getString("sliderProcessors.toolTipText")); // NOI18N sliderProcessors.setName("sliderProcessors"); // NOI18N sliderProcessors.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { sliderProcessorsStateChanged(evt); } }); lblNumProc.setFont(lblNumProc.getFont()); lblNumProc.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); lblNumProc.setText(String.valueOf(sliderProcessors.getValue())); lblNumProc.setName("lblNumProc"); // NOI18N javax.swing.GroupLayout processorsPanelLayout = new javax.swing.GroupLayout(processorsPanel); processorsPanel.setLayout(processorsPanelLayout); processorsPanelLayout.setHorizontalGroup( processorsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(processorsPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(lblNumProc) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sliderProcessors, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE) .addContainerGap()) ); processorsPanelLayout.setVerticalGroup( processorsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(processorsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(processorsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(sliderProcessors, javax.swing.GroupLayout.DEFAULT_SIZE, 47, Short.MAX_VALUE) .addComponent(lblNumProc)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); btnSetDefault.setAction(actionMap.get("restoreDefault")); // NOI18N btnSetDefault.setText(resourceMap.getString("btnSetDefault.text")); // NOI18N btnSetDefault.setToolTipText(resourceMap.getString("btnSetDefault.toolTipText")); // NOI18N btnSetDefault.setName("btnSetDefault"); // NOI18N btnCancel.setAction(actionMap.get("close")); // NOI18N btnCancel.setText(resourceMap.getString("btnCancel.text")); // NOI18N btnCancel.setToolTipText(resourceMap.getString("btnCancel.toolTipText")); // NOI18N btnCancel.setName("btnCancel"); // NOI18N startingTopologiesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("startingTopologiesPanel.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, XProtTestApp.FONT_PANEL_TITLE, resourceMap.getColor("startingTopologiesPanel.border.titleColor"))); // NOI18N startingTopologiesPanel.setName("startingTopologiesPanel"); // NOI18N lblStrategyMode.setFont(lblStrategyMode.getFont()); lblStrategyMode.setText(bundle.getString("lbl-strategy-mode")); // NOI18N lblStrategyMode.setName("lblStrategyMode"); // NOI18N cmbStrategyMode.setAction(actionMap.get("setStrategyMode")); // NOI18N cmbStrategyMode.setName("cmbStrategyMode"); // NOI18N lblUserTree.setFont(XProtTestApp.FONT_OPTION_LABEL); lblUserTree.setForeground(resourceMap.getColor("lblUserTree.foreground")); // NOI18N lblUserTree.setText(bundle.getString("msg-no-user-tree-loaded")); // NOI18N lblUserTree.setName("lblUserTree"); // NOI18N javax.swing.GroupLayout startingTopologiesPanelLayout = new javax.swing.GroupLayout(startingTopologiesPanel); startingTopologiesPanel.setLayout(startingTopologiesPanelLayout); startingTopologiesPanelLayout.setHorizontalGroup( startingTopologiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(startingTopologiesPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(startingTopologiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(cmbStrategyMode, 0, 329, Short.MAX_VALUE) .addComponent(lblStrategyMode, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE) .addComponent(lblUserTree, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE)) .addContainerGap()) ); startingTopologiesPanelLayout.setVerticalGroup( startingTopologiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(startingTopologiesPanelLayout.createSequentialGroup() .addComponent(lblStrategyMode) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cmbStrategyMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblUserTree) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); for (int optimizeValue : OPTIMIZE_VALUES) { OptimizationStrategyWrapper optimizeItem = new OptimizationStrategyWrapper(OPTIMIZE_NAMES[optimizeValue], optimizeValue); cmbStrategyMode.addItem(optimizeItem); } cmbStrategyMode.setSelectedIndex(DEFAULT_STRATEGY_MODE); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(processorsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(subMatPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(distributionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(startingTopologiesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(btnCompute) .addGap(18, 18, 18) .addComponent(btnSetDefault) .addGap(18, 18, 18) .addComponent(btnCancel))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(processorsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(layout.createSequentialGroup() .addComponent(distributionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(startingTopologiesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(subMatPanel, 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.BASELINE) .addComponent(btnCancel) .addComponent(btnSetDefault) .addComponent(btnCompute)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void onClose(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_onClose mainFrame.unloadOptionsView(running); }//GEN-LAST:event_onClose private void onChangeOptions(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onChangeOptions lblNumModels.setText(String.valueOf(calculateNumberOfModels())); txtNCat.setEnabled(cbDistGroupCat.isSelected() || cbDistInvGC.isSelected()); }//GEN-LAST:event_onChangeOptions private void sliderProcessorsStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_sliderProcessorsStateChanged lblNumProc.setText(String.valueOf(sliderProcessors.getValue())); }//GEN-LAST:event_sliderProcessorsStateChanged private int calculateNumberOfModels() { int numberOfModels = 0; for (JCheckBox cbMatrix : cbMatrices ) { if (cbMatrix.isSelected()) numberOfModels++; } int numberOfMatrices = numberOfModels; if (cbDistInvariant.isSelected()) numberOfModels += numberOfMatrices; if (cbDistGroupCat.isSelected()) numberOfModels += numberOfMatrices; if (cbDistInvGC.isSelected()) numberOfModels += numberOfMatrices; if (cbEmpiricalF.isSelected()) numberOfModels *= 2; return numberOfModels; } @Action public void computeLikelihood() { boolean validate = true; msgValidate.setVisible(false); Collection<String> matrices = new ArrayList<String>(); Collection<String> distributions = new ArrayList<String>(); int ncat = 0; boolean plusF; int strategyMode; for (JCheckBox cbMatrix : cbMatrices) if (cbMatrix.isSelected()) { matrices.add(cbMatrix.getText()); } distributions.add("Uniform"); if (cbDistGroupCat.isSelected()) distributions.add("+G"); if (cbDistInvariant.isSelected()) distributions.add("+I"); if (cbDistInvGC.isSelected()) distributions.add("+I+G"); if (cbDistGroupCat.isSelected() || cbDistInvGC.isSelected()) { try { ncat = Integer.parseInt(txtNCat.getText()); if (ncat <= 0) { msgValidate.setVisible(true); validate = false; } } catch (NumberFormatException e) { msgValidate.setVisible(true); validate = false; } } plusF = cbEmpiricalF.isSelected(); strategyMode = cmbStrategyMode.getSelectedIndex(); if (validate) { try { mainFrame.getFacade().setNumberOfThreads(sliderProcessors.getValue()); ProtTestParameterVO parameters = new ProtTestParameterVO( alignmentFilePath, alignment, treeFilePath, matrices, distributions, plusF, ncat, strategyMode); ApplicationOptions options = mainFrame.getFacade().configure(parameters); mainFrame.computeLikelihood(calculateNumberOfModels(), options); running = true; } catch (IOException e) { mainFrame.getDisplayWriter().println(e.getMessage()); } catch (AlignmentParseException e) { mainFrame.getDisplayWriter().println(e.getMessage()); } catch (ProtTestInternalException e) { mainFrame.getDisplayWriter().println(e.getMessage()); } this.dispose(); } } @Action public void setStrategyMode() { org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(es.uvigo.darwin.xprottest.XProtTestApp.class) .getContext().getResourceMap(OptionsView.class); File f = null; if (((OptimizationStrategyWrapper)cmbStrategyMode.getSelectedItem()).getValue() == OPTIMIZE_USER) { FileDialog fc = new FileDialog(this, "Load DNA alignment", FileDialog.LOAD); fc.setDirectory(System.getProperty("user.dir")); fc.setVisible(true); String dataFileName = fc.getFile(); // JFileChooser fc = XProtTestApp.createFileChooser(resourceMap.getString( // "loadTree.dialogTitle")); // int option = fc.showOpenDialog(this); // // if (JFileChooser.APPROVE_OPTION == option) { if (dataFileName != null) { try { f = new File(fc.getDirectory() + dataFileName); Tree tree = mainFrame.getFacade().readTree( mainFrame.getDisplayWriter(), f.getAbsolutePath(), true); this.treeFilePath = f.getAbsolutePath(); // check tree consistency boolean consistent = true; if (alignment.getIdCount() == tree.getIdCount()) { for (int id = 0; id < alignment.getIdCount(); id++) { Identifier identifier = alignment.getIdentifier(id); if (tree.whichIdNumber(identifier.getName()) == -1) { consistent = false; break; } } } else consistent = false; if (consistent) setUserTree(tree); else { mainFrame.getDisplayWriter().println("User topology is not consistent with current alignment"); setUserTree(null); cmbStrategyMode.setSelectedIndex(0); } } catch (TreeFormatException ex) { mainFrame.getDisplayWriter().println(ex.getMessage()); setUserTree(null); cmbStrategyMode.setSelectedIndex(0); } catch (FileNotFoundException ex) { mainFrame.getDisplayWriter().println(ex.getMessage()); setUserTree(null); cmbStrategyMode.setSelectedIndex(0); } catch (IOException ex) { mainFrame.getDisplayWriter().println(ex.getMessage()); setUserTree(null); cmbStrategyMode.setSelectedIndex(0); } mainFrame.getDisplayWriter().println(""); mainFrame.getFrame().toFront(); mainFrame.getFrame().transferFocus(); } } else { if (userTree != null) setUserTree(null); } } private void setUserTree(Tree tree) { this.userTree = tree; org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(es.uvigo.darwin.xprottest.XProtTestApp.class) .getContext().getResourceMap(OptionsView.class); if (tree == null) { lblUserTree.setText(resourceMap.getString("msg-no-user-tree-loaded")); lblUserTree.setForeground(Color.GRAY); this.treeFilePath = null; } else { lblUserTree.setText(resourceMap.getString("msg-user-tree-loaded")); lblUserTree.setForeground(XProtTestView.DONE_COLOR); } } @Action public void restoreDefault() { for (JCheckBox matrix : cbMatrices) { matrix.setSelected(true); } cbDistGroupCat.setSelected(true); cbDistInvGC.setSelected(true); cbDistInvariant.setSelected(true); cbEmpiricalF.setSelected(true); txtNCat.setText(String.valueOf(DEFAULT_NCAT)); sliderProcessors.setValue(sliderProcessors.getMaximum()); cmbStrategyMode.setSelectedIndex(DEFAULT_STRATEGY_MODE); onChangeOptions(null); sliderProcessorsStateChanged(null); setUserTree(null); } @Action public void close() { this.dispose(); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnCompute; private javax.swing.JButton btnSetDefault; private javax.swing.JCheckBox cbDistGroupCat; private javax.swing.JCheckBox cbDistInvGC; private javax.swing.JCheckBox cbDistInvariant; private javax.swing.JCheckBox cbEmpiricalF; private javax.swing.JComboBox cmbStrategyMode; private javax.swing.JPanel distributionsPanel; private javax.swing.JPanel empiricalFPanel; private javax.swing.JLabel lblNCat; private javax.swing.JLabel lblNumModels; private javax.swing.JLabel lblNumModelsLabel; private javax.swing.JLabel lblNumProc; private javax.swing.JLabel lblStrategyMode; private javax.swing.JLabel lblUserTree; private javax.swing.JLabel msgValidate; private javax.swing.JPanel processorsPanel; private javax.swing.JPanel rateVarPanel; private javax.swing.JSlider sliderProcessors; private javax.swing.JPanel startingTopologiesPanel; private javax.swing.JPanel subMatPanel; private javax.swing.JPanel subMatricesPanel; private javax.swing.JTextField txtNCat; // End of variables declaration//GEN-END:variables }