material_density
MATERIAL_DEFAULTS = {'sld': {'description': 'The real scattering length density for a material in e-6 per squared angstrom.', 'url': 'https://www.ncnr.nist.gov/resources/activation/', 'value': 4.186, 'unit': '1 / angstrom^2', 'min': -np.inf, 'max': np.inf, 'fixed': True}, 'isld': {'description': 'The imaginary scattering length density for a material in e-6 per squared angstrom.', 'url': 'https://www.ncnr.nist.gov/resources/activation/', 'value': 0.0, 'unit': '1 / angstrom^2', 'min': -np.inf, 'max': np.inf, 'fixed': True}}
module-attribute
DEFAULTS = {'chemical_structure': 'Si', 'density': {'description': 'The mass density of the material.', 'url': 'https://en.wikipedia.org/wiki/Density', 'value': 2.33, 'unit': 'gram / centimeter ** 3', 'min': 0, 'max': np.inf, 'fixed': True}, 'molecular_weight': {'description': 'The molecular weight of a material.', 'url': 'https://en.wikipedia.org/wiki/Molecular_mass', 'value': 28.02, 'unit': 'g / mole'}}
module-attribute
Material
Bases: BaseCore
Source code in src/easyreflectometry/sample/elements/materials/material.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | |
__init__(sld=None, isld=None, name='EasyMaterial', unique_name=None, interface=None)
Constructor.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
unique_name
|
Optional[str]
|
By default, None. |
None
|
sld
|
Union[Parameter, float, None]
|
Real scattering length density. By default, None. |
None
|
isld
|
Union[Parameter, float, None]
|
Imaginary scattering length density. By default, None. |
None
|
name
|
str
|
Name of the material. By default, 'EasyMaterial'. |
'EasyMaterial'
|
interface
|
Calculator interface. By default, None. |
None
|
Source code in src/easyreflectometry/sample/elements/materials/material.py
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | |
MaterialDensity
Bases: Material
A material defined by chemical formula and mass density.
The scattering length density is derived rather than set: from the
formula, the coherent neutron scattering length b (real and
imaginary parts, tabulated per isotope) and the molecular weight M
are computed, and sld/isld are wired as dependent parameters
sld = N_A * density * b / M
so density is the natural fit parameter and edits to the density or
the formula propagate to the SLD automatically.
The coupling can be switched off per material via :attr:sld_coupled:
when False, sld/isld are independent parameters that can be
set and fitted directly, while density, molecular_weight and the
scattering lengths stop affecting anything until the coupling is
restored. Restoring it (sld_coupled = True) recomputes the SLDs from
the current formula and density, discarding manually set values. The
state round-trips through as_dict/from_dict, including the
manual SLD values of a decoupled material; dictionaries from before
this feature deserialize as coupled.
Assigning :attr:chemical_structure updates the scattering lengths and
the molecular weight together; an invalid formula raises ValueError
and leaves the material unchanged.
:attr:molecular_weight is a read-only DescriptorNumber, never a fit
parameter: it is fully determined by the formula, and freeing it alongside
density would make the fit degenerate (only density / molecular_weight
enters the derived SLD).
Source code in src/easyreflectometry/sample/elements/materials/material_density.py
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | |
sld_coupled
property
writable
Whether sld/isld are derived from formula & density (True,
the default) or independent, directly editable/fittable parameters
(False). The dependency state itself is the source of truth.
chemical_structure
property
writable
Get the chemical structure string.
molecular_weight
property
The molecular weight of the formula. A read-only descriptor, not a
fittable parameter: it is a constant of the chemical formula and is
recomputed whenever :attr:chemical_structure is assigned.
__init__(chemical_structure=None, density=None, name='EasyMaterialDensity', unique_name=None, interface=None)
Constructor.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
unique_name
|
Optional[str]
|
By default, None. |
None
|
chemical_structure
|
Union[str, None]
|
Chemical formula for the material. By default, None. |
None
|
density
|
Union[Parameter, float, None]
|
Mass density for the material. By default, None. |
None
|
name
|
str
|
Identifier. By default, 'EasyMaterialDensity'. |
'EasyMaterialDensity'
|
interface
|
Interface object. By default, None. |
None
|
Source code in src/easyreflectometry/sample/elements/materials/material_density.py
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | |
from_dict(obj_dict)
classmethod
Re-attach sld/isld dependencies after deserialization.
:class:ModelBase.from_dict re-points self._density at the
deserialized Parameter (because density is a constructor argument);
the constraint graph built in __init__ still references the
temporary Parameter created from the float kwarg. Rebuild here so
q.density = X propagates to the derived SLDs.
The keys written by _convert_to_dict are not constructor
arguments and must be removed before the parent's cls(**data)
call; they are then used to restore the coupling state. A dict
without them (pre-feature project files) restores as coupled.
Source code in src/easyreflectometry/sample/elements/materials/material_density.py
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | |
get_as_parameter(name, value, default_dict, unique_name_prefix=None)
This function creates a parameter for the variable name.
A parameter has a value and metadata.
If the value already is a parameter, it is returned. If the value is a number, a parameter is created with this value and metadata from the dictionary. If the value is None, a parameter is created with the default value and metadata from the dictionary.
param value: The value to use for the parameter. If None, the default value in the dictionary is used.
param name: The name of the parameter
param default_dict: Dictionary with entry for `name` containing the default value and metadata for the parameter
Source code in src/easyreflectometry/utils.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |