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 
35 
38 
41 
45 
47 
49 
51 
52 #define xstr(s) str(s)
53 #define str(s) #s
54 
55 namespace edm {
56  namespace test {
57 
58  namespace {
59 
60  bool oneTimeInitializationImpl() {
62 
63  static std::unique_ptr<edm::ThreadsController> tsiPtr = std::make_unique<edm::ThreadsController>(1);
64 
65  // register the empty parentage vector , once and for all
67 
68  // register the empty parameter set, once and for all.
69  ParameterSet().registerIt();
70  return true;
71  }
72 
73  bool oneTimeInitialization() {
74  static const bool s_init{oneTimeInitializationImpl()};
75  return s_init;
76  }
77  } // namespace
78 
79  //
80  // constructors and destructor
81  //
83  : globalControl_(tbb::global_control::max_allowed_parallelism, 1),
84  arena_(1),
85  espController_(std::make_unique<eventsetup::EventSetupsController>()),
86  historyAppender_(std::make_unique<HistoryAppender>()),
87  moduleRegistry_(std::make_shared<ModuleRegistry>()) {
88  //Setup various singletons
89  (void)oneTimeInitialization();
90 
92 
93  auto psetPtr = desc.parameterSet();
94 
95  validateTopLevelParameterSets(psetPtr.get());
96 
97  labelOfTestModule_ = psetPtr->getParameter<std::string>("@moduleToTest");
98 
99  auto procDesc = desc.processDesc();
100  // Now do general initialization
102 
103  //initialize the services
104  auto& serviceSets = procDesc->getServicesPSets();
105  ServiceToken token = items.initServices(serviceSets, *psetPtr, iToken, serviceregistry::kOverlapIsError, true);
106  serviceToken_ = items.addCPRandTNS(*psetPtr, token);
107 
108  //make the services available
110 
111  // intialize miscellaneous items
112  std::shared_ptr<CommonParams> common(items.initMisc(*psetPtr));
113 
114  // intialize the event setup provider
115  esp_ = espController_->makeProvider(*psetPtr, items.actReg_.get());
116 
117  auto nThreads = 1U;
118  auto nStreams = 1U;
119  auto nConcurrentLumis = 1U;
120  auto nConcurrentRuns = 1U;
121  preallocations_ = PreallocationConfiguration{nThreads, nStreams, nConcurrentLumis, nConcurrentRuns};
122 
123  if (not iConfig.esProduceEntries().empty()) {
124  esHelper_ = std::make_unique<EventSetupTestHelper>(iConfig.esProduceEntries());
125  esp_->add(std::dynamic_pointer_cast<eventsetup::DataProxyProvider>(esHelper_));
126  esp_->add(std::dynamic_pointer_cast<EventSetupRecordIntervalFinder>(esHelper_));
127  }
128 
129  preg_ = items.preg();
131 
132  edm::ParameterSet emptyPSet;
133  emptyPSet.registerIt();
134  auto psetid = emptyPSet.id();
135 
136  ProcessHistory oldHistory;
137  for (auto const& p : iConfig.extraProcesses()) {
138  oldHistory.emplace_back(p, psetid, xstr(PROJECT_VERSION), "0");
140  }
141 
142  //setup the products we will be adding to the event
143  for (auto const& produce : iConfig.produceEntries()) {
144  auto processName = produce.processName_;
145  if (processName.empty()) {
146  processName = processConfiguration_->processName();
147  }
148  edm::TypeWithDict twd(produce.type_.typeInfo());
150  produce.moduleLabel_,
151  processName,
152  twd.userClassName(),
153  twd.friendlyClassName(),
154  produce.instanceLabel_,
155  "",
156  psetid,
157  twd,
158  true //force this to come from 'source'
159  );
160  product.init();
161  dataProducts_.emplace_back(product, std::unique_ptr<WrapperBase>());
162  preg_->addProduct(product);
163  }
164 
165  processBlockHelper_ = std::make_shared<ProcessBlockHelper>();
166 
168  // set the data members
170  actReg_ = items.actReg_;
175 
177 
178  preg_->setFrozen();
179  for (unsigned int index = 0; index < preallocations_.numberOfStreams(); ++index) {
180  // Reusable event principal
181  auto ep = std::make_shared<EventPrincipal>(preg_,
185  historyAppender_.get(),
186  index);
188  }
189 
190  for (unsigned int index = 0; index < preallocations_.numberOfLuminosityBlocks(); ++index) {
191  auto lp =
192  std::make_unique<LuminosityBlockPrincipal>(preg_, *processConfiguration_, historyAppender_.get(), index);
194  }
195  {
196  auto pb = std::make_unique<ProcessBlockPrincipal>(preg_, *processConfiguration_);
198  }
199  }
200 
202  //
203  // member functions
204  //
205 
206  void TestProcessor::put(unsigned int index, std::unique_ptr<WrapperBase> iWrapper) {
207  if (index >= dataProducts_.size()) {
208  throw cms::Exception("LogicError") << "Products must be declared to the TestProcessor::Config object\n"
209  "with a call to the function \'produces\' BEFORE passing the\n"
210  "TestProcessor::Config object to the TestProcessor constructor";
211  }
212  dataProducts_[index].second = std::move(iWrapper);
213  }
214 
216  bool result = arena_.execute([this]() {
217  setupProcessing();
218  event();
219 
220  return schedule_->totalEventsPassed() > 0;
221  });
222  schedule_->clearCounters();
223  if (esHelper_) {
224  //We want each test to have its own ES data products
225  esHelper_->resetAllProxies();
226  }
227  return edm::test::Event(
229  }
230 
232  arena_.execute([this, iNum]() {
233  if (not beginJobCalled_) {
234  beginJob();
235  }
236  if (not beginProcessBlockCalled_) {
238  }
239  if (not beginRunCalled_) {
240  beginRun();
241  }
242  if (beginLumiCalled_) {
244  assert(lumiNumber_ != iNum);
245  }
246  lumiNumber_ = iNum;
248  });
249 
250  if (esHelper_) {
251  //We want each test to have its own ES data products
252  esHelper_->resetAllProxies();
253  }
254 
256  }
257 
259  //using a return value from arena_.execute lead to double delete of shared_ptr
260  // based on valgrind output when exception occurred. Use lambda capture instead.
261  std::shared_ptr<edm::LuminosityBlockPrincipal> lumi;
262  arena_.execute([this, &lumi]() {
263  if (not beginJobCalled_) {
264  beginJob();
265  }
266  if (not beginProcessBlockCalled_) {
268  }
269  if (not beginRunCalled_) {
270  beginRun();
271  }
272  if (not beginLumiCalled_) {
274  }
275  lumi = endLuminosityBlock();
276  });
277  if (esHelper_) {
278  //We want each test to have its own ES data products
279  esHelper_->resetAllProxies();
280  }
281 
283  }
284 
286  arena_.execute([this, iNum]() {
287  if (not beginJobCalled_) {
288  beginJob();
289  }
290  if (not beginProcessBlockCalled_) {
292  }
293  if (beginRunCalled_) {
294  assert(runNumber_ != iNum);
295  endRun();
296  }
297  runNumber_ = iNum;
298  beginRun();
299  });
300  if (esHelper_) {
301  //We want each test to have its own ES data products
302  esHelper_->resetAllProxies();
303  }
304 
305  return edm::test::Run(
307  }
309  //using a return value from arena_.execute lead to double delete of shared_ptr
310  // based on valgrind output when exception occurred. Use lambda capture instead.
311  std::shared_ptr<edm::RunPrincipal> rp;
312  arena_.execute([this, &rp]() {
313  if (not beginJobCalled_) {
314  beginJob();
315  }
316  if (not beginProcessBlockCalled_) {
318  }
319  if (not beginRunCalled_) {
320  beginRun();
321  }
322  rp = endRun();
323  });
324  if (esHelper_) {
325  //We want each test to have its own ES data products
326  esHelper_->resetAllProxies();
327  }
328 
329  return edm::test::Run(rp, labelOfTestModule_, processConfiguration_->processName());
330  }
331 
333  arena_.execute([this]() {
334  if (not beginJobCalled_) {
335  beginJob();
336  }
338  });
341  }
343  auto pbp = arena_.execute([this]() {
344  if (not beginJobCalled_) {
345  beginJob();
346  }
347  if (not beginProcessBlockCalled_) {
349  }
350  return endProcessBlock();
351  });
353  }
354 
356  if (not beginJobCalled_) {
357  beginJob();
358  }
359  if (not beginProcessBlockCalled_) {
361  }
362  if (not beginRunCalled_) {
363  beginRun();
364  }
365  if (not beginLumiCalled_) {
367  }
368  }
369 
371  arena_.execute([this]() {
372  if (beginLumiCalled_) {
374  beginLumiCalled_ = false;
375  }
376  if (beginRunCalled_) {
377  endRun();
378  beginRunCalled_ = false;
379  }
381  endProcessBlock();
382  beginProcessBlockCalled_ = false;
383  }
384  if (beginJobCalled_) {
385  endJob();
386  }
388  espController_->endIOVsAsync(edm::WaitingTaskHolder(taskGroup_, &task));
389  do {
390  taskGroup_.wait();
391  } while (not task.done());
392  });
393  }
394 
397 
402  actReg_->preallocateSignal_(bounds);
403  schedule_->convertCurrentProcessAlias(processConfiguration_->processName());
404  PathsAndConsumesOfModules pathsAndConsumesOfModules;
405 
406  //The code assumes only modules make data in the current process
407  // Since the test os also allowed to do so, it can lead to problems.
408  //pathsAndConsumesOfModules.initialize(schedule_.get(), preg_);
409 
410  //NOTE: this may throw
411  //checkForModuleDependencyCorrectness(pathsAndConsumesOfModules, false);
412  actReg_->preBeginJobSignal_(pathsAndConsumesOfModules, processContext_);
413 
414  espController_->finishConfiguration();
415 
416  schedule_->beginJob(*preg_, esp_->recordsToProxyIndices(), *processBlockHelper_);
417  actReg_->postBeginJobSignal_();
418 
419  for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) {
420  schedule_->beginStream(i);
421  }
422  beginJobCalled_ = true;
423  }
424 
427  processBlockPrincipal.fillProcessBlockPrincipal(processConfiguration_->processName());
428 
429  std::vector<edm::SubProcess> emptyList;
430  {
431  ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal);
433  FinalWaitingTask globalWaitTask;
434  beginGlobalTransitionAsync<Traits>(
435  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
436  do {
437  taskGroup_.wait();
438  } while (not globalWaitTask.done());
439  if (globalWaitTask.exceptionPtr() != nullptr) {
440  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
441  }
442  }
444  }
445 
447  ProcessHistoryID phid;
448  auto aux = std::make_shared<RunAuxiliary>(runNumber_, Timestamp(), Timestamp());
449  auto rp = std::make_shared<RunPrincipal>(aux, preg_, *processConfiguration_, historyAppender_.get(), 0);
450 
452  RunPrincipal& runPrincipal = principalCache_.runPrincipal(phid, runNumber_);
453 
454  IOVSyncValue ts(EventID(runPrincipal.run(), 0, 0), runPrincipal.beginTime());
456 
457  auto const& es = esp_->eventSetupImpl();
458 
459  RunTransitionInfo transitionInfo(runPrincipal, es);
460 
461  std::vector<edm::SubProcess> emptyList;
462  {
464  FinalWaitingTask globalWaitTask;
465  beginGlobalTransitionAsync<Traits>(
466  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
467  do {
468  taskGroup_.wait();
469  } while (not globalWaitTask.done());
470  if (globalWaitTask.exceptionPtr() != nullptr) {
471  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
472  }
473  }
474  {
475  //To wait, the ref count has to be 1+#streams
476  FinalWaitingTask streamLoopWaitTask;
477 
479  beginStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
480  *schedule_,
482  transitionInfo,
484  emptyList);
485 
486  do {
487  taskGroup_.wait();
488  } while (not streamLoopWaitTask.done());
489  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
490  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
491  }
492  }
493  beginRunCalled_ = true;
494  }
495 
499  lumiPrincipal_->clearPrincipal();
501  lumiPrincipal_->setAux(aux);
502 
503  lumiPrincipal_->setRunPrincipal(principalCache_.runPrincipalPtr());
504 
507 
508  auto const& es = esp_->eventSetupImpl();
509 
510  LumiTransitionInfo transitionInfo(*lumiPrincipal_, es, nullptr);
511 
512  std::vector<edm::SubProcess> emptyList;
513  {
515  FinalWaitingTask globalWaitTask;
516  beginGlobalTransitionAsync<Traits>(
517  WaitingTaskHolder(taskGroup_, &globalWaitTask), *schedule_, transitionInfo, serviceToken_, emptyList);
518  do {
519  taskGroup_.wait();
520  } while (not globalWaitTask.done());
521  if (globalWaitTask.exceptionPtr() != nullptr) {
522  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
523  }
524  }
525  {
526  //To wait, the ref count has to be 1+#streams
527  FinalWaitingTask streamLoopWaitTask;
528 
530 
531  beginStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
532  *schedule_,
534  transitionInfo,
536  emptyList);
537 
538  do {
539  taskGroup_.wait();
540  } while (not streamLoopWaitTask.done());
541  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
542  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
543  }
544  }
545  beginLumiCalled_ = true;
546  }
547 
549  auto pep = &(principalCache_.eventPrincipal(0));
550 
551  //this resets the EventPrincipal (if it had been used before)
552  pep->clearEventPrincipal();
553  pep->fillEventPrincipal(
555  nullptr,
556  nullptr);
557  assert(lumiPrincipal_.get() != nullptr);
558  pep->setLuminosityBlockPrincipal(lumiPrincipal_.get());
559 
560  for (auto& p : dataProducts_) {
561  if (p.second) {
562  pep->put(p.first, std::move(p.second), ProductProvenance(p.first.branchID()));
563  } else {
564  //The data product was not set so we need to
565  // tell the ProductResolver not to wait
566  auto r = pep->getProductResolver(p.first.branchID());
567  dynamic_cast<ProductPutterBase const*>(r)->putProduct(std::unique_ptr<WrapperBase>());
568  }
569  }
570 
572 
573  FinalWaitingTask waitTask;
574 
575  EventTransitionInfo info(*pep, esp_->eventSetupImpl());
576  schedule_->processOneEventAsync(edm::WaitingTaskHolder(taskGroup_, &waitTask), 0, info, serviceToken_);
577 
578  do {
579  taskGroup_.wait();
580  } while (not waitTask.done());
581  if (waitTask.exceptionPtr() != nullptr) {
582  std::rethrow_exception(*(waitTask.exceptionPtr()));
583  }
584  ++eventNumber_;
585  }
586 
587  std::shared_ptr<LuminosityBlockPrincipal> TestProcessor::endLuminosityBlock() {
588  auto lumiPrincipal = lumiPrincipal_;
589  if (beginLumiCalled_) {
590  beginLumiCalled_ = false;
591  lumiPrincipal_.reset();
592 
593  IOVSyncValue ts(EventID(runNumber_, lumiNumber_, eventNumber_), lumiPrincipal->endTime());
595 
596  auto const& es = esp_->eventSetupImpl();
597 
598  LumiTransitionInfo transitionInfo(*lumiPrincipal, es, nullptr);
599 
600  std::vector<edm::SubProcess> emptyList;
601 
602  //To wait, the ref count has to be 1+#streams
603  {
604  FinalWaitingTask streamLoopWaitTask;
605 
607 
608  endStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
609  *schedule_,
611  transitionInfo,
613  emptyList,
614  false);
615 
616  do {
617  taskGroup_.wait();
618  } while (not streamLoopWaitTask.done());
619  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
620  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
621  }
622  }
623  {
624  FinalWaitingTask globalWaitTask;
625 
627  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
628  *schedule_,
629  transitionInfo,
631  emptyList,
632  false);
633  do {
634  taskGroup_.wait();
635  } while (not globalWaitTask.done());
636  if (globalWaitTask.exceptionPtr() != nullptr) {
637  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
638  }
639  }
640  }
641  return lumiPrincipal;
642  }
643 
644  std::shared_ptr<edm::RunPrincipal> TestProcessor::endRun() {
645  std::shared_ptr<RunPrincipal> rp;
646  if (beginRunCalled_) {
647  beginRunCalled_ = false;
648  ProcessHistoryID phid;
650  RunPrincipal& runPrincipal = *rp;
651 
652  IOVSyncValue ts(
654  runPrincipal.endTime());
656 
657  auto const& es = esp_->eventSetupImpl();
658 
659  RunTransitionInfo transitionInfo(runPrincipal, es);
660 
661  std::vector<edm::SubProcess> emptyList;
662 
663  //To wait, the ref count has to be 1+#streams
664  {
665  FinalWaitingTask streamLoopWaitTask;
666 
668 
669  endStreamsTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &streamLoopWaitTask),
670  *schedule_,
672  transitionInfo,
674  emptyList,
675  false);
676 
677  do {
678  taskGroup_.wait();
679  } while (not streamLoopWaitTask.done());
680  if (streamLoopWaitTask.exceptionPtr() != nullptr) {
681  std::rethrow_exception(*(streamLoopWaitTask.exceptionPtr()));
682  }
683  }
684  {
685  FinalWaitingTask globalWaitTask;
686 
688  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
689  *schedule_,
690  transitionInfo,
692  emptyList,
693  false);
694  do {
695  taskGroup_.wait();
696  } while (not globalWaitTask.done());
697  if (globalWaitTask.exceptionPtr() != nullptr) {
698  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
699  }
700  }
701 
703  }
704  return rp;
705  }
706 
710  beginProcessBlockCalled_ = false;
711 
712  std::vector<edm::SubProcess> emptyList;
713  {
714  FinalWaitingTask globalWaitTask;
715 
716  ProcessBlockTransitionInfo transitionInfo(processBlockPrincipal);
718  endGlobalTransitionAsync<Traits>(WaitingTaskHolder(taskGroup_, &globalWaitTask),
719  *schedule_,
720  transitionInfo,
722  emptyList,
723  false);
724  do {
725  taskGroup_.wait();
726  } while (not globalWaitTask.done());
727  if (globalWaitTask.exceptionPtr() != nullptr) {
728  std::rethrow_exception(*(globalWaitTask.exceptionPtr()));
729  }
730  }
731  }
732  return &processBlockPrincipal;
733  }
734 
736  if (!beginJobCalled_) {
737  return;
738  }
739  beginJobCalled_ = false;
740 
741  // Collects exceptions, so we don't throw before all operations are performed.
743  "Multiple exceptions were thrown while executing endJob. An exception message follows for each.\n");
744 
745  //make the services available
747 
748  //NOTE: this really should go elsewhere in the future
749  for (unsigned int i = 0; i < preallocations_.numberOfStreams(); ++i) {
750  c.call([this, i]() { this->schedule_->endStream(i); });
751  }
752  auto actReg = actReg_.get();
753  c.call([actReg]() { actReg->preEndJobSignal_(); });
754  schedule_->endJob(c);
755  c.call([actReg]() { actReg->postEndJobSignal_(); });
756  if (c.hasThrown()) {
757  c.rethrow();
758  }
759  }
760 
762  if (beginRunCalled_) {
764  endRun();
765  }
766  runNumber_ = iRun;
767  }
770  lumiNumber_ = iLumi;
771  }
772 
774 
775  } // namespace test
776 } // 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()
EventNumber_t eventNumber_
RunNumber_t run() const
Definition: RunPrincipal.h:61
assert(be >=bs)
ProcessContext processContext_
unsigned int LuminosityBlockNumber_t
tbb::task_group taskGroup_
bool done() const
Definition: WaitingTask.h:82
void emplace_back(Args &&...args)
PreallocationConfiguration preallocations_
void validateTopLevelParameterSets(ParameterSet *processParameterSet)
tbb::task_arena arena_
~TestProcessor() noexcept(false)
tuple result
Definition: mps_fire.py:311
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_
void synchronousEventSetupForInstance(IOVSyncValue const &syncValue, tbb::task_group &iGroup, eventsetup::EventSetupsController &espController)
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
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