ATLAS Offline Software
Loading...
Searching...
No Matches
dump_root_file.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3# @file PyUtils.scripts.dump_root_file
4# @purpose ascii-fy a ROOT file
5# @author Sebastien Binet
6# @date December 2010
7
8__doc__ = "ASCII-fy a ROOT file"
9__author__ = "Sebastien Binet"
10
11
12
13import PyUtils.acmdlib as acmdlib
14
15@acmdlib.command(name='dump-root')
16@acmdlib.argument('fname',
17 help='path to the ROOT file to dump')
18@acmdlib.argument('-t', '--tree-name',
19 default=None,
20 help='name of the TTree to dump (default:all)')
21@acmdlib.argument('--entries',
22 default=None,
23 help="""a list of entries (indices, not event numbers) or an expression leading to such a list, to compare (default:all).
24 ex: --entries='0:10' to get the first 10 events
25 --entries='10:20:2' to get the even events between 10 and 20
26 --entries='range(10)' to get the first 10 events
27 --entries=10 to get the first 10 events
28 --entries=0,2,1 to get the entry 0, then 2 then 1
29 """)
30@acmdlib.argument('-v', '--verbose',
31 action='store_true',
32 default=False,
33 help="""Enable verbose printout""")
34def main(args):
35 """dump the content of a ROOT file into an ASCII format.
36 """
37
38 import PyUtils.RootUtils as ru
39 root = ru.import_root()
40
41 _inspect = root.RootUtils.PyROOTInspector.pyroot_inspect2 # noqa: F841
42
43 import PyUtils.Logging as L
44 msg = L.logging.getLogger('dump-root')
45 msg.setLevel(L.logging.INFO)
46
47 msg.info('fname: [%s]', args.fname)
48 root_file = root.TFile.Open(args.fname)
49 if (root_file is None or
50 not isinstance(root_file, root.TFile) or not root_file.IsOpen()):
51 msg.error('could not open [%s]', args.fname)
52 return 1
53
54 tree_names = []
55 if args.tree_name:
56 tree_names = args.tree_name.split(',')
57 else:
58 tree_names = []
59 keys = [k.GetName() for k in root_file.GetListOfKeys()]
60 for k in keys:
61 o = root_file.Get(k)
62 if isinstance(o, root.TTree):
63 tree_names.append(k)
64
65 msg.info('dumping trees: %s', tree_names)
66
67 for tree_name in tree_names:
68 f = ru.RootFileDumper(args.fname, tree_name)
69 nentries = f.tree.GetEntries()
70 if args.entries:
71 nentries = args.entries
72 for d in f.dump(tree_name, nentries):
73 tree_name, ientry, name, data = d
74 n = '.'.join(map(str, [tree_name,"%03i"%ientry]+name))
75 print ('%s %r' %(n, data))
76 return 0
STL class.