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