X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FTreeBuilder.java;h=effef9a405fe3140b0f47f439b81f0ed5d285f6a;hb=d3149ce8aaa35531acd228b89622b8fac2565258;hp=6d5b0fe27d75c921c9cb211ccbb00a7a7a7ac9c4;hpb=582493a5b56d3e01d901c6da9906685c31a32abb;p=jalview.git diff --git a/src/jalview/analysis/TreeBuilder.java b/src/jalview/analysis/TreeBuilder.java index 6d5b0fe..effef9a 100644 --- a/src/jalview/analysis/TreeBuilder.java +++ b/src/jalview/analysis/TreeBuilder.java @@ -1,9 +1,7 @@ package jalview.analysis; -import jalview.api.analysis.DistanceScoreModelI; import jalview.api.analysis.ScoreModelI; import jalview.api.analysis.SimilarityParamsI; -import jalview.api.analysis.SimilarityScoreModelI; import jalview.datamodel.AlignmentView; import jalview.datamodel.CigarArray; import jalview.datamodel.SeqCigar; @@ -55,6 +53,8 @@ public abstract class TreeBuilder Vector node; + private AlignmentView seqStrings; + /** * Constructor * @@ -68,7 +68,7 @@ public abstract class TreeBuilder int start, end; boolean selview = av.getSelectionGroup() != null && av.getSelectionGroup().getSize() > 1; - AlignmentView seqStrings = av.getAlignmentView(selview); + seqStrings = av.getAlignmentView(selview); if (!selview) { start = 0; @@ -251,6 +251,12 @@ public abstract class TreeBuilder findMaxDist(top); } + /** + * Returns the minimum distance between two clusters, and also sets the + * indices of the clusters in fields mini and minj + * + * @return + */ protected abstract double findMinDistance(); /** @@ -268,22 +274,7 @@ public abstract class TreeBuilder */ protected void computeTree(ScoreModelI sm, SimilarityParamsI scoreOptions) { - if (sm instanceof DistanceScoreModelI) - { - distances = ((DistanceScoreModelI) sm).findDistances(seqData, - scoreOptions); - } - else if (sm instanceof SimilarityScoreModelI) - { - /* - * compute similarity and invert it to give a distance measure - * reverseRange(true) converts maximum similarity to zero distance - */ - MatrixI result = ((SimilarityScoreModelI) sm).findSimilarities( - seqData, scoreOptions); - result.reverseRange(true); - distances = result; - } + distances = sm.findDistances(seqData, scoreOptions); makeLeaves(); @@ -293,10 +284,10 @@ public abstract class TreeBuilder } /** - * DOCUMENT ME! + * Finds the node, at or below the given node, with the maximum distance, and + * saves the node and the distance value * * @param nd - * DOCUMENT ME! */ void findMaxDist(SequenceNode nd) { @@ -323,14 +314,12 @@ public abstract class TreeBuilder } /** - * DOCUMENT ME! + * Calculates and returns r, whatever that is * * @param i - * DOCUMENT ME! * @param j - * DOCUMENT ME! * - * @return DOCUMENT ME! + * @return */ protected double findr(int i, int j) { @@ -426,8 +415,12 @@ public abstract class TreeBuilder done.set(j); } - protected abstract void findNewDistances(SequenceNode tmpi, SequenceNode tmpj, - double dist); + /* + * Computes and stores new distances for nodei and nodej, given the previous + * distance between them + */ + protected abstract void findNewDistances(SequenceNode nodei, + SequenceNode nodej, double previousDistance); /** * Calculates and saves the distance between the combination of cluster(i) and @@ -459,4 +452,9 @@ public abstract class TreeBuilder } } + public AlignmentView getOriginalData() + { + return seqStrings; + } + }