CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GpuTask.cc
Go to the documentation of this file.
2 
5 
8 
11 
12 namespace ecaldqm {
14  : DQWorkerTask(),
15  runGpuTask_(false),
16  enableDigi_(false),
17  enableUncalib_(false),
18  enableRecHit_(false),
19  digi1D_(false),
20  digi2D_(false),
21  uncalib1D_(false),
22  uncalib2D_(false),
23  rechit1D_(false),
24  rechit2D_(false),
25  EBCpuDigis_(nullptr),
26  EECpuDigis_(nullptr),
27  EBCpuUncalibRecHits_(nullptr),
28  EECpuUncalibRecHits_(nullptr),
29  EBCpuRecHits_(nullptr),
30  EECpuRecHits_(nullptr) {}
31 
33  // Ensure we run on CPU objects before GPU objects
34  if (runGpuTask_) {
37 
40 
43  }
44  }
45 
47  runGpuTask_ = params.getUntrackedParameter<bool>("runGpuTask");
48 
49  // Enabling objects set to false if runGpuTask_ is false
50  enableDigi_ = runGpuTask_ && params.getUntrackedParameter<bool>("enableDigi");
51  enableUncalib_ = runGpuTask_ && params.getUntrackedParameter<bool>("enableUncalib");
52  enableRecHit_ = runGpuTask_ && params.getUntrackedParameter<bool>("enableRecHit");
53 
54  // Flags set to false if corresponding type is not enabled
55  digi1D_ = enableDigi_ && params.getUntrackedParameter<bool>("digi1D");
56  digi2D_ = enableDigi_ && params.getUntrackedParameter<bool>("digi2D");
57  uncalib1D_ = enableUncalib_ && params.getUntrackedParameter<bool>("uncalib1D");
58  uncalib2D_ = enableUncalib_ && params.getUntrackedParameter<bool>("uncalib2D");
59  rechit1D_ = enableRecHit_ && params.getUntrackedParameter<bool>("rechit1D");
60  rechit2D_ = enableRecHit_ && params.getUntrackedParameter<bool>("rechit2D");
61 
62  uncalibOOTAmps_ = params.getUntrackedParameter<std::vector<int> >("uncalibOOTAmps");
63 
64  if (!enableDigi_) {
65  MEs_.erase(std::string("DigiCpu"));
66  MEs_.erase(std::string("DigiCpuAmplitude"));
67  MEs_.erase(std::string("DigiGpuCpu"));
68  MEs_.erase(std::string("DigiGpuCpuAmplitude"));
69  }
70  if (!enableUncalib_) {
71  MEs_.erase(std::string("UncalibCpu"));
72  MEs_.erase(std::string("UncalibCpuAmp"));
73  MEs_.erase(std::string("UncalibCpuAmpError"));
74  MEs_.erase(std::string("UncalibCpuPedestal"));
75  MEs_.erase(std::string("UncalibCpuJitter"));
76  MEs_.erase(std::string("UncalibCpuJitterError"));
77  MEs_.erase(std::string("UncalibCpuChi2"));
78  MEs_.erase(std::string("UncalibCpuOOTAmp"));
79  MEs_.erase(std::string("UncalibCpuFlags"));
80  MEs_.erase(std::string("UncalibGpuCpu"));
81  MEs_.erase(std::string("UncalibGpuCpuAmp"));
82  MEs_.erase(std::string("UncalibGpuCpuAmpError"));
83  MEs_.erase(std::string("UncalibGpuCpuPedestal"));
84  MEs_.erase(std::string("UncalibGpuCpuJitter"));
85  MEs_.erase(std::string("UncalibGpuCpuJitterError"));
86  MEs_.erase(std::string("UncalibGpuCpuChi2"));
87  MEs_.erase(std::string("UncalibGpuCpuOOTAmp"));
88  MEs_.erase(std::string("UncalibGpuCpuFlags"));
89  }
90  if (!enableRecHit_) {
91  MEs_.erase(std::string("RecHitCpu"));
92  MEs_.erase(std::string("RecHitCpuEnergy"));
93  MEs_.erase(std::string("RecHitCpuTime"));
94  MEs_.erase(std::string("RecHitCpuFlags"));
95  MEs_.erase(std::string("RecHitGpuCpu"));
96  MEs_.erase(std::string("RecHitGpuCpuEnergy"));
97  MEs_.erase(std::string("RecHitGpuCpuTime"));
98  MEs_.erase(std::string("RecHitGpuCpuFlags"));
99  }
100  if (!digi1D_) {
101  MEs_.erase(std::string("DigiGpu"));
102  MEs_.erase(std::string("DigiGpuAmplitude"));
103  }
104  if (!uncalib1D_) {
105  MEs_.erase(std::string("UncalibGpu"));
106  MEs_.erase(std::string("UncalibGpuAmp"));
107  MEs_.erase(std::string("UncalibGpuAmpError"));
108  MEs_.erase(std::string("UncalibGpuPedestal"));
109  MEs_.erase(std::string("UncalibGpuJitter"));
110  MEs_.erase(std::string("UncalibGpuJitterError"));
111  MEs_.erase(std::string("UncalibGpuChi2"));
112  MEs_.erase(std::string("UncalibGpuOOTAmp"));
113  MEs_.erase(std::string("UncalibGpuFlags"));
114  }
115  if (!rechit1D_) {
116  MEs_.erase(std::string("RecHitGpu"));
117  MEs_.erase(std::string("RecHitGpuEnergy"));
118  MEs_.erase(std::string("RecHitGpuTime"));
119  MEs_.erase(std::string("RecHitGpuFlags"));
120  }
121  if (!digi2D_) {
122  MEs_.erase(std::string("Digi2D"));
123  MEs_.erase(std::string("Digi2DAmplitude"));
124  }
125  if (!uncalib2D_) {
126  MEs_.erase(std::string("Uncalib2D"));
127  MEs_.erase(std::string("Uncalib2DAmp"));
128  MEs_.erase(std::string("Uncalib2DAmpError"));
129  MEs_.erase(std::string("Uncalib2DPedestal"));
130  MEs_.erase(std::string("Uncalib2DJitter"));
131  MEs_.erase(std::string("Uncalib2DJitterError"));
132  MEs_.erase(std::string("Uncalib2DChi2"));
133  MEs_.erase(std::string("Uncalib2DOOTAmp"));
134  MEs_.erase(std::string("Uncalib2DFlags"));
135  }
136  if (!rechit2D_) {
137  MEs_.erase(std::string("RecHit2D"));
138  MEs_.erase(std::string("RecHit2DEnergy"));
139  MEs_.erase(std::string("RecHit2DTime"));
140  MEs_.erase(std::string("RecHit2DFlags"));
141  }
142  }
143 
144  bool GpuTask::filterRunType(short const* runType) {
145  for (unsigned iFED(0); iFED != ecaldqm::nDCC; iFED++) {
149  return true;
150  }
151 
152  return false;
153  }
154 
155  void GpuTask::beginEvent(edm::Event const&, edm::EventSetup const&, bool const&, bool&) {
156  EBCpuDigis_ = nullptr;
157  EECpuDigis_ = nullptr;
158  EBCpuUncalibRecHits_ = nullptr;
159  EECpuUncalibRecHits_ = nullptr;
160  EBCpuRecHits_ = nullptr;
161  EECpuRecHits_ = nullptr;
162  }
163 
164  template <typename DigiCollection>
166  // Return if not enabled
167  if (!enableDigi_)
168  return;
169 
170  MESet& meDigiCpu(MEs_.at("DigiCpu"));
171  MESet& meDigiCpuAmplitude(MEs_.at("DigiCpuAmplitude"));
172 
173  int iSubdet(collection == kEBCpuDigi ? EcalBarrel : EcalEndcap);
174 
175  // Save CpuDigis for comparison with GpuDigis
176  // "if constexpr" ensures cpuDigis is the correct type at compile time
177  if constexpr (std::is_same_v<DigiCollection, EBDigiCollection>) {
178  assert(iSubdet == EcalBarrel);
179  EBCpuDigis_ = &cpuDigis;
180  } else {
181  assert(iSubdet == EcalEndcap);
182  EECpuDigis_ = &cpuDigis;
183  }
184 
185  unsigned nCpuDigis(cpuDigis.size());
186  meDigiCpu.fill(getEcalDQMSetupObjects(), iSubdet, nCpuDigis);
187 
188  for (auto const& cpuDigi : cpuDigis) {
189  // EcalDataFrame is not a derived class of edm::DataFrame, but can take edm::DataFrame (digis) in the constructor
190  EcalDataFrame cpuDataFrame(cpuDigi);
191 
192  for (unsigned iSample = 0; iSample < ecalPh1::sampleSize; iSample++) {
193  static_cast<MESetMulti&>(meDigiCpuAmplitude).use(iSample);
194 
195  int cpuAmp(cpuDataFrame.sample(iSample).adc());
196  meDigiCpuAmplitude.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmp);
197  }
198  }
199  }
200 
201  template <typename DigiCollection>
203  // Return if not enabled
204  if (!enableDigi_)
205  return;
206 
207  MESet& meDigiGpuCpu(MEs_.at("DigiGpuCpu"));
208  MESet& meDigiGpuCpuAmplitude(MEs_.at("DigiGpuCpuAmplitude"));
209 
210  int iSubdet(collection == kEBGpuDigi ? EcalBarrel : EcalEndcap);
211 
212  // Get CpuDigis saved from GpuTask::runOnCpuDigis() for this event
213  // "if constexpr" ensures cpuDigis is the correct type at compile time
214  // Note: gpuDigis is a collection and cpuDigis is a pointer to a collection (for historical reasons)
215  DigiCollection const* cpuDigis;
216  if constexpr (std::is_same_v<DigiCollection, EBDigiCollection>) {
217  assert(iSubdet == EcalBarrel);
218  cpuDigis = EBCpuDigis_;
219  } else {
220  assert(iSubdet == EcalEndcap);
221  cpuDigis = EECpuDigis_;
222  }
223 
224  if (!cpuDigis) {
225  edm::LogWarning("EcalDQM") << "GpuTask: Did not find " << ((iSubdet == EcalBarrel) ? "EB" : "EE")
226  << "CpuDigis Collection. Aborting runOnGpuDigis\n";
227  return;
228  }
229 
230  unsigned nGpuDigis(gpuDigis.size());
231  unsigned nCpuDigis(cpuDigis->size());
232 
233  meDigiGpuCpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuDigis - nCpuDigis);
234 
235  if (digi1D_) {
236  MESet& meDigiGpu(MEs_.at("DigiGpu"));
237  meDigiGpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuDigis);
238  }
239 
240  if (digi2D_) {
241  MESet& meDigi2D(MEs_.at("Digi2D"));
242  meDigi2D.fill(getEcalDQMSetupObjects(), iSubdet, nCpuDigis, nGpuDigis);
243  }
244 
245  for (auto const& gpuDigi : gpuDigis) {
246  // Find CpuDigi with matching DetId
247  DetId gpuId(gpuDigi.id());
248  typename DigiCollection::const_iterator cpuItr(cpuDigis->find(gpuId));
249  if (cpuItr == cpuDigis->end()) {
250  edm::LogWarning("EcalDQM") << "GpuTask: Did not find CpuDigi DetId " << gpuId.rawId() << " in CPU collection\n";
251  continue;
252  }
253 
254  // EcalDataFrame is not a derived class of edm::DataFrame, but can take edm::DataFrame (digis) in the constructor
255  EcalDataFrame gpuDataFrame(gpuDigi);
256  EcalDataFrame cpuDataFrame(*cpuItr);
257 
258  for (unsigned iSample = 0; iSample < ecalPh1::sampleSize; iSample++) {
259  static_cast<MESetMulti&>(meDigiGpuCpuAmplitude).use(iSample);
260 
261  int gpuAmp(gpuDataFrame.sample(iSample).adc());
262  int cpuAmp(cpuDataFrame.sample(iSample).adc());
263 
264  meDigiGpuCpuAmplitude.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmp - cpuAmp);
265 
266  if (digi1D_) {
267  MESet& meDigiGpuAmplitude(MEs_.at("DigiGpuAmplitude"));
268  static_cast<MESetMulti&>(meDigiGpuAmplitude).use(iSample);
269  meDigiGpuAmplitude.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmp);
270  }
271 
272  if (digi2D_) {
273  MESet& meDigi2DAmplitude(MEs_.at("Digi2DAmplitude"));
274  static_cast<MESetMulti&>(meDigi2DAmplitude).use(iSample);
275  meDigi2DAmplitude.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmp, gpuAmp);
276  }
277  }
278  }
279  }
280 
282  // Return if not enabled
283  if (!enableUncalib_)
284  return;
285 
286  MESet& meUncalibCpu(MEs_.at("UncalibCpu"));
287  MESet& meUncalibCpuAmp(MEs_.at("UncalibCpuAmp"));
288  MESet& meUncalibCpuAmpError(MEs_.at("UncalibCpuAmpError"));
289  MESet& meUncalibCpuPedestal(MEs_.at("UncalibCpuPedestal"));
290  MESet& meUncalibCpuJitter(MEs_.at("UncalibCpuJitter"));
291  MESet& meUncalibCpuJitterError(MEs_.at("UncalibCpuJitterError"));
292  MESet& meUncalibCpuChi2(MEs_.at("UncalibCpuChi2"));
293  MESet& meUncalibCpuOOTAmp(MEs_.at("UncalibCpuOOTAmp"));
294  MESet& meUncalibCpuFlags(MEs_.at("UncalibCpuFlags"));
295 
297 
298  // Save CpuUncalibRecHits for comparison with GpuUncalibRecHits
299  if (iSubdet == EcalBarrel)
300  EBCpuUncalibRecHits_ = &cpuHits;
301  else
302  EECpuUncalibRecHits_ = &cpuHits;
303 
304  unsigned nCpuHits(cpuHits.size());
305  meUncalibCpu.fill(getEcalDQMSetupObjects(), iSubdet, nCpuHits);
306 
307  for (auto const& cpuHit : cpuHits) {
308  float cpuAmp(cpuHit.amplitude());
309  float cpuAmpError(cpuHit.amplitudeError());
310  float cpuPedestal(cpuHit.pedestal());
311  float cpuJitter(cpuHit.jitter());
312  float cpuJitterError(cpuHit.jitterError());
313  float cpuChi2(cpuHit.chi2());
314  uint32_t cpuFlags(cpuHit.flags());
315 
316  if (cpuJitterError == 10000) // Set this so 10000 (special value) shows up in last bin
317  cpuJitterError = 0.249999;
318 
319  meUncalibCpuAmp.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmp);
320  meUncalibCpuAmpError.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmpError);
321  meUncalibCpuPedestal.fill(getEcalDQMSetupObjects(), iSubdet, cpuPedestal);
322  meUncalibCpuJitter.fill(getEcalDQMSetupObjects(), iSubdet, cpuJitter);
323  meUncalibCpuJitterError.fill(getEcalDQMSetupObjects(), iSubdet, cpuJitterError);
324  meUncalibCpuChi2.fill(getEcalDQMSetupObjects(), iSubdet, cpuChi2);
325  meUncalibCpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, cpuFlags);
326 
327  for (unsigned iAmp = 0; iAmp < uncalibOOTAmps_.size(); iAmp++) {
328  static_cast<MESetMulti&>(meUncalibCpuOOTAmp).use(iAmp);
329 
330  // Get corresponding OOT Amplitude
331  int cpuOOTAmp(cpuHit.outOfTimeAmplitude(uncalibOOTAmps_[iAmp]));
332  meUncalibCpuOOTAmp.fill(getEcalDQMSetupObjects(), iSubdet, cpuOOTAmp);
333  }
334  }
335  }
336 
338  // Return if not enabled
339  if (!enableUncalib_)
340  return;
341 
342  MESet& meUncalibGpuCpu(MEs_.at("UncalibGpuCpu"));
343  MESet& meUncalibGpuCpuAmp(MEs_.at("UncalibGpuCpuAmp"));
344  MESet& meUncalibGpuCpuAmpError(MEs_.at("UncalibGpuCpuAmpError"));
345  MESet& meUncalibGpuCpuPedestal(MEs_.at("UncalibGpuCpuPedestal"));
346  MESet& meUncalibGpuCpuJitter(MEs_.at("UncalibGpuCpuJitter"));
347  MESet& meUncalibGpuCpuJitterError(MEs_.at("UncalibGpuCpuJitterError"));
348  MESet& meUncalibGpuCpuChi2(MEs_.at("UncalibGpuCpuChi2"));
349  MESet& meUncalibGpuCpuOOTAmp(MEs_.at("UncalibGpuCpuOOTAmp"));
350  MESet& meUncalibGpuCpuFlags(MEs_.at("UncalibGpuCpuFlags"));
351 
353 
354  // Get CpuUncalibRecHits saved from GpuTask::runOnCpuUncalibRecHits() for this event
355  // Note: _gpuHits is a collection and cpuHits is a pointer to a collection (for historical reasons)
356  EcalUncalibratedRecHitCollection const* cpuHits =
358  if (!cpuHits) {
359  edm::LogWarning("EcalDQM") << "GpuTask: Did not find " << ((iSubdet == EcalBarrel) ? "EB" : "EE")
360  << "CpuUncalibRecHits Collection. Aborting runOnGpuUncalibRecHits\n";
361  return;
362  }
363 
364  unsigned nGpuHits(gpuHits.size());
365  unsigned nCpuHits(cpuHits->size());
366 
367  meUncalibGpuCpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuHits - nCpuHits);
368 
369  if (uncalib1D_) {
370  MESet& meUncalibGpu(MEs_.at("UncalibGpu"));
371  meUncalibGpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuHits);
372  }
373 
374  if (uncalib2D_) {
375  MESet& meUncalib2D(MEs_.at("Uncalib2D"));
376  meUncalib2D.fill(getEcalDQMSetupObjects(), iSubdet, nCpuHits, nGpuHits);
377  }
378 
379  for (auto const& gpuHit : gpuHits) {
380  // Find CpuUncalibRecHit with matching DetId
381  DetId gpuId(gpuHit.id());
383  if (cpuItr == cpuHits->end()) {
384  edm::LogWarning("EcalDQM") << "GpuTask: Did not find GpuUncalibRecHit DetId " << gpuId.rawId()
385  << " in CPU collection\n";
386  continue;
387  }
388 
389  float gpuAmp(gpuHit.amplitude());
390  float gpuAmpError(gpuHit.amplitudeError());
391  float gpuPedestal(gpuHit.pedestal());
392  float gpuJitter(gpuHit.jitter());
393  float gpuJitterError(gpuHit.jitterError());
394  float gpuChi2(gpuHit.chi2());
395  uint32_t gpuFlags(gpuHit.flags());
396 
397  if (gpuJitterError == 10000) // Set this so 10000 (special value) shows up in last bin
398  gpuJitterError = 0.249999;
399 
400  float cpuAmp(cpuItr->amplitude());
401  float cpuAmpError(cpuItr->amplitudeError());
402  float cpuPedestal(cpuItr->pedestal());
403  float cpuJitter(cpuItr->jitter());
404  float cpuJitterError(cpuItr->jitterError());
405  float cpuChi2(cpuItr->chi2());
406  uint32_t cpuFlags(cpuItr->flags());
407 
408  if (cpuJitterError == 10000) // Set this so 10000 (special value) shows up in last bin
409  cpuJitterError = 0.249999;
410 
411  meUncalibGpuCpuAmp.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmp - cpuAmp);
412  meUncalibGpuCpuAmpError.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmpError - cpuAmpError);
413  meUncalibGpuCpuPedestal.fill(getEcalDQMSetupObjects(), iSubdet, gpuPedestal - cpuPedestal);
414  meUncalibGpuCpuJitter.fill(getEcalDQMSetupObjects(), iSubdet, gpuJitter - cpuJitter);
415  meUncalibGpuCpuJitterError.fill(getEcalDQMSetupObjects(), iSubdet, gpuJitterError - cpuJitterError);
416  meUncalibGpuCpuChi2.fill(getEcalDQMSetupObjects(), iSubdet, gpuChi2 - cpuChi2);
417  meUncalibGpuCpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, gpuFlags - cpuFlags);
418 
419  if (uncalib1D_) {
420  MESet& meUncalibGpuAmp(MEs_.at("UncalibGpuAmp"));
421  MESet& meUncalibGpuAmpError(MEs_.at("UncalibGpuAmpError"));
422  MESet& meUncalibGpuPedestal(MEs_.at("UncalibGpuPedestal"));
423  MESet& meUncalibGpuJitter(MEs_.at("UncalibGpuJitter"));
424  MESet& meUncalibGpuJitterError(MEs_.at("UncalibGpuJitterError"));
425  MESet& meUncalibGpuChi2(MEs_.at("UncalibGpuChi2"));
426  MESet& meUncalibGpuFlags(MEs_.at("UncalibGpuFlags"));
427 
428  meUncalibGpuAmp.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmp);
429  meUncalibGpuAmpError.fill(getEcalDQMSetupObjects(), iSubdet, gpuAmpError);
430  meUncalibGpuPedestal.fill(getEcalDQMSetupObjects(), iSubdet, gpuPedestal);
431  meUncalibGpuJitter.fill(getEcalDQMSetupObjects(), iSubdet, gpuJitter);
432  meUncalibGpuJitterError.fill(getEcalDQMSetupObjects(), iSubdet, gpuJitterError);
433  meUncalibGpuChi2.fill(getEcalDQMSetupObjects(), iSubdet, gpuChi2);
434  meUncalibGpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, gpuFlags);
435  }
436 
437  if (uncalib2D_) {
438  MESet& meUncalib2DAmp(MEs_.at("Uncalib2DAmp"));
439  MESet& meUncalib2DAmpError(MEs_.at("Uncalib2DAmpError"));
440  MESet& meUncalib2DPedestal(MEs_.at("Uncalib2DPedestal"));
441  MESet& meUncalib2DJitter(MEs_.at("Uncalib2DJitter"));
442  MESet& meUncalib2DJitterError(MEs_.at("Uncalib2DJitterError"));
443  MESet& meUncalib2DChi2(MEs_.at("Uncalib2DChi2"));
444  MESet& meUncalib2DFlags(MEs_.at("Uncalib2DFlags"));
445 
446  meUncalib2DAmp.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmp, gpuAmp);
447  meUncalib2DAmpError.fill(getEcalDQMSetupObjects(), iSubdet, cpuAmpError, gpuAmpError);
448  meUncalib2DPedestal.fill(getEcalDQMSetupObjects(), iSubdet, cpuPedestal, gpuPedestal);
449  meUncalib2DJitter.fill(getEcalDQMSetupObjects(), iSubdet, cpuJitter, gpuJitter);
450  meUncalib2DJitterError.fill(getEcalDQMSetupObjects(), iSubdet, cpuJitterError, gpuJitterError);
451  meUncalib2DChi2.fill(getEcalDQMSetupObjects(), iSubdet, cpuChi2, gpuChi2);
452  meUncalib2DFlags.fill(getEcalDQMSetupObjects(), iSubdet, cpuFlags, gpuFlags);
453  }
454 
455  for (unsigned iAmp = 0; iAmp < uncalibOOTAmps_.size(); iAmp++) {
456  static_cast<MESetMulti&>(meUncalibGpuCpuOOTAmp).use(iAmp);
457 
458  // Get corresponding OOT Amplitude
459  int gpuOOTAmp(gpuHit.outOfTimeAmplitude(uncalibOOTAmps_[iAmp]));
460  int cpuOOTAmp(cpuItr->outOfTimeAmplitude(uncalibOOTAmps_[iAmp]));
461 
462  meUncalibGpuCpuOOTAmp.fill(getEcalDQMSetupObjects(), iSubdet, gpuOOTAmp - cpuOOTAmp);
463 
464  if (uncalib1D_) {
465  MESet& meUncalibGpuOOTAmp(MEs_.at("UncalibGpuOOTAmp"));
466  static_cast<MESetMulti&>(meUncalibGpuOOTAmp).use(iAmp);
467  meUncalibGpuOOTAmp.fill(getEcalDQMSetupObjects(), iSubdet, gpuOOTAmp);
468  }
469 
470  if (uncalib2D_) {
471  MESet& meUncalib2DOOTAmp(MEs_.at("Uncalib2DOOTAmp"));
472  static_cast<MESetMulti&>(meUncalib2DOOTAmp).use(iAmp);
473  meUncalib2DOOTAmp.fill(getEcalDQMSetupObjects(), iSubdet, cpuOOTAmp, gpuOOTAmp);
474  }
475  }
476  }
477  }
478 
480  // Return if not enabled
481  if (!enableRecHit_)
482  return;
483 
484  MESet& meRecHitCpu(MEs_.at("RecHitCpu"));
485  MESet& meRecHitCpuEnergy(MEs_.at("RecHitCpuEnergy"));
486  MESet& meRecHitCpuTime(MEs_.at("RecHitCpuTime"));
487  MESet& meRecHitCpuFlags(MEs_.at("RecHitCpuFlags"));
488 
489  int iSubdet(collection == kEBCpuRecHit ? EcalBarrel : EcalEndcap);
490 
491  // Save CpuRecHits for comparison with GpuRecHits
492  if (iSubdet == EcalBarrel)
493  EBCpuRecHits_ = &cpuHits;
494  else
495  EECpuRecHits_ = &cpuHits;
496 
497  unsigned nCpuHits(cpuHits.size());
498  meRecHitCpu.fill(getEcalDQMSetupObjects(), iSubdet, nCpuHits);
499 
500  for (auto const& cpuHit : cpuHits) {
501  float cpuEnergy(cpuHit.energy());
502  float cpuTime(cpuHit.time());
503  uint32_t cpuFlags(cpuHit.flagsBits());
504 
505  meRecHitCpuEnergy.fill(getEcalDQMSetupObjects(), iSubdet, cpuEnergy);
506  meRecHitCpuTime.fill(getEcalDQMSetupObjects(), iSubdet, cpuTime);
507  meRecHitCpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, cpuFlags);
508  }
509  }
510 
512  // Return if not enabled
513  if (!enableRecHit_)
514  return;
515 
516  MESet& meRecHitGpuCpu(MEs_.at("RecHitGpuCpu"));
517  MESet& meRecHitGpuCpuEnergy(MEs_.at("RecHitGpuCpuEnergy"));
518  MESet& meRecHitGpuCpuTime(MEs_.at("RecHitGpuCpuTime"));
519  MESet& meRecHitGpuCpuFlags(MEs_.at("RecHitGpuCpuFlags"));
520 
521  int iSubdet(collection == kEBGpuRecHit ? EcalBarrel : EcalEndcap);
522 
523  // Get CpuRecHits saved from GpuTask::runOnCpuRecHits() for this event
524  // Note: _gpuHits is a collection and cpuHits is a pointer to a collection (for historical reasons)
525  EcalRecHitCollection const* cpuHits = (iSubdet == EcalBarrel) ? EBCpuRecHits_ : EECpuRecHits_;
526  if (!cpuHits) {
527  edm::LogWarning("EcalDQM") << "GpuTask: Did not find " << ((iSubdet == EcalBarrel) ? "EB" : "EE")
528  << "CpuRecHits Collection. Aborting runOnGpuRecHits\n";
529  return;
530  }
531 
532  unsigned nGpuHits(gpuHits.size());
533  unsigned nCpuHits(cpuHits->size());
534 
535  meRecHitGpuCpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuHits - nCpuHits);
536 
537  if (rechit1D_) {
538  MESet& meRecHitGpu(MEs_.at("RecHitGpu"));
539  meRecHitGpu.fill(getEcalDQMSetupObjects(), iSubdet, nGpuHits);
540  }
541  if (rechit2D_) {
542  MESet& meRecHit2D(MEs_.at("RecHit2D"));
543  meRecHit2D.fill(getEcalDQMSetupObjects(), iSubdet, nCpuHits, nGpuHits);
544  }
545 
546  for (auto const& gpuHit : gpuHits) {
547  // Find CpuRecHit with matching DetId
548  DetId gpuId(gpuHit.detid());
549  EcalRecHitCollection::const_iterator cpuItr(cpuHits->find(gpuId));
550  if (cpuItr == cpuHits->end()) {
551  edm::LogWarning("EcalDQM") << "GpuTask: Did not find GpuRecHit DetId " << gpuId.rawId()
552  << " in CPU collection\n";
553  continue;
554  }
555 
556  float gpuEnergy(gpuHit.energy());
557  float gpuTime(gpuHit.time());
558  uint32_t gpuFlags(gpuHit.flagsBits());
559 
560  float cpuEnergy(cpuItr->energy());
561  float cpuTime(cpuItr->time());
562  uint32_t cpuFlags(cpuItr->flagsBits());
563 
564  meRecHitGpuCpuEnergy.fill(getEcalDQMSetupObjects(), iSubdet, gpuEnergy - cpuEnergy);
565  meRecHitGpuCpuTime.fill(getEcalDQMSetupObjects(), iSubdet, gpuTime - cpuTime);
566  meRecHitGpuCpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, gpuFlags - cpuFlags);
567 
568  if (rechit1D_) {
569  MESet& meRecHitGpuEnergy(MEs_.at("RecHitGpuEnergy"));
570  MESet& meRecHitGpuTime(MEs_.at("RecHitGpuTime"));
571  MESet& meRecHitGpuFlags(MEs_.at("RecHitGpuFlags"));
572 
573  meRecHitGpuEnergy.fill(getEcalDQMSetupObjects(), iSubdet, gpuEnergy);
574  meRecHitGpuTime.fill(getEcalDQMSetupObjects(), iSubdet, gpuTime);
575  meRecHitGpuFlags.fill(getEcalDQMSetupObjects(), iSubdet, gpuFlags);
576  }
577 
578  if (rechit2D_) {
579  MESet& meRecHit2DEnergy(MEs_.at("RecHit2DEnergy"));
580  MESet& meRecHit2DTime(MEs_.at("RecHit2DTime"));
581  MESet& meRecHit2DFlags(MEs_.at("RecHit2DFlags"));
582 
583  meRecHit2DEnergy.fill(getEcalDQMSetupObjects(), iSubdet, cpuEnergy, gpuEnergy);
584  meRecHit2DTime.fill(getEcalDQMSetupObjects(), iSubdet, cpuTime, gpuTime);
585  meRecHit2DFlags.fill(getEcalDQMSetupObjects(), iSubdet, cpuFlags, gpuFlags);
586  }
587  }
588  }
589 
591 } // namespace ecaldqm
bool uncalib2D_
Definition: GpuTask.h:43
bool runGpuTask_
Definition: GpuTask.h:35
void addDependencies(DependencySet &) override
Definition: GpuTask.cc:32
#define DEFINE_ECALDQM_WORKER(TYPE)
Definition: DQWorker.h:168
EBDigiCollection const * EBCpuDigis_
Definition: GpuTask.h:49
void runOnGpuRecHits(EcalRecHitCollection const &, Collections)
Definition: GpuTask.cc:511
bool filterRunType(short const *) override
Definition: GpuTask.cc:144
MESet & at(const std::string &key)
Definition: MESet.h:399
size_type size() const
void runOnCpuUncalibRecHits(EcalUncalibratedRecHitCollection const &, Collections)
Definition: GpuTask.cc:281
std::vector< T >::const_iterator const_iterator
bool rechit2D_
Definition: GpuTask.h:45
EEDigiCollection const * EECpuDigis_
Definition: GpuTask.h:50
assert(be >=bs)
EcalRecHitCollection const * EECpuRecHits_
Definition: GpuTask.h:56
void fill(EcalDQMSetupObjects const edso, DetId const &_id, double _xyw=1., double _yw=1., double _w=1.) override
Definition: MESetMulti.h:29
bool enableDigi_
Definition: GpuTask.h:36
void setParams(edm::ParameterSet const &) override
Definition: GpuTask.cc:46
bool rechit1D_
Definition: GpuTask.h:44
void runOnGpuUncalibRecHits(EcalUncalibratedRecHitCollection const &, Collections)
Definition: GpuTask.cc:337
EcalMGPASample sample(int i) const
Definition: EcalDataFrame.h:29
bool enableUncalib_
Definition: GpuTask.h:37
virtual void fill(EcalDQMSetupObjects const, DetId const &, double=1., double=1., double=1.)
Definition: MESet.h:74
void beginEvent(edm::Event const &, edm::EventSetup const &, bool const &, bool &) override
Definition: GpuTask.cc:155
EcalRecHitCollection const * EBCpuRecHits_
Definition: GpuTask.h:55
const_iterator end() const
EcalDQMSetupObjects const getEcalDQMSetupObjects()
Definition: DQWorker.cc:170
Definition: DetId.h:17
std::vector< int > uncalibOOTAmps_
Definition: GpuTask.h:47
MESetCollection MEs_
Definition: DQWorker.h:131
void runOnGpuDigis(DigiCollection const &, Collections)
Definition: GpuTask.cc:202
static constexpr unsigned int sampleSize
Definition: EcalConstants.h:44
iterator find(key_type k)
EcalUncalibratedRecHitCollection const * EECpuUncalibRecHits_
Definition: GpuTask.h:53
int adc() const
get the ADC sample (12 bits)
EcalUncalibratedRecHitCollection const * EBCpuUncalibRecHits_
Definition: GpuTask.h:52
bool uncalib1D_
Definition: GpuTask.h:42
Log< level::Warning, false > LogWarning
bool enableRecHit_
Definition: GpuTask.h:38
void erase(const std::string &key)
Definition: MESet.h:390
void runOnCpuRecHits(EcalRecHitCollection const &, Collections)
Definition: GpuTask.cc:479
void runOnCpuDigis(DigiCollection const &, Collections)
Definition: GpuTask.cc:165