CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::Schedule Class Reference

#include <Schedule.h>

Public Types

typedef std::vector< edm::propagate_const< std::shared_ptr< OutputModuleCommunicator > > > AllOutputModuleCommunicators
 
typedef std::vector< Worker * > AllWorkers
 
typedef std::vector< std::string > vstring
 
typedef std::vector< Worker * > Workers
 

Public Member Functions

AllWorkers const & allWorkers () const
 returns the collection of pointers to workers More...
 
void availablePaths (std::vector< std::string > &oLabelsToFill) const
 adds to oLabelsToFill the labels for all paths in the process More...
 
void beginJob (ProductRegistry const &)
 
void beginStream (unsigned int)
 
bool changeModule (std::string const &iLabel, ParameterSet const &iPSet, const ProductRegistry &iRegistry)
 
void clearCounters ()
 Clear all the counters in the trigger report. More...
 
void closeOutputFiles ()
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
void enableEndPaths (bool active)
 
void endJob (ExceptionCollector &collector)
 
void endPaths (std::vector< std::string > &oLabelsToFill) const
 adds to oLabelsToFill the labels for all end paths in the process More...
 
bool endPathsEnabled () const
 
void endStream (unsigned int)
 
void fillModuleAndConsumesInfo (std::vector< ModuleDescription const * > &allModuleDescriptions, std::vector< std::pair< unsigned int, unsigned int > > &moduleIDToIndex, std::vector< std::vector< ModuleDescription const * > > &modulesWhoseProductsAreConsumedBy, ProductRegistry const &preg) const
 
std::vector< ModuleDescription const * > getAllModuleDescriptions () const
 
void getTriggerReport (TriggerReport &rep) const
 
void getTriggerTimingReport (TriggerTimingReport &rep) const
 
void moduleDescriptionsInEndPath (std::string const &iEndPathLabel, std::vector< ModuleDescription const * > &descriptions, unsigned int hint) const
 
void moduleDescriptionsInPath (std::string const &iPathLabel, std::vector< ModuleDescription const * > &descriptions, unsigned int hint) const
 
void modulesInPath (std::string const &iPathLabel, std::vector< std::string > &oLabelsToFill) const
 adds to oLabelsToFill in execution order the labels of all modules in path iPathLabel More...
 
void openOutputFiles (FileBlock &fb)
 
void processOneEventAsync (WaitingTaskHolder iTask, unsigned int iStreamID, EventPrincipal &principal, EventSetup const &eventSetup)
 
template<typename T >
void processOneGlobalAsync (WaitingTaskHolder iTask, typename T::MyPrincipal &principal, EventSetup const &eventSetup, bool cleaningUpAfterException=false)
 
template<typename T >
void processOneStreamAsync (WaitingTaskHolder iTask, unsigned int iStreamID, typename T::MyPrincipal &principal, EventSetup const &eventSetup, bool cleaningUpAfterException=false)
 
void respondToCloseInputFile (FileBlock const &fb)
 
void respondToOpenInputFile (FileBlock const &fb)
 
 Schedule (ParameterSet &proc_pset, service::TriggerNamesService const &tns, ProductRegistry &pregistry, BranchIDListHelper &branchIDListHelper, ThinnedAssociationsHelper &thinnedAssociationsHelper, SubProcessParentageHelper const *subProcessParentageHelper, ExceptionToActionTable const &actions, std::shared_ptr< ActivityRegistry > areg, std::shared_ptr< ProcessConfiguration > processConfiguration, bool hasSubprocesses, PreallocationConfiguration const &config, ProcessContext const *processContext)
 
bool shouldWeCloseOutput () const
 
bool terminate () const
 Return whether each output module has reached its maximum count. More...
 
int totalEvents () const
 
int totalEventsFailed () const
 
int totalEventsPassed () const
 
void triggerPaths (std::vector< std::string > &oLabelsToFill) const
 
void writeLumi (LuminosityBlockPrincipal const &lbp, ProcessContext const *)
 
void writeRun (RunPrincipal const &rp, ProcessContext const *)
 

Private Member Functions

void limitOutput (ParameterSet const &proc_pset, BranchIDLists const &branchIDLists, SubProcessParentageHelper const *subProcessParentageHelper)
 
std::shared_ptr< ModuleRegistry const > moduleRegistry () const
 
std::shared_ptr< ModuleRegistry > & moduleRegistry ()
 
std::shared_ptr< TriggerResultInserter const > resultsInserter () const
 
std::shared_ptr< TriggerResultInserter > & resultsInserter ()
 

Private Attributes

AllOutputModuleCommunicators all_output_communicators_
 
std::vector< std::string > const * endPathNames_
 
volatile bool endpathsAreActive_
 
std::vector< edm::propagate_const< std::shared_ptr< EndPathStatusInserter > > > endPathStatusInserters_
 
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
 
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
 
std::vector< std::string > const * pathNames_
 
std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter > > > pathStatusInserters_
 
PreallocationConfiguration preallocConfig_
 
edm::propagate_const< std::shared_ptr< TriggerResultInserter > > resultsInserter_
 
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
 
edm::propagate_const< std::unique_ptr< SystemTimeKeeper > > summaryTimeKeeper_
 
bool wantSummary_
 

Detailed Description

Definition at line 118 of file Schedule.h.

Member Typedef Documentation

Definition at line 122 of file Schedule.h.

typedef std::vector<Worker*> edm::Schedule::AllWorkers

Definition at line 121 of file Schedule.h.

typedef std::vector<std::string> edm::Schedule::vstring

Definition at line 120 of file Schedule.h.

typedef std::vector<Worker*> edm::Schedule::Workers

Definition at line 124 of file Schedule.h.

Constructor & Destructor Documentation

edm::Schedule::Schedule ( ParameterSet proc_pset,
service::TriggerNamesService const &  tns,
ProductRegistry pregistry,
BranchIDListHelper branchIDListHelper,
ThinnedAssociationsHelper thinnedAssociationsHelper,
SubProcessParentageHelper const *  subProcessParentageHelper,
ExceptionToActionTable const &  actions,
std::shared_ptr< ActivityRegistry areg,
std::shared_ptr< ProcessConfiguration processConfiguration,
bool  hasSubprocesses,
PreallocationConfiguration const &  config,
ProcessContext const *  processContext 
)

Definition at line 434 of file Schedule.cc.

References actions, all_output_communicators_, allWorkers(), EnergyCorrector::c, popcon2dropbox::copy(), edm::maker::ModuleHolder::createOutputModuleCommunicator(), endPathNames_, endpathsAreActive_, endPathStatusInserters_, edm::service::TriggerNamesService::getTrigPaths(), globalSchedule_, mps_fire::i, limitOutput(), moduleRegistry(), moduleRegistry_, gen::n, pathNames_, pathStatusInserters_, edm::SystemTimeKeeper::pauseModuleEvent(), preallocConfig_, edm::PRODUCT_TYPE, edm::SystemTimeKeeper::restartModuleEvent(), resultsInserter(), findQualityFiles::size, edm::SystemTimeKeeper::startEvent(), edm::SystemTimeKeeper::startModuleEvent(), edm::SystemTimeKeeper::startPath(), edm::SystemTimeKeeper::startProcessingLoop(), edm::SystemTimeKeeper::stopEvent(), edm::SystemTimeKeeper::stopModuleEvent(), edm::SystemTimeKeeper::stopPath(), edm::SystemTimeKeeper::stopProcessingLoop(), streamSchedules_, AlCaHLTBitMon_QueryRunRegistry::string, summaryTimeKeeper_, groupFilesInBlocks::temp, create_public_lumi_plots::transform, and wantSummary_.

