*/
package jalview.analysis.scoremodels;
-import jalview.api.analysis.DistanceModelI;
+import jalview.api.AlignmentViewPanel;
+import jalview.api.FeatureRenderer;
+import jalview.api.analysis.DistanceScoreModelI;
import jalview.api.analysis.ViewBasedAnalysisI;
import jalview.datamodel.AlignmentView;
import jalview.datamodel.SeqCigar;
import jalview.datamodel.SequenceFeature;
+import jalview.math.Matrix;
+import jalview.math.MatrixI;
import jalview.util.SetUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-public class FeatureDistanceModel implements DistanceModelI, ViewBasedAnalysisI
+public class FeatureDistanceModel implements DistanceScoreModelI,
+ ViewBasedAnalysisI
{
- jalview.api.FeatureRenderer fr;
+ FeatureRenderer fr;
@Override
- public boolean configureFromAlignmentView(
- jalview.api.AlignmentViewPanel view)
+ public boolean configureFromAlignmentView(AlignmentViewPanel view)
+
{
fr = view.cloneFeatureRenderer();
return true;
* of columns processed.
*/
@Override
- public float[][] findDistances(AlignmentView seqData)
+ public MatrixI findDistances(AlignmentView seqData)
{
List<String> dft = fr.getDisplayedFeatureTypes();
SeqCigar[] seqs = seqData.getSequences();
int noseqs = seqs.length;
int cpwidth = 0;// = seqData.getWidth();
- float[][] distance = new float[noseqs][noseqs];
+ double[][] distances = new double[noseqs][noseqs];
if (dft.isEmpty())
{
- return distance;
+ return new Matrix(distances);
}
// need to get real position for view position
{
int seqDistance = SetUtils.countDisjunction(sfap.get(seqs[i]),
sfap.get(seqs[j]));
- distance[i][j] += seqDistance;
+ distances[i][j] += seqDistance;
}
}
}
/*
* normalise the distance scores (summed over columns) by the
* number of visible columns used in the calculation
+ * and fill in the bottom half of the matrix
*/
+ // TODO JAL-2424 cpwidth may be out by 1 - affects scores but not tree shape
for (int i = 0; i < noseqs; i++)
{
for (int j = i + 1; j < noseqs; j++)
{
- distance[i][j] /= cpwidth;
- distance[j][i] = distance[i][j];
+ distances[i][j] /= cpwidth;
+ distances[j][i] = distances[i][j];
}
}
- return distance;
+ return new Matrix(distances);
}
/**