nomad-material-processing 1.0.4__tar.gz → 1.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/PKG-INFO +2 -2
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/explanation/schemas.md +26 -14
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/general.py +1 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/solution/general.py +60 -19
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/general.py +25 -11
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/PKG-INFO +2 -2
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/solution/test_solution_schema.py +25 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/.github/workflows/mkdocs-deploy.yml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/.github/workflows/python-publish.yml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/.github/workflows/python-test.yml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/.gitignore +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/.vscode/settings.json +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/CITATION.cff +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/LICENSE +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/README.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/.gitignore +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/favicon.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/levelsschema.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/nomad-logo.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/nomad-plugin-logo.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/use-built-in-schema-1.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/use-built-in-schema-2.png +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/contact.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/explanation/data_model.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/explanation/levelsofschema.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/how_to/develop.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/how_to/install.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/how_to/use_this_plugin.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/how_to/use_this_plugin_old.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/index.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/reference/references.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/stylesheets/extra.css +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/theme/partials/header.html +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/tutorial/tutorial.md +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/mkdocs.yml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/pyproject.toml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/setup.cfg +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/setup.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/__init__.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/combinatorial.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/crystal_growth.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/epitaxy.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/solution/__init__.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/solution/utils.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/utils.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/__init__.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/cvd/general.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/cvd/movpe.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/general.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/mbe.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/pld.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/SOURCES.txt +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/entry_points.txt +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/requires.txt +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/conftest.py +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_crystal_growth.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_czochralski_process.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_sample_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_solution.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_solution_component.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_sputter_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_substrate.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_thin_film.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_thin_film_stack.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/tests/test_schema.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: nomad-material-processing
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5
|
|
4
4
|
Summary: A plugin for NOMAD containing base sections for material processing.
|
|
5
5
|
Author: Andrea Albino, Sebastian Brückner, Michael Götte, Ahmed Ilyas, Sarthak Kapoor, José A. Márquez, Hampus Näsström, Markus Scheidgen
|
|
6
6
|
Author-email: fairmat@physik.hu-berlin.de
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/explanation/schemas.md
RENAMED
|
@@ -123,21 +123,21 @@ The `nomad_material_processing.vapor_deposition.pvd.mbe` module uses the thermal
|
|
|
123
123
|
source and also adds a plasma source.
|
|
124
124
|
|
|
125
125
|
|
|
126
|
-
###
|
|
126
|
+
### Solutions
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
`nomad_material_processing.solution.general` provides
|
|
129
129
|
[`Solution`](#nomad_material_processing.solution.general.Solution) and
|
|
130
|
-
[`SolutionPreparation`](#nomad_material_processing.solution.general.SolutionPreparation)
|
|
131
|
-
be used to create NOMAD
|
|
130
|
+
[`SolutionPreparation`](#nomad_material_processing.solution.general.SolutionPreparation)
|
|
131
|
+
entry sections which can be used to create NOMAD
|
|
132
132
|
[entries](https://nomad-lab.eu/prod/v1/docs/reference/glossary.html#entry).
|
|
133
|
-
|
|
133
|
+
It also contains other auxiliary sections supporting these entry section which
|
|
134
134
|
can be accessed in the
|
|
135
135
|
[metainfo browser](https://nomad-lab.eu/prod/v1/oasis/gui/analyze/metainfo/nomad_material_processing)
|
|
136
136
|
by searching for: `"nomad_material_processing.solution.general"`
|
|
137
137
|
|
|
138
|
-
####
|
|
138
|
+
#### Solution
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
`nomad_material_processing.solution.general.Solution` describes liquid solutions by extending the
|
|
141
141
|
[`CompositeSystem`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#system) with quantities: _pH_, _mass_,
|
|
142
142
|
_calculated_volume_, _measured_volume_, _density_, and sub-sections:
|
|
143
143
|
_solvents_, _solutes_, and _solution_storage_.
|
|
@@ -172,14 +172,24 @@ _calculated_volume_ of the solution. The component can either nest a
|
|
|
172
172
|
sub-section describing its composition, or can be another `Solution` entry connected
|
|
173
173
|
via reference.
|
|
174
174
|
These options are are handled by
|
|
175
|
-
`SolutionComponent` and `SolutionComponentReference` sections respectively.
|
|
175
|
+
`SolutionComponent` and `SolutionComponentReference` sections respectively.
|
|
176
176
|
|
|
177
|
-
|
|
178
|
-
|
|
177
|
+
Let's take a closer look at each of them.
|
|
178
|
+
|
|
179
|
+
__`SolutionComponent`__ extends `PureSubstanceComponent` with quantities:
|
|
180
|
+
_component_role_, _mass_, _volume_, _density_, _amount_of_substance_ (in moles),
|
|
181
|
+
and sub-section: _molar_concentration_.
|
|
179
182
|
The _pure_substance_ sub-section inherited from `PureSubstanceComponent` specifies the
|
|
180
|
-
chemical compound. This information along with the
|
|
183
|
+
chemical compound. This information along with the amount of the component and
|
|
181
184
|
total volume of the solution is used to automatically determine the molar concentration of
|
|
182
185
|
the component, populating the corresponding sub-section.
|
|
186
|
+
|
|
187
|
+
If not provided, _amount_of_substance_ can be determined from _mass_ and
|
|
188
|
+
_pure_substance.molecular_mass_.
|
|
189
|
+
On other hand, if _amount_of_substance_ is available, but _mass_ is missing, it can be
|
|
190
|
+
determined using _amount_of_substance_ and _pure_substance.molecular_mass_.
|
|
191
|
+
_mass_ can also be determined if _volume_ and _density_ are available.
|
|
192
|
+
|
|
183
193
|
Based on the _component_role_, the components are copied over to either
|
|
184
194
|
`Solution.solvents` or `Solution.solutes`.
|
|
185
195
|
|
|
@@ -189,10 +199,11 @@ class SolutionComponent(PureSubstanceComponent):
|
|
|
189
199
|
mass: float
|
|
190
200
|
volume: float
|
|
191
201
|
density: float
|
|
202
|
+
amount_of_substance: float
|
|
192
203
|
molar_concentration: MolarConcentration
|
|
193
204
|
```
|
|
194
205
|
|
|
195
|
-
`SolutionComponentReference` makes a reference to another `Solution` entry and specifies
|
|
206
|
+
__`SolutionComponentReference`__ makes a reference to another `Solution` entry and specifies
|
|
196
207
|
the amount used. Based on this, _solutes_ and _solvents_ of the referenced solution are
|
|
197
208
|
copied over to the first solution. Their mass and volume are adjusted based on the
|
|
198
209
|
amount of the referenced solution used.
|
|
@@ -212,9 +223,10 @@ combined into one.
|
|
|
212
223
|
The _solution_storage_ uses `SolutionStorage` section to describe storage conditions
|
|
213
224
|
, i.e., temperature and atmosphere, along with preparation and expiry dates.
|
|
214
225
|
|
|
215
|
-
####
|
|
226
|
+
#### SolutionPreparation
|
|
216
227
|
|
|
217
|
-
|
|
228
|
+
`nomad_material_processing.solution.general.SolutionPreparation`
|
|
229
|
+
describes the steps of solution preparation by extending
|
|
218
230
|
[`Process`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#process).
|
|
219
231
|
Based on the steps added, it also creates a `Solution` entry and references it under the
|
|
220
232
|
_solution_ sub-section.
|
|
@@ -757,6 +757,7 @@ class ElectronicProperties(ArchiveSection):
|
|
|
757
757
|
'P-type',
|
|
758
758
|
'N-type',
|
|
759
759
|
'Semi-insulating',
|
|
760
|
+
'Insulating',
|
|
760
761
|
),
|
|
761
762
|
description="""The type of semiconductor, N-type being electrons
|
|
762
763
|
the majority carriers and P-type being holes the majority carriers.""",
|
|
@@ -3,6 +3,7 @@ from typing import TYPE_CHECKING, Union
|
|
|
3
3
|
from nomad.datamodel.data import (
|
|
4
4
|
ArchiveSection,
|
|
5
5
|
EntryData,
|
|
6
|
+
EntryDataCategory,
|
|
6
7
|
)
|
|
7
8
|
from nomad.datamodel.metainfo.annotations import (
|
|
8
9
|
ELNAnnotation,
|
|
@@ -21,6 +22,7 @@ from nomad.datamodel.metainfo.basesections import (
|
|
|
21
22
|
SystemComponent,
|
|
22
23
|
)
|
|
23
24
|
from nomad.metainfo import (
|
|
25
|
+
Category,
|
|
24
26
|
Datetime,
|
|
25
27
|
MEnum,
|
|
26
28
|
Quantity,
|
|
@@ -52,6 +54,17 @@ configuration = config.get_plugin_entry_point(
|
|
|
52
54
|
)
|
|
53
55
|
|
|
54
56
|
|
|
57
|
+
class SolutionCategory(EntryDataCategory):
|
|
58
|
+
"""
|
|
59
|
+
Category for entry schemas related to solutions.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
m_def = Category(
|
|
63
|
+
label='Solutions',
|
|
64
|
+
categories=[EntryDataCategory],
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
55
68
|
class MolarConcentration(ArchiveSection):
|
|
56
69
|
"""
|
|
57
70
|
The molar concentration of a component in a solution.
|
|
@@ -62,10 +75,9 @@ class MolarConcentration(ArchiveSection):
|
|
|
62
75
|
)
|
|
63
76
|
calculated_concentration = Quantity(
|
|
64
77
|
type=float,
|
|
65
|
-
description=
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
),
|
|
78
|
+
description="""
|
|
79
|
+
The expected concentration calculated from the component moles and total volume.
|
|
80
|
+
""",
|
|
69
81
|
a_eln=ELNAnnotation(
|
|
70
82
|
defaultDisplayUnit='mol / liter',
|
|
71
83
|
),
|
|
@@ -73,10 +85,9 @@ class MolarConcentration(ArchiveSection):
|
|
|
73
85
|
)
|
|
74
86
|
measured_concentration = Quantity(
|
|
75
87
|
type=float,
|
|
76
|
-
description=
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
),
|
|
88
|
+
description="""
|
|
89
|
+
The concentration observed or measured with some characterization technique.
|
|
90
|
+
""",
|
|
80
91
|
a_eln=ELNAnnotation(
|
|
81
92
|
component='NumberEditQuantity',
|
|
82
93
|
defaultDisplayUnit='mol / liter',
|
|
@@ -157,7 +168,6 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
157
168
|
Section for a component added to the solution.
|
|
158
169
|
"""
|
|
159
170
|
|
|
160
|
-
# TODO get the density of the component automatically if not provided
|
|
161
171
|
m_def = Section(
|
|
162
172
|
description='A component added to the solution.',
|
|
163
173
|
a_eln=ELNAnnotation(
|
|
@@ -198,7 +208,11 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
198
208
|
)
|
|
199
209
|
mass = Quantity(
|
|
200
210
|
type=float,
|
|
201
|
-
description=
|
|
211
|
+
description="""
|
|
212
|
+
The mass of the component without the container. Can be calculated automatically
|
|
213
|
+
if `volume` and `density` are available or if `amount_of_substance`
|
|
214
|
+
and `pure_substance.molecular_mass` are available.
|
|
215
|
+
""",
|
|
202
216
|
a_eln=ELNAnnotation(
|
|
203
217
|
component='NumberEditQuantity',
|
|
204
218
|
defaultDisplayUnit='gram',
|
|
@@ -206,15 +220,29 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
206
220
|
),
|
|
207
221
|
unit='kilogram',
|
|
208
222
|
)
|
|
223
|
+
amount_of_substance = Quantity(
|
|
224
|
+
link='https://doi.org/10.1351/goldbook.A00297',
|
|
225
|
+
type=float,
|
|
226
|
+
description="""
|
|
227
|
+
The number of elementary entities of the given substance. Can be calculated
|
|
228
|
+
automatically if `mass` and `pure_substance.molecular_mass` are available.
|
|
229
|
+
""",
|
|
230
|
+
a_eln=ELNAnnotation(
|
|
231
|
+
component='NumberEditQuantity',
|
|
232
|
+
defaultDisplayUnit='mole',
|
|
233
|
+
minValue=0,
|
|
234
|
+
),
|
|
235
|
+
unit='mole',
|
|
236
|
+
)
|
|
209
237
|
density = Quantity(
|
|
210
238
|
type=float,
|
|
211
239
|
description='The density of the liquid component.',
|
|
212
240
|
a_eln=ELNAnnotation(
|
|
213
241
|
component='NumberEditQuantity',
|
|
214
|
-
defaultDisplayUnit='gram /
|
|
242
|
+
defaultDisplayUnit='gram / milliliter',
|
|
215
243
|
minValue=0,
|
|
216
244
|
),
|
|
217
|
-
unit='
|
|
245
|
+
unit='gram / milliliter',
|
|
218
246
|
)
|
|
219
247
|
molar_concentration = SubSection(section_def=MolarConcentration)
|
|
220
248
|
pure_substance = SubSection(section_def=PubChemPureSubstanceSection)
|
|
@@ -254,8 +282,8 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
254
282
|
self, volume: Quantity, logger: 'BoundLogger' = None
|
|
255
283
|
) -> None:
|
|
256
284
|
"""
|
|
257
|
-
Calculate the molar concentration of the component
|
|
258
|
-
|
|
285
|
+
Calculate the molar concentration of the component in a given volume of
|
|
286
|
+
solution.
|
|
259
287
|
|
|
260
288
|
Args:
|
|
261
289
|
volume (Quantity): The volume of the solution.
|
|
@@ -270,9 +298,10 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
270
298
|
return
|
|
271
299
|
if not self.molar_concentration:
|
|
272
300
|
self.molar_concentration = MolarConcentration()
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
301
|
+
if self.amount_of_substance:
|
|
302
|
+
self.molar_concentration.calculated_concentration = (
|
|
303
|
+
self.amount_of_substance / volume
|
|
304
|
+
)
|
|
276
305
|
|
|
277
306
|
def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
|
|
278
307
|
"""
|
|
@@ -288,6 +317,12 @@ class SolutionComponent(PureSubstanceComponent, BaseSolutionComponent):
|
|
|
288
317
|
self.pure_substance.normalize(archive, logger)
|
|
289
318
|
if self.volume and self.density:
|
|
290
319
|
self.mass = self.volume * self.density
|
|
320
|
+
if self.mass and self.pure_substance and not self.amount_of_substance:
|
|
321
|
+
self.amount_of_substance = self._calculate_moles(logger)
|
|
322
|
+
if self.amount_of_substance and self.pure_substance and not self.mass:
|
|
323
|
+
self.mass = self.amount_of_substance * (
|
|
324
|
+
self.pure_substance.molecular_mass * ureg.N_A
|
|
325
|
+
)
|
|
291
326
|
super().normalize(archive, logger)
|
|
292
327
|
|
|
293
328
|
|
|
@@ -298,6 +333,7 @@ class Solution(CompositeSystem, EntryData):
|
|
|
298
333
|
|
|
299
334
|
# TODO make the solvents, solutes, and elemental_composition subsection noneditable.
|
|
300
335
|
m_def = Section(
|
|
336
|
+
categories=[SolutionCategory],
|
|
301
337
|
description='A homogeneous liquid mixture composed of two or more substances.',
|
|
302
338
|
a_eln=ELNAnnotation(
|
|
303
339
|
properties=SectionProperties(
|
|
@@ -334,7 +370,7 @@ class Solution(CompositeSystem, EntryData):
|
|
|
334
370
|
a_eln=ELNAnnotation(
|
|
335
371
|
defaultDisplayUnit='gram / milliliter',
|
|
336
372
|
),
|
|
337
|
-
unit='
|
|
373
|
+
unit='gram / milliliter',
|
|
338
374
|
)
|
|
339
375
|
mass = Quantity(
|
|
340
376
|
description='The mass of the solution.',
|
|
@@ -412,7 +448,7 @@ class Solution(CompositeSystem, EntryData):
|
|
|
412
448
|
continue
|
|
413
449
|
comparison_key = component.pure_substance.pub_chem_cid
|
|
414
450
|
if comparison_key in combined_components:
|
|
415
|
-
for prop in ['mass', 'volume']:
|
|
451
|
+
for prop in ['mass', 'volume', 'amount_of_substance']:
|
|
416
452
|
val1 = getattr(combined_components[comparison_key], prop, None)
|
|
417
453
|
val2 = getattr(component, prop, None)
|
|
418
454
|
if val1 and val2:
|
|
@@ -503,6 +539,8 @@ class Solution(CompositeSystem, EntryData):
|
|
|
503
539
|
self.solvents[-1].volume *= scaler
|
|
504
540
|
if self.solvents[-1].mass:
|
|
505
541
|
self.solvents[-1].mass *= scaler
|
|
542
|
+
if self.solvents[-1].amount_of_substance:
|
|
543
|
+
self.solvents[-1].amount_of_substance *= scaler
|
|
506
544
|
if component.system.solutes:
|
|
507
545
|
for solute in component.system.solutes:
|
|
508
546
|
self.solutes.append(solute.m_copy(deep=True))
|
|
@@ -510,6 +548,8 @@ class Solution(CompositeSystem, EntryData):
|
|
|
510
548
|
self.solutes[-1].volume *= scaler
|
|
511
549
|
if self.solutes[-1].mass:
|
|
512
550
|
self.solutes[-1].mass *= scaler
|
|
551
|
+
if self.solutes[-1].amount_of_substance:
|
|
552
|
+
self.solutes[-1].amount_of_substance *= scaler
|
|
513
553
|
|
|
514
554
|
self.solvents = self.combine_components(self.solvents, logger)
|
|
515
555
|
self.solutes = self.combine_components(self.solutes, logger)
|
|
@@ -827,6 +867,7 @@ class SolutionPreparation(Process, EntryData):
|
|
|
827
867
|
|
|
828
868
|
# TODO populate the instruments section based on the steps.methodology.instrument
|
|
829
869
|
m_def = Section(
|
|
870
|
+
categories=[SolutionCategory],
|
|
830
871
|
description='Section for describing steps of solution preparation.',
|
|
831
872
|
a_eln=ELNAnnotation(
|
|
832
873
|
properties=SectionProperties(
|
|
@@ -31,6 +31,7 @@ from nomad.datamodel.metainfo.basesections import (
|
|
|
31
31
|
Component,
|
|
32
32
|
CompositeSystemReference,
|
|
33
33
|
Entity,
|
|
34
|
+
EntityReference,
|
|
34
35
|
PubChemPureSubstanceSection,
|
|
35
36
|
PureSubstanceSection,
|
|
36
37
|
)
|
|
@@ -118,6 +119,21 @@ class InsertReduction(Entity):
|
|
|
118
119
|
)
|
|
119
120
|
|
|
120
121
|
|
|
122
|
+
class InsertReductionReference(EntityReference):
|
|
123
|
+
"""
|
|
124
|
+
A section used for referencing a FilledSubstrateHolderPDI.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
reference = Quantity(
|
|
128
|
+
type=InsertReduction,
|
|
129
|
+
description='Optional description of insert if used.',
|
|
130
|
+
a_eln=ELNAnnotation(
|
|
131
|
+
component='ReferenceEditQuantity',
|
|
132
|
+
label='Insert Reduction Reference',
|
|
133
|
+
),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
121
137
|
class SubstrateHolderPosition(ArchiveSection):
|
|
122
138
|
"""
|
|
123
139
|
One casing position of the substrate holder.
|
|
@@ -159,14 +175,6 @@ class SubstrateHolderPosition(ArchiveSection):
|
|
|
159
175
|
slot_geometry = SubSection(
|
|
160
176
|
section_def=Geometry,
|
|
161
177
|
)
|
|
162
|
-
insert_reduction = Quantity(
|
|
163
|
-
type=InsertReduction,
|
|
164
|
-
description='Optional description of insert if used.',
|
|
165
|
-
a_eln=ELNAnnotation(
|
|
166
|
-
component='ReferenceEditQuantity',
|
|
167
|
-
label='ThinFilmStackMbe Reference',
|
|
168
|
-
),
|
|
169
|
-
)
|
|
170
178
|
|
|
171
179
|
|
|
172
180
|
class SubstrateHolder(Entity):
|
|
@@ -189,10 +197,10 @@ class SubstrateHolder(Entity):
|
|
|
189
197
|
The lab ID of the substrate holder.
|
|
190
198
|
""",
|
|
191
199
|
a_eln=ELNAnnotation(
|
|
192
|
-
component=ELNComponentEnum.StringEditQuantity,
|
|
200
|
+
component=ELNComponentEnum.StringEditQuantity, label='holder_id'
|
|
193
201
|
),
|
|
194
202
|
)
|
|
195
|
-
|
|
203
|
+
holder_material = SubSection(section_def=PubChemPureSubstanceSection, repeats=True)
|
|
196
204
|
thickness = Quantity(
|
|
197
205
|
type=float,
|
|
198
206
|
unit='meter',
|
|
@@ -243,6 +251,12 @@ class FilledSubstrateHolderPosition(SubstrateHolderPosition):
|
|
|
243
251
|
One casing position of the filled substrate holder.
|
|
244
252
|
"""
|
|
245
253
|
|
|
254
|
+
insert_reduction = SubSection(
|
|
255
|
+
section_def=InsertReductionReference,
|
|
256
|
+
description="""
|
|
257
|
+
The Insert reduction placed in this position.
|
|
258
|
+
""",
|
|
259
|
+
)
|
|
246
260
|
substrate = SubSection(
|
|
247
261
|
section_def=CompositeSystemReference,
|
|
248
262
|
description="""
|
|
@@ -261,7 +275,7 @@ class FilledSubstrateHolder(SubstrateHolder):
|
|
|
261
275
|
description='A reference to an empty substrate holder.',
|
|
262
276
|
a_eln=ELNAnnotation(
|
|
263
277
|
component='ReferenceEditQuantity',
|
|
264
|
-
label='
|
|
278
|
+
label='Empty Substrate Holder Reference',
|
|
265
279
|
),
|
|
266
280
|
)
|
|
267
281
|
positions = SubSection(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: nomad-material-processing
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5
|
|
4
4
|
Summary: A plugin for NOMAD containing base sections for material processing.
|
|
5
5
|
Author: Andrea Albino, Sebastian Brückner, Michael Götte, Ahmed Ilyas, Sarthak Kapoor, José A. Márquez, Hampus Näsström, Markus Scheidgen
|
|
6
6
|
Author-email: fairmat@physik.hu-berlin.de
|
|
@@ -58,12 +58,16 @@ def test_solution():
|
|
|
58
58
|
starter_water_concentration = starter_solution_archive.data.solvents[
|
|
59
59
|
0
|
|
60
60
|
].molar_concentration.calculated_concentration
|
|
61
|
+
starter_water_amount = starter_solution_archive.data.solvents[0].amount_of_substance
|
|
61
62
|
starter_salt_concentration = starter_solution_archive.data.solutes[
|
|
62
63
|
0
|
|
63
64
|
].molar_concentration.calculated_concentration
|
|
64
65
|
starter_salt_mass = starter_solution_archive.data.solutes[0].mass
|
|
65
66
|
|
|
66
67
|
assert pytest.approx(starter_water_concentration, 1e-3) == 55.523 * ureg('mol/l')
|
|
68
|
+
assert pytest.approx(starter_water_amount, 1e-3) == 0.5 * ureg('l') * 55.523 * ureg(
|
|
69
|
+
'mol/l'
|
|
70
|
+
)
|
|
67
71
|
assert pytest.approx(starter_salt_concentration, 1e-3) == 0.345 * ureg('mol/l')
|
|
68
72
|
assert pytest.approx(starter_salt_mass, 1e-3) == 0.01 * ureg('kg')
|
|
69
73
|
|
|
@@ -90,6 +94,13 @@ def test_solution():
|
|
|
90
94
|
)
|
|
91
95
|
== starter_water_concentration
|
|
92
96
|
)
|
|
97
|
+
assert (
|
|
98
|
+
pytest.approx(
|
|
99
|
+
main_solution_archive.data.solvents[0].amount_of_substance,
|
|
100
|
+
1e-3,
|
|
101
|
+
)
|
|
102
|
+
== starter_water_amount / 5
|
|
103
|
+
)
|
|
93
104
|
assert (
|
|
94
105
|
pytest.approx(
|
|
95
106
|
main_solution_archive.data.solutes[
|
|
@@ -129,6 +140,13 @@ def test_solution():
|
|
|
129
140
|
)
|
|
130
141
|
== starter_water_concentration
|
|
131
142
|
)
|
|
143
|
+
assert (
|
|
144
|
+
pytest.approx(
|
|
145
|
+
main_solution_archive.data.solvents[0].amount_of_substance,
|
|
146
|
+
1e-3,
|
|
147
|
+
)
|
|
148
|
+
== (starter_water_amount / 5) * 2
|
|
149
|
+
)
|
|
132
150
|
assert (
|
|
133
151
|
pytest.approx(
|
|
134
152
|
main_solution_archive.data.solutes[
|
|
@@ -154,6 +172,13 @@ def test_solution():
|
|
|
154
172
|
)
|
|
155
173
|
== starter_water_concentration
|
|
156
174
|
)
|
|
175
|
+
assert (
|
|
176
|
+
pytest.approx(
|
|
177
|
+
starter_solution_archive.data.solvents[0].amount_of_substance,
|
|
178
|
+
1e-3,
|
|
179
|
+
)
|
|
180
|
+
== starter_water_amount
|
|
181
|
+
)
|
|
157
182
|
assert (
|
|
158
183
|
pytest.approx(
|
|
159
184
|
starter_solution_archive.data.solutes[
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/levelsschema.png
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/assets/nomad-logo.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/explanation/data_model.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/how_to/use_this_plugin.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/reference/references.md
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/stylesheets/extra.css
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/theme/partials/header.html
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.4 → nomad_material_processing-1.0.5}/docs/tutorial/tutorial.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|