Source code for apsbits.demo_instrument.callbacks.nexus_data_file_writer

"""
Nexus data file writer callback.

This module provides callbacks for writing data to Nexus data files.
"""

import logging

from apsbits.utils.aps_functions import host_on_aps_subnet
from apsbits.utils.config_loaders import get_config

logger = logging.getLogger(__name__)
logger.bsdev(__file__)

# Get the configuration
iconfig = get_config()


if host_on_aps_subnet():
    from apstools.callbacks import NXWriterAPS as NXWriter
else:
    from apstools.callbacks import NXWriter


[docs] class MyNXWriter(NXWriter): """Patch to get sample title from metadata, if available."""
[docs] def get_sample_title(self): """ Get the title from the metadata or modify the default. default title: S{scan_id}-{plan_name}-{short_uid} """ try: title = self.metadata["title"] except KeyError: # title = super().get_sample_title() # the default title title = f"S{self.scan_id:05d}-{self.plan_name}-{self.uid[:7]}" return title
[docs] def nxwriter_init(RE): """Initialize the Nexus data file writer callback.""" nxwriter = MyNXWriter() # create the callback instance """The NeXus file writer object.""" if iconfig.get("NEXUS_DATA_FILES", {}).get("ENABLE", False): RE.subscribe(nxwriter.receiver) # write data to NeXus files nxwriter.file_extension = iconfig.get("NEXUS_DATA_FILES", {}).get( "FILE_EXTENSION", "hdf" ) print(nxwriter.file_extension) warn_missing = iconfig.get("NEXUS_DATA_FILES", {}).get("WARN_MISSING", False) nxwriter.warn_on_missing_content = warn_missing return nxwriter