Skip to content

Commit

Permalink
create substrate and characterization modules in IKZ_plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
aalbino2 committed Feb 22, 2024
1 parent cb53a49 commit d00f331
Show file tree
Hide file tree
Showing 8 changed files with 809 additions and 39 deletions.
151 changes: 146 additions & 5 deletions IKZ_plugin/src/basesections/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,85 @@
import json

from nomad.metainfo import (
Package, Quantity, SubSection, Section, Category)

from nomad.datamodel.data import EntryData, EntryDataCategory
#from nomad.datamodel.metainfo.workflow import Link
from nomad.datamodel.metainfo.eln import Entity, Activity, SampleID
from nomad.datamodel.util import parse_path
import numpy as np
import plotly.express as px
from plotly.subplots import make_subplots
from ase.data import chemical_symbols
from nomad.datamodel.metainfo.basesections import (
ElementalComposition,
Activity,
PureSubstance,
ProcessStep,
CompositeSystem,
Measurement,
MeasurementResult,
Process,
PureSubstanceComponent,
PureSubstanceSection,
EntityReference,
CompositeSystemReference,
PubChemPureSubstanceSection,
SectionReference,
Experiment,
)
from nomad.datamodel.metainfo.annotations import (
ELNAnnotation,
SectionProperties,
)
from nomad.parsing.tabular import TableData
from structlog.stdlib import (
BoundLogger,
)
from nomad.datamodel.metainfo.annotations import (
ELNAnnotation,
ELNComponentEnum,
)
from nomad.metainfo import Package, Quantity, SubSection, MEnum, Datetime, Section, Category
from nomad.datamodel.data import EntryData, ArchiveSection, Author
from nomad.search import search, MetadataPagination

from nomad.datamodel.metainfo.plot import PlotSection, PlotlyFigure

from laytec_epitt import LayTecEpiTTMeasurement
from hall import HallMeasurement
from basesections import IKZMOVPECategory, IKZMOVPE1Category, IKZMOVPE2Category
from nomad_material_processing import (
SubstrateReference,
CrystallineSubstrate,
Miscut,
SubstrateCrystalProperties,
Dopant,
Geometry,
ThinFilm,
ThinFilmStack,
ThinFilmStackReference,
)
from nomad_material_processing.vapor_deposition import (
VaporDeposition,
VaporDepositionSource,
VaporDepositionStep,
SampleParameters,
SubstrateTemperature,
ChamberEnvironment,
GasFlow,
Pressure,
SubstrateHeater,
)

from nomad.datamodel.metainfo.workflow import (
Link,
Task,
)
from nomad_material_processing.chemical_vapor_deposition import (
CVDBubbler,
CVDVaporRate,
CVDSource,
)

from nomad_measurements import (
ActivityReference,
)

m_package = Package(name='basesections_IKZ')

Expand Down Expand Up @@ -34,6 +107,74 @@ class IKZHallCategory(EntryDataCategory):
m_def = Category(label='Hall', categories=[EntryDataCategory, IKZCategory])


class Etching(Process, EntryData):
"""
Class autogenerated from yaml schema.
"""

m_def = Section(
a_eln=None,
categories=[IKZCategory],
)
method = Quantity(
type=str,
default="Etching (MOVPE IKZ)",
)
datetime = Quantity(
type=Datetime,
description="FILL",
a_eln={"component": "DateTimeEditQuantity", "label": "deposition_date"},
)
temperature = Quantity(
type=np.float64,
description="FILL THE DESCRIPTION",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "celsius"},
unit="celsius",
)
elapsed_time = Quantity(
type=np.float64,
description="Past time since process started (minutes)",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "minute"},
unit="minute",
)
etching_reagents = SubSection(section_def=CompositeSystem, repeats=True)


class Annealing(Process, EntryData):
"""
Class autogenerated from yaml schema.
"""

m_def = Section(
a_eln=None,
categories=[IKZCategory],
)
method = Quantity(
type=str,
default="Annealing (MOVPE IKZ)",
)
datetime = Quantity(
type=Datetime,
description="FILL",
a_eln={"component": "DateTimeEditQuantity", "label": "deposition_date"},
)
temperature = Quantity(
type=np.float64,
description="FILL THE DESCRIPTION",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "celsius"},
unit="celsius",
)
elapsed_time = Quantity(
type=np.float64,
description="Past time since process started (minutes)",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "minute"},
unit="minute",
)
anealing_reagents = SubSection(
section_def=CompositeSystemReference,
)


# class CollectionOfSystems(Entity, EntryData):
# '''
# A base class for a batch of materials. Each component of the batch is
Expand Down
18 changes: 18 additions & 0 deletions IKZ_plugin/src/characterization/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright The NOMAD Authors.
#
# This file is part of NOMAD. See https://nomad-lab.eu for further info.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

