CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
TestProcessor.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Subsystem/Package
4 // Class : TestProcessor
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Chris Jones
10 // Created: Mon, 30 Apr 2018 18:51:08 GMT
11 //
12 
13 // system include files
14 
15 // user include files
18 
36 
39 
42 
46 
48 
50 
52 
53 #define xstr(s) str(s)
54 #define str(s) #s
55 
56 namespace edm {
57  namespace test {
58 
59  namespace {
60 
61  bool oneTimeInitializationImpl() {
63 
64  static std::unique_ptr<edm::ThreadsController> tsiPtr = std::make_unique<edm::ThreadsController>(1);
65 
66  // register the empty parentage vector , once and for all
68 
69  // register the empty parameter set, once and for all.
70  ParameterSet().registerIt();
71  return true;
72  }
73 
74  bool oneTimeInitialization() {
75  static const bool s_init{oneTimeInitializationImpl()};
76  return s_init;
77  }
78  } // namespace
79 
80  //
81  // constructors and destructor
82  //
84  : globalControl_(oneapi::tbb::global_control::max_allowed_parallelism, 1),
85  arena_(1),
86  espController_(std::make_unique<eventsetup::EventSetupsController>()),
87  historyAppender_(std::make_unique<HistoryAppender>()),
88  moduleRegistry_(std::make_shared<ModuleRegistry>()) {
89  //Setup various singletons
90  (void)oneTimeInitialization();
91 
93 
94  auto psetPtr = desc.parameterSet();
95 
96  validateTopLevelParameterSets(psetPtr.get());
97 
99 
100  labelOfTestModule_ = psetPtr->getParameter<std::string>("@moduleToTest");
101 
102  auto procDesc = desc.processDesc();
103  // Now do general initialization
105 
106  //initialize the services
107  auto& serviceSets = procDesc->getServicesPSets();
108  ServiceToken token = items.initServices(serviceSets, *psetPtr, iToken, serviceregistry::kOverlapIsError, true);
109  serviceToken_ = items.addCPRandTNS(*psetPtr, token);
110 
111  //make the services available
113 
114  // intialize miscellaneous items
115  std::shared_ptr<CommonParams> common(items.initMisc(*psetPtr));
116 
117  // intialize the event setup provider
118  esp_ = espController_->makeProvider(*psetPtr, items.actReg_.get());
119 
120  auto nThreads = 1U;
121  auto nStreams = 1U;
122  auto nConcurrentLumis = 1U;
123  auto nConcurrentRuns = 1U;
124  preallocations_ = PreallocationConfiguration{nThreads, nStreams, nConcurrentLumis, nConcurrentRuns};
125 
126  if (not iConfig.esProduceEntries().empty()) {
127  esHelper_ = std::make_unique<EventSetupTestHelper>(iConfig.esProduceEntries());
128  esp_->add(std::dynamic_pointer_cast<eventsetup::DataProxyProvider>(esHelper_));
129  esp_->add(std::dynamic_pointer_cast<EventSetupRecordIntervalFinder>(esHelper_));
130  }
131 
132  preg_ = items.preg();
134 
135  edm::ParameterSet emptyPSet;
136  emptyPSet.registerIt();
137  auto psetid = emptyPSet.id();
138 
139  ProcessHistory oldHistory;
140  for (auto const& p : iConfig.extraProcesses()) {
141  oldHistory.emplace_back(p, psetid, xstr(PROJECT_VERSION), "0");
143  }
144 
145  //setup the products we will be adding to the event
146  for (auto const& produce : iConfig.produceEntries()) {
147  auto processName = produce.processName_;
148  if (processName.empty()) {
149  processName = processConfiguration_->processName();
150  }
151  edm::TypeWithDict twd(produce.type_.typeInfo());
153  produce.moduleLabel_,
154  processName,
155  twd.userClassName(),
156  twd.friendlyClassName(),
157  produce.instanceLabel_,
158  "",
159  psetid,
160  twd,
161  true //force this to come from 'source'
162  );
163  product.init();
164  dataProducts_.emplace_back(product, std::unique_ptr<WrapperBase>());
165  preg_->addProduct(product);
166  }
167 
168  processBlockHelper_ = std::make_shared<ProcessBlockHelper>();
169 
171  // set the data members
173  actReg_ = items.actReg_;
178 
180 
181  preg_->setFrozen();
182  for (unsigned int index = 0; index < preallocations_.numberOfStreams(); ++index) {
183  // Reusable event principal
184  auto ep = std::make_shared<EventPrincipal>(preg_,
188  historyAppender_.get(),
189  index);
191  }
192 
193  for (unsigned int index = 0; index < preallocations_.numberOfLuminosityBlocks(); ++index) {
194  auto lp =
195  std::make_unique<LuminosityBlockPrincipal>(preg_, *processConfiguration_, historyAppender_.get(), index);
197  }
198  {
199  auto pb = std::make_unique<ProcessBlockPrincipal>(preg_, *processConfiguration_);
201  }
202  }
203 
205  //
206  // member functions
207  //
208 
209  void TestProcessor::put(unsigned int index, std::unique_ptr<WrapperBase> iWrapper) {
210  if (index >= dataProducts_.size()) {
211  throw cms::Exception("LogicError") << "Products must be declared to the TestProcessor::Config object\n"
212  "with a call to the function \'produces\' BEFORE passing the\n"
213  "TestProcessor::Config object to the TestProcessor constructor";
214  }
215  dataProducts_[index].second = std::move(iWrapper);
216  }
217 
219  bool result = arena_.execute([this]() {
220  setupProcessing();
221  event();
222 
223  return schedule_->totalEventsPassed() > 0;
224  });
225  schedule_->clearCounters();
226  if (esHelper_) {
227  //We want each test to have its own ES data products
228  esHelper_->resetAllProxies();
229  }
230  return edm::test::Event(
232  }
233 
235  arena_.execute([this, iNum]() {
236  if (not beginJobCalled_) {
237  beginJob();
238  }
239  if (not beginProcessBlockCalled_) {
241  }
242  if (not beginRunCalled_) {
243  beginRun();
244  }
245  if (beginLumiCalled_) {
247  assert(lumiNumber_ != iNum);
248  }
249  lumiNumber_ = iNum;
251  });
252 
253  if (esHelper_) {
254  //We want each test to have its own ES data products
255  esHelper_->resetAllProxies();
256  }
257 
259  }
260 
262  //using a return value from arena_.execute lead to double delete of shared_ptr
263  // based on valgrind output when exception occurred. Use lambda capture instead.
264  std::shared_ptr<edm::LuminosityBlockPrincipal> lumi;
265  arena_.execute([this, &lumi]() {
266  if (not beginJobCalled_) {
267  beginJob();
268  }
269  if (not beginProcessBlockCalled_) {
271  }
272  if (not beginRunCalled_) {
273  beginRun();
274  }
275  if (not beginLumiCalled_) {
277  }
278  lumi = endLuminosityBlock();
279  });
280  if (esHelper_) {
281  //We want each test to have its own ES data products
282  esHelper_->resetAllProxies();
283  }
284 
286  }
287 
289  arena_.execute([this, iNum]() {
290  if (not beginJobCalled_) {
291  beginJob();
292  }
293  if (not beginProcessBlockCalled_) {
295  }
296  if (beginRunCalled_) {
297  assert(runNumber_ != iNum);
298  endRun();
299  }
300  runNumber_ = iNum;
301  beginRun();
302  });
303  if (esHelper_) {
304  //We want each test to have its own ES data products
305  esHelper_->resetAllProxies();
306  }
307 
308  return edm::test::Run(
310  }
312  //using a return value from arena_.execute lead to double delete of shared_ptr
313  // based on valgrind output when exception occurred. Use lambda capture instead.
314  std::shared_ptr<edm::RunPrincipal> rp;
315  arena_.execute([this, &rp]() {
316  if (not beginJobCalled_) {
317  beginJob();
318  }
319  if (not beginProcessBlockCalled_) {
321  }
322  if (not beginRunCalled_) {
323  beginRun();
324  }
325  rp = endRun();
326  });
327  if (esHelper_) {
328  //We want each test to have its own ES data products
329  esHelper_->resetAllProxies();
330  }
331 
332  return edm::test::Run(rp, labelOfTestModule_, processConfiguration_->processName());
333  }
334 
336  arena_.execute([this]() {
337  if (not beginJobCalled_) {
338  beginJob();
339  }
341  });
344  }
346  auto pbp = arena_.execute([this]() {
347  if (not beginJobCalled_) {
348  beginJob();
349  }
350  if (not beginProcessBlockCalled_) {
352  }
353  return endProcessBlock();
354  });
356  }
357 
359  if (not beginJobCalled_) {
360  beginJob();
361  }
362  if (not beginProcessBlockCalled_) {
364  }
365  if (not beginRunCalled_) {
366  beginRun();
367  }
368  if (not beginLumiCalled_) {
370  }
371  }
372 
374  arena_.execute([this]() {
375  if (beginLumiCalled_) {
377  beginLumiCalled_ = false;
378  }
379  if (beginRunCalled_) {
380  endRun();
381  beginRunCalled_ = false;
382  }
384  endProcessBlock();
385  beginProcessBlockCalled_ = false;
386  }
387  if (beginJobCalled_) {
388  endJob();
389  }
391  espController_->endIOVsAsync(edm::WaitingTaskHolder(taskGroup_, &task));
392  do {
393  taskGroup_.wait();
394  } while (not task.done());
395  });
396  }
397 
400 
405  actReg_->preallocateSignal_(bounds);
406  schedule_->convertCurrentProcessAlias(processConfiguration_->processName());
407  PathsAndConsumesOfModules pathsAndConsumesOfModules;
408 
409  //The code assumes only modules make data in the current process
410  // Since the test os also allowed to do so, it can lead to problems.
411  //pathsAndConsumesOfModules.initialize(schedule_.get(), preg_);
412 
413  //NOTE: this may throw
414  //checkForModuleDependencyCorrectness(pathsAndConsumesOfModules, false);
415  actReg_->preBeginJobSignal_(pathsAndConsumesOfModules, processContext_);
416 
417  espController_->finishConfiguration();
418 
419  schedule_->beginJob(*preg_, esp_->recordsToProxyIndices(), *processBlockHelper_);
420  actReg_->postBeginJobSignal_();
421 
422  for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) {
423  schedule_->beginStream(i);
424  }
425  beginJobCalled_ = true;
426  }
427 
430  processBlockPrincipal.fillProcessBlockPrincipal(processConfiguration_->processName());
431 
432  std::vector<edm::SubProcess> emptyList;
433  {
434  ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal);
436  FinalWaitingTask globalWaitTask;
437  beginGlobalTransitionAsync<Traits>(
438  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
439  do {
440  taskGroup_.wait();
441  } while (not globalWaitTask.done());
442  if (globalWaitTask.exceptionPtr() != nullptr) {
443  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
444  }
445  }
447  }
448 
450  ProcessHistoryID phid;
451  auto aux = std::make_shared<RunAuxiliary>(runNumber_, Timestamp(), Timestamp());
452  auto rp = std::make_shared<RunPrincipal>(aux, preg_, *processConfiguration_, historyAppender_.get(), 0);
453 
455  RunPrincipal& runPrincipal = principalCache_.runPrincipal(phid, runNumber_);
456 
457  IOVSyncValue ts(EventID(runPrincipal.run(), 0, 0), runPrincipal.beginTime());
459 
460  auto const& es = esp_->eventSetupImpl();
461 
462  RunTransitionInfo transitionInfo(runPrincipal, es);
463 
464  std::vector<edm::SubProcess> emptyList;
465  {
467  FinalWaitingTask globalWaitTask;
468  beginGlobalTransitionAsync<Traits>(
469  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
470  do {
471  taskGroup_.wait();
472  } while (not globalWaitTask.done());
473  if (globalWaitTask.exceptionPtr() != nullptr) {
474  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
475  }
476  }
477  {
478  //To wait, the ref count has to be 1+#streams
479  FinalWaitingTask streamLoopWaitTask;
480 
482  beginStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
483  *schedule_,
485  transitionInfo,
487  emptyList);
488 
489  do {
490  taskGroup_.wait();
491  } while (not streamLoopWaitTask.done());
492  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
493  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
494  }
495  }
496  beginRunCalled_ = true;
497  }
498 
502  lumiPrincipal_->clearPrincipal();
504  lumiPrincipal_->setAux(aux);
505 
506  lumiPrincipal_->setRunPrincipal(principalCache_.runPrincipalPtr());
507 
510 
511  auto const& es = esp_->eventSetupImpl();
512 
513  LumiTransitionInfo transitionInfo(*lumiPrincipal_, es, nullptr);
514 
515  std::vector<edm::SubProcess> emptyList;
516  {
518  FinalWaitingTask globalWaitTask;
519  beginGlobalTransitionAsync<Traits>(
520  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
521  do {
522  taskGroup_.wait();
523  } while (not globalWaitTask.done());
524  if (globalWaitTask.exceptionPtr() != nullptr) {
525  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
526  }
527  }
528  {
529  //To wait, the ref count has to be 1+#streams
530  FinalWaitingTask streamLoopWaitTask;
531 
533 
534  beginStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
535  *schedule_,
537  transitionInfo,
539  emptyList);
540 
541  do {
542  taskGroup_.wait();
543  } while (not streamLoopWaitTask.done());
544  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
545  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
546  }
547  }
548  beginLumiCalled_ = true;
549  }
550 
552  auto pep = &(principalCache_.eventPrincipal(0));
553 
554  //this resets the EventPrincipal (if it had been used before)
555  pep->clearEventPrincipal();
556  pep->fillEventPrincipal(
558  nullptr,
559  nullptr);
560  assert(lumiPrincipal_.get() != nullptr);
561  pep->setLuminosityBlockPrincipal(lumiPrincipal_.get());
562 
563  for (auto& p : dataProducts_) {
564  if (p.second) {
565  pep->put(p.first, std::move(p.second), ProductProvenance(p.first.branchID()));
566  } else {
567  //The data product was not set so we need to
568  // tell the ProductResolver not to wait
569  auto r = pep->getProductResolver(p.first.branchID());
570  dynamic_cast<ProductPutterBase const*>(r)->putProduct(std::unique_ptr<WrapperBase>());
571  }
572  }
573 
575 
576  FinalWaitingTask waitTask;
577 
578  EventTransitionInfo info(*pep, esp_->eventSetupImpl());
579  schedule_->processOneEventAsync(edm::WaitingTaskHolder(taskGroup_, &waitTask), 0, info, serviceToken_);
580 
581  do {
582  taskGroup_.wait();
583  } while (not waitTask.done());
584  if (waitTask.exceptionPtr() != nullptr) {
585  std::rethrow_exception(*(waitTask.exceptionPtr()));
586  }
587  ++eventNumber_;
588  }
589 
590  std::shared_ptr<LuminosityBlockPrincipal> TestProcessor::endLuminosityBlock() {
591  auto lumiPrincipal = lumiPrincipal_;
592  if (beginLumiCalled_) {
593  beginLumiCalled_ = false;
594  lumiPrincipal_.reset();
595 
596  IOVSyncValue ts(EventID(runNumber_, lumiNumber_, eventNumber_), lumiPrincipal->endTime());
598 
599  auto const& es = esp_->eventSetupImpl();
600 
601  LumiTransitionInfo transitionInfo(*lumiPrincipal, es, nullptr);
602 
603  std::vector<edm::SubProcess> emptyList;
604 
605  //To wait, the ref count has to be 1+#streams
606  {
607  FinalWaitingTask streamLoopWaitTask;
608 
610 
611  endStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
612  *schedule_,
614  transitionInfo,
616  emptyList,
617  false);
618 
619  do {
620  taskGroup_.wait();
621  } while (not streamLoopWaitTask.done());
622  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
623  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
624  }
625  }
626  {
627  FinalWaitingTask globalWaitTask;
628 
630  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
631  *schedule_,
632  transitionInfo,
634  emptyList,
635  false);
636  do {
637  taskGroup_.wait();
638  } while (not globalWaitTask.done());
639  if (globalWaitTask.exceptionPtr() != nullptr) {
640  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
641  }
642  }
643  }
644  return lumiPrincipal;
645  }
646 
647  std::shared_ptr<edm::RunPrincipal> TestProcessor::endRun() {
648  std::shared_ptr<RunPrincipal> rp;
649  if (beginRunCalled_) {
650  beginRunCalled_ = false;
651  ProcessHistoryID phid;
653  RunPrincipal& runPrincipal = *rp;
654 
655  IOVSyncValue ts(
657  runPrincipal.endTime());
659 
660  auto const& es = esp_->eventSetupImpl();
661 
662  RunTransitionInfo transitionInfo(runPrincipal, es);
663 
664  std::vector<edm::SubProcess> emptyList;
665 
666  //To wait, the ref count has to be 1+#streams
667  {
668  FinalWaitingTask streamLoopWaitTask;
669 
671 
672  endStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
673  *schedule_,
675  transitionInfo,
677  emptyList,
678  false);
679 
680  do {
681  taskGroup_.wait();
682  } while (not streamLoopWaitTask.done());
683  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
684  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
685  }
686  }
687  {
688  FinalWaitingTask globalWaitTask;
689 
691  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
692  *schedule_,
693  transitionInfo,
695  emptyList,
696  false);
697  do {
698  taskGroup_.wait();
699  } while (not globalWaitTask.done());
700  if (globalWaitTask.exceptionPtr() != nullptr) {
701  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
702  }
703  }
704 
706  }
707  return rp;
708  }
709 
713  beginProcessBlockCalled_ = false;
714 
715  std::vector<edm::SubProcess> emptyList;
716  {
717  FinalWaitingTask globalWaitTask;
718 
719  ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal);
721  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
722  *schedule_,
723  transitionInfo,
725  emptyList,
726  false);
727  do {
728  taskGroup_.wait();
729  } while (not globalWaitTask.done());
730  if (globalWaitTask.exceptionPtr() != nullptr) {
731  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
732  }
733  }
734  }
735  return &processBlockPrincipal;
736  }
737 
739  if (!beginJobCalled_) {
740  return;
741  }
742  beginJobCalled_ = false;
743 
744  // Collects exceptions, so we don't throw before all operations are performed.
746  "Multiple exceptions were thrown while executing endJob. An exception message follows for each.\n");
747 
748  //make the services available
750 
751  //NOTE: this really should go elsewhere in the future
752  for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) {
753  c.call([this, i]() { this->schedule_->endStream(i); });
754  }
755  auto actReg = actReg_.get();
756  c.call([actReg]() { actReg->preEndJobSignal_(); });
757  schedule_->endJob(c);
758  c.call([actReg]() { actReg->postEndJobSignal_(); });
759  if (c.hasThrown()) {
760  c.rethrow();
761  }
762  }
763 
765  if (beginRunCalled_) {
767  endRun();
768  }
769  runNumber_ = iRun;
770  }
773  lumiNumber_ = iLumi;
774  }
775 
777 
778  } // namespace test
779 } // namespace edm
std::shared_ptr< ActivityRegistry > actReg_
Definition: ScheduleItems.h:77
void put(std::pair< edm::EDPutTokenT< T >, std::unique_ptr< T >> &&iPut)
std::unique_ptr< Schedule > initSchedule(ParameterSet &parameterSet, bool hasSubprocesses, PreallocationConfiguration const &iAllocConfig, ProcessContext const *, ProcessBlockHelperBase &processBlockHelper)
std::shared_ptr< LuminosityBlockPrincipal > endLuminosityBlock()
std::shared_ptr< ActivityRegistry > actReg_
ProcessBlockPrincipal const * endProcessBlock()
static const TGPicture * info(bool iBackgroundIsBlack)
edm::test::ProcessBlock testBeginProcessBlockImpl()
const edm::EventSetup & c
#define xstr(s)
static PluginManager & configure(const Config &)
void setNumberOfConcurrentPrincipals(PreallocationConfiguration const &)
std::unique_ptr< ExceptionToActionTable const > act_table_
Definition: ScheduleItems.h:82
edm::test::LuminosityBlock testBeginLuminosityBlockImpl(edm::LuminosityBlockNumber_t iNum, std::pair< edm::test::ESPutTokenT< T >, std::unique_ptr< T >> &&iPut, U &&...iArgs)
std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper() const
Definition: ScheduleItems.h:63
std::vector< std::pair< edm::BranchDescription, std::unique_ptr< WrapperBase > > > dataProducts_
ParameterSetID id() const
static LuminosityBlockNumber_t maxLuminosityBlockNumber()
bool registerProcessHistory(ProcessHistory const &processHistory)
LuminosityBlockNumber_t lumiNumber_
unsigned long long EventNumber_t
edm::test::LuminosityBlock testEndLuminosityBlockImpl()
void ensureAvailableAccelerators(edm::ParameterSet const &parameterSet)
EventNumber_t eventNumber_
RunNumber_t run() const
Definition: RunPrincipal.h:61
assert(be >=bs)
ProcessContext processContext_
unsigned int LuminosityBlockNumber_t
oneapi::tbb::task_group taskGroup_
bool done() const
Definition: WaitingTask.h:82
void emplace_back(Args &&...args)
PreallocationConfiguration preallocations_
void validateTopLevelParameterSets(ParameterSet *processParameterSet)
~TestProcessor() noexcept(false)
tuple result
Definition: mps_fire.py:311
void synchronousEventSetupForInstance(IOVSyncValue const &syncValue, oneapi::tbb::task_group &iGroup, eventsetup::EventSetupsController &espController)
void fillProcessBlockPrincipal(std::string const &processName, DelayedReader *reader=nullptr)
void setEventNumber(edm::EventNumber_t)
std::shared_ptr< BranchIDListHelper > branchIDListHelper_
PluginManager::Config config()
Definition: standard.cc:21
std::shared_ptr< EventSetupTestHelper > esHelper_
std::shared_ptr< CommonParams > initMisc(ParameterSet &parameterSet)
std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper_
Timestamp const & beginTime() const
Definition: RunPrincipal.h:67
std::string labelOfTestModule_
std::unique_ptr< eventsetup::EventSetupsController > espController_
def move
Definition: eostools.py:511
edm::test::Event testImpl()
std::shared_ptr< eventsetup::EventSetupProvider > esp_
std::vector< ProduceEntry > const & produceEntries() const
Timestamp const & endTime() const
Definition: RunPrincipal.h:69
std::vector< ESProduceEntry > const & esProduceEntries() const
std::unique_ptr< Schedule > schedule_
std::shared_ptr< ProcessConfiguration const > processConfiguration_
edm::test::ProcessBlock testEndProcessBlockImpl()
ProcessBlockPrincipal & processBlockPrincipal() const
list lumi
Definition: dqmdumpme.py:53
void insert(std::unique_ptr< ProcessBlockPrincipal >)
void setProcessConfiguration(ProcessConfiguration const *processConfiguration)
EventPrincipal & eventPrincipal(unsigned int iStreamIndex) const
void setProcessHistoryRegistry(ProcessHistoryRegistry const &phr)
moduleRegistry_(new ModuleRegistry())
std::shared_ptr< ProcessConfiguration const > processConfiguration() const
Definition: ScheduleItems.h:72
void setLuminosityBlockNumber(edm::LuminosityBlockNumber_t)
PrincipalCache principalCache_
ServiceToken initServices(std::vector< ParameterSet > &servicePSets, ParameterSet &processPSet, ServiceToken const &iToken, serviceregistry::ServiceLegacy iLegacy, bool associate)
std::shared_ptr< ProductRegistry > preg_
edm::test::Run testBeginRunImpl(edm::RunNumber_t iNum, std::pair< edm::test::ESPutTokenT< T >, std::unique_ptr< T >> &&iPut, U &&...iArgs)
void deleteRun(ProcessHistoryID const &phid, RunNumber_t run)
std::unique_ptr< ExceptionToActionTable const > act_table_
ServiceToken addCPRandTNS(ParameterSet const &parameterSet, ServiceToken const &token)
static EventNumber_t maxEventNumber()
Definition: EventID.h:96
std::shared_ptr< RunPrincipal > const & runPrincipalPtr(ProcessHistoryID const &phid, RunNumber_t run) const
oneapi::tbb::task_arena arena_
edm::test::Run testEndRunImpl()
void setRunNumber(edm::RunNumber_t)
std::unique_ptr< HistoryAppender > historyAppender_
std::shared_ptr< SignallingProductRegistry const > preg() const
Definition: ScheduleItems.h:57
TestProcessor(Config const &iConfig, ServiceToken iToken=ServiceToken())
std::shared_ptr< LuminosityBlockPrincipal > getAvailableLumiPrincipalPtr()
unsigned int RunNumber_t
void call(std::function< void(void)>)
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: ScheduleItems.h:59
std::exception_ptr const * exceptionPtr() const
Returns exception thrown by dependent task.
Definition: WaitingTask.h:51
std::shared_ptr< LuminosityBlockPrincipal > lumiPrincipal_
static ParentageRegistry * instance()
std::shared_ptr< ProcessBlockHelper > processBlockHelper_
ProcessHistoryRegistry processHistoryRegistry_
ParameterSet const & registerIt()
std::shared_ptr< RunPrincipal > endRun()
std::string const & pythonConfiguration() const
Definition: TestProcessor.h:94
bool insertMapped(value_type const &v)
std::vector< std::string > const & extraProcesses() const
RunPrincipal & runPrincipal(ProcessHistoryID const &phid, RunNumber_t run) const