Note
Go to the end to download the full example code.
Reading and Parsing EVT files¶
This example shows how to read and parse EVT files, which are used in our Monte Carlo productions.
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)