Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/easyreflectometry/data/data_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,10 @@ def __init__(
model: Optional['Model'] = None, # delay type checking until runtime (quotes)
x_label: str = 'x',
y_label: str = 'y',
auto_background: bool = True,
):
self._model = model
if y is not None and model is not None:
if y is not None and model is not None and auto_background:
self._model.background = max(np.min(y), 1e-10)

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

@property
def is_experiment(self) -> bool:
Expand Down
10 changes: 10 additions & 0 deletions src/easyreflectometry/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,12 @@
"""
model.resolution_function = PercentageFwhm(5.0)

@staticmethod
def _auto_set_background(experiment: DataSet1D) -> None:
"""Set the model background to the minimum y-value of the experiment data."""
if experiment.model is not None and len(experiment.y) > 0:
experiment.model.background = max(np.min(experiment.y), 1e-10)

def load_new_experiment(self, path: Union[Path, str]) -> None:
new_experiment = load_as_dataset(str(path))
new_index = len(self._experiments)
Expand All @@ -412,6 +418,7 @@

self._apply_experiment_metadata(path, new_experiment, f'Experiment {new_index}')
new_experiment.model = self.models[model_index]
self._auto_set_background(new_experiment)

Check warning on line 421 in src/easyreflectometry/project.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/project.py#L421

Added line #L421 was not covered by tests
self._experiments[new_index] = new_experiment
self._with_experiments = True
self._apply_resolution_function(new_experiment, self.models[model_index])
Expand Down Expand Up @@ -473,6 +480,7 @@
data_key=data_key,
)
new_experiment.model = self.models[model_index]
self._auto_set_background(new_experiment)

Check warning on line 483 in src/easyreflectometry/project.py

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/project.py#L483

Added line #L483 was not covered by tests
self._experiments[new_index] = new_experiment
self._apply_resolution_function(new_experiment, self.models[model_index])

Expand All @@ -484,6 +492,7 @@

self._apply_experiment_metadata(path, experiment, f'Experiment {index}')
experiment.model = self.models[index]
self._auto_set_background(experiment)
self._experiments[index] = experiment
self._with_experiments = True
self._apply_resolution_function(experiment, self._models[index])
Expand Down Expand Up @@ -727,6 +736,7 @@
ye=project_dict['experiments'][key][2],
xe=project_dict['experiments'][key][3],
model=self._models[project_dict['experiments_models'][key]],
auto_background=False,
)
return experiments

Expand Down
7 changes: 4 additions & 3 deletions tests/data/test_data_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,17 @@ def test_model_property(self):
# Then
assert data.model == mock_model

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

# When
data.model = mock_model

# Then
assert mock_model.background == 0.5
# Then - background should NOT be overwritten by model setter
assert mock_model.background == 1e-8

def test_is_experiment_property(self):
# Given
Expand Down
7 changes: 4 additions & 3 deletions tests/test_measurement_comprehensive.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,15 @@ def test_data_points_iterator(self):
expected = [(1, 10, 1, 0.1), (2, 20, 2, 0.2), (3, 30, 3, 0.3)]
assert points == expected

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

dataset.model = mock_model

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

def test_repr_string_representation(self):
"""Test the string representation of DataSet1D."""
Expand Down
Loading