package edu.harvard.mcb.leschziner.classify; import java.util.concurrent.BlockingQueue; import edu.harvard.mcb.leschziner.analyze.CvPrincipalComponentAnalyzer; import edu.harvard.mcb.leschziner.analyze.KMeansClusterer; import edu.harvard.mcb.leschziner.core.Particle; import edu.harvard.mcb.leschziner.distributed.DistributedProcessingTask; import edu.harvard.mcb.leschziner.event.CompletionEvent; import edu.harvard.mcb.leschziner.storage.DefaultStorageEngine; public class PCAClassifier extends DistributedClassifier { public static int iterations = 100; public static int attempts = 1; private final String targetQueueName; private final BlockingQueue<Particle> targets; private final CvPrincipalComponentAnalyzer pcAnalyzer; private final KMeansClusterer clusterer; public PCAClassifier(int principalComponents, int classCount, double classAccuracy) { super(); targetQueueName = "ToClassify_" + this.hashCode(); targets = DefaultStorageEngine.getStorageEngine() .getQueue(targetQueueName); pcAnalyzer = new CvPrincipalComponentAnalyzer(principalComponents); clusterer = new KMeansClusterer(classCount, classAccuracy, iterations, attempts); } @Override public void processParticle(Particle particle) { targets.add(particle); DefaultStorageEngine.getStorageEngine() .getBufferedQueue(executorName + DistributedProcessingTask.EVENT_SUFFIX) .add(new CompletionEvent(this.getClass().getName(), 0, 0)); } @Override public void classifyAll() { execute(new PCAClassifierTask(targetQueueName, pcAnalyzer, clusterer, classesMapName, executorName)); } }