use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class BenchmarkFilterAnalysis method scoreFilters.
private FilterScoreResult[] scoreFilters(FilterSet filterSet, boolean createTextResult) {
if (filterSet.size() == 0)
return null;
initialiseScoring(filterSet);
FilterScoreResult[] scoreResults = new FilterScoreResult[filterSet.size()];
if (scoreResults.length == 1) {
// No need to multi-thread this
scoreResults[0] = scoreFilter((DirectFilter) filterSet.getFilters().get(0), minimalFilter, createTextResult, coordinateStore);
} else {
// Multi-thread score all the result
final int nThreads = getThreads(scoreResults.length);
final BlockingQueue<ScoreJob> jobs = new ArrayBlockingQueue<ScoreJob>(nThreads * 2);
final List<ScoreWorker> workers = new LinkedList<ScoreWorker>();
final List<Thread> threads = new LinkedList<Thread>();
for (int i = 0; i < nThreads; i++) {
final ScoreWorker worker = new ScoreWorker(jobs, scoreResults, createTextResult, (coordinateStore == null) ? null : coordinateStore.newInstance());
final Thread t = new Thread(worker);
workers.add(worker);
threads.add(t);
t.start();
}
int index = 0;
totalProgress = scoreResults.length;
stepProgress = Utils.getProgressInterval(totalProgress);
progress = 0;
for (Filter filter : filterSet.getFilters()) {
if (IJ.escapePressed())
break;
put(jobs, new ScoreJob((DirectFilter) filter, index++));
}
// Finish all the worker threads by passing in a null job
for (int i = 0; i < threads.size(); i++) {
put(jobs, new ScoreJob(null, -1));
}
// Wait for all to finish
for (int i = 0; i < threads.size(); i++) {
try {
threads.get(i).join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
threads.clear();
IJ.showProgress(1);
// In case the threads were interrupted
if (Utils.isInterrupted())
scoreResults = null;
}
finishScoring();
return scoreResults;
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method addSNRFilters.
private void addSNRFilters(List<FilterSet> filterSets) {
if (!snrFilter)
return;
for (double w = minWidth; w <= maxWidth; w += incWidth) {
WidthFilter wf = new WidthFilter((float) w);
List<Filter> filters = new LinkedList<Filter>();
for (int snr = minSnr; snr <= maxSnr; snr++) {
filters.add(new AndFilter(wf, new SNRFilter(snr)));
}
filterSets.add(new FilterSet(filters));
}
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method addPrecisionFilters.
private void addPrecisionFilters(List<FilterSet> filterSets) {
if (!precisionFilter)
return;
List<Filter> filters = new LinkedList<Filter>();
for (int p = minPrecision; p <= maxPrecision; p++) {
filters.add(new PrecisionFilter(p));
}
filterSets.add(new FilterSet(filters));
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method addSNRHysteresisFilters.
private void addSNRHysteresisFilters(List<FilterSet> filterSets) {
if (!hysteresisSnrFilter)
return;
for (double w = minWidth; w <= maxWidth; w += incWidth) {
WidthFilter wf = new WidthFilter((float) w);
for (int snrGap = minSnrGap; snrGap <= maxSnrGap; snrGap += incSnrGap) {
List<Filter> filters = new LinkedList<Filter>();
for (int snr = minSnr; snr <= maxSnr; snr++) {
filters.add(new AndFilter(wf, new SNRHysteresisFilter(2, 0, 1, 0, snr, snrGap)));
}
filterSets.add(new FilterSet(filters));
}
}
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class BenchmarkFilterAnalysis method setStrength.
/**
* Sets the strength on all the filters.
*
* @param filterSet
* the filter set
* @return the filter set
*/
private FilterSet setStrength(FilterSet filterSet) {
if (ss_lower != null) {
for (Filter f : filterSet.getFilters()) {
final DirectFilter df = (DirectFilter) f;
df.setStrength(df.computeStrength(ss_lower, ss_upper));
}
}
return filterSet;
}
Aggregations