Skip to content

Commit

Permalink
fitter as property
Browse files Browse the repository at this point in the history
  • Loading branch information
andped10 committed Nov 15, 2024
1 parent 156f7be commit 1a23538
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions src/easyreflectometry/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def __init__(self):
self._current_model_index = 0
self._current_assembly_index = 0
self._current_layer_index = 0
self._fitter_model_index = None

# Project flags
self._created = False
Expand Down Expand Up @@ -177,7 +178,14 @@ def models(self, models: ModelCollection) -> None:
self._materials.extend(self._get_materials_in_models())
for model in self._models:
model.interface = self._calculator
self._fitter = MultiFitter(self._models[self._current_model_index])

@property
def fitter(self) -> MultiFitter:
if len(self._models):
if (self._fitter is None) or (self._fitter_model_index != self._current_model_index):
self._fitter = MultiFitter(self._models[self._current_model_index])
self._fitter_model_index = self._current_model_index
return self._fitter

@property
def calculator(self) -> str:
Expand All @@ -189,14 +197,14 @@ def calculator(self, calculator: str) -> None:

@property
def minimizer(self) -> AvailableMinimizers:
if self._fitter is not None:
return self._fitter.easy_science_multi_fitter.minimizer
if self.fitter is not None:
return self.fitter.easy_science_multi_fitter.minimizer
return DEFAULT_MINIMIZER

@minimizer.setter
def minimizer(self, minimizer: AvailableMinimizers) -> None:
if self._fitter is not None:
self._fitter.easy_science_multi_fitter.switch_minimizer(minimizer)
if self.fitter is not None:
self.fitter.easy_science_multi_fitter.switch_minimizer(minimizer)

@property
def experiments(self) -> Dict[int, DataSet1D]:
Expand Down Expand Up @@ -363,8 +371,8 @@ def as_dict(self, include_materials_not_in_model=False):
self._as_dict_add_materials_not_in_model_dict(project_dict)
if self._with_experiments:
self._as_dict_add_experiments(project_dict)
if self._fitter is not None:
project_dict['fitter_minimizer'] = self._fitter.easy_science_multi_fitter.minimizer.name
if self.fitter is not None:
project_dict['fitter_minimizer'] = self.fitter.easy_science_multi_fitter.minimizer.name
if self._calculator is not None:
project_dict['calculator'] = self._calculator.current_interface_name
if self._colors is not None:
Expand Down Expand Up @@ -403,7 +411,7 @@ def from_dict(self, project_dict: dict):
if 'materials_not_in_model' in keys:
self._materials.extend(MaterialCollection.from_dict(project_dict['materials_not_in_model']))
if 'fitter_minimizer' in keys:
self._fitter.easy_science_multi_fitter.switch_minimizer(AvailableMinimizers[project_dict['fitter_minimizer']])
self.fitter.easy_science_multi_fitter.switch_minimizer(AvailableMinimizers[project_dict['fitter_minimizer']])
else:
self._fitter = None
if 'experiments' in keys:
Expand Down

0 comments on commit 1a23538

Please sign in to comment.