ATLAS Offline Software
LumiBlockMetaDataTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "LumiBlockMetaDataTool.h"
11 
12 #include "StoreGate/StoreGateSvc.h"
14 
15 #include <algorithm>
16 
17 //___________________________________________________________________________
19  , const std::string& name
20  , const IInterface* parent)
21  : base_class(type, name, parent)
22  , m_pMetaDataStore ("StoreGateSvc/MetaDataStore", name)
23  , m_pInputStore ("StoreGateSvc/InputMetaDataStore", name)
24 {
25  // Here is where we create the LumiBlockRange objects. When we open a
26  // file, we fill the m_cacheInputRangeContainer from the input metadata store.
27  // When the file closes, we move the LumiBlockRange objects to the
28  // m_cacheOutputRangeContainer. Objects in the m_cacheOutputRangeContainer
29  // will be sorted and merged at the end of the job
30  // Note: the Suspect Range objects are kept in separate containers because
31  // once an object is suspect, it remains suspect forever
32  // If a file is only partially read, the objects in the m_cacheInputRangeContainer
33  // will be moved to the m_suspectOutputRangeContainer
34 
39 }
40 
41 //___________________________________________________________________________
43 }
44 
45 //___________________________________________________________________________
47  ATH_MSG_INFO( "in initialize()" );
48 
49  ATH_CHECK( m_pMetaDataStore.retrieve() );
50  ATH_CHECK( m_pInputStore.retrieve() );
51 
52  return(StatusCode::SUCCESS);
53 }
54 
55 //___________________________________________________________________________
57 {
58  std::string fileName = "Undefined ";
59  bool alreadyRecorded=false;
61  alreadyRecorded=true;
62  }
64  alreadyRecorded=true;
65  }
66  m_CurrentFileName = std::move(fileName);
67  if(alreadyRecorded) return StatusCode::SUCCESS;
69  //
70  // Look for LB information on input store and transfer it to temporay cache
71  // ===========================================================================
72 
74  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_LBColl_name);
75  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
77  if (!sc.isSuccess()) {
78  ATH_MSG_INFO( "Could not find unfinished xAOD::LumiBlockRangeContainer in input metadata store" );
79  return StatusCode::SUCCESS;
80  }
81  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
82  for ( const auto* lb : *lbrange ) {
83  m_cacheInputRangeContainer.push_back(std::make_unique<xAOD::LumiBlockRange>(*lb));
84  }
85  }
87  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_unfinishedLBColl_name);
88  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
90  if (!sc.isSuccess()) {
91  ATH_MSG_INFO( "Could not find unfinished xAOD::LumiBlockRangeContainer in input metadata store" );
92  return StatusCode::SUCCESS;
93  }
94  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
95  for ( const auto* lb : *lbrange ) {
96  m_cacheInputRangeContainer.push_back(std::make_unique<xAOD::LumiBlockRange>(*lb));
97  }
98  }
100  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_suspectLBColl_name);
101  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
103  if (!sc.isSuccess()) {
104  ATH_MSG_INFO( "Could not find suspect xAOD::LumiBlockRangeContainer in input metadata store" );
105  return StatusCode::SUCCESS;
106  }
107  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
108  for ( const auto* lb : *lbrange ) {
109  m_cacheSuspectInputRangeContainer.push_back(std::make_unique<xAOD::LumiBlockRange>(*lb));
110  }
111  }
112  return(StatusCode::SUCCESS);
113 }
114 
116 {
117  m_fileCurrentlyOpened=false;
118  for (const auto range : m_cacheInputRangeContainer) {
119  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
120  m_cacheOutputRangeContainer.push_back(std::move(iovr));
121  }
123 
124  for (const auto range : m_cacheSuspectInputRangeContainer) {
125  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
127  }
129  return(StatusCode::SUCCESS);
130 }
131 
133 {
135  ATH_MSG_INFO( "MetaDataStop called when input file open: LumiBlock is suspect" );
136  for (const auto range : m_cacheInputRangeContainer) {
137  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
139  }
141  }
142 
143  ATH_CHECK( finishUp() );
144  return(StatusCode::SUCCESS);
145 }
146 
147 //__________________________________________________________________________
149  //
150  // stop() is called whenever the event loop is finished.
151  // ======================================================
152  ATH_MSG_VERBOSE( " finishUp: write lumiblocks to meta data store " );
153 
154  auto piovComplete = std::make_unique<xAOD::LumiBlockRangeContainer>();
155  auto piovCompleteAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
156  piovComplete->setStore( piovCompleteAux.get() );
157 
158  auto piovUnfinished = std::make_unique<xAOD::LumiBlockRangeContainer>();
159  auto piovUnfinishedAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
160  piovUnfinished->setStore( piovUnfinishedAux.get() );
161 
162  auto piovSuspect = std::make_unique<xAOD::LumiBlockRangeContainer>();
163  auto piovSuspectAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
164  piovSuspect->setStore( piovSuspectAux.get() );
165 
167  ATH_MSG_VERBOSE("Suspect OutputRangeCollection with size " << m_cacheSuspectOutputRangeContainer.size());
168  for (const auto range : m_cacheSuspectOutputRangeContainer) {
169  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
170  piovSuspect->push_back(std::move(iovr));
171  }
172  }
173 
175  ATH_MSG_VERBOSE("OutputRangeCollection with size " << m_cacheOutputRangeContainer.size());
177 
178  // Use tmp collection to do the merging
180  xAOD::LumiBlockRangeAuxContainer tempAuxLBColl;
181  tempLBColl.setStore( &tempAuxLBColl );
182 
183  // Sort and Merge LumiBlockRange objects if necessary
184  // Merge LumiBlockRange objects for same run and lumiblock
188  xAOD::LumiBlockRange* iovr = tempLBColl.push_back(std::make_unique<xAOD::LumiBlockRange>(*(*i)));
189  ATH_MSG_VERBOSE( "Push_back tmpLBColl with run "
190  << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber() << " events seen "
191  << (*ilast)->eventsSeen() << " expected " << (*i)->eventsExpected());
192  ++i;
193  while (i != ie) {
194  if( ((*i)->startRunNumber()==(*ilast)->startRunNumber()) &&
195  ((*i)->stopRunNumber()==(*ilast)->stopRunNumber()) &&
196  ((*i)->startLumiBlockNumber()==(*ilast)->startLumiBlockNumber()) &&
197  ((*i)->stopLumiBlockNumber()==(*ilast)->stopLumiBlockNumber()) ) {
198 
199  if((*ilast)->eventsExpected()!=(*i)->eventsExpected()) {
200  ATH_MSG_WARNING( "Error: tmpLBColl with run " << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber() << " events expected "
201  << (*ilast)->eventsExpected() << " and " << (*i)->eventsExpected() );
202  }
203  else {
204  ATH_MSG_VERBOSE( "Merge Run " << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber()
205  << " events seen " << iovr->eventsSeen() << "+"
206  << (*i)->eventsSeen() << " and events expected "
207  << iovr->eventsExpected() );
208 
209  iovr->setEventsSeen((*i)->eventsSeen()+iovr->eventsSeen());
210  }
211  }
212  else {
213  iovr = tempLBColl.push_back(std::make_unique<xAOD::LumiBlockRange>(*(*i)));
214 
215  ATH_MSG_VERBOSE( "Push_back tmpLBColl with run "
216  << iovr->startRunNumber() << " LB " << iovr->startLumiBlockNumber() << " events seen "
217  << iovr->eventsSeen() << " expected " << iovr->eventsExpected());
218 
219  ilast = i;
220  }
221  ++i;
222  }
223 
224  for (const auto range : tempLBColl) {
225  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
226  if(range->eventsSeen() == range->eventsExpected() ) {
227  piovComplete->push_back(std::move(iovr));
228  }
229  else if(range->eventsSeen() > range->eventsExpected() ) {
230  piovSuspect->push_back(std::move(iovr));
231  }
232  else {
233  piovUnfinished->push_back(std::move(iovr));
234  }
235  }
236  }
237 
238 
239  if(!piovComplete->empty()) {
240  ATH_MSG_DEBUG( "Number of Complete LumiBlocks:" << piovComplete->size() );
241  for (const auto range : *piovComplete) {
242  ATH_MSG_INFO("\t [ ("
243  << range->startRunNumber() << "," << range->startLumiBlockNumber()
244  << "):("
245  << range->startRunNumber() << "," << range->startLumiBlockNumber()
246  << ") eventsSeen = " << range->eventsSeen()
247  << ", eventsExpected = " << range->eventsExpected()
248  << " ]");
249  }
250  }
251 
252  if(!piovUnfinished->empty()) {
253  ATH_MSG_DEBUG( "Number of Unfinished LumiBlocks:" << piovUnfinished->size() );
254  for (const auto range : *piovUnfinished) {
255  ATH_MSG_INFO("\t [ ("
256  << range->startRunNumber() << "," << range->startLumiBlockNumber()
257  << "):("
258  << range->startRunNumber() << "," << range->startLumiBlockNumber()
259  << ") eventsSeen = " << range->eventsSeen()
260  << ", eventsExpected = " << range->eventsExpected()
261  << " ]");
262  }
263  }
264  if(!piovSuspect->empty()) {
265  ATH_MSG_DEBUG( "Number of Suspect LumiBlocks:" << piovSuspect->size() );
266  for (const auto range : *piovSuspect) {
267  ATH_MSG_INFO("\t [ ("
268  << range->startRunNumber() << "," << range->startLumiBlockNumber()
269  << "):("
270  << range->startRunNumber() << "," << range->startLumiBlockNumber()
271  << ") eventsSeen = " << range->eventsSeen()
272  << ", eventsExpected = " << range->eventsExpected()
273  << " ]");
274  }
275  }
276 
277  // Store the LumiBlockRangeContainer in the metadata store
278  // =======================================================
279  if (!piovComplete->empty()) {
280  ATH_MSG_INFO("Write Complete LumiBlocks with size " << piovComplete->size());
281  // Check if we have already written them out
284  "Complete LumiBlocks container with key "
285  << m_LBColl_name
286  << " already exists. Updating if there are missing LumiBlocks.");
287  xAOD::LumiBlockRangeContainer* complete = nullptr;
288  ATH_CHECK(m_pMetaDataStore->retrieve(complete, m_LBColl_name));
289 
290  for (const auto range : *piovComplete) {
291  // Check if this configuration is already in the existing container:
292  bool exists = false;
293  for (const auto existing : *complete) {
294  if ((existing->startRunNumber() == range->startRunNumber()) &&
295  (existing->stopRunNumber() == range->stopRunNumber()) &&
296  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
297  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
298  (existing->eventsSeen() == range->eventsSeen()) &&
299  (existing->eventsExpected() == range->eventsExpected())) {
300  exists = true;
301  break;
302  }
303  }
304  if (exists) {
305  continue;
306  }
307  // New LumiBlock, put it into the output container
308  ATH_MSG_INFO(
309  "Copying LumiBlock: [ ("
310  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
311  << "):(" << range->startRunNumber() << ","
312  << range->stopLumiBlockNumber()
313  << ") eventsSeen = " << range->eventsSeen()
314  << ", eventsExpected = " << range->eventsExpected() << " ]");
315  *complete->push_back(std::make_unique<xAOD::LumiBlockRange>()) = *range;
316  }
317  } else {
318  ATH_MSG_INFO("Recording "
319  << m_LBColl_name
320  << " LumiBlockRangeContainer in output MetaDataStore");
321  ATH_CHECK(m_pMetaDataStore->record(std::move(piovComplete), m_LBColl_name));
322  ATH_CHECK(m_pMetaDataStore->record(std::move(piovCompleteAux), m_LBColl_name + "Aux."));
323  }
324  }
325 
326  if (!piovUnfinished->empty()) {
327  ATH_MSG_INFO("Write Unfinished LumiBlocks with size " << piovUnfinished->size());
328  // Check if we have already written them out
331  "Unfinished LumiBlocks container with key "
333  << " already exists. Updating if there are missing LumiBlocks.");
334  xAOD::LumiBlockRangeContainer* unfinished = nullptr;
335  ATH_CHECK(m_pMetaDataStore->retrieve(unfinished, m_unfinishedLBColl_name));
336 
337  for (const auto range : *piovUnfinished) {
338  // Check if this configuration is already in the existing container:
339  bool exists = false;
340  for (const auto existing : *unfinished) {
341  if ((existing->startRunNumber() == range->startRunNumber()) &&
342  (existing->stopRunNumber() == range->stopRunNumber()) &&
343  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
344  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
345  (existing->eventsSeen() == range->eventsSeen()) &&
346  (existing->eventsExpected() == range->eventsExpected())) {
347  exists = true;
348  break;
349  }
350  }
351  if (exists) {
352  continue;
353  }
354  // New LumiBlock, put it into the output container
355  ATH_MSG_INFO(
356  "Copying LumiBlock: [ ("
357  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
358  << "):(" << range->startRunNumber() << ","
359  << range->stopLumiBlockNumber()
360  << ") eventsSeen = " << range->eventsSeen()
361  << ", eventsExpected = " << range->eventsExpected() << " ]");
362  *unfinished->push_back(std::make_unique<xAOD::LumiBlockRange>()) = *range;
363  }
364  } else {
365  ATH_MSG_INFO("Recording "
367  << " LumiBlockRangeContainer in output MetaDataStore");
368  ATH_CHECK(m_pMetaDataStore->record(std::move(piovUnfinished), m_unfinishedLBColl_name));
369  ATH_CHECK(m_pMetaDataStore->record(std::move(piovUnfinishedAux), m_unfinishedLBColl_name + "Aux."));
370  }
371  }
372 
373  if (!piovSuspect->empty()) {
374  ATH_MSG_INFO("Write Suspect LumiBlocks with size " << piovSuspect->size());
375  // Check if we have already written them out
378  "Suspect LumiBlocks container with key "
380  << " already exists. Updating if there are missing LumiBlocks.");
381  xAOD::LumiBlockRangeContainer* suspect = nullptr;
382  ATH_CHECK(m_pMetaDataStore->retrieve(suspect, m_suspectLBColl_name));
383 
384  for (const auto range : *piovSuspect) {
385  // Check if this configuration is already in the existing container:
386  bool exists = false;
387  for (const auto existing : *suspect) {
388  if ((existing->startRunNumber() == range->startRunNumber()) &&
389  (existing->stopRunNumber() == range->stopRunNumber()) &&
390  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
391  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
392  (existing->eventsSeen() == range->eventsSeen()) &&
393  (existing->eventsExpected() == range->eventsExpected())) {
394  exists = true;
395  break;
396  }
397  }
398  if (exists) {
399  continue;
400  }
401  // New LumiBlock, put it into the output container
402  ATH_MSG_INFO(
403  "Copying LumiBlock: [ ("
404  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
405  << "):(" << range->startRunNumber() << ","
406  << range->stopLumiBlockNumber()
407  << ") eventsSeen = " << range->eventsSeen()
408  << ", eventsExpected = " << range->eventsExpected() << " ]");
409  *suspect->push_back(std::make_unique<xAOD::LumiBlockRange>()) = *range;
410  }
411  } else {
412  ATH_MSG_INFO("Recording "
414  << " LumiBlockRangeContainer in output MetaDataStore");
415  ATH_CHECK(m_pMetaDataStore->record(std::move(piovSuspect), m_suspectLBColl_name));
416  ATH_CHECK(m_pMetaDataStore->record(std::move(piovSuspectAux), m_suspectLBColl_name + "Aux."));
417  }
418  }
419 
420  return(StatusCode::SUCCESS);
421 }
LumiBlockMetaDataTool::m_cacheInputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer m_cacheInputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:67
xAOD::LumiBlockRange_v1::startLumiBlockNumber
uint32_t startLumiBlockNumber() const
Get the luminosity block of the start time of the range.
LumiBlockMetaDataTool::m_CurrentFileName
std::string m_CurrentFileName
Definition: LumiBlockMetaDataTool.h:58
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::LumiBlockRange_v1::eventsSeen
uint32_t eventsSeen() const
Get the number of seen/processed events in this luminosity block range.
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::LumiBlockRange_v1::eventsExpected
uint32_t eventsExpected() const
Get the number of expected events in this luminosity block range.
LumiBlockMetaDataTool::m_cacheInputRangeContainer
xAOD::LumiBlockRangeContainer m_cacheInputRangeContainer
Definition: LumiBlockMetaDataTool.h:66
xAOD::SortLumiBlockRangeByStart
Helper functor used to sort xAOD::LumiBlockRangeContainer-s.
Definition: SortLumiBlockRangeByStart.h:29
xAOD::LumiBlockRangeAuxContainer_v1
Auxiliary container for xAOD::LumiBlockRangeContainer_v1.
Definition: LumiBlockRangeAuxContainer_v1.h:34
LumiBlockMetaDataTool::m_suspectLBColl_name
Gaudi::Property< std::string > m_suspectLBColl_name
Definition: LumiBlockMetaDataTool.h:55
LumiBlockMetaDataTool::m_fileCurrentlyOpened
bool m_fileCurrentlyOpened
Definition: LumiBlockMetaDataTool.h:57
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
LumiBlockMetaDataTool::LumiBlockMetaDataTool
LumiBlockMetaDataTool(const std::string &type, const std::string &name, const IInterface *parent)
The LumiBlockMetaDataTool reads luminosity metadata from input files and transfers it to output files...
Definition: LumiBlockMetaDataTool.cxx:18
LumiBlockMetaDataTool::finishUp
StatusCode finishUp()
Fill metaDataStore and ntuples.
Definition: LumiBlockMetaDataTool.cxx:148
LumiBlockMetaDataTool::m_cacheSuspectInputRangeContainer
xAOD::LumiBlockRangeContainer m_cacheSuspectInputRangeContainer
Definition: LumiBlockMetaDataTool.h:68
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LumiBlockMetaDataTool::m_pInputStore
ServiceHandle< StoreGateSvc > m_pInputStore
Definition: LumiBlockMetaDataTool.h:61
LumiBlockMetaDataTool::m_unfinishedLBColl_name
Gaudi::Property< std::string > m_unfinishedLBColl_name
Definition: LumiBlockMetaDataTool.h:54
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:86
xAOD::LumiBlockRange_v1::startRunNumber
uint32_t startRunNumber() const
Get the run number of the start time of the range.
LumiBlockMetaDataTool::endInputFile
virtual StatusCode endInputFile(const SG::SourceID &) override
Function collecting the metadata from a new input file.
Definition: LumiBlockMetaDataTool.cxx:115
lumiFormat.i
int i
Definition: lumiFormat.py:85
LumiBlockMetaDataTool::m_cacheSuspectInputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer m_cacheSuspectInputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:69
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
LumiBlockMetaDataTool::metaDataStop
virtual StatusCode metaDataStop() override
Function writing the collected metadata to the output.
Definition: LumiBlockMetaDataTool.cxx:132
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::LumiBlockRange_v1::setEventsSeen
void setEventsSeen(uint32_t value)
Set the number of seen/processed events in this luminosity block range.
SortLumiBlockRangeByStart.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
LumiBlockMetaDataTool.h
DataVector::clear
void clear()
Erase all the elements in the collection.
LumiBlockMetaDataTool::~LumiBlockMetaDataTool
virtual ~LumiBlockMetaDataTool()
Definition: LumiBlockMetaDataTool.cxx:42
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
python.output.AtlRunQueryRoot.lbrange
lbrange
Definition: AtlRunQueryRoot.py:989
LumiBlockMetaDataTool::m_cacheOutputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer m_cacheOutputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:73
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
LumiBlockMetaDataTool::m_cacheSuspectOutputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer m_cacheSuspectOutputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:75
LumiBlockMetaDataTool::initialize
virtual StatusCode initialize() override
Definition: LumiBlockMetaDataTool.cxx:46
LumiBlockMetaDataTool::beginInputFile
virtual StatusCode beginInputFile(const SG::SourceID &) override
Function collecting the metadata from a new input file.
Definition: LumiBlockMetaDataTool.cxx:56
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DataVector::sort
void sort()
Sort the container.
ReadBchFromCrest.ie
ie
Definition: ReadBchFromCrest.py:258
xAOD::LumiBlockRange_v1
Class describing a luminosity block range.
Definition: LumiBlockRange_v1.h:33
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LumiBlockMetaDataTool::m_cacheOutputRangeContainer
xAOD::LumiBlockRangeContainer m_cacheOutputRangeContainer
Definition: LumiBlockMetaDataTool.h:72
SG::SourceID
std::string SourceID
Definition: AthenaKernel/AthenaKernel/SourceID.h:25
LumiBlockMetaDataTool::m_LBColl_name
Gaudi::Property< std::string > m_LBColl_name
Definition: LumiBlockMetaDataTool.h:53
jobOptions.fileName
fileName
Definition: jobOptions.SuperChic_ALP2.py:39
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
StoreGateSvc.h
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
LumiBlockMetaDataTool::m_pMetaDataStore
ServiceHandle< StoreGateSvc > m_pMetaDataStore
Definition: LumiBlockMetaDataTool.h:60
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
LumiBlockMetaDataTool::m_cacheSuspectOutputRangeContainer
xAOD::LumiBlockRangeContainer m_cacheSuspectOutputRangeContainer
Definition: LumiBlockMetaDataTool.h:74
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.