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 <cassert>
15 
16 // user include files
25 
26 //
27 // constants, enums and typedefs
28 //
29 
30 //
31 // static data member definitions
32 //
33 
34 //
35 // constructors and destructor
36 //
37 namespace edm {
38  namespace stream {
39  template <typename T>
41 
42  template <typename T>
44  for (auto m : m_streamModules) {
45  delete m;
46  }
47  }
48 
49  //
50  // member functions
51  //
52 
53  template <typename T>
55  m_streamModules.resize(iPrealloc.numberOfStreams(), static_cast<T*>(nullptr));
56  setupStreamModules();
57  preallocLumis(iPrealloc.numberOfLuminosityBlocks());
58  }
59 
60  template <typename T>
62  ProductRegistry* reg) {
63  auto firstMod = m_streamModules[0];
64  if (firstMod->registrationCallback() and m_streamModules.size() > 1) {
65  //we have a callback so we will collect all callbacks and create a new callback which calls them all.
66 
68  callbacks.reserve(m_streamModules.size());
69 
70  for (auto mod : m_streamModules) {
71  callbacks.push_back(mod->registrationCallback());
72  }
73  //Since only the first module will actually do the registration
74  // we will change its callback to call all the callbacks
75  firstMod->callWhenNewProductsRegistered([callbacks](BranchDescription const& iBD) {
76  for (const auto& c : callbacks) {
77  c(iBD);
78  }
79  });
80  }
81  firstMod->registerProducts(firstMod, reg, moduleDescription_);
82  }
83 
84  template <typename T>
86  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
87  assert(not m_streamModules.empty());
88  m_streamModules[0]->itemsToGet(iType, iIndices);
89  }
90 
91  template <typename T>
93  std::vector<ProductResolverIndexAndSkipBit>& iIndices) const {
94  assert(not m_streamModules.empty());
95  m_streamModules[0]->itemsMayGet(iType, iIndices);
96  }
97 
98  template <typename T>
99  std::vector<edm::ProductResolverIndexAndSkipBit> const& ProducingModuleAdaptorBase<T>::itemsToGetFrom(
100  BranchType iType) const {
101  assert(not m_streamModules.empty());
102  return m_streamModules[0]->itemsToGetFrom(iType);
103  }
104 
105  template <typename T>
107  edm::Transition iTrans) const {
108  assert(not m_streamModules.empty());
109  return m_streamModules[0]->esGetTokenIndicesVector(iTrans);
110  }
111 
112  template <typename T>
114  edm::Transition iTrans) const {
115  assert(not m_streamModules.empty());
116  return m_streamModules[0]->esGetTokenRecordIndicesVector(iTrans);
117  }
118 
119  template <typename T>
121  std::vector<ModuleDescription const*>& modules,
122  ProductRegistry const& preg,
123  std::map<std::string, ModuleDescription const*> const& labelsToDesc,
124  std::string const& processName) const {
125  assert(not m_streamModules.empty());
126  return m_streamModules[0]->modulesWhoseProductsAreConsumed(modules, preg, labelsToDesc, processName);
127  }
128 
129  template <typename T>
131  for (auto mod : m_streamModules) {
132  mod->convertCurrentProcessAlias(processName);
133  }
134  }
135 
136  template <typename T>
137  std::vector<edm::ConsumesInfo> ProducingModuleAdaptorBase<T>::consumesInfo() const {
138  assert(not m_streamModules.empty());
139  return m_streamModules[0]->consumesInfo();
140  }
141 
142  template <typename T>
144  ProductResolverIndexHelper const& iHelper,
145  bool iPrefetchMayGet) {
146  for (auto mod : m_streamModules) {
147  mod->updateLookup(iType, iHelper, iPrefetchMayGet);
148  }
149  }
150  template <typename T>
152  for (auto mod : m_streamModules) {
153  mod->updateLookup(iPI);
154  }
155  }
156 
157  template <typename T>
159  ModuleToResolverIndicies const& iIndicies,
160  std::string const& moduleLabel) {
161  for (auto mod : m_streamModules) {
162  mod->resolvePutIndicies(iBranchType, iIndicies, moduleLabel);
163  }
164  }
165 
166  template <typename T>
167  std::vector<edm::ProductResolverIndex> const& ProducingModuleAdaptorBase<T>::indiciesForPutProducts(
168  BranchType iBranchType) const {
169  return m_streamModules[0]->indiciesForPutProducts(iBranchType);
170  }
171 
172  template <typename T>
174  m_streamModules[id]->beginStream(id);
175  }
176  template <typename T>
178  m_streamModules[id]->endStream();
179  }
180 
181  template <typename T>
183  RunTransitionInfo const& info,
184  ModuleCallingContext const* mcc) {
185  RunPrincipal const& rp = info.principal();
186  auto mod = m_streamModules[id];
187  setupRun(mod, rp.index());
188 
189  Run r(rp, moduleDescription_, mcc, false);
190  r.setConsumer(mod);
191  const EventSetup c{
192  info, static_cast<unsigned int>(Transition::BeginRun), mod->esGetTokenIndices(Transition::BeginRun), false};
193  mod->beginRun(r, c);
194  }
195 
196  template <typename T>
198  RunTransitionInfo const& info,
199  ModuleCallingContext const* mcc) {
200  auto mod = m_streamModules[id];
201  Run r(info, moduleDescription_, mcc, true);
202  r.setConsumer(mod);
203  const EventSetup c{
204  info, static_cast<unsigned int>(Transition::EndRun), mod->esGetTokenIndices(Transition::EndRun), false};
205  mod->endRun(r, c);
206  streamEndRunSummary(mod, r, c);
207  }
208 
209  template <typename T>
211  LumiTransitionInfo const& info,
212  ModuleCallingContext const* mcc) {
213  LuminosityBlockPrincipal const& lbp = info.principal();
214  auto mod = m_streamModules[id];
215  setupLuminosityBlock(mod, lbp.index());
216 
217  LuminosityBlock lb(lbp, moduleDescription_, mcc, false);
218  lb.setConsumer(mod);
219  const EventSetup c{info,
220  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
221  mod->esGetTokenIndices(Transition::BeginLuminosityBlock),
222  false};
223  mod->beginLuminosityBlock(lb, c);
224  }
225 
226  template <typename T>
228  LumiTransitionInfo const& info,
229  ModuleCallingContext const* mcc) {
230  auto mod = m_streamModules[id];
231  LuminosityBlock lb(info, moduleDescription_, mcc, true);
232  lb.setConsumer(mod);
233  const EventSetup c{info,
234  static_cast<unsigned int>(Transition::EndLuminosityBlock),
235  mod->esGetTokenIndices(Transition::EndLuminosityBlock),
236  false};
237  mod->endLuminosityBlock(lb, c);
238  streamEndLuminosityBlockSummary(mod, lb, c);
239  }
240 
241  template <typename T>
243  template <typename T>
245 
246  template <typename T>
249  assert(not m_streamModules.empty());
250  auto mod = m_streamModules[0];
251  mod->registerThinnedAssociations(registry, helper);
252  }
253  } // namespace stream
254 } // namespace edm
edm::StreamID
Definition: StreamID.h:30
edm::stream::ProducingModuleAdaptorBase::resolvePutIndicies
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
Definition: ProducingModuleAdaptorBase.cc:158
edm::stream::ProducingModuleAdaptorBase::itemsMayGet
void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
Definition: ProducingModuleAdaptorBase.cc:92
edm::stream::ProducingModuleAdaptorBase::registerProductsAndCallbacks
void registerProductsAndCallbacks(ProducingModuleAdaptorBase const *, ProductRegistry *reg)
Definition: ProducingModuleAdaptorBase.cc:61
edm::stream::ProducingModuleAdaptorBase::doStreamBeginRun
void doStreamBeginRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
Definition: ProducingModuleAdaptorBase.cc:182
edm::eventsetup::ESRecordsToProxyIndices
Definition: ESRecordsToProxyIndices.h:35
edm::stream::ProducingModuleAdaptorBase::itemsToGet
void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
Definition: ProducingModuleAdaptorBase.cc:85
edm::stream::ProducingModuleAdaptorBase::~ProducingModuleAdaptorBase
virtual ~ProducingModuleAdaptorBase()
Definition: ProducingModuleAdaptorBase.cc:43
edm::stream::ProducingModuleAdaptorBase::modulesWhoseProductsAreConsumed
void modulesWhoseProductsAreConsumed(std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
Definition: ProducingModuleAdaptorBase.cc:120
edm::LumiTransitionInfo
Definition: TransitionInfoTypes.h:42
callbacks
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
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
edm::Run
Definition: Run.h:45
edm::stream::ProducingModuleAdaptorBase::ProducingModuleAdaptorBase
ProducingModuleAdaptorBase()
Definition: ProducingModuleAdaptorBase.cc:40
modules
Definition: ZHLTMatchFilter.cc:17
LuminosityBlock.h
ProducingModuleAdaptorBase.h
edm
HLT enums.
Definition: AlignableModifier.h:19
cms::cuda::stream
cudaStream_t stream
Definition: HistoContainer.h:57
edm::stream::ProducingModuleAdaptorBase::updateLookup
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
Definition: ProducingModuleAdaptorBase.cc:143
mod
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
edm::LuminosityBlockPrincipal
Definition: LuminosityBlockPrincipal.h:31
cms::cuda::assert
assert(be >=bs)
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:153
edm::stream::ProducingModuleAdaptorBase::indiciesForPutProducts
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
Definition: ProducingModuleAdaptorBase.cc:167
PreallocationConfiguration.h
edm::ProductResolverIndexHelper
Definition: ProductResolverIndexHelper.h:89
edm::RunTransitionInfo
Definition: TransitionInfoTypes.h:64
edm::BranchType
BranchType
Definition: BranchType.h:11
edm::stream::ProducingModuleAdaptorBase::doRespondToCloseInputFile
void doRespondToCloseInputFile(FileBlock const &fb)
Definition: ProducingModuleAdaptorBase.cc:244
edm::ProductRegistry
Definition: ProductRegistry.h:37
edm::FileBlock
Definition: FileBlock.h:20
edm::PreallocationConfiguration::numberOfLuminosityBlocks
unsigned int numberOfLuminosityBlocks() const
Definition: PreallocationConfiguration.h:36
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
Run.h
edm::stream::ProducingModuleAdaptorBase::doPreallocate
void doPreallocate(PreallocationConfiguration const &)
Definition: ProducingModuleAdaptorBase.cc:54
edm::Transition::BeginLuminosityBlock
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::RunPrincipal::index
RunIndex index() const
Definition: RunPrincipal.h:57
edm::stream::ProducingModuleAdaptorBase::esGetTokenRecordIndicesVector
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector(edm::Transition iTrans) const
Definition: ProducingModuleAdaptorBase.cc:113
edm::stream::ProducingModuleAdaptorBase::doStreamEndRun
void doStreamEndRun(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
Definition: ProducingModuleAdaptorBase.cc:197
edm::ThinnedAssociationsHelper
Definition: ThinnedAssociationsHelper.h:37
edm::Transition
Transition
Definition: Transition.h:12
edm::LuminosityBlock::setConsumer
void setConsumer(EDConsumerBase const *iConsumer)
Definition: LuminosityBlock.cc:33
RunPrincipal.h
helper
Definition: helper.py:1
edm::stream::ProducingModuleAdaptorBase< EDProducerBase >::ModuleToResolverIndicies
std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > > ModuleToResolverIndicies
Definition: ProducingModuleAdaptorBase.h:115
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::stream::ProducingModuleAdaptorBase::esGetTokenIndicesVector
std::vector< ESProxyIndex > const & esGetTokenIndicesVector(edm::Transition iTrans) const
Definition: ProducingModuleAdaptorBase.cc:106
edm::EventSetup
Definition: EventSetup.h:57
edm::stream::ProducingModuleAdaptorBase
Definition: Event.h:70
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
edm::stream::ProducingModuleAdaptorBase::doRegisterThinnedAssociations
void doRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)
Definition: ProducingModuleAdaptorBase.cc:247
edm::stream::ProducingModuleAdaptorBase::itemsToGetFrom
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const
Definition: ProducingModuleAdaptorBase.cc:99
LuminosityBlockPrincipal.h
SimL1EmulatorRepack_CalouGT_cff.processName
processName
Definition: SimL1EmulatorRepack_CalouGT_cff.py:17
alignCSCRings.r
r
Definition: alignCSCRings.py:93
edm::PreallocationConfiguration
Definition: PreallocationConfiguration.h:27
edm::Transition::EndLuminosityBlock
edm::stream::ProducingModuleAdaptorBase::doStreamEndLuminosityBlock
void doStreamEndLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
Definition: ProducingModuleAdaptorBase.cc:227
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
edm::Transition::BeginRun
edm::stream::ProducingModuleAdaptorBase::doStreamBeginLuminosityBlock
void doStreamBeginLuminosityBlock(StreamID, LumiTransitionInfo const &, ModuleCallingContext const *)
Definition: ProducingModuleAdaptorBase.cc:210
HiBiasedCentrality_cfi.function
function
Definition: HiBiasedCentrality_cfi.py:4
EventSetup.h
edm::stream::ProducingModuleAdaptorBase::doEndStream
void doEndStream(StreamID)
Definition: ProducingModuleAdaptorBase.cc:177
edm::PreallocationConfiguration::numberOfStreams
unsigned int numberOfStreams() const
Definition: PreallocationConfiguration.h:35
funct::void
TEMPL(T2) struct Divides void
Definition: Factorize.h:24
edm::stream::ProducingModuleAdaptorBase::consumesInfo
std::vector< ConsumesInfo > consumesInfo() const
Definition: ProducingModuleAdaptorBase.cc:137
edm::BranchDescription
Definition: BranchDescription.h:32
TransitionInfoTypes.h
edm::LuminosityBlockPrincipal::index
LuminosityBlockIndex index() const
Definition: LuminosityBlockPrincipal.h:51
HerwigMaxPtPartonFilter_cfi.moduleLabel
moduleLabel
Definition: HerwigMaxPtPartonFilter_cfi.py:4
edm::RunPrincipal
Definition: RunPrincipal.h:34
edm::stream::ProducingModuleAdaptorBase::doBeginStream
void doBeginStream(StreamID)
Definition: ProducingModuleAdaptorBase.cc:173
edm::Transition::EndRun
edm::stream::ProducingModuleAdaptorBase::doRespondToOpenInputFile
void doRespondToOpenInputFile(FileBlock const &fb)
Definition: ProducingModuleAdaptorBase.cc:242
edm::stream::ProducingModuleAdaptorBase::convertCurrentProcessAlias
void convertCurrentProcessAlias(std::string const &processName)
Definition: ProducingModuleAdaptorBase.cc:130
edm::ModuleCallingContext
Definition: ModuleCallingContext.h:29