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