Source code for palm_tracer.Settings.Groups.GaussianFit

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

from dataclasses import dataclass

from palm_tracer.Settings.Groups.BaseSettingGroup import BaseSettingGroup
from palm_tracer.Settings.Types import BrowseFile, CheckBox, Combo, SpinFloat, SpinInt


##################################################
[docs] @dataclass class GaussianFit(BaseSettingGroup): """ Classe contenant les paramètres du Gaussian Fit : Attributs : - **Mode** (:class:`Combo <palm_tracer.Settings.Types.Combo.Combo>`) : Méthode d'ajustement gaussien (par défaut : `Mode X, Y`). - `0` : `Mode X, Y` (theta et sigma sont fixes) - `1` : `Mode X, Y, Sigma` (theta est fixe, Sigma Non) - `2` : `Mode X, Y, SigmaX, SigmaY` (theta n'est pas fixe, Sigma Si) - `3` : `Mode X, Y, SigmaX, SigmaY, Theta` (theta et sigma ne sont pas fixes) - **Sigma** (:class:`SpinFloat <palm_tracer.Settings.Types.SpinFloat.SpinFloat>`) : Paramètre σ pour l'ajustement gaussien (par défaut : `1.0`). - **Theta** (:class:`SpinFloat <palm_tracer.Settings.Types.SpinFloat.SpinFloat>`) : Paramètre θ pour l'ajustement gaussien (par défaut : `0.0`). - **Z** (:class:`CheckBox <palm_tracer.Settings.Types.CheckBox.CheckBox>`) : Utilise le modèle d'astigmatisme pour estimer la position axiale Z. """ label: str = "Gaussian Fit" setting_list = { "Mode": [Combo, ["Mode", "Selects the elements to fit.", 0, ["X, Y", "X, Y, Sigma", "X, Y, SigmaX, SigmaY", "X, Y, SigmaX, SigmaY, Theta"]]], "Sigma": [SpinFloat, ["σ", "Initial value of sigma.", 1.0, [0.0, 10.0], 0.1]], "Theta": [SpinFloat, ["θ", "Initial value of theta in degree.", 0.0, [-90, 90], 0.01]], "Z": [CheckBox, ["Estimate Z", "Use astigmatism model to estimate Z axial position.", False]], "Z max": [SpinInt, ["Z max (nm)", "Maximum absolute value of Z to initialize estimator.", 500, [10, 2000], 10]], "Model": [BrowseFile, ["Specific Model", "Use only if your model isn't in File output folder"], ""], } ##################################################
[docs] def initialize_ui(self): super().initialize_ui() self._settings["Mode"].connect(self.toggle_fit_mode) self._settings["Z"].connect(self.toggle_z_estimate) self.toggle_fit_mode(self._settings["Mode"].value) self.toggle_z_estimate(False)
##################################################
[docs] def toggle_fit_mode(self, mode): """Change le mode d'ajustement.""" if mode in (0, 1): # On ne peut pas estimer Z Sigma X et Sigma Y. self._settings["Z"].value = False self._settings["Z"].hide() else: self._settings["Z"].show()
##################################################
[docs] def toggle_z_estimate(self, mode): """Change le mode d'ajustement.""" if mode: self._settings["Z max"].show() self._settings["Model"].show() else: self._settings["Z max"].hide() self._settings["Model"].hide()
################################################## 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 = GaussianFit() group.active = True w.layout().addWidget(group.widget) w.show() sys.exit(app.exec_())