nomad-material-processing 0.0.7__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.
Files changed (50) hide show
  1. nomad_material_processing-0.0.8/.vscode/settings.json +19 -0
  2. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/PKG-INFO +1 -1
  3. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/pyproject.toml +42 -0
  4. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/__init__.py +116 -49
  5. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/__init__.py +544 -0
  6. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/cvd/__init__.py +315 -0
  7. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/cvd/nomad_plugin.yaml +3 -0
  8. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/nomad_plugin.yaml +3 -0
  9. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/__init__.py +245 -0
  10. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/nomad_plugin.yaml +3 -0
  11. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/pld.py +181 -0
  12. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/sputtering.py +74 -0
  13. nomad_material_processing-0.0.8/src/nomad_material_processing/vapor_deposition/pvd/thermal.py +218 -0
  14. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/PKG-INFO +1 -1
  15. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/SOURCES.txt +9 -3
  16. nomad-material-processing-0.0.7/.vscode/settings.json +0 -8
  17. nomad-material-processing-0.0.7/src/nomad_material_processing/chemical_vapor_deposition.py +0 -214
  18. nomad-material-processing-0.0.7/src/nomad_material_processing/physical_vapor_deposition.py +0 -566
  19. nomad-material-processing-0.0.7/src/nomad_material_processing/vapor_deposition.py +0 -435
  20. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/.github/workflows/python-publish.yml +0 -0
  21. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/.gitignore +0 -0
  22. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/LICENSE +0 -0
  23. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/README.md +0 -0
  24. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/nomad.yaml +0 -0
  25. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/setup.cfg +0 -0
  26. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/setup.py +0 -0
  27. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/combinatorial.py +0 -0
  28. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/crystal_growth.py +0 -0
  29. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/epitaxy.py +0 -0
  30. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/nomad_plugin.yaml +0 -0
  31. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing/utils.py +0 -0
  32. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/dependency_links.txt +0 -0
  33. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/requires.txt +0 -0
  34. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/src/nomad_material_processing.egg-info/top_level.txt +0 -0
  35. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_activity_step.archive.yaml +0 -0
  36. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_crystal_growth.archive.yaml +0 -0
  37. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_czochralski_process.archive.yaml +0 -0
  38. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_epitaxy.archive.yaml +0 -0
  39. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_metal_organic_vapor_phase_epitaxy.archive.yaml +0 -0
  40. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_molecular_beam_epitaxy.archive.yaml +0 -0
  41. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_physical_vapor_deposition.archive.yaml +0 -0
  42. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_pulsed_laser_deposition.archive.yaml +0 -0
  43. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_sample_deposition.archive.yaml +0 -0
  44. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_sputter_deposition.archive.yaml +0 -0
  45. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_substrate.archive.yaml +0 -0
  46. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_thermal_evaporation.archive.yaml +0 -0
  47. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_thin_film.archive.yaml +0 -0
  48. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_thin_film_stack.archive.yaml +0 -0
  49. {nomad-material-processing-0.0.7 → nomad_material_processing-0.0.8}/tests/data/test_vapor_phase_epitaxy.archive.yaml +0 -0
  50. {nomad-material-processing-0.0.7 → 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.7
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",
@@ -51,7 +51,7 @@ if TYPE_CHECKING:
51
51
  BoundLogger,
52
52
  )
53
53
 
54
- m_package = Package(name="Material Processing")
54
+ m_package = Package(name='Material Processing')
55
55
 
56
56
 
57
57
  class Geometry(ArchiveSection):
@@ -63,11 +63,11 @@ class Geometry(ArchiveSection):
63
63
  m_def = Section()
64
64
  volume = Quantity(
65
65
  type=float,
66
- description="The measure of the amount of space occupied in 3D space.",
66
+ description='The measure of the amount of space occupied in 3D space.',
67
67
  a_eln=ELNAnnotation(
68
68
  component=ELNComponentEnum.NumberEditQuantity,
69
69
  ),
70
- unit="meter ** 3",
70
+ unit='meter ** 3',
71
71
  )
72
72
 
73
73
 
@@ -80,33 +80,33 @@ class Parallelepiped(Geometry):
80
80
  m_def = Section()
81
81
  height = Quantity(
82
82
  type=float,
83
- description="The z dimension of the parallelepiped.",
83
+ description='The z dimension of the parallelepiped.',
84
84
  a_eln=ELNAnnotation(
85
85
  component=ELNComponentEnum.NumberEditQuantity,
86
- defaultDisplayUnit="millimeter",
87
- label="Height (z)",
86
+ defaultDisplayUnit='millimeter',
87
+ label='Height (z)',
88
88
  ),
89
- unit="meter",
89
+ unit='meter',
90
90
  )
91
91
  width = Quantity(
92
92
  type=float,
93
- description="The x dimension of the parallelepiped.",
93
+ description='The x dimension of the parallelepiped.',
94
94
  a_eln=ELNAnnotation(
95
95
  component=ELNComponentEnum.NumberEditQuantity,
96
- defaultDisplayUnit="millimeter",
97
- label="Width (x)",
96
+ defaultDisplayUnit='millimeter',
97
+ label='Width (x)',
98
98
  ),
99
- unit="meter",
99
+ unit='meter',
100
100
  )
