CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
OutputModule.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_OutputModule_h
2 #define FWCore_Framework_OutputModule_h
3 
4 /*----------------------------------------------------------------------
5 
6 OutputModule: The base class of all "modules" that write Events to an
7 output stream.
8 
9 ----------------------------------------------------------------------*/
10 
11 #include <vector>
12 
13 #include "boost/array.hpp"
14 #include "boost/utility.hpp"
15 
20 
26 
27 #include <string>
28 
29 namespace edm {
30 
32 
33  std::vector<std::string> const& getAllTriggerNames();
34 
35 
36  class OutputModule : private boost::noncopyable {
37  public:
38  template <typename T> friend class WorkerT;
39  friend class OutputWorker;
42 
43  explicit OutputModule(ParameterSet const& pset);
44  virtual ~OutputModule();
47  int maxEvents() const {return maxEvents_;}
48 
51  int remainingEvents() const {return remainingEvents_;}
52 
53  bool selected(BranchDescription const& desc) const;
54 
55  void selectProducts();
56  std::string const& processName() const {return process_name_;}
57  SelectionsArray const& keptProducts() const {return keptProducts_;}
58  boost::array<bool, NumBranchTypes> const& hasNewlyDroppedBranch() const {return hasNewlyDroppedBranch_;}
59 
60  static void fillDescription(ParameterSetDescription & desc);
61  static void fillDescriptions(ConfigurationDescriptions& descriptions);
62  static const std::string& baseType();
63 
65 
66  bool wantAllEvents() const {return wantAllEvents_;}
67 
68  protected:
69  //Trig const& getTriggerResults(Event const& ep) const;
70  Trig getTriggerResults(Event const& ep) const;
71 
72  // This function is needed for compatibility with older code. We
73  // need to clean up the use of Event and EventPrincipal, to avoid
74  // creation of multiple Event objects when handling a single
75  // event.
76  Trig getTriggerResults(EventPrincipal const& ep) const;
77 
78  // The returned pointer will be null unless the this is currently
79  // executing its event loop function ('write').
81 
82  ModuleDescription const& description() const;
83 
85 
86  private:
87 
90 
91  // TODO: Give OutputModule
92  // an interface (protected?) that supplies client code with the
93  // needed functionality *without* giving away implementation
94  // details ... don't just return a reference to keptProducts_, because
95  // we are looking to have the flexibility to change the
96  // implementation of keptProducts_ without modifying clients. When this
97  // change is made, we'll have a one-time-only task of modifying
98  // clients (classes derived from OutputModule) to use the
99  // newly-introduced interface.
100  // TODO: Consider using shared pointers here?
101 
102  // keptProducts_ are pointers to the BranchDescription objects describing
103  // the branches we are to write.
104  //
105  // We do not own the BranchDescriptions to which we point.
107  boost::array<bool, NumBranchTypes> hasNewlyDroppedBranch_;
108 
109  std::string process_name_;
113 
114  // We do not own the pointed-to CurrentProcessingContext.
116 
117  //This will store TriggerResults objects for the current event.
118  // mutable std::vector<Trig> prods_;
119  mutable bool prodsValid_;
120 
123  // ID of the ParameterSet that configured the event selector
124  // subsystem.
126 
127  typedef std::map<BranchID, std::set<ParentageID> > BranchParents;
129 
131 
132  //------------------------------------------------------------------
133  // private member functions
134  //------------------------------------------------------------------
135  void configure(OutputModuleDescription const& desc);
136  void doBeginJob();
137  void doEndJob();
138  bool doEvent(EventPrincipal const& ep, EventSetup const& c,
139  CurrentProcessingContext const* cpc);
140  bool doBeginRun(RunPrincipal const& rp, EventSetup const& c,
141  CurrentProcessingContext const* cpc);
142  bool doEndRun(RunPrincipal const& rp, EventSetup const& c,
143  CurrentProcessingContext const* cpc);
145  CurrentProcessingContext const* cpc);
147  CurrentProcessingContext const* cpc);
148  void doWriteRun(RunPrincipal const& rp);
150  void doOpenFile(FileBlock const& fb);
156  void doPostForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren);
157 
158  std::string workerType() const {return "OutputWorker";}
159 
161  void doCloseFile();
162 
165  void maybeOpenFile();
166 
167 
168  // Do the end-of-file tasks; this is only called internally, after
169  // the appropriate tests have been done.
170  void reallyCloseFile();
171 
173 
175  virtual bool shouldWeCloseFile() const {return false;}
176 
177  virtual void write(EventPrincipal const& e) = 0;
178  virtual void beginJob(){}
179  virtual void endJob(){}
180  virtual void beginRun(RunPrincipal const& r){}
181  virtual void endRun(RunPrincipal const& r){}
182  virtual void writeRun(RunPrincipal const& r) = 0;
185  virtual void writeLuminosityBlock(LuminosityBlockPrincipal const& lb) = 0;
186  virtual void openFile(FileBlock const& fb) {}
187  virtual void respondToOpenInputFile(FileBlock const& fb) {}
188  virtual void respondToCloseInputFile(FileBlock const& fb) {}
189  virtual void respondToOpenOutputFiles(FileBlock const& fb) {}
190  virtual void respondToCloseOutputFiles(FileBlock const& fb) {}
191  virtual void preForkReleaseResources() {}
192  virtual void postForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren) {}
193 
194  virtual bool isFileOpen() const { return true; }
195 
196  virtual void doOpenFile() { }
197 
199  moduleDescription_ = md;
200  }
201 
202  void updateBranchParents(EventPrincipal const& ep);
203  void fillDependencyGraph();
204 
205  bool limitReached() const {return remainingEvents_ == 0;}
206 
207  // The following member functions are part of the Template Method
208  // pattern, used for implementing doCloseFile() and maybeEndFile().
209 
210  virtual void startEndFile() {}
211  virtual void writeFileFormatVersion() {}
212  virtual void writeFileIdentifier() {}
213  virtual void writeIndexIntoFile() {}
215  virtual void writeProcessHistoryRegistry() {}
216  virtual void writeParameterSetRegistry() {}
217  virtual void writeBranchIDListRegistry() {}
218  virtual void writeParentageRegistry() {}
220  virtual void writeProductDependencies() {}
221  virtual void writeBranchMapper() {}
222  virtual void finishEndFile() {}
223  };
224 }
225 
226 //this is included after the class definition since this header also needs to know about OutputModule
227 // we put this here since all OutputModules need this header to create their plugin
229 
230 #endif
void setModuleDescription(ModuleDescription const &md)
Definition: OutputModule.h:198
virtual void respondToOpenInputFile(FileBlock const &fb)
Definition: OutputModule.h:187
void doPostForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)
virtual void doOpenFile()
Definition: OutputModule.h:196
virtual void writeProductDependencies()
Definition: OutputModule.h:220
SelectionsArray const & keptProducts() const
Definition: OutputModule.h:57
virtual void endLuminosityBlock(LuminosityBlockPrincipal const &lb)
Definition: OutputModule.h:184
ModuleDescription moduleDescription_
Definition: OutputModule.h:112
virtual void writeFileFormatVersion()
Definition: OutputModule.h:211
bool doEndLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)
CurrentProcessingContext const * current_context_
Definition: OutputModule.h:115
detail::CachedProducts selectors_
Definition: OutputModule.h:122
detail::CachedProducts::handle_t Trig
Definition: OutputModule.h:31
virtual void writeIndexIntoFile()
Definition: OutputModule.h:213
int remainingEvents() const
Definition: OutputModule.h:51
virtual void beginLuminosityBlock(LuminosityBlockPrincipal const &lb)
Definition: OutputModule.h:183
boost::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: OutputModule.h:107
std::string const & processName() const
Definition: OutputModule.h:56
static const std::string & baseType()
virtual void respondToOpenOutputFiles(FileBlock const &fb)
Definition: OutputModule.h:189
std::map< BranchID, std::set< ParentageID > > BranchParents
Definition: OutputModule.h:127
void updateBranchParents(EventPrincipal const &ep)
virtual void finishEndFile()
Definition: OutputModule.h:222
bool selected(BranchDescription const &desc) const
virtual void beginRun(RunPrincipal const &r)
Definition: OutputModule.h:180
virtual void writeParentageRegistry()
Definition: OutputModule.h:218
void doCloseFile()
Tell the OutputModule that is must end the current file.
bool wantAllEvents() const
Definition: OutputModule.h:66
std::string process_name_
Definition: OutputModule.h:109
virtual void writeProcessConfigurationRegistry()
Definition: OutputModule.h:214
static void fillDescriptions(ConfigurationDescriptions &descriptions)
bool doEvent(EventPrincipal const &ep, EventSetup const &c, CurrentProcessingContext const *cpc)
OutputWorker WorkerType
Definition: OutputModule.h:41
boost::array< Selections, NumBranchTypes > SelectionsArray
Definition: Selections.h:12
SelectionsArray keptProducts_
Definition: OutputModule.h:106
void doWriteLuminosityBlock(LuminosityBlockPrincipal const &lbp)
void doPreForkReleaseResources()
virtual void writeLuminosityBlock(LuminosityBlockPrincipal const &lb)=0
GroupSelectorRules groupSelectorRules_
Definition: OutputModule.h:110
GroupSelector groupSelector_
Definition: OutputModule.h:111
void doRespondToCloseOutputFiles(FileBlock const &fb)
tuple pset
Definition: CrabTask.py:85
virtual void writeRun(RunPrincipal const &r)=0
virtual void write(EventPrincipal const &e)=0
virtual bool isFileOpen() const
Definition: OutputModule.h:194
virtual void respondToCloseOutputFiles(FileBlock const &fb)
Definition: OutputModule.h:190
virtual bool shouldWeCloseFile() const
Ask the OutputModule if we should end the current file.
Definition: OutputModule.h:175
void doRespondToCloseInputFile(FileBlock const &fb)
virtual void writeFileIdentifier()
Definition: OutputModule.h:212
void fillDependencyGraph()
BranchChildren const & branchChildren() const
Definition: OutputModule.h:64
void registerAnyProducts(OutputModule const *, ProductRegistry const *)
Definition: OutputModule.h:172
CurrentProcessingContext const * currentContext() const
int maxEvents() const
Definition: OutputModule.h:47
void doWriteRun(RunPrincipal const &rp)
static void fillDescription(ParameterSetDescription &desc)
virtual void respondToCloseInputFile(FileBlock const &fb)
Definition: OutputModule.h:188
bool limitReached() const
Definition: OutputModule.h:205
OutputModule ModuleType
Definition: OutputModule.h:40
boost::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: OutputModule.h:58
bool doBeginLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)
std::vector< std::string > const & getAllTriggerNames()
Definition: OutputModule.cc:35
author Stefano ARGIRO author Bill Tanenbaum
BranchChildren branchChildren_
Definition: OutputModule.h:130
Trig getTriggerResults(Event const &ep) const
virtual void writeParameterSetRegistry()
Definition: OutputModule.h:216
virtual void endJob()
Definition: OutputModule.h:179
virtual void beginJob()
Definition: OutputModule.h:178
virtual void endRun(RunPrincipal const &r)
Definition: OutputModule.h:181
std::string workerType() const
Definition: OutputModule.h:158
void doRespondToOpenInputFile(FileBlock const &fb)
virtual ~OutputModule()
bool doEndRun(RunPrincipal const &rp, EventSetup const &c, CurrentProcessingContext const *cpc)
void configure(OutputModuleDescription const &desc)
virtual void openFile(FileBlock const &fb)
Definition: OutputModule.h:186
bool doBeginRun(RunPrincipal const &rp, EventSetup const &c, CurrentProcessingContext const *cpc)
virtual void startEndFile()
Definition: OutputModule.h:210
virtual void writeBranchMapper()
Definition: OutputModule.h:221
ModuleDescription const & description() const
virtual void postForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)
Definition: OutputModule.h:192
BranchParents branchParents_
Definition: OutputModule.h:128
virtual void preForkReleaseResources()
Definition: OutputModule.h:191
OutputModule(ParameterSet const &pset)
virtual void writeBranchIDListRegistry()
Definition: OutputModule.h:217
virtual void writeProcessHistoryRegistry()
Definition: OutputModule.h:215
void doRespondToOpenOutputFiles(FileBlock const &fb)
ParameterSetID selectorConfig() const
Definition: OutputModule.h:84
virtual void writeProductDescriptionRegistry()
Definition: OutputModule.h:219
ParameterSetID selector_config_id_
Definition: OutputModule.h:125