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;
19 * Note that this currently demands a 1:1 relationship between nodes and
22 * @author kjvanderheide
25 public class ArchaeopteryxTreeConverter
27 protected final SequenceI[] sequences;
29 protected final DistanceMatrix distances;
31 protected final TreeBuilder jalviewTree;
33 public String treeTitle;
35 private final Phylogeny aptxTree;
37 private PhylogenyNode rootNode;
39 private final Map<SequenceI, PhylogenyNode> alignmentBoundNodes;
41 private final Map<PhylogenyNode, SequenceI> nodesBoundAlignment;
43 public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
45 jalviewTree = calculatedTree;
46 sequences = jalviewTree.getSequences();
47 distances = ForesterMatrix.convertJalviewToForester(
48 jalviewTree.getDistances(), sequences);
49 aptxTree = new Phylogeny();
50 rootNode = new PhylogenyNode();
51 alignmentBoundNodes = new HashMap<>(distances.getSize());
52 nodesBoundAlignment = new HashMap<>(distances.getSize());
57 public Phylogeny buildAptxTree(final PhylogenyNode treeRoot)
72 public Phylogeny buildAptxTree()
75 for (SequenceI sequence : sequences)
77 Sequence seq = ForesterConversions
78 .createForesterSequence(sequence, true);
79 PhylogenyNode sequenceNode = new PhylogenyNode(sequence.getName());
80 NodeData nodeData = sequenceNode.getNodeData();
81 nodeData.setSequence(seq);
83 nodesBoundAlignment.put(sequenceNode, sequence);
84 alignmentBoundNodes.put(sequence, sequenceNode);
85 rootNode.addAsChild(sequenceNode);
89 aptxTree.setRoot(rootNode);
91 treeTitle = generateTreeName();
92 aptxTree.setName(treeTitle);
98 public Map<SequenceI, PhylogenyNode> getAlignmentBoundNodes()
100 return alignmentBoundNodes;
103 public Map<PhylogenyNode, SequenceI> getNodesBoundAlignment()
105 return nodesBoundAlignment;
108 private Phylogeny clusterNodes()
114 * Formats a localised title for the tree panel, like
116 * Neighbour Joining Using BLOSUM62
118 * For a tree loaded from file, just uses the file name
122 public String generateTreeName() // Move this and add selection region to the
123 // title when applicable
125 if (treeTitle != null) // will currently never happen, loaded tree file will
126 // take a different path
133 * i18n description of Neighbour Joining or Average Distance method
135 String treecalcnm = MessageManager
136 .getString("label.tree_calc_" + jalviewTree.getClass()
137 .getSimpleName().substring(0, 2).toLowerCase());
139 * short score model name (long description can be too long)
141 String smn = jalviewTree.getScoreModel().getName();
144 * put them together as <method> Using <model>
146 final String ttl = MessageManager
147 .formatMessage("label.treecalc_title", treecalcnm, smn);