Skip to content
Snippets Groups Projects
README.md 2.16 KiB
Newer Older
johannes bilk's avatar
johannes bilk committed
# What is this tool?

Let's all be frank, root sucks and the root file format is horrible.
It's among humanities worst pieces of software. With this small tool I hope to fix
the damage that was done, at least a little, by converting root files into
native Python formats.


It's using [Numpy](https://numpy.org) and a library called [Uproot](https://github.com/scikit-hep/uproot5)
to read and process these damn root files. So far it is specialist for one task
and I will have to work on it to make it actually viable for more use cases. That task
is to extract PXD data from Belle 2 data files.


## How to use this?

This is a single class, that needs to be instantiated, it doesn't take any arguments.
Just import it like this:

> from rootable import Rootable

Then you can create an instance:

> loadFromRoot = Rootable()

and load the root file and all the data:

> loadFromRoot.loadData('/root-files/slow_pions_2.root')
> loadFromRoot.getClusters()
> loadFromRoot.genCoordisnate()
> loadFromRoot.getLayers()
> loadFromRoot.getMatrices()
> loadFromRoot.getMCData()

This commands don't have any return value, but instead work in-place.
Then all data is stored inside the object as dict:

> loadFromRoot.data

Here follows a list of keywords contained in the dict:

- cluster data:
    - 'eventNumbers'
    - 'clsCharge'
    - 'seedCharge'
    - 'clsSize'
    - 'uSize'
    - 'vSize'
    - 'uPosition'
    - 'vPosition'
    - 'sensorID'
- coordinates:
    - 'xPosition'
    - 'yPosition'
    - 'zPosition'
- layers:
    - 'layers'
    - 'ladder'
- matrices:
    - 'cluster'
- Monte Carlo data:
    - 'momentumX'
    - 'momentumY'
    - 'momentumZ'
    - 'pdg'
    - 'clsNumber'

Since the class is subscriptable one can access every element directly using the keywords
like this:

>

And finally you can convert the dict into a structured Numpy array by simply writing:

> loadFromRoot.loadFromRoot()

This last command returns a Numpy array. From there the user can save it using
Numpys build-in functions, convert it to Pandas or use it in any way that is
compatible with Numpy.


## Installation

Download the repo, navigate in the terminal to the folder and run the following script:

> python3 setup.py