ATLAS Offline Software
LumiBlockMetaDataTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "LumiBlockMetaDataTool.h"
14 
16 
17 #include "TROOT.h"
18 
19 #include <algorithm>
20 
21 //___________________________________________________________________________
23  , const std::string& name
24  , const IInterface* parent)
26  , m_pMetaDataStore ("StoreGateSvc/MetaDataStore", name)
27  , m_pInputStore ("StoreGateSvc/InputMetaDataStore", name)
28  , m_fileCurrentlyOpened(false)
29  , m_CurrentFileName("none")
30 {
31  declareInterface<IMetaDataTool>(this);
32 
33  declareProperty("LBCollName",m_LBColl_name = "LumiBlocks");
34  declareProperty("unfinishedLBCollName",m_unfinishedLBColl_name = "IncompleteLumiBlocks");
35  declareProperty("suspectLBCollName", m_suspectLBColl_name="SuspectLumiBlocks");
36 
37  // Here is where we create the LumiBlockRange objects. When we open a
38  // file, we fill the m_cacheInputRangeContainer from the input metadata store.
39  // When the file closes, we move the LumiBlockRange objects to the
40  // m_cacheOutputRangeContainer. Objects in the m_cacheOutputRangeContainer
41  // will be sorted and merged at the end of the job
42  // Note: the Suspect Range objects are kept in separate containers because
43  // once an object is suspect, it remains suspect forever
44  // If a file is only partially read, the objects in the m_cacheInputRangeContainer
45  // will be moved to the m_suspectOutputRangeContainer
46 
50 
54 
58 
62 }
63 
64 //___________________________________________________________________________
70 
75 }
76 
77 //___________________________________________________________________________
79  ATH_MSG_INFO( "in initialize()" );
80 
81  ATH_CHECK( m_pMetaDataStore.retrieve() );
82  ATH_CHECK( m_pInputStore.retrieve() );
83 
84  return(StatusCode::SUCCESS);
85 }
86 //___________________________________________________________________________
88  return(StatusCode::SUCCESS);
89 }
90 
92 {
93  std::string fileName = "Undefined ";
94  bool alreadyRecorded=false;
96  alreadyRecorded=true;
97  }
99  alreadyRecorded=true;
100  }
102  if(alreadyRecorded) return StatusCode::SUCCESS;
104  //
105  // Look for LB information on input store and transfer it to temporay cache
106  // ===========================================================================
107 
109  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_LBColl_name);
110  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
112  if (!sc.isSuccess()) {
113  ATH_MSG_INFO( "Could not find unfinished xAOD::LumiBlockRangeContainer in input metadata store" );
114  return StatusCode::SUCCESS;
115  }
116  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
117  for ( const auto* lb : *lbrange ) {
120  }
121  }
123  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_unfinishedLBColl_name);
124  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
126  if (!sc.isSuccess()) {
127  ATH_MSG_INFO( "Could not find unfinished xAOD::LumiBlockRangeContainer in input metadata store" );
128  return StatusCode::SUCCESS;
129  }
130  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
131  for ( const auto* lb : *lbrange ) {
134  }
135  }
137  ATH_MSG_INFO(" Contains xAOD::LumiBlockRangeContainer " << m_suspectLBColl_name);
138  const xAOD::LumiBlockRangeContainer* lbrange =nullptr;
140  if (!sc.isSuccess()) {
141  ATH_MSG_INFO( "Could not find suspect xAOD::LumiBlockRangeContainer in input metadata store" );
142  return StatusCode::SUCCESS;
143  }
144  ATH_MSG_INFO( "xAOD::LumiBlockRangeContainer size" << lbrange->size() );
145  for ( const auto* lb : *lbrange ) {
148  }
149  }
150  return(StatusCode::SUCCESS);
151 }
152 
154 {
155  m_fileCurrentlyOpened=false;
156  for (const auto range : *m_cacheInputRangeContainer) {
157  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
158  m_cacheOutputRangeContainer->push_back(std::move(iovr));
159  }
161 
162  for (const auto range : *m_cacheSuspectInputRangeContainer) {
163  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
165  }
167  return(StatusCode::SUCCESS);
168 }
169 
171 {
173  ATH_MSG_INFO( "MetaDataStop called when input file open: LumiBlock is suspect" );
174  for (const auto range : *m_cacheInputRangeContainer) {
175  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
177  }
179  }
180 
181  ATH_CHECK( finishUp() );
182  return(StatusCode::SUCCESS);
183 }
184 
185 //__________________________________________________________________________
187  //
188  // stop() is called whenever the event loop is finished.
189  // ======================================================
190  ATH_MSG_VERBOSE( " finishUp: write lumiblocks to meta data store " );
191 
192  auto piovComplete = std::make_unique<xAOD::LumiBlockRangeContainer>();
193  auto piovCompleteAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
194  piovComplete->setStore( piovCompleteAux.get() );
195 
196  auto piovUnfinished = std::make_unique<xAOD::LumiBlockRangeContainer>();
197  auto piovUnfinishedAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
198  piovUnfinished->setStore( piovUnfinishedAux.get() );
199 
200  auto piovSuspect = std::make_unique<xAOD::LumiBlockRangeContainer>();
201  auto piovSuspectAux = std::make_unique<xAOD::LumiBlockRangeAuxContainer>();
202  piovSuspect->setStore( piovSuspectAux.get() );
203 
205  ATH_MSG_VERBOSE("Suspect OutputRangeCollection with size " << m_cacheSuspectOutputRangeContainer->size());
206  for (const auto range : *m_cacheSuspectOutputRangeContainer) {
207  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
208  piovSuspect->push_back(std::move(iovr));
209  }
210  }
211 
213  ATH_MSG_VERBOSE("OutputRangeCollection with size " << m_cacheOutputRangeContainer->size());
215 
216  // Use tmp collection to do the merging
219  tempLBColl.setStore( p_tempAuxLBColl );
220 
221  // Sort and Merge LumiBlockRange objects if necessary
222  // Merge LumiBlockRange objects for same run and lumiblock
227  tempLBColl.push_back(iovr);
228  ATH_MSG_VERBOSE( "Push_back tmpLBColl with run "
229  << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber() << " events seen "
230  << (*ilast)->eventsSeen() << " expected " << (*i)->eventsExpected());
231  ++i;
232  while (i != ie) {
233  if( ((*i)->startRunNumber()==(*ilast)->startRunNumber()) &&
234  ((*i)->stopRunNumber()==(*ilast)->stopRunNumber()) &&
235  ((*i)->startLumiBlockNumber()==(*ilast)->startLumiBlockNumber()) &&
236  ((*i)->stopLumiBlockNumber()==(*ilast)->stopLumiBlockNumber()) ) {
237 
238  if((*ilast)->eventsExpected()!=(*i)->eventsExpected()) {
239  ATH_MSG_WARNING( "Error: tmpLBColl with run " << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber() << " events expected "
240  << (*ilast)->eventsExpected() << " and " << (*i)->eventsExpected() );
241  }
242  else {
243  ATH_MSG_VERBOSE( "Merge Run " << (*i)->startRunNumber() << " LB " << (*i)->startLumiBlockNumber()
244  << " events seen " << iovr->eventsSeen() << "+"
245  << (*i)->eventsSeen() << " and events expected "
246  << iovr->eventsExpected() );
247 
248  iovr->setEventsSeen((*i)->eventsSeen()+iovr->eventsSeen());
249  }
250  }
251  else {
252  iovr = new xAOD::LumiBlockRange(*(*i));
253 
254  ATH_MSG_VERBOSE( "Push_back tmpLBColl with run "
255  << iovr->startRunNumber() << " LB " << iovr->startLumiBlockNumber() << " events seen "
256  << iovr->eventsSeen() << " expected " << iovr->eventsExpected());
257 
258  tempLBColl.push_back(iovr);
259  ilast = i;
260  }
261  ++i;
262  }
263 
264  for (const auto range : tempLBColl) {
265  auto iovr = std::make_unique<xAOD::LumiBlockRange>(*range);
266  if(range->eventsSeen() == range->eventsExpected() ) {
267  piovComplete->push_back(std::move(iovr));
268  }
269  else if(range->eventsSeen() > range->eventsExpected() ) {
270  piovSuspect->push_back(std::move(iovr));
271  }
272  else {
273  piovUnfinished->push_back(std::move(iovr));
274  }
275  }
276  }
277 
278 
279  if(!piovComplete->empty()) {
280  ATH_MSG_DEBUG( "Number of Complete LumiBlocks:" << piovComplete->size() );
281  for (const auto range : *piovComplete) {
282  ATH_MSG_INFO("\t [ ("
283  << range->startRunNumber() << "," << range->startLumiBlockNumber()
284  << "):("
285  << range->startRunNumber() << "," << range->startLumiBlockNumber()
286  << ") eventsSeen = " << range->eventsSeen()
287  << ", eventsExpected = " << range->eventsExpected()
288  << " ]");
289  }
290  }
291 
292  if(!piovUnfinished->empty()) {
293  ATH_MSG_DEBUG( "Number of Unfinished LumiBlocks:" << piovUnfinished->size() );
294  for (const auto range : *piovUnfinished) {
295  ATH_MSG_INFO("\t [ ("
296  << range->startRunNumber() << "," << range->startLumiBlockNumber()
297  << "):("
298  << range->startRunNumber() << "," << range->startLumiBlockNumber()
299  << ") eventsSeen = " << range->eventsSeen()
300  << ", eventsExpected = " << range->eventsExpected()
301  << " ]");
302  }
303  }
304  if(!piovSuspect->empty()) {
305  ATH_MSG_DEBUG( "Number of Suspect LumiBlocks:" << piovSuspect->size() );
306  for (const auto range : *piovSuspect) {
307  ATH_MSG_INFO("\t [ ("
308  << range->startRunNumber() << "," << range->startLumiBlockNumber()
309  << "):("
310  << range->startRunNumber() << "," << range->startLumiBlockNumber()
311  << ") eventsSeen = " << range->eventsSeen()
312  << ", eventsExpected = " << range->eventsExpected()
313  << " ]");
314  }
315  }
316 
317  // Store the LumiBlockRangeContainer in the metadata store
318  // =======================================================
319  if (!piovComplete->empty()) {
320  ATH_MSG_INFO("Write Complete LumiBlocks with size " << piovComplete->size());
321  // Check if we have already written them out
324  "Complete LumiBlocks container with key "
325  << m_LBColl_name
326  << " already exists. Updating if there are missing LumiBlocks.");
327  xAOD::LumiBlockRangeContainer* complete = nullptr;
328  ATH_CHECK(m_pMetaDataStore->retrieve(complete, m_LBColl_name));
329 
330  for (const auto range : *piovComplete) {
331  // Check if this configuration is already in the existing container:
332  bool exists = false;
333  for (const auto existing : *complete) {
334  if ((existing->startRunNumber() == range->startRunNumber()) &&
335  (existing->stopRunNumber() == range->stopRunNumber()) &&
336  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
337  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
338  (existing->eventsSeen() == range->eventsSeen()) &&
339  (existing->eventsExpected() == range->eventsExpected())) {
340  exists = true;
341  break;
342  }
343  }
344  if (exists) {
345  continue;
346  }
347  // New LumiBlock, put it into the output container
348  ATH_MSG_INFO(
349  "Copying LumiBlock: [ ("
350  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
351  << "):(" << range->startRunNumber() << ","
352  << range->stopLumiBlockNumber()
353  << ") eventsSeen = " << range->eventsSeen()
354  << ", eventsExpected = " << range->eventsExpected() << " ]");
356  complete->push_back(out);
357  *out = *range;
358  }
359  } else {
360  ATH_MSG_INFO("Recording "
361  << m_LBColl_name
362  << " LumiBlockRangeContainer in output MetaDataStore");
363  ATH_CHECK(m_pMetaDataStore->record(std::move(piovComplete), m_LBColl_name));
364  ATH_CHECK(m_pMetaDataStore->record(std::move(piovCompleteAux), m_LBColl_name + "Aux."));
365  }
366  }
367 
368  if (!piovUnfinished->empty()) {
369  ATH_MSG_INFO("Write Unfinished LumiBlocks with size " << piovUnfinished->size());
370  // Check if we have already written them out
373  "Unfinished LumiBlocks container with key "
375  << " already exists. Updating if there are missing LumiBlocks.");
376  xAOD::LumiBlockRangeContainer* unfinished = nullptr;
377  ATH_CHECK(m_pMetaDataStore->retrieve(unfinished, m_unfinishedLBColl_name));
378 
379  for (const auto range : *piovUnfinished) {
380  // Check if this configuration is already in the existing container:
381  bool exists = false;
382  for (const auto existing : *unfinished) {
383  if ((existing->startRunNumber() == range->startRunNumber()) &&
384  (existing->stopRunNumber() == range->stopRunNumber()) &&
385  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
386  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
387  (existing->eventsSeen() == range->eventsSeen()) &&
388  (existing->eventsExpected() == range->eventsExpected())) {
389  exists = true;
390  break;
391  }
392  }
393  if (exists) {
394  continue;
395  }
396  // New LumiBlock, put it into the output container
397  ATH_MSG_INFO(
398  "Copying LumiBlock: [ ("
399  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
400  << "):(" << range->startRunNumber() << ","
401  << range->stopLumiBlockNumber()
402  << ") eventsSeen = " << range->eventsSeen()
403  << ", eventsExpected = " << range->eventsExpected() << " ]");
405  unfinished->push_back(out);
406  *out = *range;
407  }
408  } else {
409  ATH_MSG_INFO("Recording "
411  << " LumiBlockRangeContainer in output MetaDataStore");
412  ATH_CHECK(m_pMetaDataStore->record(std::move(piovUnfinished), m_unfinishedLBColl_name));
413  ATH_CHECK(m_pMetaDataStore->record(std::move(piovUnfinishedAux), m_unfinishedLBColl_name + "Aux."));
414  }
415  }
416 
417  if (!piovSuspect->empty()) {
418  ATH_MSG_INFO("Write Suspect LumiBlocks with size " << piovSuspect->size());
419  // Check if we have already written them out
422  "Suspect LumiBlocks container with key "
424  << " already exists. Updating if there are missing LumiBlocks.");
425  xAOD::LumiBlockRangeContainer* suspect = nullptr;
426  ATH_CHECK(m_pMetaDataStore->retrieve(suspect, m_suspectLBColl_name));
427 
428  for (const auto range : *piovSuspect) {
429  // Check if this configuration is already in the existing container:
430  bool exists = false;
431  for (const auto existing : *suspect) {
432  if ((existing->startRunNumber() == range->startRunNumber()) &&
433  (existing->stopRunNumber() == range->stopRunNumber()) &&
434  (existing->startLumiBlockNumber() == range->startLumiBlockNumber()) &&
435  (existing->stopLumiBlockNumber() == range->stopLumiBlockNumber()) &&
436  (existing->eventsSeen() == range->eventsSeen()) &&
437  (existing->eventsExpected() == range->eventsExpected())) {
438  exists = true;
439  break;
440  }
441  }
442  if (exists) {
443  continue;
444  }
445  // New LumiBlock, put it into the output container
446  ATH_MSG_INFO(
447  "Copying LumiBlock: [ ("
448  << range->startRunNumber() << "," << range->stopLumiBlockNumber()
449  << "):(" << range->startRunNumber() << ","
450  << range->stopLumiBlockNumber()
451  << ") eventsSeen = " << range->eventsSeen()
452  << ", eventsExpected = " << range->eventsExpected() << " ]");
454  suspect->push_back(out);
455  *out = *range;
456  }
457  } else {
458  ATH_MSG_INFO("Recording "
460  << " LumiBlockRangeContainer in output MetaDataStore");
461  ATH_CHECK(m_pMetaDataStore->record(std::move(piovSuspect), m_suspectLBColl_name));
462  ATH_CHECK(m_pMetaDataStore->record(std::move(piovSuspectAux), m_suspectLBColl_name + "Aux."));
463  }
464  }
465 
466  return(StatusCode::SUCCESS);
467 }
TGoodRunsList.h
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:79
LumiBlockMetaDataTool::m_cacheSuspectInputRangeContainer
xAOD::LumiBlockRangeContainer * m_cacheSuspectInputRangeContainer
Definition: LumiBlockMetaDataTool.h:65
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
LumiBlockMetaDataTool::m_cacheInputRangeContainer
xAOD::LumiBlockRangeContainer * m_cacheInputRangeContainer
Definition: LumiBlockMetaDataTool.h:63
xAOD::LumiBlockRange_v1::eventsExpected
uint32_t eventsExpected() const
Get the number of expected events in this luminosity block range.
xAOD::SortLumiBlockRangeByStart
Helper functor used to sort xAOD::LumiBlockRangeContainer-s.
Definition: SortLumiBlockRangeByStart.h:29
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
IGoodRunsListSelectorTool.h
LumiBlockMetaDataTool::m_cacheSuspectInputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer * m_cacheSuspectInputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:66
xAOD::LumiBlockRangeAuxContainer_v1
Auxiliary container for xAOD::LumiBlockRangeContainer_v1.
Definition: LumiBlockRangeAuxContainer_v1.h:34
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
LumiBlockMetaDataTool::m_cacheSuspectOutputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer * m_cacheSuspectOutputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:72
LumiBlockMetaDataTool::m_fileCurrentlyOpened
bool m_fileCurrentlyOpened
Definition: LumiBlockMetaDataTool.h:78
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:22
LumiBlockMetaDataTool::finishUp
StatusCode finishUp()
Fill metaDataStore and ntuples.
Definition: LumiBlockMetaDataTool.cxx:186
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
PlotCalibFromCool.ie
ie
Definition: PlotCalibFromCool.py:420
xAOD::LumiBlockRangeContainer
LumiBlockRangeContainer_v1 LumiBlockRangeContainer
Declare the latest version of the container.
Definition: LumiBlockRangeContainer.h:17
xAOD::LumiBlockRange
LumiBlockRange_v1 LumiBlockRange
Declare the latest version of the class.
Definition: LumiBlockRange.h:16
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:88
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:153
LumiBlockMetaDataTool::m_LBColl_name
std::string m_LBColl_name
Definition: LumiBlockMetaDataTool.h:74
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
xAOD::LumiBlockRangeAuxContainer
LumiBlockRangeAuxContainer_v1 LumiBlockRangeAuxContainer
Declare the latest version of the auxiliary container.
Definition: LumiBlockRangeAuxContainer.h:16
LumiBlockMetaDataTool::m_cacheOutputRangeContainer
xAOD::LumiBlockRangeContainer * m_cacheOutputRangeContainer
Definition: LumiBlockMetaDataTool.h:69
LumiBlockMetaDataTool::m_pMetaDataStore
StoreGateSvc_t m_pMetaDataStore
Definition: LumiBlockMetaDataTool.h:57
LumiBlockMetaDataTool::metaDataStop
virtual StatusCode metaDataStop() override
Function writing the collected metadata to the output.
Definition: LumiBlockMetaDataTool.cxx:170
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
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:581
LumiBlockMetaDataTool.h
DataVector::clear
void clear()
Erase all the elements in the collection.
LumiBlockMetaDataTool::~LumiBlockMetaDataTool
virtual ~LumiBlockMetaDataTool()
Definition: LumiBlockMetaDataTool.cxx:65
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
python.output.AtlRunQueryRoot.lbrange
lbrange
Definition: AtlRunQueryRoot.py:989
LumiBlockMetaDataTool::m_cacheOutputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer * m_cacheOutputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:70
LumiBlockMetaDataTool::finalize
virtual StatusCode finalize() override
Definition: LumiBlockMetaDataTool.cxx:87
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
LumiBlockMetaDataTool::m_cacheInputRangeAuxContainer
xAOD::LumiBlockRangeAuxContainer * m_cacheInputRangeAuxContainer
Definition: LumiBlockMetaDataTool.h:64
TGoodRunsListReader.h
LumiBlockMetaDataTool::initialize
virtual StatusCode initialize() override
Definition: LumiBlockMetaDataTool.cxx:78
LumiBlockMetaDataTool::beginInputFile
virtual StatusCode beginInputFile(const SG::SourceID &) override
Function collecting the metadata from a new input file.
Definition: LumiBlockMetaDataTool.cxx:91
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.
LumiBlockMetaDataTool::m_unfinishedLBColl_name
std::string m_unfinishedLBColl_name
Definition: LumiBlockMetaDataTool.h:75
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
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
SG::SourceID
std::string SourceID
Definition: AthenaKernel/AthenaKernel/SourceID.h:23
LumiBlockMetaDataTool::m_suspectLBColl_name
std::string m_suspectLBColl_name
Definition: LumiBlockMetaDataTool.h:76
LumiBlockMetaDataTool::m_cacheSuspectOutputRangeContainer
xAOD::LumiBlockRangeContainer * m_cacheSuspectOutputRangeContainer
Definition: LumiBlockMetaDataTool.h:71
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
AthAlgTool
Definition: AthAlgTool.h:26
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
LumiBlockMetaDataTool::m_pInputStore
StoreGateSvc_t m_pInputStore
Definition: LumiBlockMetaDataTool.h:58