nomad-material-processing 0.1.0__tar.gz → 1.0.1__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.
Files changed (77) hide show
  1. nomad_material_processing-1.0.1/.github/workflows/mkdocs-deploy.yml +28 -0
  2. nomad_material_processing-1.0.1/CITATION.cff +26 -0
  3. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/PKG-INFO +8 -4
  4. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/README.md +6 -2
  5. nomad_material_processing-1.0.1/docs/assets/.gitignore +1 -0
  6. nomad_material_processing-1.0.1/docs/assets/favicon.png +0 -0
  7. nomad_material_processing-1.0.1/docs/assets/levelsschema.png +0 -0
  8. nomad_material_processing-1.0.1/docs/assets/nomad-logo.png +0 -0
  9. nomad_material_processing-1.0.1/docs/assets/use-built-in-schema-1.png +0 -0
  10. nomad_material_processing-1.0.1/docs/assets/use-built-in-schema-2.png +0 -0
  11. nomad_material_processing-1.0.1/docs/contact.md +22 -0
  12. nomad_material_processing-1.0.1/docs/explanation/data_model.md +193 -0
  13. nomad_material_processing-1.0.1/docs/explanation/levelsofschema.md +42 -0
  14. nomad_material_processing-1.0.1/docs/explanation/schemas.md +249 -0
  15. nomad_material_processing-1.0.1/docs/how_to/develop.md +48 -0
  16. nomad_material_processing-1.0.1/docs/how_to/install.md +31 -0
  17. nomad_material_processing-1.0.1/docs/how_to/use_this_plugin.md +140 -0
  18. nomad_material_processing-1.0.1/docs/how_to/use_this_plugin_old.md +31 -0
  19. nomad_material_processing-1.0.1/docs/index.md +44 -0
  20. nomad_material_processing-1.0.1/docs/reference/references.md +20 -0
  21. nomad_material_processing-1.0.1/docs/stylesheets/extra.css +69 -0
  22. nomad_material_processing-1.0.1/docs/theme/partials/header.html +86 -0
  23. nomad_material_processing-1.0.1/docs/tutorial/tutorial.md +9 -0
  24. nomad_material_processing-1.0.1/mkdocs.yml +60 -0
  25. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/pyproject.toml +2 -1
  26. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/general.py +205 -26
  27. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +13 -0
  28. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/cvd/general.py +80 -1
  29. nomad_material_processing-1.0.1/src/nomad_material_processing/vapor_deposition/cvd/movpe.py +164 -0
  30. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/PKG-INFO +8 -4
  31. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/SOURCES.txt +23 -0
  32. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/entry_points.txt +1 -0
  33. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/requires.txt +1 -1
  34. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/.github/workflows/python-publish.yml +0 -0
  35. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/.github/workflows/python-test.yml +0 -0
  36. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/.gitignore +0 -0
  37. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/.vscode/settings.json +0 -0
  38. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/LICENSE +0 -0
  39. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/setup.cfg +0 -0
  40. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/setup.py +0 -0
  41. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/__init__.py +0 -0
  42. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/combinatorial.py +0 -0
  43. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/crystal_growth.py +0 -0
  44. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/epitaxy.py +0 -0
  45. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/solution/__init__.py +0 -0
  46. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/solution/general.py +0 -0
  47. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/solution/utils.py +0 -0
  48. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/utils.py +0 -0
  49. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/__init__.py +0 -0
  50. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/general.py +0 -0
  51. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +0 -0
  52. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/general.py +0 -0
  53. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/mbe.py +0 -0
  54. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/pld.py +0 -0
  55. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +0 -0
  56. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +0 -0
  57. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
  58. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
  59. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/conftest.py +0 -0
  60. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_crystal_growth.archive.yaml +0 -0
  61. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_czochralski_process.archive.yaml +0 -0
  62. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_epitaxy.archive.yaml +0 -0
  63. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
  64. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
  65. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
  66. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
  67. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_sample_deposition.archive.yaml +0 -0
  68. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_solution.archive.yaml +0 -0
  69. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_solution_component.archive.yaml +0 -0
  70. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_sputter_deposition.archive.yaml +0 -0
  71. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_substrate.archive.yaml +0 -0
  72. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
  73. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_thin_film.archive.yaml +0 -0
  74. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_thin_film_stack.archive.yaml +0 -0
  75. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
  76. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/solution/test_solution_schema.py +0 -0
  77. {nomad_material_processing-0.1.0 → nomad_material_processing-1.0.1}/tests/test_schema.py +0 -0
