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
12 changes: 6 additions & 6 deletions EasyReflectometry/calculators/bornagain/calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
from easyCore.Objects.Inferface import ItemContainer

from EasyReflectometry.experiment.model import Model
from EasyReflectometry.sample.items import MultiLayer
from EasyReflectometry.sample.layer import Layer
from EasyReflectometry.sample.material import Material
from EasyReflectometry.sample.material import MaterialMixture
from EasyReflectometry.sample import Layer
from EasyReflectometry.sample import Material
from EasyReflectometry.sample import MaterialMixture
from EasyReflectometry.sample import Multilayer

from ..calculator_base import CalculatorBase
from .wrapper import BornAgainWrapper
Expand Down Expand Up @@ -55,7 +55,7 @@ def reset_storage(self) -> None:
"""
self._wrapper.reset_storage()

def create(self, model: Material | Layer | MultiLayer | Model) -> list[ItemContainer]:
def create(self, model: Material | Layer | Multilayer | Model) -> list[ItemContainer]:
"""
Creation function

Expand Down Expand Up @@ -103,7 +103,7 @@ def create(self, model: Material | Layer | MultiLayer | Model) -> list[ItemConta
)
)
self.assign_material_to_layer(model.material.uid, key)
elif issubclass(t_, MultiLayer):
elif issubclass(t_, Multilayer):
key = model.uid
self._wrapper.create_item(key)
r_list.append(
Expand Down
4 changes: 2 additions & 2 deletions EasyReflectometry/calculators/bornagain/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def create_model(self):
"""
Create a model for analysis
"""
self.storage['model'] = ba.MultiLayer()
self.storage['model'] = ba.Multilayer()
self.storage['model'].setRoughnessModel(ba.RoughnessModel.NEVOT_CROCE)
self.storage['model_items'] = []
self.storage['model_parameters']['scale'] = 1
Expand Down Expand Up @@ -267,7 +267,7 @@ def calculate(self, x_array: np.ndarray) -> np.ndarray:
simulation = ba.SpecularSimulation()
simulation.setScan(scan)

total_model = ba.MultiLayer()
total_model = ba.Multilayer()
for i in self.storage['model_items']:
for k in range(int(self.storage['item_repeats'][i])):
for j in self.storage['item'][i]:
Expand Down
14 changes: 7 additions & 7 deletions EasyReflectometry/calculators/calculator_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
from easyCore.Objects.Inferface import ItemContainer

from EasyReflectometry.experiment.model import Model
from EasyReflectometry.sample.items import MultiLayer
from EasyReflectometry.sample.layer import Layer
from EasyReflectometry.sample.material import Material
from EasyReflectometry.sample.material import MaterialMixture
from EasyReflectometry.sample import Layer
from EasyReflectometry.sample import Material
from EasyReflectometry.sample import MaterialMixture
from EasyReflectometry.sample import Multilayer

from .wrapper_base import WrapperBase

Expand Down Expand Up @@ -51,7 +51,7 @@ def reset_storage(self) -> None:
"""
self._wrapper.reset_storage()

def create(self, model: Material | Layer | MultiLayer | Model) -> list[ItemContainer]:
def create(self, model: Material | Layer | Multilayer | Model) -> list[ItemContainer]:
"""
Creation function

Expand Down Expand Up @@ -97,7 +97,7 @@ def create(self, model: Material | Layer | MultiLayer | Model) -> list[ItemConta
)
)
self.assign_material_to_layer(model.material.uid, key)
elif issubclass(t_, MultiLayer):
elif issubclass(t_, Multilayer):
key = model.uid
self._wrapper.create_item(key)
r_list.append(
Expand All @@ -121,7 +121,7 @@ def create(self, model: Material | Layer | MultiLayer | Model) -> list[ItemConta
self._wrapper.update_model,
)
)
for i in model.structure:
for i in model.sample:
self.add_item_to_model(i.uid, key)
return r_list

Expand Down
44 changes: 22 additions & 22 deletions EasyReflectometry/experiment/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
from easyCore.Objects.ObjectClasses import Parameter

from EasyReflectometry.sample import Layer
from EasyReflectometry.sample import Layers
from EasyReflectometry.sample import Structure
from EasyReflectometry.sample.items import MultiLayer
from EasyReflectometry.sample.items import RepeatingMultiLayer
from EasyReflectometry.sample import LayerCollection
from EasyReflectometry.sample import Multilayer
from EasyReflectometry.sample import RepeatingMultilayer
from EasyReflectometry.sample import Sample

