Reading and Parsing EVT files

This example shows how to read and parse EVT files, which are used in our Monte Carlo productions.

plot evt readout
2024-05-19 03:18:03 km3pipe.io.evt.EvtPump.EvtPump: Opening /builds/km3py/km3pipe/venv/lib/python3.9/site-packages/km3net_testdata/data/evt/example_numuCC.evt
Detector: Parsing the DETX header
Detector: Reading PMT information...
Detector: Done.
Pipeline and module initialisation took 5.389s (CPU 5.389s).
================================[ . ]================================
============================================================
5 cycles drained in 6.046067s (CPU 12.536248s). Memory peak: 754.42 MB
  wall  mean: 0.101357s  medi: 0.014735s  min: 0.013650s  max: 0.447677s  std: 0.173164s
  CPU   mean: 0.101352s  medi: 0.014737s  min: 0.013652s  max: 0.447647s  std: 0.173151s

Blob([('EvtPump', None), ('StatusBar', None), ('Calibration', None), ('VertexHitDistanceCalculator', None)])

# Author: Tamas Gal <tgal@km3net.de>, Moritz Lotze >mlotze@km3net.de>
# License: BSD-3
import matplotlib.pyplot as plt
import numpy as np

import km3pipe as kp
import km3modules as km
from km3net_testdata import data_path

kp.style.use("km3pipe")

filename = data_path("evt/example_numuCC.evt")
detx = data_path("detx/km3net_jul13_90m_r1494_corrected.detx")


class VertexHitDistanceCalculator(kp.Module):
    """Calculate vertex-hit-distances"""

    def configure(self):
        self.distances = []

    def process(self, blob):
        tracks = blob["TrackIns"]
        muons = tracks[tracks.type == 5]
        muon = kp.Table(muons[np.argmax(muons.energy)])
        hits = blob["CalibHits"]
        dist = kp.math.pld3(hits.pos, muon.pos, muon.dir)
        self.distances.append(dist)
        return blob

    def finish(self):
        dist_flat = np.concatenate(self.distances)
        plt.hist(dist_flat)
        plt.xlabel("distance between hits and muon / m")
        plt.ylabel("count")
        plt.tight_layout()
        plt.savefig("dists.png")


pipe = kp.Pipeline()
pipe.attach(kp.io.EvtPump, filename=filename, parsers=["km3"])
pipe.attach(km.StatusBar, every=100)
pipe.attach(kp.calib.Calibration, filename=detx)
pipe.attach(VertexHitDistanceCalculator)
pipe.drain(5)

Total running time of the script: (0 minutes 6.151 seconds)

Gallery generated by Sphinx-Gallery