1 package jalview.ext.archaeopteryx;
3 import jalview.analysis.TreeBuilder;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.forester.ForesterConversions;
6 import jalview.ext.forester.ForesterMatrix;
7 import jalview.util.MessageManager;
9 import java.util.HashMap;
12 import org.forester.evoinference.matrix.distance.DistanceMatrix;
13 import org.forester.phylogeny.Phylogeny;
14 import org.forester.phylogeny.PhylogenyNode;
15 import org.forester.phylogeny.data.NodeData;
16 import org.forester.phylogeny.data.Sequence;
18 public class ArchaeopteryxTreeConverter // implements PhylogenyFactory
20 protected final SequenceI[] sequences;
22 protected final DistanceMatrix distances;
24 protected final TreeBuilder jalviewTree;
26 public String treeTitle;
28 private final Phylogeny aptxTree;
30 private PhylogenyNode rootNode;
32 private final Map<SequenceI, PhylogenyNode> alignmentBoundNodes;
34 public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
36 jalviewTree = calculatedTree;
37 sequences = jalviewTree.getSequences();
38 distances = ForesterMatrix.convertJalviewToForester(
39 jalviewTree.getDistances(), sequences);
40 aptxTree = new Phylogeny();
41 rootNode = new PhylogenyNode();
42 alignmentBoundNodes = new HashMap<>(
48 public Phylogeny buildAptxTree(final PhylogenyNode treeRoot)
63 public Phylogeny buildAptxTree()
66 for (SequenceI sequence : sequences)
68 Sequence seq = ForesterConversions
69 .createForesterSequence(sequence);
70 PhylogenyNode sequenceNode = new PhylogenyNode(sequence.getName());
71 NodeData nodeData = sequenceNode.getNodeData();
72 nodeData.setSequence(seq);
74 alignmentBoundNodes.put(sequence, sequenceNode);
75 rootNode.addAsChild(sequenceNode);
79 aptxTree.setRoot(rootNode);
81 treeTitle = generateTreeName();
82 aptxTree.setName(treeTitle);
88 public Map<SequenceI, PhylogenyNode> getAlignmentBoundNodes()
90 return alignmentBoundNodes;
93 private Phylogeny clusterNodes()
99 * Formats a localised title for the tree panel, like
101 * Neighbour Joining Using BLOSUM62
103 * For a tree loaded from file, just uses the file name
107 public String generateTreeName() // Move this and add selection region to the
108 // title when applicable
110 if (treeTitle != null) // will currently never happen, loaded tree file will
111 // take a different path
118 * i18n description of Neighbour Joining or Average Distance method
120 String treecalcnm = MessageManager
121 .getString("label.tree_calc_" + jalviewTree.getClass()
122 .getSimpleName().substring(0, 2).toLowerCase());
124 * short score model name (long description can be too long)
126 String smn = jalviewTree.getScoreModel().getName();
129 * put them together as <method> Using <model>
131 final String ttl = MessageManager
132 .formatMessage("label.treecalc_title", treecalcnm, smn);