Skip to content

Commit 64e07cd

Browse files
committed
properly set background on file load
1 parent 5b0c694 commit 64e07cd

4 files changed

Lines changed: 20 additions & 8 deletions

File tree

src/easyreflectometry/data/data_store.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ def __init__(
7979
model: Optional['Model'] = None, # delay type checking until runtime (quotes)
8080
x_label: str = 'x',
8181
y_label: str = 'y',
82+
auto_background: bool = True,
8283
):
8384
self._model = model
84-
if y is not None and model is not None:
85+
if y is not None and model is not None and auto_background:
8586
self._model.background = max(np.min(y), 1e-10)
8687

8788
if x is None:
@@ -123,7 +124,6 @@ def model(self) -> 'Model': # delay type checking until runtime (quotes)
123124
@model.setter
124125
def model(self, new_model: 'Model') -> None:
125126
self._model = new_model
126-
self._model.background = max(np.min(self.y), 1e-10)
127127

128128
@property
129129
def is_experiment(self) -> bool:

src/easyreflectometry/project.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,12 @@ def _apply_resolution_function(
402402
"""
403403
model.resolution_function = PercentageFwhm(5.0)
404404

405+
@staticmethod
406+
def _auto_set_background(experiment: DataSet1D) -> None:
407+
"""Set the model background to the minimum y-value of the experiment data."""
408+
if experiment.model is not None and len(experiment.y) > 0:
409+
experiment.model.background = max(np.min(experiment.y), 1e-10)
410+
405411
def load_new_experiment(self, path: Union[Path, str]) -> None:
406412
new_experiment = load_as_dataset(str(path))
407413
new_index = len(self._experiments)
@@ -412,6 +418,7 @@ def load_new_experiment(self, path: Union[Path, str]) -> None:
412418

413419
self._apply_experiment_metadata(path, new_experiment, f'Experiment {new_index}')
414420
new_experiment.model = self.models[model_index]
421+
self._auto_set_background(new_experiment)
415422
self._experiments[new_index] = new_experiment
416423
self._with_experiments = True
417424
self._apply_resolution_function(new_experiment, self.models[model_index])
@@ -473,6 +480,7 @@ def load_all_experiments_from_file(self, path: Union[Path, str]) -> int:
473480
data_key=data_key,
474481
)
475482
new_experiment.model = self.models[model_index]
483+
self._auto_set_background(new_experiment)
476484
self._experiments[new_index] = new_experiment
477485
self._apply_resolution_function(new_experiment, self.models[model_index])
478486

@@ -484,6 +492,7 @@ def load_experiment_for_model_at_index(self, path: Union[Path, str], index: Opti
484492

485493
self._apply_experiment_metadata(path, experiment, f'Experiment {index}')
486494
experiment.model = self.models[index]
495+
self._auto_set_background(experiment)
487496
self._experiments[index] = experiment
488497
self._with_experiments = True
489498
self._apply_resolution_function(experiment, self._models[index])
@@ -727,6 +736,7 @@ def _from_dict_extract_experiments(self, project_dict: dict) -> Dict[int, DataSe
727736
ye=project_dict['experiments'][key][2],
728737
xe=project_dict['experiments'][key][3],
729738
model=self._models[project_dict['experiments_models'][key]],
739+
auto_background=False,
730740
)
731741
return experiments
732742

tests/data/test_data_store.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,17 @@ def test_model_property(self):
7979
# Then
8080
assert data.model == mock_model
8181

82-
def test_model_setter_updates_background(self):
82+
def test_model_setter_does_not_update_background(self):
8383
# Given
8484
mock_model = Mock()
85+
mock_model.background = 1e-8 # Original background value
8586
data = DataSet1D(x=[1, 2, 3, 4], y=[1, 2, 0.5, 3])
8687

8788
# When
8889
data.model = mock_model
8990

90-
# Then
91-
assert mock_model.background == 0.5
91+
# Then - background should NOT be overwritten by model setter
92+
assert mock_model.background == 1e-8
9293

9394
def test_is_experiment_property(self):
9495
# Given

tests/test_measurement_comprehensive.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,15 @@ def test_data_points_iterator(self):
189189
expected = [(1, 10, 1, 0.1), (2, 20, 2, 0.2), (3, 30, 3, 0.3)]
190190
assert points == expected
191191

192-
def test_model_property_with_background_setting(self):
193-
"""Test that setting model updates background to minimum y value."""
192+
def test_model_property_setter_does_not_update_background(self):
193+
"""Test that setting model via setter does not overwrite background."""
194194
dataset = DataSet1D(x=[1, 2, 3, 4], y=[5, 1, 8, 3])
195195
mock_model = Mock()
196+
mock_model.background = 1e-8 # Original value
196197

197198
dataset.model = mock_model
198199

199-
assert mock_model.background == 1 # minimum of [5, 1, 8, 3]
200+
assert mock_model.background == 1e-8 # background should NOT be changed by setter
200201

201202
def test_repr_string_representation(self):
202203
"""Test the string representation of DataSet1D."""

0 commit comments

Comments
 (0)