CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ProducingModuleAdaptorBase.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_stream_ProducingModuleAdaptorBase_h
2 #define FWCore_Framework_stream_ProducingModuleAdaptorBase_h
3 // -*- C++ -*-
4 //
5 // Package: FWCore/Framework
6 // Class : ProducingModuleAdaptorBase
7 //
16 //
17 // Original Author: Chris Jones
18 // Created: Fri, 02 Aug 2013 18:09:15 GMT
19 //
20 
21 // system include files
22 #include <array>
23 #include <map>
24 #include <string>
25 #include <vector>
26 #include <unordered_map>
27 
28 // user include files
44 
45 // forward declarations
46 
47 namespace edm {
48  class Event;
49  class ModuleCallingContext;
50  class ModuleProcessName;
51  class ProductResolverIndexHelper;
52  class EDConsumerBase;
53  class PreallocationConfiguration;
54  class ProductResolverIndexAndSkipBit;
55  class ThinnedAssociationsHelper;
56 
57  namespace maker {
58  template <typename T>
59  class ModuleHolderT;
60  }
61 
62  namespace eventsetup {
64  }
65 
66  namespace stream {
67  template <typename T>
68  class ProducingModuleAdaptorBase {
69  public:
70  template <typename U>
71  friend class edm::WorkerT;
72  template <typename U>
74 
76  ProducingModuleAdaptorBase(const ProducingModuleAdaptorBase&) = delete; // stop default
77  const ProducingModuleAdaptorBase& operator=(const ProducingModuleAdaptorBase&) = delete; // stop default
79 
80  // ---------- const member functions ---------------------
81 
82  // ---------- static member functions --------------------
83 
84  // ---------- member functions ---------------------------
86 
87  virtual bool wantsProcessBlocks() const = 0;
88  virtual bool wantsInputProcessBlocks() const = 0;
89  virtual bool wantsGlobalRuns() const = 0;
90  virtual bool wantsGlobalLuminosityBlocks() const = 0;
91  virtual bool hasAcquire() const = 0;
92  virtual bool hasAccumulator() const = 0;
93  bool wantsStreamRuns() const { return true; }
94  bool wantsStreamLuminosityBlocks() const { return true; }
95 
97 
98  void itemsToGet(BranchType, std::vector<ProductResolverIndexAndSkipBit>&) const;
99  void itemsMayGet(BranchType, std::vector<ProductResolverIndexAndSkipBit>&) const;
100  std::vector<ProductResolverIndexAndSkipBit> const& itemsToGetFrom(BranchType) const;
101 
102  std::vector<ESProxyIndex> const& esGetTokenIndicesVector(edm::Transition iTrans) const;
103  std::vector<ESRecordIndex> const& esGetTokenRecordIndicesVector(edm::Transition iTrans) const;
104 
105  void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const&, bool iPrefetchMayGet);
107  virtual void selectInputProcessBlocks(ProductRegistry const&, ProcessBlockHelperBase const&) = 0;
108 
109  void modulesWhoseProductsAreConsumed(std::array<std::vector<ModuleDescription const*>*, NumBranchTypes>& modules,
110  std::vector<ModuleProcessName>& modulesInPreviousProcesses,
111  ProductRegistry const& preg,
112  std::map<std::string, ModuleDescription const*> const& labelsToDesc,
113  std::string const& processName) const;
114 
116 
117  std::vector<ConsumesInfo> consumesInfo() const;
118 
120  std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex>>;
121 
122  void resolvePutIndicies(BranchType iBranchType,
123  ModuleToResolverIndicies const& iIndicies,
124  std::string const& moduleLabel);
125 
126  std::vector<edm::ProductResolverIndex> const& indiciesForPutProducts(BranchType iBranchType) const;
127 
128  protected:
129  template <typename F>
130  void createStreamModules(F iFunc) {
131  unsigned int iStreamModule = 0;
132  for (auto& m : m_streamModules) {
133  m = iFunc(iStreamModule);
134  m->setModuleDescriptionPtr(&moduleDescription_);
135  ++iStreamModule;
136  }
137  }
138 
139  void commit(ProcessBlock& iProcessBlock) {
141  }
144  template <typename I>
145  void commit(Event& iEvent, I* iID) {
147  }
148 
149  const EDConsumerBase* consumer() { return m_streamModules[0]; }
150 
151  const ProducerBase* producer() { return m_streamModules[0]; }
152 
153  void deleteModulesEarly();
154 
155  private:
157  virtual void preallocLumis(unsigned int) {}
158  virtual void setupStreamModules() = 0;
159  virtual void doBeginJob() = 0;
160  virtual void doEndJob() = 0;
161 
162  void doBeginStream(StreamID);
163  void doEndStream(StreamID);
165  virtual void setupRun(T*, RunIndex) = 0;
167  virtual void streamEndRunSummary(T*, edm::Run const&, edm::EventSetup const&) = 0;
168 
170  virtual void setupLuminosityBlock(T*, LuminosityBlockIndex) = 0;
172  virtual void streamEndLuminosityBlockSummary(T*, edm::LuminosityBlock const&, edm::EventSetup const&) = 0;
173 
174  virtual void doBeginProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*) = 0;
176  virtual void doEndProcessBlock(ProcessBlockPrincipal const&, ModuleCallingContext const*) = 0;
177  virtual void doBeginRun(RunTransitionInfo const&, ModuleCallingContext const*) = 0;
178  virtual void doEndRun(RunTransitionInfo const&, ModuleCallingContext const*) = 0;
179  virtual void doBeginLuminosityBlock(LumiTransitionInfo const&, ModuleCallingContext const*) = 0;
180  virtual void doEndLuminosityBlock(LumiTransitionInfo const&, ModuleCallingContext const*) = 0;
181 
184  virtual void doRespondToCloseOutputFile() = 0;
186 
187  // ---------- member data --------------------------------
190 
191  protected:
192  std::vector<T*> m_streamModules;
193  };
194  } // namespace stream
195 } // namespace edm
196 
197 #endif
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
virtual void selectInputProcessBlocks(ProductRegistry const &, ProcessBlockHelperBase const &)=0
virtual void streamEndRunSummary(T *, edm::Run const &, edm::EventSetup const &)=0
void doRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector(edm::Transition iTrans) const
const ModuleDescription & moduleDescription() const
void modulesWhoseProductsAreConsumed(std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modules, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
void commit_(std::vector< edm::ProductResolverIndex > const &iShouldPut)
Definition: ProcessBlock.cc:29
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
virtual void doEndProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
void doPreallocate(PreallocationConfiguration const &)
virtual void doEndLuminosityBlock(LumiTransitionInfo const &, ModuleCallingContext const *)=0
BranchType
Definition: BranchType.h:11
virtual void doBeginLuminosityBlock(LumiTransitionInfo const &, ModuleCallingContext const *)=0
virtual bool hasAccumulator() const =0
virtual bool wantsGlobalLuminosityBlocks() const =0
int iEvent
Definition: GenABIO.cc:224
virtual void setupRun(T *, RunIndex)=0
void registerProductsAndCallbacks(ProducingModuleAdaptorBase const *, ProductRegistry *reg)
void commit_(std::vector< edm::ProductResolverIndex > const &iShouldPut)
Definition: Run.cc:85
void setModuleDescription(ModuleDescription const &md)
void doStreamBeginRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
virtual void streamEndLuminosityBlockSummary(T *, edm::LuminosityBlock const &, edm::EventSetup const &)=0
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
const ProducingModuleAdaptorBase & operator=(const ProducingModuleAdaptorBase &)=delete
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
virtual void doBeginProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
std::vector< ESProxyIndex > const & esGetTokenIndicesVector(edm::Transition iTrans) const
Transition
Definition: Transition.h:12
const std::complex< double > I
Definition: I.h:8
virtual void doBeginRun(RunTransitionInfo const &, ModuleCallingContext const *)=0
virtual bool wantsInputProcessBlocks() const =0
virtual void doAccessInputProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
virtual bool wantsProcessBlocks() const =0
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
void convertCurrentProcessAlias(std::string const &processName)
virtual void setupLuminosityBlock(T *, LuminosityBlockIndex)=0
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
virtual void doEndRun(RunTransitionInfo const &, ModuleCallingContext const *)=0
virtual bool wantsGlobalRuns() const =0
HLT enums.
std::vector< ConsumesInfo > consumesInfo() const
void doStreamEndRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
virtual bool hasAcquire() const =0
long double T
std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > > ModuleToResolverIndicies
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
void commit_(std::vector< edm::ProductResolverIndex > const &iShouldPut)
Definition: Run.h:45