Skip to content
Snippets Groups Projects
Commit fb7f534f authored by Tamas Gal's avatar Tamas Gal :speech_balloon:
Browse files

Update README.rst

parent 47559ebb
No related branches found
No related tags found
No related merge requests found
Pipeline #29410 passed with warnings
...@@ -11,9 +11,9 @@ The km3io Python package ...@@ -11,9 +11,9 @@ The km3io Python package
:target: https://km3py.pages.km3net.de/km3io :target: https://km3py.pages.km3net.de/km3io
This software provides a set of Python classes to read KM3NeT ROOT files This software provides a set of Python classes to read KM3NeT ROOT files
without having ROOT, Jpp or aanet installed. It only depends on Python 3.5+ and the amazing `uproot <https://github.com/scikit-hep/uproot>`__ package and gives you access to the data via numpy arrays. without having ROOT, Jpp or aanet installed. It only depends on Python 3.5+ and the amazing `uproot <https://github.com/scikit-hep/uproot>`__ package and gives you access to the data via `numpy <https://www.numpy.org>`__ and `awkward <https://awkward-array.readthedocs.io>`__ arrays.
It's very easy to use and according to the `uproot <https://github.com/scikit-hep/uproot>`__ benchmarks, it is able to outperform the ROOT I/O performance. It's very easy to use and according to the `uproot <https://github.com/scikit-hep/uproot>`__ benchmarks, it is able to outperform the original ROOT I/O performance.
**Note:** Beware that this package is in the development phase, so the API will change until version ``1.0.0`` is released! **Note:** Beware that this package is in the development phase, so the API will change until version ``1.0.0`` is released!
...@@ -24,6 +24,10 @@ Install km3io using pip:: ...@@ -24,6 +24,10 @@ Install km3io using pip::
pip install km3io pip install km3io
or conda::
conda install km3io
To get the latest (stable) development release:: To get the latest (stable) development release::
pip install git+https://git.km3net.de/km3py/km3io.git pip install git+https://git.km3net.de/km3py/km3io.git
...@@ -66,18 +70,18 @@ it has 4 subarrays with variable lengths of type ``float64``: ...@@ -66,18 +70,18 @@ it has 4 subarrays with variable lengths of type ``float64``:
>>> f[:4].tracks.dir_z >>> f[:4].tracks.dir_z
<Array [[0.213, 0.213, ... 0.229, 0.323]] type='4 * var * float64'> <Array [[0.213, 0.213, ... 0.229, 0.323]] type='4 * var * float64'>
The same concept applies to everything, including ``hits``, ``mc_hits``, The same concept applies to all other branches, including ``hits``, ``mc_hits``,
``mc_tracks``, ``t_sec`` etc. ``mc_tracks``, ``t_sec`` etc.
Offline files reader Offline files reader
-------------------- --------------------
In general an offline file has two methods to fetch data: the header and the events. Let's start with the header. In general an offline file has two attributes to access data: the header and the events. Let's start with the header.
Reading the file header Reading the file header
""""""""""""""""""""""" """""""""""""""""""""""
To read an offline file start with opening it with an OfflineReader: To read an offline file start with opening it with the ``OfflineReader``:
.. code-block:: python3 .. code-block:: python3
...@@ -85,14 +89,14 @@ To read an offline file start with opening it with an OfflineReader: ...@@ -85,14 +89,14 @@ To read an offline file start with opening it with an OfflineReader:
>>> from km3net_testdata import data_path >>> from km3net_testdata import data_path
>>> f = km3io.OfflineReader(data_path("offline/numucc.root")) >>> f = km3io.OfflineReader(data_path("offline/numucc.root"))
Calling the header can be done with: Accessing is as easy as typing:
.. code-block:: python3 .. code-block:: python3
>>> f.header >>> f.header
<km3io.offline.Header at 0x7fcd81025990> <km3io.offline.Header at 0x7fcd81025990>
and provides lazy access. In offline files the header is unique and can be printed Printing it will give an overview of the structure:
.. code-block:: python3 .. code-block:: python3
...@@ -130,7 +134,8 @@ and provides lazy access. In offline files the header is unique and can be print ...@@ -130,7 +134,8 @@ and provides lazy access. In offline files the header is unique and can be print
xparam: OFF xparam: OFF
zed_user: zed_user(field_0=0.0, field_1=3450.0) zed_user: zed_user(field_0=0.0, field_1=3450.0)
To read the values in the header one can call them directly: To read the values in the header one can call them directly, as the structures
are simple ``namedtuple``-like objects:
.. code-block:: python3 .. code-block:: python3
...@@ -145,7 +150,13 @@ To read the values in the header one can call them directly: ...@@ -145,7 +150,13 @@ To read the values in the header one can call them directly:
Reading events Reading events
"""""""""""""" """"""""""""""
To start reading events call the events method on the file: Events are at the top level of an offline file, so that each branch of an event
is directly accessible at the ``OfflineReader`` instance. The ``.keys()`` method
can be used to list the available attributes. Notice that some of them are aliases
for backwards compatibility (like ``mc_tracks`` and ``mc_trks``). Another
backwards compatibility feature is the ``f.events`` attribute which is simply
mapping everything to ``f``, so that ``f.events.mc_tracks`` is the same as
``f.mc_tracks``.
.. code-block:: python3 .. code-block:: python3
...@@ -158,8 +169,14 @@ To start reading events call the events method on the file: ...@@ -158,8 +169,14 @@ To start reading events call the events method on the file:
'n_trks', 'overlays', 'run_id', 't_ns', 't_sec', 'tracks', 'n_trks', 'overlays', 'run_id', 't_ns', 't_sec', 'tracks',
'trigger_counter', 'trigger_mask', 'trks', 'usr', 'usr_names', 'trigger_counter', 'trigger_mask', 'trks', 'usr', 'usr_names',
'w', 'w2list', 'w3list'} 'w', 'w2list', 'w3list'}
>>> f.tracks
<Branch [10] path='trks'>
>>> f.events.tracks
<Branch [10] path='trks'>
The ``[10]`` denotes that there are ``10`` events available, each containing a sub-array of ``tracks``.
Like the online reader lazy access is used. Using <TAB> completion gives an overview of available data. Alternatively the method `keys` can be used on events and it's data members containing a structure to see what is available for reading. Using <TAB> completion gives an overview of available data. Alternatively the method `keys` can be used on events and it's data members containing a structure to see what is available for reading.
Reading the reconstructed values like energy and direction of an event can be done with: Reading the reconstructed values like energy and direction of an event can be done with:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment