Source code for km3pipe.utils.ztplot

# Filename: ztplot.py
"""
Create a zt-Plot.

Usage:
    ztplot [-d DETX_FILE] [-t] -e EVENT_ID FILE
    ztplot [-d DETX_FILE] [-t] -f FRAME -c COUNTER FILE
    ztplot (-h | --help)
    ztplot --version

Options:
    FILE          Input file.
    -c COUNTER    Trigger counter.
    -d DETX_FILE  Detector file.
    -e EVENT_ID   Event ID.
    -f FRAME      Frame index.
    -t            Triggered DUs only.
    -h --help     Show this screen.

"""

import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
import numpy as np

import km3pipe as kp
import km3pipe.style    # noqa
km3pipe.style.use("km3pipe")

__author__ = "Tamas Gal"
__copyright__ = "Copyright 2016, Tamas Gal and the KM3NeT collaboration."
__credits__ = []
__license__ = "MIT"
__maintainer__ = "Tamas Gal"
__email__ = "tgal@km3net.de"
__status__ = "Development"


[docs]def main(): from docopt import docopt arguments = docopt(__doc__) try: event_id = int(arguments['-e']) except TypeError: pass else: pump = kp.io.GenericPump(arguments['FILE']) blob = pump[event_id] event_info = blob['EventInfo'] hits = blob['Hits'] if (arguments['-d']): cal = kp.calib.Calibration(filename=arguments['-d']) else: cal = kp.calib.Calibration(det_id=event_info.det_id) hits = cal.apply(hits) # triggered_dus = set(cal.detector.doms[h.dom_id][0] for h in hits) det = cal.detector if arguments['-t']: dus = set(det.doms[h.dom_id][0] for h in hits if h.triggered) else: dus = set(det.doms[h.dom_id][0] for h in hits) n_plots = len(dus) n_cols = int(np.ceil(np.sqrt(n_plots))) n_rows = int(n_plots / n_cols) + (n_plots % n_cols > 0) fig, axes = plt.subplots( ncols=n_cols, nrows=n_rows, sharex=True, sharey=True, figsize=(16, 16) ) if n_cols == 1 and n_rows == 1: axes = (axes, ) else: axes = axes.flatten() for ax, du in zip(axes, dus): du_hits = hits[hits.du == du] trig_hits = du_hits.triggered_rows ax.scatter( du_hits.time - min(du_hits.time), du_hits.pos_z, c='#09A9DE', label='hit' ) ax.scatter( trig_hits.time - min(du_hits.time), trig_hits.pos_z, c='#FF6363', label='triggered hit' ) ax.set_title('DU{0}'.format(du), fontsize=8, fontweight='bold') for ax in axes: ax.tick_params(labelsize=8) ax.yaxis.set_major_locator(ticker.MultipleLocator(50)) xlabels = ax.get_xticklabels() for label in xlabels: label.set_rotation(45) plt.suptitle( "Filename: {0} - Event #{1}".format(arguments['FILE'], event_id), fontsize=16 ) fig.text(0.5, 0.04, 'time [ns]', ha='center') fig.text(0.08, 0.5, 'z [m]', va='center', rotation='vertical') # plt.tight_layout() plt.show()