ATLAS Offline Software
Classes | Functions | Variables
python.RootUtils Namespace Reference

Classes

class  RootFileDumper
 

Functions

def import_root (batch=True)
 functions --------------------------------------------------------------— More...
 
def root_compile (src=None, fname=None, batch=True)
 
def _root_compile (src, fname, batch)
 
def _pythonize_tfile ()
 
def _getLeaf (l)
 
def _test_main ()
 

Variables

 __doc__
 
 __author__
 
 __all__
 
 _tempfiles
 
 _first_compile
 

Function Documentation

◆ _getLeaf()

def python.RootUtils._getLeaf (   l)
private

Definition at line 184 of file RootUtils.py.

184 def _getLeaf (l):
185  tname = l.GetTypeName()
186  ndat = l.GetNdata()
187  if tname in ['UInt_t', 'Int_t', 'ULong64_t', 'Long64_t']:
188  return [l.GetValueLong64(i) for i in range(ndat)]
189  if tname in ['Float_t', 'Double_t']:
190  return [l.GetValue(i) for i in range(ndat)]
191  if tname in ['Char_t']:
192  try:
193  return l.GetValueString() # TLeafC for variable size string
194  except Exception:
195  return [l.GetValue(i) for i in range(ndat)] # TLeafB for 8-bit integers
196  return None
197 

◆ _pythonize_tfile()

def python.RootUtils._pythonize_tfile ( )
private

Definition at line 120 of file RootUtils.py.

120 def _pythonize_tfile():
121  import cppyy
122  root = import_root()
123  import PyUtils.Helpers as H
124  with H.ShutUp(filters=[
125  re.compile(
126  'TClass::TClass:0: RuntimeWarning: no dictionary for.*'),
127  re.compile(
128  'Warning in <TEnvRec::ChangeValue>: duplicate entry.*'
129  ),
130  ]):
131  cppyy.load_library("libRootUtilsPyROOTDict")
132  _ = root.RootUtils.PyBytes
133  #MN: lines below fail in ROOT6 if PCM from RootUtils is not found
134  read_root_file = root.RootUtils._pythonize_read_root_file
135  tell_root_file = root.RootUtils._pythonize_tell_root_file
136  pass
137  def read(self, size=-1):
138  """read([size]) -> read at most size bytes, returned as a string.
139 
140  If the size argument is negative or omitted, read until EOF is reached.
141  Notice that when in non-blocking mode, less data than what was requested
142  may be returned, even if no size parameter was given.
143 
144  FIXME: probably doesn't follow python file-like conventions...
145  """
146  SZ = 4096
147 
148  if size>=0:
149  #size = _adjust_sz(size)
150  #print ("-->0",self.tell(),size)
151  c_buf = read_root_file(self, size)
152  if c_buf and c_buf.sz:
153  v = c_buf.buf
154  return bytes([ord(v[i]) for i in range(v.size())])
155  return ''
156  else:
157  size = SZ
158  out = []
159  while True:
160  #size = _adjust_sz(size)
161  c_buf = read_root_file(self, size)
162  if c_buf and c_buf.sz:
163  v = c_buf.buf
164  chunk = bytes([ord(v[i]) for i in range(v.size())])
165  out.append(chunk)
166  else:
167  break
168  return b''.join(out)
169 
170  root.TFile.read = read
171  del read
172 
173  root.TFile.seek = root.TFile.Seek
174  root.TFile.tell = lambda self: tell_root_file(self)
175 
181  return
182 
183 

◆ _root_compile()

def python.RootUtils._root_compile (   src,
  fname,
  batch 
)
private

Definition at line 66 of file RootUtils.py.

66 def _root_compile (src, fname, batch):
67  import os
68  from .Helpers import ShutUp as root_shutup
69 
70  ROOT = import_root(batch=batch)
71  compile_options = "f"
72  if 'dbg' in os.environ.get('CMTCONFIG', 'opt'):
73  compile_options += 'g'
74  else:
75  compile_options += 'O'
76 
77  src_file = None
78  if src:
79  import textwrap
80  import tempfile
81  src_file = tempfile.NamedTemporaryFile(prefix='root_aclic_',
82  suffix='.cxx')
83  src_file.write(textwrap.dedent(src).encode())
84  src_file.flush()
85  src_file.seek(0)
86  fname = src_file.name
87 
88  # Apparently, cling caches files by inode.
89  # If you ask it to read a file that has the same inode as one
90  # that it has already read, then it will just use the cached
91  # contents rather than rereading. This, however, doesn't play
92  # very well if we're reading temp files, where inodes may be reused,
93  # giving rise to hard-to-reproduce failures.
94  #
95  # Try to avoid this by keeping the temp files open until the
96  # the program exits.
97  _tempfiles.append (src_file)
98  pass
99 
100  elif fname:
101  import os.path as osp
102  fname = osp.expanduser(osp.expandvars(fname))
103  pass
104 
105  assert os.access(fname, os.R_OK), "could not read [%s]"%(fname,)
106  orig_root_lvl = ROOT.gErrorIgnoreLevel
107  ROOT.gErrorIgnoreLevel = ROOT.kWarning
108  try:
109  with root_shutup():
110  sc = ROOT.gSystem.CompileMacro(fname, compile_options)
111  if sc == ROOT.kFALSE:
112  raise RuntimeError(
113  'problem compiling ROOT macro (rc=%s)'%(sc,)
114  )
115  finally:
116  ROOT.gErrorIgnoreLevel = orig_root_lvl
117  return
118 
119 @cache

