package org.seqcode.motifs; import java.util.*; import java.sql.*; import org.seqcode.data.motifdb.WeightMatrix; import org.seqcode.gseutils.*; import org.seqcode.ml.clustering.Cluster; import org.seqcode.ml.clustering.ClusterRepresentative; public class WMMinAvgDistanceRep implements ClusterRepresentative<WeightMatrix> { private WMComparator comp; public WMMinAvgDistanceRep (WMComparator c) { comp = c; } public WeightMatrix getRepresentative(Cluster<WeightMatrix> cluster) { Set<WeightMatrix> matrices = cluster.getElements(); WeightMatrix bestwm = null; double bestdist = Double.MAX_VALUE; for (WeightMatrix i : matrices) { double sum = 0; for (WeightMatrix j : matrices) { sum += comp.compare(i,j); } // System.err.println(" " + i + " : " + sum + " <? " + bestdist); sum = sum / matrices.size(); if (sum < bestdist) { bestwm = i; bestdist = sum; } } if (bestwm == null) { System.err.println("OOPS!" + bestdist); System.err.println(matrices.toString()); } return bestwm; } }