"""
Reading Offline tracks
======================

The following example shows how to access tracks data in an offline ROOT file.

Note: the offline files used here were intentionaly reduced to 10 events.
"""
import km3io as ki
from km3net_testdata import data_path

#####################################################
# We open the file using the

f = ki.OfflineReader(data_path("offline/numucc.root"))

#####################################################
# To access offline tracks/mc_tracks data:

f.tracks
f.mc_tracks

#####################################################
# Note that no data is loaded in memory at this point, so printing
# tracks will only return how many sub-branches (corresponding to
# events) were found.

f.tracks

#####################################################
# same for mc hits

f.mc_tracks

#####################################################
# Accessing the tracks/mc_tracks keys
# -----------------------------------
# to explore the reconstructed tracks fields:

f.tracks.fields

#####################################################
# the same for MC tracks

f.mc_tracks.fields

#####################################################
# Accessing tracks data
# ---------------------
# each field will return a nested `awkward.Array` and load everything into
# memory, so be careful if you are working with larger files.

f.tracks.E

######################################################
# The z direction of all reconstructed tracks

f.tracks.dir_z

######################################################
# The likelihoods

f.tracks.lik


#####################################################
# To select just a single event or a subset of events, use the indices or slices.
# The following will access all tracks and their fields
# of the third event (0 is the first):

f[2].tracks

######################################################
# The z direction of all tracks in the third event:

f[2].tracks.dir_z


#####################################################
# while here, we select the first 3 events. Notice that all fields will return
# nested arrays, as we have seem above where all events were selected.

f[:3]

######################################################
# All tracks for the first three events

f[:3].tracks

######################################################
# The z directions of all tracks of the first three events

f[:3].tracks.dir_z

#####################################################
# or events from 3 and 5 (again, 0 indexing):


f[2:5]

######################################################
# the tracks of those events

f[2:5].tracks

######################################################
# and just the z directions of those

f[2:5].tracks.dir_z