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
1 change: 1 addition & 0 deletions pixi.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion src/easyreflectometry/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,17 @@

@models.setter
def models(self, models: ModelCollection) -> None:
"""Models function."""
"""Models function.

A loaded experiment whose model is dropped is bound to the new model at
the same index, or to the first one when there are fewer.
"""
old_indices = {key: self._model_index(experiment.model) for key, experiment in self._experiments.items()}

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

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/project.py#L446

Added line #L446 was not covered by tests
self._replace_collection(models, self._models)
for key, experiment in self._experiments.items():
if old_indices[key] is not None and self._model_index(experiment.model) is None and len(self._models):
index = old_indices[key] if old_indices[key] < len(self._models) else 0
experiment.model = self._models[index]

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

View check run for this annotation

Codecov / codecov/patch

src/easyreflectometry/project.py#L448-L451

Added lines #L448 - L451 were not covered by tests
self._invalidate_fitter()
# Use setter to update indicies for current model, assembly and layer
self.current_model_index = 0
Expand Down
13 changes: 13 additions & 0 deletions tests/test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -1288,6 +1288,19 @@ def test_replace_models_from_orso(self):
# Current model index should be reset to 0
assert project.current_model_index == 0

def test_replace_models_from_orso_rebinds_loaded_experiments(self):
"""An experiment loaded before the models are replaced follows the new model and can be fitted."""
global_object.map._clear()
project = Project()
project.default_model()
project.load_new_experiment(os.path.join(PATH_STATIC, 'Ni_example.ort'))

sample = Sample(Multilayer([Layer(material=Material(sld=5.0, isld=0.0), thickness=50, roughness=2)]))
project.replace_models_from_orso(sample)

assert project.experiments[0].model is project.models[0]
assert project.prepare_fit().skipped == []

def test_is_default_model_true(self):
# When
global_object.map._clear()
Expand Down
Loading