ATLAS Offline Software
CondInputLoader.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // CondInputLoader.cxx
8 // Implementation file for class CondInputLoader
10 
11 #include "CondInputLoader.h"
12 
13 // FrameWork includes
14 #include "Gaudi/Property.h"
15 #include "GaudiKernel/IClassIDSvc.h"
16 #include "StoreGate/ReadHandle.h"
18 #include "AthenaKernel/IOVTime.h"
19 #include "AthenaKernel/IOVRange.h"
20 #include "AthenaKernel/IIOVDbSvc.h"
21 #include "AthenaKernel/IIOVSvc.h"
26 
28 #include "AthenaKernel/BaseInfo.h"
29 #include "ICondSvcSetupDone.h"
30 
31 #include "TClass.h"
32 
33 
34 namespace
35 {
36  struct DataObjIDSorter {
37  bool operator()( const DataObjID* a, const DataObjID* b ) { return a->fullKey() < b->fullKey(); }
38  };
39 
40  // Sort a DataObjIDColl in a well-defined, reproducible manner.
41  // Used for making debugging dumps.
42  std::vector<const DataObjID*> sortedDataObjIDColl( const DataObjIDColl& coll )
43  {
44  std::vector<const DataObjID*> v;
45  v.reserve( coll.size() );
46  for ( const DataObjID& id : coll ) v.push_back( &id );
47  std::sort( v.begin(), v.end(), DataObjIDSorter() );
48  return v;
49  }
50 }
51 
53 // Public methods:
55 
56 // Constructors
59  ISvcLocator* pSvcLocator ) :
60  ::AthAlgorithm( name, pSvcLocator ),
61  m_condStore("StoreGateSvc/ConditionStore", name),
62  m_condSvc("CondSvc",name),
63  m_IOVSvc("IOVSvc",name),
64  m_IOVDbSvc("IOVDbSvc",name),
65  m_clidSvc("ClassIDSvc",name),
66  m_rcuSvc("Athena::RCUSvc",name)
67 {
68  //
69  // Property declaration
70  //
71  auto props = getProperties();
72  for( Gaudi::Details::PropertyBase* prop : props ) {
73  if (prop->name() == "ExtraOutputs" || prop->name() == "ExtraInputs") {
74  prop->declareUpdateHandler
76  }
77  }
78 }
79 
80 //-----------------------------------------------------------------------------
81 
82 // Athena Algorithm's Hooks
86 {
87  ATH_MSG_INFO ("Initializing " << name() << "...");
88 
89  ATH_CHECK( m_condSvc.retrieve() );
90  ATH_CHECK( m_condStore.retrieve() );
91  ATH_CHECK( m_clidSvc.retrieve() );
92  ATH_CHECK( m_rcuSvc.retrieve() );
93  ATH_CHECK( m_dictLoader.retrieve() );
94  ATH_CHECK( m_tpCnvSvc.retrieve() );
95 
96  // Trigger read of IOV database
97  ServiceHandle<IIOVSvc> ivs("IOVSvc",name());
98  ATH_CHECK( ivs.retrieve() );
99 
100  // Update the SG keys if different from Folder Names
101  ATH_CHECK( m_IOVDbSvc.retrieve() );
102  std::vector<std::string> keys = m_IOVDbSvc->getKeyList();
104  DataObjIDColl handles_to_load;
105 
106  for (auto key : keys) {
107  if( m_IOVDbSvc->getKeyInfo(key, info) ) {
108  m_keyFolderMap[key] = info.folderName;
109  } else {
110  ATH_MSG_WARNING("unable to retrieve keyInfo for " << key );
111  }
112  }
113 
114  // We can get warnings later if we don't get this defined first.
115  TClass::GetClass ("coral::AttributeList", true, false);
116 
117  for (const auto& itr : m_keyFolderMap) { //loop over keys of IOVDbSvc
118  for (auto id : m_load) {
119  if (id.key() == itr.second) {//CondInputLoader deals with this folder
120  if (itr.second != itr.first) {
121  ATH_MSG_DEBUG(" mapping folder " << id.key() << " to SGkey "
122  << itr.first);
123  id.updateKey( itr.first );
124  }//end if folder-name doesn't match SG key
125 
128  handles_to_load.emplace(vhk.fullKey());
129 
130  // Loading root dictionaries in a multithreaded environment
131  // is unreliable.
132  // So try to be sure all dictionaries are loaded now.
133  RootType rt = loadDict (id.clid());
134 
135  // Special case for LArConditionsSubset classes.
136  if (rt.Class()) {
137  size_t nbases = rt.BaseSize();
138  std::string pat = "LArConditionsContainer<";
139  for (size_t ibase = 0; ibase < nbases; ++ibase) {
140  std::string basename = rt.BaseAt(ibase).Name();
141  if (basename.starts_with( pat)) {
142  std::string subset = "LArConditionsSubset<" + basename.substr (pat.size(), std::string::npos);
143  loadDict (subset);
144  loadDict ("LArConditionsSubset_p1");
145  }
146  }
147  }
148 
149  break; //quit loop over m_load
150  } // end if CondInputLoader deals with this folder
151  }//end loop over m_load
152  }//end loop over m_keyFolderMap
153 
154  m_load = handles_to_load;
155  m_handlesToCreate = handles_to_load;
156 
157  // Add in all the base classes known to StoreGate, in case a handle
158  // is read via its base class. These will be added to the output deps,
159  // and also registered with the CondSvc, as the scheduler needs this
160  // info.
161 
162  std::ostringstream ost;
163  ost << "Adding base classes:";
164  for (auto &e : sortedDataObjIDColl (handles_to_load)) {
165  // ignore empty keys
166  if (e->key().empty()) continue;
167 
168  ost << "\n + " << *e << " ->";
169  CLID clid = e->clid();
170  const SG::BaseInfoBase* bib = SG::BaseInfoBase::find( clid );
171  if ( ! bib ) {
172  ost << " no bases";
173  } else {
174  for (CLID clid2 : bib->get_bases()) {
175  if (clid2 != clid) {
176  std::string base("UNKNOWN");
177  m_clidSvc->getTypeNameOfID(clid2,base).ignore();
178  ost << " " << base << " (" << clid2 << ")";
181  m_load.value().emplace(vhk.fullKey());
182  // Again, make sure all needed dictionaries are loaded.
183  m_dictLoader->load_type (clid2, true);
184  }
185  }
186  }
187  }
188  ATH_MSG_INFO(ost.str());
189 
190 
191  // Update the properties, set the ExtraOutputs for Alg deps
192  const Gaudi::Details::PropertyBase &p = getProperty("Load");
193 
194  ATH_MSG_DEBUG("setting prop ExtraOutputs to " << p.toString());
195  if (!setProperty("ExtraOutputs", p).isSuccess()) {
196  ATH_MSG_ERROR("failed setting property ExtraOutputs");
197  return StatusCode::FAILURE;
198  }
199 
200  StatusCode sc(StatusCode::SUCCESS);
201  std::ostringstream str;
202  str << "Will create WriteCondHandle dependencies for the following DataObjects:";
203  for (auto &e : sortedDataObjIDColl(m_load)) {
204  str << "\n + " << *e;
205  if (e->key().empty()) {
206  sc = StatusCode::FAILURE;
207  str << " ERROR: empty key is not allowed!";
208  } else {
209  SG::VarHandleKey vhk(e->clid(),e->key(),Gaudi::DataHandle::Writer,
211  if (m_condSvc->regHandle(this, vhk).isFailure()) {
212  ATH_MSG_ERROR("Unable to register WriteCondHandle " << vhk.fullKey());
213  sc = StatusCode::FAILURE;
214  }
215  ATH_MSG_DEBUG("Ignoring proxy: " << vhk.key());
216  m_IOVSvc->ignoreProxy(vhk.fullKey().clid(), vhk.key());
217  }
218  }
219  ATH_MSG_INFO(str.str());
220 
221  return sc;
222 }
223 
224 //-----------------------------------------------------------------------------
225 
226 StatusCode
228 {
229  ATH_MSG_INFO ("Finalizing " << name() << "...");
230 
231  return StatusCode::SUCCESS;
232 }
233 
234 //-----------------------------------------------------------------------------
235 
238 {
239  //
240  // now create the CondCont<T>. This has to be done after initialize(),
241  // as we need to make sure that all Condition Objects have been instantiated
242  // so as to fill the static condition obj registry via REGISTER_CC
243  //
244  // we use a VHK to store the info instead of a DataObjIDColl, as this saves
245  // us the trouble of stripping out the storename from the key later.
246  //
247 
248  m_vhk.clear(); // in case of multiple start transitions
249 
250  bool fail(false);
251  for (const DataObjID* ditr : sortedDataObjIDColl (m_handlesToCreate)) {
252  SG::VarHandleKey vhk(ditr->clid(),ditr->key(),Gaudi::DataHandle::Writer);
253  if ( ! m_condStore->contains<CondContBase>( vhk.key() ) ){
254  std::string tp("UNKNOWN");
255  if (m_clidSvc->getTypeNameOfID(ditr->clid(),tp).isFailure()) {
256  ATH_MSG_WARNING("unable to convert clid " << ditr->clid() << " to a classname."
257  << "This is a BAD sign, but will try to continue");
258  }
260  CondContainer::CondContFactory::Instance().Create( *m_rcuSvc, ditr->clid(), ditr->key() );
261  if (cb == 0) {
262  // try to force a load of libraries using ROOT
263  (void)TClass::GetClass (tp.c_str());
264  cb =
265  CondContainer::CondContFactory::Instance().Create( *m_rcuSvc, ditr->clid(), ditr->key() );
266  }
267  if (cb == 0) {
268  ATH_MSG_ERROR("failed to create CondCont<" << tp
269  << "> clid=" << ditr->clid()
270  << " : no factory found");
271  fail = true;
272  } else {
273  ATH_MSG_INFO("created CondCont<" << tp << "> with key '"
274  << ditr->key() << "'");
275  if (m_condStore->recordObject(cb, vhk.key(), true, false) == nullptr) {
276  ATH_MSG_ERROR("while creating a CondContBase for "
277  << vhk.fullKey());
278  fail = true;
279  } else {
280  m_vhk.push_back(vhk);
281  }
282  }
283  } else {
284  m_vhk.push_back(vhk);
285  }
286  }
287 
288  if (fail && m_abort) {
289  ATH_MSG_FATAL("Unable to setup some of the requested CondCont<T>. "
290  << "Aborting");
291  return StatusCode::FAILURE;
292  }
293 
294  // Let the conditions service know that we've finished creating
295  // conditions containers.
296  ServiceHandle<ICondSvcSetupDone> condSvcDone ("CondSvc", name());
297  ATH_CHECK( condSvcDone.retrieve() );
298  ATH_CHECK( condSvcDone->setupDone() );
299 
300  return StatusCode::SUCCESS;
301 
302 }
303 
304 
305 //-----------------------------------------------------------------------------
306 
307 StatusCode
309 {
310  ATH_MSG_DEBUG ("Executing " << name() << "...");
311 
312  EventIDBase now;
313  if (!getContext().valid()) {
314  ATH_MSG_WARNING("EventContext not valid! This should not happen!");
315  const xAOD::EventInfo* thisEventInfo;
316  if(evtStore()->retrieve(thisEventInfo)!=StatusCode::SUCCESS) {
317  ATH_MSG_ERROR("Unable to get Event Info");
318  return StatusCode::FAILURE;
319  }
320  now.set_run_number(thisEventInfo->runNumber());
321  now.set_event_number(thisEventInfo->eventNumber());
322  now.set_lumi_block(thisEventInfo->lumiBlock());
323  now.set_time_stamp(thisEventInfo->timeStamp());
324  now.set_time_stamp_ns_offset(thisEventInfo->timeStampNSOffset());
325  }
326  else {
327  now.set_run_number(getContext().eventID().run_number());
328  now.set_event_number(getContext().eventID().event_number());
329  now.set_lumi_block(getContext().eventID().lumi_block());
330  now.set_time_stamp(getContext().eventID().time_stamp());
331  now.set_time_stamp_ns_offset(getContext().eventID().time_stamp_ns_offset());
332  }
333 
334  EventIDBase now_event = now;
335  now.set_event_number (EventIDBase::UNDEFEVT);
336 
337  // For a MC event, the run number we need to use to look up the conditions
338  // may be different from that of the event itself. Override the run
339  // number with the conditions run number from the event context,
340  // if it is defined.
341  EventIDBase::number_type conditionsRun =
343  if (conditionsRun != EventIDBase::UNDEFNUM) {
344  now.set_run_number (conditionsRun);
345  }
346 
347  StatusCode sc(StatusCode::SUCCESS);
348  std::string tag;
349  for (auto &vhk: m_vhk) {
350  ATH_MSG_DEBUG( "handling id: " << vhk.fullKey() << " key: " << vhk.key() );
351 
352  CondContBase* ccb(0);
353  if (! m_condStore->retrieve(ccb, vhk.key()).isSuccess()) {
354  ATH_MSG_ERROR( "unable to get CondContBase* for " << vhk.fullKey()
355  << " from ConditionStore" );
356  sc = StatusCode::FAILURE;
357  continue;
358  }
359 
360  if (ccb->valid(now)) {
361  ATH_MSG_DEBUG( " CondObj " << vhk.fullKey() << " is still valid at " << now_event );
362  continue;
363  }
364 
365  std::string dbKey = m_keyFolderMap[vhk.key()];
366  if (m_IOVSvc->createCondObj( ccb, vhk.fullKey(), now ).isFailure()) {
367  ATH_MSG_ERROR("unable to create Cond object for " << vhk.fullKey() << " dbKey: "
368  << dbKey);
369  sc = StatusCode::FAILURE;
370  continue;
371  }
372  }
373 
374  if (m_dumpCondStore) {
375  ATH_MSG_DEBUG(m_condStore->dump());
376  }
377 
378  if (m_dumpCondSvc) {
379  std::ostringstream ost;
380  m_condSvc->dump(ost);
381  ATH_MSG_DEBUG(ost.str());
382  }
383  return sc;
384 }
385 
386 //-----------------------------------------------------------------------------
387 
388 // need to override the handling of the DataObjIDs that's done by
389 // AthAlgorithm, so we don't inject the name of the Default Store
390 void
391 CondInputLoader::extraDeps_update_handler( Gaudi::Details::PropertyBase& /*ExtraDeps*/ )
392 {
393  // do nothing
394 }
395 
396 //-----------------------------------------------------------------------------
397 
399 {
400  // First try to load the persistent class dictionary.
401  std::unique_ptr<ITPCnvBase> tpcnv = m_tpCnvSvc->t2p_cnv_unique (name);
402  if (tpcnv) {
403  RootType rtp = m_dictLoader->load_type (tpcnv->persistentTInfo());
404  if (rtp.Class()) {
405  return rtp;
406  }
407  }
408 
409  // Otherwise try to load the dictionary for the class itself.
410  return m_dictLoader->load_type (name);
411 }
412 
413 
415 {
416  std::string name;
417  if (m_clidSvc->getTypeNameOfID (clid, name).isSuccess()) {
418  return loadDict (name);
419  }
420  return RootType();
421 }
grepfile.info
info
Definition: grepfile.py:38
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
CondInputLoader::m_vhk
std::vector< SG::VarHandleKey > m_vhk
Definition: CondInputLoader.h:57
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
base
std::string base
Definition: hcg.cxx:78
ICondSvcSetupDone.h
Interface to tell CondSvc to cache conditions containers.
CondInputLoader.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
plotting.plot_kinematics.run_number
run_number
Definition: plot_kinematics.py:29
python.trigbs_prescaleL1.ost
ost
Definition: trigbs_prescaleL1.py:104
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CondInputLoader::start
virtual StatusCode start() override
Definition: CondInputLoader.cxx:237
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
IOVRange.h
Validity Range object. Holds two IOVTime instances (start and stop)
CondContainer::CondContFactory::Instance
static CondContFactory & Instance()
Definition: CondContFactory.cxx:14
CondContainer::CondContFactory::Create
SG::DataObjectSharedPtr< DataObject > Create(Athena::IRCUSvc &rcusvc, const CLID &clid, const std::string &key) const
Definition: CondContFactory.cxx:28
CondInputLoader::finalize
virtual StatusCode finalize() override
Definition: CondInputLoader.cxx:227
Atlas::ExtendedEventContext::conditionsRun
EventIDBase::number_type conditionsRun() const
Definition: ExtendedEventContext.h:38
CondInputLoader::m_rcuSvc
ServiceHandle< Athena::IRCUSvc > m_rcuSvc
Definition: CondInputLoader.h:72
CondInputLoader::CondInputLoader
CondInputLoader(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Definition: CondInputLoader.cxx:58
ParticleTest.tp
tp
Definition: ParticleTest.py:25
AtlasMcWeight::number_type
unsigned int number_type
Definition: AtlasMcWeight.h:20
CondContBase::valid
virtual bool valid(const EventIDBase &t) const =0
Test to see if a given IOV time is mapped in the container.
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
ITPCnvBase.h
xAOD::EventInfo_v1::timeStampNSOffset
uint32_t timeStampNSOffset() const
Nanosecond time offset wrt. the time stamp.
IIOVDbSvc.h
Abstract interface to IOVDbSvc to access IOVRange and tag information.
SG::BaseInfoBase::get_bases
const std::vector< CLID > & get_bases() const
Return the class IDs of all known bases of T (that have class IDs).
Definition: BaseInfo.cxx:304
CondInputLoader::m_clidSvc
ServiceHandle< IClassIDSvc > m_clidSvc
Definition: CondInputLoader.h:71
CondInputLoader::m_tpCnvSvc
ServiceHandle< ITPCnvSvc > m_tpCnvSvc
Definition: CondInputLoader.h:76
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
RootType
TTypeAdapter RootType
Definition: RootType.h:211
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
IOVTime.h
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
Atlas::getExtendedEventContext
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
Definition: ExtendedEventContext.cxx:32
StoreID::CONDITION_STORE
@ CONDITION_STORE
Definition: StoreID.h:28
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
calibdata.valid
list valid
Definition: calibdata.py:45
CondInputLoader::m_load
Gaudi::Property< DataObjIDColl > m_load
Containers.
Definition: CondInputLoader.h:55
python.handimod.now
now
Definition: handimod.py:675
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
CondContMaker.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CondInputLoader::initialize
virtual StatusCode initialize() override
Definition: CondInputLoader.cxx:85
CondInputLoader::execute
virtual StatusCode execute() override
Definition: CondInputLoader.cxx:308
BaseInfo.h
Provide an interface for finding inheritance information at run time.
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CondContBase
Base class for all conditions containers.
Definition: CondCont.h:140
TestMuonSF::getProperty
T getProperty(const asg::IAsgTool *interface_tool, const std::string &prop_name)
Definition: MuonSFTestHelper.cxx:17
CondInputLoader::m_IOVSvc
ServiceHandle< IIOVSvc > m_IOVSvc
Definition: CondInputLoader.h:69
CondInputLoader::m_IOVDbSvc
ServiceHandle< IIOVDbSvc > m_IOVDbSvc
Definition: CondInputLoader.h:70
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
AthAlgorithm
Definition: AthAlgorithm.h:47
dso-stats.pat
pat
Definition: dso-stats.py:39
CondInputLoader::m_handlesToCreate
DataObjIDColl m_handlesToCreate
Definition: CondInputLoader.h:56
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
SG::BaseInfoBase::find
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
Definition: BaseInfo.cxx:569
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CondInputLoader::m_keyFolderMap
std::map< std::string, std::string > m_keyFolderMap
Definition: CondInputLoader.h:78
SG::VarHandleKey::clid
CLID clid() const
Return the class ID for the referenced object.
Definition: StoreGate/src/VarHandleKey.cxx:177
SG::VarHandleKey
A property holding a SG store/key/clid from which a VarHandle is made.
Definition: StoreGate/StoreGate/VarHandleKey.h:62
EventInfo.h
IIOVSvc.h
CondInputLoader::m_condSvc
ServiceHandle< ICondSvc > m_condSvc
Definition: CondInputLoader.h:68
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
WithRootErrorHandler.h
Run a MT piece of code with an alternate root error handler.
python.PyAthena.v
v
Definition: PyAthena.py:154
a
TList * a
Definition: liststreamerinfos.cxx:10
TBaseAdapter::Name
std::string Name() const
Definition: RootType.cxx:356
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ITPCnvBase::persistentTInfo
virtual const std::type_info & persistentTInfo() const =0
return C++ type id of the persistent class this converter is for
CondInputLoader::m_dumpCondStore
Gaudi::Property< bool > m_dumpCondStore
Definition: CondInputLoader.h:59
SG::BaseInfoBase
The non-template portion of the BaseInfo implementation.
Definition: Control/AthenaKernel/AthenaKernel/BaseInfo.h:451
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
CondHandleKey.h
IIOVDbSvc::KeyInfo
Filled by IIOVDbSvc::getKeyInfo.
Definition: IIOVDbSvc.h:44
TScopeAdapter::BaseSize
size_t BaseSize() const
Definition: RootType.cxx:749
str
Definition: BTagTrackIpAccessor.cxx:11
CondInputLoader::loadDict
RootType loadDict(CLID clid)
Definition: CondInputLoader.cxx:414
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
CondInputLoader::m_dictLoader
ServiceHandle< IDictLoaderSvc > m_dictLoader
Definition: CondInputLoader.h:74
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
SG::DataObjectSharedPtr
Smart pointer to manage DataObject reference counts.
Definition: DataObjectSharedPtr.h:46
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
ReadHandle.h
Handle class for reading from StoreGate.
CondInputLoader::m_dumpCondSvc
Gaudi::Property< bool > m_dumpCondSvc
Definition: CondInputLoader.h:61
StoreID::storeName
static const std::string & storeName(const StoreID::type &s)
Definition: StoreID.cxx:77
TScopeAdapter::Class
TClass * Class() const
Definition: RootType.h:183
CondInputLoader::m_abort
Gaudi::Property< bool > m_abort
Definition: CondInputLoader.h:63
CondInputLoader::m_condStore
ServiceHandle< StoreGateSvc > m_condStore
Definition: CondInputLoader.h:67
beamspotman.fail
def fail(message)
Definition: beamspotman.py:201
CondInputLoader::extraDeps_update_handler
void extraDeps_update_handler(Gaudi::Details::PropertyBase &)
Definition: CondInputLoader.cxx:391
ServiceHandle< IIOVSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
TScopeAdapter
Definition: RootType.h:119
TScopeAdapter::BaseAt
TBaseAdapter BaseAt(size_t nth) const
Definition: RootType.cxx:773
beamspotman.basename
basename
Definition: beamspotman.py:640