Source code for nectarchain.utils.metadata
"""
Functions to write metadata in output h5/fits files.
Taken from `lstcam_calib` with minor adaptations for NectarCAM.
"""
import logging
from ctapipe.core import Container, Field, Provenance
from ctapipe.io import metadata as meta
log = logging.getLogger(__name__)
__all__ = [
"MetaData",
"get_ctapipe_metadata",
"get_local_metadata",
"add_metadata_to_hdu",
]
PROV = Provenance()
[docs]
class MetaData(Container):
"""Some metadata."""
NECTARCHAIN_VERSION = Field(None, "Version of nectarchain")
CTAPIPE_VERSION = Field(None, "Version of ctapipe")
CTAPIPE_IO_NECTARCAM_VERSION = Field(None, "Version of ctapipe_io_nectarcam")
TEL_ID = Field(None, "Telescope id")
PROV_LOG = Field(None, "Provenance log file")
RUN_START = Field(None, "Start time of first run used")
[docs]
def get_ctapipe_metadata(
description="Cat-A calibration coefficients", data_category="A", site="CTA-North"
):
"""Fill reference metadata following ctapipe standard."""
from .. import __version__ as nectarchain_version
activity = PROV.current_activity
activity_meta = meta.Activity.from_provenance(activity.provenance)
activity_meta.software_name = "nectarchain"
activity_meta.software_version = nectarchain_version
reference = meta.Reference(
contact=meta.Contact(organization="MST Consortium"),
product=meta.Product(
description=description,
data_levels=["R1"],
data_category=data_category,
data_association="Telescope",
data_model_name="Unofficial monitoring R1",
data_model_version="1.0",
),
instrument=meta.Instrument(site=site, class_="Camera", type_="MST"),
process=meta.Process(type_="Observation", subtype="Calibration"),
activity=activity_meta,
)
return reference
[docs]
def get_local_metadata(tel_id, provenance_log, run_start):
"""Get local metadata container."""
from ctapipe import __version__ as ctapipe_version
from ctapipe_io_nectarcam import __version__ as ctapipe_io_nectarcam_version
from .. import __version__ as nectarchain_version
metadata = MetaData()
metadata.NECTARCHAIN_VERSION = nectarchain_version
metadata.CTAPIPE_VERSION = ctapipe_version
metadata.CTAPIPE_IO_NECTARCAM_VERSION = ctapipe_io_nectarcam_version
metadata.TEL_ID = tel_id
metadata.PROV_LOG = provenance_log
metadata.RUN_START = run_start
return metadata
[docs]
def add_metadata_to_hdu(metadata, hdu):
"""
Write metadata dictionary to a fits HDU .
Parameters
----------
metadata: dictionary of metadata
hdu: fits HDU where to add metadata
"""
for k, item in metadata.items():
if len(k) <= 8 or "HIERARCH" in k:
hdu.header[k] = metadata[k]
else:
hdu.header[f"HIERARCH {k}"] = metadata[k]