CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ProducingModuleAdaptorBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FWCore/Framework
4 // Class : edm::stream::ProducingModuleAdaptorBase
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Chris Jones
10 // Created: Fri, 02 Aug 2013 21:43:44 GMT
11 //
12 
13 // system include files
14 #include <array>
15 #include <cassert>
16 
17 // user include files
27 
28 //
29 // constants, enums and typedefs
30 //
31 
32 //
33 // static data member definitions
34 //
35 
36 //
37 // constructors and destructor
38 //
39 namespace edm {
40  namespace stream {
41  template <typename T>
43 
44  template <typename T>
46  for (auto m : m_streamModules) {
47  delete m;
48  }
49  }
50 
51  template <typename T>
53  for (auto m : m_streamModules) {
54  delete m;
55  }
56  m_streamModules.clear();
57  }
58 
59  //
60  // member functions
61  //
62 
63  template <typename T>
65  m_streamModules.resize(iPrealloc.numberOfStreams(), static_cast<T*>(nullptr));
66  setupStreamModules();
67  preallocLumis(iPrealloc.numberOfLuminosityBlocks());
68  }
69 
70  template <typename T>
72  ProductRegistry* reg) {
73  auto firstMod = m_streamModules[0];
74  if (firstMod->registrationCallback() and m_streamModules.size() > 1) {
75  //we have a callback so we will collect all callbacks and create a new callback which calls them all.
76 
77  std::vector<std::function<void(BranchDescription const&)>> callbacks;
78  callbacks.reserve(m_streamModules.size());
79 
80  for (auto mod : m_streamModules) {
81  callbacks.push_back(mod->registrationCallback());
82  }
83  //Since only the first module will actually do the registration
84  // we will change its callback to call all the callbacks
85  firstMod->callWhenNewProductsRegistered([callbacks](BranchDescription const& iBD) {
86  for (const auto& c : callbacks) {
87  c(iBD);
88  }
89  });
90  }
91  firstMod->registerProducts(firstMod, reg, moduleDescription_);
92  }
93 
94  template <typename T>
96  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
97  assert(not m_streamModules.empty());
98  m_streamModules[0]->itemsToGet(iType, iIndices);
99  }
100 
101  template <typename T>
103  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
104  assert(not m_streamModules.empty());
105  m_streamModules[0]->itemsMayGet(iType, iIndices);
106  }
107 
108  template <typename T>
109  std::vector<edm::ProductResolverIndexAndSkipBit> const& ProducingModuleAdaptorBase<T>::itemsToGetFrom(
110  BranchType iType) const {
111  assert(not m_streamModules.empty());
112  return m_streamModules[0]->itemsToGetFrom(iType);
113  }
114 
115  template <typename T>
117  edm::Transition iTrans) const {
118  assert(not m_streamModules.empty());
119  return m_streamModules[0]->esGetTokenIndicesVector(iTrans);
120  }
121 
122  template <typename T>
124  edm::Transition iTrans) const {
125  assert(not m_streamModules.empty());
126  return m_streamModules[0]->esGetTokenRecordIndicesVector(iTrans);
127  }
128 
129  template <typename T>
131  std::array<std::vector<ModuleDescription const*>*, NumBranchTypes>& modules,
132  std::vector<ModuleProcessName>& modulesInPreviousProcesses,
133  ProductRegistry const& preg,
134  std::map<std::string, ModuleDescription const*> const& labelsToDesc,
135  std::string const& processName) const {
136  assert(not m_streamModules.empty());
137  return m_streamModules[0]->modulesWhoseProductsAreConsumed(
138  modules, modulesInPreviousProcesses, preg, labelsToDesc, processName);
139  }
140 
141  template <typename T>
143  for (auto mod : m_streamModules) {
144  mod->convertCurrentProcessAlias(processName);
145  }
146  }
147 
148  template <typename T>
149  std::vector<edm::ConsumesInfo> ProducingModuleAdaptorBase<T>::consumesInfo() const {
150  assert(not m_streamModules.empty());
151  return m_streamModules[0]->consumesInfo();
152  }
153 
154  template <typename T>
156  ProductResolverIndexHelper const& iHelper,
157  bool iPrefetchMayGet) {
158  for (auto mod : m_streamModules) {
159  mod->updateLookup(iType, iHelper, iPrefetchMayGet);
160  }
161  }
162  template <typename T>
164  for (auto mod : m_streamModules) {
165  mod->updateLookup(iPI);
166  }
167  }
168 
169  template <typename T>
171  ModuleToResolverIndicies const& iIndicies,
172  std::string const& moduleLabel) {
173  for (auto mod : m_streamModules) {
174  mod->resolvePutIndicies(iBranchType, iIndicies, moduleLabel);
175  }
176  }
177 
178  template <typename T>
179  std::vector<edm::ProductResolverIndex> const& ProducingModuleAdaptorBase<T>::indiciesForPutProducts(
180  BranchType iBranchType) const {
181  return m_streamModules[0]->indiciesForPutProducts(iBranchType);
182  }
183 
184  template <typename T>
186  m_streamModules[id]->beginStream(id);
187  }
188  template <typename T>
190  m_streamModules[id]->endStream();
191  }
192 
193  template <typename T>
195  RunTransitionInfo const& info,
196  ModuleCallingContext const* mcc) {
197  RunPrincipal const& rp = info.principal();
198  auto mod = m_streamModules[id];
199  setupRun(mod, rp.index());
200 
201  Run r(rp, moduleDescription_, mcc, false);
202  r.setConsumer(mod);
203  ESParentContext parentC(mcc);
204  const EventSetup c{
205  info, static_cast<unsigned int>(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), parentC};
206  mod->beginRun(r, c);
207  }
208 
209  template <typename T>
211  RunTransitionInfo const& info,
212  ModuleCallingContext const* mcc) {
213  auto mod = m_streamModules[id];
214  Run r(info, moduleDescription_, mcc, true);
215  r.setConsumer(mod);
216  ESParentContext parentC(mcc);
217  const EventSetup c{
218  info, static_cast<unsigned int>(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), parentC};
219  mod->endRun(r, c);
220  streamEndRunSummary(mod, r, c);
221  }
222 
223  template <typename T>
225  LumiTransitionInfo const& info,
226  ModuleCallingContext const* mcc) {
227  LuminosityBlockPrincipal const& lbp = info.principal();
228  auto mod = m_streamModules[id];
229  setupLuminosityBlock(mod, lbp.index());
230 
231  LuminosityBlock lb(lbp, moduleDescription_, mcc, false);
232  lb.setConsumer(mod);
233  ESParentContext parentC(mcc);
234  const EventSetup c{info,
235  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
236  mod->esGetTokenIndices(Transition::BeginLuminosityBlock),
237  parentC};
238  mod->beginLuminosityBlock(lb, c);
239  }
240 
241  template <typename T>
243  LumiTransitionInfo const& info,
244  ModuleCallingContext const* mcc) {
245  auto mod = m_streamModules[id];
246  LuminosityBlock lb(info, moduleDescription_, mcc, true);
247  lb.setConsumer(mod);
248  ESParentContext parentC(mcc);
249  const EventSetup c{info,
250  static_cast<unsigned int>(Transition::EndLuminosityBlock),
251  mod->esGetTokenIndices(Transition::EndLuminosityBlock),
252  parentC};
253  mod->endLuminosityBlock(lb, c);
254  streamEndLuminosityBlockSummary(mod, lb, c);
255  }
256 
257  template <typename T>
260  assert(not m_streamModules.empty());
261  auto mod = m_streamModules[0];
262  mod->registerThinnedAssociations(registry, helper);
263  }
264  } // namespace stream
265 } // namespace edm
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
static const TGPicture * info(bool iBackgroundIsBlack)
void setConsumer(EDConsumerBase const *iConsumer)
void doRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const
Definition: helper.py:1
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector(edm::Transition iTrans) 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
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
assert(be >=bs)
void doPreallocate(PreallocationConfiguration const &)
BranchType
Definition: BranchType.h:11
void registerProductsAndCallbacks(ProducingModuleAdaptorBase const *, ProductRegistry *reg)
void doStreamBeginRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
std::vector< ESProxyIndex > const & esGetTokenIndicesVector(edm::Transition iTrans) const
Transition
Definition: Transition.h:12
RunIndex index() const
Definition: RunPrincipal.h:57
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those callbacks
Definition: Activities.doc:12
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
void convertCurrentProcessAlias(std::string const &processName)
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
HLT enums.
LuminosityBlockIndex index() const
std::vector< ConsumesInfo > consumesInfo() const
void doStreamEndRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
long double T
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > > ModuleToResolverIndicies
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
Definition: Run.h:45