nomad-material-processing 0.0.6__tar.gz → 0.0.8__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-0.0.8/.vscode/settings.json +19 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/PKG-INFO +1 -1
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/pyproject.toml +42 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/__init__.py +222 -66
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/__init__.py +544 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +315 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/cvd/nomad_plugin.yaml +3 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/nomad_plugin.yaml +3 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +245 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/nomad_plugin.yaml +3 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/pld.py +181 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +74 -0
- nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +218 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/PKG-INFO +1 -1
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/SOURCES.txt +9 -1
- nomad-material-processing-0.0.6/.vscode/settings.json +0 -8
- nomad-material-processing-0.0.6/src/nomad_material_processing/physical_vapor_deposition.py +0 -700
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/.github/workflows/python-publish.yml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/.gitignore +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/LICENSE +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/README.md +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/nomad.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/setup.cfg +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/setup.py +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/combinatorial.py +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/crystal_growth.py +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/epitaxy.py +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/nomad_plugin.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing/utils.py +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/requires.txt +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_activity_step.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_crystal_growth.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_czochralski_process.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_epitaxy.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_sample_deposition.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_sputter_deposition.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_substrate.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_thin_film.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_thin_film_stack.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
- {nomad-material-processing-0.0.6 → nomad_material_processing-0.0.8}/tests/test_schema.py +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"python.defaultInterpreterPath": ".pyenv/bin/python",
|
|
3
|
+
"python.terminal.activateEnvInCurrentTerminal": true,
|
|
4
|
+
"editor.rulers": [
|
|
5
|
+
90
|
|
6
|
+
],
|
|
7
|
+
"editor.renderWhitespace": "all",
|
|
8
|
+
"editor.tabSize": 4,
|
|
9
|
+
"files.trimTrailingWhitespace": true,
|
|
10
|
+
"files.watcherExclude": {
|
|
11
|
+
"${workspaceFolder}/.pyenv/**": true,
|
|
12
|
+
},
|
|
13
|
+
"python.testing.unittestEnabled": false,
|
|
14
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
15
|
+
"editor.formatOnSave": true,
|
|
16
|
+
"[python]": {
|
|
17
|
+
"editor.defaultFormatter": "charliermarsh.ruff"
|
|
18
|
+
},
|
|
19
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nomad-material-processing
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.8
|
|
4
4
|
Summary: A plugin for NOMAD containing base sections for material processing.
|
|
5
5
|
Author-email: 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
|
|
@@ -38,6 +38,48 @@ file = "LICENSE"
|
|
|
38
38
|
"Homepage" = "https://github.com/FAIRmat-NFDI/nomad-material-processing"
|
|
39
39
|
"Bug Tracker" = "https://github.com/FAIRmat-NFDI/nomad-material-processing/issues"
|
|
40
40
|
|
|
41
|
+
[tool.ruff]
|
|
42
|
+
include = ["src/*.py", "tests/*.py"]
|
|
43
|
+
select = [
|
|
44
|
+
"E", # pycodestyle
|
|
45
|
+
"W", # pycodestyle
|
|
46
|
+
"PL", # pylint
|
|
47
|
+
]
|
|
48
|
+
ignore = [
|
|
49
|
+
"E501", # Line too long ({width} > {limit} characters)
|
|
50
|
+
"E701", # Multiple statements on one line (colon)
|
|
51
|
+
"E731", # Do not assign a lambda expression, use a def
|
|
52
|
+
"E402", # Module level import not at top of file
|
|
53
|
+
"PLR0911", # Too many return statements
|
|
54
|
+
"PLR0912", # Too many branches
|
|
55
|
+
"PLR0913", # Too many arguments in function definition
|
|
56
|
+
"PLR0915", # Too many statements
|
|
57
|
+
"PLR2004", # Magic value used instead of constant
|
|
58
|
+
"PLW0603", # Using the global statement
|
|
59
|
+
"PLW2901", # redefined-loop-name
|
|
60
|
+
"PLR1714", # consider-using-in
|
|
61
|
+
"PLR5501", # else-if-used
|
|
62
|
+
]
|
|
63
|
+
fixable = ["ALL"]
|
|
64
|
+
exclude = ["dependencies"]
|
|
65
|
+
|
|
66
|
+
# Same as Black.
|
|
67
|
+
line-length = 88
|
|
68
|
+
indent-width = 4
|
|
69
|
+
|
|
70
|
+
[tool.ruff.format]
|
|
71
|
+
# use single quotes for strings.
|
|
72
|
+
quote-style = "single"
|
|
73
|
+
|
|
74
|
+
# indent with spaces, rather than tabs.
|
|
75
|
+
indent-style = "space"
|
|
76
|
+
|
|
77
|
+
# Like Black, respect magic trailing commas.
|
|
78
|
+
skip-magic-trailing-comma = false
|
|
79
|
+
|
|
80
|
+
# Like Black, automatically detect the appropriate line ending.
|
|
81
|
+
line-ending = "auto"
|
|
82
|
+
|
|
41
83
|
[tool.setuptools.packages.find]
|
|
42
84
|
where = [
|
|
43
85
|
"src",
|
|
@@ -29,6 +29,8 @@ from nomad.datamodel.metainfo.basesections import (
|
|
|
29
29
|
ElementalComposition,
|
|
30
30
|
SynthesisMethod,
|
|
31
31
|
CompositeSystem,
|
|
32
|
+
CompositeSystemReference,
|
|
33
|
+
SystemComponent,
|
|
32
34
|
)
|
|
33
35
|
from nomad.datamodel.data import (
|
|
34
36
|
ArchiveSection,
|
|
@@ -53,12 +55,12 @@ m_package = Package(name='Material Processing')
|
|
|
53
55
|
|
|
54
56
|
|
|
55
57
|
class Geometry(ArchiveSection):
|
|
56
|
-
|
|
58
|
+
"""
|
|
57
59
|
Geometrical shape attributes of a system.
|
|
58
60
|
Sections derived from `Geometry` represent concrete geometrical shapes.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
)
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
m_def = Section()
|
|
62
64
|
volume = Quantity(
|
|
63
65
|
type=float,
|
|
64
66
|
description='The measure of the amount of space occupied in 3D space.',
|
|
@@ -70,12 +72,12 @@ class Geometry(ArchiveSection):
|
|
|
70
72
|
|
|
71
73
|
|
|
72
74
|
class Parallelepiped(Geometry):
|
|
73
|
-
|
|
74
|
-
Six-faced polyhedron with each pair of opposite faces parallel and equal in size,
|
|
75
|
+
"""
|
|
76
|
+
Six-faced polyhedron with each pair of opposite faces parallel and equal in size,
|
|
75
77
|
characterized by rectangular sides and parallelogram faces.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
)
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
m_def = Section()
|
|
79
81
|
height = Quantity(
|
|
80
82
|
type=float,
|
|
81
83
|
description='The z dimension of the parallelepiped.',
|
|
@@ -104,14 +106,14 @@ class Parallelepiped(Geometry):
|
|
|
104
106
|
defaultDisplayUnit='millimeter',
|
|
105
107
|
label='Length (y)',
|
|
106
108
|
),
|
|
107
|
-
unit='meter'
|
|
109
|
+
unit='meter',
|
|
108
110
|
)
|
|
109
111
|
surface_area = Quantity(
|
|
110
112
|
type=float,
|
|
111
|
-
description=
|
|
113
|
+
description="""
|
|
112
114
|
The product of length and width, representing the total exposed area of the
|
|
113
115
|
primary surface.
|
|
114
|
-
|
|
116
|
+
""",
|
|
115
117
|
a_eln=ELNAnnotation(
|
|
116
118
|
component=ELNComponentEnum.NumberEditQuantity,
|
|
117
119
|
defaultDisplayUnit='millimeter ** 2',
|
|
@@ -122,16 +124,17 @@ class Parallelepiped(Geometry):
|
|
|
122
124
|
|
|
123
125
|
|
|
124
126
|
class Miscut(ArchiveSection):
|
|
125
|
-
|
|
126
|
-
The miscut in a crystalline substrate refers to
|
|
127
|
-
the intentional deviation from a specific crystallographic orientation,
|
|
127
|
+
"""
|
|
128
|
+
The miscut in a crystalline substrate refers to
|
|
129
|
+
the intentional deviation from a specific crystallographic orientation,
|
|
128
130
|
commonly expressed as the angular displacement of a crystal plane.
|
|
129
|
-
|
|
131
|
+
"""
|
|
132
|
+
|
|
130
133
|
angle = Quantity(
|
|
131
134
|
type=float,
|
|
132
|
-
description=
|
|
135
|
+
description="""
|
|
133
136
|
The angular displacement from the crystallographic orientation of the substrate.
|
|
134
|
-
|
|
137
|
+
""",
|
|
135
138
|
a_eln=ELNAnnotation(
|
|
136
139
|
component=ELNComponentEnum.NumberEditQuantity,
|
|
137
140
|
defaultDisplayUnit='deg',
|
|
@@ -155,15 +158,16 @@ class Miscut(ArchiveSection):
|
|
|
155
158
|
a_eln=ELNAnnotation(
|
|
156
159
|
component=ELNComponentEnum.StringEditQuantity,
|
|
157
160
|
label='Miscut Orientation [hkl]',
|
|
158
|
-
)
|
|
161
|
+
),
|
|
159
162
|
)
|
|
160
163
|
|
|
161
164
|
|
|
162
165
|
class Dopant(ElementalComposition):
|
|
163
|
-
|
|
164
|
-
A dopant element in a crystalline structure
|
|
166
|
+
"""
|
|
167
|
+
A dopant element in a crystalline structure
|
|
165
168
|
is a foreign atom intentionally introduced into the crystal lattice.
|
|
166
|
-
|
|
169
|
+
"""
|
|
170
|
+
|
|
167
171
|
doping_level = Quantity(
|
|
168
172
|
type=float,
|
|
169
173
|
description='The chemical doping level.',
|
|
@@ -176,23 +180,24 @@ class Dopant(ElementalComposition):
|
|
|
176
180
|
|
|
177
181
|
|
|
178
182
|
class CrystalProperties(ArchiveSection):
|
|
179
|
-
|
|
183
|
+
"""
|
|
180
184
|
Characteristics arising from the ordered arrangement of atoms in a crystalline structure.
|
|
181
|
-
These properties are defined by factors such as crystal symmetry, lattice parameters,
|
|
185
|
+
These properties are defined by factors such as crystal symmetry, lattice parameters,
|
|
182
186
|
and the specific arrangement of atoms within the crystal lattice.
|
|
183
|
-
|
|
187
|
+
"""
|
|
184
188
|
|
|
185
189
|
|
|
186
190
|
class SubstrateCrystalProperties(CrystalProperties):
|
|
187
|
-
|
|
191
|
+
"""
|
|
188
192
|
Crystallographic parameters such as orientation, miscut, and surface structure.
|
|
189
|
-
|
|
193
|
+
"""
|
|
194
|
+
|
|
190
195
|
orientation = Quantity(
|
|
191
196
|
type=str,
|
|
192
|
-
description=
|
|
193
|
-
Alignment of crystal lattice with respect to a vector normal to the surface
|
|
197
|
+
description="""
|
|
198
|
+
Alignment of crystal lattice with respect to a vector normal to the surface
|
|
194
199
|
specified using Miller indices.
|
|
195
|
-
|
|
200
|
+
""",
|
|
196
201
|
a_eln=ELNAnnotation(
|
|
197
202
|
component=ELNComponentEnum.StringEditQuantity,
|
|
198
203
|
label='Substrate Orientation (hkl)',
|
|
@@ -200,18 +205,19 @@ class SubstrateCrystalProperties(CrystalProperties):
|
|
|
200
205
|
)
|
|
201
206
|
miscut = SubSection(
|
|
202
207
|
section_def=Miscut,
|
|
203
|
-
description=
|
|
208
|
+
description="""
|
|
204
209
|
Section describing any miscut of the substrate with respect to the substrate
|
|
205
210
|
orientation.
|
|
206
|
-
|
|
211
|
+
""",
|
|
207
212
|
)
|
|
208
213
|
|
|
209
214
|
|
|
210
215
|
class Substrate(CompositeSystem):
|
|
211
|
-
|
|
216
|
+
"""
|
|
212
217
|
A thin free standing sheet of material. Not to be confused with the substrate role
|
|
213
218
|
during a deposition, which can be a `Substrate` with `ThinFilm`(s) on it.
|
|
214
|
-
|
|
219
|
+
"""
|
|
220
|
+
|
|
215
221
|
m_def = Section()
|
|
216
222
|
supplier = Quantity(
|
|
217
223
|
type=str,
|
|
@@ -219,7 +225,7 @@ class Substrate(CompositeSystem):
|
|
|
219
225
|
a_eln=ELNAnnotation(
|
|
220
226
|
component=ELNComponentEnum.StringEditQuantity,
|
|
221
227
|
label='Name of Supplier',
|
|
222
|
-
)
|
|
228
|
+
),
|
|
223
229
|
)
|
|
224
230
|
supplier_id = Quantity(
|
|
225
231
|
type=str,
|
|
@@ -239,10 +245,11 @@ class Substrate(CompositeSystem):
|
|
|
239
245
|
|
|
240
246
|
|
|
241
247
|
class CrystallineSubstrate(Substrate):
|
|
242
|
-
|
|
248
|
+
"""
|
|
243
249
|
The substrate defined in this class is composed of periodic arrangement of atoms
|
|
244
250
|
and shows typical features of a crystal structure.
|
|
245
|
-
|
|
251
|
+
"""
|
|
252
|
+
|
|
246
253
|
m_def = Section()
|
|
247
254
|
geometry = SubSection(
|
|
248
255
|
section_def=Geometry,
|
|
@@ -255,16 +262,17 @@ class CrystallineSubstrate(Substrate):
|
|
|
255
262
|
dopants = SubSection(
|
|
256
263
|
section_def=Dopant,
|
|
257
264
|
repeats=True,
|
|
258
|
-
description=
|
|
265
|
+
description="""
|
|
259
266
|
Repeating section containing information on any dopants in the substrate.
|
|
260
|
-
|
|
267
|
+
""",
|
|
261
268
|
)
|
|
262
269
|
|
|
263
270
|
|
|
264
271
|
class ThinFilm(CompositeSystem):
|
|
265
|
-
|
|
272
|
+
"""
|
|
266
273
|
A thin film of material which exists as part of a stack.
|
|
267
|
-
|
|
274
|
+
"""
|
|
275
|
+
|
|
268
276
|
m_def = Section()
|
|
269
277
|
|
|
270
278
|
geometry = SubSection(
|
|
@@ -273,56 +281,139 @@ class ThinFilm(CompositeSystem):
|
|
|
273
281
|
)
|
|
274
282
|
|
|
275
283
|
|
|
276
|
-
class
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
284
|
+
class ThinFilmReference(CompositeSystemReference):
|
|
285
|
+
"""
|
|
286
|
+
Class autogenerated from yaml schema.
|
|
287
|
+
"""
|
|
288
|
+
|
|
289
|
+
lab_id = Quantity(
|
|
290
|
+
type=str,
|
|
291
|
+
a_eln=ELNAnnotation(
|
|
292
|
+
component=ELNComponentEnum.StringEditQuantity,
|
|
293
|
+
label='Thin Film ID',
|
|
294
|
+
),
|
|
295
|
+
)
|
|
296
|
+
reference = Quantity(
|
|
297
|
+
type=ThinFilm,
|
|
298
|
+
a_eln=ELNAnnotation(
|
|
299
|
+
component=ELNComponentEnum.ReferenceEditQuantity,
|
|
300
|
+
label='Thin Film',
|
|
301
|
+
),
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class SubstrateReference(CompositeSystemReference):
|
|
306
|
+
"""
|
|
307
|
+
A section for describing a system component and its role in a composite system.
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
lab_id = Quantity(
|
|
311
|
+
type=str,
|
|
312
|
+
a_eln=ELNAnnotation(
|
|
313
|
+
component=ELNComponentEnum.StringEditQuantity,
|
|
314
|
+
label='Substrate ID',
|
|
315
|
+
),
|
|
316
|
+
)
|
|
317
|
+
reference = Quantity(
|
|
282
318
|
type=Substrate,
|
|
283
|
-
description='''
|
|
284
|
-
The substrate which the thin film layers of the thin film stack are deposited
|
|
285
|
-
on.
|
|
286
|
-
''',
|
|
287
319
|
a_eln=ELNAnnotation(
|
|
288
320
|
component=ELNComponentEnum.ReferenceEditQuantity,
|
|
321
|
+
label='Substrate',
|
|
289
322
|
),
|
|
290
323
|
)
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
class ThinFilmStack(CompositeSystem):
|
|
327
|
+
"""
|
|
328
|
+
A stack of `ThinFilm`(s). Typically deposited on a `Substrate`.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
m_def = Section(
|
|
332
|
+
a_eln=ELNAnnotation(
|
|
333
|
+
hide=[
|
|
334
|
+
'components',
|
|
335
|
+
],
|
|
336
|
+
),
|
|
337
|
+
)
|
|
338
|
+
layers = SubSection(
|
|
339
|
+
description="""
|
|
294
340
|
An ordered list (starting at the substrate) of the thin films making up the
|
|
295
341
|
thin film stacks.
|
|
296
|
-
|
|
342
|
+
""",
|
|
343
|
+
section_def=ThinFilmReference,
|
|
344
|
+
repeats=True,
|
|
345
|
+
)
|
|
346
|
+
substrate = SubSection(
|
|
347
|
+
description="""
|
|
348
|
+
The substrate which the thin film layers of the thin film stack are deposited
|
|
349
|
+
on.
|
|
350
|
+
""",
|
|
351
|
+
section_def=SubstrateReference,
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
|
|
355
|
+
"""
|
|
356
|
+
The normalizer for the `ThinFilmStack` class.
|
|
357
|
+
|
|
358
|
+
Args:
|
|
359
|
+
archive (EntryArchive): The archive containing the section that is being
|
|
360
|
+
normalized.
|
|
361
|
+
logger (BoundLogger): A structlog logger.
|
|
362
|
+
"""
|
|
363
|
+
self.components = []
|
|
364
|
+
if self.layers:
|
|
365
|
+
self.components = [
|
|
366
|
+
SystemComponent(system=layer.reference)
|
|
367
|
+
for layer in self.layers
|
|
368
|
+
if layer.reference
|
|
369
|
+
]
|
|
370
|
+
if self.substrate.reference:
|
|
371
|
+
self.components.append(SystemComponent(system=self.substrate.reference))
|
|
372
|
+
super().normalize(archive, logger)
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
class ThinFilmStackReference(CompositeSystemReference):
|
|
376
|
+
"""
|
|
377
|
+
Class autogenerated from yaml schema.
|
|
378
|
+
"""
|
|
379
|
+
|
|
380
|
+
m_def = Section()
|
|
381
|
+
lab_id = Quantity(
|
|
382
|
+
type=str,
|
|
383
|
+
a_eln=ELNAnnotation(
|
|
384
|
+
component=ELNComponentEnum.StringEditQuantity,
|
|
385
|
+
),
|
|
386
|
+
)
|
|
387
|
+
reference = Quantity(
|
|
388
|
+
type=ThinFilmStack,
|
|
297
389
|
a_eln=ELNAnnotation(
|
|
298
390
|
component=ELNComponentEnum.ReferenceEditQuantity,
|
|
299
391
|
),
|
|
300
|
-
shape=["*"],
|
|
301
392
|
)
|
|
302
393
|
|
|
303
394
|
|
|
304
395
|
class SampleDeposition(SynthesisMethod):
|
|
305
|
-
|
|
396
|
+
"""
|
|
306
397
|
The process of the settling of particles (atoms or molecules) from a solution,
|
|
307
398
|
suspension or vapour onto a pre-existing surface, resulting in the growth of a
|
|
308
399
|
new phase. [database_cross_reference: https://orcid.org/0000-0002-0640-0422]
|
|
309
400
|
|
|
310
401
|
Synonyms:
|
|
311
402
|
- deposition
|
|
312
|
-
|
|
403
|
+
"""
|
|
404
|
+
|
|
313
405
|
m_def = Section(
|
|
314
|
-
links=[
|
|
315
|
-
|
|
316
|
-
],)
|
|
406
|
+
links=['http://purl.obolibrary.org/obo/CHMO_0001310'],
|
|
407
|
+
)
|
|
317
408
|
|
|
318
409
|
def is_serial(self) -> bool:
|
|
319
|
-
|
|
410
|
+
"""
|
|
320
411
|
Method for determining if the steps are serial. Can be overwritten by sub class.
|
|
321
412
|
Default behavior is to return True if all steps start after the previous one.
|
|
322
413
|
|
|
323
414
|
Returns:
|
|
324
415
|
bool: Whether or not the steps are serial.
|
|
325
|
-
|
|
416
|
+
"""
|
|
326
417
|
start_times = []
|
|
327
418
|
durations = []
|
|
328
419
|
for step in self.steps:
|
|
@@ -339,14 +430,14 @@ class SampleDeposition(SynthesisMethod):
|
|
|
339
430
|
return True
|
|
340
431
|
|
|
341
432
|
def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
|
|
342
|
-
|
|
433
|
+
"""
|
|
343
434
|
The normalizer for the `SampleDeposition` class.
|
|
344
435
|
|
|
345
436
|
Args:
|
|
346
437
|
archive (EntryArchive): The archive containing the section that is being
|
|
347
438
|
normalized.
|
|
348
439
|
logger (BoundLogger): A structlog logger.
|
|
349
|
-
|
|
440
|
+
"""
|
|
350
441
|
super().normalize(archive, logger)
|
|
351
442
|
if self.is_serial():
|
|
352
443
|
tasks = []
|
|
@@ -357,8 +448,73 @@ class SampleDeposition(SynthesisMethod):
|
|
|
357
448
|
if previous is not None:
|
|
358
449
|
task.inputs.append(Link(name=previous.name, section=previous))
|
|
359
450
|
tasks.append(task)
|
|
360
|
-
previous=step
|
|
451
|
+
previous = step
|
|
361
452
|
archive.workflow2.tasks = tasks
|
|
362
453
|
|
|
363
454
|
|
|
455
|
+
class TimeSeries(ArchiveSection):
|
|
456
|
+
"""
|
|
457
|
+
A time series of data during a process step.
|
|
458
|
+
This is an abstract class and should not be used directly.
|
|
459
|
+
Instead, it should be derived and the the units of the `value` and `set_value` should
|
|
460
|
+
be specified.
|
|
461
|
+
|
|
462
|
+
For example, a derived class could be `Temperature` with `value` in Kelvin:
|
|
463
|
+
```python
|
|
464
|
+
class Temperature(TimeSeries):
|
|
465
|
+
value = TimeSeries.value.m_copy()
|
|
466
|
+
value.unit = "kelvin"
|
|
467
|
+
set_value = TimeSeries.set_value.m_copy()
|
|
468
|
+
set_value.unit = "kelvin"
|
|
469
|
+
set_value.a_eln.defaultDisplayUnit = "celsius"
|
|
470
|
+
```
|
|
471
|
+
"""
|
|
472
|
+
|
|
473
|
+
m_def = Section(
|
|
474
|
+
a_plot=dict(
|
|
475
|
+
# x=['time', 'set_time'],
|
|
476
|
+
# y=['value', 'set_value'],
|
|
477
|
+
x='time',
|
|
478
|
+
y='value',
|
|
479
|
+
),
|
|
480
|
+
)
|
|
481
|
+
set_value = Quantity(
|
|
482
|
+
type=float,
|
|
483
|
+
description='The set value(s) (i.e. the intended values) set.',
|
|
484
|
+
shape=['*'],
|
|
485
|
+
a_eln=ELNAnnotation(
|
|
486
|
+
component=ELNComponentEnum.NumberEditQuantity,
|
|
487
|
+
label='Set value',
|
|
488
|
+
),
|
|
489
|
+
)
|
|
490
|
+
set_time = Quantity(
|
|
491
|
+
type=float,
|
|
492
|
+
unit='s',
|
|
493
|
+
description="""
|
|
494
|
+
The process time when each of the set values were set.
|
|
495
|
+
If this is empty and only one set value is present, it is assumed that the value
|
|
496
|
+
was set at the start of the process step.
|
|
497
|
+
If two set values are present, it is assumed that a linear ramp between the two
|
|
498
|
+
values was set.
|
|
499
|
+
""",
|
|
500
|
+
shape=['*'],
|
|
501
|
+
a_eln=ELNAnnotation(
|
|
502
|
+
component=ELNComponentEnum.NumberEditQuantity,
|
|
503
|
+
defaultDisplayUnit='s',
|
|
504
|
+
label='Set time',
|
|
505
|
+
),
|
|
506
|
+
)
|
|
507
|
+
value = Quantity(
|
|
508
|
+
type=float,
|
|
509
|
+
description='The observed value as a function of time.',
|
|
510
|
+
shape=['*'],
|
|
511
|
+
)
|
|
512
|
+
time = Quantity(
|
|
513
|
+
type=float,
|
|
514
|
+
unit='s',
|
|
515
|
+
description='The process time when each of the values were recorded.',
|
|
516
|
+
shape=['*'],
|
|
517
|
+
)
|
|
518
|
+
|
|
519
|
+
|
|
364
520
|
m_package.__init_metainfo__()
|