nomad-material-processing 1.0.6__tar.gz → 1.0.7__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.6 → nomad_material_processing-1.0.7}/PKG-INFO +3 -2
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/mkdocs.yml +14 -15
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/pyproject.toml +2 -1
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/general.py +58 -6
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/PKG-INFO +3 -2
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/SOURCES.txt +3 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/requires.txt +1 -1
- nomad_material_processing-1.0.7/src/nomad_material_processing.egg-info/scm_file_list.json +92 -0
- nomad_material_processing-1.0.7/src/nomad_material_processing.egg-info/scm_version.json +8 -0
- nomad_material_processing-1.0.7/tests/data/test_crystalline_substrate.archive.yaml +4 -0
- nomad_material_processing-1.0.7/tests/solution/test_solution_schema.py +203 -0
- nomad_material_processing-1.0.7/tests/test_schema.py +29 -0
- nomad_material_processing-1.0.6/tests/solution/test_solution_schema.py +0 -198
- nomad_material_processing-1.0.6/tests/test_schema.py +0 -15
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/mkdocs-deploy.yml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/python-publish.yml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.github/workflows/python-test.yml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.gitignore +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/.vscode/settings.json +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/CITATION.cff +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/LICENSE +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/README.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/.gitignore +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/favicon.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/levelsschema.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/nomad-logo.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/nomad-plugin-logo.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/use-built-in-schema-1.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/assets/use-built-in-schema-2.png +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/contact.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/data_model.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/levelsofschema.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/schemas.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/develop.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/install.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/use_this_plugin.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/use_this_plugin_old.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/index.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/main.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/references.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/combinatorial.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/crystal_growth.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/epitaxy.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/general.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/solution/general.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/cvd/general.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/cvd/movpe.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/general.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/general.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/mbe.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/pld.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/sputtering.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas/vapor_deposition/pvd/thermal.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/solution.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/vapor_depostion.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/stylesheets/extra.css +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/theme/partials/header.html +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/tutorial/tutorial.md +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/setup.cfg +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/setup.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/__init__.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/combinatorial.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/crystal_growth.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/epitaxy.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/__init__.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/general.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/solution/utils.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/utils.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/__init__.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/general.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/cvd/movpe.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/general.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/general.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/mbe.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/pld.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/entry_points.txt +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/conftest.py +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_crystal_growth.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_czochralski_process.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_sample_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_solution.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_solution_component.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_sputter_deposition.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_substrate.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thin_film.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_thin_film_stack.archive.yaml +0 -0
- {nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nomad-material-processing
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.7
|
|
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
|
|
@@ -216,6 +216,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
216
216
|
Classifier: Programming Language :: Python :: 3.11
|
|
217
217
|
Classifier: Programming Language :: Python :: 3.12
|
|
218
218
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
219
|
+
Requires-Python: >=3.10
|
|
219
220
|
Description-Content-Type: text/markdown
|
|
220
221
|
License-File: LICENSE
|
|
221
222
|
Requires-Dist: nomad-lab>=1.3.14
|
|
@@ -223,7 +224,7 @@ Provides-Extra: dev
|
|
|
223
224
|
Requires-Dist: pytest; extra == "dev"
|
|
224
225
|
Requires-Dist: ruff; extra == "dev"
|
|
225
226
|
Requires-Dist: structlog; extra == "dev"
|
|
226
|
-
Requires-Dist: nomad-docs>=0.1
|
|
227
|
+
Requires-Dist: nomad-docs>=2.0.1; extra == "dev"
|
|
227
228
|
Requires-Dist: mkdocs; extra == "dev"
|
|
228
229
|
Requires-Dist: mkdocs-material>=9.0; extra == "dev"
|
|
229
230
|
Requires-Dist: pymdown-extensions; extra == "dev"
|
|
@@ -17,23 +17,23 @@ nav:
|
|
|
17
17
|
- Reference:
|
|
18
18
|
- Glossary: reference/references.md
|
|
19
19
|
- Schemas:
|
|
20
|
-
- reference/schemas/general.md
|
|
21
|
-
- reference/schemas/combinatorial.md
|
|
22
|
-
- reference/schemas/epitaxy.md
|
|
23
|
-
- reference/schemas/crystal_growth.md
|
|
20
|
+
- General: reference/schemas/general.md
|
|
21
|
+
- Combinatorial: reference/schemas/combinatorial.md
|
|
22
|
+
- Epitaxy: reference/schemas/epitaxy.md
|
|
23
|
+
- Crystal Growth: reference/schemas/crystal_growth.md
|
|
24
24
|
- Solution:
|
|
25
|
-
- reference/schemas/solution/general.md
|
|
25
|
+
- General: reference/schemas/solution/general.md
|
|
26
26
|
- Vapor Deposition:
|
|
27
|
-
- reference/schemas/vapor_deposition/general.md
|
|
27
|
+
- General: reference/schemas/vapor_deposition/general.md
|
|
28
28
|
- CVD:
|
|
29
|
-
- reference/schemas/vapor_deposition/cvd/general.md
|
|
30
|
-
- reference/schemas/vapor_deposition/cvd/movpe.md
|
|
29
|
+
- General: reference/schemas/vapor_deposition/cvd/general.md
|
|
30
|
+
- MOVPE: reference/schemas/vapor_deposition/cvd/movpe.md
|
|
31
31
|
- PVD:
|
|
32
|
-
- reference/schemas/vapor_deposition/pvd/general.md
|
|
33
|
-
- reference/schemas/vapor_deposition/pvd/sputtering.md
|
|
34
|
-
- reference/schemas/vapor_deposition/pvd/thermal.md
|
|
35
|
-
- reference/schemas/vapor_deposition/pvd/pld.md
|
|
36
|
-
- reference/schemas/vapor_deposition/pvd/mbe.md
|
|
32
|
+
- General: reference/schemas/vapor_deposition/pvd/general.md
|
|
33
|
+
- Sputtering: reference/schemas/vapor_deposition/pvd/sputtering.md
|
|
34
|
+
- Thermal Evaporation: reference/schemas/vapor_deposition/pvd/thermal.md
|
|
35
|
+
- Pulsed Laser Deposition: reference/schemas/vapor_deposition/pvd/pld.md
|
|
36
|
+
- Molecular Beam Epitaxy: reference/schemas/vapor_deposition/pvd/mbe.md
|
|
37
37
|
- Tutorials: tutorial/tutorial.md
|
|
38
38
|
- Contact: contact.md
|
|
39
39
|
plugins:
|
|
@@ -77,5 +77,4 @@ extra_css:
|
|
|
77
77
|
- stylesheets/extra.css
|
|
78
78
|
extra_javascript:
|
|
79
79
|
- javascript.js
|
|
80
|
-
|
|
81
|
-
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
|
|
80
|
+
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
|
|
@@ -19,6 +19,7 @@ name = "nomad-material-processing"
|
|
|
19
19
|
dynamic = ["version"]
|
|
20
20
|
description = "A plugin for NOMAD containing base sections for material processing."
|
|
21
21
|
readme = "README.md"
|
|
22
|
+
requires-python = ">=3.10"
|
|
22
23
|
authors = [
|
|
23
24
|
{ name = "Andrea Albino" },
|
|
24
25
|
{ name = "Sebastian Brückner" },
|
|
@@ -51,7 +52,7 @@ dev = [
|
|
|
51
52
|
"pytest",
|
|
52
53
|
"ruff",
|
|
53
54
|
"structlog",
|
|
54
|
-
"nomad-docs>=0.1
|
|
55
|
+
"nomad-docs>=2.0.1",
|
|
55
56
|
"mkdocs",
|
|
56
57
|
"mkdocs-material>=9.0",
|
|
57
58
|
"pymdown-extensions",
|
|
@@ -706,6 +706,29 @@ class CrystalProperties(ArchiveSection):
|
|
|
706
706
|
parameters, and the specific arrangement of atoms within the crystal lattice.
|
|
707
707
|
"""
|
|
708
708
|
|
|
709
|
+
bravais_lattices = Quantity(
|
|
710
|
+
type=MEnum(
|
|
711
|
+
'Triclinic',
|
|
712
|
+
'Monoclinic Primitive',
|
|
713
|
+
'Monoclinic Base Centered',
|
|
714
|
+
'Orthorhombic Primitive',
|
|
715
|
+
'Orthorhombic Base Centered',
|
|
716
|
+
'Orthorhombic Body Centered',
|
|
717
|
+
'Orthorhombic Face Centered',
|
|
718
|
+
'Tetragonal Primitive',
|
|
719
|
+
'Tetragonal Body Centered',
|
|
720
|
+
'Cubic Primitive',
|
|
721
|
+
'Cubic Body Centered',
|
|
722
|
+
'Cubic Face Centered',
|
|
723
|
+
'Rhombohedral',
|
|
724
|
+
'Hexagonal',
|
|
725
|
+
),
|
|
726
|
+
description='The Bravais lattice of the crystal structure.',
|
|
727
|
+
a_eln=ELNAnnotation(
|
|
728
|
+
component=ELNComponentEnum.EnumEditQuantity,
|
|
729
|
+
),
|
|
730
|
+
)
|
|
731
|
+
|
|
709
732
|
|
|
710
733
|
class SubstrateCrystalProperties(CrystalProperties):
|
|
711
734
|
"""
|
|
@@ -715,21 +738,26 @@ class SubstrateCrystalProperties(CrystalProperties):
|
|
|
715
738
|
bravais_lattices = Quantity(
|
|
716
739
|
type=MEnum(
|
|
717
740
|
'Triclinic',
|
|
718
|
-
'Monoclinic
|
|
741
|
+
'Monoclinic Primitive',
|
|
719
742
|
'Monoclinic Base Centered',
|
|
720
|
-
'Orthorhombic
|
|
743
|
+
'Orthorhombic Primitive',
|
|
721
744
|
'Orthorhombic Base Centered',
|
|
722
745
|
'Orthorhombic Body Centered',
|
|
723
746
|
'Orthorhombic Face Centered',
|
|
724
|
-
'Tetragonal
|
|
747
|
+
'Tetragonal Primitive',
|
|
725
748
|
'Tetragonal Body Centered',
|
|
726
|
-
'Cubic
|
|
749
|
+
'Cubic Primitive',
|
|
727
750
|
'Cubic Body Centered',
|
|
728
751
|
'Cubic Face Centered',
|
|
729
|
-
'
|
|
752
|
+
'Rhombohedral',
|
|
730
753
|
'Hexagonal',
|
|
754
|
+
'Monoclinic Simple', # Incorrect term, normalizes to Monoclinic Primitive
|
|
755
|
+
'Orthorhombic Simple', # Incorrect term, norm. to Orthorhombic Primitive
|
|
756
|
+
'Tetragonal Simple', # Incorrect term, normalizes to Tetragonal Primitive
|
|
757
|
+
'Cubic Simple', # Incorrect term, normalizes to Cubic Primitive
|
|
758
|
+
'Trigonal', # Incorrect term, normalizes to Rhombohedral
|
|
731
759
|
),
|
|
732
|
-
description='The
|
|
760
|
+
description='The Bravais lattice of the crystal structure.',
|
|
733
761
|
a_eln=ELNAnnotation(
|
|
734
762
|
component=ELNComponentEnum.EnumEditQuantity,
|
|
735
763
|
),
|
|
@@ -745,6 +773,30 @@ class SubstrateCrystalProperties(CrystalProperties):
|
|
|
745
773
|
""",
|
|
746
774
|
)
|
|
747
775
|
|
|
776
|
+
def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
|
|
777
|
+
"""
|
|
778
|
+
The normalizer for the `SubstrateCrystalProperties` class.
|
|
779
|
+
|
|
780
|
+
Args:
|
|
781
|
+
archive (EntryArchive): The archive containing the section that is being
|
|
782
|
+
normalized.
|
|
783
|
+
logger (BoundLogger): A structlog logger.
|
|
784
|
+
"""
|
|
785
|
+
old_terminologies = {
|
|
786
|
+
'Monoclinic Simple': 'Monoclinic Primitive',
|
|
787
|
+
'Orthorhombic Simple': 'Orthorhombic Primitive',
|
|
788
|
+
'Tetragonal Simple': 'Tetragonal Primitive',
|
|
789
|
+
'Cubic Simple': 'Cubic Primitive',
|
|
790
|
+
'Trigonal': 'Rhombohedral',
|
|
791
|
+
}
|
|
792
|
+
if self.bravais_lattices in old_terminologies:
|
|
793
|
+
logger.warning(
|
|
794
|
+
f"Bravais lattice '{self.bravais_lattices}' is incorrect terminology. "
|
|
795
|
+
f"Normalizing to '{old_terminologies[self.bravais_lattices]}'."
|
|
796
|
+
)
|
|
797
|
+
self.bravais_lattices = old_terminologies[self.bravais_lattices]
|
|
798
|
+
super().normalize(archive, logger)
|
|
799
|
+
|
|
748
800
|
|
|
749
801
|
class ElectronicProperties(ArchiveSection):
|
|
750
802
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nomad-material-processing
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.7
|
|
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
|
|
@@ -216,6 +216,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
216
216
|
Classifier: Programming Language :: Python :: 3.11
|
|
217
217
|
Classifier: Programming Language :: Python :: 3.12
|
|
218
218
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
219
|
+
Requires-Python: >=3.10
|
|
219
220
|
Description-Content-Type: text/markdown
|
|
220
221
|
License-File: LICENSE
|
|
221
222
|
Requires-Dist: nomad-lab>=1.3.14
|
|
@@ -223,7 +224,7 @@ Provides-Extra: dev
|
|
|
223
224
|
Requires-Dist: pytest; extra == "dev"
|
|
224
225
|
Requires-Dist: ruff; extra == "dev"
|
|
225
226
|
Requires-Dist: structlog; extra == "dev"
|
|
226
|
-
Requires-Dist: nomad-docs>=0.1
|
|
227
|
+
Requires-Dist: nomad-docs>=2.0.1; extra == "dev"
|
|
227
228
|
Requires-Dist: mkdocs; extra == "dev"
|
|
228
229
|
Requires-Dist: mkdocs-material>=9.0; extra == "dev"
|
|
229
230
|
Requires-Dist: pymdown-extensions; extra == "dev"
|
|
@@ -57,6 +57,8 @@ src/nomad_material_processing.egg-info/SOURCES.txt
|
|
|
57
57
|
src/nomad_material_processing.egg-info/dependency_links.txt
|
|
58
58
|
src/nomad_material_processing.egg-info/entry_points.txt
|
|
59
59
|
src/nomad_material_processing.egg-info/requires.txt
|
|
60
|
+
src/nomad_material_processing.egg-info/scm_file_list.json
|
|
61
|
+
src/nomad_material_processing.egg-info/scm_version.json
|
|
60
62
|
src/nomad_material_processing.egg-info/top_level.txt
|
|
61
63
|
src/nomad_material_processing/solution/__init__.py
|
|
62
64
|
src/nomad_material_processing/solution/general.py
|
|
@@ -75,6 +77,7 @@ src/nomad_material_processing/vapor_deposition/pvd/thermal.py
|
|
|
75
77
|
tests/conftest.py
|
|
76
78
|
tests/test_schema.py
|
|
77
79
|
tests/data/test_crystal_growth.archive.yaml
|
|
80
|
+
tests/data/test_crystalline_substrate.archive.yaml
|
|
78
81
|
tests/data/test_czochralski_process.archive.yaml
|
|
79
82
|
tests/data/test_epitaxy.archive.yaml
|
|
80
83
|
tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
".github/workflows/mkdocs-deploy.yml",
|
|
4
|
+
".github/workflows/python-publish.yml",
|
|
5
|
+
".github/workflows/python-test.yml",
|
|
6
|
+
".gitignore",
|
|
7
|
+
".vscode/settings.json",
|
|
8
|
+
"CITATION.cff",
|
|
9
|
+
"LICENSE",
|
|
10
|
+
"README.md",
|
|
11
|
+
"docs/assets/.gitignore",
|
|
12
|
+
"docs/assets/favicon.png",
|
|
13
|
+
"docs/assets/levelsschema.png",
|
|
14
|
+
"docs/assets/nomad-logo.png",
|
|
15
|
+
"docs/assets/nomad-plugin-logo.png",
|
|
16
|
+
"docs/assets/use-built-in-schema-1.png",
|
|
17
|
+
"docs/assets/use-built-in-schema-2.png",
|
|
18
|
+
"docs/contact.md",
|
|
19
|
+
"docs/explanation/data_model.md",
|
|
20
|
+
"docs/explanation/levelsofschema.md",
|
|
21
|
+
"docs/explanation/schemas.md",
|
|
22
|
+
"docs/how_to/develop.md",
|
|
23
|
+
"docs/how_to/install.md",
|
|
24
|
+
"docs/how_to/use_this_plugin.md",
|
|
25
|
+
"docs/how_to/use_this_plugin_old.md",
|
|
26
|
+
"docs/index.md",
|
|
27
|
+
"docs/main.py",
|
|
28
|
+
"docs/reference/references.md",
|
|
29
|
+
"docs/reference/schemas.md",
|
|
30
|
+
"docs/reference/schemas/combinatorial.md",
|
|
31
|
+
"docs/reference/schemas/crystal_growth.md",
|
|
32
|
+
"docs/reference/schemas/epitaxy.md",
|
|
33
|
+
"docs/reference/schemas/general.md",
|
|
34
|
+
"docs/reference/schemas/solution/general.md",
|
|
35
|
+
"docs/reference/schemas/vapor_deposition/cvd/general.md",
|
|
36
|
+
"docs/reference/schemas/vapor_deposition/cvd/movpe.md",
|
|
37
|
+
"docs/reference/schemas/vapor_deposition/general.md",
|
|
38
|
+
"docs/reference/schemas/vapor_deposition/pvd/general.md",
|
|
39
|
+
"docs/reference/schemas/vapor_deposition/pvd/mbe.md",
|
|
40
|
+
"docs/reference/schemas/vapor_deposition/pvd/pld.md",
|
|
41
|
+
"docs/reference/schemas/vapor_deposition/pvd/sputtering.md",
|
|
42
|
+
"docs/reference/schemas/vapor_deposition/pvd/thermal.md",
|
|
43
|
+
"docs/reference/solution.md",
|
|
44
|
+
"docs/reference/vapor_depostion.md",
|
|
45
|
+
"docs/stylesheets/extra.css",
|
|
46
|
+
"docs/theme/partials/header.html",
|
|
47
|
+
"docs/tutorial/tutorial.md",
|
|
48
|
+
"mkdocs.yml",
|
|
49
|
+
"pyproject.toml",
|
|
50
|
+
"setup.py",
|
|
51
|
+
"src/nomad_material_processing/__init__.py",
|
|
52
|
+
"src/nomad_material_processing/combinatorial.py",
|
|
53
|
+
"src/nomad_material_processing/crystal_growth.py",
|
|
54
|
+
"src/nomad_material_processing/epitaxy.py",
|
|
55
|
+
"src/nomad_material_processing/general.py",
|
|
56
|
+
"src/nomad_material_processing/solution/__init__.py",
|
|
57
|
+
"src/nomad_material_processing/solution/general.py",
|
|
58
|
+
"src/nomad_material_processing/solution/utils.py",
|
|
59
|
+
"src/nomad_material_processing/utils.py",
|
|
60
|
+
"src/nomad_material_processing/vapor_deposition/__init__.py",
|
|
61
|
+
"src/nomad_material_processing/vapor_deposition/cvd/__init__.py",
|
|
62
|
+
"src/nomad_material_processing/vapor_deposition/cvd/general.py",
|
|
63
|
+
"src/nomad_material_processing/vapor_deposition/cvd/movpe.py",
|
|
64
|
+
"src/nomad_material_processing/vapor_deposition/general.py",
|
|
65
|
+
"src/nomad_material_processing/vapor_deposition/pvd/__init__.py",
|
|
66
|
+
"src/nomad_material_processing/vapor_deposition/pvd/general.py",
|
|
67
|
+
"src/nomad_material_processing/vapor_deposition/pvd/mbe.py",
|
|
68
|
+
"src/nomad_material_processing/vapor_deposition/pvd/pld.py",
|
|
69
|
+
"src/nomad_material_processing/vapor_deposition/pvd/sputtering.py",
|
|
70
|
+
"src/nomad_material_processing/vapor_deposition/pvd/thermal.py",
|
|
71
|
+
"tests/conftest.py",
|
|
72
|
+
"tests/data/test_crystal_growth.archive.yaml",
|
|
73
|
+
"tests/data/test_crystalline_substrate.archive.yaml",
|
|
74
|
+
"tests/data/test_czochralski_process.archive.yaml",
|
|
75
|
+
"tests/data/test_epitaxy.archive.yaml",
|
|
76
|
+
"tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml",
|
|
77
|
+
"tests/data/test_molecular_beam_epitaxy.archive.yaml",
|
|
78
|
+
"tests/data/test_physical_vapor_deposition.archive.yaml",
|
|
79
|
+
"tests/data/test_pulsed_laser_deposition.archive.yaml",
|
|
80
|
+
"tests/data/test_sample_deposition.archive.yaml",
|
|
81
|
+
"tests/data/test_solution.archive.yaml",
|
|
82
|
+
"tests/data/test_solution_component.archive.yaml",
|
|
83
|
+
"tests/data/test_sputter_deposition.archive.yaml",
|
|
84
|
+
"tests/data/test_substrate.archive.yaml",
|
|
85
|
+
"tests/data/test_thermal_evaporation.archive.yaml",
|
|
86
|
+
"tests/data/test_thin_film.archive.yaml",
|
|
87
|
+
"tests/data/test_thin_film_stack.archive.yaml",
|
|
88
|
+
"tests/data/test_vapor_phase_epitaxy.archive.yaml",
|
|
89
|
+
"tests/solution/test_solution_schema.py",
|
|
90
|
+
"tests/test_schema.py"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from nomad.client import normalize_all, parse
|
|
3
|
+
from nomad.datamodel.metainfo.basesections import (
|
|
4
|
+
PubChemPureSubstanceSection,
|
|
5
|
+
PureSubstanceSection,
|
|
6
|
+
)
|
|
7
|
+
from nomad.units import ureg
|
|
8
|
+
|
|
9
|
+
from nomad_material_processing.solution.general import (
|
|
10
|
+
Solution,
|
|
11
|
+
SolutionComponent,
|
|
12
|
+
SolutionComponentReference,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.fixture(autouse=True)
|
|
17
|
+
def mock_pubchem(monkeypatch):
|
|
18
|
+
"""Use fixed enrichment data without querying PubChem."""
|
|
19
|
+
substances = {
|
|
20
|
+
'Water': (962, 'H2O', 18.010564684),
|
|
21
|
+
'Sodium Chloride': (5234, 'ClNa', 57.95862196),
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
def normalize_pubchem(section, archive, logger):
|
|
25
|
+
if section.name not in substances:
|
|
26
|
+
pytest.fail(f'No mocked PubChem data for {section.name!r}.')
|
|
27
|
+
cid, formula, molecular_mass = substances[section.name]
|
|
28
|
+
section.pub_chem_cid = cid
|
|
29
|
+
section.molecular_formula = formula
|
|
30
|
+
section.molecular_mass = molecular_mass * ureg('Da')
|
|
31
|
+
|
|
32
|
+
# Run the parent normalization as
|
|
33
|
+
# PubChemPureSubstanceSection inherits from PureSubstanceSection
|
|
34
|
+
PureSubstanceSection.normalize(section, archive, logger)
|
|
35
|
+
|
|
36
|
+
monkeypatch.setattr(PubChemPureSubstanceSection, 'normalize', normalize_pubchem)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_solution_component():
|
|
40
|
+
"""
|
|
41
|
+
Test molar concentration calculation for a solution component.
|
|
42
|
+
Test mass calculation.
|
|
43
|
+
"""
|
|
44
|
+
archive = parse('tests/data/test_solution_component.archive.yaml')[0]
|
|
45
|
+
archive.data = SolutionComponent(
|
|
46
|
+
volume=1.0 * ureg('l'),
|
|
47
|
+
density=1.0 * ureg('kg/l'),
|
|
48
|
+
pure_substance=PubChemPureSubstanceSection(
|
|
49
|
+
name='Water',
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
normalize_all(archive)
|
|
53
|
+
|
|
54
|
+
volume = 1 * ureg('liter')
|
|
55
|
+
archive.data.calculate_molar_concentration(volume)
|
|
56
|
+
|
|
57
|
+
assert archive.data.mass.to('kg').magnitude == pytest.approx(1.0, rel=1e-3)
|
|
58
|
+
assert archive.data.molar_concentration.calculated_concentration.to(
|
|
59
|
+
'mol/l'
|
|
60
|
+
).magnitude == pytest.approx(55.523, rel=1e-3)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_solution():
|
|
64
|
+
starter_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
|
|
65
|
+
water = PubChemPureSubstanceSection(name='Water')
|
|
66
|
+
salt = PubChemPureSubstanceSection(name='Sodium Chloride')
|
|
67
|
+
starter_solution = Solution(
|
|
68
|
+
name='Starter solution',
|
|
69
|
+
components=[
|
|
70
|
+
SolutionComponent(
|
|
71
|
+
volume=0.50 * ureg('l'),
|
|
72
|
+
density=1.0 * ureg('kg/l'),
|
|
73
|
+
pure_substance=water,
|
|
74
|
+
),
|
|
75
|
+
SolutionComponent(
|
|
76
|
+
mass=0.01 * ureg('kg'),
|
|
77
|
+
pure_substance=salt,
|
|
78
|
+
component_role='Solute',
|
|
79
|
+
),
|
|
80
|
+
],
|
|
81
|
+
)
|
|
82
|
+
starter_solution_archive.data = starter_solution
|
|
83
|
+
normalize_all(starter_solution_archive)
|
|
84
|
+
starter_water_concentration = starter_solution_archive.data.solvents[
|
|
85
|
+
0
|
|
86
|
+
].molar_concentration.calculated_concentration
|
|
87
|
+
starter_water_amount = starter_solution_archive.data.solvents[0].amount_of_substance
|
|
88
|
+
starter_salt_concentration = starter_solution_archive.data.solutes[
|
|
89
|
+
0
|
|
90
|
+
].molar_concentration.calculated_concentration
|
|
91
|
+
starter_salt_mass = starter_solution_archive.data.solutes[0].mass
|
|
92
|
+
|
|
93
|
+
assert starter_water_concentration.to('mol/l').magnitude == pytest.approx(
|
|
94
|
+
55.523, rel=1e-3
|
|
95
|
+
)
|
|
96
|
+
assert starter_water_amount.to('mol').magnitude == pytest.approx(
|
|
97
|
+
0.5 * 55.523, rel=1e-3
|
|
98
|
+
)
|
|
99
|
+
assert starter_salt_concentration.to('mol/l').magnitude == pytest.approx(
|
|
100
|
+
0.345, rel=1e-3
|
|
101
|
+
)
|
|
102
|
+
assert starter_salt_mass.to('kg').magnitude == pytest.approx(0.01, rel=1e-3)
|
|
103
|
+
|
|
104
|
+
## making the main solution using starter solution
|
|
105
|
+
main_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
|
|
106
|
+
|
|
107
|
+
# step 1: portioning the starter solution (one fifth)
|
|
108
|
+
main_solution_archive.data = Solution(
|
|
109
|
+
name='Diluted Solution',
|
|
110
|
+
components=[
|
|
111
|
+
SolutionComponentReference(
|
|
112
|
+
system=starter_solution,
|
|
113
|
+
volume=0.1 * ureg('l'),
|
|
114
|
+
),
|
|
115
|
+
],
|
|
116
|
+
)
|
|
117
|
+
normalize_all(main_solution_archive)
|
|
118
|
+
assert main_solution_archive.data.solvents[
|
|
119
|
+
0
|
|
120
|
+
].molar_concentration.calculated_concentration.to(
|
|
121
|
+
'mol/l'
|
|
122
|
+
).magnitude == pytest.approx(
|
|
123
|
+
starter_water_concentration.to('mol/l').magnitude, rel=1e-3
|
|
124
|
+
)
|
|
125
|
+
assert main_solution_archive.data.solvents[0].amount_of_substance.to(
|
|
126
|
+
'mol'
|
|
127
|
+
).magnitude == pytest.approx(starter_water_amount.to('mol').magnitude / 5, rel=1e-3)
|
|
128
|
+
assert main_solution_archive.data.solutes[
|
|
129
|
+
0
|
|
130
|
+
].molar_concentration.calculated_concentration.to(
|
|
131
|
+
'mol/l'
|
|
132
|
+
).magnitude == pytest.approx(
|
|
133
|
+
starter_salt_concentration.to('mol/l').magnitude, rel=1e-3
|
|
134
|
+
)
|
|
135
|
+
assert main_solution_archive.data.solutes[0].mass.to(
|
|
136
|
+
'kg'
|
|
137
|
+
).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude / 5, rel=1e-3)
|
|
138
|
+
|
|
139
|
+
# step 2: diluting the solution (double the volume of water)
|
|
140
|
+
main_solution_archive.data = Solution(
|
|
141
|
+
name='Diluted Solution',
|
|
142
|
+
components=[
|
|
143
|
+
SolutionComponentReference(
|
|
144
|
+
system=starter_solution,
|
|
145
|
+
volume=0.1 * ureg('l'),
|
|
146
|
+
),
|
|
147
|
+
SolutionComponent(
|
|
148
|
+
volume=0.1 * ureg('l'),
|
|
149
|
+
density=1.0 * ureg('kg/l'),
|
|
150
|
+
pure_substance=water,
|
|
151
|
+
),
|
|
152
|
+
],
|
|
153
|
+
)
|
|
154
|
+
normalize_all(main_solution_archive)
|
|
155
|
+
assert main_solution_archive.data.solvents[
|
|
156
|
+
0
|
|
157
|
+
].molar_concentration.calculated_concentration.to(
|
|
158
|
+
'mol/l'
|
|
159
|
+
).magnitude == pytest.approx(
|
|
160
|
+
starter_water_concentration.to('mol/l').magnitude, rel=1e-3
|
|
161
|
+
)
|
|
162
|
+
assert main_solution_archive.data.solvents[0].amount_of_substance.to(
|
|
163
|
+
'mol'
|
|
164
|
+
).magnitude == pytest.approx(
|
|
165
|
+
(starter_water_amount.to('mol').magnitude / 5) * 2, rel=1e-3
|
|
166
|
+
)
|
|
167
|
+
assert main_solution_archive.data.solutes[
|
|
168
|
+
0
|
|
169
|
+
].molar_concentration.calculated_concentration.to(
|
|
170
|
+
'mol/l'
|
|
171
|
+
).magnitude == pytest.approx(
|
|
172
|
+
starter_salt_concentration.to('mol/l').magnitude / 2, rel=1e-3
|
|
173
|
+
)
|
|
174
|
+
assert main_solution_archive.data.solutes[0].mass.to(
|
|
175
|
+
'kg'
|
|
176
|
+
).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude / 5, rel=1e-3)
|
|
177
|
+
|
|
178
|
+
# finally, quantities in the starter solution should stay the same
|
|
179
|
+
# after all normalizations
|
|
180
|
+
assert starter_solution_archive.data.solvents[
|
|
181
|
+
0
|
|
182
|
+
].molar_concentration.calculated_concentration.to(
|
|
183
|
+
'mol/l'
|
|
184
|
+
).magnitude == pytest.approx(
|
|
185
|
+
starter_water_concentration.to('mol/l').magnitude, rel=1e-3
|
|
186
|
+
)
|
|
187
|
+
assert starter_solution_archive.data.solvents[0].amount_of_substance.to(
|
|
188
|
+
'mol'
|
|
189
|
+
).magnitude == pytest.approx(starter_water_amount.to('mol').magnitude, rel=1e-3)
|
|
190
|
+
assert starter_solution_archive.data.solutes[
|
|
191
|
+
0
|
|
192
|
+
].molar_concentration.calculated_concentration.to(
|
|
193
|
+
'mol/l'
|
|
194
|
+
).magnitude == pytest.approx(
|
|
195
|
+
starter_salt_concentration.to('mol/l').magnitude, rel=1e-3
|
|
196
|
+
)
|
|
197
|
+
assert starter_solution_archive.data.solutes[0].mass.to(
|
|
198
|
+
'kg'
|
|
199
|
+
).magnitude == pytest.approx(starter_salt_mass.to('kg').magnitude, rel=1e-3)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
if __name__ == '__main__':
|
|
203
|
+
test_solution()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import glob
|
|
2
|
+
import os.path
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
from nomad.client import normalize_all, parse
|
|
6
|
+
|
|
7
|
+
test_files = glob.glob(
|
|
8
|
+
os.path.join(os.path.dirname(__file__), 'data', '*.archive.yaml')
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.mark.parametrize('test_file', test_files)
|
|
13
|
+
def test_schema(test_file):
|
|
14
|
+
entry_archive = parse(test_file)[0]
|
|
15
|
+
normalize_all(entry_archive)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_crystalline_substrate_bravais_lattice_normalization():
|
|
19
|
+
test_file = os.path.join(
|
|
20
|
+
os.path.dirname(__file__),
|
|
21
|
+
'data',
|
|
22
|
+
'test_crystalline_substrate.archive.yaml',
|
|
23
|
+
)
|
|
24
|
+
entry_archive = parse(test_file)[0]
|
|
25
|
+
normalize_all(entry_archive)
|
|
26
|
+
|
|
27
|
+
assert (
|
|
28
|
+
entry_archive.data.crystal_properties.bravais_lattices == 'Monoclinic Primitive'
|
|
29
|
+
)
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import pytest
|
|
2
|
-
from nomad.client import normalize_all, parse
|
|
3
|
-
from nomad.datamodel.metainfo.basesections import PubChemPureSubstanceSection
|
|
4
|
-
from nomad.units import ureg
|
|
5
|
-
|
|
6
|
-
from nomad_material_processing.solution.general import (
|
|
7
|
-
Solution,
|
|
8
|
-
SolutionComponent,
|
|
9
|
-
SolutionComponentReference,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def test_solution_component():
|
|
14
|
-
"""
|
|
15
|
-
Test molar concentration calculation for a solution component.
|
|
16
|
-
Test mass calculation.
|
|
17
|
-
"""
|
|
18
|
-
archive = parse('tests/data/test_solution_component.archive.yaml')[0]
|
|
19
|
-
archive.data = SolutionComponent(
|
|
20
|
-
volume=1.0 * ureg('l'),
|
|
21
|
-
density=1.0 * ureg('kg/l'),
|
|
22
|
-
pure_substance=PubChemPureSubstanceSection(
|
|
23
|
-
name='Water',
|
|
24
|
-
),
|
|
25
|
-
)
|
|
26
|
-
normalize_all(archive)
|
|
27
|
-
|
|
28
|
-
volume = 1 * ureg('liter')
|
|
29
|
-
archive.data.calculate_molar_concentration(volume)
|
|
30
|
-
|
|
31
|
-
assert pytest.approx(archive.data.mass, 1e-3) == 1.0 * ureg('kg')
|
|
32
|
-
assert pytest.approx(
|
|
33
|
-
archive.data.molar_concentration.calculated_concentration, 1e-3
|
|
34
|
-
) == 55.523 * ureg('mol/l')
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def test_solution():
|
|
38
|
-
starter_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
|
|
39
|
-
water = PubChemPureSubstanceSection(name='Water')
|
|
40
|
-
salt = PubChemPureSubstanceSection(name='Sodium Chloride')
|
|
41
|
-
starter_solution = Solution(
|
|
42
|
-
name='Starter solution',
|
|
43
|
-
components=[
|
|
44
|
-
SolutionComponent(
|
|
45
|
-
volume=0.50 * ureg('l'),
|
|
46
|
-
density=1.0 * ureg('kg/l'),
|
|
47
|
-
pure_substance=water,
|
|
48
|
-
),
|
|
49
|
-
SolutionComponent(
|
|
50
|
-
mass=0.01 * ureg('kg'),
|
|
51
|
-
pure_substance=salt,
|
|
52
|
-
component_role='Solute',
|
|
53
|
-
),
|
|
54
|
-
],
|
|
55
|
-
)
|
|
56
|
-
starter_solution_archive.data = starter_solution
|
|
57
|
-
normalize_all(starter_solution_archive)
|
|
58
|
-
starter_water_concentration = starter_solution_archive.data.solvents[
|
|
59
|
-
0
|
|
60
|
-
].molar_concentration.calculated_concentration
|
|
61
|
-
starter_water_amount = starter_solution_archive.data.solvents[0].amount_of_substance
|
|
62
|
-
starter_salt_concentration = starter_solution_archive.data.solutes[
|
|
63
|
-
0
|
|
64
|
-
].molar_concentration.calculated_concentration
|
|
65
|
-
starter_salt_mass = starter_solution_archive.data.solutes[0].mass
|
|
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
|
-
)
|
|
71
|
-
assert pytest.approx(starter_salt_concentration, 1e-3) == 0.345 * ureg('mol/l')
|
|
72
|
-
assert pytest.approx(starter_salt_mass, 1e-3) == 0.01 * ureg('kg')
|
|
73
|
-
|
|
74
|
-
## making the main solution using starter solution
|
|
75
|
-
main_solution_archive = parse('tests/data/test_solution.archive.yaml')[0]
|
|
76
|
-
|
|
77
|
-
# step 1: portioning the starter solution (one fifth)
|
|
78
|
-
main_solution_archive.data = Solution(
|
|
79
|
-
name='Diluted Solution',
|
|
80
|
-
components=[
|
|
81
|
-
SolutionComponentReference(
|
|
82
|
-
system=starter_solution,
|
|
83
|
-
volume=0.1 * ureg('l'),
|
|
84
|
-
),
|
|
85
|
-
],
|
|
86
|
-
)
|
|
87
|
-
normalize_all(main_solution_archive)
|
|
88
|
-
assert (
|
|
89
|
-
pytest.approx(
|
|
90
|
-
main_solution_archive.data.solvents[
|
|
91
|
-
0
|
|
92
|
-
].molar_concentration.calculated_concentration,
|
|
93
|
-
1e-3,
|
|
94
|
-
)
|
|
95
|
-
== starter_water_concentration
|
|
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
|
-
)
|
|
104
|
-
assert (
|
|
105
|
-
pytest.approx(
|
|
106
|
-
main_solution_archive.data.solutes[
|
|
107
|
-
0
|
|
108
|
-
].molar_concentration.calculated_concentration,
|
|
109
|
-
1e-3,
|
|
110
|
-
)
|
|
111
|
-
== starter_salt_concentration
|
|
112
|
-
)
|
|
113
|
-
assert (
|
|
114
|
-
pytest.approx(main_solution_archive.data.solutes[0].mass, 1e-3)
|
|
115
|
-
== starter_salt_mass / 5
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
# step 2: diluting the solution (double the volume of water)
|
|
119
|
-
main_solution_archive.data = Solution(
|
|
120
|
-
name='Diluted Solution',
|
|
121
|
-
components=[
|
|
122
|
-
SolutionComponentReference(
|
|
123
|
-
system=starter_solution,
|
|
124
|
-
volume=0.1 * ureg('l'),
|
|
125
|
-
),
|
|
126
|
-
SolutionComponent(
|
|
127
|
-
volume=0.1 * ureg('l'),
|
|
128
|
-
density=1.0 * ureg('kg/l'),
|
|
129
|
-
pure_substance=water,
|
|
130
|
-
),
|
|
131
|
-
],
|
|
132
|
-
)
|
|
133
|
-
normalize_all(main_solution_archive)
|
|
134
|
-
assert (
|
|
135
|
-
pytest.approx(
|
|
136
|
-
main_solution_archive.data.solvents[
|
|
137
|
-
0
|
|
138
|
-
].molar_concentration.calculated_concentration,
|
|
139
|
-
1e-3,
|
|
140
|
-
)
|
|
141
|
-
== starter_water_concentration
|
|
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
|
-
)
|
|
150
|
-
assert (
|
|
151
|
-
pytest.approx(
|
|
152
|
-
main_solution_archive.data.solutes[
|
|
153
|
-
0
|
|
154
|
-
].molar_concentration.calculated_concentration,
|
|
155
|
-
1e-3,
|
|
156
|
-
)
|
|
157
|
-
== starter_salt_concentration / 2
|
|
158
|
-
)
|
|
159
|
-
assert (
|
|
160
|
-
pytest.approx(main_solution_archive.data.solutes[0].mass, 1e-3)
|
|
161
|
-
== starter_salt_mass / 5
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
# finally, quantities in the starter solution should stay the same
|
|
165
|
-
# after all normalizations
|
|
166
|
-
assert (
|
|
167
|
-
pytest.approx(
|
|
168
|
-
starter_solution_archive.data.solvents[
|
|
169
|
-
0
|
|
170
|
-
].molar_concentration.calculated_concentration,
|
|
171
|
-
1e-3,
|
|
172
|
-
)
|
|
173
|
-
== starter_water_concentration
|
|
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
|
-
)
|
|
182
|
-
assert (
|
|
183
|
-
pytest.approx(
|
|
184
|
-
starter_solution_archive.data.solutes[
|
|
185
|
-
0
|
|
186
|
-
].molar_concentration.calculated_concentration,
|
|
187
|
-
1e-3,
|
|
188
|
-
)
|
|
189
|
-
== starter_salt_concentration
|
|
190
|
-
)
|
|
191
|
-
assert (
|
|
192
|
-
pytest.approx(starter_solution_archive.data.solutes[0].mass, 1e-3)
|
|
193
|
-
== starter_salt_mass
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if __name__ == '__main__':
|
|
198
|
-
test_solution()
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import glob
|
|
2
|
-
import os.path
|
|
3
|
-
|
|
4
|
-
import pytest
|
|
5
|
-
from nomad.client import normalize_all, parse
|
|
6
|
-
|
|
7
|
-
test_files = glob.glob(
|
|
8
|
-
os.path.join(os.path.dirname(__file__), 'data', '*.archive.yaml')
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@pytest.mark.parametrize('test_file', test_files)
|
|
13
|
-
def test_schema(test_file):
|
|
14
|
-
entry_archive = parse(test_file)[0]
|
|
15
|
-
normalize_all(entry_archive)
|
|
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.6 → nomad_material_processing-1.0.7}/docs/assets/levelsschema.png
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/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.6 → nomad_material_processing-1.0.7}/docs/explanation/data_model.md
RENAMED
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/explanation/schemas.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/how_to/use_this_plugin.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/references.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
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/schemas.md
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/reference/solution.md
RENAMED
|
File without changes
|
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/stylesheets/extra.css
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/docs/theme/partials/header.html
RENAMED
|
File without changes
|
{nomad_material_processing-1.0.6 → nomad_material_processing-1.0.7}/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
|