CMS 3D CMS Logo

EDAnalyzerAdaptor.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_stream_EDAnalyzerAdaptor_h
2 #define FWCore_Framework_stream_EDAnalyzerAdaptor_h
3 // -*- C++ -*-
4 //
5 // Package: FWCore/Framework
6 // Class : EDAnalyzerAdaptor
7 //
16 //
17 // Original Author: Chris Jones
18 // Created: Fri, 02 Aug 2013 18:09:18 GMT
19 //
20 
21 // system include files
22 
23 // user include files
37 
38 // forward declarations
39 
40 namespace edm {
41  namespace stream {
42 
43  template <typename ABase, typename ModType>
44  struct BaseToAdaptor;
45 
46  template <typename T>
48  template <typename ModType>
51  };
52 
53  template <typename T>
55  public:
56  EDAnalyzerAdaptor(edm::ParameterSet const& iPSet) : m_pset(&iPSet) {
57  m_runs.resize(1);
58  m_lumis.resize(1);
59  m_runSummaries.resize(1);
60  m_lumiSummaries.resize(1);
61  typename T::GlobalCache const* dummy = nullptr;
62  m_global = impl::makeGlobal<T>(iPSet, dummy);
63  typename T::InputProcessBlockCache const* dummyInputProcessBlockCacheImpl = nullptr;
64  m_inputProcessBlocks = impl::makeInputProcessBlockCacheImpl(dummyInputProcessBlockCacheImpl);
65  }
66  EDAnalyzerAdaptor(const EDAnalyzerAdaptor&) = delete; // stop default
67  const EDAnalyzerAdaptor& operator=(const EDAnalyzerAdaptor&) = delete; // stop default
69 
70  static void fillDescriptions(ConfigurationDescriptions& descriptions) { T::fillDescriptions(descriptions); }
71  static void prevalidate(ConfigurationDescriptions& descriptions) { T::prevalidate(descriptions); }
72 
73  bool wantsProcessBlocks() const noexcept final { return T::HasAbility::kWatchProcessBlock; }
74  bool wantsInputProcessBlocks() const noexcept final { return T::HasAbility::kInputProcessBlockCache; }
75  bool wantsGlobalRuns() const noexcept final {
76  return T::HasAbility::kRunCache or T::HasAbility::kRunSummaryCache;
77  }
78  bool wantsStreamRuns() const noexcept final { return T::HasAbility::kWatchRuns; }
79  bool wantsGlobalLuminosityBlocks() const noexcept final {
80  return T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache;
81  }
82  bool wantsStreamLuminosityBlocks() const noexcept final { return T::HasAbility::kWatchLuminosityBlocks; }
83 
84  private:
92 
93  void setupStreamModules() final {
94  this->createStreamModules([this](unsigned int iStreamModule) -> EDAnalyzerBase* {
95  auto tmp = impl::makeStreamModule<T>(*m_pset, m_global.get());
96  MyGlobal::set(tmp, m_global.get());
98  return tmp;
99  });
100  m_pset = nullptr;
101  }
102 
103  void preallocRuns(unsigned int iNRuns) final {
104  m_runs.resize(iNRuns);
105  m_runSummaries.resize(iNRuns);
106  }
107  void preallocLumis(unsigned int iNLumis) final {
108  m_lumis.resize(iNLumis);
109  m_lumiSummaries.resize(iNLumis);
110  }
111 
112  void doBeginJob() final { MyGlobal::beginJob(m_global.get()); }
113  void doEndJob() final { MyGlobal::endJob(m_global.get()); }
114  void setupRun(EDAnalyzerBase* iProd, RunIndex iIndex) final { MyGlobalRun::set(iProd, m_runs[iIndex].get()); }
115  void streamEndRunSummary(EDAnalyzerBase* iProd, edm::Run const& iRun, edm::EventSetup const& iES) final {
116  auto s = m_runSummaries[iRun.index()].get();
117  std::lock_guard<decltype(m_runSummaryLock)> guard(m_runSummaryLock);
118  MyGlobalRunSummary::streamEndRunSummary(iProd, iRun, iES, s);
119  }
120 
122  MyGlobalLuminosityBlock::set(iProd, m_lumis[iIndex].get());
123  }
125  edm::LuminosityBlock const& iLumi,
126  edm::EventSetup const& iES) final {
127  auto s = m_lumiSummaries[iLumi.index()].get();
128  std::lock_guard<decltype(m_lumiSummaryLock)> guard(m_lumiSummaryLock);
130  }
131 
133  if constexpr (T::HasAbility::kWatchProcessBlock) {
134  ProcessBlock processBlock(pbp, moduleDescription(), mcc, false);
135  processBlock.setConsumer(consumer());
136  ProcessBlock const& cnstProcessBlock = processBlock;
137  MyWatchProcessBlock::beginProcessBlock(cnstProcessBlock, m_global.get());
138  }
139  }
140 
142  if constexpr (T::HasAbility::kInputProcessBlockCache) {
143  ProcessBlock processBlock(pbp, moduleDescription(), mcc, false);
144  processBlock.setConsumer(consumer());
145  ProcessBlock const& cnstProcessBlock = processBlock;
147  }
148  }
149 
150  void doEndProcessBlock(ProcessBlockPrincipal const& pbp, ModuleCallingContext const* mcc) final {
151  if constexpr (T::HasAbility::kWatchProcessBlock) {
152  ProcessBlock processBlock(pbp, moduleDescription(), mcc, true);
153  processBlock.setConsumer(consumer());
154  ProcessBlock const& cnstProcessBlock = processBlock;
155  MyWatchProcessBlock::endProcessBlock(cnstProcessBlock, m_global.get());
156  }
157  }
158 
159  void doBeginRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) final {
160  if constexpr (T::HasAbility::kRunCache or T::HasAbility::kRunSummaryCache) {
161  RunPrincipal const& rp = info.principal();
162  Run r(rp, moduleDescription(), mcc, false);
163  r.setConsumer(consumer());
164  Run const& cnstR = r;
165  RunIndex ri = rp.index();
166  ESParentContext pc{mcc};
167  const EventSetup c{info,
168  static_cast<unsigned int>(Transition::BeginRun),
170  pc};
171  MyGlobalRun::beginRun(cnstR, c, m_global.get(), m_runs[ri]);
172  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
174  }
175  }
176  void doEndRun(RunTransitionInfo const& info, ModuleCallingContext const* mcc) final {
177  if constexpr (T::HasAbility::kRunCache or T::HasAbility::kRunSummaryCache) {
178  RunPrincipal const& rp = info.principal();
179  Run r(rp, moduleDescription(), mcc, true);
180  r.setConsumer(consumer());
181 
182  RunIndex ri = rp.index();
183  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
184  ESParentContext pc{mcc};
185  const EventSetup c{info,
186  static_cast<unsigned int>(Transition::EndRun),
188  pc};
190  MyGlobalRun::endRun(r, c, &rc);
191  }
192  }
193 
195  if constexpr (T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache) {
196  LuminosityBlockPrincipal const& lbp = info.principal();
197  LuminosityBlock lb(lbp, moduleDescription(), mcc, false);
198  lb.setConsumer(consumer());
199  LuminosityBlock const& cnstLb = lb;
200  LuminosityBlockIndex li = lbp.index();
201  RunIndex ri = lbp.runPrincipal().index();
202  typename T::RunContext rc(m_runs[ri].get(), m_global.get());
203  ESParentContext pc{mcc};
204  const EventSetup c{info,
205  static_cast<unsigned int>(Transition::BeginLuminosityBlock),
207  pc};
209  typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get());
211  }
212  }
214  if constexpr (T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache) {
215  LuminosityBlockPrincipal const& lbp = info.principal();
216  LuminosityBlock lb(lbp, moduleDescription(), mcc, true);
217  lb.setConsumer(consumer());
218 
219  LuminosityBlockIndex li = lbp.index();
220  RunIndex ri = lbp.runPrincipal().index();
221  typename T::LuminosityBlockContext lc(m_lumis[li].get(), m_runs[ri].get(), m_global.get());
222  ESParentContext pc{mcc};
223  const EventSetup c{info,
224  static_cast<unsigned int>(Transition::EndLuminosityBlock),
226  pc};
229  }
230  }
231 
233 
234  void selectInputProcessBlocks(ProductRegistry const& productRegistry,
235  ProcessBlockHelperBase const& processBlockHelperBase) final {
237  m_inputProcessBlocks, productRegistry, processBlockHelperBase, *consumer());
238  }
239 
240  // ---------- member data --------------------------------
250  };
251  } // namespace stream
252 
253  template <>
256 
257  public:
258  template <typename ModType>
259  static std::unique_ptr<Base> makeModule(ParameterSet const& pset) {
260  typedef typename stream::BaseToAdaptor<Base, ModType>::Type Adaptor;
261  auto module = std::make_unique<Adaptor>(pset);
262  return std::unique_ptr<Base>(module.release());
263  }
264  };
265 
266 } // namespace edm
267 
268 #endif
static void endLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext)
void streamEndRunSummary(EDAnalyzerBase *iProd, edm::Run const &iRun, edm::EventSetup const &iES) final
static void beginProcessBlock(edm::ProcessBlock const &iProcessBlock, typename T::GlobalCache *iGC)
static void beginRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iRC, std::shared_ptr< typename T::RunSummaryCache > &oCache)
impl::choose_shared_vec< typename T::RunCache const >::type m_runs
static void fillDescriptions(ConfigurationDescriptions &descriptions)
impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type m_inputProcessBlocks
bool wantsStreamLuminosityBlocks() const noexcept final
static const TGPicture * info(bool iBackgroundIsBlack)
void setConsumer(EDConsumerBase const *iConsumer)
std::unique_ptr< G > makeInputProcessBlockCacheImpl(G const *)
Definition: makeGlobal.h:49
static void endRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iContext)
void doBeginRun(RunTransitionInfo const &info, ModuleCallingContext const *mcc) final
bool wantsInputProcessBlocks() const noexcept final
static std::unique_ptr< Base > makeModule(ParameterSet const &pset)
static void beginRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::GlobalCache const *iGC, std::shared_ptr< typename T::RunCache const > &oCache)
bool wantsGlobalRuns() const noexcept final
RunPrincipal const & runPrincipal() const
void streamEndLuminosityBlockSummary(EDAnalyzerBase *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES) final
void preallocLumis(unsigned int iNLumis) final
static void set(T *iProd, typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type const *iCaches, unsigned int iStreamModule)
Definition: callAbilities.h:76
static void selectInputProcessBlocks(typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches, ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase, EDConsumerBase const &edConsumerBase)
Definition: callAbilities.h:86
static void clearCaches(typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches)
static void streamEndRunSummary(B *iProd, edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunSummaryCache *iCache)
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
static void accessInputProcessBlock(edm::ProcessBlock const &processBlock, typename T::GlobalCache *iGC, typename impl::choose_unique_ptr< typename T::InputProcessBlockCache >::type &iCaches)
Definition: callAbilities.h:94
void doEndRun(RunTransitionInfo const &info, ModuleCallingContext const *mcc) final
void doBeginProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
static void set(B *iProd, typename T::RunCache const *iCache)
void setupLuminosityBlock(EDAnalyzerBase *iProd, LuminosityBlockIndex iIndex) final
bool wantsProcessBlocks() const noexcept final
static void beginLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::RunContext const *iRC, std::shared_ptr< typename T::LuminosityBlockCache const > &oCache)
impl::choose_unique_ptr< typename T::GlobalCache >::type m_global
bool wantsStreamRuns() const noexcept final
static void beginLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iRC, std::shared_ptr< typename T::LuminosityBlockSummaryCache > &oCache)
void doAccessInputProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
impl::choose_shared_vec< typename T::RunSummaryCache >::type m_runSummaries
const EDConsumerBase * consumer() const
ESResolverIndex const * esGetTokenIndices(edm::Transition iTrans) const
void setConsumer(EDConsumerBase const *iConsumer)
Definition: ProcessBlock.h:53
const ModuleDescription & moduleDescription() const
impl::choose_mutex< typename T::RunSummaryCache >::type m_runSummaryLock
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 or
Definition: Activities.doc:12
impl::choose_shared_vec< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaries
RunIndex index() const
Definition: RunPrincipal.h:56
EDAnalyzerAdaptor(edm::ParameterSet const &iPSet)
void selectInputProcessBlocks(ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase) final
static void set(B *iProd, typename T::LuminosityBlockCache const *iCache)
void preallocRuns(unsigned int iNRuns) final
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
impl::choose_shared_vec< typename T::LuminosityBlockCache const >::type m_lumis
static void endJob(typename T::GlobalCache *iCache)
Definition: callAbilities.h:59
static void streamEndLuminosityBlockSummary(B *iProd, edm::LuminosityBlock const &iLumi, edm::EventSetup const &iES, typename T::LuminosityBlockSummaryCache *iCache)
void doEndProcessBlock(ProcessBlockPrincipal const &pbp, ModuleCallingContext const *mcc) final
static void globalEndRun(edm::Run const &iRun, edm::EventSetup const &iES, typename T::RunContext const *iContext, typename T::RunSummaryCache *iCache)
impl::choose_mutex< typename T::LuminosityBlockSummaryCache >::type m_lumiSummaryLock
HLT enums.
LuminosityBlockIndex index() const
static void beginJob(typename T::GlobalCache *iCache)
Definition: callAbilities.h:54
std::vector< std::shared_ptr< T > > type
Definition: dummy_helpers.h:64
void doEndLuminosityBlock(LumiTransitionInfo const &info, ModuleCallingContext const *mcc) final
bool wantsGlobalLuminosityBlocks() const noexcept final
static void globalEndLuminosityBlock(edm::LuminosityBlock const &Lumi, edm::EventSetup const &iES, typename T::LuminosityBlockContext const *iContext, typename T::LuminosityBlockSummaryCache *iCache)
tmp
align.sh
Definition: createJobs.py:716
const EDAnalyzerAdaptor & operator=(const EDAnalyzerAdaptor &)=delete
void doBeginLuminosityBlock(LumiTransitionInfo const &info, ModuleCallingContext const *mcc) final
static void set(B *iProd, typename T::GlobalCache const *iCache)
Definition: callAbilities.h:51
void setupRun(EDAnalyzerBase *iProd, RunIndex iIndex) final
Definition: Run.h:45
static void endProcessBlock(edm::ProcessBlock const &iProcessBlock, typename T::GlobalCache *iGC)
static void prevalidate(ConfigurationDescriptions &descriptions)