CMS 3D CMS Logo

DataMixingModule.cc
Go to the documentation of this file.
1 // File: DataMixingModule.cc
2 // Description: see DataMixingModule.h
3 // Author: Mike Hildreth, University of Notre Dame
4 //
5 //--------------------------------------------
6 
7 #include <map>
8 #include <iostream>
9 #include <memory>
10 #include <functional>
11 
24 //
25 //
28 #include "DataMixingModule.h"
30 
31 using namespace std;
32 
33 namespace edm
34 {
35 
36  // Constructor
37  DataMixingModule::DataMixingModule(const edm::ParameterSet& ps, MixingCache::Config const* globalConf) :
38  BMixingModule(ps, globalConf),
39  EBPileInputTag_(ps.getParameter<edm::InputTag>("EBPileInputTag")),
40  EEPileInputTag_(ps.getParameter<edm::InputTag>("EEPileInputTag")),
41  ESPileInputTag_(ps.getParameter<edm::InputTag>("ESPileInputTag")),
42  HBHEPileInputTag_(ps.getParameter<edm::InputTag>("HBHEPileInputTag")),
43  HOPileInputTag_(ps.getParameter<edm::InputTag>("HOPileInputTag")),
44  HFPileInputTag_(ps.getParameter<edm::InputTag>("HFPileInputTag")),
45  ZDCPileInputTag_(ps.getParameter<edm::InputTag>("ZDCPileInputTag")),
46  QIE10PileInputTag_(ps.getParameter<edm::InputTag>("QIE10PileInputTag")),
47  QIE11PileInputTag_(ps.getParameter<edm::InputTag>("QIE11PileInputTag")),
48  label_(ps.getParameter<std::string>("Label"))
49  {
50  // prepare for data access in DataMixingHcalDigiWorkerProd
51  tok_hbhe_ = consumes<HBHEDigitizerTraits::DigiCollection>(HBHEPileInputTag_);
52  tok_ho_ = consumes<HODigitizerTraits::DigiCollection>(HOPileInputTag_);
53  tok_hf_ = consumes<HFDigitizerTraits::DigiCollection>(HFPileInputTag_);
54  tok_zdc_ = consumes<ZDCDigitizerTraits::DigiCollection>(ZDCPileInputTag_);
55  tok_qie10_ = consumes<HcalQIE10DigitizerTraits::DigiCollection>(QIE10PileInputTag_);
56  tok_qie11_ = consumes<HcalQIE11DigitizerTraits::DigiCollection>(QIE11PileInputTag_);
57 
58  // get the subdetector names
59  this->getSubdetectorNames(); //something like this may be useful to check what we are supposed to do...
60 
61  // For now, list all of them here. Later, make this selectable with input parameters
62  //
63 
64  // Check to see if we are working in Full or Fast Simulation
65 
66  MergeTrackerDigis_ = (ps.getParameter<std::string>("TrackerMergeType")) == "Digis";
67  MergeEMDigis_ = (ps.getParameter<std::string>("EcalMergeType")) == "Digis";
68  MergeHcalDigis_ = (ps.getParameter<std::string>("HcalMergeType")) == "Digis";
69  if(MergeHcalDigis_) MergeHcalDigisProd_ = (ps.getParameter<std::string>("HcalDigiMerge")=="FullProd");
70 
71  // Put Fast Sim Sequences here for Simplification: Fewer options!
72 
73 
74  if(MergeEMDigis_) {
75 
76  // cout<<"EM Digis TRUE!!!"<<endl;
77 
78  EBDigiCollectionDM_ = ps.getParameter<std::string>("EBDigiCollectionDM");
79  EEDigiCollectionDM_ = ps.getParameter<std::string>("EEDigiCollectionDM");
80  ESDigiCollectionDM_ = ps.getParameter<std::string>("ESDigiCollectionDM");
81  // nMaxPrintout_ = ps.getUntrackedParameter<int>("nMaxPrintout",10);
82 
83  produces< EBDigiCollection >(EBDigiCollectionDM_);
84  produces< EEDigiCollection >(EEDigiCollectionDM_);
85  produces< ESDigiCollection >(ESDigiCollectionDM_);
86 
87 
88  EMDigiWorker_ = new DataMixingEMDigiWorker(ps, consumesCollector());
89  }
90  else { // merge RecHits
91  EBRecHitCollectionDM_ = ps.getParameter<std::string>("EBRecHitCollectionDM");
92  EERecHitCollectionDM_ = ps.getParameter<std::string>("EERecHitCollectionDM");
93  ESRecHitCollectionDM_ = ps.getParameter<std::string>("ESRecHitCollectionDM");
94  // nMaxPrintout_ = ps.getUntrackedParameter<int>("nMaxPrintout",10);
95 
96  produces< EBRecHitCollection >(EBRecHitCollectionDM_);
97  produces< EERecHitCollection >(EERecHitCollectionDM_);
98  produces< ESRecHitCollection >(ESRecHitCollectionDM_);
99 
100  EMWorker_ = new DataMixingEMWorker(ps, consumesCollector());
101  }
102  // Hcal next
103 
104  if(MergeHcalDigis_){
105  HBHEDigiCollectionDM_ = ps.getParameter<std::string>("HBHEDigiCollectionDM");
106  HODigiCollectionDM_ = ps.getParameter<std::string>("HODigiCollectionDM");
107  HFDigiCollectionDM_ = ps.getParameter<std::string>("HFDigiCollectionDM");
108  ZDCDigiCollectionDM_ = ps.getParameter<std::string>("ZDCDigiCollectionDM");
109  QIE10DigiCollectionDM_ = ps.getParameter<std::string>("QIE10DigiCollectionDM");
110  QIE11DigiCollectionDM_ = ps.getParameter<std::string>("QIE11DigiCollectionDM");
111 
112  produces< HBHEDigiCollection >();
113  produces< HODigiCollection >();
114  produces< HFDigiCollection >();
115  produces< ZDCDigiCollection >();
116 
117  produces<QIE10DigiCollection>("HFQIE10DigiCollection");
118  produces<QIE11DigiCollection>("HBHEQIE11DigiCollection");
119 
120  if(ps.getParameter<bool>("debugCaloSamples")){
121  produces<CaloSamplesCollection>("HcalSamples");
122  }
123  if(ps.getParameter<bool>("injectTestHits")){
124  produces<edm::PCaloHitContainer>("HcalHits");
125  }
126 
127  if(MergeHcalDigisProd_) HcalDigiWorkerProd_ = new DataMixingHcalDigiWorkerProd(ps, consumesCollector());
128  else HcalDigiWorker_ = new DataMixingHcalDigiWorker(ps, consumesCollector());
129 
130  }
131  else{
132  HBHERecHitCollectionDM_ = ps.getParameter<std::string>("HBHERecHitCollectionDM");
133  HORecHitCollectionDM_ = ps.getParameter<std::string>("HORecHitCollectionDM");
134  HFRecHitCollectionDM_ = ps.getParameter<std::string>("HFRecHitCollectionDM");
135  ZDCRecHitCollectionDM_ = ps.getParameter<std::string>("ZDCRecHitCollectionDM");
136 
137  produces< HBHERecHitCollection >(HBHERecHitCollectionDM_);
138  produces< HORecHitCollection >(HORecHitCollectionDM_);
139  produces< HFRecHitCollection >(HFRecHitCollectionDM_);
140  produces< ZDCRecHitCollection >(ZDCRecHitCollectionDM_);
141 
142  HcalWorker_ = new DataMixingHcalWorker(ps, consumesCollector());
143  }
144 
145  // Muons
146 
147  DTDigiCollectionDM_ = ps.getParameter<std::string>("DTDigiCollectionDM");
148  RPCDigiCollectionDM_ = ps.getParameter<std::string>("RPCDigiCollectionDM");
149  CSCStripDigiCollectionDM_ = ps.getParameter<std::string>("CSCStripDigiCollectionDM");
150  CSCWireDigiCollectionDM_ = ps.getParameter<std::string>("CSCWireDigiCollectionDM");
151  CSCComparatorDigiCollectionDM_ = ps.getParameter<std::string>("CSCComparatorDigiCollectionDM");
152 
153 
154  produces< DTDigiCollection >();
155  produces< RPCDigiCollection >();
156  produces< CSCStripDigiCollection >(CSCStripDigiCollectionDM_);
157  produces< CSCWireDigiCollection >(CSCWireDigiCollectionDM_);
158  produces< CSCComparatorDigiCollection >(CSCComparatorDigiCollectionDM_);
159 
160  MuonWorker_ = new DataMixingMuonWorker(ps, consumesCollector());
161 
162 
163  // Si-Strips
164 
165  useSiStripRawDigi_ = ps.exists("SiStripRawDigiSource")?
166  ps.getParameter<std::string>("SiStripRawDigiSource")=="PILEUP" ||
167  ps.getParameter<std::string>("SiStripRawDigiSource")=="SIGNAL" : false;
168 
169  SiStripDigiCollectionDM_ = ps.getParameter<std::string>("SiStripDigiCollectionDM");
170 
171  if(useSiStripRawDigi_) {
172 
173  produces< edm::DetSetVector<SiStripRawDigi> > (SiStripDigiCollectionDM_);
174  SiStripRawWorker_ = new DataMixingSiStripRawWorker(ps, consumesCollector());
175 
176  } else {
177 
178  produces< edm::DetSetVector<SiStripDigi> > (SiStripDigiCollectionDM_);
179 
180  SiStripWorker_ = new DataMixingSiStripWorker(ps, consumesCollector());
181  }
182 
183  // Pixels
184 
185  PixelDigiCollectionDM_ = ps.getParameter<std::string>("PixelDigiCollectionDM");
186 
187  produces< edm::DetSetVector<PixelDigi> > (PixelDigiCollectionDM_);
188 
189  SiPixelWorker_ = new DataMixingSiPixelWorker(ps, consumesCollector());
190 
191 
192  // Pileup Information: if doing pre-mixing, we have to save the pileup information from the Secondary stream
193 
194  MergePileup_ = ps.getParameter<bool>("MergePileupInfo");
195 
196  if(MergePileup_) {
197  produces< std::vector<PileupSummaryInfo> >();
198  produces< int >("bunchSpacing");
199  produces<CrossingFramePlaybackInfoNew>();
200 
201  std::vector<edm::InputTag> GenPUProtonsInputTags;
202  GenPUProtonsInputTags = ps.getParameter<std::vector<edm::InputTag> >("GenPUProtonsInputTags");
203  for(std::vector<edm::InputTag>::const_iterator it_InputTag = GenPUProtonsInputTags.begin();
204  it_InputTag != GenPUProtonsInputTags.end(); ++it_InputTag)
205  produces< std::vector<reco::GenParticle> >( it_InputTag->label() );
206 
207  PUWorker_ = new DataMixingPileupCopy(ps, consumesCollector());
208  }
209  }
210 
212  // get subdetector names
213  // edm::Service<edm::ConstProductRegistry> reg;
214  // Loop over provenance of products in registry.
215  //for (edm::ProductRegistry::ProductList::const_iterator it = reg->productList().begin(); it != reg->productList().end(); ++it) {
216 
217  // **** Check this out.... ****
218 
219  // See FWCore/Framework/interface/BranchDescription.h
220  // BranchDescription contains all the information for the product.
221 
222  // This section not very backwards-compatible in terms of digi-merging. Need to be able to specify here which data format
223  // to look at...
224 
225  // edm::BranchDescription desc = it->second;
226  //if (!desc.friendlyClassName_.compare(0,9,"EBRecHitC")) {
227  // Subdetectors_.push_back(desc.productInstanceName_);
228  //LogInfo("DataMixingModule") <<"Adding container "<<desc.productInstanceName_ <<" for pileup treatment";
229  //}
230  //else if (!desc.friendlyClassName_.compare(0,9,"EERecHitC")) {
231  // else if (!desc.friendlyClassName_.compare(0,9,"EErechitC") && desc.productInstanceName_.compare(0,11,"TrackerHits")) {
232  // Subdetectors_.push_back(desc.productInstanceName_);
233  //LogInfo("DataMixingModule") <<"Adding container "<<desc.productInstanceName_ <<" for pileup treatment";
234  //}
235  //else if (!desc.friendlyClassName_.compare(0,9,"HBRecHitC")) {
236  // Subdetectors_.push_back(desc.productInstanceName_);
237  //LogInfo("DataMixingModule") <<"Adding container "<<desc.productInstanceName_ <<" for pileup treatment";
238  //}
239  //else if (!desc.friendlyClassName_.compare(0,9,"HERecHitC")) {
240  // Subdetectors_.push_back(desc.productInstanceName_);
241  //LogInfo("DataMixingModule") <<"Adding container "<<desc.productInstanceName_ <<" for pileup treatment";
242  // }
243  // and so on with other detector types...
244  // }
245  }
246 
247 
249  }
250 
251 
253  BMixingModule::beginRun( run, ES);
254  }
255 
257  BMixingModule::endRun( run, ES);
258  }
259 
260  // Virtual destructor needed.
262  if(MergeEMDigis_){
263  delete EMDigiWorker_;
264  }
265  else {delete EMWorker_;}
266  if(MergeHcalDigis_) {
268  else { delete HcalDigiWorker_; }}
269  else {delete HcalWorker_;}
270  if(MuonWorker_) delete MuonWorker_;
272  delete SiStripRawWorker_;
273  else delete SiStripWorker_;
274  delete SiPixelWorker_;
275  if(MergePileup_) { delete PUWorker_;}
276  }
277 
279  // fill in maps of hits
280 
281  LogDebug("DataMixingModule")<<"===============> adding MC signals for "<<e.id();
282 
283  // Ecal
284  if(MergeEMDigis_) {
285  EMDigiWorker_->addEMSignals(e, ES);
286  }
287  else{ EMWorker_->addEMSignals(e);}
288 
289  // Hcal
290  if(MergeHcalDigis_) {
293  }
294  else{
296  }
297  }
298  else {HcalWorker_->addHcalSignals(e);}
299 
300  // Muon
302 
303  // SiStrips
306 
307  // SiPixels
309  AddedPileup_ = false;
310  } // end of addSignals
311 
312 
313 
314 
315  void DataMixingModule::pileWorker(const EventPrincipal &ep, int bcr, int eventNr, const edm::EventSetup& ES, edm::ModuleCallingContext const* mcc) {
316 
317  InternalContext internalContext(ep.id(), mcc);
318  ParentContext parentContext(&internalContext);
319  ModuleCallingContext moduleCallingContext(&moduleDescription());
320  ModuleContextSentry moduleContextSentry(&moduleCallingContext, parentContext);
321 
322  LogDebug("DataMixingModule") <<"\n===============> adding pileups from event "<<ep.id()<<" for bunchcrossing "<<bcr;
323 
324  // Note: setupPileUpEvent may modify the run and lumi numbers of the EventPrincipal to match that of the primary event.
325  setupPileUpEvent(ES);
326 
327  // check and see if we need to copy the pileup information from
328  // secondary stream to the output stream
329  // We only have the pileup event here, so pick the first time and store the info
330 
331 
332  if(MergePileup_ && !AddedPileup_){
333 
334  PUWorker_->addPileupInfo(&ep, eventNr, &moduleCallingContext);
335 
336  AddedPileup_ = true;
337  }
338 
339  // fill in maps of hits; same code as addSignals, except now applied to the pileup events
340 
341  // Ecal
342  if(MergeEMDigis_) {
343  EMDigiWorker_->addEMPileups(bcr, &ep, eventNr, ES, &moduleCallingContext);
344  }
345  else {EMWorker_->addEMPileups(bcr, &ep, eventNr, &moduleCallingContext); }
346 
347  // Hcal
348  if(MergeHcalDigis_) {
349  if(MergeHcalDigisProd_) {
350  HcalDigiWorkerProd_->addHcalPileups(bcr, &ep, eventNr, ES, &moduleCallingContext);
351  }
352  else{
353  HcalDigiWorker_->addHcalPileups(bcr, &ep, eventNr, ES, &moduleCallingContext);}
354  }
355  else {HcalWorker_->addHcalPileups(bcr, &ep, eventNr, &moduleCallingContext);}
356 
357  // Muon
358  MuonWorker_->addMuonPileups(bcr, &ep, eventNr, &moduleCallingContext);
359 
360  // SiStrips
361  if(useSiStripRawDigi_) SiStripRawWorker_->addSiStripPileups(bcr, &ep, eventNr, &moduleCallingContext);
362  else SiStripWorker_->addSiStripPileups(bcr, &ep, eventNr, &moduleCallingContext);
363 
364  // SiPixels
365  //whoops this should be for the MC worker ????? SiPixelWorker_->setPileupInfo(ps,bunchSpacing);
366  SiPixelWorker_->addSiPixelPileups(bcr, &ep, eventNr, &moduleCallingContext);
367  }
368 
369 
370 
372  {
373  using namespace std::placeholders;
374 
375  std::vector<edm::SecondaryEventIDAndFileInfo> recordEventID;
376  std::vector<int> PileupList;
377  PileupList.clear();
378  TrueNumInteractions_.clear();
379 
381 
382  for (int bunchCrossing=minBunch_;bunchCrossing<=maxBunch_;++bunchCrossing) {
383  for (unsigned int isource=0;isource<maxNbSources_;++isource) {
384  std::shared_ptr<PileUp> source = inputSources_[isource];
385  if (!source || !(source->doPileUp(bunchCrossing)))
386  continue;
387 
388  if (isource==0)
389  source->CalculatePileup(minBunch_, maxBunch_, PileupList, TrueNumInteractions_, e.streamID());
390 
391  int NumPU_Events = 0;
392  if (isource ==0) {
393  NumPU_Events = PileupList[bunchCrossing - minBunch_];
394  } else {
395  // non-minbias pileup only gets one event for now. Fix later if desired.
396  NumPU_Events = 1;
397  }
398 
399  source->readPileUp(
400  e.id(),
401  recordEventID,
402  std::bind(&DataMixingModule::pileWorker, std::ref(*this),
403  _1, bunchCrossing, _2, std::cref(ES), mcc),
404  NumPU_Events,
405  e.streamID()
406  );
407  }
408  }
409 
410  }
411 
412 
414 
415  // individual workers...
416 
417  // move pileup first so we have access to the information for the put step
418 
419  std::vector<PileupSummaryInfo> ps;
420  int bunchSpacing=10000;
421 
422  if(MergePileup_) {
423  PUWorker_->getPileupInfo(ps,bunchSpacing);
425  }
426 
427  // Ecal
428  if(MergeEMDigis_) {
429  EMDigiWorker_->putEM(e,ES);
430  }
431  else {EMWorker_->putEM(e);}
432 
433  // Hcal
434  if(MergeHcalDigis_) {
435  if(MergeHcalDigisProd_) {
437  }
438  else{
439  HcalDigiWorker_->putHcal(e,ES);
440  }
441  }
442  else {HcalWorker_->putHcal(e);}
443 
444  // Muon
445  MuonWorker_->putMuon(e);
446 
447  // SiStrips
449  else SiStripWorker_->putSiStrip(e);
450 
451  // SiPixels
453  }
454 
457  }
458 
461  }
462 
463 
464 } //edm
#define LogDebug(id)
void doPileUp(edm::Event &e, const edm::EventSetup &ES) override
T getParameter(std::string const &) const
edm::EDGetTokenT< HcalQIE11DigitizerTraits::DigiCollection > tok_qie11_
void addMuonSignals(const edm::Event &e)
void beginRun(const edm::Run &r, const edm::EventSetup &setup) override
std::string HFDigiCollectionDM_
void addHcalSignals(const edm::Event &e, const edm::EventSetup &ES)
void putEM(edm::Event &e)
void endRun(const edm::Run &r, const edm::EventSetup &setup) override
void beginLuminosityBlock(LuminosityBlock const &l1, EventSetup const &c) override
void addSiStripSignals(const edm::Event &e)
void addHcalSignals(const edm::Event &e)
static std::string const source("source")
std::string HBHERecHitCollectionDM_
edm::InputTag QIE11PileInputTag_
std::string ZDCRecHitCollectionDM_
void addMuonPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
void addEMSignals(const edm::Event &e)
void addHcalPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
std::string CSCStripDigiCollectionDM_
edm::InputTag QIE10PileInputTag_
void putPileupInfo(edm::Event &e)
std::vector< float > TrueNumInteractions_
EventID const & id() const
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::string SiStripDigiCollectionDM_
edm::EDGetTokenT< ZDCDigitizerTraits::DigiCollection > tok_zdc_
edm::EDGetTokenT< HODigitizerTraits::DigiCollection > tok_ho_
void addHcalPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, const edm::EventSetup &ES, ModuleCallingContext const *)
void addSiPixelPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
void addEMPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, const edm::EventSetup &ES, ModuleCallingContext const *)
void endRun(const edm::Run &r, const edm::EventSetup &setup) override
std::string CSCWireDigiCollectionDM_
void putEM(edm::Event &e, const edm::EventSetup &ES)
std::string QIE10DigiCollectionDM_
DataMixingSiStripRawWorker * SiStripRawWorker_
void beginRun(edm::Run const &run, edm::EventSetup const &eventSetup) override
DataMixingSiPixelWorker * SiPixelWorker_
void addSiStripPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
ModuleCallingContext const * moduleCallingContext() const
Definition: Event.h:269
std::string RPCDigiCollectionDM_
void putHcal(edm::Event &e, const edm::EventSetup &ES)
std::string ZDCDigiCollectionDM_
DataMixingHcalDigiWorker * HcalDigiWorker_
DataMixingEMWorker * EMWorker_
static const unsigned int maxNbSources_
DataMixingPileupCopy * PUWorker_
void addSiStripPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
std::string HORecHitCollectionDM_
void endLuminosityBlock(LuminosityBlock const &l1, EventSetup const &c) override
DataMixingMuonWorker * MuonWorker_
virtual void getSubdetectorNames()
std::string EEDigiCollectionDM_
void addHcalPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, const edm::EventSetup &ES, edm::ModuleCallingContext const *)
edm::InputTag HBHEPileInputTag_
std::string HFRecHitCollectionDM_
void pileWorker(const edm::EventPrincipal &, int bcr, int EventId, const edm::EventSetup &ES, ModuleCallingContext const *)
edm::EDGetTokenT< HcalQIE10DigitizerTraits::DigiCollection > tok_qie10_
std::string HBHEDigiCollectionDM_
std::string EBRecHitCollectionDM_
std::string CSCComparatorDigiCollectionDM_
void addEMPileups(const int bcr, const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *)
edm::InputTag HOPileInputTag_
void putHcal(edm::Event &e, const edm::EventSetup &ES)
edm::EventID id() const
Definition: EventBase.h:60
DataMixingSiStripWorker * SiStripWorker_
std::string ESRecHitCollectionDM_
std::string EERecHitCollectionDM_
edm::EDGetTokenT< HFDigitizerTraits::DigiCollection > tok_hf_
HLT enums.
std::vector< std::shared_ptr< PileUp > > inputSources_
std::string ESDigiCollectionDM_
void put(edm::Event &e, const edm::EventSetup &ES) override
std::string DTDigiCollectionDM_
void addSiStripSignals(const edm::Event &e)
void initializeEvent(edm::Event const &e, edm::EventSetup const &eventSetup) override
std::string EBDigiCollectionDM_
StreamID streamID() const
Definition: Event.h:96
DataMixingHcalWorker * HcalWorker_
void getPileupInfo(std::vector< PileupSummaryInfo > &ps, int &bs)
edm::InputTag HFPileInputTag_
std::string HODigiCollectionDM_
std::string PixelDigiCollectionDM_
edm::EDGetTokenT< HBHEDigitizerTraits::DigiCollection > tok_hbhe_
DataMixingHcalDigiWorkerProd * HcalDigiWorkerProd_
void beginLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &setup) override
std::string QIE11DigiCollectionDM_
void addPileupInfo(const edm::EventPrincipal *, unsigned int EventId, ModuleCallingContext const *mcc)
void addEMSignals(const edm::Event &e, const edm::EventSetup &ES)
void addHcalSignals(const edm::Event &e, const edm::EventSetup &ES)
void setupPileUpEvent(const edm::EventSetup &setup)
void addSignals(const edm::Event &e, const edm::EventSetup &ES) override
void endLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &setup) override
DataMixingEMDigiWorker * EMDigiWorker_
Definition: Run.h:44
void addSiPixelSignals(const edm::Event &e)
edm::InputTag ZDCPileInputTag_