@@ -0,0 +1,28 @@
1
+ name: Deploy MkDocs Site
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main # Triggers deployment on push to the main branch
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout Repository
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v4
18
+ with:
19
+ python-version: '3.x'
20
+
21
+ - name: Install Dependencies
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install mkdocs mkdocs-material==8.1.1 pymdown-extensions mkdocs-click
25
+
26
+ - name: Build and Deploy
27
+ run: |
28
+ mkdocs gh-deploy --force --remote-branch gh-pages
@@ -0,0 +1,26 @@
1
+ cff-version: 1.2.0
2
+ title: nomad-material-processing
3
+ message: >-
4
+ If you use this software, please cite it using the
5
+ metadata from this file.
6
+ type: software
7
+ authors:
8
+ - given-names: Andrea
9
+ family-names: Albino
10
+ orcid: 'https://orcid.org/0000-0001-9280-7431'
11
+ - given-names: Sebastian
12
+ family-names: Brückner
13
+ orcid: 'https://orcid.org/0000-0002-5969-847X'
14
+ - given-names: Sarthak
15
+ family-names: Kapoor
16
+ orcid: 'https://orcid.org/0000-0002-1889-6998'
17
+ - given-names: Hampus
18
+ family-names: Näsström
19
+ orcid: 'https://orcid.org/0000-0002-3264-1692'
20
+ doi: 10.5281/zenodo.13786015
21
+ repository-code: 'https://github.com/FAIRmat-NFDI/nomad-material-processing'
22
+ url: 'https://fairmat-nfdi.github.io/nomad-material-processing/'
23
+ abstract: >-
24
+ A NOMAD plugin containing base sections for material
25
+ processing.
26
+ license: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nomad-material-processing
3
- Version: 0.1.0
3
+ Version: 1.0.1
4
4
  Summary: A plugin for NOMAD containing base sections for material processing.
5
5
  Author-email: Sarthak Kapoor <sarthak.kapoor@physik.hu-berlin.de>, Hampus Näsström <hampus.naesstroem@physik.hu-berlin.de>, Andrea Albino <andrea.albino@physik.hu-berlin.de>, Sebastian Brückner <sebastian.brueckner@ikz-berlin.de>
6
6
  License: Apache License
@@ -217,7 +217,7 @@ Classifier: Programming Language :: Python :: 3.12
217
217
  Classifier: License :: OSI Approved :: MIT License
218
218
  Description-Content-Type: text/markdown
219
219
  License-File: LICENSE
220
- Requires-Dist: nomad-lab>=1.3.4dev
220
+ Requires-Dist: nomad-lab>=1.3.6
221
221
  Provides-Extra: dev
222
222
  Requires-Dist: pytest; extra == "dev"
223
223
  Requires-Dist: ruff; extra == "dev"
