Skip to content

Commit

Permalink
revisit peaks default params when editing peaks from table, fixes #48
Browse files Browse the repository at this point in the history
  • Loading branch information
Crackvignoule committed Mar 5, 2025
1 parent 6fe2395 commit 407b5c8
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 15 deletions.
1 change: 1 addition & 0 deletions fitspy/apps/pyside/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
'click_mode': 'highlight',
'dx0': 20,
'dfwhm': 200,
'alpha': {'min': 0, 'value': 0.5, 'max': 1},
'peaks_cmap': 'tab10',
'map_cmap': 'viridis',
'figure_options': {'title': 'DEFAULT_TITLE (edit in toolbar)'},
Expand Down
2 changes: 2 additions & 0 deletions fitspy/apps/pyside/components/settings/controller.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import copy
import numpy as np
from pathlib import Path
from PySide6.QtCore import QObject, Signal
from PySide6.QtWidgets import QFileDialog
Expand Down Expand Up @@ -327,6 +328,7 @@ def add_row_from_params(prefix, label, model_name, params):

self.update_model_dict(fit_model)
else:
self.model_builder.peaks_table.dx = max(np.diff(spectrum.x))
for label, model in zip(spectrum.peak_labels, spectrum.peak_models):
add_row_from_params(model._prefix, label, model.name2, model.param_hints)
self.set_model(spectrum)
Expand Down
50 changes: 35 additions & 15 deletions fitspy/apps/pyside/components/settings/peaks_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
def model_params():
return get_model_params(PEAK_MODELS)

def is_bound_param(param):
return "MIN |" and "| MAX" in param

def extract_param_name(param):
return param.split("|")[1].strip().lower()

def cmap():
return DEFAULTS["peaks_cmap"]
Expand Down Expand Up @@ -165,6 +170,7 @@ def __init__(self, params_order=None, parent=None):
if params_order is None:
params_order = ['Prefix', 'Label', 'Model', 'x0']
self.params_order = params_order
self.dx = 1.0
self.initUI()
self.show_bounds_state = None # FIXME: bool instead ? What for show_bounds_state=True ?
self.show_expr_state = None
Expand Down Expand Up @@ -221,7 +227,7 @@ def get_widget_value(row, column_name):
params = model_params()

for param in params[model_name]:
if "MIN |" and "| MAX" in param:
if is_bound_param(param):
param_name = param.split(" | ")[1].lower()
param_dict = get_widget_value(row, param)
peak_models[row][model_name][param_name] = {
Expand All @@ -238,9 +244,21 @@ def emit_peaks_changed(self):
self.peaksChanged.emit(self.get_peaks())

def create_spin_box_group_with_expr(
self, min_value=0, value=0, max_value=0, expr=""
self, min=None, value=None, max=None, expr="", param_name=None
):
widget = SpinBoxGroupWithExpression(min_value, value, max_value, expr)
defaults = DEFAULTS.get(param_name, {
"min": 0,
"value": self.dx,
"max": DEFAULTS["dfwhm"]
})
min = min or defaults["min"]
value = value or defaults["value"]
max = max or defaults["max"]

if min is None or value is None or max is None:
raise ValueError("min, value, and max cannot be None")

widget = SpinBoxGroupWithExpression(min, value, max, expr)
widget.show_bounds(self.show_bounds_state)
widget.showToast.connect(self.showToast)
widget.show_expr(self.show_expr_state)
Expand Down Expand Up @@ -282,9 +300,11 @@ def update_columns_based_on_model(self):
col = self.table.get_column_index(param)
widget = cellWidget(row, col)
if widget is None or isinstance(widget, QWidget) and not widget.children():
if "MIN |" in param and "| MAX" in param:
if is_bound_param(param):
if not isinstance(widget, SpinBoxGroupWithExpression):
widget = self.create_spin_box_group_with_expr(0,1,200)
widget = self.create_spin_box_group_with_expr(
param_name=extract_param_name(param)
)
self.table.setCellWidget(row, col, widget)
elif param.endswith("_fixed"):
if not isinstance(widget, CenteredCheckBox):
Expand Down Expand Up @@ -312,7 +332,7 @@ def add_row(self, show_bounds, show_expr, **params):
prefix.clicked.connect(lambda: self.table.remove_widget_row(prefix))

label = QLineEdit(params["label"])

model_names = list(PEAK_MODELS.keys())
model_combo = ComboBox()
model_combo.addItems(model_names)
Expand All @@ -324,12 +344,12 @@ def add_row(self, show_bounds, show_expr, **params):
parameters = model_params().get(model_name, [])
for param in parameters:
# Getting min, value, max and expr values
if "MIN |" in param and "| MAX" in param:
param_key = param.split("|")[1].strip().lower()
min_value = params.get(f"{param_key}_min")
value = params.get(f"{param_key}")
max_value = params.get(f"{param_key}_max")
expr = params.get(f"{param_key}_expr")
if is_bound_param(param):
param_name = extract_param_name(param)
min_value = params.get(f"{param_name}_min")
value = params.get(f"{param_name}")
max_value = params.get(f"{param_name}_max")
expr = params.get(f"{param_name}_expr")
widget = self.create_spin_box_group_with_expr(min_value, value, max_value, expr)
widget.show_bounds(show_bounds)
widget.show_expr(show_expr)
Expand All @@ -342,7 +362,7 @@ def add_row(self, show_bounds, show_expr, **params):
# Ensure all columns are added to the table
for column in row_widgets.keys():
if column not in self.table.columns:
if "MIN |" in column and "| MAX" in column:
if is_bound_param(column):
self.table.add_column(column, SpinBoxGroupWithExpression)
elif column.endswith("_fixed"):
self.table.add_column(column, CenteredCheckBox)
Expand All @@ -365,7 +385,7 @@ def update_prefix_colors(self):
def show_bounds(self, show):
for row in range(self.table.rowCount()):
for column_name in self.table.columns:
if "MIN |" in column_name and "| MAX" in column_name:
if is_bound_param(column_name):
widget = self.table.cellWidget(row, self.table.get_column_index(column_name))
if isinstance(widget, SpinBoxGroupWithExpression):
widget.show_bounds(show)
Expand All @@ -378,7 +398,7 @@ def show_bounds(self, show):
def show_expr(self, show):
for row in range(self.table.rowCount()):
for column_name in self.table.columns:
if "MIN |" in column_name and "| MAX" in column_name:
if is_bound_param(column_name):
widget = self.table.cellWidget(row, self.table.get_column_index(column_name))
if isinstance(widget, SpinBoxGroupWithExpression):
widget.show_expr(show)
Expand Down

0 comments on commit 407b5c8

Please sign in to comment.