JAL-2795 Forester now NJ-clusters the DistanceMatrix from Jalview
[jalview.git] / src / jalview / ext / archaeopteryx / ArchaeopteryxTreeConverter.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.analysis.TreeBuilder;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.forester.ForesterMatrix;
6 import jalview.util.MessageManager;
7
8 import org.forester.evoinference.distance.NeighborJoiningF;
9 import org.forester.evoinference.matrix.distance.DistanceMatrix;
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.PhylogenyNode;
12
13 public class ArchaeopteryxTreeConverter
14 {
15   protected final SequenceI[] sequences;
16
17   private Phylogeny aptxTree;
18
19   private PhylogenyNode rootNode;
20
21   protected final DistanceMatrix distances;
22   
23   protected final TreeBuilder jalviewTree;
24   
25   public String treeTitle;
26
27
28
29   public ArchaeopteryxTreeConverter(final TreeBuilder calculatedTree)
30   {
31     jalviewTree = calculatedTree;
32     sequences = jalviewTree.getSequences();
33     distances = ForesterMatrix.convertJalviewToForester(
34             jalviewTree.testDistances, sequences);
35     aptxTree = new Phylogeny();
36     rootNode = new PhylogenyNode();
37
38   }
39
40   public Phylogeny buildAptxTree(final PhylogenyNode treeRoot)
41   {
42
43     rootNode = treeRoot;
44
45     buildAptxTree();
46
47
48     return aptxTree;
49
50   }
51
52   public Phylogeny buildAptxTree()
53   {
54
55     NeighborJoiningF foresterClustering = NeighborJoiningF
56             .createInstance();
57     aptxTree = foresterClustering.execute(distances);
58     treeTitle = generateTreeName();
59     aptxTree.setName(treeTitle);
60
61     return aptxTree;
62
63   }
64
65   private Phylogeny clusterNodes()
66   {
67     return aptxTree;
68
69   }
70
71
72   /**
73    * Formats a localised title for the tree panel, like
74    * <p>
75    * Neighbour Joining Using BLOSUM62
76    * <p>
77    * For a tree loaded from file, just uses the file name
78    * 
79    * @return
80    */
81   public String generateTreeName()
82   {
83     if (treeTitle != null) // will currently never happen, loaded tree file will
84                            // take a different path
85     {
86       return treeTitle;
87     }
88     else
89     {
90       /*
91       * i18n description of Neighbour Joining or Average Distance method
92       */
93       String treecalcnm = MessageManager
94               .getString("label.tree_calc_" + jalviewTree.getClass()
95                       .getSimpleName().substring(0, 2).toLowerCase());
96       /*
97       * short score model name (long description can be too long)
98       */
99       String smn = jalviewTree.getScoreModel().getName();
100
101       /*
102       * put them together as <method> Using <model>
103       */
104       final String ttl = MessageManager
105               .formatMessage("label.treecalc_title", treecalcnm, smn);
106       return ttl;
107     }
108   }
109 }