101
101
  length = Quantity(
102
102
  type=float,
103
- description="The y dimension of the parallelepiped.",
103
+ description='The y dimension of the parallelepiped.',
104
104
  a_eln=ELNAnnotation(
105
105
  component=ELNComponentEnum.NumberEditQuantity,
106
- defaultDisplayUnit="millimeter",
107
- label="Length (y)",
106
+ defaultDisplayUnit='millimeter',
107
+ label='Length (y)',
108
108
  ),
109
- unit="meter",
109
+ unit='meter',
110
110
  )
111
111
  surface_area = Quantity(
112
112
  type=float,
@@ -116,10 +116,10 @@ class Parallelepiped(Geometry):
116
116
  """,
117
117
  a_eln=ELNAnnotation(
118
118
  component=ELNComponentEnum.NumberEditQuantity,
119
- defaultDisplayUnit="millimeter ** 2",
120
- label="Surface Area (x*y)",
119
+ defaultDisplayUnit='millimeter ** 2',
120
+ label='Surface Area (x*y)',
121
121
  ),
122
- unit="meter ** 2",
122
+ unit='meter ** 2',
123
123
  )
124
124
 
125
125
 
@@ -137,27 +137,27 @@ class Miscut(ArchiveSection):
137
137
  """,
138
138
  a_eln=ELNAnnotation(
139
139
  component=ELNComponentEnum.NumberEditQuantity,
140
- defaultDisplayUnit="deg",
141
- label="Miscut Angle",
140
+ defaultDisplayUnit='deg',
141
+ label='Miscut Angle',
142
142
  ),
143
- unit="deg",
143
+ unit='deg',
144
144
  )
145
145
  angle_deviation = Quantity(
146
146
  type=float,
147
- description="The ± uncertainty in the angular displacement.",
147
+ description='The ± uncertainty in the angular displacement.',
148
148
  a_eln=ELNAnnotation(
149
149
  component=ELNComponentEnum.NumberEditQuantity,
150
- defaultDisplayUnit="deg",
151
- label="± Miscut Angle Deviation",
150
+ defaultDisplayUnit='deg',
151
+ label='± Miscut Angle Deviation',
152
152
  ),
153
- unit="deg",
153
+ unit='deg',
154
154
  )
155
155
  orientation = Quantity(
156
156
  type=str,
157
- description="The direction of the miscut in Miller index, [hkl].",
157
+ description='The direction of the miscut in Miller index, [hkl].',
158
158
  a_eln=ELNAnnotation(
159
159
  component=ELNComponentEnum.StringEditQuantity,
160
- label="Miscut Orientation [hkl]",
160
+ label='Miscut Orientation [hkl]',
161
161
  ),
162
162
  )
163
163
 
@@ -170,12 +170,12 @@ class Dopant(ElementalComposition):
170
170
 
171
171
  doping_level = Quantity(
172
172
  type=float,
173
- description="The chemical doping level.",
173
+ description='The chemical doping level.',
174
174
  a_eln=ELNAnnotation(
175
175
  component=ELNComponentEnum.NumberEditQuantity,
176
- defaultDisplayUnit="1 / cm ** 3",
176
+ defaultDisplayUnit='1 / cm ** 3',
177
177
  ),
178
- unit="1 / m ** 3",
178
+ unit='1 / m ** 3',
179
179
  )
180
180
 
181
181
 
