*/
package jalview.gui;
-import jalview.analysis.NJTree;
-import jalview.analysis.scoremodels.PIDModel;
+import jalview.analysis.TreeBuilder;
import jalview.analysis.scoremodels.ScoreModels;
import jalview.analysis.scoremodels.SimilarityParams;
import jalview.api.analysis.ScoreModelI;
import javax.swing.JRadioButton;
/**
- * A dialog to allow a user to select and action Tree calculation options
+ * A dialog where a user can choose and action Tree or PCA calculation options
*/
-public class TreeChooser extends JPanel
+public class CalculationChooser extends JPanel
{
+ /*
+ * flag for whether gap matches residue in the PID calculation for a Tree
+ * - true gives Jalview 2.10.1 behaviour
+ * - set to false (using Groovy) for a more correct tree
+ * (JAL-374)
+ */
+ private static boolean treeMatchGaps = true;
+
private static final Font VERDANA_11PT = new Font("Verdana", 0, 11);
AlignFrame af;
*
* @param af
*/
- public TreeChooser(AlignFrame alignFrame)
+ public CalculationChooser(AlignFrame alignFrame)
{
this.af = alignFrame;
init();
}
this.add(actionPanel);
- int width = 380;
+ int width = 350;
int height = includeParams ? 400 : 220;
Desktop.addInternalFrame(frame,
- MessageManager.getString("label.choose_tree"), width, height,
- false);
+ MessageManager.getString("label.choose_calculation"), width,
+ height, false);
frame.setLayer(JLayeredPane.PALETTE_LAYER);
}
boolean doPCA = pca.isSelected();
ScoreModelI sm = ScoreModels.getInstance().forName(
modelNames.getSelectedItem().toString());
- SimilarityParamsI params = getSimilarityParameters(doPCA, sm);
+ SimilarityParamsI params = getSimilarityParameters(doPCA);
if (doPCA)
{
- AlignViewport viewport = af.getViewport();
- if (((viewport.getSelectionGroup() != null)
- && (viewport.getSelectionGroup().getSize() < 4) && (viewport
- .getSelectionGroup().getSize() > 0))
- || (viewport.getAlignment().getHeight() < 4))
- {
- JvOptionPane
- .showInternalMessageDialog(
- this,
- MessageManager
- .getString("label.principal_component_analysis_must_take_least_four_input_sequences"),
- MessageManager
- .getString("label.sequence_selection_insufficient"),
- JvOptionPane.WARNING_MESSAGE);
- return;
- }
- new PCAPanel(af.alignPanel, sm, params);
+ openPcaPanel(sm, params);
}
else
{
- String treeType = neighbourJoining.isSelected() ? NJTree.NEIGHBOUR_JOINING
- : NJTree.AVERAGE_DISTANCE;
- af.newTreePanel(treeType, sm, params);
+ openTreePanel(sm, params);
}
// closeFrame();
}
/**
+ * Open a new Tree panel on the desktop
+ *
+ * @param sm
+ * @param params
+ */
+ protected void openTreePanel(ScoreModelI sm, SimilarityParamsI params)
+ {
+ String treeType = neighbourJoining.isSelected() ? TreeBuilder.NEIGHBOUR_JOINING
+ : TreeBuilder.AVERAGE_DISTANCE;
+ af.newTreePanel(treeType, sm, params);
+ }
+
+ /**
+ * Open a new PCA panel on the desktop
+ *
+ * @param sm
+ * @param params
+ */
+ protected void openPcaPanel(ScoreModelI sm, SimilarityParamsI params)
+ {
+ AlignViewport viewport = af.getViewport();
+ if (((viewport.getSelectionGroup() != null)
+ && (viewport.getSelectionGroup().getSize() < 4) && (viewport
+ .getSelectionGroup().getSize() > 0))
+ || (viewport.getAlignment().getHeight() < 4))
+ {
+ JvOptionPane
+ .showInternalMessageDialog(
+ this,
+ MessageManager
+ .getString("label.principal_component_analysis_must_take_least_four_input_sequences"),
+ MessageManager
+ .getString("label.sequence_selection_insufficient"),
+ JvOptionPane.WARNING_MESSAGE);
+ return;
+ }
+ new PCAPanel(af.alignPanel, sm, params);
+ }
+
+ /**
*
*/
protected void closeFrame()
* calculation
*
* @param doPCA
- * @param sm
* @return
*/
- protected SimilarityParamsI getSimilarityParameters(boolean doPCA,
- ScoreModelI sm)
+ protected SimilarityParamsI getSimilarityParameters(boolean doPCA)
{
// commented out: parameter choices read from gui widgets
// SimilarityParamsI params = new SimilarityParams(
// includeGappedColumns.isSelected(), matchGaps.isSelected(),
// includeGaps.isSelected(), shorterSequence.isSelected());
- /*
- * for now we want
- * includeGappedColumns = true
- * includeGaps = true
- * matchOnShortestSequence = false
- * matchGaps = true except false for PCA by PID (to match SeqSpace)
- */
boolean includeGapGap = true;
boolean includeGapResidue = true;
boolean matchOnShortestLength = false;
- boolean matchGap = true;
- if (doPCA && (sm instanceof PIDModel))
- {
- matchGap = false;
- }
+
+ /*
+ * 'matchGaps' flag is only used in the PID calculation
+ * - set to false for PCA so that PCA using PID reproduces SeqSpace PCA
+ * - set to true for Tree to reproduce Jalview 2.10.1 calculation
+ * - set to false for Tree for a more correct calculation (JAL-374)
+ */
+ boolean matchGap = doPCA ? false : treeMatchGaps;
+
return new SimilarityParams(includeGapGap, matchGap, includeGapResidue, matchOnShortestLength);
}