CMS 3D CMS Logo

EtlDigiHitsValidation.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Validation/MtdValidation
4 // Class: EtlDigiHitsValidation
5 //
14 #include <string>
15 
20 
23 
27 
33 
35 public:
37  ~EtlDigiHitsValidation() override;
38 
39  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
40 
41 private:
42  void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
43 
44  void analyze(const edm::Event&, const edm::EventSetup&) override;
45 
46  // ------------ member data ------------
47 
49  const bool optionalPlots_;
50 
52 
55 
56  // --- histograms declaration
57 
60 
63 
65 
66  MonitorElement* meLocalOccupancy_[2]; //folding the two ETL discs
69 
75 
81 
82  std::array<std::unordered_map<uint32_t, uint32_t>, 4> ndigiPerLGAD_;
83 };
84 
85 // ------------ constructor and destructor --------------
87  : folder_(iConfig.getParameter<std::string>("folder")),
88  optionalPlots_(iConfig.getParameter<bool>("optionalPlots")) {
89  etlDigiHitsToken_ = consumes<ETLDigiCollection>(iConfig.getParameter<edm::InputTag>("inputTag"));
90  mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
91  mtdtopoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
92 }
93 
95 
96 // ------------ method called for each event ------------
98  using namespace edm;
99 
100  auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
101  const MTDGeometry* geom = geometryHandle.product();
102 
103  auto etlDigiHitsHandle = makeValid(iEvent.getHandle(etlDigiHitsToken_));
104 
105  // --- Loop over the ETL DIGI hits
106 
107  unsigned int n_digi_etl[4] = {0, 0, 0, 0};
108  for (size_t i = 0; i < 4; i++) {
109  ndigiPerLGAD_[i].clear();
110  }
111 
112  size_t index(0);
113 
114  for (const auto& dataFrame : *etlDigiHitsHandle) {
115  // --- Get the on-time sample
116  int isample = 2;
117  double weight = 1.0;
118  const auto& sample = dataFrame.sample(isample);
119  ETLDetId detId = dataFrame.id();
120  DetId geoId = detId.geographicalId();
121 
122  const MTDGeomDet* thedet = geom->idToDet(geoId);
123  if (thedet == nullptr)
124  throw cms::Exception("EtlDigiHitsValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
125  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
126  const PixelTopology& topo = static_cast<const PixelTopology&>(thedet->topology());
127 
128  Local3DPoint local_point(topo.localX(sample.row()), topo.localY(sample.column()), 0.);
129  const auto& global_point = thedet->toGlobal(local_point);
130 
131  // --- Fill the histograms
132 
133  int idet = 999;
134  if (detId.discSide() == 1) {
135  weight = -weight;
136  }
137  if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
138  idet = 0;
139  } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
140  idet = 1;
141  } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
142  idet = 2;
143  } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
144  idet = 3;
145  } else {
146  edm::LogWarning("EtlDigiHitsValidation") << "Unknown ETL DetId configuration: " << detId;
147  continue;
148  }
149 
150  index++;
151  LogDebug("EtlDigiHitsValidation") << "Digi # " << index << " DetId " << detId.rawId() << " idet " << idet;
152 
153  meHitCharge_[idet]->Fill(sample.data());
154  meHitTime_[idet]->Fill(sample.toa());
155  meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
156 
157  if (optionalPlots_) {
158  if ((idet == 0) || (idet == 1)) {
159  meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
160  meHitXlocal_[0]->Fill(local_point.x());
161  meHitYlocal_[0]->Fill(local_point.y());
162 
163  } else if ((idet == 2) || (idet == 3)) {
164  meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
165  meHitXlocal_[1]->Fill(local_point.x());
166  meHitYlocal_[1]->Fill(local_point.y());
167  }
168  }
169 
170  meHitX_[idet]->Fill(global_point.x());
171  meHitY_[idet]->Fill(global_point.y());
172  meHitZ_[idet]->Fill(global_point.z());
173  meHitPhi_[idet]->Fill(global_point.phi());
174  meHitEta_[idet]->Fill(global_point.eta());
175 
176  meHitTvsQ_[idet]->Fill(sample.data(), sample.toa());
177  meHitQvsPhi_[idet]->Fill(global_point.phi(), sample.data());
178  meHitQvsEta_[idet]->Fill(global_point.eta(), sample.data());
179  meHitTvsPhi_[idet]->Fill(global_point.phi(), sample.toa());
180  meHitTvsEta_[idet]->Fill(global_point.eta(), sample.toa());
181 
182  n_digi_etl[idet]++;
183  size_t ncount(0);
184  ndigiPerLGAD_[idet].emplace(detId.rawId(), ncount);
185  ndigiPerLGAD_[idet].at(detId.rawId())++;
186 
187  } // dataFrame loop
188 
189  for (int i = 0; i < 4; i++) {
190  meNhits_[i]->Fill(log10(n_digi_etl[i]));
191  for (const auto& thisNdigi : ndigiPerLGAD_[i]) {
192  meNhitsPerLGAD_[i]->Fill(thisNdigi.second);
193  }
194  }
195 }
196 
197 // ------------ method for histogram booking ------------
199  edm::Run const& run,
200  edm::EventSetup const& iSetup) {
201  ibook.setCurrentFolder(folder_);
202 
203  // --- histograms booking
204 
205  meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
206  "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
207  100,
208  0.,
209  5.25);
210  meNhits_[1] =
211  ibook.book1D("EtlNhitsZnegD2", "Number of ETL DIGI hits (-Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
212  meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
213  "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
214  100,
215  0.,
216  5.25);
217  meNhits_[3] =
218  ibook.book1D("EtlNhitsZposD2", "Number of ETL DIGI hits (+Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
219 
220  meNhitsPerLGAD_[0] = ibook.book1D("EtlNhitsPerLGADZnegD1",
221  "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
222  50,
223  0.,
224  50.);
225  meNhitsPerLGAD_[1] =
226  ibook.book1D("EtlNhitsPerLGADZnegD2", "Number of ETL DIGI hits (-Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
227  meNhitsPerLGAD_[2] = ibook.book1D("EtlNhitsPerLGADZposD1",
228  "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
229  50,
230  0.,
231  50.);
232  meNhitsPerLGAD_[3] =
233  ibook.book1D("EtlNhitsPerLGADZposD2", "Number of ETL DIGI hits (+Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
234 
235  meHitCharge_[0] = ibook.book1D("EtlHitChargeZnegD1",
236  "ETL DIGI hits charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
237  100,
238  0.,
239  256.);
240  meHitCharge_[1] =
241  ibook.book1D("EtlHitChargeZnegD2", "ETL DIGI hits charge (-Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
242  meHitCharge_[2] = ibook.book1D("EtlHitChargeZposD1",
243  "ETL DIGI hits charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
244  100,
245  0.,
246  256.);
247  meHitCharge_[3] =
248  ibook.book1D("EtlHitChargeZposD2", "ETL DIGI hits charge (+Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
249  meHitTime_[0] = ibook.book1D("EtlHitTimeZnegD1",
250  "ETL DIGI hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
251  100,
252  0.,
253  2000.);
254  meHitTime_[1] =
255  ibook.book1D("EtlHitTimeZnegD2", "ETL DIGI hits ToA (-Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
256  meHitTime_[2] = ibook.book1D("EtlHitTimeZposD1",
257  "ETL DIGI hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
258  100,
259  0.,
260  2000.);
261  meHitTime_[3] =
262  ibook.book1D("EtlHitTimeZposD2", "ETL DIGI hits ToA (+Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
263 
264  meOccupancy_[0] =
265  ibook.book2D("EtlOccupancyZnegD1",
266  "ETL DIGI hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
267  135,
268  -135.,
269  135.,
270  135,
271  -135.,
272  135.);
273  meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
274  "ETL DIGI hits occupancy (-Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
275  135,
276  -135.,
277  135.,
278  135,
279  -135.,
280  135.);
281  meOccupancy_[2] =
282  ibook.book2D("EtlOccupancyZposD1",
283  "ETL DIGI hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
284  135,
285  -135.,
286  135.,
287  135,
288  -135.,
289  135.);
290  meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
291  "ETL DIGI hits occupancy (+Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
292  135,
293  -135.,
294  135.,
295  135,
296  -135.,
297  135.);
298  if (optionalPlots_) {
299  meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
300  "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
301  100,
302  -2.2,
303  2.2,
304  50,
305  -1.1,
306  1.1);
307  meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
308  "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
309  100,
310  -2.2,
311  2.2,
312  50,
313  -1.1,
314  1.1);
315  meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
316  meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
317  meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
318  meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
319  }
320  meHitX_[0] = ibook.book1D(
321  "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
322  meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
323  meHitX_[2] = ibook.book1D(
324  "EtlHitXZposD1", "ETL DIGI hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
325  meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL DIGI hits X (+Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
326  meHitY_[0] = ibook.book1D(
327  "EtlHitYZnegD1", "ETL DIGI hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
328  meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL DIGI hits Y (-Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
329  meHitY_[2] = ibook.book1D(
330  "EtlHitYZposD1", "ETL DIGI hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
331  meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL DIGI hits Y (+Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
332  meHitZ_[0] = ibook.book1D(
333  "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -302., -298.);
334  meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304., -300.);
335  meHitZ_[2] = ibook.book1D(
336  "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 298., 302.);
337  meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 300., 304.);
338 
339  meHitPhi_[0] = ibook.book1D("EtlHitPhiZnegD1",
340  "ETL DIGI hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
341  100,
342  -3.15,
343  3.15);
344  meHitPhi_[1] =
345  ibook.book1D("EtlHitPhiZnegD2", "ETL DIGI hits #phi (-Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
346  meHitPhi_[2] = ibook.book1D("EtlHitPhiZposD1",
347  "ETL DIGI hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
348  100,
349  -3.15,
350  3.15);
351  meHitPhi_[3] =
352  ibook.book1D("EtlHitPhiZposD2", "ETL DIGI hits #phi (+Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
353  meHitEta_[0] = ibook.book1D(
354  "EtlHitEtaZnegD1", "ETL DIGI hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, -3.2, -1.56);
355  meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL DIGI hits #eta (-Z, Second disk);#eta_{DIGI}", 100, -3.2, -1.56);
356  meHitEta_[2] = ibook.book1D(
357  "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2);
358  meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2);
359  meHitTvsQ_[0] = ibook.bookProfile(
360  "EtlHitTvsQZnegD1",
361  "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
362  50,
363  0.,
364  256.,
365  0.,
366  1024.);
367  meHitTvsQ_[1] =
368  ibook.bookProfile("EtlHitTvsQZnegD2",
369  "ETL DIGI ToA vs charge (-Z, Second Disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
370  50,
371  0.,
372  256.,
373  0.,
374  1024.);
375  meHitTvsQ_[2] = ibook.bookProfile(
376  "EtlHitTvsQZposD1",
377  "ETL DIGI ToA vs charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
378  50,
379  0.,
380  256.,
381  0.,
382  1024.);
383  meHitTvsQ_[3] =
384  ibook.bookProfile("EtlHitTvsQZposD2",
385  "ETL DIGI ToA vs charge (+Z, Second disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
386  50,
387  0.,
388  256.,
389  0.,
390  1024.);
391  meHitQvsPhi_[0] = ibook.bookProfile(
392  "EtlHitQvsPhiZnegD1",
393  "ETL DIGI charge vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
394  50,
395  -3.15,
396  3.15,
397  0.,
398  1024.);
399  meHitQvsPhi_[1] =
400  ibook.bookProfile("EtlHitQvsPhiZnegD2",
401  "ETL DIGI charge vs #phi (-Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
402  50,
403  -3.15,
404  3.15,
405  0.,
406  1024.);
407  meHitQvsPhi_[2] = ibook.bookProfile(
408  "EtlHitQvsPhiZposD1",
409  "ETL DIGI charge vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
410  50,
411  -3.15,
412  3.15,
413  0.,
414  1024.);
415  meHitQvsPhi_[3] =
416  ibook.bookProfile("EtlHitQvsPhiZposD2",
417  "ETL DIGI charge vs #phi (+Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
418  50,
419  -3.15,
420  3.15,
421  0.,
422  1024.);
423  meHitQvsEta_[0] = ibook.bookProfile(
424  "EtlHitQvsEtaZnegD1",
425  "ETL DIGI charge vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
426  50,
427  -3.2,
428  -1.56,
429  0.,
430  1024.);
431  meHitQvsEta_[1] = ibook.bookProfile("EtlHitQvsEtaZnegD2",
432  "ETL DIGI charge vs #eta (-Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
433  50,
434  -3.2,
435  -1.56,
436  0.,
437  1024.);
438  meHitQvsEta_[2] = ibook.bookProfile(
439  "EtlHitQvsEtaZposD1",
440  "ETL DIGI charge vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
441  50,
442  1.56,
443  3.2,
444  0.,
445  1024.);
446  meHitQvsEta_[3] = ibook.bookProfile("EtlHitQvsEtaZposD2",
447  "ETL DIGI charge vs #eta (+Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
448  50,
449  1.56,
450  3.2,
451  0.,
452  1024.);
453  meHitTvsPhi_[0] = ibook.bookProfile(
454  "EtlHitTvsPhiZnegD1",
455  "ETL DIGI ToA vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
456  50,
457  -3.15,
458  3.15,
459  0.,
460  1024.);
461  meHitTvsPhi_[1] =
462  ibook.bookProfile("EtlHitTvsPhiZnegD2",
463  "ETL DIGI ToA vs #phi (-Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
464  50,
465  -3.15,
466  3.15,
467  0.,
468  1024.);
469  meHitTvsPhi_[2] = ibook.bookProfile(
470  "EtlHitTvsPhiZposD1",
471  "ETL DIGI ToA vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
472  50,
473  -3.15,
474  3.15,
475  0.,
476  1024.);
477  meHitTvsPhi_[3] =
478  ibook.bookProfile("EtlHitTvsPhiZposD2",
479  "ETL DIGI ToA vs #phi (+Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
480  50,
481  -3.15,
482  3.15,
483  0.,
484  1024.);
485  meHitTvsEta_[0] = ibook.bookProfile(
486  "EtlHitTvsEtaZnegD1",
487  "ETL DIGI ToA vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
488  50,
489  -3.2,
490  -1.56,
491  0.,
492  1024.);
493  meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
494  "ETL DIGI ToA vs #eta (-Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
495  50,
496  -3.2,
497  -1.56,
498  0.,
499  1024.);
500  meHitTvsEta_[2] = ibook.bookProfile(
501  "EtlHitTvsEtaZposD1",
502  "ETL DIGI ToA vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
503  50,
504  1.56,
505  3.2,
506  0.,
507  1024.);
508  meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
509  "ETL DIGI ToA vs #eta (+Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
510  50,
511  1.56,
512  3.2,
513  0.,
514  1024.);
515 }
516 
517 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
520 
521  desc.add<std::string>("folder", "MTD/ETL/DigiHits");
522  desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "FTLEndcap"));
523  desc.add<bool>("optionalPlots", false);
524 
525  descriptions.add("etlDigiHitsDefaultValid", desc);
526 }
527 
MonitorElement * meHitQvsPhi_[4]
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::string folder_
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * meHitXlocal_[2]
virtual const Topology & topology() const
Definition: GeomDet.cc:67
MonitorElement * meHitEta_[4]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: weight.py:1
edm::EDGetTokenT< ETLDigiCollection > etlDigiHitsToken_
std::array< std::unordered_map< uint32_t, uint32_t >, 4 > ndigiPerLGAD_
MonitorElement * meNhits_[4]
void Fill(long long x)
virtual float localX(float mpX) const =0
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
MonitorElement * meOccupancy_[4]
MonitorElement * meHitTvsQ_[4]
int iEvent
Definition: GenABIO.cc:224
MonitorElement * meLocalOccupancy_[2]
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * meHitQvsEta_[4]
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:408
MonitorElement * meHitCharge_[4]
MonitorElement * meHitY_[4]
MonitorElement * meHitTime_[4]
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MonitorElement * meHitYlocal_[2]
MonitorElement * meHitTvsEta_[4]
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
MonitorElement * meHitX_[4]
MonitorElement * meHitZ_[4]
Definition: DetId.h:17
virtual float localY(float mpY) const =0
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:221
edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meHitPhi_[4]
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:16
HLT enums.
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
EtlDigiHitsValidation(const edm::ParameterSet &)
MonitorElement * meNhitsPerLGAD_[4]
Log< level::Warning, false > LogWarning
auto makeValid(const U &iOtherHandleType) noexcept(false)
Definition: ValidHandle.h:52
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
Definition: Run.h:45
#define LogDebug(id)