@@ -200,7 +200,7 @@ class SubstrateCrystalProperties(CrystalProperties):
200
200
  """,
201
201
  a_eln=ELNAnnotation(
202
202
  component=ELNComponentEnum.StringEditQuantity,
203
- label="Substrate Orientation (hkl)",
203
+ label='Substrate Orientation (hkl)',
204
204
  ),
205
205
  )
206
206
  miscut = SubSection(
@@ -221,25 +221,25 @@ class Substrate(CompositeSystem):
221
221
  m_def = Section()
222
222
  supplier = Quantity(
223
223
  type=str,
224
- description="The supplier of the current substrate specimen.",
224
+ description='The supplier of the current substrate specimen.',
225
225
  a_eln=ELNAnnotation(
226
226
  component=ELNComponentEnum.StringEditQuantity,
227
- label="Name of Supplier",
227
+ label='Name of Supplier',
228
228
  ),
229
229
  )
230
230
  supplier_id = Quantity(
231
231
  type=str,
232
- description="An ID string that is unique from the supplier.",
232
+ description='An ID string that is unique from the supplier.',
233
233
  a_eln=ELNAnnotation(
234
234
  component=ELNComponentEnum.StringEditQuantity,
235
- label="Supplier ID",
235
+ label='Supplier ID',
236
236
  ),
237
237
  )
238
238
  lab_id = Quantity(
239
239
  type=str,
240
240
  a_eln=ELNAnnotation(
241
241
  component=ELNComponentEnum.StringEditQuantity,
242
- label="Substrate ID",
242
+ label='Substrate ID',
243
243
  ),
244
244
  )
245
245
 
@@ -253,11 +253,11 @@ class CrystallineSubstrate(Substrate):
253
253
  m_def = Section()
254
254
  geometry = SubSection(
255
255
  section_def=Geometry,
256
- description="Section containing the geometry of the substrate.",
256
+ description='Section containing the geometry of the substrate.',
257
257
  )
258
258
  crystal_properties = SubSection(
259
259
  section_def=SubstrateCrystalProperties,
260
- description="Section containing the crystal properties of the substrate.",
260
+ description='Section containing the crystal properties of the substrate.',
261
261
  )
262
262
  dopants = SubSection(
263
263
  section_def=Dopant,
@@ -277,7 +277,7 @@ class ThinFilm(CompositeSystem):
277
277
 
278
278
  geometry = SubSection(
279
279
  section_def=Geometry,
280
- description="Section containing the geometry of the thin film.",
280
+ description='Section containing the geometry of the thin film.',
281
281
  )
282
282
 
283
283
 
@@ -290,14 +290,14 @@ class ThinFilmReference(CompositeSystemReference):
290
290
  type=str,
291
291
  a_eln=ELNAnnotation(
292
292
  component=ELNComponentEnum.StringEditQuantity,
293
- label="Thin Film ID",
293
+ label='Thin Film ID',
294
294
  ),
295
295
  )
296
296
  reference = Quantity(
297
297
  type=ThinFilm,
298
298
  a_eln=ELNAnnotation(
299
299
  component=ELNComponentEnum.ReferenceEditQuantity,
300
- label="Thin Film",
300
+ label='Thin Film',
301
301
  ),
302
302
  )
303
303
 
@@ -311,14 +311,14 @@ class SubstrateReference(CompositeSystemReference):
311
311
  type=str,
312
312
  a_eln=ELNAnnotation(
313
313
  component=ELNComponentEnum.StringEditQuantity,
314
- label="Substrate ID",
314
+ label='Substrate ID',
315
315
  ),
316
316
  )
317
317
  reference = Quantity(
318
318
  type=Substrate,
319
319
  a_eln=ELNAnnotation(
320
320
  component=ELNComponentEnum.ReferenceEditQuantity,
321
- label="Substrate",
321
+ label='Substrate',
322
322
  ),
323
323
  )
324
324
 
@@ -331,7 +331,7 @@ class ThinFilmStack(CompositeSystem):
331
331
  m_def = Section(
332
332
  a_eln=ELNAnnotation(
333
333
  hide=[
334
- "components",
334
+ 'components',
335
335
  ],
336
336
  ),
337
337
  )
@@ -351,7 +351,7 @@ class ThinFilmStack(CompositeSystem):
351
351
  section_def=SubstrateReference,
352
352
  )
353
353
 
354
- def normalize(self, archive: "EntryArchive", logger: "BoundLogger") -> None:
354
+ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
355
355
  """
356
356
  The normalizer for the `ThinFilmStack` class.
357
357
 
@@ -363,7 +363,9 @@ class ThinFilmStack(CompositeSystem):
363
363
  self.components = []
364
364
  if self.layers:
365
365
  self.components = [
366
- SystemComponent(system=layer.reference) for layer in self.layers if layer.reference
366
+ SystemComponent(system=layer.reference)
367
+ for layer in self.layers
368
+ if layer.reference
367
369
  ]
368
370
  if self.substrate.reference:
369
371
  self.components.append(SystemComponent(system=self.substrate.reference))
@@ -401,7 +403,7 @@ class SampleDeposition(SynthesisMethod):
401
403
  """
402
404
 
403
405
  m_def = Section(
404
- links=["http://purl.obolibrary.org/obo/CHMO_0001310"],
406
+ links=['http://purl.obolibrary.org/obo/CHMO_0001310'],
405
407
  )
406
408
 
407
409
  def is_serial(self) -> bool:
@@ -418,7 +420,7 @@ class SampleDeposition(SynthesisMethod):
418
420
  if step.start_time is None or step.duration is None:
419
421
  return False
420
422
  start_times.append(step.start_time.timestamp())
421
- durations.append(step.duration.to("s").magnitude)
423
+ durations.append(step.duration.to('s').magnitude)
422
424
  start_times = np.array(start_times)
423
425
  durations = np.array(durations)
424
426
  end_times = start_times + durations
@@ -427,7 +429,7 @@ class SampleDeposition(SynthesisMethod):
427
429
  return False
428
430
  return True
429
431
 
430
- def normalize(self, archive: "EntryArchive", logger: "BoundLogger") -> None:
432
+ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
431
433
  """
432
434
  The normalizer for the `SampleDeposition` class.
433
435
 
@@ -450,4 +452,69 @@ class SampleDeposition(SynthesisMethod):
450
452
  archive.workflow2.tasks = tasks
451
453
 
452
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
+
453
520
  m_package.__init_metainfo__()