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__.pyfiles. - The
__init__.pyfiles 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.yamlfile. If this section is not specified, all the entry points are loaded by default. - It is pip installable. The
project.tomlfile 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
SampleDepositionthat is inherited in the specific processes such as MOVPE, MBE, PLD, etc. SubstrateandCrystallineSubstrateentities, the support used inSampleDepositionactivities.ThinFilmentity, usually created duringSampleDepositionactivities.ThinFilmStackin case of processes producing multilayer samples. This class also contains a reference to theSubstrate.Geometryand 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.Miscutanother subsection ofSubstrateto specify the miscut of the orientation of the surface in terms of angular deviation toward crystallographic directions.CrystalPropertiesandElectronicProperties, found as subsection of sample entities that need these parameters.- simple activities performed on samples:
Etching,Annealing,Cleaning. They also include aRecipethat can be referenced inside to avoid repetition for routine tasks. TimeSeriesa general class that shapes every kind of parameters logged along a time window. The quantities referring to the measured parameter arevalueandtime.set_valueandset_timecan 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:
VaporDepositionSourcethe 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 theComponentmaterial to be evaporated, theEvaporationSourcethat is the element that produces the vapor, andMolarFlowRatethat is a time series recording the molar flux exiting the source. This is used as a list within theVaporDepositionStepbecause many sources can be present at the same time.SampleParameterthis subsection hosts the references to theThinFilmdeposited and theThinFilmStackorSubstrateused 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.ChamberEnvironmentcollects the metadata connected to the whole reaction chamber that cannot be linked to one single sample. It usually contains temperature orGasFlowsubsections.
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.
BubblerSourcedefines a bubbler commonly used in CVD for liquid precursors.FlashSourcethe vapor is generated by aFlashEvaporator.MistSourceanother kind of source adopted in CVD.GasCylinderSourcea simple cylinder containing some gas phase precursor. In this case theEvaporationSourcesubclass, calledGasCylinderEvaporator, is not really evaporating as the precursor is already at the gas state.GasLineSourceused for gaseous precursors that are provided through a stable installation sourcing gas from facilities external to the lab.
TimeSeries used in CVD are:
Rotationspecifies rotation frequency of the substrate holder in the chamberPartialVaporPressureas subclass ofPressurePushPurgeGasFlowcontains twoVolumetricFlowRatesubsections 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.
Solutions¶
nomad_material_processing.solution.general provides
Solution and
SolutionPreparation
entry sections which can be used to create NOMAD
entries.
It also contains other auxiliary sections supporting these entry section which
can be accessed in the
metainfo browser
by searching for: "nomad_material_processing.solution.general"
Solution¶
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, amount_of_substance (in moles),
and sub-section: molar_concentration.
The pure_substance sub-section inherited from PureSubstanceComponent specifies the
chemical compound. This information along with the amount 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.
If not provided, amount_of_substance can be determined from mass and pure_substance.molecular_mass. On other hand, if amount_of_substance is available, but mass is missing, it can be determined using amount_of_substance and pure_substance.molecular_mass. mass can also be determined if volume and density are available.
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
amount_of_substance: 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.
SolutionPreparation¶
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 aSolutionComponentorSolutionComponentReferenceto components list of the generatedSolutionentry. It also contains a sub-sectionmeasurementwhich 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).