Source code for km3pipe.utils.h5extract

#!/usr/bin/env python3
# Filename: h5extract.py
"""
A tool to extract data from KM3NeT ROOT files to HDF5.

Usage:
    h5extract [options] FILENAME
    h5extract (-h | --help)
    h5extract --version

Options:
    -o OUTFILE                  Output file.
    -n N_EVENTS                 Number of events to extract.
    --offline-header            The header of an offline file.
    --event-info                General event information.
    --offline-hits              Offline hits.
    --with-calibration          Include calibration information for offline hits.
    --mc-hits                   MC hits (use with care!).
    --online-hits               Snapshot and triggered hits (combined).
    --mc-tracks                 MC tracks..
    --mc-tracks-usr-data        "usr" data from MC tracks (this will be slow).
    --reco-tracks               Reconstructed tracks.
    --best-tracks               Write a separate best track dataset for each known reco.
    --provenance-file=FILENAME  The file to store the provenance information.
    --timeit                    Print detailed pipeline performance statistics.
    --step-size=N               Number of events to cache or amount of data [default: 2000].
    --aashower-legacy           Use only with old MC files where aashower rec_stage=100 (now it is 300)
    -h --help                   Show this screen.
    --version                   Show the version.

"""
from thepipe import Provenance
import km3pipe as kp
import km3modules as km


[docs] def main(): from docopt import docopt args = docopt(__doc__, version=kp.version) step_size = int(args["--step-size"]) default_flags = ( "--offline-header", "--event-info", "--offline-hits", "--mc-hits", "--mc-tracks", "--with-calibration", "--reco-tracks", "--best-tracks", ) if not any([args[k] for k in default_flags]): for k in default_flags: args[k] = True outfile = args["-o"] if outfile is None: outfile = args["FILENAME"] + ".h5" provfile = args["--provenance-file"] if provfile is None: provfile = outfile + ".prov.json" Provenance().outfile = provfile pipe = kp.Pipeline(timeit=args["--timeit"]) pipe.attach(kp.io.OfflinePump, filename=args["FILENAME"], step_size=step_size) pipe.attach(km.StatusBar, every=1000) pipe.attach(km.common.MemoryObserver, every=500) if args["--offline-header"]: pipe.attach(km.io.OfflineHeaderTabulator) if args["--event-info"]: pipe.attach(km.io.EventInfoTabulator) if args["--offline-hits"]: pipe.attach( km.io.HitsTabulator, name="Offline", kind="offline", with_calibration=args["--with-calibration"], ) if args["--online-hits"]: pipe.attach(km.io.HitsTabulator, name="Online", kind="online") if args["--mc-hits"]: pipe.attach(km.io.HitsTabulator, name="MC", kind="mc") if args["--mc-tracks"]: pipe.attach(km.io.MCTracksTabulator, read_usr_data=args["--mc-tracks-usr-data"]) if args["--reco-tracks"]: pipe.attach( km.io.RecoTracksTabulator, best_tracks=args["--best-tracks"], aashower_legacy=args["--aashower-legacy"], ) pipe.attach(kp.io.HDF5Sink, filename=outfile) if args["-n"] is not None: pipe.drain(int(args["-n"])) else: pipe.drain()