445  :
446  //Only create a resultsInserter if there is a trigger path
447  resultsInserter_{tns.getTrigPaths().empty()? std::shared_ptr<TriggerResultInserter>{} :makeInserter(proc_pset,prealloc,preg,actions,areg,processConfiguration)},
448  moduleRegistry_(new ModuleRegistry()),
450  preallocConfig_(prealloc),
451  pathNames_(&tns.getTrigPaths()),
452  endPathNames_(&tns.getEndPaths()),
453  wantSummary_(tns.wantSummary()),
454  endpathsAreActive_(true)
455  {
456  makePathStatusInserters(pathStatusInserters_,
457  *pathNames_,
458  prealloc,
459  preg,
460  areg,
461  processConfiguration,
462  std::string("PathStatusInserter"));
463 
464  makePathStatusInserters(endPathStatusInserters_,
465  *endPathNames_,
466  prealloc,
467  preg,
468  areg,
469  processConfiguration,
470  std::string("EndPathStatusInserter"));
471 
472  assert(0<prealloc.numberOfStreams());
473  streamSchedules_.reserve(prealloc.numberOfStreams());
474  for(unsigned int i=0; i<prealloc.numberOfStreams();++i) {
475  streamSchedules_.emplace_back(std::make_shared<StreamSchedule>(
476  resultsInserter(),
479  moduleRegistry(),
480  proc_pset,tns,prealloc,preg,
481  branchIDListHelper,actions,
482  areg,processConfiguration,
483  !hasSubprocesses,
484  StreamID{i},
485  processContext));
486  }
487 
488  //TriggerResults are injected automatically by StreamSchedules and are
489  // unknown to the ModuleRegistry
490  const std::string kTriggerResults("TriggerResults");
491  std::vector<std::string> modulesToUse;
492  modulesToUse.reserve(streamSchedules_[0]->allWorkers().size());
493  for(auto const& worker : streamSchedules_[0]->allWorkers()) {
494  if(worker->description().moduleLabel() != kTriggerResults) {
495  modulesToUse.push_back(worker->description().moduleLabel());
496  }
497  }
498  //The unscheduled modules are at the end of the list, but we want them at the front
499  unsigned int n = streamSchedules_[0]->numberOfUnscheduledModules();
500  if(n>0) {
501  std::vector<std::string> temp;
502  temp.reserve(modulesToUse.size());
503  auto itBeginUnscheduled = modulesToUse.begin()+modulesToUse.size()-n;
504  std::copy(itBeginUnscheduled,modulesToUse.end(),
505  std::back_inserter(temp));
506  std::copy(modulesToUse.begin(),itBeginUnscheduled,std::back_inserter(temp));
507  temp.swap(modulesToUse);
508  }
509 
510  // propagate_const<T> has no reset() function
511  globalSchedule_ = std::make_unique<GlobalSchedule>(
512  resultsInserter(),
515  moduleRegistry(),
516  modulesToUse,
517  proc_pset, preg, prealloc,
518  actions,areg,processConfiguration,processContext);
519 
520  //TriggerResults is not in the top level ParameterSet so the call to
521  // reduceParameterSet would fail to find it. Just remove it up front.
522  std::set<std::string> usedModuleLabels;
523  for(auto const& worker: allWorkers()) {
524  if(worker->description().moduleLabel() != kTriggerResults) {
525  usedModuleLabels.insert(worker->description().moduleLabel());
526  }
527  }
528  std::vector<std::string> modulesInConfig(proc_pset.getParameter<std::vector<std::string> >("@all_modules"));
529  std::map<std::string, std::vector<std::pair<std::string, int> > > outputModulePathPositions;
530  reduceParameterSet(proc_pset, tns.getEndPaths(), modulesInConfig, usedModuleLabels,
531  outputModulePathPositions);
532  processEDAliases(proc_pset, processConfiguration->processName(), preg);
533  proc_pset.registerIt();
534  processConfiguration->setParameterSetID(proc_pset.id());
535  processConfiguration->setProcessConfigurationID();
536 
537  // This is used for a little sanity-check to make sure no code
538  // modifications alter the number of workers at a later date.
539  size_t all_workers_count = allWorkers().size();
540 
541  moduleRegistry_->forAllModuleHolders([this](maker::ModuleHolder* iHolder){
542  auto comm = iHolder->createOutputModuleCommunicator();
543  if (comm) {
544  all_output_communicators_.emplace_back(std::shared_ptr<OutputModuleCommunicator>{comm.release()});
545  }
546  });
547  // Now that the output workers are filled in, set any output limits or information.
548  limitOutput(proc_pset, branchIDListHelper.branchIDLists(), subProcessParentageHelper);
549 
550  // Sanity check: make sure nobody has added a worker after we've
551  // already relied on the WorkerManager being full.
552  assert (all_workers_count == allWorkers().size());
553 
554  branchIDListHelper.updateFromRegistry(preg);
555 
556  for(auto const& worker : streamSchedules_[0]->allWorkers()) {
557  worker->registerThinnedAssociations(preg, thinnedAssociationsHelper);
558  }
559  thinnedAssociationsHelper.sort();
560 
561  // The output modules consume products in kept branches.
562  // So we must set this up before freezing.
563  for (auto& c : all_output_communicators_) {
564  c->selectProducts(preg, thinnedAssociationsHelper);
565  }
566 
567  {
568  // We now get a collection of types that may be consumed.
569  std::set<TypeID> productTypesConsumed;
570  std::set<TypeID> elementTypesConsumed;
571  // Loop over all modules
572  for (auto const& worker : allWorkers()) {
573  for (auto const& consumesInfo : worker->consumesInfo()) {
574  if (consumesInfo.kindOfType() == PRODUCT_TYPE) {
575  productTypesConsumed.emplace(consumesInfo.type());
576  } else {
577  elementTypesConsumed.emplace(consumesInfo.type());
578  }
579  }
580  }
581  // The SubProcess class is not a module, yet it may consume.
582  if(hasSubprocesses) {
583  productTypesConsumed.emplace(typeid(TriggerResults));
584  }
585  // The RandomNumberGeneratorService is not a module, yet it consumes.
586  {
587  RngEDConsumer rngConsumer = RngEDConsumer(productTypesConsumed);
588  }
589  preg.setFrozen(productTypesConsumed, elementTypesConsumed, processConfiguration->processName());
590  }
591 
592  for (auto& c : all_output_communicators_) {
593  c->setEventSelectionInfo(outputModulePathPositions, preg.anyProductProduced());
594  }
595 
596  if(wantSummary_) {
597  std::vector<const ModuleDescription*> modDesc;
598  const auto& workers = allWorkers();
599  modDesc.reserve(workers.size());
600 
601  std::transform(workers.begin(),workers.end(),
602  std::back_inserter(modDesc),
603  [](const Worker* iWorker) -> const ModuleDescription* {
604  return iWorker->descPtr();
605  });
606 
607  // propagate_const<T> has no reset() function
608  summaryTimeKeeper_ = std::make_unique<SystemTimeKeeper>(
609  prealloc.numberOfStreams(),
610  modDesc,
611  tns,
612  processContext);
613  auto timeKeeperPtr = summaryTimeKeeper_.get();
614 
615  areg->watchPreModuleEvent(timeKeeperPtr, &SystemTimeKeeper::startModuleEvent);
616  areg->watchPostModuleEvent(timeKeeperPtr, &SystemTimeKeeper::stopModuleEvent);
617  areg->watchPreModuleEventAcquire(timeKeeperPtr, &SystemTimeKeeper::restartModuleEvent);
618  areg->watchPostModuleEventAcquire(timeKeeperPtr, &SystemTimeKeeper::stopModuleEvent);
619  areg->watchPreModuleEventDelayedGet(timeKeeperPtr, &SystemTimeKeeper::pauseModuleEvent);
620  areg->watchPostModuleEventDelayedGet(timeKeeperPtr,&SystemTimeKeeper::restartModuleEvent);
621 
622  areg->watchPreSourceEvent(timeKeeperPtr, &SystemTimeKeeper::startEvent);
623  areg->watchPostEvent(timeKeeperPtr, &SystemTimeKeeper::stopEvent);
624 
625  areg->watchPrePathEvent(timeKeeperPtr, &SystemTimeKeeper::startPath);
626  areg->watchPostPathEvent(timeKeeperPtr, &SystemTimeKeeper::stopPath);
627 
628  areg->watchPostBeginJob(timeKeeperPtr, &SystemTimeKeeper::startProcessingLoop);
629  areg->watchPreEndJob(timeKeeperPtr, &SystemTimeKeeper::stopProcessingLoop);
630  //areg->preModuleEventSignal_.connect([timeKeeperPtr](StreamContext const& iContext, ModuleCallingContext const& iMod) {
631  //timeKeeperPtr->startModuleEvent(iContext,iMod);
632  //});
633  }
634 
635  } // Schedule::Schedule
size
Write out results.
void stopEvent(StreamContext const &)
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
roAction_t actions[nactions]
Definition: GenABIO.cc:187
void restartModuleEvent(StreamContext const &, ModuleCallingContext const &)
void startModuleEvent(StreamContext const &, ModuleCallingContext const &)
std::shared_ptr< ModuleRegistry const > moduleRegistry() const
Definition: Schedule.h:277
std::vector< std::string > const * pathNames_
Definition: Schedule.h:293
edm::propagate_const< std::unique_ptr< SystemTimeKeeper > > summaryTimeKeeper_
Definition: Schedule.h:291
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter > > > pathStatusInserters_
Definition: Schedule.h:281
edm::propagate_const< std::shared_ptr< TriggerResultInserter > > resultsInserter_
Definition: Schedule.h:280
void limitOutput(ParameterSet const &proc_pset, BranchIDLists const &branchIDLists, SubProcessParentageHelper const *subProcessParentageHelper)
Definition: Schedule.cc:639
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
Definition: Schedule.h:283
void stopPath(StreamContext const &, PathContext const &, HLTPathStatus const &)
void stopModuleEvent(StreamContext const &, ModuleCallingContext const &)
PreallocationConfiguration preallocConfig_
Definition: Schedule.h:289
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
volatile bool endpathsAreActive_
Definition: Schedule.h:297
std::shared_ptr< TriggerResultInserter const > resultsInserter() const
Definition: Schedule.h:275
void startPath(StreamContext const &, PathContext const &)
std::vector< edm::propagate_const< std::shared_ptr< EndPathStatusInserter > > > endPathStatusInserters_
Definition: Schedule.h:282
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
void pauseModuleEvent(StreamContext const &, ModuleCallingContext const &)
bool wantSummary_
Definition: Schedule.h:295
std::vector< std::string > const * endPathNames_
Definition: Schedule.h:294

