1 // package jalview.ext.archaeopteryx;
3 // import jalview.analysis.TreeBuilder;
4 // import jalview.datamodel.SequenceI;
5 // import jalview.ext.forester.ForesterMatrix;
6 // import jalview.ext.treeviewer.TreeBuilderI;
7 // import jalview.ext.treeviewer.TreeI;
8 // import jalview.ext.treeviewer.TreeNodeI;
9 // import jalview.util.MappingUtils;
10 // import jalview.util.MessageManager;
12 // import java.util.HashMap;
13 // import java.util.Map;
15 // import org.forester.evoinference.matrix.distance.DistanceMatrix;
16 // import org.forester.phylogeny.Phylogeny;
17 // import org.forester.phylogeny.PhylogenyNode;
20 // * Class for converting trees made in Jalview (through TreeBuilder) to trees
21 // * compatible with Forester (Phylogeny objects).
23 // * Note that this currently demands a 1:1 relationship between tree nodes and
24 // * the sequences used for generating them.
26 // * @author kjvanderheide
29 // public class AptxTreeBuilder
30 // implements TreeBuilderI
32 // protected final SequenceI[] sequences;
34 // protected final DistanceMatrix distances;
36 // protected final TreeBuilder jalviewTree;
38 // public String treeTitle;
40 // private final TreeI aptxTree;
42 // private TreeNodeI rootNode;
44 // private final Map<SequenceI, TreeNodeI> alignmentWithNodes;
46 // private final Map<TreeNodeI, SequenceI> nodesWithAlignment;
48 // public AptxTreeBuilder(final TreeBuilder calculatedTree)
50 // jalviewTree = calculatedTree;
51 // sequences = jalviewTree.getSequences();
52 // distances = ForesterMatrix.convertJalviewToForester(
53 // jalviewTree.getDistances(), sequences);
55 // aptxTree = new Tree(new Phylogeny());
56 // rootNode = TreeNode.getUniqueWrapper(new PhylogenyNode());
58 // int amountOfSequences = distances.getSize();
59 // alignmentWithNodes = new HashMap<>(amountOfSequences);
60 // nodesWithAlignment = new HashMap<>(amountOfSequences);
66 // public TreeI buildTree(final TreeNodeI treeRoot)
69 // if (treeRoot != null)
71 // rootNode = treeRoot;
82 // public TreeI buildTree()
85 // for (SequenceI sequence : sequences)
88 // TreeNodeI sequenceNode = TreeNode
90 // new PhylogenyNode(sequence.getName()));
92 // sequenceNode.setSequence(sequence);
94 // MappingUtils.putWithDuplicationCheck(nodesWithAlignment,
95 // sequenceNode, sequence);
96 // MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
97 // sequence, sequenceNode);
98 // rootNode.addAsChild(sequenceNode);
102 // aptxTree.setRoot(rootNode);
104 // treeTitle = generateTreeName();
105 // aptxTree.setTreeName(treeTitle);
112 // public Map<SequenceI, TreeNodeI> getAlignmentBoundNodes()
114 // return alignmentWithNodes;
118 // public Map<TreeNodeI, SequenceI> getNodesBoundAlignment()
120 // return nodesWithAlignment;
125 // * Formats a localised title for the tree panel, like
127 // * Neighbour Joining Using BLOSUM62
129 // * For a tree loaded from file, just uses the file name
134 // public String generateTreeName() // Move this and add selection region to the
135 // // title when applicable
137 // if (treeTitle != null) // will currently never happen, loaded tree file will
138 // // take a different path
145 // * i18n description of Neighbour Joining or Average Distance method
147 // String treecalcnm = MessageManager
148 // .getString("label.tree_calc_" + jalviewTree.getClass()
149 // .getSimpleName().substring(0, 2).toLowerCase());
151 // * short score model name (long description can be too long)
153 // String smn = jalviewTree.getScoreModel().getName();
156 // * put them together as <method> Using <model>
158 // final String ttl = MessageManager
159 // .formatMessage("label.treecalc_title", treecalcnm, smn);