ATLAS Offline Software
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 
13 import 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""")
34 def 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
python.scripts.dump_root_file.main
def main(args)
Definition: dump_root_file.py:34
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10