X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FCalculationChooser.java;h=8b4c2123e383cf62d980141e4d666aadf569c505;hb=6157950da0bf97e1fafa6b60ed95df21d9c609de;hp=6f5510ce3d2b62008950019404eed332cc799163;hpb=620d3204a1b556ba249595be908fbc190cf7e1cf;p=jalview.git diff --git a/src/jalview/gui/CalculationChooser.java b/src/jalview/gui/CalculationChooser.java index 6f5510c..8b4c212 100644 --- a/src/jalview/gui/CalculationChooser.java +++ b/src/jalview/gui/CalculationChooser.java @@ -21,10 +21,14 @@ package jalview.gui; import jalview.analysis.TreeBuilder; +import jalview.analysis.TreeCalculator; +import jalview.analysis.TreeModel; import jalview.analysis.scoremodels.ScoreModels; import jalview.analysis.scoremodels.SimilarityParams; import jalview.api.analysis.ScoreModelI; import jalview.api.analysis.SimilarityParamsI; +import jalview.datamodel.SequenceGroup; +import jalview.ext.archaeopteryx.ArchaeopteryxInit; import jalview.util.MessageManager; import java.awt.BorderLayout; @@ -102,7 +106,12 @@ public class CalculationChooser extends JPanel final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer(); - List tips = new ArrayList(); + List tips = new ArrayList<>(); + + /* + * the most recently opened PCA results panel + */ + private PCAPanel pcaPanel; /** * Constructor @@ -163,14 +172,14 @@ public class CalculationChooser extends JPanel JPanel treePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); treePanel.setOpaque(false); - treePanel.setBorder(BorderFactory.createTitledBorder(MessageManager - .getString("label.tree"))); + treePanel.setBorder(BorderFactory + .createTitledBorder(MessageManager.getString("label.tree"))); // then copy the inset dimensions for the border-less PCA panel JPanel pcaBorderless = new JPanel(new FlowLayout(FlowLayout.LEFT)); Insets b = treePanel.getBorder().getBorderInsets(treePanel); - pcaBorderless.setBorder(BorderFactory.createEmptyBorder(2, b.left, 2, - b.right)); + pcaBorderless.setBorder( + BorderFactory.createEmptyBorder(2, b.left, 2, b.right)); pcaBorderless.setOpaque(false); pcaBorderless.add(pca, FlowLayout.LEFT); @@ -185,7 +194,7 @@ public class CalculationChooser extends JPanel calcTypes.add(pca); calcTypes.add(neighbourJoining); calcTypes.add(averageDistance); - + ActionListener calcChanged = new ActionListener() { @Override @@ -269,9 +278,7 @@ public class CalculationChooser extends JPanel title = title + " (" + af.getViewport().viewName + ")"; } - Desktop.addInternalFrame(frame, - title, width, - height, false); + Desktop.addInternalFrame(frame, title, width, height, false); calcChoicePanel.doLayout(); revalidate(); /* @@ -336,8 +343,8 @@ public class CalculationChooser extends JPanel */ private boolean checkEnabled(JRadioButton calc, int size, int minsize) { - String ttip = MessageManager.formatMessage( - "label.you_need_at_least_n_sequences", minsize); + String ttip = MessageManager + .formatMessage("label.you_need_at_least_n_sequences", minsize); calc.setEnabled(size >= minsize); if (!calc.isEnabled()) @@ -371,7 +378,7 @@ public class CalculationChooser extends JPanel */ protected JComboBox buildModelOptionsList() { - final JComboBox scoreModelsCombo = new JComboBox(); + final JComboBox scoreModelsCombo = new JComboBox<>(); scoreModelsCombo.setRenderer(renderer); /* @@ -384,7 +391,8 @@ public class CalculationChooser extends JPanel @Override public void mouseEntered(MouseEvent e) { - scoreModelsCombo.setToolTipText(tips.get(scoreModelsCombo.getSelectedIndex())); + scoreModelsCombo.setToolTipText( + tips.get(scoreModelsCombo.getSelectedIndex())); } @Override @@ -413,7 +421,7 @@ public class CalculationChooser extends JPanel { Object curSel = comboBox.getSelectedItem(); toolTips.clear(); - DefaultComboBoxModel model = new DefaultComboBoxModel(); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); /* * now we can actually add entries to the combobox, @@ -460,51 +468,78 @@ public class CalculationChooser extends JPanel protected void calculate_actionPerformed() { boolean doPCA = pca.isSelected(); - String modelName = modelNames.getSelectedItem().toString(); + String substitutionMatrix = modelNames.getSelectedItem().toString(); SimilarityParamsI params = getSimilarityParameters(doPCA); if (doPCA) { - openPcaPanel(modelName, params); + openPcaPanel(substitutionMatrix, params); } else { - openTreePanel(modelName, params); + + String treeAlgo = determineTreeAlgo(); + TreeCalculator treeCalculator = new TreeCalculator(treeAlgo, + substitutionMatrix, params); + TreeBuilder calculatedTree = treeCalculator + .makeTree(af.getViewport()); + TreeModel tree = new TreeModel(calculatedTree); + + openTreePanel(tree, treeAlgo, substitutionMatrix); + ArchaeopteryxInit.createInstance(calculatedTree); + + + } // closeFrame(); } + + + + protected String determineTreeAlgo() // to be modified & expanded + { + String treeAlgorithm = neighbourJoining.isSelected() + ? TreeBuilder.NEIGHBOUR_JOINING + : TreeBuilder.AVERAGE_DISTANCE; + + return treeAlgorithm; + + } + + protected void checkEnoughSequences(AlignViewport viewport) + { + SequenceGroup sg = viewport.getSelectionGroup(); + if (sg != null && sg.getSize() < MIN_TREE_SELECTION) + { + JvOptionPane.showMessageDialog(Desktop.desktop, + MessageManager.formatMessage( + "label.you_need_at_least_n_sequences", + MIN_TREE_SELECTION), + MessageManager.getString("label.not_enough_sequences"), + JvOptionPane.WARNING_MESSAGE); + return; + } + } + /** * Open a new Tree panel on the desktop * - * @param modelName + * @param tree * @param params + * @param treeAlgo */ - protected void openTreePanel(String modelName, SimilarityParamsI params) + protected void openTreePanel(TreeModel tree, String treeAlgo, + String substitutionMatrix) { /* * gui validation shouldn't allow insufficient sequences here, but leave * this check in in case this method gets exposed programmatically in future */ - AlignViewport viewport = af.getViewport(); - if (viewport.getSelectionGroup().getSize() < MIN_TREE_SELECTION) - { - JvOptionPane - .showMessageDialog( - Desktop.desktop, - MessageManager - .formatMessage("label.you_need_at_least_n_sequences", - MIN_TREE_SELECTION), - MessageManager - .getString("label.not_enough_sequences"), - JvOptionPane.WARNING_MESSAGE); - return; - } + checkEnoughSequences(af.getViewport()); - String treeType = neighbourJoining.isSelected() ? TreeBuilder.NEIGHBOUR_JOINING - : TreeBuilder.AVERAGE_DISTANCE; - af.newTreePanel(treeType, modelName, params); + af.newTreePanel(tree, treeAlgo, substitutionMatrix); } /** @@ -522,18 +557,20 @@ public class CalculationChooser extends JPanel * this check in in case this method gets exposed programmatically in future */ if (((viewport.getSelectionGroup() != null) - && (viewport.getSelectionGroup().getSize() < MIN_PCA_SELECTION) && (viewport - .getSelectionGroup().getSize() > 0)) + && (viewport.getSelectionGroup().getSize() < MIN_PCA_SELECTION) + && (viewport.getSelectionGroup().getSize() > 0)) || (viewport.getAlignment().getHeight() < MIN_PCA_SELECTION)) { - JvOptionPane.showInternalMessageDialog(this, MessageManager - .formatMessage("label.you_need_at_least_n_sequences", - MIN_PCA_SELECTION), MessageManager - .getString("label.sequence_selection_insufficient"), + JvOptionPane.showInternalMessageDialog(this, + MessageManager.formatMessage( + "label.you_need_at_least_n_sequences", + MIN_PCA_SELECTION), + MessageManager + .getString("label.sequence_selection_insufficient"), JvOptionPane.WARNING_MESSAGE); return; } - new PCAPanel(af.alignPanel, modelName, params); + pcaPanel = new PCAPanel(af.alignPanel, modelName, params); } /** @@ -575,7 +612,8 @@ public class CalculationChooser extends JPanel */ boolean matchGap = doPCA ? false : treeMatchGaps; - return new SimilarityParams(includeGapGap, matchGap, includeGapResidue, matchOnShortestLength); + return new SimilarityParams(includeGapGap, matchGap, includeGapResidue, + matchOnShortestLength); } /** @@ -590,4 +628,9 @@ public class CalculationChooser extends JPanel { } } + + public PCAPanel getPcaPanel() + { + return pcaPanel; + } }