CMS 3D CMS Logo

Phase2TrackerValidateDigi.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Phase2TrackerValidateDigi
4 // Class: Phase2TrackerValidateDigi
5 //
11 //
12 // Author: Suchandra Dutta, Gourab Saha, Suvankar Roy Chowdhury, Subir Sarkar
13 // Date: January 29, 2016
14 //
15 // system include files
16 #include <memory>
18 
21 
24 
31 
38 
41 
42 // DQM Histograming
45 
47 
48 //
49 // constructors
50 //
52  : config_(iConfig),
53  pixelFlag_(config_.getParameter<bool>("PixelPlotFillingFlag")),
54  geomType_(config_.getParameter<std::string>("GeometryType")),
55  otDigiSrc_(config_.getParameter<edm::InputTag>("OuterTrackerDigiSource")),
56  otDigiSimLinkSrc_(config_.getParameter<edm::InputTag>("OuterTrackerDigiSimLinkSource")),
57  itPixelDigiSrc_(config_.getParameter<edm::InputTag>("InnerPixelDigiSource")),
58  itPixelDigiSimLinkSrc_(config_.getParameter<edm::InputTag>("InnerPixelDigiSimLinkSource")),
59  pSimHitSrc_(config_.getParameter<std::vector<edm::InputTag>>("PSimHitSource")),
60  simTrackSrc_(config_.getParameter<edm::InputTag>("SimTrackSource")),
61  simVertexSrc_(config_.getParameter<edm::InputTag>("SimVertexSource")),
62  otDigiToken_(consumes<edm::DetSetVector<Phase2TrackerDigi>>(otDigiSrc_)),
63  otDigiSimLinkToken_(consumes<edm::DetSetVector<PixelDigiSimLink>>(otDigiSimLinkSrc_)),
64  itPixelDigiToken_(consumes<edm::DetSetVector<PixelDigi>>(itPixelDigiSrc_)),
65  itPixelDigiSimLinkToken_(consumes<edm::DetSetVector<PixelDigiSimLink>>(itPixelDigiSimLinkSrc_)),
66  simTrackToken_(consumes<edm::SimTrackContainer>(simTrackSrc_)),
67  simVertexToken_(consumes<edm::SimVertexContainer>(simVertexSrc_)),
69  topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()),
70  GeVperElectron(3.61E-09), // 1 electron(3.61eV, 1keV(277e, mod 9/06 d.k.
71  cval(30.) {
72  for (const auto& itag : pSimHitSrc_)
73  simHitTokens_.push_back(consumes<edm::PSimHitContainer>(itag));
74 
75  etaCut_ = config_.getParameter<double>("EtaCutOff");
76  ptCut_ = config_.getParameter<double>("PtCutOff");
77  tofUpperCut_ = config_.getParameter<double>("TOFUpperCutOff");
78  tofLowerCut_ = config_.getParameter<double>("TOFLowerCutOff");
79 
80  edm::LogInfo("Phase2TrackerValidateDigi") << ">>> Construct Phase2TrackerValidateDigi ";
81 }
82 
83 //
84 // destructor
85 //
87  // do anything here that needs to be done at desctruction time
88  // (e.g. close files, deallocate resources etc.)
89  edm::LogInfo("Phase2TrackerValidateDigi") << ">>> Destroy Phase2TrackerValidateDigi ";
90 }
91 //
92 // -- DQM Begin Run
94  edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
96  if (theTkDigiGeomWatcher.check(iSetup)) {
97  geomHandle = iSetup.getHandle(geomToken_);
98  }
99  if (!geomHandle.isValid())
100  return;
101  tkGeom_ = &(*geomHandle);
102 
103  tTopo_ = &iSetup.getData(topoToken_);
104 }
105 //
106 // -- Analyze
107 //
109  //Digis
111  otdigis_ = &iEvent.get(otDigiToken_);
112  // DigiSimLink
115 
116  // SimTrack
117  simTracks = iEvent.getHandle(simTrackToken_);
118  // SimVertex
119  simVertices = iEvent.getHandle(simVertexToken_);
120 
121  // Fil # of SIM Vertices@
122  nSimVertices->Fill((*simVertices).size());
123  // Loop over Sim Tracks and Fill relevant histograms
124  int nTracks = 0;
125  int nTracksP = 0;
126  int nTracksS = 0;
127  for (edm::SimTrackContainer::const_iterator simTrkItr = simTracks->begin(); simTrkItr != simTracks->end();
128  ++simTrkItr) {
129  if (simTrkItr->charge() == 0)
130  continue;
131  int vtxIndex = simTrkItr->vertIndex();
132  int vtxParent = -1;
133  if (vtxIndex > 0) {
134  SimVertex vtx = (*simVertices)[vtxIndex];
135  if (!vtx.noParent()) {
136  int trkId = vtx.parentIndex();
137  vtxParent = (*simTracks)[matchedSimTrack(simTracks, trkId)].vertIndex();
138  }
139  }
140  int simTk_type = -1;
141  if (vtxIndex == 0 || vtxParent == 0)
142  simTk_type = 1;
143  else
144  simTk_type = 0;
145  nTracks++;
146  if (simTk_type == 1)
147  nTracksP++;
148  else
149  nTracksS++;
150 
151  float simTk_pt = simTrkItr->momentum().pt();
152  float simTk_eta = simTrkItr->momentum().eta();
153  float simTk_phi = simTrkItr->momentum().phi();
154 
155  if (fabs(simTk_eta) < etaCut_)
157  if (simTk_pt > ptCut_)
159  if (fabs(simTk_eta) < etaCut_ && simTk_pt > ptCut_)
161 
162  // initialize
163  for (auto& it : layerMEs) {
164  it.second.nDigis = 0;
165  it.second.nHits = 0;
166  }
167  fillSimHitInfo(iEvent, (*simTrkItr));
168 
169  int nHitCutoff = 2;
170  if (pixelFlag_)
171  nHitCutoff = 1;
172  for (auto& it : layerMEs) {
173  DigiMEs& local_mes = it.second;
174  if (it.second.nHits < nHitCutoff) {
175  if (std::fabs(simTk_eta) < 1.0)
176  local_mes.MissedHitTrackPt->Fill(simTk_pt);
177  if (simTk_pt > ptCut_ && std::fabs(simTk_eta) < 1.0)
178  local_mes.MissedHitTrackEta->Fill(simTk_eta);
179  if (std::fabs(simTk_eta) < 1.0 && simTk_pt > ptCut_)
180  local_mes.MissedHitTrackPhi->Fill(simTk_phi);
181  }
182  }
183  }
185  nSimulatedTracksP->Fill(nTracksP);
186  nSimulatedTracksS->Fill(nTracksS);
187  if (pixelFlag_)
189  else
190  fillOTBXInfo();
191 }
192 
194  int totalHits = 0;
195  unsigned int id = simTrk.trackId();
196  // Get digis
197 
198  for (const auto& itoken : simHitTokens_) {
199  const auto& simHitHandle = iEvent.getHandle(itoken);
200  if (!simHitHandle.isValid())
201  continue;
202  const edm::PSimHitContainer& simHits = (*simHitHandle.product());
203  for (edm::PSimHitContainer::const_iterator isim = simHits.begin(); isim != simHits.end(); ++isim) {
204  if ((*isim).trackId() != id)
205  continue;
206  const PSimHit& simHit = (*isim);
207 
208  if (!isPrimary(simTrk, simHit))
209  continue;
210 
211  unsigned int rawid = (*isim).detUnitId();
212  int layer;
213  if (pixelFlag_)
215  else
216  layer = tTopo_->getOTLayerNumber(rawid);
217  if (layer < 0)
218  continue;
220  auto pos = layerMEs.find(key);
221  if (pos == layerMEs.end())
222  continue;
223  DigiMEs& local_mes = pos->second;
224 
225  const DetId detId(rawid);
226  float dZ = (*isim).entryPoint().z() - (*isim).exitPoint().z();
227  if (fabs(dZ) <= 0.01)
228  continue;
229 
230  if (DetId(detId).det() != DetId::Detector::Tracker)
231  continue;
232 
233  const GeomDet* geomDet = tkGeom_->idToDet(detId);
234  if (!geomDet)
235  continue;
236  Global3DPoint pdPos = geomDet->surface().toGlobal(isim->localPosition());
237 
238  if (((*isim).tof() - pdPos.mag() / cval) < tofLowerCut_ || ((*isim).tof() - pdPos.mag() / cval) > tofUpperCut_)
239  continue;
240 
242  SimulatedXYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
244  SimulatedRZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
245 
246  const TrackerGeomDet* geomDetUnit(tkGeom_->idToDetUnit(detId));
247  const Phase2TrackerGeomDetUnit* tkDetUnit = dynamic_cast<const Phase2TrackerGeomDetUnit*>(geomDetUnit);
248  int nColumns = tkDetUnit->specificTopology().ncolumns();
249 
250  float pt = simTrk.momentum().pt();
251  float eta = simTrk.momentum().eta();
252  float phi = simTrk.momentum().phi();
253  totalHits++;
254  pos->second.nHits++;
255 
256  if (local_mes.SimHitDx)
257  local_mes.SimHitDx->Fill(std::fabs((*isim).entryPoint().x() - (*isim).exitPoint().x()));
258  if (local_mes.SimHitDy)
259  local_mes.SimHitDy->Fill(std::fabs((*isim).entryPoint().y() - (*isim).exitPoint().y()));
260  if (local_mes.SimHitDz)
261  local_mes.SimHitDz->Fill(std::fabs((*isim).entryPoint().z() - (*isim).exitPoint().z()));
262 
263  if (SimulatedTOFEtaMap)
264  SimulatedTOFEtaMap->Fill(pdPos.eta(), (*isim).timeOfFlight());
265  if (SimulatedTOFPhiMap)
266  SimulatedTOFPhiMap->Fill(pdPos.phi(), (*isim).timeOfFlight());
267  if (SimulatedTOFRMap)
268  SimulatedTOFRMap->Fill(std::hypot(pdPos.x(), pdPos.y()), (*isim).timeOfFlight());
269  if (SimulatedTOFZMap)
270  SimulatedTOFZMap->Fill(pdPos.z(), (*isim).timeOfFlight());
271 
272  bool digiFlag;
273 
274  if (pixelFlag_)
275  digiFlag = findITPixelDigi(rawid, id);
276  else
277  digiFlag = findOTDigi(rawid, id);
278 
279  if (fabs(eta) < etaCut_) {
280  if (local_mes.SimTrackPt)
281  local_mes.SimTrackPt->Fill(pt);
282  if (digiFlag && local_mes.MatchedTrackPt)
283  local_mes.MatchedTrackPt->Fill(pt);
284  else if (local_mes.MissedDigiTrackPt)
285  local_mes.MissedDigiTrackPt->Fill(pt);
286  }
287  if (pt > ptCut_) {
288  if (local_mes.SimTrackEta)
289  local_mes.SimTrackEta->Fill(eta);
290  if (digiFlag && local_mes.MatchedTrackEta)
291  local_mes.MatchedTrackEta->Fill(eta);
292  else if (local_mes.MissedDigiTrackEta)
293  local_mes.MissedDigiTrackEta->Fill(eta);
294  }
295  if (fabs(eta) < etaCut_ && pt > ptCut_) {
296  if (local_mes.SimTrackPhi)
297  local_mes.SimTrackPhi->Fill(phi);
298  if (digiFlag && local_mes.MatchedTrackPhi)
299  local_mes.MatchedTrackPhi->Fill(phi);
300  else if (local_mes.MissedDigiTrackPhi)
301  local_mes.MissedDigiTrackPhi->Fill(phi);
302  }
303  if (digiFlag) {
304  pos->second.nDigis++;
306  MatchedRZPositionMap->Fill(pdPos.z() * 10., std::hypot(pdPos.x(), pdPos.y()) * 10.);
308  MatchedXYPositionMap->Fill(pdPos.x() * 10., pdPos.y() * 10.);
309  if (nColumns <= 2 && local_mes.MatchedSimHitElossS)
310  local_mes.MatchedSimHitElossS->Fill((*isim).energyLoss() / GeVperElectron);
311  else if (local_mes.MatchedSimHitElossP)
312  local_mes.MatchedSimHitElossP->Fill((*isim).energyLoss() / GeVperElectron);
313  } else {
314  if (local_mes.MissedDigiLocalXposVsYPos)
315  local_mes.MissedDigiLocalXposVsYPos->Fill((*isim).localPosition().x(), (*isim).localPosition().y());
316  if (local_mes.MissedDigiTimeWindow)
317  local_mes.MissedDigiTimeWindow->Fill(std::fabs((*isim).timeOfFlight() - pdPos.mag() / cval));
318  if (nColumns <= 2 && local_mes.MissedDigiSimHitElossS)
319  local_mes.MissedDigiSimHitElossS->Fill((*isim).energyLoss() / GeVperElectron);
320  else if (local_mes.MissedDigiSimHitElossP)
321  local_mes.MissedDigiSimHitElossP->Fill((*isim).energyLoss() / GeVperElectron);
322  }
323  }
324  }
325  return totalHits;
326 }
327 bool Phase2TrackerValidateDigi::findOTDigi(unsigned int detid, unsigned int id) {
328  bool matched = false;
330  if (DSVIter != otdigis_->end()) {
331  for (edm::DetSet<Phase2TrackerDigi>::const_iterator di = DSVIter->begin(); di != DSVIter->end(); di++) {
332  int col = di->column(); // column
333  int row = di->row(); // row
334  unsigned int channel = Phase2TrackerDigi::pixelToChannel(row, col);
335  unsigned int simTkId = getSimTrackId(otSimLink_, detid, channel);
336  if (simTkId == id) {
337  matched = true;
338  break;
339  }
340  }
341  }
342  return matched;
343 }
344 bool Phase2TrackerValidateDigi::findITPixelDigi(unsigned int detid, unsigned int id) {
345  bool matched = false;
347  if (DSVIter != itdigis_->end()) {
348  for (edm::DetSet<PixelDigi>::const_iterator di = DSVIter->begin(); di != DSVIter->end(); di++) {
349  int col = di->column(); // column
350  int row = di->row(); // row
351  unsigned int channel = PixelDigi::pixelToChannel(row, col);
352  unsigned int simTkId = getSimTrackId(itSimLink_, detid, channel);
353  if (simTkId == id) {
354  matched = true;
355  break;
356  }
357  }
358  }
359  return matched;
360 }
361 //
362 // -- Book Histograms
363 //
365  edm::Run const& iRun,
366  edm::EventSetup const& iSetup) {
367  std::string top_folder = config_.getParameter<std::string>("TopFolderName");
368  std::stringstream folder_name;
369 
370  ibooker.cd();
371  folder_name << top_folder << "/"
372  << "SimTrackInfo";
373  ibooker.setCurrentFolder(folder_name.str());
374 
375  edm::LogInfo("Phase2TrackerValidateDigi") << " Booking Histograms in : " << folder_name.str();
376  std::stringstream HistoName;
377 
378  HistoName.str("");
379  HistoName << "NumberOfSimulatedTracks";
380  nSimulatedTracks = ibooker.book1D(HistoName.str(), HistoName.str(), 501, -0.5, 500.5);
381 
382  HistoName.str("");
383  HistoName << "NumberOfSimulatedTracksP";
384  nSimulatedTracksP = ibooker.book1D(HistoName.str(), HistoName.str(), 501, -0.5, 500.5);
385 
386  HistoName.str("");
387  HistoName << "NumberOfSimulatedTracksS";
388  nSimulatedTracksS = ibooker.book1D(HistoName.str(), HistoName.str(), 501, -0.5, 500.5);
389 
390  HistoName.str("");
391  HistoName << "NumberOfSimulatedVertices";
392  nSimVertices = ibooker.book1D(HistoName.str(), HistoName.str(), 101, -0.5, 100.5);
393 
395  HistoName.str("");
396  HistoName << "SimulatedTrackPt";
397  if (Parameters.getParameter<bool>("switch"))
398  SimulatedTrackPt = ibooker.book1D(HistoName.str(),
399  HistoName.str(),
400  Parameters.getParameter<int32_t>("Nbins"),
401  Parameters.getParameter<double>("xmin"),
402  Parameters.getParameter<double>("xmax"));
403  else
404  SimulatedTrackPt = nullptr;
405  /*
406  HistoName.str("");
407  HistoName << "SimulatedTrackPt";
408  SimulatedTrackPt = ibooker.book1D(HistoName.str(),HistoName.str(),
409  Parameters.getParameter<int32_t>("Nbins"),
410  Parameters.getParameter<double>("xmin"),
411  Parameters.getParameter<double>("xmax");*/
412  HistoName.str("");
413  HistoName << "SimulatedTrackPtP";
414  if (Parameters.getParameter<bool>("switch"))
415  SimulatedTrackPtP = ibooker.book1D(HistoName.str(),
416  HistoName.str(),
417  Parameters.getParameter<int32_t>("Nbins"),
418  Parameters.getParameter<double>("xmin"),
419  Parameters.getParameter<double>("xmax"));
420  else
421  SimulatedTrackPtP = nullptr;
422  HistoName.str("");
423  HistoName << "SimulatedTrackPtS";
424  if (Parameters.getParameter<bool>("switch"))
425  SimulatedTrackPtS = ibooker.book1D(HistoName.str(),
426  HistoName.str(),
427  Parameters.getParameter<int32_t>("Nbins"),
428  Parameters.getParameter<double>("xmin"),
429  Parameters.getParameter<double>("xmax"));
430  else
431  SimulatedTrackPtS = nullptr;
432 
434  HistoName.str("");
435  HistoName << "SimulatedTrackEta";
436  if (Parameters.getParameter<bool>("switch"))
437  SimulatedTrackEta = ibooker.book1D(HistoName.str(),
438  HistoName.str(),
439  Parameters.getParameter<int32_t>("Nbins"),
440  Parameters.getParameter<double>("xmin"),
441  Parameters.getParameter<double>("xmax"));
442  else
443  SimulatedTrackEta = nullptr;
444  HistoName.str("");
445  HistoName << "SimulatedTrackEtaP";
446  if (Parameters.getParameter<bool>("switch"))
447  SimulatedTrackEtaP = ibooker.book1D(HistoName.str(),
448  HistoName.str(),
449  Parameters.getParameter<int32_t>("Nbins"),
450  Parameters.getParameter<double>("xmin"),
451  Parameters.getParameter<double>("xmax"));
452  else
453  SimulatedTrackEtaP = nullptr;
454  HistoName.str("");
455  HistoName << "SimulatedTrackEtaS";
456  if (Parameters.getParameter<bool>("switch"))
457  SimulatedTrackEtaS = ibooker.book1D(HistoName.str(),
458  HistoName.str(),
459  Parameters.getParameter<int32_t>("Nbins"),
460  Parameters.getParameter<double>("xmin"),
461  Parameters.getParameter<double>("xmax"));
462  else
463  SimulatedTrackEtaS = nullptr;
464 
466  HistoName.str("");
467  HistoName << "SimulatedTrackPhi";
468  if (Parameters.getParameter<bool>("switch"))
469  SimulatedTrackPhi = ibooker.book1D(HistoName.str(),
470  HistoName.str(),
471  Parameters.getParameter<int32_t>("Nbins"),
472  Parameters.getParameter<double>("xmin"),
473  Parameters.getParameter<double>("xmax"));
474  else
475  SimulatedTrackPhi = nullptr;
476 
477  HistoName.str("");
478  HistoName << "SimulatedTrackPhiP";
479  if (Parameters.getParameter<bool>("switch"))
480  SimulatedTrackPhiP = ibooker.book1D(HistoName.str(),
481  HistoName.str(),
482  Parameters.getParameter<int32_t>("Nbins"),
483  Parameters.getParameter<double>("xmin"),
484  Parameters.getParameter<double>("xmax"));
485  else
486  SimulatedTrackPhiP = nullptr;
487 
488  HistoName.str("");
489  HistoName << "SimulatedTrackPhiS";
490  if (Parameters.getParameter<bool>("switch"))
491  SimulatedTrackPhiS = ibooker.book1D(HistoName.str(),
492  HistoName.str(),
493  Parameters.getParameter<int32_t>("Nbins"),
494  Parameters.getParameter<double>("xmin"),
495  Parameters.getParameter<double>("xmax"));
496  else
497  SimulatedTrackPhiS = nullptr;
498 
499  Parameters = config_.getParameter<edm::ParameterSet>("XYPositionMapH");
500  HistoName.str("");
501  HistoName << "SimulatedXPosVsYPos";
502  if (Parameters.getParameter<bool>("switch"))
503  SimulatedXYPositionMap = ibooker.book2D(HistoName.str(),
504  HistoName.str(),
505  Parameters.getParameter<int32_t>("Nxbins"),
506  Parameters.getParameter<double>("xmin"),
507  Parameters.getParameter<double>("xmax"),
508  Parameters.getParameter<int32_t>("Nybins"),
509  Parameters.getParameter<double>("ymin"),
510  Parameters.getParameter<double>("ymax"));
511  else
512  SimulatedXYPositionMap = nullptr;
513 
514  Parameters = config_.getParameter<edm::ParameterSet>("RZPositionMapH");
515  HistoName.str("");
516  HistoName << "SimulatedRPosVsZPos";
517  if (Parameters.getParameter<bool>("switch"))
518  SimulatedRZPositionMap = ibooker.book2D(HistoName.str(),
519  HistoName.str(),
520  Parameters.getParameter<int32_t>("Nxbins"),
521  Parameters.getParameter<double>("xmin"),
522  Parameters.getParameter<double>("xmax"),
523  Parameters.getParameter<int32_t>("Nybins"),
524  Parameters.getParameter<double>("ymin"),
525  Parameters.getParameter<double>("ymax"));
526  else
527  SimulatedRZPositionMap = nullptr;
528 
529  //add TOF maps
531  HistoName.str("");
532  HistoName << "SimulatedTOFVsEta";
533  if (Parameters.getParameter<bool>("switch"))
534  SimulatedTOFEtaMap = ibooker.book2D(HistoName.str(),
535  HistoName.str(),
536  Parameters.getParameter<int32_t>("Nxbins"),
537  Parameters.getParameter<double>("xmin"),
538  Parameters.getParameter<double>("xmax"),
539  Parameters.getParameter<int32_t>("Nybins"),
540  Parameters.getParameter<double>("ymin"),
541  Parameters.getParameter<double>("ymax"));
542  else
543  SimulatedTOFEtaMap = nullptr;
545  HistoName.str("");
546  HistoName << "SimulatedTOFVsPhi";
547  if (Parameters.getParameter<bool>("switch"))
548  SimulatedTOFPhiMap = ibooker.book2D(HistoName.str(),
549  HistoName.str(),
550  Parameters.getParameter<int32_t>("Nxbins"),
551  Parameters.getParameter<double>("xmin"),
552  Parameters.getParameter<double>("xmax"),
553  Parameters.getParameter<int32_t>("Nybins"),
554  Parameters.getParameter<double>("ymin"),
555  Parameters.getParameter<double>("ymax"));
556  else
557  SimulatedTOFPhiMap = nullptr;
559  HistoName.str("");
560  HistoName << "SimulatedTOFVsR";
561  if (Parameters.getParameter<bool>("switch"))
562  SimulatedTOFRMap = ibooker.book2D(HistoName.str(),
563  HistoName.str(),
564  Parameters.getParameter<int32_t>("Nxbins"),
565  Parameters.getParameter<double>("xmin"),
566  Parameters.getParameter<double>("xmax"),
567  Parameters.getParameter<int32_t>("Nybins"),
568  Parameters.getParameter<double>("ymin"),
569  Parameters.getParameter<double>("ymax"));
570  else
571  SimulatedTOFRMap = nullptr;
573  HistoName.str("");
574  HistoName << "SimulatedTOFVsZ";
575  if (Parameters.getParameter<bool>("switch"))
576  SimulatedTOFZMap = ibooker.book2D(HistoName.str(),
577  HistoName.str(),
578  Parameters.getParameter<int32_t>("Nxbins"),
579  Parameters.getParameter<double>("xmin"),
580  Parameters.getParameter<double>("xmax"),
581  Parameters.getParameter<int32_t>("Nybins"),
582  Parameters.getParameter<double>("ymin"),
583  Parameters.getParameter<double>("ymax"));
584  else
585  SimulatedTOFZMap = nullptr;
586 
587  edm::ESWatcher<TrackerDigiGeometryRecord> theTkDigiGeomWatcher;
588  if (theTkDigiGeomWatcher.check(iSetup)) {
589  for (auto const& det_u : tkGeom_->detUnits()) {
590  unsigned int detId_raw = det_u->geographicalId().rawId();
591  bookLayerHistos(ibooker, detId_raw, pixelFlag_);
592  }
593  }
594  ibooker.cd();
595  folder_name.str("");
596  folder_name << top_folder << "/"
597  << "DigiMonitor";
598  ibooker.setCurrentFolder(folder_name.str());
599 
600  Parameters = config_.getParameter<edm::ParameterSet>("XYPositionMapH");
601  HistoName.str("");
602  HistoName << "MatchedSimXPosVsYPos";
603  if (Parameters.getParameter<bool>("switch"))
604  MatchedXYPositionMap = ibooker.book2D(HistoName.str(),
605  HistoName.str(),
606  Parameters.getParameter<int32_t>("Nxbins"),
607  Parameters.getParameter<double>("xmin"),
608  Parameters.getParameter<double>("xmax"),
609  Parameters.getParameter<int32_t>("Nybins"),
610  Parameters.getParameter<double>("ymin"),
611  Parameters.getParameter<double>("ymax"));
612  else
613  MatchedXYPositionMap = nullptr;
614 
615  Parameters = config_.getParameter<edm::ParameterSet>("RZPositionMapH");
616  HistoName.str("");
617  HistoName << "MatchedSimRPosVsZPos";
618  if (Parameters.getParameter<bool>("switch"))
619  MatchedRZPositionMap = ibooker.book2D(HistoName.str(),
620  HistoName.str(),
621  Parameters.getParameter<int32_t>("Nxbins"),
622  Parameters.getParameter<double>("xmin"),
623  Parameters.getParameter<double>("xmax"),
624  Parameters.getParameter<int32_t>("Nybins"),
625  Parameters.getParameter<double>("ymin"),
626  Parameters.getParameter<double>("ymax"));
627  else
628  MatchedRZPositionMap = nullptr;
629 }
630 //
631 // -- Book Layer Histograms
632 //
633 void Phase2TrackerValidateDigi::bookLayerHistos(DQMStore::IBooker& ibooker, unsigned int det_id, bool flag) {
634  int layer;
635  if (flag)
637  else
638  layer = tTopo_->getOTLayerNumber(det_id);
639 
640  if (layer < 0)
641  return;
642 
643  std::string key = getHistoId(det_id, flag);
644  std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
645  if (pos == layerMEs.end()) {
646  std::string top_folder = config_.getParameter<std::string>("TopFolderName");
647  std::stringstream folder_name;
648 
649  //For endCap: P-type sensors are present only upto ring 10 for discs 1&2 (TEDD-1) and upto ring 7 for discs 3,4&5 (TEDD-2)
650  bool isPStypeModForTEDD_1 =
651  (!pixelFlag_ && layer > 100 && tTopo_->tidWheel(det_id) < 3 && tTopo_->tidRing(det_id) <= 10) ? true : false;
652  bool isPStypeModForTEDD_2 =
653  (!pixelFlag_ && layer > 100 && tTopo_->tidWheel(det_id) >= 3 && tTopo_->tidRing(det_id) <= 7) ? true : false;
654 
655  bool isPtypeSensor =
656  (flag || (layer < 4 || (layer > 6 && (isPStypeModForTEDD_1 || isPStypeModForTEDD_2)))) ? true : false;
657 
658  ibooker.cd();
659  ibooker.setCurrentFolder(top_folder + "/DigiMonitor/" + key);
660  edm::LogInfo("Phase2TrackerValidateDigi") << " Booking Histograms in : " << key;
661 
662  std::ostringstream HistoName;
663  DigiMEs local_mes;
664 
666  HistoName.str("");
667  HistoName << "SimTrackPt";
668  if (Parameters.getParameter<bool>("switch"))
669  local_mes.SimTrackPt = ibooker.book1D(HistoName.str(),
670  HistoName.str(),
671  Parameters.getParameter<int32_t>("Nbins"),
672  Parameters.getParameter<double>("xmin"),
673  Parameters.getParameter<double>("xmax"));
674  else
675  local_mes.SimTrackPt = nullptr;
676  HistoName.str("");
677  HistoName << "MatchedTrackPt";
678  if (Parameters.getParameter<bool>("switch"))
679  local_mes.MatchedTrackPt = ibooker.book1D(HistoName.str(),
680  HistoName.str(),
681  Parameters.getParameter<int32_t>("Nbins"),
682  Parameters.getParameter<double>("xmin"),
683  Parameters.getParameter<double>("xmax"));
684  else
685  local_mes.MatchedTrackPt = nullptr;
686  HistoName.str("");
687  HistoName << "MissedHitTrackPt";
688  if (Parameters.getParameter<bool>("switch"))
689  local_mes.MissedHitTrackPt = ibooker.book1D(HistoName.str(),
690  HistoName.str(),
691  Parameters.getParameter<int32_t>("Nbins"),
692  Parameters.getParameter<double>("xmin"),
693  Parameters.getParameter<double>("xmax"));
694  else
695  local_mes.MissedHitTrackPt = nullptr;
696  HistoName.str("");
697  HistoName << "MissedDigiTrackPt";
698  if (Parameters.getParameter<bool>("switch"))
699  local_mes.MissedDigiTrackPt = ibooker.book1D(HistoName.str(),
700  HistoName.str(),
701  Parameters.getParameter<int32_t>("Nbins"),
702  Parameters.getParameter<double>("xmin"),
703  Parameters.getParameter<double>("xmax"));
704  else
705  local_mes.MissedDigiTrackPt = nullptr;
706 
708  HistoName.str("");
709  HistoName << "SimTrackEta";
710  if (Parameters.getParameter<bool>("switch"))
711  local_mes.SimTrackEta = ibooker.book1D(HistoName.str(),
712  HistoName.str(),
713  Parameters.getParameter<int32_t>("Nbins"),
714  Parameters.getParameter<double>("xmin"),
715  Parameters.getParameter<double>("xmax"));
716  else
717  local_mes.SimTrackEta = nullptr;
718  HistoName.str("");
719  HistoName << "MatchedTrackEta";
720  if (Parameters.getParameter<bool>("switch"))
721  local_mes.MatchedTrackEta = ibooker.book1D(HistoName.str(),
722  HistoName.str(),
723  Parameters.getParameter<int32_t>("Nbins"),
724  Parameters.getParameter<double>("xmin"),
725  Parameters.getParameter<double>("xmax"));
726  else
727  local_mes.MatchedTrackEta = nullptr;
728  HistoName.str("");
729  HistoName << "MissedHitTrackEta";
730  if (Parameters.getParameter<bool>("switch"))
731  local_mes.MissedHitTrackEta = ibooker.book1D(HistoName.str(),
732  HistoName.str(),
733  Parameters.getParameter<int32_t>("Nbins"),
734  Parameters.getParameter<double>("xmin"),
735  Parameters.getParameter<double>("xmax"));
736  else
737  local_mes.MissedHitTrackEta = nullptr;
738  HistoName.str("");
739  HistoName << "MissedDigiTrackEta";
740  if (Parameters.getParameter<bool>("switch"))
741  local_mes.MissedDigiTrackEta = ibooker.book1D(HistoName.str(),
742  HistoName.str(),
743  Parameters.getParameter<int32_t>("Nbins"),
744  Parameters.getParameter<double>("xmin"),
745  Parameters.getParameter<double>("xmax"));
746  else
747  local_mes.MissedDigiTrackEta = nullptr;
748 
750  HistoName.str("");
751  HistoName << "SimTrackPhi";
752  if (Parameters.getParameter<bool>("switch"))
753  local_mes.SimTrackPhi = ibooker.book1D(HistoName.str(),
754  HistoName.str(),
755  Parameters.getParameter<int32_t>("Nbins"),
756  Parameters.getParameter<double>("xmin"),
757  Parameters.getParameter<double>("xmax"));
758  else
759  local_mes.SimTrackPhi = nullptr;
760  HistoName.str("");
761  HistoName << "MatchedTrackPhi";
762  if (Parameters.getParameter<bool>("switch"))
763  local_mes.MatchedTrackPhi = ibooker.book1D(HistoName.str(),
764  HistoName.str(),
765  Parameters.getParameter<int32_t>("Nbins"),
766  Parameters.getParameter<double>("xmin"),
767  Parameters.getParameter<double>("xmax"));
768  else
769  local_mes.MatchedTrackPhi = nullptr;
770  HistoName.str("");
771  HistoName << "MissedHitTrackPhi";
772  if (Parameters.getParameter<bool>("switch"))
773  local_mes.MissedHitTrackPhi = ibooker.book1D(HistoName.str(),
774  HistoName.str(),
775  Parameters.getParameter<int32_t>("Nbins"),
776  Parameters.getParameter<double>("xmin"),
777  Parameters.getParameter<double>("xmax"));
778  else
779  local_mes.MissedHitTrackPhi = nullptr;
780  HistoName.str("");
781  HistoName << "MissedDigiTrackPhi";
782  if (Parameters.getParameter<bool>("switch"))
783  local_mes.MissedDigiTrackPhi = ibooker.book1D(HistoName.str(),
784  HistoName.str(),
785  Parameters.getParameter<int32_t>("Nbins"),
786  Parameters.getParameter<double>("xmin"),
787  Parameters.getParameter<double>("xmax"));
788  else
789  local_mes.MissedDigiTrackPhi = nullptr;
790 
792  if (!flag) {
793  HistoName.str("");
794  HistoName << "MatchedSimHitElossS";
795  if (Parameters.getParameter<bool>("switch"))
796  local_mes.MatchedSimHitElossS = ibooker.book1D(HistoName.str(),
797  HistoName.str(),
798  Parameters.getParameter<int32_t>("Nbins"),
799  Parameters.getParameter<double>("xmin"),
800  Parameters.getParameter<double>("xmax"));
801  else
802  local_mes.MatchedSimHitElossS = nullptr;
803  HistoName.str("");
804  HistoName << "MissedDigiSimHitElossS";
805  if (Parameters.getParameter<bool>("switch"))
806  local_mes.MissedDigiSimHitElossS = ibooker.book1D(HistoName.str(),
807  HistoName.str(),
808  Parameters.getParameter<int32_t>("Nbins"),
809  Parameters.getParameter<double>("xmin"),
810  Parameters.getParameter<double>("xmax"));
811  else
812  local_mes.MissedDigiSimHitElossS = nullptr;
813  }
814  if (isPtypeSensor) {
815  HistoName.str("");
816  HistoName << "MatchedSimHitElossP";
817  if (Parameters.getParameter<bool>("switch"))
818  local_mes.MatchedSimHitElossP = ibooker.book1D(HistoName.str(),
819  HistoName.str(),
820  Parameters.getParameter<int32_t>("Nbins"),
821  Parameters.getParameter<double>("xmin"),
822  Parameters.getParameter<double>("xmax"));
823  else
824  local_mes.MatchedSimHitElossP = nullptr;
825  HistoName.str("");
826  HistoName << "MissedDigiSimHitElossP";
827  if (Parameters.getParameter<bool>("switch"))
828  local_mes.MissedDigiSimHitElossP = ibooker.book1D(HistoName.str(),
829  HistoName.str(),
830  Parameters.getParameter<int32_t>("Nbins"),
831  Parameters.getParameter<double>("xmin"),
832  Parameters.getParameter<double>("xmax"));
833  else
834  local_mes.MissedDigiSimHitElossP = nullptr;
835  }
837  HistoName.str("");
838  HistoName << "SimHitDx";
839  if (Parameters.getParameter<bool>("switch"))
840  local_mes.SimHitDx = ibooker.book1D(HistoName.str(),
841  HistoName.str(),
842  Parameters.getParameter<int32_t>("Nbins"),
843  Parameters.getParameter<double>("xmin"),
844  Parameters.getParameter<double>("xmax"));
845  else
846  local_mes.SimHitDx = nullptr;
847 
849  HistoName.str("");
850  HistoName << "SimHitDy";
851  if (Parameters.getParameter<bool>("switch"))
852  local_mes.SimHitDy = ibooker.book1D(HistoName.str(),
853  HistoName.str(),
854  Parameters.getParameter<int32_t>("Nbins"),
855  Parameters.getParameter<double>("xmin"),
856  Parameters.getParameter<double>("xmax"));
857  else
858  local_mes.SimHitDy = nullptr;
859 
861  HistoName.str("");
862  HistoName << "SimHitDz";
863  if (Parameters.getParameter<bool>("switch"))
864  local_mes.SimHitDz = ibooker.book1D(HistoName.str(),
865  HistoName.str(),
866  Parameters.getParameter<int32_t>("Nbins"),
867  Parameters.getParameter<double>("xmin"),
868  Parameters.getParameter<double>("xmax"));
869  else
870  local_mes.SimHitDz = nullptr;
871 
872  HistoName.str("");
873  HistoName << "BunchXingWindow";
874  local_mes.BunchXTimeBin = ibooker.book1D(HistoName.str(), HistoName.str(), 8, -5.5, 2.5);
875 
876  HistoName.str("");
877  HistoName << "FractionOfOOTPUDigi";
878  local_mes.FractionOfOOTDigis = ibooker.bookProfile(HistoName.str(), HistoName.str(), 8, -5.5, 2.5, 0., 1.0, "s");
879 
880  HistoName.str("");
881  HistoName << "MissedDigiLocalXPosvsYPos";
882  local_mes.MissedDigiLocalXposVsYPos =
883  ibooker.book2D(HistoName.str(), HistoName.str(), 130, -6.5, 6.5, 130, -6.5, 6.5);
884 
886  HistoName.str("");
887  HistoName << "MissedDigiTimeWindow";
888  if (Parameters.getParameter<bool>("switch"))
889  local_mes.MissedDigiTimeWindow = ibooker.book1D(HistoName.str(), HistoName.str(), 100, -0.5, 49.5);
890  else
891  local_mes.MissedDigiTimeWindow = nullptr;
892  local_mes.nDigis = 0;
893  layerMEs.insert(std::make_pair(key, local_mes));
894  }
895 }
896 //
897 // -- Get SimTrack Id
898 //
900  const DetId& detId,
901  unsigned int& channel) {
903 
904  unsigned int simTrkId(0);
905  if (isearch == simLinks->end())
906  return simTrkId;
907 
908  edm::DetSet<PixelDigiSimLink> link_detset = (*simLinks)[detId];
909  // Loop over DigiSimLink in this det unit
910  int iSimLink = 0;
911  for (edm::DetSet<PixelDigiSimLink>::const_iterator it = link_detset.data.begin(); it != link_detset.data.end();
912  it++, iSimLink++) {
913  if (channel == it->channel()) {
914  simTrkId = it->SimTrackId();
915  break;
916  }
917  }
918  return simTrkId;
919 }
922  DSViter != otSimLink_->end();
923  DSViter++) {
924  unsigned int rawid = DSViter->id;
925  DetId detId(rawid);
926  if (DetId(detId).det() != DetId::Detector::Tracker)
927  continue;
928  int layer = tTopo_->getOTLayerNumber(rawid);
929  if (layer < 0)
930  continue;
931  bool flag_ = false;
932  std::string key = getHistoId(rawid, flag_);
933  std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
934  if (pos == layerMEs.end())
935  continue;
936  DigiMEs& local_mes = pos->second;
937  int tot_digi = 0;
938  std::map<int, float> bxMap;
939  for (typename edm::DetSet<PixelDigiSimLink>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
940  tot_digi++;
941  int bx = di->eventId().bunchCrossing();
942  std::map<int, float>::iterator ic = bxMap.find(bx);
943  if (ic == bxMap.end())
944  bxMap[bx] = 1.0;
945  else
946  bxMap[bx] += 1.0;
947  }
948  for (const auto& v : bxMap) {
949  if (tot_digi) {
950  local_mes.BunchXTimeBin->Fill(v.first, v.second);
951  local_mes.FractionOfOOTDigis->Fill(v.first, v.second / tot_digi);
952  }
953  }
954  }
955 }
958  DSViter != itSimLink_->end();
959  DSViter++) {
960  unsigned int rawid = DSViter->id;
961  DetId detId(rawid);
962  if (DetId(detId).det() != DetId::Detector::Tracker)
963  continue;
964  int layer = tTopo_->getITPixelLayerNumber(rawid);
965  if (layer < 0)
966  continue;
967  bool flag_ = true;
968  std::string key = getHistoId(rawid, flag_);
969  std::map<std::string, DigiMEs>::iterator pos = layerMEs.find(key);
970  if (pos == layerMEs.end())
971  continue;
972  DigiMEs& local_mes = pos->second;
973  int tot_digi = 0;
974  std::map<int, float> bxMap;
975  for (typename edm::DetSet<PixelDigiSimLink>::const_iterator di = DSViter->begin(); di != DSViter->end(); di++) {
976  tot_digi++;
977  int bx = di->eventId().bunchCrossing();
978  std::map<int, float>::iterator ic = bxMap.find(bx);
979  if (ic == bxMap.end())
980  bxMap[bx] = 1.0;
981  else
982  bxMap[bx] += 1.0;
983  }
984  for (const auto& v : bxMap) {
985  if (tot_digi) {
986  local_mes.BunchXTimeBin->Fill(v.first, v.second);
987  local_mes.FractionOfOOTDigis->Fill(v.first, v.second / tot_digi);
988  }
989  }
990  }
991 }
992 //
993 // -- Get Matched SimTrack
994 //
996  edm::SimTrackContainer sim_tracks = (*SimTk.product());
997  for (unsigned int it = 0; it < sim_tracks.size(); it++) {
998  if (sim_tracks[it].trackId() == simTrkId) {
999  return it;
1000  }
1001  }
1002  return -1;
1003 }
1004 //
1005 // -- Check if the SimTrack is _Primary or not
1006 //
1008  bool retval = false;
1009  unsigned int trkId = simTrk.trackId();
1010  if (trkId != simHit.trackId())
1011  return retval;
1012  int vtxIndex = simTrk.vertIndex();
1013  int ptype = simHit.processType();
1014  if ((vtxIndex == 0) && (ptype == 0))
1015  retval = true;
1016  return retval;
1017 }
1018 //
1019 // -- Fill Histogram
1020 //
1022  MonitorElement* th1, MonitorElement* th2, MonitorElement* th3, float val, int primary) {
1023  if (th1)
1024  th1->Fill(val);
1025  if (th2 && primary == 1)
1026  th2->Fill(val);
1027  if (th3 && primary != 1)
1028  th3->Fill(val);
1029 }
1030 //
1031 // -- Fill NHit per Layer Histogram [Need to work on!!!]
1032 //
1033 /*
1034 void Phase2TrackerValidateDigi::fillHitsPerTrack() {
1035  for (const auto& it : layerMEs) {
1036  const DigiMEs& local_mes = it.second;
1037  unsigned int layer = it.first;
1038  int lval;
1039  if (layer < 10)
1040  lval = layer;
1041  else if (layer / 100 == 1)
1042  lval = 100 - (layer + 10);
1043  else if (layer / 100 == 2)
1044  lval = (layer + 10) - 200;
1045  else
1046  lval = 0;
1047  nSimHitsPerTrack->Fill(lval, local_mes.nHits);
1048  }
1049 }
1050 */
1052  if (flag)
1053  return phase2tkutil::getITHistoId(det_id, tTopo_);
1054  else
1055  return phase2tkutil::getOTHistoId(det_id, tTopo_);
1056 }
1057 
1058 //define this as a plug-in
const edm::EDGetTokenT< edm::DetSetVector< Phase2TrackerDigi > > otDigiToken_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
iterator find(det_id_type id)
Definition: DetSetVector.h:264
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::Handle< edm::SimTrackContainer > simTracks
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
bool isPrimary(const SimTrack &simTrk, const PSimHit &simHit)
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
const edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > itPixelDigiSimLinkToken_
virtual int ncolumns() const =0
T z() const
Definition: PV3DBase.h:61
bool findOTDigi(unsigned int detid, unsigned int id)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
unsigned int tidWheel(const DetId &id) const
T eta() const
Definition: PV3DBase.h:73
T const * product() const
Definition: Handle.h:70
const edm::DetSetVector< PixelDigiSimLink > * itSimLink_
int matchedSimTrack(edm::Handle< edm::SimTrackContainer > &SimTk, unsigned int simTrkId)
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
void dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override
std::string getITHistoId(uint32_t det_id, const TrackerTopology *tTopo)
std::vector< edm::InputTag > pSimHitSrc_
const math::XYZTLorentzVectorD & momentum() const
Definition: CoreSimTrack.h:19
static int pixelToChannel(int row, int col)
Definition: PixelDigi.h:75
const edm::EDGetTokenT< edm::SimVertexContainer > simVertexToken_
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
void Fill(long long x)
unsigned int getSimTrackId(const edm::DetSetVector< PixelDigiSimLink > *simLinks, const DetId &detId, unsigned int &channel)
std::map< std::string, DigiMEs > layerMEs
int getITPixelLayerNumber(const DetId &id) const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
int vertIndex() const
index of the vertex in the Event container (-1 if no vertex)
Definition: SimTrack.h:33
int iEvent
Definition: GenABIO.cc:224
bool findITPixelDigi(unsigned int detid, unsigned int id)
std::string getOTHistoId(uint32_t det_id, const TrackerTopology *tTopo)
edm::Handle< edm::PSimHitContainer > simHits
int getOTLayerNumber(const DetId &id) const
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
std::vector< edm::EDGetTokenT< edm::PSimHitContainer > > simHitTokens_
static PackedDigiType pixelToChannel(unsigned int row, unsigned int col)
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
T mag() const
Definition: PV3DBase.h:64
void fillHistogram(MonitorElement *th1, MonitorElement *th2, MonitorElement *th3, float val, int primary)
Transition
Definition: Transition.h:12
void bookLayerHistos(DQMStore::IBooker &ibooker, unsigned int det_id, bool flag)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::DetSetVector< PixelDigi > * itdigis_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
const TrackerGeomDet * idToDet(DetId) const override
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
edm::Handle< edm::SimVertexContainer > simVertices
bool isValid() const
Definition: ESHandle.h:44
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
Log< level::Info, false > LogInfo
Definition: DetId.h:17
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > itPixelDigiToken_
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
int fillSimHitInfo(const edm::Event &iEvent, const SimTrack simTrk)
const edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > otDigiSimLinkToken_
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
const edm::DetSetVector< PixelDigiSimLink > * otSimLink_
std::vector< SimVertex > SimVertexContainer
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
std::string HistoName
std::vector< AlignmentParameters * > Parameters
Definition: Utilities.h:32
collection_type data
Definition: DetSet.h:80
Phase2TrackerValidateDigi(const edm::ParameterSet &)
const edm::EDGetTokenT< edm::SimTrackContainer > simTrackToken_
HLT enums.
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
unsigned int trackId() const
Definition: CoreSimTrack.h:31
col
Definition: cuy.py:1009
std::string getHistoId(uint32_t det_id, bool flag)
unsigned int tidRing(const DetId &id) const
struct @727 flag_
std::vector< PSimHit > PSimHitContainer
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
const edm::DetSetVector< Phase2TrackerDigi > * otdigis_
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
collection_type::const_iterator const_iterator
Definition: DetSet.h:31
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override
std::vector< SimTrack > SimTrackContainer
Definition: Run.h:45