Source code for palm_tracer.Settings.Groups.Localization

"""
Fichier contenant la classe :class:`Localisation` dérivée de :class:`.BaseSettingGroup`,
qui regroupe les paramètres de localisation nécessaires à la configuration de PALM Tracer.
"""

from dataclasses import dataclass

import numpy as np

from palm_tracer.Settings.Groups.BaseSettingGroup import BaseSettingGroup
from palm_tracer.Settings.Groups.GaussianFit import GaussianFit
from palm_tracer.Settings.Groups.SplineFit import SplineFit
from palm_tracer.Settings.Types import Button, CheckBox, Combo, SpinFloat, SpinInt
from palm_tracer.Tools.FileIO import open_calibration_mat


##################################################
[docs] @dataclass class Localization(BaseSettingGroup): """ Classe contenant les paramètres de Localisation : Attributs : - **Preview** (:class:`CheckBox <palm_tracer.Settings.Types.CheckBox.CheckBox>`) : Activation de l'aperçu ou non (par défaut : `False`). - **Threshold** (:class:`SpinFloat <palm_tracer.Settings.Types.SpinFloat.SpinFloat>`) : Seuil de détection de la localisation en intensité (par défaut : `90`). - **Auto Threshold** (:class:`Button <palm_tracer.Settings.Types.Button.Button>`) : Bouton pour calculer le seuil automatiquement. - **ROI Shape** (:class:`Combo <palm_tracer.Settings.Types.Combo.Combo>`) : Forme de la zone autour de la localisation (par défaut : `Circle`). - **ROI Size** (:class:`SpinInt <palm_tracer.Settings.Types.SpinInt.SpinInt>`) : Taille de la zone autour des localisations (par défaut : `7`). - **Watershed** (:class:`CheckBox <palm_tracer.Settings.Types.CheckBox.CheckBox>`) : Activation ou désactivation du mode Watershed (par défaut : `True`). - **Fit** (:class:`Combo <palm_tracer.Settings.Types.Combo.Combo>`) : Mode de calcul d'ajustement pour la localisation (par défaut : `Nothing`). - **Gaussian Fit** (:class:`GaussianFit <palm_tracer.Settings.Groups.GaussianFit.GaussianFit>`) : Paramètres du Gaussian Fit. - **Spline Fit** (:class:`SplineFit <palm_tracer.Settings.Groups.SplineFit.SplineFit>`) : Paramètres du Spline Fit. """ label: str = "Localization" setting_list = { "Preview": [CheckBox, ["Preview", "", False]], "Threshold": [SpinFloat, ["Threshold", "", 90.0, [10.0, 10000], 5.0, 2]], "Auto Threshold": [Button, ["Auto Threshold", ""]], "ROI Shape": [Combo, ["ROI Shape", "", 0, ["Circle", "Square"]]], "ROI Size": [SpinInt, ["ROI Size", "", 7, [3, 50], 1]], "Watershed": [CheckBox, ["Watershed", "Use Watershed algorithm to separate nearby points.", True]], "Fit": [Combo, ["Fit", "", 0, ["Nothing", "Gaussian Fit", "Spline"]]], "Gaussian Fit": [GaussianFit, []], "Spline Fit": [SplineFit, []] } _inner_groups = ["Gaussian Fit", "Spline Fit"] ##################################################
[docs] def initialize_ui(self): super().initialize_ui() self._settings["Gaussian Fit"].remove_header() self._settings["Spline Fit"].remove_header() self._settings["Spline Fit"].hide() self._settings["Fit"].connect(self.toggle_fit_mode)
##################################################
[docs] def toggle_fit_mode(self, mode): """Change le mode d'ajustement.""" if mode == 0: self._settings["Gaussian Fit"].hide() self._settings["Spline Fit"].hide() elif mode == 1: self._settings["Gaussian Fit"].show() self._settings["Spline Fit"].hide() else: self._settings["Gaussian Fit"].hide() self._settings["Spline Fit"].show()
##################################################
[docs] def get_fit(self) -> int: """Récupère le paramètre indiquant le mode d'ajustement.""" s = self.settings mode = s["Fit"] gaussian_mode = s["Gaussian Fit Mode"] # spline_sensor = s["Spline Fit Sensor"] if mode == 0: return 0 # . Aucun ajustement elif mode == 1: return 1 + gaussian_mode # Ajustement Gaussien else: return 5 # + spline_sensor # Ajustement Spline
##################################################
[docs] def get_fit_params(self) -> np.ndarray: """Récupère les paramètres pour l'ajustement.""" s = self.settings if s["Fit"] == 0: return np.array([s["ROI Size"]], dtype=np.float64) if s["Fit"] != 2: return np.array([s["ROI Size"], s["Gaussian Fit Sigma"], 2 * s["Gaussian Fit Sigma"], s["Gaussian Fit Theta"]], dtype=np.float64) # Load Mat File try: calib = open_calibration_mat(s["Spline Fit File"]) sx, sy, sz = calib["coeff"].shape[:3] return np.concatenate([np.array([s["ROI Size"], sx, sy, sz, calib["dz"]], dtype=np.float64), calib["coeff"].flatten()]) except Exception: raise
################################################## if __name__ == "__main__": import sys from qtpy.QtWidgets import QApplication, QVBoxLayout, QWidget app = QApplication(sys.argv) w = QWidget() lay = QVBoxLayout(w) # crée et assigne le layout au widget group = Localization() group.active = True w.layout().addWidget(group.widget) w.show() sys.exit(app.exec_())