.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_offline_events.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_offline_events.py: Reading Offline events ====================== The following example shows how to access events data in an offline ROOT file, which is written by aanet software. Note: the offline file used here has MC offline data and was intentionaly reduced to 10 events. .. GENERATED FROM PYTHON SOURCE LINES 11-15 .. code-block:: Python import km3io as ki from km3net_testdata import data_path .. GENERATED FROM PYTHON SOURCE LINES 16-18 First, pass a filename to the `OfflineReader` class to open the file. Note that only some meta information is read into memory. .. GENERATED FROM PYTHON SOURCE LINES 18-22 .. code-block:: Python r = ki.OfflineReader(data_path("offline/numucc.root")) .. GENERATED FROM PYTHON SOURCE LINES 23-28 Accessing the file header ------------------------- Note that not all file headers are supported, so don't be surprised if nothing is returned when the file header is called (this can happen if your file was produced with old versions of aanet). .. GENERATED FROM PYTHON SOURCE LINES 28-33 .. code-block:: Python h = r.header print(h) .. rst-class:: sphx-glr-script-out .. code-block:: none MC Header: DAQ(livetime=394) PDF(i1=4, i2=58) can(zmin=0, zmax=1027, r=888.4) can_user: can_user(field_0=0.0, field_1=1027.0, field_2=888.4) coord_origin(x=0, y=0, z=0) cut_in(Emin=0, Emax=0, cosTmin=0, cosTmax=0) cut_nu(Emin=100, Emax=100000000.0, cosTmin=-1, cosTmax=1) cut_primary(Emin=0, Emax=0, cosTmin=0, cosTmax=0) cut_seamuon(Emin=0, Emax=0, cosTmin=0, cosTmax=0) decay: decay(field_0='doesnt', field_1='happen') detector: NOT drawing: Volume genhencut(gDir=2000, Emin=0) genvol(zmin=0, zmax=1027, r=888.4, volume=2649000000.0, numberOfEvents=100000) kcut: 2 livetime(numberOfSeconds=0, errorOfSeconds=0) model(interaction=1, muon=2, scattering=0, numberOfEnergyBins=1, field_4=12) ngen: 100000.0 norma(primaryFlux=0, numberOfPrimaries=0) nuflux: nuflux(field_0=0, field_1=3, field_2=0, field_3=0.5, field_4=0.0, field_5=1.0, field_6=3.0) physics(program='GENHEN', version='7.2-220514', date=181116, time=1138) seed(program='GENHEN', level=3, iseed=305765867, field_3=0, field_4=0) simul(program='JSirene', version=11012, date='11/17/18', time=7) sourcemode: diffuse spectrum(alpha=-1.4) start_run(run_id=1) target: isoscalar usedetfile: false xlat_user: 0.63297 xparam: OFF zed_user: zed_user(field_0=0.0, field_1=3450.0) .. GENERATED FROM PYTHON SOURCE LINES 34-38 Accessing the events data ------------------------- Note that not all data is loaded in memory (again), so printing events will only return how many events were found in the file. .. GENERATED FROM PYTHON SOURCE LINES 38-42 .. code-block:: Python print(r.events) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 43-44 to explore the events keys: .. GENERATED FROM PYTHON SOURCE LINES 44-48 .. code-block:: Python keys = r.events.keys() print(keys) .. rst-class:: sphx-glr-script-out .. code-block:: none {'hits', 'n_hits', 'mc_hits', 't_ns', 'mc_tracks', 'det_id', 'flags', 'usr', 'mc_t', 'run_id', 'w2list', 'n_trks', 'id', 'trigger_mask', 'n_mc_hits', 'mc_id', 'n_tracks', 't_sec', 'trks', 'mc_trks', 'mc_run_id', 'n_mc_tracks', 'tracks', 'n_mc_trks', 'overlays', 'frame_index', 'w', 'comment', 'index', 'trigger_counter', 'w3list', 'usr_names'} .. GENERATED FROM PYTHON SOURCE LINES 49-50 to access the number of hits associated with each event: .. GENERATED FROM PYTHON SOURCE LINES 50-54 .. code-block:: Python n_hits = r.events.n_hits print(n_hits) .. rst-class:: sphx-glr-script-out .. code-block:: none [4271, 4145, 3680, 3967, 4105, 4301, 3949, 4180, 4210, 4024] .. GENERATED FROM PYTHON SOURCE LINES 55-56 to access the number of tracks associated with each event: .. GENERATED FROM PYTHON SOURCE LINES 56-60 .. code-block:: Python n_tracks = r.events.n_tracks print(n_tracks) .. rst-class:: sphx-glr-script-out .. code-block:: none [68, 38, 38, 18, 0, 60, 59, 66, 38, 22] .. GENERATED FROM PYTHON SOURCE LINES 61-62 to access the number of mc hits associated with each event: .. GENERATED FROM PYTHON SOURCE LINES 62-66 .. code-block:: Python n_mc_hits = r.events.n_mc_hits print(n_mc_hits) .. rst-class:: sphx-glr-script-out .. code-block:: none [58, 145, 28, 19, 78, 50, 58, 49, 35, 48] .. GENERATED FROM PYTHON SOURCE LINES 67-68 to access the number of mc tracks associated with each event: .. GENERATED FROM PYTHON SOURCE LINES 68-72 .. code-block:: Python n_mc_tracks = r.events.n_mc_tracks print(n_mc_tracks) .. rst-class:: sphx-glr-script-out .. code-block:: none [11, 25, 12, 10, 10, 13, 11, 10, 13, 16] .. GENERATED FROM PYTHON SOURCE LINES 73-74 to access the overlays: .. GENERATED FROM PYTHON SOURCE LINES 74-78 .. code-block:: Python overlays = r.events.overlays print(overlays) .. rst-class:: sphx-glr-script-out .. code-block:: none [1, 2, 1, 1, 0, 1, 2, 1, 1, 0] .. GENERATED FROM PYTHON SOURCE LINES 79-81 That's it! you can access any key of your interest in the events keys in the exact same way. .. GENERATED FROM PYTHON SOURCE LINES 84-88 item selection in events data ----------------------------- events can be selected as you would select an item from a numpy array. for example, to select the mc_hits in event 0: .. GENERATED FROM PYTHON SOURCE LINES 88-91 .. code-block:: Python print(r.events[0].mc_hits) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 92-93 or: .. GENERATED FROM PYTHON SOURCE LINES 93-97 .. code-block:: Python print(r.events.mc_hits[0]) .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 98-102 slicing of events ----------------- you can select a slice of events data. For example, to select the number of mc hits in the first 5 events: .. GENERATED FROM PYTHON SOURCE LINES 102-105 .. code-block:: Python print(r.events.n_mc_hits[0:5]) .. rst-class:: sphx-glr-script-out .. code-block:: none [58, 145, 28, 19, 78] .. GENERATED FROM PYTHON SOURCE LINES 106-107 or: .. GENERATED FROM PYTHON SOURCE LINES 107-111 .. code-block:: Python print(r.events[0:5].n_mc_hits) .. rst-class:: sphx-glr-script-out .. code-block:: none [58, 145, 28, 19, 78] .. GENERATED FROM PYTHON SOURCE LINES 112-114 you can apply masks to events data as you would do with numpy arrays. For example, to select the number of hits higher than 50: .. GENERATED FROM PYTHON SOURCE LINES 114-119 .. code-block:: Python mask = r.events.n_mc_hits > 50 print(r.events.n_mc_hits[mask]) .. rst-class:: sphx-glr-script-out .. code-block:: none [58, 145, 78, 58] .. GENERATED FROM PYTHON SOURCE LINES 120-121 or: .. GENERATED FROM PYTHON SOURCE LINES 121-123 .. code-block:: Python print(r.events.n_mc_tracks[mask]) .. rst-class:: sphx-glr-script-out .. code-block:: none [11, 25, 10, 11] .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 4.693 seconds) **Estimated memory usage:** 9 MB .. _sphx_glr_download_auto_examples_plot_offline_events.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_offline_events.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_offline_events.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_