297 def _tree_dump(self, tree, itr_entries, leaves=None, retvecs=False, sortleaves=True):
298
299 ROOT = import_root()
300 import AthenaPython.PyAthena as PyAthena
301 _pythonize = PyAthena.RootUtils.PyROOTInspector.pyroot_inspect2
302
303 tree_name = self.obj_name
304 nentries = tree.GetEntries()
305 if leaves is not None:
306 leaves = [str(b).rstrip('\0') for b in leaves]
307 leaves.sort()
308 else:
309 leaves = sorted([b.GetName().rstrip('\0') for b in tree.GetListOfBranches()])
310
311
312 if isinstance(itr_entries, str):
313 if ':' in itr_entries:
314 def toint(s):
315 if s == '':
316 return None
317 try:
318 return int(s)
319 except ValueError:
320 return s
321 from itertools import islice
322 itr_entries = islice(range(nentries),
323 *
map(toint, itr_entries.split(
':')))
324 elif ('range' in itr_entries or
325 ',' in itr_entries):
326 itr_entries = eval(itr_entries)
327 else:
328 try:
329 _n = int(itr_entries)
330 itr_entries = range(_n)
331 except ValueError:
332 print ("** err ** invalid 'itr_entries' argument. will iterate over all entries.")
333 itr_entries = range(nentries)
334 elif isinstance(itr_entries, list):
335 itr_entries = itr_entries
336 else:
337 itr_entries = range(itr_entries)
338
339 list_ = list
340 map_ = map
341 str_ = str
342 isinstance_ = isinstance
343
344 for ientry in itr_entries:
345 hdr = ":: entry [%05i]..." % (ientry,)
346
347
348 err = tree.LoadTree(ientry)
349 if err < 0:
350 print ("**err** loading tree for entry",ientry)
351 self.allgood = False
352 break
353
354 nbytes = tree.GetEntry(ientry)
355 if nbytes <= 0:
356 print ("**err** reading entry [%s] of tree [%s]" % (ientry, tree_name))
357 hdr = ":: entry [%05i]... [ERR]" % (ientry,)
358 print (hdr)
359 self.allgood = False
360 continue
361
362 for br_name in leaves:
363 hdr = ":: branch [%s]..." % (br_name,)
364
365
366 _vals = list()
367
368 br = tree.GetBranch (br_name)
369 if br.GetClassName() != '':
370
371
372
373
374
375 getattr (ROOT, br.GetClassName())
376 val = getattr(tree, br_name)
377 _vals += [ ([br_name], val) ]
378 else:
379 for l in br.GetListOfLeaves():
380 if (br.GetNleaves() == 1 and (br_name == l.GetName() or
381 br_name.endswith('.' + l.GetName()))):
382 _vals += [ ([br_name], _getLeaf (l)) ]
383 else:
384 _vals += [ ([br_name, l.GetName()], _getLeaf (l)) ]
385 for py_name, val in _vals:
386 if val is None: continue
387 try:
388 vals = _pythonize(val, py_name, True, retvecs)
389 except Exception as err:
390 print ("**err** for branch [%s] val=%s (type=%s)" % (
391 br_name, val,
type(val),
392 ))
393 self.allgood = False
394 print (err)
395 if sortleaves:
396 viter = sorted(vals, key = lambda x: '.'.join(s for s in x[0] if isinstance_(s, str_)))
397 else:
398 viter = vals
399 for o in viter:
400 n = list_(map_(str_, o[0]))
401 v = o[1]
402 yield tree_name, ientry, n, v
403
404 pass
405 pass