from .schema import *
5 changes: 5 additions & 0 deletions IKZ_plugin/src/characterization/nomad_plugin.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
plugin_type: schema
name: NOMAD's example schema plugin
description: |
This is a simple hello world schema. This is meant as a template.
Fork the github project to create your own schemas.
183 changes: 183 additions & 0 deletions IKZ_plugin/src/characterization/schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
import numpy as np
import plotly.express as px
from plotly.subplots import make_subplots
from ase.data import chemical_symbols
from nomad.datamodel.metainfo.basesections import (
ElementalComposition,
Activity,
PureSubstance,
ProcessStep,
CompositeSystem,
Measurement,
MeasurementResult,
Process,
PureSubstanceComponent,
PureSubstanceSection,
EntityReference,
CompositeSystemReference,
PubChemPureSubstanceSection,
SectionReference,
Experiment,
)
from nomad.datamodel.metainfo.annotations import (
ELNAnnotation,
SectionProperties,
)
from nomad.parsing.tabular import TableData
from structlog.stdlib import (
BoundLogger,
)
from nomad.datamodel.metainfo.annotations import (
ELNAnnotation,
ELNComponentEnum,
)
from nomad.metainfo import Package, Quantity, SubSection, MEnum, Datetime, Section
from nomad.datamodel.data import EntryData, ArchiveSection, Author
from nomad.search import search, MetadataPagination

from nomad.datamodel.metainfo.plot import PlotSection, PlotlyFigure

from laytec_epitt import LayTecEpiTTMeasurement
from hall import HallMeasurement
from basesections import IKZCategory
from nomad_material_processing import (
SubstrateReference,
CrystallineSubstrate,
Miscut,
SubstrateCrystalProperties,
Dopant,
Geometry,
Parallelepiped,
ThinFilm,
ThinFilmStack,
ThinFilmStackReference,
)

from nomad.datamodel.metainfo.workflow import (
Link,
Task,
)
from nomad_material_processing.chemical_vapor_deposition import (
CVDBubbler,
CVDVaporRate,
CVDSource,
)

from nomad_measurements import (
ActivityReference,
)

m_package = Package(name="characterization_IKZ")


class AFMresults(MeasurementResult):
"""
The results of an AFM measurement
"""

roughness = Quantity(
type=np.float64,
description="RMS roughness value obtained by AFM",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "picometer"},
unit="picometer",
)
surface_features = Quantity(
type=MEnum(["Step Flow", "Step Bunching", "2D Island"]),
a_eln={"component": "EnumEditQuantity"},
)
scale = Quantity(
type=np.float64,
description="scale of the image, to be multiplied by 5 to know the image size",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "nanometer"},
unit="nanometer",
)
image = Quantity(
type=str,
description="image showing the thickness measurement points",
a_browser={"adaptor": "RawFileAdaptor"},
a_eln={"component": "FileEditQuantity"},
)
crop_image = Quantity(
type=str,
description="crop image ready to be used for AI-based analysis",
a_browser={"adaptor": "RawFileAdaptor"},
a_eln={"component": "FileEditQuantity"},
)


class AFMmeasurement(Measurement, EntryData):
"""
Class autogenerated from yaml schema.
"""

m_def = Section(
a_eln={"hide": ["steps"]},
categories=[IKZCategory],
label="AFM",
)

method = Quantity(
type=str,
default="AFM (IKZ MOVPE)",
)
description = Quantity(
type=str,
a_eln={"component": "StringEditQuantity"},
)
datetime = Quantity(
type=Datetime,
a_eln={"component": "DateTimeEditQuantity"},
)
results = SubSection(
section_def=AFMresults,
repeats=True,
)


class LiMiresults(MeasurementResult):
"""
The results of a Light Microscope measurement
"""

image = Quantity(
type=str,
description="image showing the thickness measurement points",
a_browser={"adaptor": "RawFileAdaptor"},
a_eln={"component": "FileEditQuantity"},
)
crop_image = Quantity(
type=str,
description="crop image ready to be used for AI-based analysis",
a_browser={"adaptor": "RawFileAdaptor"},
a_eln={"component": "FileEditQuantity"},
)
scale = Quantity(
type=np.float64,
description="scale of the image",
a_eln={"component": "NumberEditQuantity", "defaultDisplayUnit": "micrometer"},
unit="micrometer",
)


class LightMicroscope(Measurement, EntryData):
"""
Class autogenerated from yaml schema.
"""

m_def = Section(
a_eln={"hide": ["steps"]},
categories=[IKZCategory],
label="Light Microscope",
)
method = Quantity(
type=str,
default="Light Microscope (MOVPE IKZ)",
)
datetime = Quantity(
type=Datetime,
a_eln={"component": "DateTimeEditQuantity"},
)
results = SubSection(
section_def=LiMiresults,
repeats=True,
)
Loading

0 comments on commit d00f331

Please sign in to comment.