Reading TObjects from .root file in pyROOT

Hi All,

I have a .root file with a bunch of branches each containing a TLeaf of a in-house class based off of a TObject:

Branch: Primary
Leaf: Primary
Branch: EventInfo
Leaf: EventInfo
Branch: SilHits
Leaf: SilHits_
Branch: SilDigi
Leaf: SilDigi_
Branch: PanelHits
Leaf: PanelHits_
Branch: PanelDIGI
Leaf: PanelDIGI_
Branch: MCTracks
Leaf: MCTracks_

The EventInfo branch points to a TEventInfo object defined as so:

class TEventInfo : public TObject
{
  public:
    TEventInfo(){};

  int fnumPrimaryPi_0 = 0;
  int fnumPrimaryPi_p = 0;
  int fnumPrimaryPi_n = 0;
  int fnumPrimaryMu_p = 0;
  int fnumPrimaryMu_n = 0;
  int fnumPrimaryp_p = 0;
  int fnumPrimarye_n = 0;
  std::vector<double> fPrimaryPionMoms = {};

  int fnumSecondaryPi_0 = 0;
  int fnumSecondaryPi_p = 0;
  int fnumSecondaryPi_n = 0;
  int fnumSecondaryMu_p = 0;
  int fnumSecondaryMu_n = 0;
  int fnumSecondaryp_p = 0;
  int fnumSecondarye_n = 0;
  std::vector<double> fSecondaryPionMoms = {};
}

I would like to convert this to a python friendly format. For example a df or dictionary where the ints are just columns and the vector is also just all in one column. I am having trouble working with this TObject in python, obviously AsNumpy() doesn’t work natively.

Any ideas how to best do this?

Cheers

(Just for more context I am trying to plot histograms of each of these members, and of all the vectors)

i can do this:

# Open the ROOT file
root_file = ROOT.TFile.Open("./Data/a2MC-2024-04-10-12-48-42_300.root")
# Get the tree or directory
tree_or_dir = root_file.Get("a2MC")
# Navigate to the branch
branch = tree_or_dir.GetBranch("fnumPrimaryPi_0")

Then these commands to give:

tree_or_dir.Print()

