Search in sources :

Example 16 with Filter

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));
    }
}
Also used : FilterSet(gdsc.smlm.results.filter.FilterSet) Filter(gdsc.smlm.results.filter.Filter) OrFilter(gdsc.smlm.results.filter.OrFilter) FilenameFilter(java.io.FilenameFilter) AndFilter(gdsc.smlm.results.filter.AndFilter) WidthFilter(gdsc.smlm.results.filter.WidthFilter) SNRFilter(gdsc.smlm.results.filter.SNRFilter) PrecisionHysteresisFilter(gdsc.smlm.results.filter.PrecisionHysteresisFilter) TraceFilter(gdsc.smlm.results.filter.TraceFilter) PrecisionFilter(gdsc.smlm.results.filter.PrecisionFilter) SNRHysteresisFilter(gdsc.smlm.results.filter.SNRHysteresisFilter) SNRFilter(gdsc.smlm.results.filter.SNRFilter) TraceFilter(gdsc.smlm.results.filter.TraceFilter) OrFilter(gdsc.smlm.results.filter.OrFilter) LinkedList(java.util.LinkedList)

Example 17 with Filter

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));
    }
}
Also used : FilterSet(gdsc.smlm.results.filter.FilterSet) Filter(gdsc.smlm.results.filter.Filter) OrFilter(gdsc.smlm.results.filter.OrFilter) FilenameFilter(java.io.FilenameFilter) AndFilter(gdsc.smlm.results.filter.AndFilter) WidthFilter(gdsc.smlm.results.filter.WidthFilter) SNRFilter(gdsc.smlm.results.filter.SNRFilter) PrecisionHysteresisFilter(gdsc.smlm.results.filter.PrecisionHysteresisFilter) TraceFilter(gdsc.smlm.results.filter.TraceFilter) PrecisionFilter(gdsc.smlm.results.filter.PrecisionFilter) SNRHysteresisFilter(gdsc.smlm.results.filter.SNRHysteresisFilter) PrecisionHysteresisFilter(gdsc.smlm.results.filter.PrecisionHysteresisFilter) LinkedList(java.util.LinkedList)

Example 18 with Filter

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;
}
Also used : Filter(gdsc.smlm.results.filter.Filter) OrFilter(gdsc.smlm.results.filter.OrFilter) FilenameFilter(java.io.FilenameFilter) AndFilter(gdsc.smlm.results.filter.AndFilter) WidthFilter(gdsc.smlm.results.filter.WidthFilter) SNRFilter(gdsc.smlm.results.filter.SNRFilter) PrecisionHysteresisFilter(gdsc.smlm.results.filter.PrecisionHysteresisFilter) TraceFilter(gdsc.smlm.results.filter.TraceFilter) PrecisionFilter(gdsc.smlm.results.filter.PrecisionFilter) SNRHysteresisFilter(gdsc.smlm.results.filter.SNRHysteresisFilter) ClassificationResult(gdsc.core.match.ClassificationResult)

Aggregations

Filter (gdsc.smlm.results.filter.Filter)18 DirectFilter (gdsc.smlm.results.filter.DirectFilter)10 MaximaSpotFilter (gdsc.smlm.filters.MaximaSpotFilter)9 FilterSet (gdsc.smlm.results.filter.FilterSet)9 MultiPathFilter (gdsc.smlm.results.filter.MultiPathFilter)9 PrecisionFilter (gdsc.smlm.results.filter.PrecisionFilter)9 SNRFilter (gdsc.smlm.results.filter.SNRFilter)9 WidthFilter (gdsc.smlm.results.filter.WidthFilter)9 AndFilter (gdsc.smlm.results.filter.AndFilter)8 IDirectFilter (gdsc.smlm.results.filter.IDirectFilter)8 OrFilter (gdsc.smlm.results.filter.OrFilter)8 PrecisionHysteresisFilter (gdsc.smlm.results.filter.PrecisionHysteresisFilter)8 SNRHysteresisFilter (gdsc.smlm.results.filter.SNRHysteresisFilter)8 TraceFilter (gdsc.smlm.results.filter.TraceFilter)8 FilenameFilter (java.io.FilenameFilter)7 LinkedList (java.util.LinkedList)7 ArrayList (java.util.ArrayList)6 GenericDialog (ij.gui.GenericDialog)3 NonBlockingGenericDialog (ij.gui.NonBlockingGenericDialog)3 ClassificationResult (gdsc.core.match.ClassificationResult)2