X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTreePanel.java;h=67ac83621e9fa783224b6adeab1e2fad09e45938;hb=6a144c3b2b7f5f04d908c065a017088453bb7fc7;hp=9ac2872a8b3173c4d55af634e8cce49092bcc74b;hpb=e2e2b85d7a8e3d7ed6926ef1bf55eb2328e744d1;p=jalview.git diff --git a/src/jalview/gui/TreePanel.java b/src/jalview/gui/TreePanel.java index 9ac2872..67ac836 100755 --- a/src/jalview/gui/TreePanel.java +++ b/src/jalview/gui/TreePanel.java @@ -21,10 +21,7 @@ package jalview.gui; import jalview.analysis.AlignmentSorter; -import jalview.analysis.NJTree; -import jalview.api.analysis.ScoreModelI; -import jalview.api.analysis.SimilarityParamsI; -import jalview.api.analysis.ViewBasedAnalysisI; +import jalview.analysis.TreeModel; import jalview.bin.Cache; import jalview.commands.CommandI; import jalview.commands.OrderCommand; @@ -32,12 +29,13 @@ import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; import jalview.datamodel.BinaryNode; -import jalview.datamodel.ColumnSelection; import jalview.datamodel.DBRefEntry; +import jalview.datamodel.HiddenColumns; import jalview.datamodel.NodeTransformI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.datamodel.SequenceNode; +import jalview.ext.archaeopteryx.ArchaeopteryxNewickInit; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.io.NewickFile; @@ -71,17 +69,15 @@ import org.jibble.epsgraphics.EpsGraphics2D; */ public class TreePanel extends GTreePanel { - String treeType; + String substitutionMatrix; - ScoreModelI scoreModel; // if tree computed + String treeType; String treeTitle; // if tree loaded - SimilarityParamsI similarityParams; - TreeCanvas treeCanvas; - NJTree tree; + TreeModel tree; AlignViewport av; @@ -89,28 +85,37 @@ public class TreePanel extends GTreePanel * Creates a new TreePanel object. * * @param ap - * @param type - * @param sm - * @param options + * @param tree */ - public TreePanel(AlignmentPanel ap, String type, ScoreModelI sm, - SimilarityParamsI options) + public TreePanel(AlignmentPanel ap, TreeModel tree, String treeType, + String substitutionMatrix) { super(); - this.similarityParams = options; - initTreePanel(ap, type, sm, null, null); + this.treeType = treeType; + this.substitutionMatrix = substitutionMatrix; + this.tree = tree; + initNewTreePanel(ap, tree); // We know this tree has distances. JBPNote TODO: prolly should add this as // a userdefined default // showDistances(true); } + /** + * Creates a new TreePanel object. + * + * @param alignPanel + * @param newtree + * @param theTitle + * @param inputData + * @param viewport + */ public TreePanel(AlignmentPanel alignPanel, NewickFile newtree, String theTitle, AlignmentView inputData) { super(); this.treeTitle = theTitle; - initTreePanel(alignPanel, null, null, newtree, inputData); + initLoadedTreePanel(alignPanel, newtree, inputData); } public AlignmentI getAlignment() @@ -123,17 +128,30 @@ public class TreePanel extends GTreePanel return treeCanvas.av; } - void initTreePanel(AlignmentPanel ap, String type, ScoreModelI sm, + void initNewTreePanel(AlignmentPanel ap, TreeModel tree) + { + buildTreeCanvas(ap); + + TreeLoader tl = new TreeLoader(null, null); + tl.start(); + + } + void initLoadedTreePanel(AlignmentPanel ap, NewickFile newTree, AlignmentView inputData) { + buildTreeCanvas(ap); + + TreeLoader tl = new TreeLoader(newTree, inputData); + tl.start(); + } - av = ap.av; - this.treeType = type; - this.scoreModel = sm; +public void buildTreeCanvas(AlignmentPanel ap) { + av = ap.av; treeCanvas = new TreeCanvas(this, ap, scrollPane); scrollPane.setViewportView(treeCanvas); + PaintRefresher.Register(this, ap.av.getSequenceSetId()); buildAssociatedViewMenu(); @@ -155,8 +173,8 @@ public class TreePanel extends GTreePanel } if (evt.getNewValue() == null) { - System.out - .println("new alignment sequences vector value is null"); + System.out.println( + "new alignment sequences vector value is null"); } tree.updatePlaceHolders((List) evt.getNewValue()); @@ -167,12 +185,8 @@ public class TreePanel extends GTreePanel } }); - TreeLoader tl = new TreeLoader(newTree); - if (inputData != null) - { - tl.odata = inputData; - } - tl.start(); + + } @@ -184,8 +198,8 @@ public class TreePanel extends GTreePanel void buildAssociatedViewMenu() { - AlignmentPanel[] aps = PaintRefresher.getAssociatedPanels(av - .getSequenceSetId()); + AlignmentPanel[] aps = PaintRefresher + .getAssociatedPanels(av.getSequenceSetId()); if (aps.length == 1 && treeCanvas.ap == aps[0]) { associateLeavesMenu.setVisible(false); @@ -194,7 +208,8 @@ public class TreePanel extends GTreePanel associateLeavesMenu.setVisible(true); - if ((viewMenu.getItem(viewMenu.getItemCount() - 2) instanceof JMenuItem)) + if ((viewMenu + .getItem(viewMenu.getItemCount() - 2) instanceof JMenuItem)) { viewMenu.insertSeparator(viewMenu.getItemCount() - 1); } @@ -243,58 +258,61 @@ public class TreePanel extends GTreePanel class TreeLoader extends Thread { - NewickFile newtree; + private NewickFile newTree; - AlignmentView odata = null; + private AlignmentView odata = null; - public TreeLoader(NewickFile newickFile) + public TreeLoader(NewickFile newickFile, AlignmentView inputData) { - this.newtree = newickFile; - if (newickFile != null) + this.newTree = newickFile; + this.odata = inputData; + + if (newTree != null) { // Must be outside run(), as Jalview2XML tries to // update distance/bootstrap visibility at the same time - showBootstrap(newickFile.HasBootstrap()); - showDistances(newickFile.HasDistances()); + showBootstrap(newTree.hasBootstrap()); + showDistances(newTree.hasDistances()); + } + } @Override public void run() { - if (newtree != null) + if (newTree != null) { - if (odata == null) + tree = new TreeModel(av.getAlignment().getSequencesArray(), odata, + newTree); + if (tree.getOriginalData() == null) { - tree = new NJTree(av.getAlignment().getSequencesArray(), newtree); + originalSeqData.setVisible(false); } - else - { - tree = new NJTree(av.getAlignment().getSequencesArray(), odata, - newtree); - } - if (!tree.hasOriginalSequenceData()) - { - allowOriginalSeqData(false); - } - } - else - { - ScoreModelI sm = configureScoreModel(); - tree = new NJTree(av, treeType, sm, similarityParams); - showDistances(true); + + + } + showTree(tree); + } + + public void showTree(TreeModel tree) + { tree.reCount(tree.getTopNode()); tree.findHeight(tree.getTopNode()); treeCanvas.setTree(tree); treeCanvas.repaint(); + av.setCurrentTree(tree); if (av.getSortByTree()) { sortByTree_actionPerformed(); } + + ArchaeopteryxNewickInit archae = new ArchaeopteryxNewickInit(tree); + archae.startArchaeopteryx(); } } @@ -316,17 +334,12 @@ public class TreePanel extends GTreePanel treeCanvas.setMarkPlaceholders(b); } - private void allowOriginalSeqData(boolean b) - { - originalSeqData.setVisible(b); - } - /** * DOCUMENT ME! * * @return DOCUMENT ME! */ - public NJTree getTree() + public TreeModel getTree() { return tree; } @@ -370,8 +383,8 @@ public class TreePanel extends GTreePanel JalviewFileChooser chooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.save_tree_as_newick")); + chooser.setDialogTitle( + MessageManager.getString("label.save_tree_as_newick")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(null); @@ -379,15 +392,15 @@ public class TreePanel extends GTreePanel if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); try { jalview.io.NewickFile fout = new jalview.io.NewickFile( tree.getTopNode()); - String output = fout.print(tree.hasBootstrap(), - tree.hasDistances(), tree.hasRootDistance()); + String output = fout.print(tree.hasBootstrap(), tree.hasDistances(), + tree.hasRootDistance()); java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileWriter(choice)); out.println(output); @@ -415,10 +428,11 @@ public class TreePanel extends GTreePanel @Override public void originalSeqData_actionPerformed(ActionEvent e) { - if (!tree.hasOriginalSequenceData()) + AlignmentView originalData = tree.getOriginalData(); + if (originalData == null) { - jalview.bin.Cache.log - .info("Unexpected call to originalSeqData_actionPerformed - should have hidden this menu action."); + jalview.bin.Cache.log.info( + "Unexpected call to originalSeqData_actionPerformed - should have hidden this menu action."); return; } // decide if av alignment is sufficiently different to original data to @@ -437,16 +451,17 @@ public class TreePanel extends GTreePanel } catch (Exception ex) { } - ; - Object[] alAndColsel = tree.seqData.getAlignmentAndColumnSelection(gc); + + Object[] alAndColsel = originalData.getAlignmentAndHiddenColumns(gc); if (alAndColsel != null && alAndColsel[0] != null) { // AlignmentOrder origorder = new AlignmentOrder(alAndColsel[0]); AlignmentI al = new Alignment((SequenceI[]) alAndColsel[0]); - AlignmentI dataset = (av != null && av.getAlignment() != null) ? av - .getAlignment().getDataset() : null; + AlignmentI dataset = (av != null && av.getAlignment() != null) + ? av.getAlignment().getDataset() + : null; if (dataset != null) { al.setDataset(dataset); @@ -455,9 +470,8 @@ public class TreePanel extends GTreePanel if (true) { // make a new frame! - AlignFrame af = new AlignFrame(al, - (ColumnSelection) alAndColsel[1], AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); + AlignFrame af = new AlignFrame(al, (HiddenColumns) alAndColsel[1], + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); // >>>This is a fix for the moment, until a better solution is // found!!<<< @@ -467,8 +481,8 @@ public class TreePanel extends GTreePanel // msaorder); Desktop.addInternalFrame(af, MessageManager.formatMessage( - "label.original_data_for_params", - new Object[] { this.title }), AlignFrame.DEFAULT_WIDTH, + "label.original_data_for_params", new Object[] + { this.title }), AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); } } @@ -498,9 +512,9 @@ public class TreePanel extends GTreePanel if (treeCanvas.applyToAllViews) { - final ArrayList commands = new ArrayList(); - for (AlignmentPanel ap : PaintRefresher.getAssociatedPanels(av - .getSequenceSetId())) + final ArrayList commands = new ArrayList<>(); + for (AlignmentPanel ap : PaintRefresher + .getAssociatedPanels(av.getSequenceSetId())) { commands.add(sortAlignmentIn(ap.av.getAlignPanel())); } @@ -538,8 +552,8 @@ public class TreePanel extends GTreePanel } } }); - for (AlignmentPanel ap : PaintRefresher.getAssociatedPanels(av - .getSequenceSetId())) + for (AlignmentPanel ap : PaintRefresher + .getAssociatedPanels(av.getSequenceSetId())) { // ensure all the alignFrames refresh their GI after adding an undo item ap.alignFrame.updateEditMenuBar(); @@ -674,8 +688,8 @@ public class TreePanel extends GTreePanel JalviewFileChooser chooser = new JalviewFileChooser( ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.create_eps_from_tree")); + chooser.setDialogTitle( + MessageManager.getString("label.create_eps_from_tree")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -685,11 +699,13 @@ public class TreePanel extends GTreePanel return; } - Cache.setProperty("LAST_DIRECTORY", chooser.getSelectedFile() - .getParent()); + Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); - FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); - EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, height); + FileOutputStream out = new FileOutputStream( + chooser.getSelectedFile()); + EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, + height); pg.setAccurateTextMode(accurateText); @@ -721,8 +737,8 @@ public class TreePanel extends GTreePanel ImageMaker.PNG_EXTENSION, ImageMaker.PNG_DESCRIPTION); chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.create_png_from_tree")); + chooser.setDialogTitle( + MessageManager.getString("label.create_png_from_tree")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -732,10 +748,11 @@ public class TreePanel extends GTreePanel return; } - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); - FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); + FileOutputStream out = new FileOutputStream( + chooser.getSelectedFile()); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); @@ -776,9 +793,9 @@ public class TreePanel extends GTreePanel if (sq != null) { // search dbrefs, features and annotation - DBRefEntry[] refs = jalview.util.DBRefUtils.selectRefs( - sq.getDBRefs(), - new String[] { labelClass.toUpperCase() }); + DBRefEntry[] refs = jalview.util.DBRefUtils + .selectRefs(sq.getDBRefs(), new String[] + { labelClass.toUpperCase() }); if (refs != null) { for (int i = 0; i < refs.length; i++) @@ -795,19 +812,17 @@ public class TreePanel extends GTreePanel } if (newname == null) { - SequenceFeature sf[] = sq.getSequenceFeatures(); - for (int i = 0; sf != null && i < sf.length; i++) + List features = sq.getFeatures() + .getPositionalFeatures(labelClass); + for (SequenceFeature feature : features) { - if (sf[i].getType().equals(labelClass)) + if (newname == null) + { + newname = feature.getDescription(); + } + else { - if (newname == null) - { - newname = new String(sf[i].getDescription()); - } - else - { - newname = newname + "; " + sf[i].getDescription(); - } + newname = newname + "; " + feature.getDescription(); } } } @@ -829,56 +844,34 @@ public class TreePanel extends GTreePanel * Neighbour Joining Using BLOSUM62 *

* For a tree loaded from file, just uses the file name + * * @return */ - public String getPanelTitle() + public String getPanelTitle() // to be moved/fixed { if (treeTitle != null) { return treeTitle; } - - /* - * i18n description of Neighbour Joining or Average Distance method - */ - String treecalcnm = MessageManager.getString("label.tree_calc_" - + treeType.toLowerCase()); - - /* - * i18n description (if available) of score model used - */ - String smn = MessageManager.getStringOrReturn("label.score_model_", - scoreModel.getName()); - - /* - * put them together as Using - */ - final String ttl = MessageManager.formatMessage("label.treecalc_title", - treecalcnm, smn); - return ttl; - } - - /** - * If the score model is one that requires to get state data from the current - * view, create and configure a new instance of it - * - * @return - */ - protected ScoreModelI configureScoreModel() - { - if (scoreModel instanceof ViewBasedAnalysisI) + else { - try - { - scoreModel = scoreModel.getClass().newInstance(); - ((ViewBasedAnalysisI) scoreModel) - .configureFromAlignmentView(treeCanvas.ap); - } catch (Exception q) - { - Cache.log.error("Couldn't create a scoremodel instance for " - + scoreModel.getName()); - } + /* + * i18n description of Neighbour Joining or Average Distance method + */ + String treecalcnm = MessageManager + .getString("label.tree_calc_" + treeType.toLowerCase()); + + /* + * short score model name (long description can be too long) + */ + String smn = substitutionMatrix; + + /* + * put them together as Using + */ + final String ttl = MessageManager + .formatMessage("label.treecalc_title", treecalcnm, smn); + return ttl; } - return scoreModel; } }