******************************************************************************
*Tree    :a2MC      : a2MC tree                                              *
*Entries :      100 : Total =         1411669 bytes  File  Size =     690531 *
*        :          : Tree compression factor =   1.98                       *
******************************************************************************
*Branch  :Primary                                                            *
*Entries :      100 : BranchElement (see below)                              *
*............................................................................*
*Br    0 :fUniqueID : UInt_t                                                 *
*Entries :      100 : Total  Size=        981 bytes  File Size  =         99 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.81     *
*............................................................................*
*Br    1 :fBits     : UInt_t                                                 *
*Entries :      100 : Total  Size=       1369 bytes  File Size  =        286 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.08     *
*............................................................................*
*Br    2 :fPdgCode  : Int_t                                                  *
*Entries :      100 : Total  Size=        976 bytes  File Size  =        102 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.66     *
*............................................................................*
*Br    3 :fVox      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        868 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    4 :fVoy      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        867 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    5 :fVoz      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    6 :fPox      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    7 :fPoy      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    8 :fPoz      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    9 :fEo       : Double_t                                               *
*Entries :      100 : Total  Size=       1351 bytes  File Size  =        106 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   8.21     *
*............................................................................*
*Br   10 :fVdx      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br   11 :fVdy      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br   12 :fVdz      : Double_t                                               *
*Entries :      100 : Total  Size=       1356 bytes  File Size  =        871 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br   13 :fGenMode  : Int_t                                                  *
*Entries :      100 : Total  Size=        976 bytes  File Size  =         98 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.85     *
*............................................................................*
*Branch  :EventInfo                                                          *
*Entries :      100 : BranchElement (see below)                              *
*............................................................................*
*Br   14 :fUniqueID : UInt_t                                                 *
*Entries :      100 : Total  Size=        981 bytes  File Size  =         99 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.81     *
*............................................................................*
*Br   15 :fBits     : UInt_t                                                 *
*Entries :      100 : Total  Size=       1369 bytes  File Size  =        286 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.08     *
*............................................................................*
*Br   16 :fnumPrimaryPi_0 : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        190 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.54     *
*............................................................................*
*Br   17 :fnumPrimaryPi_p : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        183 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.63     *
*............................................................................*
*Br   18 :fnumPrimaryPi_n : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        181 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.66     *
*............................................................................*
*Br   19 :fnumPrimaryMu_p : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        105 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.59     *
*............................................................................*
*Br   20 :fnumPrimaryMu_n : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        105 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.59     *
*............................................................................*
*Br   21 :fnumPrimaryp_p : Int_t                                             *
*Entries :      100 : Total  Size=       1006 bytes  File Size  =        104 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.62     *
*............................................................................*
*Br   22 :fnumPrimarye_n : Int_t                                             *
*Entries :      100 : Total  Size=       1006 bytes  File Size  =        189 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.54     *
*............................................................................*
*Br   23 :fPrimaryPionMoms : vector<double>                                  *
*Entries :      100 : Total  Size=       4264 bytes  File Size  =       2795 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.33     *
*............................................................................*
*Br   24 :fnumSecondaryPi_0 : Int_t                                          *
*Entries :      100 : Total  Size=       1021 bytes  File Size  =        169 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.86     *
*............................................................................*
*Br   25 :fnumSecondaryPi_p : Int_t                                          *
*Entries :      100 : Total  Size=       1021 bytes  File Size  =        166 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.92     *
*............................................................................*
*Br   26 :fnumSecondaryPi_n : Int_t                                          *
*Entries :      100 : Total  Size=       1021 bytes  File Size  =        174 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.78     *
*............................................................................*
*Br   27 :fnumSecondaryMu_p : Int_t                                          *
*Entries :      100 : Total  Size=       1021 bytes  File Size  =        175 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.77     *
*............................................................................*
*Br   28 :fnumSecondaryMu_n : Int_t                                          *
*Entries :      100 : Total  Size=       1021 bytes  File Size  =        149 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.25     *
*............................................................................*
*Br   29 :fnumSecondaryp_p : Int_t                                           *
*Entries :      100 : Total  Size=       1016 bytes  File Size  =        239 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.02     *
*............................................................................*
*Br   30 :fnumSecondarye_n : Int_t                                           *
*Entries :      100 : Total  Size=       1016 bytes  File Size  =        252 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.92     *
*............................................................................*
*Br   31 :fSecondaryPionMoms : vector<double>                                *
*Entries :      100 : Total  Size=       2634 bytes  File Size  =       1136 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.84     *
*............................................................................*
*Br   32 :SilHits   : Int_t SilHits_                                         *
*Entries :      100 : Total  Size=      12433 bytes  File Size  =        436 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.02     *
*............................................................................*
*Br   33 :SilHits.fUniqueID : UInt_t fUniqueID[SilHits_]                     *
*Entries :      100 : Total  Size=       7705 bytes  File Size  =        398 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  17.81     *
*............................................................................*
*Br   34 :SilHits.fBits : UInt_t fBits[SilHits_]                             *
*Entries :      100 : Total  Size=       7685 bytes  File Size  =        434 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  16.32     *
*............................................................................*
*Br   35 :SilHits.fTrackID : Int_t fTrackID[SilHits_]                        *
*Entries :      100 : Total  Size=       7700 bytes  File Size  =       1756 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.04     *
*............................................................................*
*Br   36 :SilHits.fPdgCode : Int_t fPdgCode[SilHits_]                        *
*Entries :      100 : Total  Size=       7700 bytes  File Size  =       1332 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   5.32     *
*............................................................................*
*Br   37 :SilHits.fMotherID : Int_t fMotherID[SilHits_]                      *
*Entries :      100 : Total  Size=       7705 bytes  File Size  =       1396 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   5.08     *
*............................................................................*
*Br   38 :SilHits.fEvent : Int_t fEvent[SilHits_]                            *
*Entries :      100 : Total  Size=       7690 bytes  File Size  =        739 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   9.59     *
*............................................................................*
*Br   39 :SilHits.fSilID : Int_t fSilID[SilHits_]                            *
*Entries :      100 : Total  Size=       7690 bytes  File Size  =       2206 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.21     *
*............................................................................*
*Br   40 :SilHits.fLayN : Int_t fLayN[SilHits_]                              *
*Entries :      100 : Total  Size=       7685 bytes  File Size  =       1306 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   5.42     *
*............................................................................*
*Br   41 :SilHits.fModN : Int_t fModN[SilHits_]                              *
*Entries :      100 : Total  Size=       7685 bytes  File Size  =       1680 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   4.22     *
*............................................................................*
*Br   42 :SilHits.fnStrp : Int_t fnStrp[SilHits_]                            *
*Entries :      100 : Total  Size=       7690 bytes  File Size  =       2873 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.47     *
*............................................................................*
*Br   43 :SilHits.fpStrp : Int_t fpStrp[SilHits_]                            *
*Entries :      100 : Total  Size=       7690 bytes  File Size  =       2912 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.43     *
*............................................................................*
*Br   44 :SilHits.fEdep : Double_t fEdep[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      12873 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.06     *
*............................................................................*
*Br   45 :SilHits.fPosX : Double_t fPosX[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      13080 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.05     *
*............................................................................*
*Br   46 :SilHits.fPosY : Double_t fPosY[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      12526 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.09     *
*............................................................................*
*Br   47 :SilHits.fPosZ : Double_t fPosZ[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      13127 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.04     *
*............................................................................*
*Br   48 :SilHits.fMomX : Double_t fMomX[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      13056 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.05     *
*............................................................................*
*Br   49 :SilHits.fMomY : Double_t fMomY[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      13033 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.05     *
*............................................................................*
*Br   50 :SilHits.fMomZ : Double_t fMomZ[SilHits_]                           *
*Entries :      100 : Total  Size=      14281 bytes  File Size  =      13034 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.05     *
*............................................................................*
*Br   51 :SilDigi   : Int_t SilDigi_                                         *
*Entries :      100 : Total  Size=       4835 bytes  File Size  =        436 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.02     *
*............................................................................*
*Br   52 :SilDigi.fUniqueID : UInt_t fUniqueID[SilDigi_]                     *
*Entries :      100 : Total  Size=       7705 bytes  File Size  =        398 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  17.81     *
*............................................................................*
*Br   53 :SilDigi.fBits : UInt_t fBits[SilDigi_]                             *
*Entries :      100 : Total  Size=       7685 bytes  File Size  =        434 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  16.32     *
*............................................................................*
*Br   54 :SilDigi.fElemID : Int_t fElemID[SilDigi_]                          *
*Entries :      100 : Total  Size=       7695 bytes  File Size  =        399 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  17.76     *
*............................................................................*
*Br   55 :SilDigi.fEnergy : Double_t fEnergy[SilDigi_]                       *
*Entries :      100 : Total  Size=      14291 bytes  File Size  =        435 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  31.45     *
*............................................................................*
*Br   56 :SilDigi.fEventID : Int_t fEventID[SilDigi_]                        *
*Entries :      100 : Total  Size=       7700 bytes  File Size  =        400 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=  17.72     *
*............................................................................*
*Br   57 :PanelHits : Int_t PanelHits_                                       *
*Entries :      100 : Total  Size=      10281 bytes  File Size  =        350 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.53     *
*............................................................................*
*Br   58 :PanelHits.fUniqueID : UInt_t fUniqueID[PanelHits_]                 *
*Entries :      100 : Total  Size=       1251 bytes  File Size  =        178 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.49     *
*............................................................................*
*Br   59 :PanelHits.fBits : UInt_t fBits[PanelHits_]                         *
*Entries :      100 : Total  Size=       1231 bytes  File Size  =        196 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.15     *
*............................................................................*
*Br   60 :PanelHits.fTrackID : Int_t fTrackID[PanelHits_]                    *
*Entries :      100 : Total  Size=       1246 bytes  File Size  =        249 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.49     *
*............................................................................*
*Br   61 :PanelHits.fPdgCode : Int_t fPdgCode[PanelHits_]                    *
*Entries :      100 : Total  Size=       1246 bytes  File Size  =        234 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.65     *
*............................................................................*
*Br   62 :PanelHits.fMotherID : Int_t fMotherID[PanelHits_]                  *
*Entries :      100 : Total  Size=       1251 bytes  File Size  =        224 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.78     *
*............................................................................*
*Br   63 :PanelHits.fEvent : Int_t fEvent[PanelHits_]                        *
*Entries :      100 : Total  Size=       1236 bytes  File Size  =        222 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.79     *
*............................................................................*
*Br   64 :PanelHits.fPanelID : Int_t fPanelID[PanelHits_]                    *
*Entries :      100 : Total  Size=       1246 bytes  File Size  =        209 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.97     *
*............................................................................*
*Br   65 :PanelHits.fEdep : Double_t fEdep[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        444 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.68     *
*............................................................................*
*Br   66 :PanelHits.fPosX : Double_t fPosX[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        381 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.96     *
*............................................................................*
*Br   67 :PanelHits.fPosY : Double_t fPosY[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        438 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.70     *
*............................................................................*
*Br   68 :PanelHits.fPosZ : Double_t fPosZ[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        429 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.74     *
*............................................................................*
*Br   69 :PanelHits.fMomX : Double_t fMomX[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        408 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.83     *
*............................................................................*
*Br   70 :PanelHits.fMomY : Double_t fMomY[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        404 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.85     *
*............................................................................*
*Br   71 :PanelHits.fMomZ : Double_t fMomZ[PanelHits_]                       *
*Entries :      100 : Total  Size=       1359 bytes  File Size  =        409 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.82     *
*............................................................................*
*Br   72 :PanelDIGI : Int_t PanelDIGI_                                       *
*Entries :      100 : Total  Size=       4911 bytes  File Size  =        348 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.54     *
*............................................................................*
*Br   73 :PanelDIGI.fUniqueID : UInt_t fUniqueID[PanelDIGI_]                 *
*Entries :      100 : Total  Size=       1203 bytes  File Size  =        178 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.22     *
*............................................................................*
*Br   74 :PanelDIGI.fBits : UInt_t fBits[PanelDIGI_]                         *
*Entries :      100 : Total  Size=       1183 bytes  File Size  =        183 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   3.11     *
*............................................................................*
*Br   75 :PanelDIGI.fEventID : Int_t fEventID[PanelDIGI_]                    *
*Entries :      100 : Total  Size=       1198 bytes  File Size  =        220 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.60     *
*............................................................................*
*Br   76 :PanelDIGI.fPanelID : Int_t fPanelID[PanelDIGI_]                    *
*Entries :      100 : Total  Size=       1198 bytes  File Size  =        204 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.81     *
*............................................................................*
*Br   77 :PanelDIGI.fEnergy : Double_t fEnergy[PanelDIGI_]                   *
*Entries :      100 : Total  Size=       1273 bytes  File Size  =        342 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.91     *
*............................................................................*
*Br   78 :MCTracks  : Int_t MCTracks_                                        *
*Entries :      100 : Total  Size=      10121 bytes  File Size  =        458 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.93     *
*............................................................................*
*Br   79 :MCTracks.fUniqueID : UInt_t fUniqueID[MCTracks_]                   *
*Entries :      100 : Total  Size=      46561 bytes  File Size  =        796 *
*Baskets :        2 : Basket Size=      32000 bytes  Compression=  57.71     *
*............................................................................*
*Br   80 :MCTracks.fBits : UInt_t fBits[MCTracks_]                           *
*Entries :      100 : Total  Size=      46537 bytes  File Size  =        850 *
*Baskets :        2 : Basket Size=      32000 bytes  Compression=  54.04     *
*............................................................................*
*Br   81 :MCTracks.fPdgCode : Int_t fPdgCode[MCTracks_]                      *
*Entries :      100 : Total  Size=      46555 bytes  File Size  =       9923 *
*Baskets :        2 : Basket Size=      32000 bytes  Compression=   4.63     *
*............................................................................*
*Br   82 :MCTracks.fMother[2] : Int_t fMother[MCTracks_]                     *
*Entries :      100 : Total  Size=      92004 bytes  File Size  =      25050 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   3.65     *
*............................................................................*
*Br   83 :MCTracks.fDaughter[2] : Int_t fDaughter[MCTracks_]                 *
*Entries :      100 : Total  Size=      92018 bytes  File Size  =      17912 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   5.10     *
*............................................................................*
*Br   84 :MCTracks.fTrackID : Int_t fTrackID[MCTracks_]                      *
*Entries :      100 : Total  Size=      46555 bytes  File Size  =       2252 *
*Baskets :        2 : Basket Size=      32000 bytes  Compression=  20.40     *
*............................................................................*
*Br   85 :MCTracks.fPx : Double_t fPx[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      84042 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   1.09     *
*............................................................................*
*Br   86 :MCTracks.fPy : Double_t fPy[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      84023 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   1.09     *
*............................................................................*
*Br   87 :MCTracks.fPz : Double_t fPz[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      84004 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   1.09     *
*............................................................................*
*Br   88 :MCTracks.fE : Double_t fE[MCTracks_]                               *
*Entries :      100 : Total  Size=      91957 bytes  File Size  =      72782 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   1.26     *
*............................................................................*
*Br   89 :MCTracks.fVx : Double_t fVx[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      42050 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   2.17     *
*............................................................................*
*Br   90 :MCTracks.fVy : Double_t fVy[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      42073 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   2.17     *
*............................................................................*
*Br   91 :MCTracks.fVz : Double_t fVz[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      41963 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   2.18     *
*............................................................................*
*Br   92 :MCTracks.fVt : Double_t fVt[MCTracks_]                             *
*Entries :      100 : Total  Size=      91964 bytes  File Size  =      42330 *
*Baskets :        3 : Basket Size=      32000 bytes  Compression=   2.16     *
*............................................................................*

and also:

branch.Print()

*Br   94 :fnumPrimaryPi_0 : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        190 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.54     *
*............................................................................*

in case that helps?

Hi,

I would suggest to have a look to RDataFrame, and perhaps also its AsNumpy() function.

I hope this helps.

Cheers,
Danilo

Hi, thanks for the response. Unfortunately as mentioned the AsNumpy() function doesnt just work natively on this root file, likely because I have TObjects inside, here is an example:

SimData = ROOT.RDataFrame("a2MC", "./Data/a2MC-2024-04-10-12-48-42_300.root").AsNumpy()

and result:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_531/3743446081.py in <module>
----> 1 SimData = ROOT.RDataFrame("a2MC", "./Data/a2MC-2024-04-10-12-48-42_300.root").AsNumpy()

/cvmfs/sft.cern.ch/lcg/views/LCG_105a_swan/x86_64-centos7-gcc11-opt/lib/ROOT/_pythonization/_rdataframe.py in RDataFrameAsNumpy(df, columns, exclude, lazy)
    230     for column in columns:
    231         column_type = df.GetColumnType(column)
--> 232         result_ptrs[column] = df.Take[column_type](column)
    233 
    234     result = AsNumpyResult(result_ptrs, columns)

TypeError: Could not instantiate Take<TEventInfo>:
  Failed to instantiate "Take<TEventInfo>(std::string)"

Warning in <TClass::Init>: no dictionary for class a2mcPrimary is available
Warning in <TClass::Init>: no dictionary for class TEventInfo is available
Warning in <TClass::Init>: no dictionary for class a2mcSilHit is available
Warning in <TClass::Init>: no dictionary for class a2mcSilDIGI is available
Warning in <TClass::Init>: no dictionary for class a2mcPanelHit is available
Warning in <TClass::Init>: no dictionary for class a2mcPanelDIGI is available
Warning in <TClass::Init>: no dictionary for class a2mcMCTrack is available

Hi @lgolino,

you will need to do a bit more work, but it’s possible, maybe you can get inspired by this tutorial: ROOT: tutorials/dataframe/df026_AsNumpyArrays.py File Reference, especially look after these lines:

# You can read-out all objects from ROOT files since these are wrapped by PyROOT
# in the Python world. However, be aware that objects other than fundamental types,
# such as complex C++ objects and not int or float, are costly to read-out.

Cheers,
Marta

Is there no way I can just select specific branches to be read out? I don’t need the TObject in python (I do need them in the file) but I am able to identify, for example, this branch:

*............................................................................*
*Br   16 :fnumPrimaryPi_0 : Int_t                                            *
*Entries :      100 : Total  Size=       1011 bytes  File Size  =        190 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   2.54     *
*............................................................................*

which is just a branch of ints that should be easy to convert into a dataframe, no?

Hi @lgolino,

you can make the numpy array out of selected columns only. A simple example from the RDF documentation:

df = ROOT.RDataFrame("myTree", "myFile.root")
cols = df.AsNumpy(["x", "y"]) # retrieve columns "x" and "y" as NumPy arrays
print(cols["x"], cols["y"]) # the values of the cols dictionary are NumPy arrays

Cheers,
Marta

Ah okay, yes that works exactly as needed, thank you.