Source code for palmari.processing.steps.quot_localizer

from .base import Detector, SubpixelLocalizer
from ...quot.core import localize_frame, detect
import pandas as pd
import numpy as np
from typing import Dict
import enum

detection_methods_dict = {
    "log": "Laplacian of Gaussians",
    "llr": "Likelihood ratio",
}


[docs]class BaseDetector(Detector): def __init__( self, k: float = 1.5, w: int = 21, t: float = 1.0, method: str = "llr" ): self.k = k self.w = w self.t = t self.method = method
[docs] def detect_frame(self, img: np.array) -> pd.DataFrame: return detect(img, t=self.t, k=self.k, method=self.method, w=self.w)
@property def name(self): return "Log-likelihood detector" widget_types = {"t": "FloatSlider", "method": "ComboBox"} widget_options = { "t": { "step": 0.1, "min": 0.5, "max": 3.0, "label": "Threshold", "readout": True, }, "k": { "step": 0.1, "label": "Spot size (px)", "min": 0.0, }, "w": { "step": 2, "label": "Window size (px)", "min": 5, "tooltip": "Size of the square window used for testing.", }, "method": { "label": "Method", "choices": [ ("Log-likelihood ratio", "llr"), ("Laplacian of Gaussians", "log"), ], }, }
[docs]class RadialLocalizer(SubpixelLocalizer): cols_dtype = { "y": float, "x": float, "I0": float, "bg": float, "error_flag": bool, "snr": float, } widget_options = { "window_size": {"label": "Window size (px)", "step": 1}, } def __init__( self, window_size: int = 9, ): self.window_size = window_size @property def name(self): return "Radial symmetry localizer"
[docs] def localize_frame( self, img: np.array, detections: np.array ) -> pd.DataFrame: return localize_frame( img.T, detections, method="radial_symmetry", sigma=1.0, window_size=self.window_size, )
[docs]class MaxLikelihoodLocalizer(SubpixelLocalizer): cols_dtype = { "x": float, "y": float, "frame": int, "I0": float, "bg": float, "y_err": float, "x_err": float, "I0_err": float, "bg_err": float, "H_det": float, "error_flag": int, "snr": float, "rmse": float, } widget_types = {"method": "ComboBox"} widget_options = { "method": { "label": "Noise", "value": "ls_int_gaussian", "choices": [ ("Gaussian", "ls_int_gaussian"), ("Poisson", "poisson_int_gaussian"), ], "tooltip": "Assumed type of background noise", }, "window_size": {"label": "Window size (px)", "step": 1}, "sigma": {"label": "Spot size (px)", "step": 0.1}, } def __init__( self, method: str = "ls_int_gaussian", window_size: int = 9, sigma: float = 1.5, ): self._loc_params = { "ridge": 0.0001, "convergence": 0.0001, "divergence": 1.0, "max_iter": 10, "damp": 0.3, "camera_bg": 0.0, "camera_gain": 1.0, } self.method = method self.window_size = window_size self.sigma = sigma @property def name(self): return "Max-likelihood subpixel localizer"
[docs] def localize_frame( self, img: np.array, detections: np.array ) -> pd.DataFrame: return localize_frame( img.T, detections, method=self.method, sigma=self.sigma, window_size=self.window_size, **self._loc_params )