use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method addTraceFilters.
private void addTraceFilters(List<FilterSet> filterSets) {
if (!traceFilter)
return;
for (double d = minDistance; d <= maxDistance; d += incDistance) {
SNRFilter snr = new SNRFilter(maxSnr);
List<Filter> filters = new LinkedList<Filter>();
for (int t = minTime; t <= maxTime; t += incTime) {
filters.add(new OrFilter(snr, new TraceFilter(d, t)));
}
filterSets.add(new FilterSet(filters));
}
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method addPrecisionHysteresisFilters.
private void addPrecisionHysteresisFilters(List<FilterSet> filterSets) {
if (!hysteresisPrecisionFilter)
return;
for (int precisionGap = minPrecisionGap; precisionGap <= maxPrecisionGap; precisionGap += incPrecisionGap) {
List<Filter> filters = new LinkedList<Filter>();
for (int precision = minPrecision; precision <= maxPrecision; precision++) {
filters.add(new PrecisionHysteresisFilter(2, 0, 1, 0, precision, precisionGap));
}
filterSets.add(new FilterSet(filters));
}
}
use of gdsc.smlm.results.filter.Filter in project GDSC-SMLM by aherbert.
the class FilterAnalysis method run.
private int run(FilterSet filterSet, List<MemoryPeakResults> resultsList, int count, final int total) {
double[] xValues = (isHeadless) ? null : new double[filterSet.size()];
double[] yValues = (isHeadless) ? null : new double[filterSet.size()];
int i = 0;
filterSet.sort();
// Track if all the filters are the same type. If so then we can calculate the sensitivity of each parameter.
String type = null;
boolean allSameType = true;
Filter maxFilter = null;
double maxScore = -1;
for (Filter filter : filterSet.getFilters()) {
if (count++ % 16 == 0)
IJ.showProgress(count, total);
ClassificationResult s = run(filter, resultsList);
if (type == null)
type = filter.getType();
else if (!type.equals(filter.getType()))
allSameType = false;
final double jaccard = s.getJaccard();
if (filter == null || maxScore < jaccard) {
maxScore = jaccard;
maxFilter = filter;
}
if (!isHeadless) {
xValues[i] = filter.getNumericalValue();
yValues[i++] = jaccard;
}
}
if (allSameType && calculateSensitivity) {
FilterScore filterScore = bestFilter.get(type);
if (filterScore != null) {
if (filterScore.score < maxScore)
filterScore.update(maxFilter, maxScore);
} else {
bestFilter.put(type, new FilterScore(maxFilter, maxScore));
bestFilterOrder.add(type);
}
}
// Add spacer at end of each result set
if (isHeadless) {
if (showResultsTable)
IJ.log("");
} else {
if (showResultsTable)
resultsWindow.append("");
if (plotTopN > 0) {
// Check the xValues are unique. Since the filters have been sorted by their
// numeric value we only need to compare adjacent entries.
boolean unique = true;
for (int ii = 0; ii < xValues.length - 1; ii++) {
if (xValues[ii] == xValues[ii + 1]) {
unique = false;
break;
}
}
String xAxisName = filterSet.getValueName();
// Check the values all refer to the same property
for (Filter filter : filterSet.getFilters()) {
if (!xAxisName.equals(filter.getNumericalValueName())) {
unique = false;
break;
}
}
if (!unique) {
// If not unique then renumber them and use an arbitrary label
xAxisName = "Filter";
for (int ii = 0; ii < xValues.length; ii++) xValues[ii] = ii + 1;
}
String title = filterSet.getName();
// Check if a previous filter set had the same name, update if necessary
NamedPlot p = getNamedPlot(title);
if (p == null)
plots.add(new NamedPlot(title, xAxisName, xValues, yValues));
else
p.updateValues(xAxisName, xValues, yValues);
if (plots.size() > plotTopN) {
Collections.sort(plots);
p = plots.remove(plots.size() - 1);
}
}
}
return count;
}
Aggregations