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 topologyHandle = iSetup.getTransientHandle(mtdtopoToken_);
104  const MTDTopology* topology = topologyHandle.product();
105 
106  bool topo1Dis = false;
107  bool topo2Dis = false;
109  topo1Dis = true;
110  } else {
111  topo2Dis = true;
112  }
113 
114  auto etlDigiHitsHandle = makeValid(iEvent.getHandle(etlDigiHitsToken_));
115 
116  // --- Loop over the ETL DIGI hits
117 
118  unsigned int n_digi_etl[4] = {0, 0, 0, 0};
119  for (size_t i = 0; i < 4; i++) {
120  ndigiPerLGAD_[i].clear();
121  }
122 
123  for (const auto& dataFrame : *etlDigiHitsHandle) {
124  // --- Get the on-time sample
125  int isample = 2;
126  double weight = 1.0;
127  const auto& sample = dataFrame.sample(isample);
128  ETLDetId detId = dataFrame.id();
129  DetId geoId = detId.geographicalId();
130 
131  const MTDGeomDet* thedet = geom->idToDet(geoId);
132  if (thedet == nullptr)
133  throw cms::Exception("EtlDigiHitsValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
134  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
135  const PixelTopology& topo = static_cast<const PixelTopology&>(thedet->topology());
136 
137  Local3DPoint local_point(topo.localX(sample.row()), topo.localY(sample.column()), 0.);
138  const auto& global_point = thedet->toGlobal(local_point);
139 
140  // --- Fill the histograms
141 
142  int idet = 999;
143 
144  if (topo1Dis) {
145  if (detId.zside() == -1) {
146  idet = 0;
147  } else if (detId.zside() == 1) {
148  idet = 2;
149  } else {
150  continue;
151  }
152  }
153 
154  if (topo2Dis) {
155  if (detId.discSide() == 1) {
156  weight = -weight;
157  }
158  if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
159  idet = 0;
160  } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
161  idet = 1;
162  } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
163  idet = 2;
164  } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
165  idet = 3;
166  } else {
167  continue;
168  }
169  }
170 
171  meHitCharge_[idet]->Fill(sample.data());
172  meHitTime_[idet]->Fill(sample.toa());
173  meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
174 
175  if (optionalPlots_) {
176  if ((idet == 0) || (idet == 1)) {
177  meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
178  meHitXlocal_[0]->Fill(local_point.x());
179  meHitYlocal_[0]->Fill(local_point.y());
180 
181  } else if ((idet == 2) || (idet == 3)) {
182  meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
183  meHitXlocal_[1]->Fill(local_point.x());
184  meHitYlocal_[1]->Fill(local_point.y());
185  }
186  }
187 
188  meHitX_[idet]->Fill(global_point.x());
189  meHitY_[idet]->Fill(global_point.y());
190  meHitZ_[idet]->Fill(global_point.z());
191  meHitPhi_[idet]->Fill(global_point.phi());
192  meHitEta_[idet]->Fill(global_point.eta());
193 
194  meHitTvsQ_[idet]->Fill(sample.data(), sample.toa());
195  meHitQvsPhi_[idet]->Fill(global_point.phi(), sample.data());
196  meHitQvsEta_[idet]->Fill(global_point.eta(), sample.data());
197  meHitTvsPhi_[idet]->Fill(global_point.phi(), sample.toa());
198  meHitTvsEta_[idet]->Fill(global_point.eta(), sample.toa());
199 
200  n_digi_etl[idet]++;
201  size_t ncount(0);
202  ndigiPerLGAD_[idet].emplace(detId.rawId(), ncount);
203  ndigiPerLGAD_[idet].at(detId.rawId())++;
204 
205  } // dataFrame loop
206 
207  if (topo1Dis) {
208  meNhits_[0]->Fill(log10(n_digi_etl[0]));
209  meNhits_[2]->Fill(log10(n_digi_etl[2]));
210  for (const auto& thisNdigi : ndigiPerLGAD_[0]) {
211  meNhitsPerLGAD_[0]->Fill(thisNdigi.second);
212  }
213  for (const auto& thisNdigi : ndigiPerLGAD_[2]) {
214  meNhitsPerLGAD_[2]->Fill(thisNdigi.second);
215  }
216  }
217 
218  if (topo2Dis) {
219  for (int i = 0; i < 4; i++) {
220  meNhits_[i]->Fill(log10(n_digi_etl[i]));
221  for (const auto& thisNdigi : ndigiPerLGAD_[i]) {
222  meNhitsPerLGAD_[i]->Fill(thisNdigi.second);
223  }
224  }
225  }
226 }
227 
228 // ------------ method for histogram booking ------------
230  edm::Run const& run,
231  edm::EventSetup const& iSetup) {
232  ibook.setCurrentFolder(folder_);
233 
234  // --- histograms booking
235 
236  meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
237  "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
238  100,
239  0.,
240  5.25);
241  meNhits_[1] =
242  ibook.book1D("EtlNhitsZnegD2", "Number of ETL DIGI hits (-Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
243  meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
244  "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
245  100,
246  0.,
247  5.25);
248  meNhits_[3] =
249  ibook.book1D("EtlNhitsZposD2", "Number of ETL DIGI hits (+Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
250 
251  meNhitsPerLGAD_[0] = ibook.book1D("EtlNhitsPerLGADZnegD1",
252  "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
253  50,
254  0.,
255  50.);
256  meNhitsPerLGAD_[1] =
257  ibook.book1D("EtlNhitsPerLGADZnegD2", "Number of ETL DIGI hits (-Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
258  meNhitsPerLGAD_[2] = ibook.book1D("EtlNhitsPerLGADZposD1",
259  "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
260  50,
261  0.,
262  50.);
263  meNhitsPerLGAD_[3] =
264  ibook.book1D("EtlNhitsPerLGADZposD2", "Number of ETL DIGI hits (+Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
265 
266  meHitCharge_[0] = ibook.book1D("EtlHitChargeZnegD1",
267  "ETL DIGI hits charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
268  100,
269  0.,
270  256.);
271  meHitCharge_[1] =
272  ibook.book1D("EtlHitChargeZnegD2", "ETL DIGI hits charge (-Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
273  meHitCharge_[2] = ibook.book1D("EtlHitChargeZposD1",
274  "ETL DIGI hits charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
275  100,
276  0.,
277  256.);
278  meHitCharge_[3] =
279  ibook.book1D("EtlHitChargeZposD2", "ETL DIGI hits charge (+Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
280  meHitTime_[0] = ibook.book1D("EtlHitTimeZnegD1",
281  "ETL DIGI hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
282  100,
283  0.,
284  2000.);
285  meHitTime_[1] =
286  ibook.book1D("EtlHitTimeZnegD2", "ETL DIGI hits ToA (-Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
287  meHitTime_[2] = ibook.book1D("EtlHitTimeZposD1",
288  "ETL DIGI hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
289  100,
290  0.,
291  2000.);
292  meHitTime_[3] =
293  ibook.book1D("EtlHitTimeZposD2", "ETL DIGI hits ToA (+Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
294 
295  meOccupancy_[0] =
296  ibook.book2D("EtlOccupancyZnegD1",
297  "ETL DIGI hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
298  135,
299  -135.,
300  135.,
301  135,
302  -135.,
303  135.);
304  meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
305  "ETL DIGI hits occupancy (-Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
306  135,
307  -135.,
308  135.,
309  135,
310  -135.,
311  135.);
312  meOccupancy_[2] =
313  ibook.book2D("EtlOccupancyZposD1",
314  "ETL DIGI hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
315  135,
316  -135.,
317  135.,
318  135,
319  -135.,
320  135.);
321  meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
322  "ETL DIGI hits occupancy (+Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
323  135,
324  -135.,
325  135.,
326  135,
327  -135.,
328  135.);
329  if (optionalPlots_) {
330  meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
331  "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
332  100,
333  -2.2,
334  2.2,
335  50,
336  -1.1,
337  1.1);
338  meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
339  "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
340  100,
341  -2.2,
342  2.2,
343  50,
344  -1.1,
345  1.1);
346  meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
347  meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
348  meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
349  meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
350  }
351  meHitX_[0] = ibook.book1D(
352  "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
353  meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
354  meHitX_[2] = ibook.book1D(
355  "EtlHitXZposD1", "ETL DIGI hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
356  meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL DIGI hits X (+Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
357  meHitY_[0] = ibook.book1D(
358  "EtlHitYZnegD1", "ETL DIGI hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
359  meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL DIGI hits Y (-Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
360  meHitY_[2] = ibook.book1D(
361  "EtlHitYZposD1", "ETL DIGI hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
362  meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL DIGI hits Y (+Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
363  meHitZ_[0] = ibook.book1D(
364  "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -302., -298.);
365  meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304., -300.);
366  meHitZ_[2] = ibook.book1D(
367  "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 298., 302.);
368  meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 300., 304.);
369 
370  meHitPhi_[0] = ibook.book1D("EtlHitPhiZnegD1",
371  "ETL DIGI hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
372  100,
373  -3.15,
374  3.15);
375  meHitPhi_[1] =
376  ibook.book1D("EtlHitPhiZnegD2", "ETL DIGI hits #phi (-Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
377  meHitPhi_[2] = ibook.book1D("EtlHitPhiZposD1",
378  "ETL DIGI hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
379  100,
380  -3.15,
381  3.15);
382  meHitPhi_[3] =
383  ibook.book1D("EtlHitPhiZposD2", "ETL DIGI hits #phi (+Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
384  meHitEta_[0] = ibook.book1D(
385  "EtlHitEtaZnegD1", "ETL DIGI hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, -3.2, -1.56);
386  meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL DIGI hits #eta (-Z, Second disk);#eta_{DIGI}", 100, -3.2, -1.56);
387  meHitEta_[2] = ibook.book1D(
388  "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2);
389  meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2);
390  meHitTvsQ_[0] = ibook.bookProfile(
391  "EtlHitTvsQZnegD1",
392  "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
393  50,
394  0.,
395  256.,
396  0.,
397  1024.);
398  meHitTvsQ_[1] =
399  ibook.bookProfile("EtlHitTvsQZnegD2",
400  "ETL DIGI ToA vs charge (-Z, Second Disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
401  50,
402  0.,
403  256.,
404  0.,
405  1024.);
406  meHitTvsQ_[2] = ibook.bookProfile(
407  "EtlHitTvsQZposD1",
408  "ETL DIGI ToA vs charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
409  50,
410  0.,
411  256.,
412  0.,
413  1024.);
414  meHitTvsQ_[3] =
415  ibook.bookProfile("EtlHitTvsQZposD2",
416  "ETL DIGI ToA vs charge (+Z, Second disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
417  50,
418  0.,
419  256.,
420  0.,
421  1024.);
422  meHitQvsPhi_[0] = ibook.bookProfile(
423  "EtlHitQvsPhiZnegD1",
424  "ETL DIGI charge vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
425  50,
426  -3.15,
427  3.15,
428  0.,
429  1024.);
430  meHitQvsPhi_[1] =
431  ibook.bookProfile("EtlHitQvsPhiZnegD2",
432  "ETL DIGI charge vs #phi (-Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
433  50,
434  -3.15,
435  3.15,
436  0.,
437  1024.);
438  meHitQvsPhi_[2] = ibook.bookProfile(
439  "EtlHitQvsPhiZposD1",
440  "ETL DIGI charge vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
441  50,
442  -3.15,
443  3.15,
444  0.,
445  1024.);
446  meHitQvsPhi_[3] =
447  ibook.bookProfile("EtlHitQvsPhiZposD2",
448  "ETL DIGI charge vs #phi (+Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
449  50,
450  -3.15,
451  3.15,
452  0.,
453  1024.);
454  meHitQvsEta_[0] = ibook.bookProfile(
455  "EtlHitQvsEtaZnegD1",
456  "ETL DIGI charge vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
457  50,
458  -3.2,
459  -1.56,
460  0.,
461  1024.);
462  meHitQvsEta_[1] = ibook.bookProfile("EtlHitQvsEtaZnegD2",
463  "ETL DIGI charge vs #eta (-Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
464  50,
465  -3.2,
466  -1.56,
467  0.,
468  1024.);
469  meHitQvsEta_[2] = ibook.bookProfile(
470  "EtlHitQvsEtaZposD1",
471  "ETL DIGI charge vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
472  50,
473  1.56,
474  3.2,
475  0.,
476  1024.);
477  meHitQvsEta_[3] = ibook.bookProfile("EtlHitQvsEtaZposD2",
478  "ETL DIGI charge vs #eta (+Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
479  50,
480  1.56,
481  3.2,
482  0.,
483  1024.);
484  meHitTvsPhi_[0] = ibook.bookProfile(
485  "EtlHitTvsPhiZnegD1",
486  "ETL DIGI ToA vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
487  50,
488  -3.15,
489  3.15,
490  0.,
491  1024.);
492  meHitTvsPhi_[1] =
493  ibook.bookProfile("EtlHitTvsPhiZnegD2",
494  "ETL DIGI ToA vs #phi (-Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
495  50,
496  -3.15,
497  3.15,
498  0.,
499  1024.);
500  meHitTvsPhi_[2] = ibook.bookProfile(
501  "EtlHitTvsPhiZposD1",
502  "ETL DIGI ToA vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
503  50,
504  -3.15,
505  3.15,
506  0.,
507  1024.);
508  meHitTvsPhi_[3] =
509  ibook.bookProfile("EtlHitTvsPhiZposD2",
510  "ETL DIGI ToA vs #phi (+Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
511  50,
512  -3.15,
513  3.15,
514  0.,
515  1024.);
516  meHitTvsEta_[0] = ibook.bookProfile(
517  "EtlHitTvsEtaZnegD1",
518  "ETL DIGI ToA vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
519  50,
520  -3.2,
521  -1.56,
522  0.,
523  1024.);
524  meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
525  "ETL DIGI ToA vs #eta (-Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
526  50,
527  -3.2,
528  -1.56,
529  0.,
530  1024.);
531  meHitTvsEta_[2] = ibook.bookProfile(
532  "EtlHitTvsEtaZposD1",
533  "ETL DIGI ToA vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
534  50,
535  1.56,
536  3.2,
537  0.,
538  1024.);
539  meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
540  "ETL DIGI ToA vs #eta (+Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
541  50,
542  1.56,
543  3.2,
544  0.,
545  1024.);
546 }
547 
548 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
551 
552  desc.add<std::string>("folder", "MTD/ETL/DigiHits");
553  desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "FTLEndcap"));
554  desc.add<bool>("optionalPlots", false);
555 
556  descriptions.add("etlDigiHitsDefaultValid", desc);
557 }
558 
uint8_t geoId(const VFATFrame &frame)
retrieve the GEO information for this channel
MonitorElement * meHitQvsPhi_[4]
int getMTDTopologyMode() const
Definition: MTDTopology.h:27
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
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_
ETLDetId geographicalId() const
Definition: ETLDetId.h:110
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:399
MonitorElement * meHitCharge_[4]
MonitorElement * meHitY_[4]
MonitorElement * meHitTime_[4]
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MonitorElement * meHitYlocal_[2]
ETLDetId::EtlLayout etlLayoutFromTopoMode(const int &topoMode)
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
int discSide() const
Definition: ETLDetId.h:119
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:212
edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
int zside() const
Definition: MTDDetId.h:61
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meHitPhi_[4]
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:15
HLT enums.
int nDisc() const
Definition: ETLDetId.h:124
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]
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