CMS 3D CMS Logo

EtlSimHitsValidation.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Validation/MtdValidation
4 // Class: EtlSimHitsValidation
5 //
14 #include <string>
15 
20 
23 
27 
31 
34 
39 
40 #include "MTDHit.h"
41 
43 public:
44  explicit EtlSimHitsValidation(const edm::ParameterSet&);
45  ~EtlSimHitsValidation() override;
46 
47  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
48 
49 private:
50  void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
51 
52  void analyze(const edm::Event&, const edm::EventSetup&) override;
53 
54  // ------------ member data ------------
55 
57  const float hitMinEnergy2Dis_;
58 
60 
63 
64  // --- histograms declaration
65 
68 
71 
75 
77 
83 
89 };
90 
91 // ------------ constructor and destructor --------------
93  : folder_(iConfig.getParameter<std::string>("folder")),
94  hitMinEnergy2Dis_(iConfig.getParameter<double>("hitMinimumEnergy2Dis")) {
95  etlSimHitsToken_ = consumes<CrossingFrame<PSimHit>>(iConfig.getParameter<edm::InputTag>("inputTag"));
96  mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
97  mtdtopoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
98 }
99 
101 
102 // ------------ method called for each event ------------
104  using namespace edm;
105  using namespace geant_units::operators;
106 
107  using namespace mtd;
108  using namespace std;
109 
110  auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
111  const MTDGeometry* geom = geometryHandle.product();
112 
113  MTDGeomUtil geomUtil;
114  geomUtil.setGeometry(geom);
115 
116  auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_));
117  MixCollection<PSimHit> etlSimHits(etlSimHitsHandle.product());
118 
119  std::unordered_map<mtd_digitizer::MTDCellId, MTDHit> m_etlHits[4];
120  std::unordered_map<mtd_digitizer::MTDCellId, std::set<int>> m_etlTrkPerCell[4];
121 
122  // --- Loop over the ETL SIM hits
123 
124  int idet = 999;
125 
126  size_t index(0);
127 
128  for (auto const& simHit : etlSimHits) {
129  index++;
130  LogDebug("EtlSimHitsValidation") << "SimHit # " << index << " detId " << simHit.detUnitId() << " ene "
131  << simHit.energyLoss() << " tof " << simHit.tof() << " tId " << simHit.trackId();
132 
133  // --- Use only hits compatible with the in-time bunch-crossing
134  if (simHit.tof() < 0 || simHit.tof() > 25.)
135  continue;
136 
137  ETLDetId id = simHit.detUnitId();
138  if ((id.zside() == -1) && (id.nDisc() == 1)) {
139  idet = 0;
140  } else if ((id.zside() == -1) && (id.nDisc() == 2)) {
141  idet = 1;
142  } else if ((id.zside() == 1) && (id.nDisc() == 1)) {
143  idet = 2;
144  } else if ((id.zside() == 1) && (id.nDisc() == 2)) {
145  idet = 3;
146  } else {
147  edm::LogWarning("EtlSimHitsValidation") << "Unknown ETL DetId configuration: " << id;
148  continue;
149  }
150 
151  const auto& position = simHit.localPosition();
152 
154  std::pair<uint8_t, uint8_t> pixel = geomUtil.pixelInModule(id, simscaled);
155 
156  mtd_digitizer::MTDCellId pixelId(id.rawId(), pixel.first, pixel.second);
157  m_etlTrkPerCell[idet][pixelId].insert(simHit.trackId());
158  auto simHitIt = m_etlHits[idet].emplace(pixelId, MTDHit()).first;
159 
160  // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell
161  (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss());
162 
163  // --- Get the time of the first SIM hit in the cell
164  if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) {
165  (simHitIt->second).time = simHit.tof();
166 
167  auto hit_pos = simHit.localPosition();
168  (simHitIt->second).x = hit_pos.x();
169  (simHitIt->second).y = hit_pos.y();
170  (simHitIt->second).z = hit_pos.z();
171  }
172  LogDebug("EtlSimHitsValidation") << "Registered in idet " << idet;
173 
174  } // simHit loop
175 
176  // ==============================================================================
177  // Histogram filling
178  // ==============================================================================
179 
180  for (int idet = 0; idet < 4; ++idet) { //two disks per side
181  meNhits_[idet]->Fill(m_etlHits[idet].size());
182  LogDebug("EtlSimHitsValidation") << "idet " << idet << " #hits " << m_etlHits[idet].size();
183 
184  for (auto const& hit : m_etlTrkPerCell[idet]) {
185  meNtrkPerCell_[idet]->Fill((hit.second).size());
186  }
187 
188  for (auto const& hit : m_etlHits[idet]) {
189  double weight = 1.0;
190  if ((hit.second).energy < hitMinEnergy2Dis_)
191  continue;
192  // --- Get the SIM hit global position
193  ETLDetId detId;
194  detId = hit.first.detid_;
195  DetId geoId = detId.geographicalId();
196  const MTDGeomDet* thedet = geom->idToDet(geoId);
197  if (thedet == nullptr)
198  throw cms::Exception("EtlSimHitsValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
199  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
200 
201  Local3DPoint local_point(
202  convertMmToCm((hit.second).x), convertMmToCm((hit.second).y), convertMmToCm((hit.second).z));
203  const auto& global_point = thedet->toGlobal(local_point);
204 
205  if (detId.discSide() == 1) {
206  weight = -weight;
207  }
208 
209  // --- Fill the histograms
210 
211  meHitEnergy_[idet]->Fill((hit.second).energy);
212  meHitTime_[idet]->Fill((hit.second).time);
213  meHitXlocal_[idet]->Fill((hit.second).x);
214  meHitYlocal_[idet]->Fill((hit.second).y);
215  meHitZlocal_[idet]->Fill((hit.second).z);
216  meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
217  meHitX_[idet]->Fill(global_point.x());
218  meHitY_[idet]->Fill(global_point.y());
219  meHitZ_[idet]->Fill(global_point.z());
220  meHitPhi_[idet]->Fill(global_point.phi());
221  meHitEta_[idet]->Fill(global_point.eta());
222  meHitTvsE_[idet]->Fill((hit.second).energy, (hit.second).time);
223  meHitEvsPhi_[idet]->Fill(global_point.phi(), (hit.second).energy);
224  meHitEvsEta_[idet]->Fill(global_point.eta(), (hit.second).energy);
225  meHitTvsPhi_[idet]->Fill(global_point.phi(), (hit.second).time);
226  meHitTvsEta_[idet]->Fill(global_point.eta(), (hit.second).time);
227 
228  } // hit loop
229 
230  } // idet loop
231 }
232 
233 // ------------ method for histogram booking ------------
235  edm::Run const& run,
236  edm::EventSetup const& iSetup) {
237  ibook.setCurrentFolder(folder_);
238 
239  // --- histograms booking
240 
241  meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
242  "Number of ETL cells with SIM hits (-Z, Single(topo1D)/First(topo2D) disk);N_{ETL cells}",
243  100,
244  0.,
245  5000.);
246  meNhits_[1] = ibook.book1D(
247  "EtlNhitsZnegD2", "Number of ETL cells with SIM hits (-Z, Second disk);N_{ETL cells}", 100, 0., 5000.);
248  meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
249  "Number of ETL cells with SIM hits (+Z, Single(topo1D)/First(topo2D) disk);N_{ETL cells}",
250  100,
251  0.,
252  5000.);
253  meNhits_[3] = ibook.book1D(
254  "EtlNhitsZposD2", "Number of ETL cells with SIM hits (+Z, Second Disk);N_{ETL cells}", 100, 0., 5000.);
255  meNtrkPerCell_[0] = ibook.book1D("EtlNtrkPerCellZnegD1",
256  "Number of tracks per ETL sensor (-Z, Single(topo1D)/First(topo2D) disk);N_{trk}",
257  10,
258  0.,
259  10.);
260  meNtrkPerCell_[1] =
261  ibook.book1D("EtlNtrkPerCellZnegD2", "Number of tracks per ETL sensor (-Z, Second disk);N_{trk}", 10, 0., 10.);
262  meNtrkPerCell_[2] = ibook.book1D("EtlNtrkPerCellZposD1",
263  "Number of tracks per ETL sensor (+Z, Single(topo1D)/First(topo2D) disk);N_{trk}",
264  10,
265  0.,
266  10.);
267  meNtrkPerCell_[3] =
268  ibook.book1D("EtlNtrkPerCellZposD2", "Number of tracks per ETL sensor (+Z, Second disk);N_{trk}", 10, 0., 10.);
269  meHitEnergy_[0] = ibook.book1D(
270  "EtlHitEnergyZnegD1", "ETL SIM hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV]", 100, 0., 1.5);
271  meHitEnergy_[1] =
272  ibook.book1D("EtlHitEnergyZnegD2", "ETL SIM hits energy (-Z, Second disk);E_{SIM} [MeV]", 100, 0., 1.5);
273  meHitEnergy_[2] = ibook.book1D(
274  "EtlHitEnergyZposD1", "ETL SIM hits energy (+Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV]", 100, 0., 1.5);
275  meHitEnergy_[3] =
276  ibook.book1D("EtlHitEnergyZposD2", "ETL SIM hits energy (+Z, Second disk);E_{SIM} [MeV]", 100, 0., 1.5);
277  meHitTime_[0] = ibook.book1D(
278  "EtlHitTimeZnegD1", "ETL SIM hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{SIM} [ns]", 100, 0., 25.);
279  meHitTime_[1] = ibook.book1D("EtlHitTimeZnegD2", "ETL SIM hits ToA (-Z, Second disk);ToA_{SIM} [ns]", 100, 0., 25.);
280  meHitTime_[2] = ibook.book1D(
281  "EtlHitTimeZposD1", "ETL SIM hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{SIM} [ns]", 100, 0., 25.);
282  meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL SIM hits ToA (+Z, Second disk);ToA_{SIM} [ns]", 100, 0., 25.);
283 
284  meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZnegD1",
285  "ETL SIM local X (-Z, Single(topo1D)/First(topo2D) disk);X_{SIM}^{LOC} [mm]",
286  100,
287  -25.,
288  25.);
289  meHitXlocal_[1] =
290  ibook.book1D("EtlHitXlocalZnegD2", "ETL SIM local X (-Z, Second disk);X_{SIM}^{LOC} [mm]", 100, -25., 25.);
291  meHitXlocal_[2] = ibook.book1D("EtlHitXlocalZposD1",
292  "ETL SIM local X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM}^{LOC} [mm]",
293  100,
294  -25.,
295  25.);
296  meHitXlocal_[3] =
297  ibook.book1D("EtlHitXlocalZposD2", "ETL SIM local X (+Z, Second disk);X_{SIM}^{LOC} [mm]", 100, -25., 25.);
298 
299  meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZnegD1",
300  "ETL SIM local Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{SIM}^{LOC} [mm]",
301  100,
302  -48.,
303  48.);
304  meHitYlocal_[1] =
305  ibook.book1D("EtlHitYlocalZnegD2", "ETL SIM local Y (-Z, Second Disk);Y_{SIM}^{LOC} [mm]", 100, -48., 48.);
306  meHitYlocal_[2] = ibook.book1D("EtlHitYlocalZposD1",
307  "ETL SIM local Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{SIM}^{LOC} [mm]",
308  100,
309  -48.,
310  48.);
311  meHitYlocal_[3] =
312  ibook.book1D("EtlHitYlocalZposD2", "ETL SIM local Y (+Z, Second disk);Y_{SIM}^{LOC} [mm]", 100, -48., 48.);
313  meHitZlocal_[0] = ibook.book1D("EtlHitZlocalZnegD1",
314  "ETL SIM local Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM}^{LOC} [mm]",
315  80,
316  -0.16,
317  0.16);
318  meHitZlocal_[1] =
319  ibook.book1D("EtlHitZlocalZnegD2", "ETL SIM local Z (-Z, Second disk);Z_{SIM}^{LOC} [mm]", 80, -0.16, 0.16);
320  meHitZlocal_[2] = ibook.book1D("EtlHitZlocalZposD1",
321  "ETL SIM local Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM}^{LOC} [mm]",
322  80,
323  -0.16,
324  0.16);
325  meHitZlocal_[3] =
326  ibook.book1D("EtlHitZlocalZposD2", "ETL SIM local Z (+Z, Second disk);Z_{SIM}^{LOC} [mm]", 80, -0.16, 0.16);
327 
328  meOccupancy_[0] =
329  ibook.book2D("EtlOccupancyZnegD1",
330  "ETL SIM hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm];Y_{SIM} [cm]",
331  135,
332  -135.,
333  135.,
334  135,
335  -135.,
336  135.);
337  meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
338  "ETL SIM hits occupancy (-Z, Second disk);X_{SIM} [cm];Y_{SIM} [cm]",
339  135,
340  -135.,
341  135.,
342  135,
343  -135.,
344  135.);
345  meOccupancy_[2] =
346  ibook.book2D("EtlOccupancyZposD1",
347  "ETL SIM hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm];Y_{SIM} [cm]",
348  135,
349  -135.,
350  135.,
351  135,
352  -135.,
353  135.);
354  meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
355  "ETL SIM hits occupancy (+Z, Second disk);X_{SIM} [cm];Y_{SIM} [cm]",
356  135,
357  -135.,
358  135.,
359  135,
360  -135.,
361  135.);
362 
363  meHitX_[0] = ibook.book1D(
364  "EtlHitXZnegD1", "ETL SIM hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm]", 100, -130., 130.);
365  meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL SIM hits X (-Z, Second disk);X_{SIM} [cm]", 100, -130., 130.);
366  meHitX_[2] = ibook.book1D(
367  "EtlHitXZposD1", "ETL SIM hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm]", 100, -130., 130.);
368  meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL SIM hits X (+Z, Second disk);X_{SIM} [cm]", 100, -130., 130.);
369  meHitY_[0] = ibook.book1D(
370  "EtlHitYZnegD1", "ETL SIM hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{SIM} [cm]", 100, -130., 130.);
371  meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL SIM hits Y (-Z, Second disk);Y_{SIM} [cm]", 100, -130., 130.);
372  meHitY_[2] = ibook.book1D(
373  "EtlHitYZposD1", "ETL SIM hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{SIM} [cm]", 100, -130., 130.);
374  meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL SIM hits Y (+Z, Second disk);Y_{SIM} [cm]", 100, -130., 130.);
375  meHitZ_[0] = ibook.book1D(
376  "EtlHitZZnegD1", "ETL SIM hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, -302., -298.);
377  meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL SIM hits Z (-Z, Second disk);Z_{SIM} [cm]", 100, -304., -300.);
378  meHitZ_[2] = ibook.book1D(
379  "EtlHitZZposD1", "ETL SIM hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, 298., 302.);
380  meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL SIM hits Z (+Z, Second disk);Z_{SIM} [cm]", 100, 300., 304.);
381 
382  meHitPhi_[0] = ibook.book1D(
383  "EtlHitPhiZnegD1", "ETL SIM hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
384  meHitPhi_[1] =
385  ibook.book1D("EtlHitPhiZnegD2", "ETL SIM hits #phi (-Z, Second disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
386  meHitPhi_[2] = ibook.book1D(
387  "EtlHitPhiZposD1", "ETL SIM hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
388  meHitPhi_[3] =
389  ibook.book1D("EtlHitPhiZposD2", "ETL SIM hits #phi (+Z, Second disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
390  meHitEta_[0] = ibook.book1D(
391  "EtlHitEtaZnegD1", "ETL SIM hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM}", 100, -3.2, -1.56);
392  meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL SIM hits #eta (-Z, Second disk);#eta_{SIM}", 100, -3.2, -1.56);
393  meHitEta_[2] = ibook.book1D(
394  "EtlHitEtaZposD1", "ETL SIM hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM}", 100, 1.56, 3.2);
395  meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL SIM hits #eta (+Z, Second disk);#eta_{SIM}", 100, 1.56, 3.2);
396 
397  meHitTvsE_[0] =
398  ibook.bookProfile("EtlHitTvsEZnegD1",
399  "ETL SIM time vs energy (-Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV];T_{SIM} [ns]",
400  50,
401  0.,
402  2.,
403  0.,
404  100.);
405  meHitTvsE_[1] = ibook.bookProfile(
406  "EtlHitTvsEZnegD2", "ETL SIM time vs energy (-Z, Second disk);E_{SIM} [MeV];T_{SIM} [ns]", 50, 0., 2., 0., 100.);
407  meHitTvsE_[2] =
408  ibook.bookProfile("EtlHitTvsEZposD1",
409  "ETL SIM time vs energy (+Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV];T_{SIM} [ns]",
410  50,
411  0.,
412  2.,
413  0.,
414  100.);
415  meHitTvsE_[3] = ibook.bookProfile(
416  "EtlHitTvsEZposD2", "ETL SIM time vs energy (+Z, Second disk);E_{SIM} [MeV];T_{SIM} [ns]", 50, 0., 2., 0., 100.);
417  meHitEvsPhi_[0] =
418  ibook.bookProfile("EtlHitEvsPhiZnegD1",
419  "ETL SIM energy vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
420  50,
421  -3.15,
422  3.15,
423  0.,
424  100.);
425  meHitEvsPhi_[1] = ibook.bookProfile("EtlHitEvsPhiZnegD2",
426  "ETL SIM energy vs #phi (-Z, Second disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
427  50,
428  -3.15,
429  3.15,
430  0.,
431  100.);
432  meHitEvsPhi_[2] =
433  ibook.bookProfile("EtlHitEvsPhiZposD1",
434  "ETL SIM energy vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
435  50,
436  -3.15,
437  3.15,
438  0.,
439  100.);
440  meHitEvsPhi_[3] = ibook.bookProfile("EtlHitEvsPhiZposD2",
441  "ETL SIM energy vs #phi (+Z, Second disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
442  50,
443  -3.15,
444  3.15,
445  0.,
446  100.);
447  meHitEvsEta_[0] =
448  ibook.bookProfile("EtlHitEvsEtaZnegD1",
449  "ETL SIM energy vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};E_{SIM} [MeV]",
450  50,
451  -3.2,
452  -1.56,
453  0.,
454  100.);
455  meHitEvsEta_[1] = ibook.bookProfile("EtlHitEvsEtaZnegD2",
456  "ETL SIM energy vs #eta (-Z, Second disk);#eta_{SIM};E_{SIM} [MeV]",
457  50,
458  -3.2,
459  -1.56,
460  0.,
461  100.);
462  meHitEvsEta_[2] =
463  ibook.bookProfile("EtlHitEvsEtaZposD1",
464  "ETL SIM energy vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};E_{SIM} [MeV]",
465  50,
466  1.56,
467  3.2,
468  0.,
469  100.);
470  meHitEvsEta_[3] = ibook.bookProfile("EtlHitEvsEtaZposD2",
471  "ETL SIM energy vs #eta (+Z, Second disk);#eta_{SIM};E_{SIM} [MeV]",
472  50,
473  1.56,
474  3.2,
475  0.,
476  100.);
477  meHitTvsPhi_[0] =
478  ibook.bookProfile("EtlHitTvsPhiZnegD1",
479  "ETL SIM time vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];T_{SIM} [ns]",
480  50,
481  -3.15,
482  3.15,
483  0.,
484  100.);
485  meHitTvsPhi_[1] = ibook.bookProfile("EtlHitTvsPhiZnegD2",
486  "ETL SIM time vs #phi (-Z, Second disk);#phi_{SIM} [rad];T_{SIM} [ns]",
487  50,
488  -3.15,
489  3.15,
490  0.,
491  100.);
492  meHitTvsPhi_[2] =
493  ibook.bookProfile("EtlHitTvsPhiZposD1",
494  "ETL SIM time vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];T_{SIM} [ns]",
495  50,
496  -3.15,
497  3.15,
498  0.,
499  100.);
500  meHitTvsPhi_[3] = ibook.bookProfile("EtlHitTvsPhiZposD2",
501  "ETL SIM time vs #phi (+Z, Second disk);#phi_{SIM} [rad];T_{SIM} [ns]",
502  50,
503  -3.15,
504  3.15,
505  0.,
506  100.);
507  meHitTvsEta_[0] =
508  ibook.bookProfile("EtlHitTvsEtaZnegD1",
509  "ETL SIM time vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};T_{SIM} [ns]",
510  50,
511  -3.2,
512  -1.56,
513  0.,
514  100.);
515  meHitTvsEta_[1] = ibook.bookProfile(
516  "EtlHitTvsEtaZnegD2", "ETL SIM time vs #eta (-Z, Second disk);#eta_{SIM};T_{SIM} [ns]", 50, -3.2, -1.56, 0., 100.);
517  meHitTvsEta_[2] =
518  ibook.bookProfile("EtlHitTvsEtaZposD1",
519  "ETL SIM time vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};T_{SIM} [ns]",
520  50,
521  1.56,
522  3.2,
523  0.,
524  100.);
525  meHitTvsEta_[3] = ibook.bookProfile(
526  "EtlHitTvsEtaZposD2", "ETL SIM time vs #eta (+Z, Second disk);#eta_{SIM};T_{SIM} [ns]", 50, 1.56, 3.2, 0., 100.);
527 }
528 
529 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
532 
533  desc.add<std::string>("folder", "MTD/ETL/SimHits");
534  desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap"));
535  desc.add<double>("hitMinimumEnergy2Dis", 0.001); // [MeV]
536 
537  descriptions.add("etlSimHitsValid", desc);
538 }
539 
size
Write out results.
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
MonitorElement * meNhits_[4]
std::string folder_
MonitorElement * meHitYlocal_[4]
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::pair< float, float > pixelInModule(const DetId &id, const int row, const int column) const
Definition: MTDGeomUtil.cc:111
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
Definition: MTDHit.h:4
Definition: weight.py:1
MonitorElement * meOccupancy_[4]
int zside(DetId const &)
MonitorElement * meHitY_[4]
MonitorElement * meHitTvsEta_[4]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
constexpr NumType convertUnitsTo(double desiredUnits, NumType val)
Definition: GeantUnits.h:73
void Fill(long long x)
MonitorElement * meHitXlocal_[4]
int iEvent
Definition: GenABIO.cc:224
EtlSimHitsValidation(const edm::ParameterSet &)
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 * meHitTvsPhi_[4]
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
MonitorElement * meHitX_[4]
MonitorElement * meHitEvsEta_[4]
MonitorElement * meHitEta_[4]
void setGeometry(MTDGeometry const *geom)
Definition: MTDGeomUtil.cc:10
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
MonitorElement * meHitTime_[4]
Definition: DetId.h:17
MonitorElement * meHitPhi_[4]
MonitorElement * meHitTvsE_[4]
constexpr NumType convertMmToCm(NumType millimeters)
Definition: angle_units.h:44
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
void analyze(const edm::Event &, const edm::EventSetup &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:16
HLT enums.
static int position[264][3]
Definition: ReadPGInfo.cc:289
MonitorElement * meHitZlocal_[4]
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
Log< level::Warning, false > LogWarning
MonitorElement * meNtrkPerCell_[4]
MonitorElement * meHitEnergy_[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
const std::string folder_
MonitorElement * meHitEvsPhi_[4]
Definition: Run.h:45
edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
#define LogDebug(id)
MonitorElement * meHitZ_[4]