@@ -233,9 +233,13 @@ This is a plugin for [NOMAD](https://nomad-lab.eu) which contains base sections
233
233
  material processing.
234
234
 
235
235
  ## Getting started
236
- `nomad-material-processing` can be installed from PyPI using `pip`:
236
+ `nomad-material-processing` can be installed from PyPI using `pip`.
237
+
238
+ > [!WARNING]
239
+ > Unfortunately, the current plugin mechanism is not supported by the latest nomad-lab version on PyPI and therefore an index url pointing to the NOMAD Gitlab registry needs to be added.
240
+
237
241
  ```sh
238
- pip install nomad-material-processing
242
+ pip install nomad-material-processing --index-url https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple
239
243
  ```
240
244
 
241
245
  ### Setting up your OASIS
@@ -8,9 +8,13 @@ This is a plugin for [NOMAD](https://nomad-lab.eu) which contains base sections
8
8
  material processing.
9
9
 
10
10
  ## Getting started
11
- `nomad-material-processing` can be installed from PyPI using `pip`:
11
+ `nomad-material-processing` can be installed from PyPI using `pip`.
12
+
13
+ > [!WARNING]
14
+ > Unfortunately, the current plugin mechanism is not supported by the latest nomad-lab version on PyPI and therefore an index url pointing to the NOMAD Gitlab registry needs to be added.
15
+
12
16
  ```sh
13
- pip install nomad-material-processing
17
+ pip install nomad-material-processing --index-url https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple
14
18
  ```
15
19
 
16
20
  ### Setting up your OASIS
@@ -0,0 +1 @@
1
+ nomad-oasis*.zip
@@ -0,0 +1,22 @@
1
+
2
+
3
+ NOMAD is an open source project that warmly welcomes community projects, contributions, suggestions, bug fixes, and constructive feedback. The contributors to this documentation page are part of the [FAIRmat Area A - Synthesis team](https://www.fairmat-nfdi.eu/fairmat/about-fairmat/team-fairmat).
4
+
5
+ You can reach us by different channels.
6
+ Best option is to join our [NOMAD Discord channel](https://discord.gg/Gyzx3ukUw8) and ask us there directly.
7
+
8
+ You can also send as directly an email to the main contributors list:
9
+
10
+ | Name | E-mail | Topics | Github profiles |
11
+ |------|------------|--------|-----------------|
12
+ | Dr. Andrea Albino | [andrea.albino@physik.hu-berlin.de](mailto:andrea.albino@physik.hu-berlin.de) | CVD | [@aalbino2](https://github.com/aalbino2) |
13
+ | Dr. Hampus Näsström | [hampus.naesstroem@physik.hu-berlin.de](mailto:hampus.naesstroem@physik.hu-berlin.de) | PVD | [@hampusnasstrom](https://github.com/hampusnasstrom) |
14
+ | Sarthak Kapoor, MSc. | [sarthak.kapoor@physik.hu-berlin.de](mailto:sarthak.kapoor@physik.hu-berlin.de) | Solutions | [@ka-sarthak](https://github.com/ka-sarthak) |
15
+ | Dr. José Marquez | [josemarquez@physik.hu-berlin.de](mailto:josemarquez@physik.hu-berlin.de) | General | [@Pepe-Marquez](https://github.com/Pepe-Marquez) |
16
+ | Dr. Sebastian Brückner (**Coordinator**) | [sebastian.brueckner@physik.hu-berlin.de](mailto:sebastian.brueckner@physik.hu-berlin.de) | General | [@budschi](https://github.com/budschi) |
17
+
18
+
19
+ Alternatively, you can also:
20
+
21
+ - Open an [**issue**](https://github.com/FAIRmat-NFDI/nomad-material-processing/issues) in the [Github project](https://github.com/FAIRmat-NFDI/nomad-material-processing), and tag any of us.
22
+
@@ -0,0 +1,193 @@
1
+ ## NOMAD Material Processing: a Community plugin
2
+
3
+ The NOMAD Material Processing Plugin contains schemas for different synthesis methods.
4
+ An overview of the package structure is shown below.
5
+
6
+ ### Technical description
7
+
8
+ There are some technical aspects to understand the Python package built for this plugin, they are not crucial for the data model understanding itself:
9
+
10
+ - It is structured according to the [src layout](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/).
11
+ - It is a [regular Python package](https://docs.python.org/3/reference/import.html#regular-packages), i. e., the structure is defined by the presence of `__init__.py` files. Each of these files contains one or multiple [entry points](https://nomad-lab.eu/prod/v1/staging/docs/howto/plugins/plugins.html#plugin-entry-points). These are used to load a portion of the code within your NOMAD through a specific section in the `nomad.yaml` file.
12
+ - It is pip installable. The `project.toml` file defines what will be installed, the dependencies, further details. The **entry points** included are listed in this file.
13
+
14
+ ```text
15
+ nomad-material-processing/
16
+ ├── docs
17
+ ├── pyproject.toml
18
+ ├── README.md
19
+ ├── src
20
+ │ └── nomad_material_processing
21
+ │ ├── __init__.py
22
+ │ ├── utils.py
23
+ │ ├── general.py
24
+ │ ├── vapor_deposition
25
+ │ │ ├── __init__.py
26
+ │ │ ├── general.py
27
+ │ │ ├── cvd
28
+ │ │ │ ├── __init__.py
29
+ │ │ │ ├── general.py
30
+ │ │ │ └── movpe.py
31
+ │ │ └── pvd
32
+ │ │ ├── __init__.py
33
+ │ │ ├── general.py
34
+ │ │ ├── mbe.py
35
+ │ │ ├── pld.py
36
+ │ │ ├── sputtering.py
37
+ │ │ └── thermal.py
38
+ │ └── solution
39
+ │ ├── __init__.py
40
+ │ ├── general.py
41
+ │ └── utils.py
42
+ └── tests
43
+ ```
44
+
45
+ ### Data model description
46
+
47
+ Each method has a dedicated [module](https://docs.python.org/3/tutorial/modules.html), i. e., a python file.
48
+
49
+ #### nomad_material_processing.general
50
+
51
+ A very general module containing several categories of classes:
52
+
53
+ - an abstract process class `SampleDeposition` that is inherited in the specific processes such as MOVPE, MBE, PLD, etc.
54
+ - `Substrate` and `CrystallineSubstrate` entities, the support used in `SampleDeposition` activities.
55
+ - `ThinFilm` entity, usually created during `SampleDeposition` activities.
56
+ - `ThinFilmStack` in case of processes producing multilayer samples. This class also contains a reference to the `Substrate`.
57
+ - `Geometry` and its [subclasses](../reference/references.md#subclass), defining the commonly found macroscopic shapes of a sample. It is a [subsection](../reference/references.md#subsection) composed within the `Substrate`. They include `Parallelepiped`, `SquareCuboid`, `RectangleCuboid`, `TruncatedCone`, `Cylinder`, `CylinderSector`, `IrregularParallelSurfaces`.
58
+ - `Miscut` another [subsection](../reference/references.md#subsection) of `Substrate` to specify the miscut of the orientation of the surface in terms of angular deviation toward crystallographic directions.
59
+ - `CrystalProperties` and `ElectronicProperties`, found as [subsection](../reference/references.md#subsection) of sample entities that need these parameters.
60
+ - simple activities performed on samples: `Etching`, `Annealing`, `Cleaning`. They also include a `Recipe` that can be referenced inside to avoid repetition for routine tasks.
61
+ - `TimeSeries` a general class that shapes every kind of parameters logged along a time window. The quantities referring to the measured parameter are `value` and `time`. `set_value` and `set_time` can also be specified, as they usually differ from the measured ones. Several [subclasses](../reference/references.md#subclass) inheriting from this one can be found nested in the package.
62
+
63
+ #### nomad_material_processing.vapor_deposition.general
64
+
65
+ The classes and now specified toward a specified group of techniques. The master class in this module is `VaporDeposition`, inheriting from `SampleDeposition`.
66
+
67
+ The other classes found here are specifying the [subsections](../reference/references.md#subsection) found in the steps of the `VaporDeposition` process.
68
+ `VaporDepositionStep` contains three [subsections](../reference/references.md#subsection) allowing to describe the parameters usually recorded during an experiment:
69
+
70
+ - `VaporDepositionSource` the metadata on which kind of source will bring the raw material in the reaction chamber.
71
+ This class is in turn composed by three distinct elements, namely the `Component` material to be evaporated, the `EvaporationSource` that is the element that produces the vapor, and `MolarFlowRate` that is a time series recording the molar flux exiting the source. This is used as a list within the `VaporDepositionStep` because many sources can be present at the same time.
72
+ - `SampleParameter` this [subsection](../reference/references.md#subsection) hosts the references to the `ThinFilm` deposited and the `ThinFilmStack` or `Substrate` used as support of the deposition. This [subsection](../reference/references.md#subsection) is also used to record sample-specific parameters in the process, such as temperature, or growth rate. This is a list because many samples can be grown at the same time.
73
+ - `ChamberEnvironment` collects the metadata connected to the whole reaction chamber that cannot be linked to one single sample. It usually contains temperature or `GasFlow` [subsections](../reference/references.md#subsection).
74
+
75
+ These three [subsections](../reference/references.md#subsection) are the backbone of the `VaporDeposition` process and they are usually inherited whenever a specific experiment requires to extend them.
76
+
77
+ #### nomad_material_processing.vapor_deposition.cvd.general
78
+
79
+ This module contains specifications of `VaporDepositionSource` and `TimeSeries` commonly adopted in CVD techniques:
80
+
81
+ Sources for CVD are inheriting from `CVDSource`, that is in turn a `VaporDepositionSource`.
82
+
83
+ - `BubblerSource` defines a bubbler commonly used in CVD for liquid precursors.
84
+ - `FlashSource` the vapor is generated by a `FlashEvaporator`.
85
+ - `MistSource` another kind of source adopted in CVD.
86
+ - `GasCylinderSource` a simple cylinder containing some gas phase precursor. In this case the `EvaporationSource` [subclass](../reference/references.md#subclass), called `GasCylinderEvaporator`, is not really evaporating as the precursor is already at the gas state.
87
+ - `GasLineSource` used for gaseous precursors that are provided through a stable installation sourcing gas from facilities external to the lab.
88
+
89
+ `TimeSeries` used in CVD are:
90
+ - `Rotation` specifies rotation frequency of the substrate holder in the chamber
91
+ - `PartialVaporPressure` as [subclass](../reference/references.md#subclass) of `Pressure`
92
+ - `PushPurgeGasFlow` contains two `VolumetricFlowRate` [subsections](../reference/references.md#subsection) that record the source and drain fluxes of the carries gas in the chamber.
93
+
94
+ #### nomad_material_processing.vapor_deposition.cvd.movpe
95
+
96
+
97
+
98
+ #### nomad_material_processing.vapor_deposition.pvd
99
+ #### nomad_material_processing.vapor_deposition.pvd.general
100
+ #### nomad_material_processing.vapor_deposition.pvd.mbe
101
+ #### nomad_material_processing.vapor_deposition.pvd.pld
102
+ #### nomad_material_processing.vapor_deposition.pvd.sputtering
103
+ #### nomad_material_processing.vapor_deposition.pvd.thermal
104
+ #### nomad_material_processing.solution.general
105
+
106
+ `solution.general` module contains the following entry sections (used to create
107
+ NOMAD [entries](https://nomad-lab.eu/prod/v1/docs/reference/glossary.html#entry)):
108
+
109
+ ##### `Solution`
110
+ Describes liquid solutions by extending the
111
+ [`CompositeSystem`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#system) with quantities: _pH_, _mass_,
112
+ _calculated_volume_, _measured_volume_, _density_, and sub-sections:
113
+ _solvents_, _solutes_, and _solution_storage_.
114
+
115
+ ```py
116
+ # pseudocode for `Solution` datamodel
117
+ class Solution(CompositeSystem, EntryData):
118
+ ph_value: float
119
+ mass: float
120
+ calculated_volume: float
121
+ measured_volume: float
122
+ density: float
123
+ components: list[
124
+ Union(
125
+ SolutionComponent,
126
+ SolutionComponentReference,
127
+ )
128
+ ]
129
+ solutes: list[SolutionComponent]
130
+ solvents: list[SolutionComponent]
131
+ solution_storage: SolutionStorage
132
+ ```
133
+
134
+ !!! hint
135
+ The _measured_volume_ field is user-defined. By default, the automation in
136
+ `Solution` uses _calculated_volume_, but if _measured_volume_ is provided, it will take
137
+ precedence. This is useful when the final solution volume differs from the sum of its
138
+ component volumes, and should be specified by the user.
139
+ The _components_ sub-section, inherited from `CompositeSystem` and re-defined, is used to describe
140
+ a list of components used in the solution. Each of them contributes to the _mass_ and
141
+ _calculated_volume_ of the solution. The component can either nest a
142
+ sub-section describing its composition, or can be another `Solution` entry connected
143
+ via reference.
144
+ These options are are handled by
145
+ `SolutionComponent` and `SolutionComponentReference` sections respectively.
146
+
147
+ Let's take a closer look at each of them.
148
+
149
+
150
+ `SolutionComponent` extends `PureSubstanceComponent` with quantities:
151
+ _component_role_, _mass_, _volume_, _density_, and sub-section: _molar_concentration_.
152
+ The _pure_substance_ sub-section inherited from `PureSubstanceComponent` specifies the
153
+ chemical compound. This information along with the mass of the component and
154
+ total volume of the solution is used to automatically determine the molar concentration of
155
+ the component, populating the corresponding sub-section.
156
+ Based on the _component_role_, the components are copied over to either
157
+ `Solution.solvents` or `Solution.solutes`.
158
+ ```py
159
+ class SolutionComponent(PureSubstanceComponent):
160
+ component_role: Enum('Solvent', 'Solute')
161
+ mass: float
162
+ volume: float
163
+ density: float
164
+ molar_concentration: MolarConcentration
165
+ ```
166
+
167
+
168
+ `SolutionComponentReference` makes a reference to another `Solution` entry and specifies
169
+ the amount used. Based on this, _solutes_ and _solvents_ of the referenced solution are
170
+ copied over to the first solution. Their mass and volume are adjusted based on the
171
+ amount of the referenced solution used.
172
+ ```py
173
+ class SolutionComponentReference(SystemComponent):
174
+ mass: float
175
+ volume: float
176
+ system: Solution
177
+ ```
178
+
179
+ Both `Solution.solvents` and `Solution.solutes` are a list of `SolutionComponent`. The
180
+ molar concentration of each of them is automatically determined. Additionally, if the
181
+ list has multiple `SolutionComponent` representing the same chemical entity, there are
182
+ combined into one.
183
+
184
+ The _solution_storage_ uses `SolutionStorage` section to describe storage conditions
185
+ , i.e., temperature and atmosphere, along with preparation and expiry dates.
186
+
187
+ ##### `SolutionPreparation`
188
+ Extends [`Process`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#process)
189
+ to describe the recipe for solution preparation. It generates a `Solution` entry based
190
+ on the data added to it.
191
+
192
+
193
+ !!! todo: add description of each module
@@ -0,0 +1,42 @@
1
+ # Levels of schemas in NOMAD
2
+
3
+ It is important to understand the structure and relationship of different types of schemas in NOMAD. Here we break down the levels of schemas and how they interact. For detailed information, please visit the [official NOMAD documentation](https://nomad-lab.eu/prod/v1/staging/docs/explanation/data.html#schema).
4
+
5
+ ## Types of Schemas in NOMAD
6
+
7
+ NOMAD categorizes its schemas into multiple levels, each serving distinct purposes while ensuring consistent data organization and interoperability:
8
+
9
+ 1. **Basic Architecture Sections**: These define the overall structure of any entry within NOMAD, regardless of the particular data type. They provide a shared, high-level framework applicable across different use cases, ensuring that every entry adheres to a consistent format. `EntryData` and `ArchiveSection` are the two relevant classes to be mentioned here.
10
+ Every entry in NOMAD must inherit from `EntryData`, whenever a class is only used as a [subsection](../reference/references.md#subsection) composed within a more general one, inheriting from `ArchiveSection` is enough.
11
+
12
+ 2. **Base Sections**: These are central to NOMAD's data model and are designed to maintain interoperability between different database entries. The base sections follow an entity-activity model tailored for materials science, capturing essential relationships between key entities like samples, instruments, processes, measurements, analyses, experiments, and simulations. The goal is to provide standardized structures for data representation.
13
+
14
+
15
+ !!! Note
16
+ Base sections in NOMAD are abstract and should not be instantiated directly. Instead, users must implement these sections in their own schemas (referred to as user schemas) by inheriting from a base section and `nomad.datamodel.EntryData`. Users are strongly encouraged to use the most specialized section available for their use case.
17
+
18
+
19
+ 3. **Community/Standard Plugins**: FAIRmat offers standardized schemas for common methods, processes, and instruments that are generalized and not tied to any individual lab or setup. These schemas are derived from recurring patterns identified across user schemas. Users can inherit from these standard plugins in a similar manner as the base sections, further specializing them as needed while still maintaining a consistent structure for broader community use.
20
+ FAIRmat's Area A for synthesis data provides two community plugins, NOMAD Measurements and NOMAD Materials Processing.
21
+
22
+ 4. **User Defined Sections**: These schemas are developed by users and are tailored for a method or an instrument, a lab, or a research institute. They build upon the base sections and community plugins, tailoring them to meet specific research needs. In this level, users can define more specialized structures that directly reflect the unique characteristics of their experiments or simulations.
23
+
24
+ ## How These Schemas Relate to Each Other
25
+
26
+ The relationships between these schema levels can be visualized as a layered model:
27
+
28
+ - **Basic Architecture and Base Sections**: At the core, ensuring interoperability and defining the primary structures.
29
+
30
+ - **Community/Standard Plugins**: Inherit and specialize the base sections and provide generalized versions of common user schemas, making them clearly shaped on distinct fields of materials science while still allowing broad applicability across the community.
31
+
32
+ - **User Schemas**: Inherit and specialize community plugins sections, if available, or the base sections according to given requirements.
33
+
34
+ ## Encouraged Usage
35
+
36
+ NOMAD encourages users to first explore the available community/standard plugins and base sections before developing their own schemas. By doing so, they can maximize interoperability and benefit from established structures, while still retaining the flexibility to adapt the schema to their unique needs.
37
+
38
+ The figure below illustrates these schema levels and the recommended workflow for schema development within NOMAD.
39
+
40
+ In next documentation sections, an overview of the available methods will be provided.
41
+
42
+ ![Levels of schema](../assets/levelsschema.png)
@@ -0,0 +1,249 @@
1
+ # NOMAD Material Processing: a Community plugin
2
+
3
+ The NOMAD Material Processing Plugin contains schemas for different synthesis methods.
4
+ An overview of the package structure is shown below.
5
+
6
+ ## Technical description
7
+
8
+ This section introduces some aspects of the Python package built for this plugin. Despite not being crucial for the understanding of the data model, they can help installing or developing it.
9
+
10
+ - It is structured according to the [src layout](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/).
11
+ - It is a [regular Python package](https://docs.python.org/3/reference/import.html#regular-packages), i. e., the structure is defined by the presence of `__init__.py` files.
12
+ - The `__init__.py` files contain one or multiple [entry points](https://nomad-lab.eu/prod/v1/staging/docs/howto/plugins/plugins.html#plugin-entry-points). These are used to load a portion of the code within your NOMAD through a specific section in the `nomad.yaml` file. If this section is not specified, all the entry points are loaded by default.
13
+ - It is pip installable. The `project.toml` file defines what will be installed, the dependencies, further details. The **entry points** included are listed in this file.
14
+
15
+ ```text
16
+ nomad-material-processing/
17
+ ├── docs
18
+ ├── pyproject.toml
19
+ ├── README.md
20
+ ├── src
21
+ │ └── nomad_material_processing
22
+ │ ├── __init__.py
23
+ │ ├── utils.py
24
+ │ ├── general.py
25
+ │ ├── vapor_deposition
26
+ │ │ ├── __init__.py
27
+ │ │ ├── general.py
28
+ │ │ ├── cvd
29
+ │ │ │ ├── __init__.py
30
+ │ │ │ ├── general.py
31
+ │ │ │ └── movpe.py
32
+ │ │ └── pvd
33
+ │ │ ├── __init__.py
34
+ │ │ ├── general.py
35
+ │ │ ├── mbe.py
36
+ │ │ ├── pld.py
37
+ │ │ ├── sputtering.py
38
+ │ │ └── thermal.py
39
+ │ └── solution
40
+ │ ├── __init__.py
41
+ │ ├── general.py
42
+ │ └── utils.py
43
+ └── tests
44
+ ```
45
+
46
+ ## Data model description
47
+
48
+ Each method is separated in a dedicated [module](https://docs.python.org/3/tutorial/modules.html), i. e., a python file.
49
+
50
+ ### General
51
+
52
+ The `nomad_material_processing.general` module contains several general categories of classes:
53
+
54
+ - an abstract process class `SampleDeposition` that is inherited in the specific processes such as MOVPE, MBE, PLD, etc.
55
+ - `Substrate` and `CrystallineSubstrate` entities, the support used in `SampleDeposition` activities.
56
+ - `ThinFilm` entity, usually created during `SampleDeposition` activities.
57
+ - `ThinFilmStack` in case of processes producing multilayer samples. This class also contains a reference to the `Substrate`.
58
+ - `Geometry` and its [subclasses](../reference/references.md#subclass), defining the commonly found macroscopic shapes of a sample. It is a [subsection](../reference/references.md#subsection) composed within the `Substrate`. They include `Parallelepiped`, `SquareCuboid`, `RectangleCuboid`, `TruncatedCone`, `Cylinder`, `CylinderSector`, `IrregularParallelSurfaces`.
59
+ - `Miscut` another [subsection](../reference/references.md#subsection) of `Substrate` to specify the miscut of the orientation of the surface in terms of angular deviation toward crystallographic directions.
60
+ - `CrystalProperties` and `ElectronicProperties`, found as [subsection](../reference/references.md#subsection) of sample entities that need these parameters.
61
+ - simple activities performed on samples: `Etching`, `Annealing`, `Cleaning`. They also include a `Recipe` that can be referenced inside to avoid repetition for routine tasks.
62
+ - `TimeSeries` a general class that shapes every kind of parameters logged along a time window. The quantities referring to the measured parameter are `value` and `time`. `set_value` and `set_time` can also be specified, as they usually differ from the measured ones. Several [subclasses](../reference/references.md#subclass) inheriting from this one can be found nested in the package.
63
+
64
+ ### Vapor Deposition
65
+
66
+ The `nomad_material_processing.vapor_deposition.general` module contains classes describing
67
+ a general vapor deposition process. The master class in this module is `VaporDeposition`, inheriting from `SampleDeposition`.
68
+
69
+ The other classes found here are specifying the [subsections](../reference/references.md#subsection) found in the steps of the `VaporDeposition` process.
70
+ `VaporDepositionStep` contains three [subsections](../reference/references.md#subsection) allowing to describe the parameters usually recorded during an experiment:
71
+
72
+ - `VaporDepositionSource` the metadata on which kind of source will bring the raw material in the reaction chamber.
73
+ This class is in turn composed by three distinct elements, namely the `Component` material to be evaporated, the `EvaporationSource` that is the element that produces the vapor, and `MolarFlowRate` that is a time series recording the molar flux exiting the source. This is used as a list within the `VaporDepositionStep` because many sources can be present at the same time.
74
+ - `SampleParameter` this [subsection](../reference/references.md#subsection) hosts the references to the `ThinFilm` deposited and the `ThinFilmStack` or `Substrate` used as support of the deposition. This [subsection](../reference/references.md#subsection) is also used to record sample-specific parameters in the process, such as temperature, or growth rate. This is a list because many samples can be grown at the same time.
75
+ - `ChamberEnvironment` collects the metadata connected to the whole reaction chamber that cannot be linked to one single sample. It usually contains temperature or `GasFlow` [subsections](../reference/references.md#subsection).
76
+
77
+ These three [subsections](../reference/references.md#subsection) are the backbone of the `VaporDeposition` process and they are usually inherited whenever a specific experiment requires to extend them.
78
+
79
+ ### Chemical Vapor Deposition
80
+
81
+ The `nomad_material_processing.vapor_deposition.cvd.general` module contains specifications of `VaporDepositionSource` and `TimeSeries` commonly adopted in CVD techniques:
82
+
83
+ Sources for CVD are inheriting from `CVDSource`, that is in turn a `VaporDepositionSource`.
84
+
85
+ - `BubblerSource` defines a bubbler commonly used in CVD for liquid precursors.
86
+ - `FlashSource` the vapor is generated by a `FlashEvaporator`.
87
+ - `MistSource` another kind of source adopted in CVD.
88
+ - `GasCylinderSource` a simple cylinder containing some gas phase precursor. In this case the `EvaporationSource` [subclass](../reference/references.md#subclass), called `GasCylinderEvaporator`, is not really evaporating as the precursor is already at the gas state.
89
+ - `GasLineSource` used for gaseous precursors that are provided through a stable installation sourcing gas from facilities external to the lab.
90
+
91
+ `TimeSeries` used in CVD are:
92
+
93
+ - `Rotation` specifies rotation frequency of the substrate holder in the chamber
94
+ - `PartialVaporPressure` as [subclass](../reference/references.md#subclass) of `Pressure`
95
+ - `PushPurgeGasFlow` contains two `VolumetricFlowRate` [subsections](../reference/references.md#subsection) that record the source and drain fluxes of the carries gas in the chamber.
96
+
97
+
98
+ ### Metal-organic Vapor Phase Epitaxy (MOVPE)
99
+
100
+ The `nomad_material_processing.vapor_deposition.cvd.movpe` module contains classes
101
+ dedicated to the Metal-organic Vapor Phase Epitaxy (MOVPE) technique.
102
+
103
+ ### Physical Vapor Deposition (PVD)
104
+ The `nomad_material_processing.vapor_deposition.pvd.general` module contains classes
105
+ describing a general Physical Vapor Deposition (PVD) process. This adopts the three
106
+ general concepts from the vapor deposition above (the chamber, the sources, and the
107
+ substrates) and specializes them for various PVD techniques:
108
+
109
+ #### Pulsed Laser Deposition (PLD)
110
+ The `nomad_material_processing.vapor_deposition.pvd.pld` module adds a specialized laser
111
+ source with its corresponding parameters.
112
+
113
+ #### Sputtering
114
+ The `nomad_material_processing.vapor_deposition.pvd.sputtering` module adds a specialized
115
+ sputtering source with its corresponding parameters.
116
+
117
+ #### Thermal Evaporation
118
+ The `nomad_material_processing.vapor_deposition.pvd.thermal` module adds a specialized
119
+ thermal evaporation source with its corresponding parameters.
120
+
121
+ #### Molecular Beam Epitaxy (MBE)
122
+ The `nomad_material_processing.vapor_deposition.pvd.mbe` module uses the thermal evaporation
123
+ source and also adds a plasma source.
124
+
125
+
126
+ ### nomad_material_processing.solution.general
127
+
128
+ The main entry sections in this module are
129
+ [`Solution`](#nomad_material_processing.solution.general.Solution) and
130
+ [`SolutionPreparation`](#nomad_material_processing.solution.general.SolutionPreparation) which can
131
+ be used to create NOMAD
132
+ [entries](https://nomad-lab.eu/prod/v1/docs/reference/glossary.html#entry).
133
+ There's a long list of other auxiliary sections supporting these entry section which
134
+ can be accessed in the
135
+ [metainfo browser](https://nomad-lab.eu/prod/v1/oasis/gui/analyze/metainfo/nomad_material_processing)
136
+ by searching for: `"nomad_material_processing.solution.general"`
137
+
138
+ #### `nomad_material_processing.solution.general.Solution`
139
+
140
+ Describes liquid solutions by extending the
141
+ [`CompositeSystem`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#system) with quantities: _pH_, _mass_,
142
+ _calculated_volume_, _measured_volume_, _density_, and sub-sections:
143
+ _solvents_, _solutes_, and _solution_storage_.
144
+
145
+ ```py
146
+ class Solution(CompositeSystem, EntryData):
147
+ ph_value: float
148
+ mass: float
149
+ calculated_volume: float
150
+ measured_volume: float
151
+ density: float
152
+ components: list[
153
+ Union(
154
+ SolutionComponent,
155
+ SolutionComponentReference,
156
+ )
157
+ ]
158
+ solutes: list[SolutionComponent]
159
+ solvents: list[SolutionComponent]
160
+ solution_storage: SolutionStorage
161
+ ```
162
+
163
+ !!! info
164
+ The _measured_volume_ field is user-defined. By default, the automation in
165
+ `Solution` uses _calculated_volume_, but if _measured_volume_ is provided, it will take
166
+ precedence. This is useful when the final solution volume differs from the sum of its
167
+ component volumes, and should be specified by the user.
168
+
169
+ The _components_ sub-section, inherited from `CompositeSystem` and re-defined, is used to describe
170
+ a list of components used in the solution. Each of them contributes to the _mass_ and
171
+ _calculated_volume_ of the solution. The component can either nest a
172
+ sub-section describing its composition, or can be another `Solution` entry connected
173
+ via reference.
174
+ These options are are handled by
175
+ `SolutionComponent` and `SolutionComponentReference` sections respectively. Let's take a closer look at each of them.
176
+
177
+ `SolutionComponent` extends `PureSubstanceComponent` with quantities:
178
+ _component_role_, _mass_, _volume_, _density_, and sub-section: _molar_concentration_.
179
+ The _pure_substance_ sub-section inherited from `PureSubstanceComponent` specifies the
180
+ chemical compound. This information along with the mass of the component and
181
+ total volume of the solution is used to automatically determine the molar concentration of
182
+ the component, populating the corresponding sub-section.
183
+ Based on the _component_role_, the components are copied over to either
184
+ `Solution.solvents` or `Solution.solutes`.
185
+
186
+ ```py
187
+ class SolutionComponent(PureSubstanceComponent):
188
+ component_role: Enum('Solvent', 'Solute')
189
+ mass: float
190
+ volume: float
191
+ density: float
192
+ molar_concentration: MolarConcentration
193
+ ```
194
+
195
+ `SolutionComponentReference` makes a reference to another `Solution` entry and specifies
196
+ the amount used. Based on this, _solutes_ and _solvents_ of the referenced solution are
197
+ copied over to the first solution. Their mass and volume are adjusted based on the
198
+ amount of the referenced solution used.
199
+
200
+ ```py
201
+ class SolutionComponentReference(SystemComponent):
202
+ mass: float
203
+ volume: float
204
+ system: Solution
205
+ ```
206
+
207
+ Both `Solution.solvents` and `Solution.solutes` are a list of `SolutionComponent`. The
208
+ molar concentration of each of them is automatically determined. Additionally, if the
209
+ list has multiple `SolutionComponent` representing the same chemical entity, there are
210
+ combined into one.
211
+
212
+ The _solution_storage_ uses `SolutionStorage` section to describe storage conditions
213
+ , i.e., temperature and atmosphere, along with preparation and expiry dates.
214
+
215
+ #### `nomad_material_processing.solution.general.SolutionPreparation`
216
+
217
+ Describes the steps of solution preparation by extending
218
+ [`Process`](https://nomad-lab.eu/prod/v1/docs/howto/customization/base_sections.html#process).
219
+ Based on the steps added, it also creates a `Solution` entry and references it under the
220
+ _solution_ sub-section.
221
+
222
+ ```py
223
+ class SolutionPreparation(Process, EntryData):
224
+ solution_name: str
225
+ solution: SolutionReference
226
+ step: list[SolutionPreparationStep]
227
+ ```
228
+
229
+ The generated `Solution` entry picks its name from _solution_name_, if specified.
230
+ Otherwise, it will be uniquely named as `"unnamed_solution_{i}"`, where `i` will be an
231
+ integer starting from 0. Currently, the following `SolutionPreparationStep` are defined:
232
+
233
+ - `AddSolutionComponent`: Adds a `SolutionComponent` or `SolutionComponentReference` to
234
+ _components_ list of the generated `Solution` entry. It also contains a sub-section
235
+ `measurement` which can be used to specify the methodology used for measuring the
236
+ component like pipetting and scaling.
237
+ ```py
238
+ class AddSolutionComponent(SolutionPreparationStep):
239
+ solution_component: Union(
240
+ SolutionComponent,
241
+ SolutionComponentReference,
242
+ )
243
+ measurement: MeasurementMethodology
244
+ ```
245
+
246
+ - `Agitation`: Specifies the process of agitating the solution. There are more sections
247
+ inheriting this class and describing specific techniques:
248
+ `MechanicalStirring(Agitation)` and `Sonication(Agitation)`.
249
+