/** * Check if a test is complete. * * @param number of test vectors. * @return true when testing is complete. */ public boolean isTested(long numTestVectors) { long count = 0; MetricsPE mpe = null; for (ProcessingElement pe : metricsPE.getRemoteInstances().values()) { mpe = (MetricsPE) pe; count = mpe.getCount(); } if (count < numTestVectors) { return false; } else { report = mpe.toString(); return true; } }
@Override protected void init() { metricsPE = new MetricsPE(this); Stream<ResultEvent> resultStream = new Stream<ResultEvent>(this, "Result Stream", new ResultKeyFinder(), metricsPE); modelPE = new ModelPE(this, model, numVectors); assignmentStream = new Stream<ObsEvent>(this, "Assignment Stream", new ClassIDKeyFinder(), modelPE); MaximizerPE minimizerPE = new MaximizerPE(this, numClasses, assignmentStream); Stream<ObsEvent> distanceStream = new Stream<ObsEvent>(this, "Distance Stream", new ObsIndexKeyFinder(), minimizerPE); /* * There is a loop in this graph so we need to set the stream at the * end. Is there a cleaner way to do this? */ modelPE.setStream(distanceStream, resultStream); // modelPE.setOutputIntervalInEvents(10); // output every 10 events metricsPE.setOutputInterval(outputInterval, timeUnit); // output every 5 // seconds // obsStream = new Stream<ObsEvent>(this, "Observation Stream", new // ClassIDKeyFinder(), modelPE); obsStream = new Stream<ObsEvent>(this, "Observation Stream", modelPE); }