#!/usr/bin/env python # coding: utf-8 # # staff # example of macro to read data from an ascii file and # create a root file with a Tree. # # NOTE: comparing the results of this macro with those of staff.C, you'll # notice that the resultant file is a couple of bytes smaller, because the # code below strips all white-spaces, whereas the .C version does not. # # # # # **Author:** Wim Lavrijsen # This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, April 17, 2024 at 11:16 AM. # In[1]: import re, array, os import ROOT from ROOT import TFile, TTree, gROOT, addressof # A C/C++ structure is required, to allow memory based access # In[2]: gROOT.ProcessLine( "struct staff_t {\ Int_t Category;\ UInt_t Flag;\ Int_t Age;\ Int_t Service;\ Int_t Children;\ Int_t Grade;\ Int_t Step;\ Int_t Hrweek;\ Int_t Cost;\ Char_t Division[4];\ Char_t Nation[3];\ };" ); # Function to read in data from ASCII file and fill the ROOT tree # In[3]: staff = ROOT.staff_t() # The input file cern.dat is a copy of the CERN staff data base # from 1988 # In[4]: f = TFile( 'staff.root', 'RECREATE' ) tree = TTree( 'T', 'staff data from ascii file' ) tree.Branch( 'staff', staff, 'Category/I:Flag:Age:Service:Children:Grade:Step:Hrweek:Cost' ) tree.Branch( 'Divisions', addressof( staff, 'Division' ), 'Division/C' ) tree.Branch( 'Nation', addressof( staff, 'Nation' ), 'Nation/C' ) # note that the branches Division and Nation cannot be on the first branch # In[5]: fname = os.path.join(str(ROOT.gROOT.GetTutorialDir()), 'tree', 'cernstaff.dat') for line in open(fname).readlines(): t = list(filter( lambda x: x, re.split( '\s+', line ) ) ) staff.Category = int(t[0]) # assign as integers staff.Flag = int(t[1]) staff.Age = int(t[2]) staff.Service = int(t[3]) staff.Children = int(t[4]) staff.Grade = int(t[5]) staff.Step = int(t[6]) staff.Hrweek = int(t[7]) staff.Cost = int(t[8]) staff.Division = t[9] # assign as strings staff.Nation = t[10] tree.Fill() tree.Print() tree.Write()