13"""GaudiPython.Bindings module.
14This module provides the basic bindings of the main Gaudi
15components to Python. It is itself based on the ROOT cppyy
16Python extension module.
49from GaudiKernel
import ROOT6WorkAroundEnabled
52with warnings.catch_warnings():
53 warnings.simplefilter(
"ignore")
56if ROOT6WorkAroundEnabled(
"ROOT-5478"):
64from GaudiKernel.Proxy.Configurable
import Configurable, getNeededConfigurables
66from .
import Pythonizations
75gbl.gInterpreter.Declare(
'#include "Gaudi/Property.h"')
76Helper = gbl.GaudiPython.Helper
77StringProperty = gbl.Gaudi.Property(
"std::string")
78StringPropertyRef = gbl.Gaudi.Property(
"std::string&")
79GaudiHandleProperty = gbl.GaudiHandleProperty
80GaudiHandleArrayProperty = gbl.GaudiHandleArrayProperty
81DataObject = gbl.DataObject
82SUCCESS = gbl.StatusCode(gbl.StatusCode.SUCCESS)
83FAILURE = gbl.StatusCode(gbl.StatusCode.FAILURE)
85if hasattr(cppyy,
"nullptr"):
86 nullptr = cppyy.nullptr
87elif hasattr(gbl,
"nullptr"):
92cppyy.gbl.gInterpreter.Declare(
95namespace GaudiPython { namespace Helpers {
96 void setProperty(ISvcLocator* svcLoc, std::string key, std::string value) {
97 if ( !svcLoc ) throw std::runtime_error( "invalid ISvcLocator pointer" );
98 svcLoc->getOptsSvc().set(key, value);
105for l
in [l
for l
in dir(Helper)
if re.match(
"^to.*Array$", l)]:
106 exec(f
"{l} = Helper.{l}")
110if hasattr(Helper,
"toArray"):
114 return getattr(Helper,
"toArray")
119 return getattr(Helper, f
"toArray<{typ}>")
124if hasattr(cppyy,
"libPyROOT"):
125 ROOT = cppyy.libPyROOT
128makeNullPointer = ROOT.MakeNullPointer
129setOwnership = ROOT.SetOwnership
133 warnings.warn(
"GaudiPython: " + message, DeprecationWarning, stacklevel=3)
140 """Helper class to obtain the adequate interface from a component
141 by using the Gaudi queryInterface() mechanism"""
144 if isinstance(t, str):
152 if obj.queryInterface(self.
type.interfaceID(), ip).isSuccess():
156 "ERROR: queryInterface failed for", obj,
"interface:", self.
type
158 except Exception
as e:
162 "caught when retrieving interface",
169 traceback.print_stack()
181 InterfaceCast.__init__(self, t)
191 """Load an LCG dictionary"""
192 loadlib_return_code = Helper.loadDynamicLib(dict)
193 if loadlib_return_code == 1:
196 f
"Failed to load dictionary library {dict} (return code {loadlib_return_code})"
205 Function to retrieve a certain C++ class by name and to load dictionary if requested
209 from gaudimodule import getClass
210 # one knows that class is already loaded
211 AppMgr = getClass( 'ApplicationMgr' )
212 # one knows where to look for class, if not loaded yet
213 MCParticle = getClass( 'MCParticle' , 'EventDict' )
214 # one knows where to look for class, if not loaded yet
215 Vertex = getClass( 'Vertex' , ['EventDict', 'PhysEventDict'] )
218 if hasattr(gbl, name):
219 return getattr(gbl, name)
221 if not isinstance(libs, list):
225 if hasattr(gbl, name):
226 return getattr(gbl, name)
235 """holds the value and the documentation string of a property"""
241 if isinstance(prop, GaudiHandleProperty):
243 elif isinstance(prop, GaudiHandleArrayProperty):
244 self.
_value = prop.value()
248 self.
_value = eval(prop.toString(), {}, {})
250 if hasattr(prop,
"value"):
251 self.
_value = prop.value()
253 self.
_value = prop.toString()
255 self.
__doc__ +=
" --- Default value = " + str(self.
_value) +
" --- "
256 if prop.documentation() !=
"none":
268 "Return the underlying property itself"
282 """Python equivalent to the C++ Property interface"""
286 self.__dict__[
"_svcloc"] = gbl.Gaudi.svcLocator()
287 self.__dict__[
"_name"] = name
298 if not getattr(self, ifname):
299 self.retrieveInterface()
300 return getattr(getattr(self, ifname), method)(*args)
304 The method which is used for setting the property from the given value.
305 - In the case of the valid instance it sets the property through IProperty interface
306 - In the case of placeholder the property is added to JobOptionsCatalogue
308 if hasattr(value,
"toStringProperty"):
310 value = str(value.toStringProperty())
311 elif hasattr(value,
"toString"):
312 value = str(value.toString())
313 elif isinstance(value, set)
and value:
315 value =
"{" + repr(sorted(value))[1:-1] +
"}"
321 if not gbl.Gaudi.Utils.hasProperty(ip, name):
322 raise AttributeError(f
"property {name} does not exist")
323 ip.setPropertyRepr(name, value)
325 gbl.GaudiPython.Helpers.setProperty(
331 The method which returns the value for the given property
332 - In the case of the valid instance it returns the valid property value through IProperty interface
333 - In the case of placeholder the property value is retrieved from JobOptionsCatalogue
337 if not gbl.Gaudi.Utils.hasProperty(ip, name):
338 raise AttributeError(f
"property {name} does not exist")
339 prop = ip.getProperty(name)
340 if isinstance(prop, StringProperty):
342 elif isinstance(prop, StringPropertyRef):
345 return eval(prop.toString(), {}, {})
349 opts = self.
_svcloc.getOptsSvc()
350 if opts.has(f
"{self._name}.{name}"):
352 return eval(opts.get(f
"{self._name}.{name}"), {}, {})
353 raise AttributeError(f
"property {name} does not exist")
360 props = ip.getProperties()
361 propsFrom = self.
_name
363 raise NotImplementedError(
"rely on IJobOptionsSvc")
364 props = self._optsvc.getProperties(self.
_name)
365 propsFrom =
"jobOptionsSvc"
370 except (ValueError, TypeError)
as e:
372 f
"gaudimodule.iProperty.properties(): {e.__class__.__name__}{e.args} processing property {propsFrom}.{p.name()} = {p.value()}"
384 """Python equivalent to IProperty interface"""
387 iProperty.__init__(self, name, isvc)
393 iService.__init__(self, self.
_name, isvc)
424 """Python equivalent to IAlgorithm interface"""
427 iProperty.__init__(self, name, ialg)
431 ialg = Helper.algorithm(
435 iAlgorithm.__init__(self, self.
_name, ialg)
484 """Python equivalent to IAlgTool interface (not completed yet)"""
487 iProperty.__init__(self, name, itool)
488 self.__dict__[
"_itool"] = itool
489 svc = Helper.service(self.
_svcloc,
"ToolSvc",
True)
490 self.__dict__[
"_toolsvc"] =
iToolSvc(
"ToolSvc", svc)
493 itool = self._toolsvc._retrieve(self.
_name)
495 iAlgTool.__init__(self, self.
_name, itool)
518 iService.__init__(self, name, idp)
519 self.__dict__[
"_idp"] =
InterfaceCast(gbl.IDataProviderSvc)(idp)
520 self.__dict__[
"_idm"] =
InterfaceCast(gbl.IDataManagerSvc)(idp)
522 self.__dict__[
"_ihwb"] =
None
524 if idp.queryInterface(gbl.IHiveWhiteBoard.interfaceID(), ip).isSuccess():
525 self.__dict__[
"_ihwb"] = ip
529 raise AttributeError(
530 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
532 return Helper.registerObject(self.
_idp, path, obj)
536 raise AttributeError(
537 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
539 return Helper.unregisterObject(self.
_idp, path)
544 return Helper.dataobject(self.
_idp, path)
551 Get the existing object in TransientStore for the given location
553 - loading of object from persistency is NOT triggered
554 - 'data-on-demand' action is NOT triggered
556 >>> svc = ... ## get the service
557 >>> path = ... ## get the path in Transient Store
558 >>> data = svc.findObject ( path ) ## use the method
563 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
565 return Helper.findobject(self.
_idp, path)
570 Get object from Transient Store for the given location
573 - path : Location of object in Transient Store
574 - retrieve (bool) True : retrieve versus find
575 - disable on-demand (bool) False : temporary disable 'on-demand' actions
577 >>> svc = ... ## get the service
578 >>> path = ... ## get the path
580 >>> data = svc.getObject ( path , False ) ## find object in Transient Store
582 ## find object in Transient Store
583 # load form tape or use 'on-demand' action for missing objects :
584 >>> data = svc.getObject ( path , True )
586 ## find object in Transient Store
587 # load from tape or for missing objects, disable 'on-demand'-actions
588 >>> data = svc.getObject ( path , True , True )
593 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
595 return Helper.getobject(self.
_idp, path, *args)
600 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
602 return Helper.dataobject(self.
_idp, path)
607 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
614 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
619 if node == cppyy.nullptr:
621 ll = gbl.std.vector(
"IRegistry*")()
622 if isinstance(node, str):
624 if self.
_idm.objectLeaves(node, ll).isSuccess():
627 def dump(self, node=cppyy.nullptr):
628 if node == cppyy.nullptr:
631 node = root.registry()
634 print(node.identifier())
636 for l
in self.
leaves(node):
639 def getList(self, node=cppyy.nullptr, lst=[], rootFID=None):
640 if node == cppyy.nullptr:
643 node = root.registry()
644 rootFID = node.address().par()
648 Helper.dataobject(self.
_idp, node.identifier())
650 lst.append(node.identifier())
651 for l
in self.
leaves(node):
652 if l.address()
and l.address().par() == rootFID:
659 if node == cppyy.nullptr:
662 node = root.registry()
667 Helper.dataobject(self.
_idp, node.identifier())
669 lst.append(node.identifier())
670 for l
in self.
leaves(node):
680 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
689 if self.
_ihwb.getNumberOfStores() > 1:
691 "Several stores available in Gaudihive mode, unable to figure out which one to use.\nPlease call selectStore instead of selectSingleStore\nIf you're only using GaudiPython, make sure you configure a single thread"
699 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
706 "C++ service {} does not exist".
format(self.__dict__[
"_name"])
714 self.__dict__[
"_ihs"] =
InterfaceCast(gbl.IHistogramSvc)(ihs)
715 iDataSvc.__init__(self, name, ihs)
718 return Helper.histo1D(self.
_ihs, path)
721 return Helper.histo2D(self.
_ihs, path)
724 return Helper.histo3D(self.
_ihs, path)
727 return Helper.profile1D(self.
_ihs, path)
730 return Helper.profile2D(self.
_ihs, path)
734 Retrieve AIDA histogram or AIDA profile histogram by path in Histogram Transient Store
736 >>> histo = svc.retrieve ( 'path/to/my/histogram' )
751 Book the histograms(1D,2D&3D) , see IHistogramSvc::book
753 >>> histo = svc.book( .... )
759 Book the profile(1D&2D) histograms, see IHistogramSvc::bookProf
761 >>> histo = svc.bookProf( .... )
767 Retrieve the object from Histogram Transient Store (by path)
768 The reference to AIDA histogram is returned (if possible)
770 >>> histo = svc['path/to/my/histogram']
775 return iDataSvc.__getitem__(self, path)
779 Retrieve the histogram from Histogram Transient Store (by path)
780 The reference to AIDA histogram is returned (if possible)
782 >>> histo = svc.getAsAIDA ( 'path/to/my/histogram' )
788 Retrieve the histogram from Histogram Transient Store (by path)
789 The Underlying native ROOT object is returned (if possible)
791 >>> histo = svc.getAsROOT ( 'path/to/my/histogram' )
793 fun = gbl.Gaudi.Utils.Aida2ROOT.aida2root
806 iDataSvc.__init__(self, name, ints)
809 return self._ints.
book(*args)
812 """Defines the mapping between logical names and the output file
814 defineOutput({'LUN1':'MyFile1.root', 'LUN2':'Myfile2.root'}, svc='Gaudi::RootCnvSvc')
816 from .
import Persistency
as prs
818 helper = prs.get(typ)
819 helper.configure(
AppMgr())
820 self.
Output = [helper.formatOutput(files[lun], lun=lun)
for lun
in files]
821 if AppMgr().HistogramPersistency ==
"NONE":
822 AppMgr().HistogramPersistency =
"ROOT"
825 return iDataSvc.__getitem__(self, path)
832 iService.__init__(self, name, its)
835 sol = _gaudi.OutputLevel
838 if name.rfind(
".") == -1:
839 itool = Helper.tool(self._its,
"", name, nullptr,
False)
840 elif name[0:8] ==
"ToolSvc.":
841 itool = Helper.tool(self._its,
"", name[8:], nullptr,
False)
842 elif name.count(
".") > 1:
843 ptool = self.
_retrieve(name[: name.rfind(
".")])
845 self._its,
"", name[name.rfind(
".") + 1 :], ptool,
False
848 prop = _gaudi.property(name[: name.rfind(
".")])
850 self._its,
"", name[name.rfind(
".") + 1 :], prop._ip,
False
859 def create(self, typ, name=None, parent=nullptr, interface=None):
862 itool = Helper.tool(self._its, typ, name, parent,
True)
869 if isinstance(itool, iAlgTool):
870 self._its.releaseTool(itool._itool)
881 Helper.service(gbl.Gaudi.svcLocator(),
"EventSelector"),
883 self.__dict__[
"g"] =
AppMgr()
885 def open(self, stream, typ="Gaudi::RootCnvSvc
", **kwargs):
886 from .
import Persistency
as prs
888 helper = prs.get(typ)
889 helper.configure(self.
g)
890 self.
Input = helper.formatInput(stream, **kwargs)
905 newobj = object.__new__(cls)
906 cls.
__init__(newobj, *args, **kwargs)
915 self._evtpro.release()
938 self.
__dict__[
"_exit_called"] =
False
942 from GaudiKernel.Proxy.Configurable
import expandvars
945 def expandvars(data):
948 if dllname
and factname:
949 self.
__dict__[
"_appmgr"] = gbl.Gaudi.createApplicationMgr(dllname, factname)
951 self.
__dict__[
"_appmgr"] = gbl.Gaudi.createApplicationMgr(dllname)
953 self.
__dict__[
"_appmgr"] = gbl.Gaudi.createApplicationMgr()
954 self.
__dict__[
"_svcloc"] = gbl.Gaudi.svcLocator()
959 iService.__init__(self,
"ApplicationMgr", self.
_appmgr)
961 if self.
FSMState() < Gaudi.StateMachine.CONFIGURED:
966 importOptions(joboptions)
968 import GaudiKernel.Proxy.Configurable
970 if hasattr(GaudiKernel.Proxy.Configurable,
"applyConfigurableUsers"):
971 GaudiKernel.Proxy.Configurable.applyConfigurableUsers()
975 appMgr = Configurable.allConfigurables[
"ApplicationMgr"]
976 selfprops = expandvars(appMgr.getValuedProperties())
979 for p, v
in selfprops.items():
981 for p, v
in selfoptions.items():
984 if outputlevel != -1:
988 ms = self.
service(
"MessageSvc")
989 if "MessageSvc" in Configurable.allConfigurables:
990 msprops = Configurable.allConfigurables[
"MessageSvc"]
991 ms = self.
service(
"MessageSvc")
992 if hasattr(msprops,
"getValuedProperties"):
993 msprops = expandvars(msprops.getValuedProperties())
994 for p, v
in msprops.items():
996 if outputlevel != -1:
997 ms.OutputLevel = outputlevel
999 for n
in getNeededConfigurables():
1000 c = Configurable.allConfigurables[n]
1001 if n
in [
"ApplicationMgr",
"MessageSvc"]:
1003 for p, v
in c.getValuedProperties().
items():
1006 if hasattr(Configurable,
"PropertyReference")
and isinstance(
1007 v, Configurable.PropertyReference
1012 if isinstance(v, str):
1014 gbl.GaudiPython.Helpers.setProperty(
1017 if hasattr(Configurable,
"_configurationLocked"):
1018 Configurable._configurationLocked =
True
1029 orig_register = atexit.register
1031 def register(func, *targs, **kargs):
1032 orig_register(func, *targs, **kargs)
1033 if hasattr(func,
"__module__")
and func.__module__ ==
"ROOT":
1034 orig_register(self.
exit)
1038 register.__doc__ = (
1039 orig_register.__doc__
1040 +
"\nNote: version hacked by GaudiPython to work "
1041 +
"around a problem with the ROOT exit handler"
1043 atexit.register = register
1048 return self.
_svcloc.getOptsSvc()
1061 svc = Helper.service(self.
_svcloc, name)
1068 self._svcmgr.declareSvcType(svcname, svctype)
1071 return Helper.service(self.
_svcloc, name,
True)
1074 l = self.
_svcloc.getServices()
1075 return [s.name()
for s
in l]
1078 alg = Helper.algorithm(self._algmgr, name, createIf)
1085 l = self._algmgr.getAlgorithms()
1086 return [a.name()
for a
in l]
1100 if self.
state() == Gaudi.StateMachine.CONFIGURED:
1102 svc = Helper.service(self.
_svcloc, name)
1106 svc = self.
datasvc(
"EventDataSvc")
1107 svc.selectOnlyStore()
1111 return self.
datasvc(
"DetectorDataSvc")
1114 return self.
datasvc(
"FileRecordDataSvc")
1117 if self.
state() == Gaudi.StateMachine.CONFIGURED:
1119 if not hasattr(self,
"_evtsel"):
1124 svc = Helper.service(self.
_svcloc, name)
1131 svc = Helper.service(self.
_svcloc, name,
True)
1135 if self.
FSMState() == Gaudi.StateMachine.CONFIGURED:
1137 svc = Helper.service(self.
_svcloc,
"ParticlePropertySvc")
1141 svc = Helper.service(self.
_svcloc, name,
True)
1145 """Add an Algorithm to the list of Top algorithms. It can be either a instance of
1146 an Algorithm class or it name"""
1147 if isinstance(alg, str):
1150 self.pyalgorithms.append(alg)
1156 self.
topAlg += [alg.name()]
1159 """Set the list of Top Algorithms.
1160 It can be an individual of a list of algorithms names or instances"""
1161 if not isinstance(algs, list):
1165 if isinstance(alg, str):
1168 self.pyalgorithms.append(alg)
1173 names.append(alg.name())
1177 """Remove an Algorithm to the list of Top algorithms. It can be either a instance of
1178 an Algorithm class or it name"""
1180 if isinstance(alg, str):
1183 tmp.remove(alg.name())
1184 self.pyalgorithms.remove(alg)
1190 Print the sequence of Algorithms.
1193 def printAlgo(algName, appMgr, prefix=" "):
1194 print(prefix + algName)
1195 alg = appMgr.algorithm(algName.split(
"/")[-1])
1196 prop = alg.properties()
1197 if "Members" in prop:
1198 subs = prop[
"Members"].value()
1200 printAlgo(i.strip(
'"'), appMgr, prefix +
" ")
1203 prefix =
"ApplicationMgr SUCCESS "
1206 +
"****************************** Algorithm Sequence ****************************"
1208 for i
in mp[
"TopAlg"].value():
1209 printAlgo(i, self, prefix)
1212 +
"******************************************************************************"
1225 if self.
FSMState() == Gaudi.StateMachine.CONFIGURED:
1227 if sc.isFailure()
or self.ReturnCode != 0:
1229 if self.
FSMState() == Gaudi.StateMachine.INITIALIZED:
1231 if sc.isFailure()
or self.ReturnCode != 0:
1233 return self._evtpro.executeRun(n)
1242 if self.
FSMState() == Gaudi.StateMachine.CONFIGURED:
1246 if self.
FSMState() == Gaudi.StateMachine.INITIALIZED:
1251 if not hasattr(self,
"_perssvc"):
1253 "EventPersistencySvc",
"IAddressCreator"
1255 if not hasattr(self,
"_filecat"):
1257 "FileCatalog",
"Gaudi::IFileCatalog"
1259 if not hasattr(self,
"_evtmgr"):
1260 self.
__dict__[
"_evtmgr"] = self.
service(
"EventDataSvc",
"IDataManagerSvc")
1262 if pfn.find(
"PFN:") == 0:
1266 if not self._filecat.existsFID(fid):
1267 self._filecat.registerPFN(fid, pfn,
"")
1269 if not isinstance(events, list):
1273 gadd = gbl.GenericAddress(0x02, 1, fid,
"/Event", 0, evt)
1275 self._perssvc.createAddress(
1276 gadd.svcType(), gadd.clID(), gadd.par(), gadd.ipar(), oadd
1279 self._evtmgr.clearStore()
1280 self._evtmgr.setRoot(
"/Event", oadd)
1286 self.
__dict__[
"_exit_called"] =
True
1287 Gaudi = self._gaudi_ns
1288 if self.
FSMState() == Gaudi.StateMachine.RUNNING:
1290 if self.
FSMState() == Gaudi.StateMachine.INITIALIZED:
1292 if self.
FSMState() == Gaudi.StateMachine.CONFIGURED:
1303 ntupleSvc = ntuplesvc
1314 tfile = gbl.TFile.Open(pfn)
1316 raise OSError(f
"Cannot open ROOT file {pfn}")
1317 tree = tfile.Get(
"##Params")
1319 text = tree.db_string
1320 if "NAME=FID" in text:
1321 fid = text[text.rfind(
"VALUE=") + 6 : -1]
1322 nevt = tfile.Get(
"_Event").GetEntries()
1331 """Get all the properties of a component as a Python dictionary.
1332 The component is instantiated using the component library
1335 if name ==
"GaudiCoreSvc":
1336 if Helper.loadDynamicLib(name) != 1:
1337 raise ImportError(
"Error loading component library " + name)
1338 factorylist = gbl.FactoryTable.instance().getEntries()
1340 _ =
AppMgr(outputlevel=7)
1342 _ =
AppMgr(outputlevel=7)
1343 if Helper.loadDynamicLib(name) != 1:
1344 raise ImportError(
"Error loading component library " + name)
1345 factorylist = gbl.FactoryTable.instance().getEntries()
1347 svcloc = gbl.Gaudi.svcLocator()
1348 dummysvc = gbl.Service(
"DummySvc", svcloc)
1349 for factory
in factories:
1356 elif factory.ident() ==
"ApplicationMgr":
1357 ctype =
"ApplicationMgr"
1360 cname = factory.ident().split()[-1]
1361 if ctype
in (
"Algorithm",
"Service",
"AlgTool",
"ApplicationMgr"):
1363 if ctype ==
"AlgTool":
1364 obj = factory.instantiate(dummysvc)
1366 obj = factory.instantiate(svcloc)
1367 except RuntimeError
as text:
1368 print(
"Error instantiating", cname,
" from ", name)
1372 properties[cname] = [ctype, prop.properties()]
1382 for i
in range(factories.size()):
1383 factory = factories.front()
1384 result.append(factory)
1385 factories.pop_front()
1386 for factory
in result:
1387 factories.push_back(factory)
1393_CallbackStreamBufBase = gbl.GaudiPython.CallbackStreamBuf
1398 _CallbackStreamBufBase.__init__(self, self)
1410_PyAlgorithm = gbl.GaudiPython.PyAlgorithm
1416 name = self.__class__.__name__
1417 _PyAlgorithm.__init__(self, self, name)
1420 sc = self.
_algmgr.addAlgorithm(self)
1422 raise RuntimeError(
"Unable to add Algorithm")
1425 sc = self.
_algmgr.removeAlgorithm(self)
1450 readline.parse_and_bind(
"tab: complete")
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
histsvc(self, name="HistogramDataSvc")
__new__(cls, *args, **kwargs)
runSelectedEvents(self, pfn, events)
algorithm(self, name, createIf=False)
__init__(self, outputlevel=-1, joboptions=None, selfoptions={}, dllname=None, factname=None)
removeAlgorithm(self, alg)
declSvcType(self, svcname, svctype)
setAlgorithms(self, algs)
service(self, name, interface=None)
ntuplesvc(self, name="NTupleSvc")
toolsvc(self, name="ToolSvc")
__init__(self, name=None)
__init__(self, name, ialg=cppyy.nullptr)
leaves(self, node=cppyy.nullptr)
registerObject(self, path, obj)
unregisterObject(self, path)
retrieveObject(self, path)
__init__(self, name, idp)
getObject(self, path, *args)
getList(self, node=cppyy.nullptr, lst=[], rootFID=None)
dump(self, node=cppyy.nullptr)
getHistoNames(self, node=cppyy.nullptr, lst=[])
open(self, stream, typ="Gaudi::RootCnvSvc", **kwargs)
__init__(self, name, ihs)
retrieveProfile1D(self, path)
retrieveProfile2D(self, path)
defineOutput(self, files, typ="Gaudi::RootCnvSvc")
__init__(self, name, ints)
__setattr__(self, name, value)
__call_interface_method__(self, ifname, method, *args)
__init__(self, name, ip=cppyy.nullptr)
__init__(self, name, isvc=cppyy.nullptr)
_copyFactoriesFromList(factories)
getComponentProperties(name)
executeEvent
Helpers for re-entrant interfaces.