CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SubProcess.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_SubProcess_h
2 #define FWCore_Framework_SubProcess_h
3 
20 
22 
23 #include <map>
24 #include <memory>
25 #include <set>
26 
27 namespace edm {
28  class ActivityRegistry;
29  class BranchDescription;
30  class BranchIDListHelper;
31  class HistoryAppender;
32  class IOVSyncValue;
33  class ParameterSet;
34  class ProductRegistry;
35  class PreallocationConfiguration;
36  class ThinnedAssociationsHelper;
37  class WaitingTaskHolder;
38 
39  namespace eventsetup {
40  class EventSetupsController;
41  }
42  class SubProcess : public EDConsumerBase {
43  public:
45  ParameterSet const& topLevelParameterSet,
46  std::shared_ptr<ProductRegistry const> parentProductRegistry,
47  std::shared_ptr<BranchIDListHelper const> parentBranchIDListHelper,
48  ThinnedAssociationsHelper const& parentThinnedAssociationsHelper,
50  ActivityRegistry& parentActReg,
51  ServiceToken const& token,
53  PreallocationConfiguration const& preallocConfig,
54  ProcessContext const* parentProcessContext);
55 
56  virtual ~SubProcess();
57 
58  SubProcess(SubProcess const&) = delete; // Disallow copying
59  SubProcess& operator=(SubProcess const&) = delete; // Disallow copying
60  SubProcess(SubProcess&&) = default; // Allow Moving
61  SubProcess& operator=(SubProcess&&) = default; // Allow moving
62 
63  //From OutputModule
65  ThinnedAssociationsHelper const& parentThinnedAssociationsHelper,
66  std::map<BranchID, bool>& keepAssociation);
67 
69 
70  void doBeginJob();
71  void doEndJob();
72 
73  void doEventAsync(WaitingTaskHolder iHolder,
74  EventPrincipal const& principal);
75 
76  void doBeginRun(RunPrincipal const& principal, IOVSyncValue const& ts);
77 
78  void doEndRun(RunPrincipal const& principal, IOVSyncValue const& ts, bool cleaningUpAfterException);
79 
81 
82  void doEndLuminosityBlock(LuminosityBlockPrincipal const& principal, IOVSyncValue const& ts, bool cleaningUpAfterException);
83 
84 
85  void doBeginStream(unsigned int);
86  void doEndStream(unsigned int);
87  void doStreamBeginRun(unsigned int iID, RunPrincipal const& principal, IOVSyncValue const& ts);
88 
89  void doStreamEndRun(unsigned int iID, RunPrincipal const& principal, IOVSyncValue const& ts, bool cleaningUpAfterException);
90 
91  void doStreamBeginLuminosityBlock(unsigned int iID, LuminosityBlockPrincipal const& principal, IOVSyncValue const& ts);
92 
93  void doStreamEndLuminosityBlock(unsigned int iID, LuminosityBlockPrincipal const& principal, IOVSyncValue const& ts, bool cleaningUpAfterException);
94 
95 
96  // Write the luminosity block
97  void writeLumi(ProcessHistoryID const& parentPhID, int runNumber, int lumiNumber);
98 
99  void deleteLumiFromCache(ProcessHistoryID const& parentPhID, int runNumber, int lumiNumber);
100 
101  // Write the run
102  void writeRun(ProcessHistoryID const& parentPhID, int runNumber);
103 
104  void deleteRunFromCache(ProcessHistoryID const& parentPhID, int runNumber);
105 
106  // Call closeFile() on all OutputModules.
109  schedule_->closeOutputFiles();
110  for_all(subProcesses_, [](auto& subProcess) { subProcess.closeOutputFiles(); });
111  }
112 
113  // Call openNewFileIfNeeded() on all OutputModules
116  schedule_->openNewOutputFilesIfNeeded();
117  for_all(subProcesses_, [](auto& subProcess) { subProcess.openNewOutputFilesIfNeeded(); });
118  }
119 
120  // Call openFiles() on all OutputModules
123  schedule_->openOutputFiles(fb);
124  for_all(subProcesses_, [&fb](auto& subProcess) { subProcess.openOutputFiles(fb); });
125  }
126 
128 
129  // Call respondToOpenInputFile() on all Modules
130  void respondToOpenInputFile(FileBlock const& fb);
131 
132  // Call respondToCloseInputFile() on all Modules
135  schedule_->respondToCloseInputFile(fb);
136  for_all(subProcesses_, [&fb](auto& subProcess) { subProcess.respondToCloseInputFile(fb); });
137  }
138 
139  // Call shouldWeCloseFile() on all OutputModules.
140  bool shouldWeCloseOutput() const {
142  if(schedule_->shouldWeCloseOutput()) {
143  return true;
144  }
145  for(auto const& subProcess : subProcesses_) {
146  if(subProcess.shouldWeCloseOutput()) {
147  return true;
148  }
149  }
150  return false;
151  }
152 
155  schedule_->preForkReleaseResources();
156  for_all(subProcesses_, [](auto& subProcess){ subProcess.preForkReleaseResources(); });
157  }
158 
159  void postForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren) {
161  schedule_->postForkReacquireResources(iChildIndex, iNumberOfChildren);
162  for_all(subProcesses_, [iChildIndex, iNumberOfChildren](auto& subProcess){ subProcess.postForkReacquireResources(iChildIndex, iNumberOfChildren); });
163  }
164 
166 
170  std::vector<ModuleDescription const*> getAllModuleDescriptions() const;
171 
175  int totalEvents() const {
176  return schedule_->totalEvents();
177  }
178 
180  int totalEventsPassed() const {
182  return schedule_->totalEventsPassed();
183  }
184 
187  int totalEventsFailed() const {
189  return schedule_->totalEventsFailed();
190  }
191 
194  void enableEndPaths(bool active) {
196  schedule_->enableEndPaths(active);
197  for_all(subProcesses_, [active](auto& subProcess){ subProcess.enableEndPaths(active); });
198  }
199 
201  bool endPathsEnabled() const {
203  return schedule_->endPathsEnabled();
204  }
205 
210  schedule_->getTriggerReport(rep);
211  }
212 
215  bool terminate() const {
217  if(schedule_->terminate()) {
218  return true;
219  }
220  for(auto const& subProcess : subProcesses_) {
221  if(subProcess.terminate()) {
222  return true;
223  }
224  }
225  return false;
226  }
227 
229  void clearCounters() {
231  schedule_->clearCounters();
232  for_all(subProcesses_, [](auto& subProcess){ subProcess.clearCounters(); });
233  }
234 
235  private:
236  void beginJob();
237  void endJob();
238  void processAsync(WaitingTaskHolder iHolder, EventPrincipal const& e);
239  void beginRun(RunPrincipal const& r, IOVSyncValue const& ts);
240  void endRun(RunPrincipal const& r, IOVSyncValue const& ts, bool cleaningUpAfterException);
242  void endLuminosityBlock(LuminosityBlockPrincipal const& lb, IOVSyncValue const& ts, bool cleaningUpAfterException);
243 
244  void propagateProducts(BranchType type, Principal const& parentPrincipal, Principal& principal) const;
245  void fixBranchIDListsForEDAliases(std::map<BranchID::value_type, BranchID::value_type> const& droppedBranchIDToKeptBranchID);
246  void keepThisBranch(BranchDescription const& desc,
247  std::map<BranchID, BranchDescription const*>& trueBranchIDToKeptBranchDesc,
248  std::set<BranchID>& keptProductsInEvent);
249 
250  std::map<BranchID::value_type, BranchID::value_type> const& droppedBranchIDToKeptBranchID() {
252  }
253 
254  std::shared_ptr<BranchIDListHelper const> branchIDListHelper() const {return get_underlying_safe(branchIDListHelper_);}
255  std::shared_ptr<BranchIDListHelper>& branchIDListHelper() {return get_underlying_safe(branchIDListHelper_);}
256  std::shared_ptr<ThinnedAssociationsHelper const> thinnedAssociationsHelper() const {return get_underlying_safe(thinnedAssociationsHelper_);}
257  std::shared_ptr<ThinnedAssociationsHelper> thinnedAssociationsHelper() {return get_underlying_safe(thinnedAssociationsHelper_);}
258 
259  std::shared_ptr<ActivityRegistry> actReg_; // We do not use propagate_const because the registry itself is mutable.
261  std::shared_ptr<ProductRegistry const> parentPreg_;
262  std::shared_ptr<ProductRegistry const> preg_;
265  std::unique_ptr<ExceptionToActionTable const> act_table_;
266  std::shared_ptr<ProcessConfiguration const> processConfiguration_;
269  //We require 1 history for each Run, Lumi and Stream
270  // The vectors first hold Stream info, then Lumi then Run
271  unsigned int historyLumiOffset_;
272  unsigned int historyRunOffset_;
273  std::vector<ProcessHistoryRegistry> processHistoryRegistries_;
274  std::vector<HistoryAppender> historyAppenders_;
278  std::map<ProcessHistoryID, ProcessHistoryID> parentToChildPhID_;
279  std::vector<SubProcess> subProcesses_;
281 
282  // keptProducts_ are pointers to the BranchDescription objects describing
283  // the branches we are to write.
284  //
285  // We do not own the BranchDescriptions to which we point.
289 
290  //EventSelection
294 
295  // needed because of possible EDAliases.
296  // filled in only if key and value are different.
297  std::map<BranchID::value_type, BranchID::value_type> droppedBranchIDToKeptBranchID_;
298 
299  };
300 
301  // free function
302  std::vector<ParameterSet> popSubProcessVParameterSet(ParameterSet& parameterSet);
303 }
304 #endif
unsigned int historyRunOffset_
Definition: SubProcess.h:272
unsigned int historyLumiOffset_
Definition: SubProcess.h:271
ParameterSetID selector_config_id_
Definition: SubProcess.h:292
std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper()
Definition: SubProcess.h:257
type
Definition: HCALResponse.h:21
void doEventAsync(WaitingTaskHolder iHolder, EventPrincipal const &principal)
Definition: SubProcess.cc:324
string rep
Definition: cuy.py:1188
void enableEndPaths(bool active)
Definition: SubProcess.h:194
void respondToOpenInputFile(FileBlock const &fb)
Definition: SubProcess.cc:602
void doStreamEndLuminosityBlock(unsigned int iID, LuminosityBlockPrincipal const &principal, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:567
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
void doBeginRun(RunPrincipal const &principal, IOVSyncValue const &ts)
Definition: SubProcess.cc:399
void writeLumi(ProcessHistoryID const &parentPhID, int runNumber, int lumiNumber)
Definition: SubProcess.cc:501
int totalEventsFailed() const
Definition: SubProcess.h:187
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: SubProcess.h:254
std::vector< ProcessHistoryRegistry > processHistoryRegistries_
Definition: SubProcess.h:273
int totalEvents() const
Definition: SubProcess.h:175
std::array< SelectedProducts, NumBranchTypes > SelectedProductsForBranchType
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: SubProcess.h:264
std::vector< SubProcess > subProcesses_
Definition: SubProcess.h:279
void beginRun(RunPrincipal const &r, IOVSyncValue const &ts)
Definition: SubProcess.cc:405
PathsAndConsumesOfModules pathsAndConsumesOfModules_
Definition: SubProcess.h:268
virtual ~SubProcess()
Definition: SubProcess.cc:196
void updateBranchIDListHelper(BranchIDLists const &)
Definition: SubProcess.cc:595
SelectedProductsForBranchType const & keptProducts() const
Definition: SubProcess.h:68
void doEndStream(unsigned int)
Definition: SubProcess.cc:527
SubProcess & operator=(SubProcess const &)=delete
bool terminate() const
Definition: SubProcess.h:215
void openOutputFiles(FileBlock &fb)
Definition: SubProcess.h:121
void postForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)
Definition: SubProcess.h:159
void doBeginLuminosityBlock(LuminosityBlockPrincipal const &principal, IOVSyncValue const &ts)
Definition: SubProcess.cc:462
std::map< BranchID::value_type, BranchID::value_type > const & droppedBranchIDToKeptBranchID()
Definition: SubProcess.h:250
edm::propagate_const< std::unique_ptr< Schedule > > schedule_
Definition: SubProcess.h:277
int totalEventsPassed() const
Return the number of events which have been passed by one or more trigger paths.
Definition: SubProcess.h:180
bool endPathsEnabled() const
Return true if end_paths are active, and false if they are inactive.
Definition: SubProcess.h:201
BranchType
Definition: BranchType.h:11
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void openNewOutputFilesIfNeeded()
Definition: SubProcess.h:114
ServiceToken serviceToken_
Definition: SubProcess.h:260
void deleteRunFromCache(ProcessHistoryID const &parentPhID, int runNumber)
Definition: SubProcess.cc:453
bool shouldWeCloseOutput() const
Definition: SubProcess.h:140
void processAsync(WaitingTaskHolder iHolder, EventPrincipal const &e)
Definition: SubProcess.cc:340
SelectedProductsForBranchType keptProducts_
Definition: SubProcess.h:286
void selectProducts(ProductRegistry const &preg, ThinnedAssociationsHelper const &parentThinnedAssociationsHelper, std::map< BranchID, bool > &keepAssociation)
Definition: SubProcess.cc:243
ProductSelectorRules productSelectorRules_
Definition: SubProcess.h:287
void closeOutputFiles()
Definition: SubProcess.h:107
edm::propagate_const< std::shared_ptr< eventsetup::EventSetupProvider > > esp_
Definition: SubProcess.h:276
std::vector< ModuleDescription const * > getAllModuleDescriptions() const
Return a vector allowing const access to all the ModuleDescriptions for this SubProcess.
edm::propagate_const< std::unique_ptr< ParameterSet > > processParameterSet_
Definition: SubProcess.h:280
void keepThisBranch(BranchDescription const &desc, std::map< BranchID, BranchDescription const * > &trueBranchIDToKeptBranchDesc, std::set< BranchID > &keptProductsInEvent)
Definition: SubProcess.cc:285
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void beginLuminosityBlock(LuminosityBlockPrincipal const &lb, IOVSyncValue const &ts)
Definition: SubProcess.cc:468
void preForkReleaseResources()
Definition: SubProcess.h:153
std::unique_ptr< ExceptionToActionTable const > act_table_
Definition: SubProcess.h:265
std::vector< ParameterSet > popSubProcessVParameterSet(ParameterSet &parameterSet)
Definition: SubProcess.cc:610
void doEndRun(RunPrincipal const &principal, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:427
std::map< BranchID::value_type, BranchID::value_type > droppedBranchIDToKeptBranchID_
Definition: SubProcess.h:297
ProductSelector productSelector_
Definition: SubProcess.h:288
detail::TriggerResultsBasedEventSelector selectors_
Definition: SubProcess.h:293
void doStreamBeginLuminosityBlock(unsigned int iID, LuminosityBlockPrincipal const &principal, IOVSyncValue const &ts)
Definition: SubProcess.cc:556
void doStreamEndRun(unsigned int iID, RunPrincipal const &principal, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:545
std::map< ProcessHistoryID, ProcessHistoryID > parentToChildPhID_
Definition: SubProcess.h:278
void respondToCloseInputFile(FileBlock const &fb)
Definition: SubProcess.h:133
std::shared_ptr< ActivityRegistry > actReg_
Definition: SubProcess.h:259
void deleteLumiFromCache(ProcessHistoryID const &parentPhID, int runNumber, int lumiNumber)
Definition: SubProcess.cc:511
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: SubProcess.h:263
void endRun(RunPrincipal const &r, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:433
void getTriggerReport(TriggerReport &rep) const
Definition: SubProcess.h:208
std::vector< HistoryAppender > historyAppenders_
Definition: SubProcess.h:274
void endLuminosityBlock(LuminosityBlockPrincipal const &lb, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:491
void propagateProducts(BranchType type, Principal const &parentPrincipal, Principal &principal) const
Definition: SubProcess.cc:579
void doBeginStream(unsigned int)
Definition: SubProcess.cc:520
std::shared_ptr< ProductRegistry const > parentPreg_
Definition: SubProcess.h:261
void fixBranchIDListsForEDAliases(std::map< BranchID::value_type, BranchID::value_type > const &droppedBranchIDToKeptBranchID)
Definition: SubProcess.cc:309
std::shared_ptr< BranchIDListHelper > & branchIDListHelper()
Definition: SubProcess.h:255
ProcessContext processContext_
Definition: SubProcess.h:267
void writeRun(ProcessHistoryID const &parentPhID, int runNumber)
Definition: SubProcess.cc:443
std::shared_ptr< ThinnedAssociationsHelper const > thinnedAssociationsHelper() const
Definition: SubProcess.h:256
SubProcess(ParameterSet &parameterSet, ParameterSet const &topLevelParameterSet, std::shared_ptr< ProductRegistry const > parentProductRegistry, std::shared_ptr< BranchIDListHelper const > parentBranchIDListHelper, ThinnedAssociationsHelper const &parentThinnedAssociationsHelper, eventsetup::EventSetupsController &esController, ActivityRegistry &parentActReg, ServiceToken const &token, serviceregistry::ServiceLegacy iLegacy, PreallocationConfiguration const &preallocConfig, ProcessContext const *parentProcessContext)
Definition: SubProcess.cc:41
preg
Definition: Schedule.cc:384
void clearCounters()
Clear all the counters in the trigger report.
Definition: SubProcess.h:229
std::shared_ptr< ProductRegistry const > preg_
Definition: SubProcess.h:262
PrincipalCache principalCache_
Definition: SubProcess.h:275
ParameterSet const & parameterSet(Provenance const &provenance)
Definition: Provenance.cc:11
void doStreamBeginRun(unsigned int iID, RunPrincipal const &principal, IOVSyncValue const &ts)
Definition: SubProcess.cc:534
void doEndLuminosityBlock(LuminosityBlockPrincipal const &principal, IOVSyncValue const &ts, bool cleaningUpAfterException)
Definition: SubProcess.cc:485
std::shared_ptr< ProcessConfiguration const > processConfiguration_
Definition: SubProcess.h:266