◆ _test_main()

def python.RootUtils._test_main ( )
private

Definition at line 341 of file RootUtils.py.

341 def _test_main():
342  root = import_root() # noqa: F841
343  def no_raise(msg, fct, *args, **kwds):
344  caught = False
345  err = None
346  try:
347  fct(*args, **kwds)
348  except Exception as xerr:
349  err = xerr
350  caught = True
351  assert not caught, "%s:\n%s\nERROR" % (msg, err,)
352 
353  no_raise("problem pythonizing TFile", fct=_pythonize_tfile)
354  no_raise("problem compiling dummy one-liner",
355  root_compile, "void foo1() { return ; }")
356  no_raise("problem compiling dummy one-liner w/ kwds",
357  fct=root_compile, src="void foo1a() { return ; }")
358  import tempfile
359  # PvG workaround for ROOT-7059
360  dummy = tempfile.NamedTemporaryFile(prefix="foo_",suffix=".cxx") # noqa: F841
361  with tempfile.NamedTemporaryFile(prefix="foo_",suffix=".cxx") as tmp:
362  tmp.write (b"void foo2() { return ; }\n")
363  tmp.flush()
364  no_raise("problem compiling a file",
365  fct=root_compile, fname=tmp.name)
366 
367  print ("OK")
368  return True
369 

◆ import_root()

def python.RootUtils.import_root (   batch = True)

functions --------------------------------------------------------------—

a helper method to wrap the 'import ROOT' statement to prevent ROOT
from screwing up the display or loading graphics libraries when in batch
mode (which is the default.)

e.g.
>>> ROOT = import_root(batch=True)
>>> f = ROOT.TFile.Open(...)

Definition at line 22 of file RootUtils.py.

22 def import_root(batch=True):
23  """a helper method to wrap the 'import ROOT' statement to prevent ROOT
24  from screwing up the display or loading graphics libraries when in batch
25  mode (which is the default.)
26 
27  e.g.
28  >>> ROOT = import_root(batch=True)
29  >>> f = ROOT.TFile.Open(...)
30  """
31  import ROOT
32  ROOT.gROOT.SetBatch(batch)
33  if batch:
34  ROOT.PyConfig.IgnoreCommandLineOptions = True
35  import cppyy # noqa: F401
36  if os.environ.get('GLIBCXX_USE_CXX11_ABI') == '0':
37  cmd = ROOT.gSystem.GetMakeSharedLib()
38  if cmd.find('GLIBCXX_USE_CXX11_ABI') < 0:
39  cmd = cmd.replace ('$SourceFiles', '$SourceFiles -D_GLIBCXX_USE_CXX11_ABI=0 ')
40  ROOT.gSystem.SetMakeSharedLib(cmd)
41  return ROOT
42 

◆ root_compile()

def python.RootUtils.root_compile (   src = None,
  fname = None,
  batch = True 
)
a helper method to compile a set of C++ statements (via ``src``) or
a C++ file (via ``fname``) via ACLiC

Definition at line 45 of file RootUtils.py.

45 def root_compile(src=None, fname=None, batch=True):
46  """a helper method to compile a set of C++ statements (via ``src``) or
47  a C++ file (via ``fname``) via ACLiC
48  """
49  if src is not None and fname is not None:
50  raise ValueError("'src' xor 'fname' should be not None, *not* both")
51 
52  if src is None and fname is None:
53  raise ValueError("'src' xor 'fname' should be None, *not* both")
54 
55  # Cling bug workaround: Cling will try to find a definition for the
56  # hidden __gmon_start__ by opening all libraries on LD_LIBRARY_PATH.
57  # But it will crash if it encounters a separate-debug library.
58  # Work around by adding a dummy definition of __gmon_start__.
59  # See !31633.
60  global _first_compile
61  if _first_compile:
62  _first_compile = False
63  root_compile ('extern "C" { void __gmon_start__(){}; }', None, True)
64  return _root_compile (src, fname, batch)
65 

Variable Documentation

◆ __all__

python.RootUtils.__all__
private

Definition at line 11 of file RootUtils.py.

◆ __author__

python.RootUtils.__author__
private

Definition at line 9 of file RootUtils.py.

◆ __doc__

python.RootUtils.__doc__
private

Definition at line 8 of file RootUtils.py.

◆ _first_compile

python.RootUtils._first_compile
private

Definition at line 44 of file RootUtils.py.

◆ _tempfiles

python.RootUtils._tempfiles
private

Definition at line 43 of file RootUtils.py.

read
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
Definition: openCoraCool.cxx:569
python.RootUtils._getLeaf
def _getLeaf(l)
Definition: RootUtils.py:184
python.AthDsoLogger.fct
fct
Definition: AthDsoLogger.py:43
python.RootUtils._root_compile
def _root_compile(src, fname, batch)
Definition: RootUtils.py:66
python.RootUtils.import_root
def import_root(batch=True)
functions --------------------------------------------------------------—
Definition: RootUtils.py:22
AtlasMcWeight::encode
number_type encode(double weight)
Definition: AtlasMcWeight.cxx:65
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
python.RootUtils._test_main
def _test_main()
Definition: RootUtils.py:341
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.RootUtils.root_compile
def root_compile(src=None, fname=None, batch=True)
Definition: RootUtils.py:45
python.RootUtils._pythonize_tfile
def _pythonize_tfile()
Definition: RootUtils.py:120