Source code for nectarchain.tools.write_pedestals

"""
Extract pedestals from pedestal file
"""

from ctapipe.calib.camera.pedestals import PedestalCalculator
from ctapipe.containers import PedestalContainer
from ctapipe.core import Provenance, Tool, traits
from ctapipe.io import EventSource, HDF5TableWriter
from traitlets import Dict, List, Unicode

__all__ = ["PedestalHDF5Writer"]


[docs] class PedestalHDF5Writer(Tool): """ Example of tool that extract the pedestal value per pixel and write the pedestal container to disk in a hdf5 file """ name = "PedestalHDF5Writer" description = "Generate a HDF5 file with pedestal values" output_file = Unicode("pedestal.hdf5", help="Name of the output file").tag( config=True ) calculator_product = traits.Enum(PedestalCalculator, default="PedestalIntegrator") aliases = Dict( dict( input_file="EventSource.input_url", max_events="EventSource.max_events", tel_id="PedestalCalculator.tel_id", sample_duration="PedestalCalculator.sample_duration", sample_size="PedestalCalculator.sample_size", n_channels="PedestalCalculator.n_channels", charge_product="PedestalCalculator.charge_product", ) ) classes = List( [EventSource, PedestalCalculator, PedestalContainer, HDF5TableWriter] + traits.classes_with_traits(PedestalCalculator) ) def __init__(self, **kwargs): """ Example of tool that extract the pedestal value per pixel and write the pedestal container to disk """ super().__init__(**kwargs) self.eventsource = None self.pedestal = None self.container = None self.writer = None self.group_name = None def setup(self): kwargs = dict(parent=self) self.eventsource = EventSource.from_config(**kwargs) self.pedestal = PedestalCalculator.from_name(self.calculator_product, **kwargs) self.group_name = "tel_" + str(self.pedestal.tel_id) self.writer = HDF5TableWriter( filename=self.output_file, group_name=self.group_name, overwrite=True )
[docs] def start(self): """ Example of tool that extract the pedestal value per pixel and write the pedestal container to disk """ write_config = True # loop on events for count, event in enumerate(self.eventsource): # fill pedestal monitoring container if self.pedestal.calculate_pedestals(event): ped_data = event.mon.tel[self.pedestal.tel_id].pedestal if write_config: ped_data.meta["config"] = self.config write_config = False self.log.debug(f"write event in table: {self.group_name}/pedestal") # write data to file self.writer.write("pedestal", ped_data)
def finish(self): Provenance().add_output_file(self.output_file, role="mon.tel.pedestal") self.writer.close()
[docs] def main(): exe = PedestalHDF5Writer() exe.run()
if __name__ == "__main__": main()