Member Function Documentation

Schedule::AllWorkers const & edm::Schedule::allWorkers ( ) const

returns the collection of pointers to workers

Definition at line 1102 of file Schedule.cc.

References globalSchedule_.

Referenced by changeModule(), convertCurrentProcessAlias(), edm::PathsAndConsumesOfModules::doConsumesInfo(), fillModuleAndConsumesInfo(), getAllModuleDescriptions(), respondToCloseInputFile(), respondToOpenInputFile(), and Schedule().

1102  {
1103  return globalSchedule_->allWorkers();
1104  }
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
void edm::Schedule::availablePaths ( std::vector< std::string > &  oLabelsToFill) const

adds to oLabelsToFill the labels for all paths in the process

Definition at line 1113 of file Schedule.cc.

References streamSchedules_.

Referenced by edm::ScheduleInfo::availablePaths().

1113  {
1114  streamSchedules_[0]->availablePaths(oLabelsToFill);
1115  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::beginJob ( ProductRegistry const &  iRegistry)

Definition at line 1022 of file Schedule.cc.

References globalSchedule_.

1022  {
1023  globalSchedule_->beginJob(iRegistry);
1024  }
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
void edm::Schedule::beginStream ( unsigned int  iStreamID)

Definition at line 1026 of file Schedule.cc.

References streamSchedules_.

1026  {
1027  assert(iStreamID<streamSchedules_.size());
1028  streamSchedules_[iStreamID]->beginStream();
1029  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
bool edm::Schedule::changeModule ( std::string const &  iLabel,
ParameterSet const &  iPSet,
const ProductRegistry iRegistry 
)

clone the type of module with label iLabel but configure with iPSet. Returns true if successful.

Definition at line 1044 of file Schedule.cc.

References allWorkers(), runEdmFileComparison::found, globalSchedule_, edm::InEvent, edm::InLumi, edm::InRun, moduleRegistry_, preallocConfig_, edm::ProductRegistry::productLookup(), edm::Worker::resolvePutIndicies(), streamSchedules_, and edm::Worker::updateLookup().

1046  {
1047  Worker* found = nullptr;
1048  for (auto const& worker : allWorkers()) {
1049  if (worker->description().moduleLabel() == iLabel) {
1050  found = worker;
1051  break;
1052  }
1053  }
1054  if (nullptr == found) {
1055  return false;
1056  }
1057 
1058  auto newMod = moduleRegistry_->replaceModule(iLabel,iPSet,preallocConfig_);
1059 
1060  globalSchedule_->replaceModule(newMod,iLabel);
1061 
1062  for(auto& s: streamSchedules_) {
1063  s->replaceModule(newMod,iLabel);
1064  }
1065 
1066  {
1067  //Need to updateLookup in order to make getByToken work
1068  auto const runLookup = iRegistry.productLookup(InRun);
1069  auto const lumiLookup = iRegistry.productLookup(InLumi);
1070  auto const eventLookup = iRegistry.productLookup(InEvent);
1071  found->updateLookup(InRun,*runLookup);
1072  found->updateLookup(InLumi,*lumiLookup);
1073  found->updateLookup(InEvent,*eventLookup);
1074 
1075  auto const& processName = newMod->moduleDescription().processName();
1076  auto const& runModuleToIndicies = runLookup->indiciesForModulesInProcess(processName);
1077  auto const& lumiModuleToIndicies = lumiLookup->indiciesForModulesInProcess(processName);
1078  auto const& eventModuleToIndicies = eventLookup->indiciesForModulesInProcess(processName);
1079  found->resolvePutIndicies(InRun,runModuleToIndicies);
1080  found->resolvePutIndicies(InLumi,lumiModuleToIndicies);
1081  found->resolvePutIndicies(InEvent,eventModuleToIndicies);
1082 
1083 
1084  }
1085 
1086  return true;
1087  }
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
Definition: Schedule.h:283
PreallocationConfiguration preallocConfig_
Definition: Schedule.h:289
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::clearCounters ( )

Clear all the counters in the trigger report.

Definition at line 1241 of file Schedule.cc.

References streamSchedules_.

1241  {
1242  for(auto& s: streamSchedules_) {
1243  s->clearCounters();
1244  }
1245  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::closeOutputFiles ( )

Definition at line 984 of file Schedule.cc.

References all_output_communicators_, edm::OutputModuleCommunicator::closeFile(), and edm::for_all().

984  {
985  using std::placeholders::_1;
987  }
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
void edm::Schedule::convertCurrentProcessAlias ( std::string const &  processName)

Convert "@currentProcess" in InputTag process names to the actual current process name.

Definition at line 1106 of file Schedule.cc.

References allWorkers().

1106  {
1107  for (auto const& worker : allWorkers()) {
1108  worker->convertCurrentProcessAlias(processName);
1109  }
1110  }
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
void edm::Schedule::enableEndPaths ( bool  active)

Turn end_paths "off" if "active" is false; turn end_paths "on" if "active" is true.

Definition at line 1181 of file Schedule.cc.

References endpathsAreActive_, and streamSchedules_.

1181  {
1182  endpathsAreActive_ = active;
1183  for(auto& s : streamSchedules_) {
1184  s->enableEndPaths(active);
1185  }
1186  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
volatile bool endpathsAreActive_
Definition: Schedule.h:297
void edm::Schedule::endJob ( ExceptionCollector collector)

Definition at line 696 of file Schedule.cc.

References constexpr, edm::EventTimingSummary::cpuTime, edm::TriggerTimingReport::endPathSummaries, edm::TriggerReport::endPathSummaries, edm::TriggerTimingReport::eventSummary, edm::TriggerReport::eventSummary, alignBH_cfg::fixed, getTriggerReport(), getTriggerTimingReport(), globalSchedule_, edm::ExceptionCollector::hasThrown(), SiStripPI::max, mod(), edm::PreallocationConfiguration::numberOfThreads(), AlCaHLTBitMon_ParallelJobs::p, preallocConfig_, edm::EventTimingSummary::realTime, streamSchedules_, edm::EventTimingSummary::sumStreamRealTime, edm::EventTimingSummary::totalEvents, edm::EventSummary::totalEvents, totalEvents(), edm::EventSummary::totalEventsFailed, edm::EventSummary::totalEventsPassed, edm::TriggerTimingReport::trigPathSummaries, edm::TriggerReport::trigPathSummaries, wantSummary_, edm::TriggerTimingReport::workerSummaries, and edm::TriggerReport::workerSummaries.

696  {
697  globalSchedule_->endJob(collector);
698  if (collector.hasThrown()) {
699  return;
700  }
701 
702  if (wantSummary_ == false) return;
703  {
704  TriggerReport tr;
705  getTriggerReport(tr);
706 
707  // The trigger report (pass/fail etc.):
708 
709  LogVerbatim("FwkSummary") << "";
710  if(streamSchedules_[0]->context().processContext()->isSubProcess()) {
711  LogVerbatim("FwkSummary") << "TrigReport Process: "<<streamSchedules_[0]->context().processContext()->processName();
712  }
713  LogVerbatim("FwkSummary") << "TrigReport " << "---------- Event Summary ------------";
714  if(!tr.trigPathSummaries.empty()) {
715  LogVerbatim("FwkSummary") << "TrigReport"
716  << " Events total = " << tr.eventSummary.totalEvents
717  << " passed = " << tr.eventSummary.totalEventsPassed
718  << " failed = " << tr.eventSummary.totalEventsFailed
719  << "";
720  } else {
721  LogVerbatim("FwkSummary") << "TrigReport"
722  << " Events total = " << tr.eventSummary.totalEvents
723  << " passed = " << tr.eventSummary.totalEvents
724  << " failed = 0";
725  }
726 
727  LogVerbatim("FwkSummary") << "";
728  LogVerbatim("FwkSummary") << "TrigReport " << "---------- Path Summary ------------";
729  LogVerbatim("FwkSummary") << "TrigReport "
730  << std::right << std::setw(10) << "Trig Bit#" << " "
731  << std::right << std::setw(10) << "Executed" << " "
732  << std::right << std::setw(10) << "Passed" << " "
733  << std::right << std::setw(10) << "Failed" << " "
734  << std::right << std::setw(10) << "Error" << " "
735  << "Name" << "";
736  for (auto const& p: tr.trigPathSummaries) {
737  LogVerbatim("FwkSummary") << "TrigReport "
738  << std::right << std::setw(5) << 1
739  << std::right << std::setw(5) << p.bitPosition << " "
740  << std::right << std::setw(10) << p.timesRun << " "
741  << std::right << std::setw(10) << p.timesPassed << " "
742  << std::right << std::setw(10) << p.timesFailed << " "
743  << std::right << std::setw(10) << p.timesExcept << " "
744  << p.name << "";
745  }
746 
747  /*
748  std::vector<int>::const_iterator epi = empty_trig_paths_.begin();
749  std::vector<int>::const_iterator epe = empty_trig_paths_.end();
750  std::vector<std::string>::const_iterator epn = empty_trig_path_names_.begin();
751  for (; epi != epe; ++epi, ++epn) {
752 
753  LogVerbatim("FwkSummary") << "TrigReport "
754  << std::right << std::setw(5) << 1
755  << std::right << std::setw(5) << *epi << " "
756  << std::right << std::setw(10) << totalEvents() << " "
757  << std::right << std::setw(10) << totalEvents() << " "
758  << std::right << std::setw(10) << 0 << " "
759  << std::right << std::setw(10) << 0 << " "
760  << *epn << "";
761  }
762  */
763 
764  LogVerbatim("FwkSummary") << "";
765  LogVerbatim("FwkSummary") << "TrigReport " << "-------End-Path Summary ------------";
766  LogVerbatim("FwkSummary") << "TrigReport "
767  << std::right << std::setw(10) << "Trig Bit#" << " "
768  << std::right << std::setw(10) << "Executed" << " "
769  << std::right << std::setw(10) << "Passed" << " "
770  << std::right << std::setw(10) << "Failed" << " "
771  << std::right << std::setw(10) << "Error" << " "
772  << "Name" << "";
773  for (auto const& p: tr.endPathSummaries) {
774  LogVerbatim("FwkSummary") << "TrigReport "
775  << std::right << std::setw(5) << 0
776  << std::right << std::setw(5) << p.bitPosition << " "
777  << std::right << std::setw(10) << p.timesRun << " "
778  << std::right << std::setw(10) << p.timesPassed << " "
779  << std::right << std::setw(10) << p.timesFailed << " "
780  << std::right << std::setw(10) << p.timesExcept << " "
781  << p.name << "";
782  }
783 
784  for (auto const& p: tr.trigPathSummaries) {
785  LogVerbatim("FwkSummary") << "";
786  LogVerbatim("FwkSummary") << "TrigReport " << "---------- Modules in Path: " << p.name << " ------------";
787  LogVerbatim("FwkSummary") << "TrigReport "
788  << std::right << std::setw(10) << "Trig Bit#" << " "
789  << std::right << std::setw(10) << "Visited" << " "
790  << std::right << std::setw(10) << "Passed" << " "
791  << std::right << std::setw(10) << "Failed" << " "
792  << std::right << std::setw(10) << "Error" << " "
793  << "Name" << "";
794 
795  unsigned int bitpos = 0;
796  for (auto const& mod: p.moduleInPathSummaries) {
797  LogVerbatim("FwkSummary") << "TrigReport "
798  << std::right << std::setw(5) << 1
799  << std::right << std::setw(5) << bitpos << " "
800  << std::right << std::setw(10) << mod.timesVisited << " "
801  << std::right << std::setw(10) << mod.timesPassed << " "
802  << std::right << std::setw(10) << mod.timesFailed << " "
803  << std::right << std::setw(10) << mod.timesExcept << " "
804  << mod.moduleLabel << "";
805  ++bitpos;
806  }
807  }
808 
809  for (auto const& p: tr.endPathSummaries) {
810  LogVerbatim("FwkSummary") << "";
811  LogVerbatim("FwkSummary") << "TrigReport " << "------ Modules in End-Path: " << p.name << " ------------";
812  LogVerbatim("FwkSummary") << "TrigReport "
813  << std::right << std::setw(10) << "Trig Bit#" << " "
814  << std::right << std::setw(10) << "Visited" << " "
815  << std::right << std::setw(10) << "Passed" << " "
816  << std::right << std::setw(10) << "Failed" << " "
817  << std::right << std::setw(10) << "Error" << " "
818  << "Name" << "";
819 
820  unsigned int bitpos=0;
821  for (auto const& mod: p.moduleInPathSummaries) {
822  LogVerbatim("FwkSummary") << "TrigReport "
823  << std::right << std::setw(5) << 0
824  << std::right << std::setw(5) << bitpos << " "
825  << std::right << std::setw(10) << mod.timesVisited << " "
826  << std::right << std::setw(10) << mod.timesPassed << " "
827  << std::right << std::setw(10) << mod.timesFailed << " "
828  << std::right << std::setw(10) << mod.timesExcept << " "
829  << mod.moduleLabel << "";
830  ++bitpos;
831  }
832  }
833 
834  LogVerbatim("FwkSummary") << "";
835  LogVerbatim("FwkSummary") << "TrigReport " << "---------- Module Summary ------------";
836  LogVerbatim("FwkSummary") << "TrigReport "
837  << std::right << std::setw(10) << "Visited" << " "
838  << std::right << std::setw(10) << "Executed" << " "
839  << std::right << std::setw(10) << "Passed" << " "
840  << std::right << std::setw(10) << "Failed" << " "
841  << std::right << std::setw(10) << "Error" << " "
842  << "Name" << "";
843  for (auto const& worker : tr.workerSummaries) {
844  LogVerbatim("FwkSummary") << "TrigReport "
845  << std::right << std::setw(10) << worker.timesVisited << " "
846  << std::right << std::setw(10) << worker.timesRun << " "
847  << std::right << std::setw(10) << worker.timesPassed << " "
848  << std::right << std::setw(10) << worker.timesFailed << " "
849  << std::right << std::setw(10) << worker.timesExcept << " "
850  << worker.moduleLabel << "";
851  }
852  LogVerbatim("FwkSummary") << "";
853  }
854  // The timing report (CPU and Real Time):
855  TriggerTimingReport tr;
857 
858  const int totalEvents = std::max(1, tr.eventSummary.totalEvents);
859 
860  LogVerbatim("FwkSummary") << "TimeReport " << "---------- Event Summary ---[sec]----";
861  LogVerbatim("FwkSummary") << "TimeReport"
862  << std::setprecision(6) << std::fixed
863  << " event loop CPU/event = " << tr.eventSummary.cpuTime/totalEvents;
864  LogVerbatim("FwkSummary") << "TimeReport"
865  << std::setprecision(6) << std::fixed
866  << " event loop Real/event = " << tr.eventSummary.realTime/totalEvents;
867  LogVerbatim("FwkSummary") << "TimeReport"
868  << std::setprecision(6) << std::fixed
869  << " sum Streams Real/event = " << tr.eventSummary.sumStreamRealTime/totalEvents;
870  LogVerbatim("FwkSummary") << "TimeReport"
871  << std::setprecision(6) << std::fixed
872  << " efficiency CPU/Real/thread = " << tr.eventSummary.cpuTime/tr.eventSummary.realTime/preallocConfig_.numberOfThreads();
873 
874  constexpr int kColumn1Size = 10;
875  constexpr int kColumn2Size = 12;
876  constexpr int kColumn3Size = 12;
877  LogVerbatim("FwkSummary") << "";
878  LogVerbatim("FwkSummary") << "TimeReport " << "---------- Path Summary ---[Real sec]----";
879  LogVerbatim("FwkSummary") << "TimeReport "
880  << std::right << std::setw(kColumn1Size) << "per event"<<" "
881  << std::right << std::setw(kColumn2Size) << "per exec"
882  << " Name";
883  for (auto const& p: tr.trigPathSummaries) {
884  const int timesRun = std::max(1, p.timesRun);
885  LogVerbatim("FwkSummary") << "TimeReport "
886  << std::setprecision(6) << std::fixed
887  << std::right << std::setw(kColumn1Size) << p.realTime/totalEvents << " "
888  << std::right << std::setw(kColumn2Size) << p.realTime/timesRun << " "
889  << p.name << "";
890  }
891  LogVerbatim("FwkSummary") << "TimeReport "
892  << std::right << std::setw(kColumn1Size) << "per event"<<" "
893  << std::right << std::setw(kColumn2Size) << "per exec"
894  << " Name" << "";
895 
896  LogVerbatim("FwkSummary") << "";
897  LogVerbatim("FwkSummary") << "TimeReport " << "-------End-Path Summary ---[Real sec]----";
898  LogVerbatim("FwkSummary") << "TimeReport "
899  << std::right << std::setw(kColumn1Size) << "per event" <<" "
900  << std::right << std::setw(kColumn2Size) << "per exec"
901  << " Name" << "";
902  for (auto const& p: tr.endPathSummaries) {
903  const int timesRun = std::max(1, p.timesRun);
904 
905  LogVerbatim("FwkSummary") << "TimeReport "
906  << std::setprecision(6) << std::fixed
907  << std::right << std::setw(kColumn1Size) << p.realTime/totalEvents << " "
908  << std::right << std::setw(kColumn2Size) << p.realTime/timesRun << " "
909  << p.name << "";
910  }
911  LogVerbatim("FwkSummary") << "TimeReport "
912  << std::right << std::setw(kColumn1Size) << "per event" <<" "
913  << std::right << std::setw(kColumn2Size) << "per exec"
914  << " Name" << "";
915 
916  for (auto const& p: tr.trigPathSummaries) {
917  LogVerbatim("FwkSummary") << "";
918  LogVerbatim("FwkSummary") << "TimeReport " << "---------- Modules in Path: " << p.name << " ---[Real sec]----";
919  LogVerbatim("FwkSummary") << "TimeReport "
920  << std::right << std::setw(kColumn1Size) << "per event" <<" "
921  << std::right << std::setw(kColumn2Size) << "per visit"
922  << " Name" << "";
923  for (auto const& mod: p.moduleInPathSummaries) {
924  LogVerbatim("FwkSummary") << "TimeReport "
925  << std::setprecision(6) << std::fixed
926  << std::right << std::setw(kColumn1Size) << mod.realTime/totalEvents << " "
927  << std::right << std::setw(kColumn2Size) << mod.realTime/std::max(1, mod.timesVisited) << " "
928  << mod.moduleLabel << "";
929  }
930  }
931  if(not tr.trigPathSummaries.empty()) {
932  LogVerbatim("FwkSummary") << "TimeReport "
933  << std::right << std::setw(kColumn1Size) << "per event" <<" "
934  << std::right << std::setw(kColumn2Size) << "per visit"
935  << " Name" << "";
936  }
937  for (auto const& p: tr.endPathSummaries) {
938  LogVerbatim("FwkSummary") << "";
939  LogVerbatim("FwkSummary") << "TimeReport " << "------ Modules in End-Path: " << p.name << " ---[Real sec]----";
940  LogVerbatim("FwkSummary") << "TimeReport "
941  << std::right << std::setw(kColumn1Size) << "per event" <<" "
942  << std::right << std::setw(kColumn2Size) << "per visit"
943  << " Name" << "";
944  for (auto const& mod: p.moduleInPathSummaries) {
945  LogVerbatim("FwkSummary") << "TimeReport "
946  << std::setprecision(6) << std::fixed
947  << std::right << std::setw(kColumn1Size) << mod.realTime/totalEvents << " "
948  << std::right << std::setw(kColumn2Size) << mod.realTime/std::max(1, mod.timesVisited) << " "
949  << mod.moduleLabel << "";
950  }
951  }
952  if(not tr.endPathSummaries.empty()) {
953  LogVerbatim("FwkSummary") << "TimeReport "
954  << std::right << std::setw(kColumn1Size) << "per event" <<" "
955  << std::right << std::setw(kColumn2Size) << "per visit"
956  << " Name" << "";
957  }
958  LogVerbatim("FwkSummary") << "";
959  LogVerbatim("FwkSummary") << "TimeReport " << "---------- Module Summary ---[Real sec]----";
960  LogVerbatim("FwkSummary") << "TimeReport "
961  << std::right << std::setw(kColumn1Size) << "per event" <<" "
962  << std::right << std::setw(kColumn2Size) << "per exec" <<" "
963  << std::right << std::setw(kColumn3Size) << "per visit"
964  << " Name" << "";
965  for (auto const& worker : tr.workerSummaries) {
966  LogVerbatim("FwkSummary") << "TimeReport "
967  << std::setprecision(6) << std::fixed
968  << std::right << std::setw(kColumn1Size) << worker.realTime/totalEvents << " "
969  << std::right << std::setw(kColumn2Size) << worker.realTime/std::max(1, worker.timesRun) << " "
970  << std::right << std::setw(kColumn3Size) << worker.realTime/std::max(1, worker.timesVisited) << " "
971  << worker.moduleLabel << "";
972  }
973  LogVerbatim("FwkSummary") << "TimeReport "
974  << std::right << std::setw(kColumn1Size) << "per event" <<" "
975  << std::right << std::setw(kColumn2Size) << "per exec" <<" "
976  << std::right << std::setw(kColumn3Size) << "per visit"
977  << " Name" << "";
978 
979  LogVerbatim("FwkSummary") << "";
980  LogVerbatim("FwkSummary") << "T---Report end!" << "";
981  LogVerbatim("FwkSummary") << "";
982  }
#define constexpr
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
int totalEvents() const
Definition: Schedule.cc:1213
void getTriggerReport(TriggerReport &rep) const
Definition: Schedule.cc:1194
PreallocationConfiguration preallocConfig_
Definition: Schedule.h:289
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
bool wantSummary_
Definition: Schedule.h:295
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
void getTriggerTimingReport(TriggerTimingReport &rep) const
Definition: Schedule.cc:1205
void edm::Schedule::endPaths ( std::vector< std::string > &  oLabelsToFill) const

adds to oLabelsToFill the labels for all end paths in the process

Definition at line 1124 of file Schedule.cc.

References endPathNames_.

Referenced by edm::PathsAndConsumesOfModules::initialize().

1124  {
1125  oLabelsToFill = *endPathNames_;
1126  }
std::vector< std::string > const * endPathNames_
Definition: Schedule.h:294
bool edm::Schedule::endPathsEnabled ( ) const

Return true if end_paths are active, and false if they are inactive.

Definition at line 1189 of file Schedule.cc.

References endpathsAreActive_.

1189  {
1190  return endpathsAreActive_;
1191  }
volatile bool endpathsAreActive_
Definition: Schedule.h:297
void edm::Schedule::endStream ( unsigned int  iStreamID)

Definition at line 1031 of file Schedule.cc.

References streamSchedules_.

1031  {
1032  assert(iStreamID<streamSchedules_.size());
1033  streamSchedules_[iStreamID]->endStream();
1034  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::fillModuleAndConsumesInfo ( std::vector< ModuleDescription const * > &  allModuleDescriptions,
std::vector< std::pair< unsigned int, unsigned int > > &  moduleIDToIndex,
std::vector< std::vector< ModuleDescription const * > > &  modulesWhoseProductsAreConsumedBy,
ProductRegistry const &  preg 
) const

Definition at line 1149 of file Schedule.cc.

References allWorkers(), mps_fire::i, edm::ModuleDescription::id(), edm::ModuleDescription::moduleLabel(), AlCaHLTBitMon_ParallelJobs::p, findQualityFiles::size, and edm::sort_all().

Referenced by edm::PathsAndConsumesOfModules::initialize().

1152  {
1153  allModuleDescriptions.clear();
1154  moduleIDToIndex.clear();
1155  modulesWhoseProductsAreConsumedBy.clear();
1156 
1157  allModuleDescriptions.reserve(allWorkers().size());
1158  moduleIDToIndex.reserve(allWorkers().size());
1159  modulesWhoseProductsAreConsumedBy.resize(allWorkers().size());
1160 
1161  std::map<std::string, ModuleDescription const*> labelToDesc;
1162  unsigned int i = 0;
1163  for (auto const& worker : allWorkers()) {
1164  ModuleDescription const* p = worker->descPtr();
1165  allModuleDescriptions.push_back(p);
1166  moduleIDToIndex.push_back(std::pair<unsigned int, unsigned int>(p->id(), i));
1167  labelToDesc[p->moduleLabel()] = p;
1168  ++i;
1169  }
1170  sort_all(moduleIDToIndex);
1171 
1172  i = 0;
1173  for (auto const& worker : allWorkers()) {
1174  std::vector<ModuleDescription const*>& modules = modulesWhoseProductsAreConsumedBy.at(i);
1175  worker->modulesWhoseProductsAreConsumed(modules, preg, labelToDesc);
1176  ++i;
1177  }
1178  }
size
Write out results.
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:120
std::vector< ModuleDescription const * > edm::Schedule::getAllModuleDescriptions ( ) const

Return a vector allowing const access to all the ModuleDescriptions for this Schedule. *** N.B. *** Ownership of the ModuleDescriptions is not *** passed to the caller. Do not call delete on these *** pointers!

Definition at line 1090 of file Schedule.cc.

References allWorkers(), AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, and findQualityFiles::size.

Referenced by edm::ScheduleInfo::availableModuleLabels(), and edm::ScheduleInfo::parametersForModule().

1090  {
1091  std::vector<ModuleDescription const*> result;
1092  result.reserve(allWorkers().size());
1093 
1094  for (auto const& worker : allWorkers()) {
1095  ModuleDescription const* p = worker->descPtr();
1096  result.push_back(p);
1097  }
1098  return result;
1099  }
size
Write out results.
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
void edm::Schedule::getTriggerReport ( TriggerReport rep) const

Return the trigger report information on paths, modules-in-path, modules-in-endpath, and modules.

Definition at line 1194 of file Schedule.cc.

References edm::TriggerReport::eventSummary, edm::sort_all(), streamSchedules_, edm::EventSummary::totalEvents, edm::EventSummary::totalEventsFailed, edm::EventSummary::totalEventsPassed, and edm::TriggerReport::workerSummaries.

Referenced by endJob().

1194  {
1195  rep.eventSummary.totalEvents = 0;
1196  rep.eventSummary.totalEventsPassed = 0;
1197  rep.eventSummary.totalEventsFailed = 0;
1198  for(auto& s: streamSchedules_) {
1199  s->getTriggerReport(rep);
1200  }
1201  sort_all(rep.workerSummaries);
1202  }
rep
Definition: cuy.py:1188
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:120
void edm::Schedule::getTriggerTimingReport ( TriggerTimingReport rep) const

Return the trigger timing report information on paths, modules-in-path, modules-in-endpath, and modules.

Definition at line 1205 of file Schedule.cc.

References edm::EventTimingSummary::cpuTime, edm::TriggerTimingReport::eventSummary, edm::EventTimingSummary::realTime, summaryTimeKeeper_, and edm::EventTimingSummary::totalEvents.

Referenced by endJob().

1205  {
1206  rep.eventSummary.totalEvents = 0;
1207  rep.eventSummary.cpuTime = 0.;
1208  rep.eventSummary.realTime = 0.;
1209  summaryTimeKeeper_->fillTriggerTimingReport(rep);
1210  }
edm::propagate_const< std::unique_ptr< SystemTimeKeeper > > summaryTimeKeeper_
Definition: Schedule.h:291
rep
Definition: cuy.py:1188
void edm::Schedule::limitOutput ( ParameterSet const &  proc_pset,
BranchIDLists const &  branchIDLists,
SubProcessParentageHelper const *  subProcessParentageHelper 
)
private

Definition at line 639 of file Schedule.cc.

References all_output_communicators_, EnergyCorrector::c, edm::errors::Configuration, edm::ParameterSet::empty(), Exception, edm::ParameterSet::getParameterNamesForType(), edm::ParameterSet::getParameterSetNames(), edm::ParameterSet::getUntrackedParameter(), edm::ParameterSet::getUntrackedParameterSet(), edm::OutputModuleDescription::maxEvents_, convertSQLitetoXML_cfg::output, edm::search_all(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by Schedule().

641  {
642  std::string const output("output");
643 
644  ParameterSet const& maxEventsPSet = proc_pset.getUntrackedParameterSet("maxEvents", ParameterSet());
645  int maxEventSpecs = 0;
646  int maxEventsOut = -1;
647  ParameterSet const* vMaxEventsOut = nullptr;
648  std::vector<std::string> intNamesE = maxEventsPSet.getParameterNamesForType<int>(false);
649  if (search_all(intNamesE, output)) {
650  maxEventsOut = maxEventsPSet.getUntrackedParameter<int>(output);
651  ++maxEventSpecs;
652  }
653  std::vector<std::string> psetNamesE;
654  maxEventsPSet.getParameterSetNames(psetNamesE, false);
655  if (search_all(psetNamesE, output)) {
656  vMaxEventsOut = &maxEventsPSet.getUntrackedParameterSet(output);
657  ++maxEventSpecs;
658  }
659 
660  if (maxEventSpecs > 1) {
662  "\nAt most, one form of 'output' may appear in the 'maxEvents' parameter set";
663  }
664 
665  for (auto& c : all_output_communicators_) {
666  OutputModuleDescription desc(branchIDLists, maxEventsOut, subProcessParentageHelper);
667  if (vMaxEventsOut != nullptr && !vMaxEventsOut->empty()) {
668  std::string const& moduleLabel = c->description().moduleLabel();
669  try {
670  desc.maxEvents_ = vMaxEventsOut->getUntrackedParameter<int>(moduleLabel);
671  } catch (Exception const&) {
673  "\nNo entry in 'maxEvents' for output module label '" << moduleLabel << "'.\n";
674  }
675  }
676  c->configure(desc);
677  }
678  }
bool search_all(ForwardSequence const &s, Datum const &d)
Definition: Algorithms.h:46
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
void edm::Schedule::moduleDescriptionsInEndPath ( std::string const &  iEndPathLabel,
std::vector< ModuleDescription const * > &  descriptions,
unsigned int  hint 
) const

adds the ModuleDescriptions into the vector for the modules scheduled in path iEndPathLabel hint is a performance optimization if you might know the position of the module in the path

Definition at line 1142 of file Schedule.cc.

References streamSchedules_.

Referenced by edm::PathsAndConsumesOfModules::initialize().

1144  {
1145  streamSchedules_[0]->moduleDescriptionsInEndPath(iEndPathLabel, descriptions, hint);
1146  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::moduleDescriptionsInPath ( std::string const &  iPathLabel,
std::vector< ModuleDescription const * > &  descriptions,
unsigned int  hint 
) const

adds the ModuleDescriptions into the vector for the modules scheduled in path iPathLabel hint is a performance optimization if you might know the position of the module in the path

Definition at line 1135 of file Schedule.cc.

References streamSchedules_.

Referenced by edm::PathsAndConsumesOfModules::initialize().

1137  {
1138  streamSchedules_[0]->moduleDescriptionsInPath(iPathLabel, descriptions, hint);
1139  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
std::shared_ptr<ModuleRegistry const> edm::Schedule::moduleRegistry ( ) const
inlineprivate

Definition at line 277 of file Schedule.h.

References edm::get_underlying_safe().

Referenced by Schedule().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
Definition: Schedule.h:283
std::shared_ptr<ModuleRegistry>& edm::Schedule::moduleRegistry ( )
inlineprivate

Definition at line 278 of file Schedule.h.

References edm::get_underlying_safe().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
Definition: Schedule.h:283
void edm::Schedule::modulesInPath ( std::string const &  iPathLabel,
std::vector< std::string > &  oLabelsToFill 
) const

adds to oLabelsToFill in execution order the labels of all modules in path iPathLabel

Definition at line 1129 of file Schedule.cc.

References streamSchedules_.

Referenced by edm::ScheduleInfo::modulesInPath().

1130  {
1131  streamSchedules_[0]->modulesInPath(iPathLabel,oLabelsToFill);
1132  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::openOutputFiles ( FileBlock fb)

Definition at line 989 of file Schedule.cc.

References all_output_communicators_, edm::for_all(), and edm::OutputModuleCommunicator::openFile().

989  {
990  using std::placeholders::_1;
992  }
virtual void openFile(FileBlock const &fb)=0
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
void edm::Schedule::processOneEventAsync ( WaitingTaskHolder  iTask,
unsigned int  iStreamID,
EventPrincipal principal,
EventSetup const &  eventSetup 
)

Definition at line 1036 of file Schedule.cc.

References eostools::move(), pathStatusInserters_, and streamSchedules_.

1039  {
1040  assert(iStreamID<streamSchedules_.size());
1041  streamSchedules_[iStreamID]->processOneEventAsync(std::move(iTask),ep,es,pathStatusInserters_);
1042  }
std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter > > > pathStatusInserters_
Definition: Schedule.h:281
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
def move(src, dest)
Definition: eostools.py:510
template<typename T >
void edm::Schedule::processOneGlobalAsync ( WaitingTaskHolder  iTask,
typename T::MyPrincipal &  principal,
EventSetup const &  eventSetup,
bool  cleaningUpAfterException = false 
)

Definition at line 313 of file Schedule.h.

Referenced by edm::beginGlobalTransitionAsync(), and edm::endGlobalTransitionAsync().

316  {
317  globalSchedule_->processOneGlobalAsync<T>(iTaskHolder,ep,es,cleaningUpAfterException);
318  }
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
Definition: Schedule.h:286
long double T
template<typename T >
void edm::Schedule::processOneStreamAsync ( WaitingTaskHolder  iTask,
unsigned int  iStreamID,
typename T::MyPrincipal &  principal,
EventSetup const &  eventSetup,
bool  cleaningUpAfterException = false 
)

Definition at line 302 of file Schedule.h.

References eostools::move().

Referenced by edm::beginStreamTransitionAsync(), and edm::endStreamTransitionAsync().

306  {
307  assert(iStreamID<streamSchedules_.size());
308  streamSchedules_[iStreamID]->processOneStreamAsync<T>(std::move(iTaskHolder),ep,es,cleaningUpAfterException);
309  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
long double T
def move(src, dest)
Definition: eostools.py:510
void edm::Schedule::respondToCloseInputFile ( FileBlock const &  fb)

Definition at line 1017 of file Schedule.cc.

References allWorkers(), edm::for_all(), and edm::Worker::respondToCloseInputFile().

1017  {
1018  using std::placeholders::_1;
1019  for_all(allWorkers(), std::bind(&Worker::respondToCloseInputFile, _1, std::cref(fb)));
1020  }
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void respondToCloseInputFile(FileBlock const &fb)
Definition: Worker.h:168
void edm::Schedule::respondToOpenInputFile ( FileBlock const &  fb)

Definition at line 1012 of file Schedule.cc.

References allWorkers(), edm::for_all(), and edm::Worker::respondToOpenInputFile().

1012  {
1013  using std::placeholders::_1;
1014  for_all(allWorkers(), std::bind(&Worker::respondToOpenInputFile, _1, std::cref(fb)));
1015  }
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
Definition: Schedule.cc:1102
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void respondToOpenInputFile(FileBlock const &fb)
Definition: Worker.h:167
std::shared_ptr<TriggerResultInserter const> edm::Schedule::resultsInserter ( ) const
inlineprivate

Definition at line 275 of file Schedule.h.

References edm::get_underlying_safe().

Referenced by Schedule().

edm::propagate_const< std::shared_ptr< TriggerResultInserter > > resultsInserter_
Definition: Schedule.h:280
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::shared_ptr<TriggerResultInserter>& edm::Schedule::resultsInserter ( )
inlineprivate

Definition at line 276 of file Schedule.h.

References edm::get_underlying_safe().

edm::propagate_const< std::shared_ptr< TriggerResultInserter > > resultsInserter_
Definition: Schedule.h:280
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
bool edm::Schedule::shouldWeCloseOutput ( ) const

Definition at line 1004 of file Schedule.cc.

References all_output_communicators_, and edm::OutputModuleCommunicator::shouldWeCloseFile().

1004  {
1005  using std::placeholders::_1;
1006  // Return true iff at least one output module returns true.
1007  return (std::find_if (all_output_communicators_.begin(), all_output_communicators_.end(),
1009  != all_output_communicators_.end());
1010  }
virtual bool shouldWeCloseFile() const =0
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
bool edm::Schedule::terminate ( void  ) const

Return whether each output module has reached its maximum count.

Definition at line 680 of file Schedule.cc.

References all_output_communicators_, and EnergyCorrector::c.

680  {
681  if (all_output_communicators_.empty()) {
682  return false;
683  }
684  for (auto& c : all_output_communicators_) {
685  if (!c->limitReached()) {
686  // Found an output module that has not reached output event count.
687  return false;
688  }
689  }
690  LogInfo("SuccessfulTermination")
691  << "The job is terminating successfully because each output module\n"
692  << "has reached its configured limit.\n";
693  return true;
694  }
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
int edm::Schedule::totalEvents ( ) const

Return the number of events this Schedule has tried to process (inclues both successes and failures, including failures due to exceptions during processing).

Definition at line 1213 of file Schedule.cc.

References streamSchedules_.

Referenced by endJob().

1213  {
1214  int returnValue = 0;
1215  for(auto& s: streamSchedules_) {
1216  returnValue += s->totalEvents();
1217  }
1218  return returnValue;
1219  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
int edm::Schedule::totalEventsFailed ( ) const

Return the number of events that have not passed any trigger. (N.B. totalEventsFailed() + totalEventsPassed() == totalEvents()

Definition at line 1231 of file Schedule.cc.

References streamSchedules_.

1231  {
1232  int returnValue = 0;
1233  for(auto& s: streamSchedules_) {
1234  returnValue += s->totalEventsFailed();
1235  }
1236  return returnValue;
1237  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
int edm::Schedule::totalEventsPassed ( ) const

Return the number of events which have been passed by one or more trigger paths.

Definition at line 1222 of file Schedule.cc.

References streamSchedules_.

1222  {
1223  int returnValue = 0;
1224  for(auto& s: streamSchedules_) {
1225  returnValue += s->totalEventsPassed();
1226  }
1227  return returnValue;
1228  }
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Definition: Schedule.h:284
void edm::Schedule::triggerPaths ( std::vector< std::string > &  oLabelsToFill) const

Adds to oLabelsToFill the labels for all trigger paths in the process. This is different from availablePaths because it includes the empty paths to match the entries in TriggerResults exactly.

Definition at line 1118 of file Schedule.cc.

References pathNames_.

Referenced by edm::PathsAndConsumesOfModules::initialize().

1118  {
1119  oLabelsToFill = *pathNames_;
1120 
1121  }
std::vector< std::string > const * pathNames_
Definition: Schedule.h:293
void edm::Schedule::writeLumi ( LuminosityBlockPrincipal const &  lbp,
ProcessContext const *  processContext 
)

Definition at line 999 of file Schedule.cc.

References all_output_communicators_, edm::for_all(), and edm::OutputModuleCommunicator::writeLumi().

999  {
1000  using std::placeholders::_1;
1001  for_all(all_output_communicators_, std::bind(&OutputModuleCommunicator::writeLumi, _1, std::cref(lbp), processContext));
1002  }
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
virtual void writeLumi(LuminosityBlockPrincipal const &lbp, ProcessContext const *)=0
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288
void edm::Schedule::writeRun ( RunPrincipal const &  rp,
ProcessContext const *  processContext 
)

Definition at line 994 of file Schedule.cc.

References all_output_communicators_, edm::for_all(), and edm::OutputModuleCommunicator::writeRun().

994  {
995  using std::placeholders::_1;
996  for_all(all_output_communicators_, std::bind(&OutputModuleCommunicator::writeRun, _1, std::cref(rp), processContext));
997  }
virtual void writeRun(RunPrincipal const &rp, ProcessContext const *)=0
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
AllOutputModuleCommunicators all_output_communicators_
Definition: Schedule.h:288

Member Data Documentation

AllOutputModuleCommunicators edm::Schedule::all_output_communicators_
private
std::vector<std::string> const* edm::Schedule::endPathNames_
private

Definition at line 294 of file Schedule.h.

Referenced by endPaths(), and Schedule().

volatile bool edm::Schedule::endpathsAreActive_
private

Definition at line 297 of file Schedule.h.

Referenced by enableEndPaths(), endPathsEnabled(), and Schedule().

std::vector<edm::propagate_const<std::shared_ptr<EndPathStatusInserter> > > edm::Schedule::endPathStatusInserters_
private

Definition at line 282 of file Schedule.h.

Referenced by Schedule().

edm::propagate_const<std::unique_ptr<GlobalSchedule> > edm::Schedule::globalSchedule_
private

Definition at line 286 of file Schedule.h.

Referenced by allWorkers(), beginJob(), changeModule(), endJob(), and Schedule().

edm::propagate_const<std::shared_ptr<ModuleRegistry> > edm::Schedule::moduleRegistry_
private

Definition at line 283 of file Schedule.h.

Referenced by changeModule(), and Schedule().

std::vector<std::string> const* edm::Schedule::pathNames_
private

Definition at line 293 of file Schedule.h.

Referenced by Schedule(), and triggerPaths().

std::vector<edm::propagate_const<std::shared_ptr<PathStatusInserter> > > edm::Schedule::pathStatusInserters_
private

Definition at line 281 of file Schedule.h.

Referenced by processOneEventAsync(), and Schedule().

PreallocationConfiguration edm::Schedule::preallocConfig_
private

Definition at line 289 of file Schedule.h.

Referenced by changeModule(), endJob(), and Schedule().

edm::propagate_const<std::shared_ptr<TriggerResultInserter> > edm::Schedule::resultsInserter_
private

Definition at line 280 of file Schedule.h.

std::vector<edm::propagate_const<std::shared_ptr<StreamSchedule> > > edm::Schedule::streamSchedules_
private
edm::propagate_const<std::unique_ptr<SystemTimeKeeper> > edm::Schedule::summaryTimeKeeper_
private

Definition at line 291 of file Schedule.h.

Referenced by getTriggerTimingReport(), and Schedule().

bool edm::Schedule::wantSummary_
private

Definition at line 295 of file Schedule.h.

Referenced by endJob(), and Schedule().