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