1 package jalview.ext.archaeopteryx;
3 import jalview.analysis.TreeBuilder;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.treeviewer.ExternalTreeBuilderI;
6 import jalview.ext.treeviewer.ExternalTreeViewerBindingI;
7 import jalview.gui.Desktop;
8 import jalview.viewmodel.AlignmentViewport;
10 import java.awt.Dimension;
13 import org.forester.archaeopteryx.Archaeopteryx;
14 import org.forester.archaeopteryx.MainFrame;
15 import org.forester.phylogeny.Phylogeny;
16 import org.forester.phylogeny.PhylogenyNode;
19 * Static class for creating Archaeopteryx tree viewer instances from calculated
20 * trees and letting them be bound to Jalview.
22 * @author kjvanderheide
25 public final class AptxInit
28 * Test method, should generally not be used as it does not bind the tree to
34 public static MainFrame createUnboundInstance(final Phylogeny aptxTree)
36 Phylogeny[] aptxTrees = { aptxTree };
37 return createAptxFrame(aptxTrees);
40 // public static MainFrame createInstance(final Phylogeny[] aptxTrees,
41 // AlignmentViewport jalviewAlignmentView)
43 // return createAptxFrameInJalview(aptxTrees);
47 // public static MainFrame createInstance(final Phylogeny aptxTree,
48 // final AlignmentViewport jalviewAlignmentView)
50 // Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
51 // // several trees simultaneously
52 // return createAptxFrameInJalview(aptxTrees);
56 public static MainFrame createInstance(
57 final TreeBuilder calculatedTree) // very dense method, to be split up
59 ExternalTreeBuilderI<Phylogeny, PhylogenyNode> aptxTreeBuilder = new AptxTreeBuilder(
62 Phylogeny aptxTree = aptxTreeBuilder.buildTree();
63 Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
64 // several trees simultaneously
66 MainFrame aptxApp = createAptxFrame(aptxTrees);
68 bindNodesToJalviewSequences(aptxApp, calculatedTree.getAvport(),
69 aptxTreeBuilder.getAlignmentBoundNodes(),
70 aptxTreeBuilder.getNodesBoundAlignment());
72 return bindFrameToJalview(aptxApp);
76 public static MainFrame createInstanceFromFile(String filePath,
77 AlignmentViewport viewport)
79 String[] AptxArgs = new String[] { "-c",
80 "_aptx_jalview_configuration_file", filePath };
81 MainFrame aptxApp = Archaeopteryx.main(AptxArgs);
83 LoadedTreeAssociation bindAptxNodes = new LoadedTreeAssociation(
84 viewport.getAlignment().getSequencesArray(),
85 aptxApp.getMainPanel().getCurrentTreePanel().getPhylogeny());
87 bindAptxNodes.associateLeavesToSequences();
89 bindNodesToJalviewSequences(aptxApp, viewport,
90 bindAptxNodes.getAlignmentWithNodes(),
91 bindAptxNodes.getNodesWithAlignment());
93 return bindFrameToJalview(aptxApp);
98 public static MainFrame createAptxFrame(
99 final Phylogeny[] aptxTrees)
101 MainFrame aptxApp = Archaeopteryx.createApplication(aptxTrees,
102 "_aptx_jalview_configuration_file", null);
107 public static ExternalTreeViewerBindingI<?> bindNodesToJalviewSequences(
108 final MainFrame aptxApp,
109 final AlignmentViewport jalviewAlignViewport,
110 final Map<SequenceI, PhylogenyNode> alignMappedToNodes,
111 final Map<PhylogenyNode, SequenceI> nodesMappedToAlign)
113 return new JalviewBinding(aptxApp, jalviewAlignViewport,
114 alignMappedToNodes, nodesMappedToAlign);
118 public static MainFrame bindFrameToJalview(final MainFrame aptxApp)
122 aptxApp.setMinimumSize(new Dimension(width, height));
123 // aptxApp.setFont(Desktop.instance.getFont());
124 // aptxApp.getMainPanel().setFont(Desktop.instance.getFont());
126 Desktop.addInternalFrame(aptxApp, "Archaeopteryx Tree View", true,
127 width, height, true, true);