Skip to content

Commit 2aa3b5c

Browse files
committed
Merge branch '1.2.0_fixes' of https://github.com/EasyScience/EasyReflectometryApp into 1.2.0_fixes
2 parents d8763ad + e0fa810 commit 2aa3b5c

4 files changed

Lines changed: 58 additions & 9 deletions

File tree

EasyReflectometryApp/Backends/Py/experiment.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
class Experiment(QObject):
1313
experimentChanged = Signal()
1414
externalExperimentChanged = Signal()
15+
qRangeUpdated = Signal()
1516

1617
def __init__(self, project_lib: ProjectLib, parent=None):
1718
super().__init__(parent)
@@ -59,12 +60,16 @@ def load(self, paths: str) -> None:
5960
if isinstance(paths, str):
6061
paths = paths.split(',')
6162

63+
q_range_changed = False
6264
for path in paths:
6365
generalized = IO.generalizePath(path)
6466
if self._project_logic.count_datasets_in_file(generalized) > 1:
65-
self._project_logic.load_all_experiments_from_file(generalized)
67+
_count, changed = self._project_logic.load_all_experiments_from_file(generalized)
6668
else:
67-
self._project_logic.load_new_experiment(generalized)
69+
changed = self._project_logic.load_new_experiment(generalized)
70+
if changed:
71+
q_range_changed = True
6872
self.experimentChanged.emit()
6973
self.externalExperimentChanged.emit()
70-
pass # debug anchor
74+
if q_range_changed:
75+
self.qRangeUpdated.emit()

EasyReflectometryApp/Backends/Py/logic/project.py

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from copy import copy
22
from pathlib import Path
33

4+
import numpy as np
45
from easyreflectometry import Project as ProjectLib
56

67

@@ -107,17 +108,61 @@ def save(self) -> None:
107108
def load(self, path: str) -> None:
108109
self._project_lib.load_from_json(path)
109110

110-
def load_experiment(self, path: str) -> None:
111+
def load_experiment(self, path: str) -> bool:
111112
self._project_lib.load_experiment_for_model_at_index(path, self._project_lib._current_model_index)
113+
return self._sync_q_max_with_loaded_experiments()
112114

113-
def load_new_experiment(self, path: str) -> None:
115+
def load_new_experiment(self, path: str) -> bool:
114116
self._project_lib.load_new_experiment(path)
117+
return self._sync_q_max_with_loaded_experiments()
115118

116119
def count_datasets_in_file(self, path: str) -> int:
117120
return self._project_lib.count_datasets_in_file(path)
118121

119-
def load_all_experiments_from_file(self, path: str) -> int:
120-
return self._project_lib.load_all_experiments_from_file(path)
122+
def load_all_experiments_from_file(self, path: str) -> tuple[int, bool]:
123+
loaded_count = self._project_lib.load_all_experiments_from_file(path)
124+
q_max_changed = self._sync_q_max_with_loaded_experiments()
125+
return loaded_count, q_max_changed
126+
127+
def _sync_q_max_with_loaded_experiments(self) -> bool:
128+
"""Set model q_max to the largest q value found in loaded experiments.
129+
130+
:return: True if q_max was changed, False otherwise.
131+
:rtype: bool
132+
"""
133+
experiments = self._project_lib._experiments
134+
if not experiments:
135+
return False
136+
137+
if hasattr(experiments, 'values'):
138+
experiment_iterable = experiments.values()
139+
else:
140+
experiment_iterable = experiments
141+
142+
q_max_candidates = []
143+
for experiment in experiment_iterable:
144+
x_values = getattr(experiment, 'x', None)
145+
if x_values is None:
146+
continue
147+
148+
q_values = np.asarray(x_values, dtype=float)
149+
if q_values.size == 0:
150+
continue
151+
152+
finite_q_values = q_values[np.isfinite(q_values)]
153+
if finite_q_values.size == 0:
154+
continue
155+
156+
q_max_candidates.append(float(np.max(finite_q_values)))
157+
158+
if not q_max_candidates:
159+
return False
160+
161+
new_q_max = max(q_max_candidates)
162+
if new_q_max != self._project_lib.q_max:
163+
self._project_lib.q_max = new_q_max
164+
return True
165+
return False
121166

122167
def set_sample_from_orso(self, sample) -> None:
123168
self._project_lib.set_sample_from_orso(sample)

EasyReflectometryApp/Backends/Py/py_backend.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ def _connect_sample_page(self) -> None:
160160
def _connect_experiment_page(self) -> None:
161161
self._experiment.externalExperimentChanged.connect(self._relay_experiment_page_experiment_changed)
162162
self._experiment.externalExperimentChanged.connect(self._refresh_plots)
163+
self._experiment.qRangeUpdated.connect(self._sample.qRangeChanged)
163164

164165
def _connect_analysis_page(self) -> None:
165166
self._analysis.externalMinimizerChanged.connect(self._relay_analysis_page)

EasyReflectometryApp/Gui/Pages/Analysis/Sidebar/Basic/Groups/Fittables.qml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ EaElements.GroupBox {
343343
EaComponents.TableViewParameter {
344344
enabled: Globals.BackendWrapper.analysisFitableParameters[index].independent !== undefined ?
345345
Globals.BackendWrapper.analysisFitableParameters[index].independent : true
346-
minored: true
347346
text: EaLogic.Utils.toDefaultPrecision(Globals.BackendWrapper.analysisFitableParameters[index].min).replace('Infinity', 'inf')
348347
onEditingFinished: {
349348
focus = false
@@ -356,7 +355,6 @@ EaElements.GroupBox {
356355
EaComponents.TableViewParameter {
357356
enabled: Globals.BackendWrapper.analysisFitableParameters[index].independent !== undefined ?
358357
Globals.BackendWrapper.analysisFitableParameters[index].independent : true
359-
minored: true
360358
text: EaLogic.Utils.toDefaultPrecision(Globals.BackendWrapper.analysisFitableParameters[index].max).replace('Infinity', 'inf')
361359
onEditingFinished: {
362360
focus = false

0 commit comments

Comments
 (0)