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.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.