NOMAD Material Processing: a Community plugin¶
The NOMAD Material Processing Plugin contains schemas for different synthesis methods. An overview of the package structure is shown below.
Technical description¶
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.
- It is structured according to the src layout.
- It is a regular Python package, i. e., the structure is defined by the presence of
__init__.py
files. - The
__init__.py
files contain one or multiple entry points. These are used to load a portion of the code within your NOMAD through a specific section in thenomad.yaml
file. If this section is not specified, all the entry points are loaded by default. - 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.
nomad-material-processing/
├── docs
├── pyproject.toml
├── README.md
├── src
│ └── nomad_material_processing
│ ├── __init__.py
│ ├── utils.py
│ ├── general.py
│ ├── vapor_deposition
│ │ ├── __init__.py
│ │ ├── general.py
│ │ ├── cvd
│ │ │ ├── __init__.py
│ │ │ ├── general.py
│ │ │ └── movpe.py
│ │ └── pvd
│ │ ├── __init__.py
│ │ ├── general.py
│ │ ├── mbe.py
│ │ ├── pld.py
│ │ ├── sputtering.py
│ │ └── thermal.py
│ └── solution
│ ├── __init__.py
│ ├── general.py
│ └── utils.py
└── tests
Data model description¶
Each method is separated in a dedicated module, i. e., a python file.
General¶
The nomad_material_processing.general
module contains several general categories of classes:
- an abstract process class
SampleDeposition
that is inherited in the specific processes such as MOVPE, MBE, PLD, etc. Substrate
andCrystallineSubstrate
entities, the support used inSampleDeposition
activities.ThinFilm
entity, usually created duringSampleDeposition
activities.ThinFilmStack
in case of processes producing multilayer samples. This class also contains a reference to theSubstrate
.Geometry
and its subclasses, defining the commonly found macroscopic shapes of a sample. It is a subsection composed within theSubstrate
. They includeParallelepiped
,SquareCuboid
,RectangleCuboid
,TruncatedCone
,Cylinder
,CylinderSector
,IrregularParallelSurfaces
.Miscut
another subsection ofSubstrate
to specify the miscut of the orientation of the surface in terms of angular deviation toward crystallographic directions.CrystalProperties
andElectronicProperties
, found as subsection of sample entities that need these parameters.- simple activities performed on samples:
Etching
,Annealing
,Cleaning
. They also include aRecipe
that can be referenced inside to avoid repetition for routine tasks. TimeSeries
a general class that shapes every kind of parameters logged along a time window. The quantities referring to the measured parameter arevalue
andtime
.set_value
andset_time
can also be specified, as they usually differ from the measured ones. Several subclasses inheriting from this one can be found nested in the package.
Vapor Deposition¶
The nomad_material_processing.vapor_deposition.general
module contains classes describing
a general vapor deposition process. The master class in this module is VaporDeposition
, inheriting from SampleDeposition
.
The other classes found here are specifying the subsections found in the steps of the VaporDeposition
process.
VaporDepositionStep
contains three subsections allowing to describe the parameters usually recorded during an experiment:
VaporDepositionSource
the metadata on which kind of source will bring the raw material in the reaction chamber. This class is in turn composed by three distinct elements, namely theComponent
material to be evaporated, theEvaporationSource
that is the element that produces the vapor, andMolarFlowRate
that is a time series recording the molar flux exiting the source. This is used as a list within theVaporDepositionStep
because many sources can be present at the same time.SampleParameter
this subsection hosts the references to theThinFilm
deposited and theThinFilmStack
orSubstrate
used as support of the deposition. This 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.ChamberEnvironment
collects the metadata connected to the whole reaction chamber that cannot be linked to one single sample. It usually contains temperature orGasFlow
subsections.
These three subsections are the backbone of the VaporDeposition
process and they are usually inherited whenever a specific experiment requires to extend them.
Chemical Vapor Deposition¶
The nomad_material_processing.vapor_deposition.cvd.general
module contains specifications of VaporDepositionSource
and TimeSeries
commonly adopted in CVD techniques:
Sources for CVD are inheriting from CVDSource
, that is in turn a VaporDepositionSource
.
BubblerSource
defines a bubbler commonly used in CVD for liquid precursors.FlashSource
the vapor is generated by aFlashEvaporator
.MistSource
another kind of source adopted in CVD.GasCylinderSource
a simple cylinder containing some gas phase precursor. In this case theEvaporationSource
subclass, calledGasCylinderEvaporator
, is not really evaporating as the precursor is already at the gas state.GasLineSource
used for gaseous precursors that are provided through a stable installation sourcing gas from facilities external to the lab.
TimeSeries
used in CVD are:
Rotation
specifies rotation frequency of the substrate holder in the chamberPartialVaporPressure
as subclass ofPressure
PushPurgeGasFlow
contains twoVolumetricFlowRate
subsections that record the source and drain fluxes of the carries gas in the chamber.
Metal-organic Vapor Phase Epitaxy (MOVPE)¶
The nomad_material_processing.vapor_deposition.cvd.movpe
module contains classes
dedicated to the Metal-organic Vapor Phase Epitaxy (MOVPE) technique.
Physical Vapor Deposition (PVD)¶
The nomad_material_processing.vapor_deposition.pvd.general
module contains classes
describing a general Physical Vapor Deposition (PVD) process. This adopts the three
general concepts from the vapor deposition above (the chamber, the sources, and the
substrates) and specializes them for various PVD techniques:
Pulsed Laser Deposition (PLD)¶
The nomad_material_processing.vapor_deposition.pvd.pld
module adds a specialized laser
source with its corresponding parameters.
Sputtering¶
The nomad_material_processing.vapor_deposition.pvd.sputtering
module adds a specialized
sputtering source with its corresponding parameters.
Thermal Evaporation¶
The nomad_material_processing.vapor_deposition.pvd.thermal
module adds a specialized
thermal evaporation source with its corresponding parameters.
Molecular Beam Epitaxy (MBE)¶
The nomad_material_processing.vapor_deposition.pvd.mbe
module uses the thermal evaporation
source and also adds a plasma source.
nomad_material_processing.solution.general¶
The main entry sections in this module are
Solution
and
SolutionPreparation
which can
be used to create NOMAD
entries.
There's a long list of other auxiliary sections supporting these entry section which
can be accessed in the
metainfo browser
by searching for: "nomad_material_processing.solution.general"
nomad_material_processing.solution.general.Solution
¶
Describes liquid solutions by extending the
CompositeSystem
with quantities: pH, mass,
calculated_volume, measured_volume, density, and sub-sections:
solvents, solutes, and solution_storage.
class Solution(CompositeSystem, EntryData):
ph_value: float
mass: float
calculated_volume: float
measured_volume: float
density: float
components: list[
Union(
SolutionComponent,
SolutionComponentReference,
)
]
solutes: list[SolutionComponent]
solvents: list[SolutionComponent]
solution_storage: SolutionStorage
Info
The measured_volume field is user-defined. By default, the automation in
Solution
uses calculated_volume, but if measured_volume is provided, it will take
precedence. This is useful when the final solution volume differs from the sum of its
component volumes, and should be specified by the user.
The components sub-section, inherited from CompositeSystem
and re-defined, is used to describe
a list of components used in the solution. Each of them contributes to the mass and
calculated_volume of the solution. The component can either nest a
sub-section describing its composition, or can be another Solution
entry connected
via reference.
These options are are handled by
SolutionComponent
and SolutionComponentReference
sections respectively. Let's take a closer look at each of them.
SolutionComponent
extends PureSubstanceComponent
with quantities:
component_role, mass, volume, density, and sub-section: molar_concentration.
The pure_substance sub-section inherited from PureSubstanceComponent
specifies the
chemical compound. This information along with the mass of the component and
total volume of the solution is used to automatically determine the molar concentration of
the component, populating the corresponding sub-section.
Based on the component_role, the components are copied over to either
Solution.solvents
or Solution.solutes
.
class SolutionComponent(PureSubstanceComponent):
component_role: Enum('Solvent', 'Solute')
mass: float
volume: float
density: float
molar_concentration: MolarConcentration
SolutionComponentReference
makes a reference to another Solution
entry and specifies
the amount used. Based on this, solutes and solvents of the referenced solution are
copied over to the first solution. Their mass and volume are adjusted based on the
amount of the referenced solution used.
Both Solution.solvents
and Solution.solutes
are a list of SolutionComponent
. The
molar concentration of each of them is automatically determined. Additionally, if the
list has multiple SolutionComponent
representing the same chemical entity, there are
combined into one.
The solution_storage uses SolutionStorage
section to describe storage conditions
, i.e., temperature and atmosphere, along with preparation and expiry dates.
nomad_material_processing.solution.general.SolutionPreparation
¶
Describes the steps of solution preparation by extending
Process
.
Based on the steps added, it also creates a Solution
entry and references it under the
solution sub-section.
class SolutionPreparation(Process, EntryData):
solution_name: str
solution: SolutionReference
step: list[SolutionPreparationStep]
The generated Solution
entry picks its name from solution_name, if specified.
Otherwise, it will be uniquely named as "unnamed_solution_{i}"
, where i
will be an
integer starting from 0. Currently, the following SolutionPreparationStep
are defined:
-
AddSolutionComponent
: Adds aSolutionComponent
orSolutionComponentReference
to components list of the generatedSolution
entry. It also contains a sub-sectionmeasurement
which can be used to specify the methodology used for measuring the component like pipetting and scaling. -
Agitation
: Specifies the process of agitating the solution. There are more sections inheriting this class and describing specific techniques:MechanicalStirring(Agitation)
andSonication(Agitation)
.