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 private final Map<PhylogenyNode, SequenceI> nodesBoundAlignment;
36 public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
38 jalviewTree = calculatedTree;
39 sequences = jalviewTree.getSequences();
40 distances = ForesterMatrix.convertJalviewToForester(
41 jalviewTree.getDistances(), sequences);
42 aptxTree = new Phylogeny();
43 rootNode = new PhylogenyNode();
44 alignmentBoundNodes = new HashMap<>(distances.getSize());
45 nodesBoundAlignment = new HashMap<>(distances.getSize());
50 public Phylogeny buildAptxTree(final PhylogenyNode treeRoot)
65 public Phylogeny buildAptxTree()
68 for (SequenceI sequence : sequences)
70 Sequence seq = ForesterConversions
71 .createForesterSequence(sequence);
72 PhylogenyNode sequenceNode = new PhylogenyNode(sequence.getName());
73 NodeData nodeData = sequenceNode.getNodeData();
74 nodeData.setSequence(seq);
76 nodesBoundAlignment.put(sequenceNode, sequence);
77 alignmentBoundNodes.put(sequence, sequenceNode);
78 rootNode.addAsChild(sequenceNode);
82 aptxTree.setRoot(rootNode);
84 treeTitle = generateTreeName();
85 aptxTree.setName(treeTitle);
91 public Map<SequenceI, PhylogenyNode> getAlignmentBoundNodes()
93 return alignmentBoundNodes;
96 public Map<PhylogenyNode, SequenceI> getNodesBoundAlignment()
98 return nodesBoundAlignment;
101 private Phylogeny clusterNodes()
107 * Formats a localised title for the tree panel, like
109 * Neighbour Joining Using BLOSUM62
111 * For a tree loaded from file, just uses the file name
115 public String generateTreeName() // Move this and add selection region to the
116 // title when applicable
118 if (treeTitle != null) // will currently never happen, loaded tree file will
119 // take a different path
126 * i18n description of Neighbour Joining or Average Distance method
128 String treecalcnm = MessageManager
129 .getString("label.tree_calc_" + jalviewTree.getClass()
130 .getSimpleName().substring(0, 2).toLowerCase());
132 * short score model name (long description can be too long)
134 String smn = jalviewTree.getScoreModel().getName();
137 * put them together as <method> Using <model>
139 final String ttl = MessageManager
140 .formatMessage("label.treecalc_title", treecalcnm, smn);