@Override public void processNewResult(ResultHierarchy hier, Result newResult) { // We may just have added this result. if (newResult instanceof Clustering && isReferenceResult((Clustering<?>) newResult)) { return; } Database db = ResultUtil.findDatabase(hier); List<Clustering<?>> crs = ResultUtil.getClusteringResults(newResult); if (crs == null || crs.size() < 1) { return; } // Compute the reference clustering Clustering<?> refc = null; // Try to find an existing reference clustering (globally) { Collection<Clustering<?>> cs = ResultUtil.filterResults(hier, db, Clustering.class); for (Clustering<?> test : cs) { if (isReferenceResult(test)) { refc = test; break; } } } // Try to find an existing reference clustering (locally) if (refc == null) { Collection<Clustering<?>> cs = ResultUtil.filterResults(hier, newResult, Clustering.class); for (Clustering<?> test : cs) { if (isReferenceResult(test)) { refc = test; break; } } } if (refc == null) { LOG.debug("Generating a new reference clustering."); Result refres = referencealg.run(db); List<Clustering<?>> refcrs = ResultUtil.getClusteringResults(refres); if (refcrs.size() == 0) { LOG.warning("Reference algorithm did not return a clustering result!"); return; } if (refcrs.size() > 1) { LOG.warning("Reference algorithm returned more than one result!"); } refc = refcrs.get(0); } else { LOG.debug("Using existing clustering: " + refc.getLongName() + " " + refc.getShortName()); } for (Clustering<?> c : crs) { if (c == refc) { continue; } evaluteResult(db, c, refc); } }
@Override public void processNewResult(ResultHierarchy hier, Result result) { List<Clustering<?>> crs = ResultUtil.getClusteringResults(result); if (crs.size() < 1) { return; } Database db = ResultUtil.findDatabase(hier); Relation<? extends NumberVector> rel = db.getRelation(this.distance.getInputTypeRestriction()); for (Clustering<?> c : crs) { evaluateClustering(db, rel, c); } }
@Override public void processNewResult(ResultHierarchy hier, Result result) { List<Clustering<?>> crs = ResultUtil.getClusteringResults(result); if (crs.size() < 1) { return; } Database db = ResultUtil.findDatabase(hier); Relation<O> rel = db.getRelation(distance.getInputTypeRestriction()); DistanceQuery<O> dq = db.getDistanceQuery(rel, distance); for (Clustering<?> c : crs) { evaluateClustering(db, rel, dq, c); } }