LAYER_DETAILS = {
'scale': {
Expand Down Expand Up @@ -47,7 +47,7 @@
class Model(BaseObj):
def __init__(
self,
structure: Structure,
sample: Sample,
scale: Parameter,
background: Parameter,
resolution: Parameter,
Expand All @@ -56,7 +56,7 @@ def __init__(
):
super().__init__(
name=name,
structure=structure,
sample=sample,
scale=scale,
background=background,
resolution=resolution,
Expand All @@ -72,16 +72,16 @@ def default(cls, interface=None) -> Model:
:return: Default model container
:rtype: Model
"""
structure = Structure.default()
sample = Sample.default()
scale = Parameter('scale', **LAYER_DETAILS['scale'])
background = Parameter('background', **LAYER_DETAILS['background'])
resolution = Parameter('resolution', **LAYER_DETAILS['resolution'])
return cls(structure, scale, background, resolution, interface=interface)
return cls(sample, scale, background, resolution, interface=interface)

@classmethod
def from_pars(
cls,
structure: Structure,
sample: Sample,
scale: Parameter,
background: Parameter,
resolution: Parameter,
Expand All @@ -91,7 +91,7 @@ def from_pars(
"""
Constructor of a reflectometry experiment model where the parameters are known.

:param structure: The structure being modelled
:param sample: The sample being modelled
:param scale: Scaling factor of profile
:param background: Linear background magnitude
:param background: Constant resolution smearing percentage
Expand All @@ -107,33 +107,33 @@ def from_pars(
resolution = Parameter('resolution', resolution, **default_options['resolution'])

return cls(
structure=structure,
sample=sample,
scale=scale,
background=background,
resolution=resolution,
name=name,
interface=interface,
)

def add_item(self, *items: Union[Layer, RepeatingMultiLayer]) -> None:
def add_item(self, *items: Union[Layer, RepeatingMultilayer]) -> None:
"""
Add a layer or item to the model structure.
Add a layer or item to the model sample.

:param *items: Layers or items to add to model structure
:param *items: Layers or items to add to model sample
"""
for arg in items:
if issubclass(arg.__class__, MultiLayer):
self.structure.append(arg)
if issubclass(arg.__class__, Multilayer):
self.sample.append(arg)
if self.interface is not None:
self.interface().add_item_to_model(arg.uid, self.uid)

def duplicate_item(self, idx: int) -> None:
"""
Duplicate a given item or layer in a structure.
Duplicate a given item or layer in a sample.

:param idx: Index of the item or layer to duplicate
"""
to_duplicate = self.structure[idx]
to_duplicate = self.sample[idx]
duplicate_layers = []
for i in to_duplicate.layers:
duplicate_layers.append(
Expand All @@ -145,7 +145,7 @@ def duplicate_item(self, idx: int) -> None:
)
)
duplicate = to_duplicate.__class__.from_pars(
Layers.from_pars(*duplicate_layers, name=to_duplicate.layers.name + ' duplicate'),
LayerCollection.from_pars(*duplicate_layers, name=to_duplicate.layers.name + ' duplicate'),
name=to_duplicate.name + ' duplicate',
)
self.add_item(duplicate)
Expand All @@ -158,8 +158,8 @@ def remove_item(self, idx) -> None:
:type idx: int
"""
if self.interface is not None:
self.interface().remove_item_from_model(self.structure[idx].uid, self.uid)
del self.structure[idx]
self.interface().remove_item_from_model(self.sample[idx].uid, self.uid)
del self.sample[idx]

@property
def uid(self) -> int:
Expand All @@ -181,7 +181,7 @@ def _dict_repr(self) -> dict[str, dict[str, str]]:
'scale': self.scale.raw_value,
'background': self.background.raw_value,
'resolution': f'{self.resolution.raw_value} %',
'structure': self.structure._dict_repr,
'sample': self.sample._dict_repr,
}
}

Expand Down
29 changes: 24 additions & 5 deletions EasyReflectometry/sample/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
from .layer import Layer
from .layers import Layers
from .materials import Materials
from .structure import Structure
from .assemblies.gradient_layer import GradientLayer
from .assemblies.multilayer import Multilayer
from .assemblies.repeating_multilayer import RepeatingMultilayer
from .assemblies.surfactant_layer import SurfactantLayer
from .elements.layer_collection import LayerCollection
from .elements.layers.layer import Layer
from .elements.layers.layer_apm import LayerApm
from .elements.material_collection import MaterialCollection
from .elements.materials.material import Material
from .elements.materials.material_mixture import MaterialMixture
from .sample import Sample

_ = (Layer, Layers, Materials, Structure)
__all__ = (
GradientLayer,
Multilayer,
RepeatingMultilayer,
SurfactantLayer,
Layer,
LayerApm,
LayerCollection,
Material,
MaterialMixture,
MaterialCollection,
Sample,
)
40 changes: 40 additions & 0 deletions EasyReflectometry/sample/assemblies/base_assembly.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from abc import abstractmethod
from typing import Any

import yaml
from easyCore.Objects.ObjectClasses import BaseObj


class BaseAssembly(BaseObj):
def __init__(
self,
name: str,
interface,
**kwargs,
):
super().__init__(name=name, **kwargs)
self.interface = interface

@abstractmethod
def default(cls, interface=None) -> Any:
...

@abstractmethod
def _dict_repr(self) -> dict[str, str]:
...

@property
def uid(self) -> int:
"""
:return: UID from the borg map
"""
return self._borg.map.convert_id_to_key(self)

def __repr__(self) -> str:
"""
String representation of the layer.

:return: a string representation of the layer
:rtype: str
"""
return yaml.dump(self._dict_repr, sort_keys=False)
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@
from easyCore.Fitting.Constraints import ObjConstraint
from numpy import arange

from EasyReflectometry.sample.layer import Layer
from EasyReflectometry.sample.material import Material
from ..elements.layers.layer import Layer
from ..elements.materials.material import Material
from .multilayer import Multilayer

from .multilayer import MultiLayer


class GradientLayer(MultiLayer):
class GradientLayer(Multilayer):
"""
A :py:class:`GradientLayer` constructs a gradient multilayer for the
provided initial and final material.
Expand Down
Loading