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.AptxInit;
import jalview.util.MessageManager;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyVetoException;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer();
- List<String> tips = new ArrayList<String>();
+ List<String> tips = new ArrayList<>();
+
+ /*
+ * the most recently opened PCA results panel
+ */
+ private PCAPanel pcaPanel;
/**
* Constructor
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);
calcTypes.add(pca);
calcTypes.add(neighbourJoining);
calcTypes.add(averageDistance);
-
+
ActionListener calcChanged = new ActionListener()
{
@Override
title = title + " (" + af.getViewport().viewName + ")";
}
- Desktop.addInternalFrame(frame,
- title, width,
- height, false);
+ Desktop.addInternalFrame(frame, title, width, height, false);
calcChoicePanel.doLayout();
revalidate();
/*
*/
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())
*/
protected JComboBox<String> buildModelOptionsList()
{
- final JComboBox<String> scoreModelsCombo = new JComboBox<String>();
+ final JComboBox<String> scoreModelsCombo = new JComboBox<>();
scoreModelsCombo.setRenderer(renderer);
/*
@Override
public void mouseEntered(MouseEvent e)
{
- scoreModelsCombo.setToolTipText(tips.get(scoreModelsCombo.getSelectedIndex()));
+ scoreModelsCombo.setToolTipText(
+ tips.get(scoreModelsCombo.getSelectedIndex()));
}
@Override
{
Object curSel = comboBox.getSelectedItem();
toolTips.clear();
- DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
+ DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
/*
* now we can actually add entries to the combobox,
/**
* Open and calculate the selected tree or PCA on 'OK'
+ *
+ * @throws IOException
*/
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);
+ try
+ {
+ createTree(substitutionMatrix, params);
+ } catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+
+
+
+
+
}
// closeFrame();
}
+ protected void createTree(String substitutionMatrix,
+ SimilarityParamsI params) throws IOException
+ {
+ String treeAlgo = determineTreeAlgo();
+ TreeCalculator treeCalculator = new TreeCalculator(treeAlgo,
+ substitutionMatrix, params);
+ TreeBuilder calculatedTree = treeCalculator.makeTree(af.getViewport());
+
+ // AptxInit.createInstanceFromCalculation(calculatedTree);
+
+ TreeModel tree = new TreeModel(calculatedTree);
+ jalview.io.NewickFile newick = new jalview.io.NewickFile(
+ tree.getTopNode());
+ String output = newick.print(tree.hasBootstrap(), tree.hasDistances(),
+ tree.hasRootDistance());
+ AptxInit.createInstanceFromNhx(af.getTitle(), output,
+ af.getViewport());
+ // openTreePanel(tree, treeAlgo, substitutionMatrix);
+ }
+
+
+ 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);
}
/**
* 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);
}
/**
*/
boolean matchGap = doPCA ? false : treeMatchGaps;
- return new SimilarityParams(includeGapGap, matchGap, includeGapResidue, matchOnShortestLength);
+ return new SimilarityParams(includeGapGap, matchGap, includeGapResidue,
+ matchOnShortestLength);
}
/**
{
}
}
+
+ public PCAPanel getPcaPanel()
+ {
+ return pcaPanel;
+ }
}