CMS 3D CMS Logo

TrackAnalyzer.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author Suchandra Dutta , Giorgia Mila
5  */
6 
15 
20 #include <string>
21 #include "TMath.h"
23 
24 using namespace dqm;
25 
26 namespace {
27  template <typename T, size_t N>
28  std::array<T, N+1> makeLogBins(const double min, const double max) {
29  const double minLog10 = std::log10(min);
30  const double maxLog10 = std::log10(max);
31  const double width = (maxLog10-minLog10)/N;
32  std::array<T, N+1> ret;
33  ret[0] = std::pow(10,minLog10);
34  const double mult = std::pow(10, width);
35  for(size_t i=1; i<= N; ++i) {
36  ret[i] = ret[i-1]*mult;
37  }
38  return ret;
39  }
40 }
41 
43  : conf_( nullptr )
44  , stateName_ (iConfig.getParameter<std::string>("MeasurementState") )
45  , doTrackerSpecific_ ( iConfig.getParameter<bool>("doTrackerSpecific") )
46  , doAllPlots_ ( iConfig.getParameter<bool>("doAllPlots") )
47  , doBSPlots_ ( iConfig.getParameter<bool>("doBeamSpotPlots") )
48  , doPVPlots_ ( iConfig.getParameter<bool>("doPrimaryVertexPlots") )
49  , doDCAPlots_ ( iConfig.getParameter<bool>("doDCAPlots") )
50  , doGeneralPropertiesPlots_ ( iConfig.getParameter<bool>("doGeneralPropertiesPlots") )
51  , doMeasurementStatePlots_ ( iConfig.getParameter<bool>("doMeasurementStatePlots") )
52  , doHitPropertiesPlots_ ( iConfig.getParameter<bool>("doHitPropertiesPlots") )
53  , doRecHitVsPhiVsEtaPerTrack_ ( iConfig.getParameter<bool>("doRecHitVsPhiVsEtaPerTrack") )
54  , doRecHitVsPtVsEtaPerTrack_ ( iConfig.getParameter<bool>("doRecHitVsPtVsEtaPerTrack") )
55  , doLayersVsPhiVsEtaPerTrack_ ( iConfig.getParameter<bool>("doLayersVsPhiVsEtaPerTrack") )
56  , doRecHitsPerTrackProfile_ ( iConfig.getParameter<bool>("doRecHitsPerTrackProfile") )
57  , doThetaPlots_ ( iConfig.getParameter<bool>("doThetaPlots") )
58  , doTrackPxPyPlots_ ( iConfig.getParameter<bool>("doTrackPxPyPlots") )
59  , doDCAwrtPVPlots_ ( iConfig.getParameter<bool>("doDCAwrtPVPlots") )
60  , doDCAwrt000Plots_ ( iConfig.getParameter<bool>("doDCAwrt000Plots") )
61  , doLumiAnalysis_ ( iConfig.getParameter<bool>("doLumiAnalysis") )
62  , doTestPlots_ ( iConfig.getParameter<bool>("doTestPlots") )
63  , doHIPlots_ ( iConfig.getParameter<bool>("doHIPlots") )
64  , doSIPPlots_ ( iConfig.getParameter<bool>("doSIPPlots") )
65  , doEffFromHitPatternVsPU_ ( iConfig.getParameter<bool>("doEffFromHitPatternVsPU") )
66  , doEffFromHitPatternVsBX_ ( iConfig.getParameter<bool>("doEffFromHitPatternVsBX") )
67  , doEffFromHitPatternVsLUMI_ ( iConfig.getParameter<bool>("doEffFromHitPatternVsLUMI") )
68  , pvNDOF_ ( iConfig.getParameter<int> ("pvNDOF") )
69  , useBPixLayer1_ ( iConfig.getParameter<bool>("useBPixLayer1") )
70  , minNumberOfPixelsPerCluster_ ( iConfig.getParameter<int>("minNumberOfPixelsPerCluster") )
71  , minPixelClusterCharge_ ( iConfig.getParameter<double>("minPixelClusterCharge") )
72  , qualityString_ ( iConfig.getParameter<std::string>("qualityString"))
73  , good_vertices_(0)
74  , bx_(0)
75  , pixel_lumi_(0.)
76  , scal_lumi_(0.)
77 {
78  initHistos();
79  TopFolder_ = iConfig.getParameter<std::string>("FolderName");
80 }
81 
83  : TrackAnalyzer(iConfig)
84 {
85  edm::InputTag bsSrc = iConfig.getParameter<edm::InputTag>("beamSpot");
86  edm::InputTag primaryVertexInputTag = iConfig.getParameter<edm::InputTag>("primaryVertex");
87  edm::InputTag pixelClusterInputTag = iConfig.getParameter<edm::InputTag>("pixelCluster4lumi");
88  edm::InputTag scalInputTag = iConfig.getParameter<edm::InputTag>("scal");
90  pvToken_ = iC.consumes<reco::VertexCollection>(primaryVertexInputTag);
93 
94  if(useBPixLayer1_)
96  else
98 
99 
100 }
101 
103 {
104  Chi2 = nullptr;
105  Chi2Prob = nullptr;
106  Chi2ProbVsPhi = nullptr;
107  Chi2ProbVsEta = nullptr;
108  Chi2oNDF = nullptr;
109  Chi2oNDFVsEta = nullptr;
110  Chi2oNDFVsPhi = nullptr;
111  Chi2oNDFVsTheta = nullptr;
112 
113  NumberOfRecHitsPerTrack = nullptr;
115  NumberOfLostRecHitsPerTrack = nullptr;
116 
120 
122 
125 
126  DistanceOfClosestApproach = nullptr;
131  DeltaZToPV = nullptr;
132  DeltaZToPVZoom = nullptr;
138  xPointOfClosestApproach = nullptr;
141  yPointOfClosestApproach = nullptr;
144  zPointOfClosestApproach = nullptr;
146  algorithm = nullptr;
147  oriAlgo = nullptr;
148  stoppingSource = nullptr;
149  stoppingSourceVSeta = nullptr;
150  stoppingSourceVSphi = nullptr;
151  // TESTING
154 
155 // by Mia in order to deal w/ LS transitions
156  Chi2oNDF_lumiFlag = nullptr;
158 
160  //special Plots for HI DQM //SHOULD I ADD THE BOOL HERE??
162  LongDCASig = nullptr;
163  TransDCASig = nullptr;
164  dNdPhi_HighPurity = nullptr;
165  dNdEta_HighPurity = nullptr;
166  dNdPt_HighPurity = nullptr;
167  NhitVsEta_HighPurity = nullptr;
168  NhitVsPhi_HighPurity = nullptr;
169 
170  // IP significance
171  sipDxyToBS = nullptr;
172  sipDzToBS = nullptr;
173  sip3dToPV = nullptr;
174  sip2dToPV = nullptr;
175  sipDxyToPV = nullptr;
176  sipDzToPV = nullptr;
177 
178 }
179 
181 {
182 }
183 
184 void TrackAnalyzer::initHisto(DQMStore::IBooker & ibooker, const edm::EventSetup & iSetup, const edm::ParameterSet& iConfig)
185 {
186  conf_ = &iConfig;
188  bookHistosForBeamSpot(ibooker);
191  if (doEffFromHitPatternVsBX_ || doAllPlots_) bookHistosForEfficiencyFromHitPatter(ibooker, iSetup, "VsBX",false);
192  if (doEffFromHitPatternVsLUMI_ || doAllPlots_) bookHistosForEfficiencyFromHitPatter(ibooker, iSetup, "VsSCALLUMI",false);
193  // if (doEffFromHitPatternVsLUMI_ || doAllPlots_) bookHistosForEfficiencyFromHitPatter(ibooker, iSetup, "VsPIXELLUMI");
195  if (doEffFromHitPatternVsLUMI_ || doAllPlots_) bookHistosForEfficiencyFromHitPatter(ibooker, iSetup, "VsSCALLUMI",true);
196 
197  // book tracker specific related histograms
198  // ---------------------------------------------------------------------------------//
200 
201  // book state related histograms
202  // ---------------------------------------------------------------------------------//
204 
205 
206  if (stateName_ == "All") {
207  bookHistosForState("OuterSurface", ibooker);
208  bookHistosForState("InnerSurface", ibooker);
209  bookHistosForState("ImpactPoint" , ibooker);
210  } else if (
211  stateName_ != "OuterSurface" &&
212  stateName_ != "InnerSurface" &&
213  stateName_ != "ImpactPoint" &&
214  stateName_ != "default"
215  ) {
216  bookHistosForState("default", ibooker);
217 
218  } else {
219  bookHistosForState(stateName_, ibooker);
220  }
221  conf_ = nullptr;
222  }
223 }
224 
226  const edm::EventSetup & iSetup,
227  const std::string suffix,bool useInac)
228 {
229 
230  ibooker.setCurrentFolder(TopFolder_ + "/HitEffFromHitPattern" + (useInac ? "All" :"") + suffix);
231 
232  constexpr int LUMIBin = 300; // conf_->getParameter<int>("LUMIBin");
233  float LUMIMin = conf_->getParameter<double>("LUMIMin");
234  float LUMIMax = conf_->getParameter<double>("LUMIMax");
235 
236  int PVBin = conf_->getParameter<int> ("PVBin");
237  float PVMin = conf_->getParameter<double>("PVMin");
238  float PVMax = conf_->getParameter<double>("PVMax");
239 
240 
241  int NBINS[] = { PVBin, int(GetLumi::lastBunchCrossing), LUMIBin, LUMIBin};
242  float MIN[] = { PVMin, 0.5, LUMIMin, LUMIMin };
243  float MAX[] = { PVMax, float(GetLumi::lastBunchCrossing)+0.5, LUMIMax, LUMIMax };
244  std::string NAME[] = { "", "VsBX", "VsLUMI", "VsLUMI" };
245 
246  auto logBins = makeLogBins<float,LUMIBin>(LUMIMin,LUMIMax);
247 
248  int mon = -1;
249  int nbins = -1;
250  float min = -1.;
251  float max = -1.;
252  bool logQ = false;
253  std::string name = "";
254  for (int i=0; i<monQuantity::END; i++) {
255  if (monName[i] == suffix) {
256  logQ = (i>1); // VsLUMI
257  mon = i;
258  if (useInac) mon+=monQuantity::END;
259  nbins = NBINS[i];
260  min = MIN[i];
261  max = MAX[i];
262  name = NAME[i];
263  }
264  }
265 
266  edm::ESHandle<TrackerGeometry> trackerGeometry;
267  iSetup.get<TrackerDigiGeometryRecord>().get(trackerGeometry);
268 
269  // Values are not ordered randomly, but the order is taken from
270  // http://cmslxr.fnal.gov/dxr/CMSSW/source/Geometry/CommonDetUnit/interface/GeomDetEnumerators.h#15
271  const char * dets[] = { "None", "PXB", "PXF", "TIB", "TID", "TOB", "TEC"};
272 
273  // Also in this case, ordering is not random but extracted from
274  // http://cmslxr.fnal.gov/dxr/CMSSW/source/DataFormats/TrackReco/interface/HitPattern.h
275  // The category "total" is an addition to ease the computation of
276  // the efficiencies and is not part of the original HitPattern.
277  const char * hit_category[] = { "valid", "missing", "inactive", "bad", "total"};
278 
279  // We set sub_det to be a 1-based index since to it is the sub-sub-structure in the HitPattern
280  char title[50];
281  for (unsigned int det = 1; det < sizeof(dets)/sizeof(char*); ++det ) {
282  for (unsigned int sub_det = 1;
283  sub_det <= trackerGeometry->numberOfLayers(det); ++sub_det) {
284  for (unsigned int cat = 0;
285  cat < sizeof(hit_category)/sizeof(char *); ++cat) {
286  memset(title, 0, sizeof(title));
287  snprintf(title, sizeof(title), "Hits%s_%s_%s_Subdet%d", name.c_str(), hit_category[cat], dets[det], sub_det);
288  switch(cat) {
289  case 0:
290  hits_valid_.insert(std::make_pair(
291  Key(det, sub_det, mon), logQ?
292  ibooker.book1D(title, title, nbins, &logBins[0]) :
293  ibooker.book1D(title, title, nbins, min, max)));
294  break;
295  case 4:
296  hits_total_.insert(std::make_pair(
297  Key(det, sub_det, mon), logQ?
298  ibooker.book1D(title, title, nbins, &logBins[0]) :
299  ibooker.book1D(title, title, nbins, min, max)));
300  break;
301  default:
302  LogDebug("TrackAnalyzer") << "Invalid hit category used " << cat << " ignored\n";
303  }
304  }
305  }
306  }
307 }
308 
311 
312  // parameters from the configuration
313  std::string QualName = conf_->getParameter<std::string>("Quality");
314  std::string AlgoName = conf_->getParameter<std::string>("AlgoName");
315  std::string MEBSFolderName = conf_->getParameter<std::string>("BSFolderName");
316 
317  // use the AlgoName and Quality Name
318  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
319 
320  // get binning from the configuration
321  int TKHitBin = conf_->getParameter<int>( "RecHitBin");
322  double TKHitMin = conf_->getParameter<double>("RecHitMin");
323  double TKHitMax = conf_->getParameter<double>("RecHitMax");
324 
325  int TKLostBin = conf_->getParameter<int>( "RecLostBin");
326  double TKLostMin = conf_->getParameter<double>("RecLostMin");
327  double TKLostMax = conf_->getParameter<double>("RecLostMax");
328 
329  int TKLayBin = conf_->getParameter<int>( "RecLayBin");
330  double TKLayMin = conf_->getParameter<double>("RecLayMin");
331  double TKLayMax = conf_->getParameter<double>("RecLayMax");
332 
333  int PhiBin = conf_->getParameter<int>( "PhiBin");
334  double PhiMin = conf_->getParameter<double>("PhiMin");
335  double PhiMax = conf_->getParameter<double>("PhiMax");
336 
337  int EtaBin = conf_->getParameter<int>( "EtaBin");
338  double EtaMin = conf_->getParameter<double>("EtaMin");
339  double EtaMax = conf_->getParameter<double>("EtaMax");
340 
341  int PtBin = conf_->getParameter<int>( "TrackPtBin");
342  double PtMin = conf_->getParameter<double>("TrackPtMin");
343  double PtMax = conf_->getParameter<double>("TrackPtMax");
344 
345  int VXBin = conf_->getParameter<int>( "VXBin");
346  double VXMin = conf_->getParameter<double>("VXMin");
347  double VXMax = conf_->getParameter<double>("VXMax");
348 
349  int VYBin = conf_->getParameter<int>( "VYBin");
350  double VYMin = conf_->getParameter<double>("VYMin");
351  double VYMax = conf_->getParameter<double>("VYMax");
352 
353  int VZBin = conf_->getParameter<int>( "VZBin");
354  double VZMin = conf_->getParameter<double>("VZMin");
355  double VZMax = conf_->getParameter<double>("VZMax");
356 
357  ibooker.setCurrentFolder(TopFolder_);
358 
359  // book the Hit Property histograms
360  // ---------------------------------------------------------------------------------//
361 
362  TkParameterMEs tkmes;
364 
365  ibooker.setCurrentFolder(TopFolder_+"/HitProperties");
366 
367  histname = "NumberOfRecHitsPerTrack_";
368  NumberOfRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
369  NumberOfRecHitsPerTrack->setAxisTitle("Number of all RecHits of each Track");
370  NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
371 
372  histname = "NumberOfValidRecHitsPerTrack_";
373  NumberOfValidRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
374  NumberOfValidRecHitsPerTrack->setAxisTitle("Number of valid RecHits for each Track");
375 
376  NumberOfValidRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
377 
378  histname = "NumberOfLostRecHitsPerTrack_";
379  NumberOfLostRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKLostBin, TKLostMin, TKLostMax);
380  NumberOfLostRecHitsPerTrack->setAxisTitle("Number of lost RecHits for each Track");
381  NumberOfLostRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
382 
383  histname = "NumberOfMissingInnerRecHitsPerTrack_";
384  NumberOfMIRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 10, -0.5, 9.5);
385  NumberOfMIRecHitsPerTrack->setAxisTitle("Number of missing-inner RecHits for each Track");
386  NumberOfMIRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
387 
388  histname = "NumberOfMissingOuterRecHitsPerTrack_";
389  NumberOfMORecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 10, -0.5, 9.5);
390  NumberOfMORecHitsPerTrack->setAxisTitle("Number of missing-outer RecHits for each Track");
391  NumberOfMORecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
392 
393  histname = "ValidFractionPerTrack_";
394  ValidFractionPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 101, 0., 1.01);
395  ValidFractionPerTrack->setAxisTitle("ValidFraction of RecHits for each Track");
396  ValidFractionPerTrack->setAxisTitle("Number of Tracks", 2);
397 
398 
399 
401 
402  histname = "NumberOfValidRecHitVsPhiVsEtaPerTrack_";
403  NumberOfValidRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
404  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., "");
407 
408  histname = "NumberOfLostRecHitVsPhiVsEtaPerTrack_";
409  NumberOfLostRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
410  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 5., "");
413 
414 
415  histname = "NumberMIRecHitVsPhiVsEtaPerTrack_";
416  NumberOfMIRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
417  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 15., "");
420 
421  histname = "NumberMORecHitVsPhiVsEtaPerTrack_";
422  NumberOfMORecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
423  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 15., "");
426 
427  histname = "ValidFractionVsPhiVsEtaPerTrack_";
428  ValidFractionVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
429  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 2., "");
432 
433  }
434 
436 
437  histname = "NumberOfValidRecHitVsPtVsEtaPerTrack_";
438  NumberOfValidRecHitVsPtVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
439  EtaBin, EtaMin, EtaMax, PtBin, PtMin, PtMax, 0, 40., "");
441  NumberOfValidRecHitVsPtVsEtaPerTrack->setAxisTitle("Track p_{T} [GeV] ", 2);
442 
443  histname = "NumberOfLostRecHitVsPtVsEtaPerTrack_";
444  NumberOfLostRecHitVsPtVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
445  EtaBin, EtaMin, EtaMax, PtBin, PtMin, PtMax, 0, 5., "");
447  NumberOfLostRecHitVsPtVsEtaPerTrack->setAxisTitle("Track p_{T} [GeV] ", 2);
448 
449 
450  histname = "NumberMIRecHitVsPtVsEtaPerTrack_";
451  NumberOfMIRecHitVsPtVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
452  EtaBin, EtaMin, EtaMax, PtBin, PtMin, PtMax, 0, 15., "");
454  NumberOfMIRecHitVsPtVsEtaPerTrack->setAxisTitle("Track p_{T} [GeV] ", 2);
455 
456  histname = "NumberMORecHitVsPtVsEtaPerTrack_";
457  NumberOfMORecHitVsPtVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
458  EtaBin, EtaMin, EtaMax, PtBin, PtMin, PtMax, 0, 15., "");
460  NumberOfMORecHitVsPtVsEtaPerTrack->setAxisTitle("Track p_{T} [GeV] ", 2);
461 
462  }
463 
464  histname = "NumberOfValidRecHitsPerTrackVsPt_";
465  NumberOfValidRecHitsPerTrackVsPt = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PtBin, PtMin, PtMax, TKHitMin, TKHitMax,"");
466  NumberOfValidRecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]",1);
467  NumberOfValidRecHitsPerTrackVsPt->setAxisTitle("Number of valid RecHits in each Track",2);
468 
469  histname = "NumberOfLostRecHitsPerTrackVsPt_";
470  NumberOfLostRecHitsPerTrackVsPt = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PtBin, PtMin, PtMax,TKHitMin, TKHitMax,"");
471  NumberOfLostRecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]", 1);
472  NumberOfLostRecHitsPerTrackVsPt->setAxisTitle("Average Number of Lost RecHits per Track", 2);
473 
474 
475  histname = "NumberMIRecHitsPerTrackVsPt_";
476  NumberOfMIRecHitsPerTrackVsPt = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PtBin, PtMin, PtMax,TKHitMin, TKHitMax,"");
477  NumberOfMIRecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]", 1);
478  NumberOfMIRecHitsPerTrackVsPt->setAxisTitle("Average Number of Lost RecHits per Track", 2);
479 
480  histname = "NumberMORecHitsPerTrackVsPt_";
481  NumberOfMORecHitsPerTrackVsPt = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PtBin, PtMin, PtMax,TKHitMin, TKHitMax,"");
482  NumberOfMORecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]", 1);
483  NumberOfMORecHitsPerTrackVsPt->setAxisTitle("Average Number of Lost RecHits per Track", 2);
484 
485  std::string layerTypeName[5] = {"","Off","3D","Missing","Pixel"};
486  for (int i=0; i<4; ++i) {
487  histname = "NumberOf"+ layerTypeName[i] + "LayersPerTrack_";
488  NumberOfLayersPerTrack[i] = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKLayBin, TKLayMin, TKLayMax);
489  NumberOfLayersPerTrack[i]->setAxisTitle("Number of " + layerTypeName[i] + " Layers of each Track", 1);
490  NumberOfLayersPerTrack[i]->setAxisTitle("Number of Tracks", 2);
491  }
493  for (int i=0; i<5; ++i) {
494  histname = "NumberOf"+ layerTypeName[i] + "LayersVsPhiVsEtaPerTrack_";
495  NumberOfLayersVsPhiVsEtaPerTrack[i] = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
496  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., "");
497  NumberOfLayersVsPhiVsEtaPerTrack[i]->setAxisTitle("Track #eta ", 1);
498  NumberOfLayersVsPhiVsEtaPerTrack[i]->setAxisTitle("Track #phi ", 2);
499  }
500  }
501 
502  // book the General Property histograms
503  // ---------------------------------------------------------------------------------//
504 
506 
507  int Chi2Bin = conf_->getParameter<int>( "Chi2Bin");
508  double Chi2Min = conf_->getParameter<double>("Chi2Min");
509  double Chi2Max = conf_->getParameter<double>("Chi2Max");
510 
511  int Chi2NDFBin = conf_->getParameter<int>( "Chi2NDFBin");
512  double Chi2NDFMin = conf_->getParameter<double>("Chi2NDFMin");
513  double Chi2NDFMax = conf_->getParameter<double>("Chi2NDFMax");
514 
515  int Chi2ProbBin = conf_->getParameter<int>( "Chi2ProbBin");
516  double Chi2ProbMin = conf_->getParameter<double>("Chi2ProbMin");
517  double Chi2ProbMax = conf_->getParameter<double>("Chi2ProbMax");
518 
519 
520  //HI PLOTS////
521  int TransDCABins = conf_->getParameter<int>("TransDCABins");
522  double TransDCAMin = conf_->getParameter<double>("TransDCAMin");
523  double TransDCAMax = conf_->getParameter<double>("TransDCAMax");
524 
525  int LongDCABins = conf_->getParameter<int>("LongDCABins");
526  double LongDCAMin = conf_->getParameter<double>("LongDCAMin");
527  double LongDCAMax = conf_->getParameter<double>("LongDCAMax");
529 
530 
531  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
532 
533  histname = "Chi2_";
534  Chi2 = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2Bin, Chi2Min, Chi2Max);
535  Chi2->setAxisTitle("Track #chi^{2}" ,1);
536  Chi2->setAxisTitle("Number of Tracks",2);
537 
538  histname = "Chi2Prob_";
539  Chi2Prob = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2ProbBin, Chi2ProbMin, Chi2ProbMax);
540  Chi2Prob->setAxisTitle("Track #chi^{2} probability",1);
541  Chi2Prob->setAxisTitle("Number of Tracks" ,2);
542 
543  histname = "Chi2oNDF_";
544  Chi2oNDF = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax);
545  Chi2oNDF->setAxisTitle("Track #chi^{2}/ndf",1);
546  Chi2oNDF->setAxisTitle("Number of Tracks" ,2);
547 
548 
550  //HI PLOTS///
552  if (doHIPlots_)
553  {
554  histname = "LongDCASig_";
555  LongDCASig = ibooker.book1D(histname+CategoryName, histname+CategoryName,LongDCABins,LongDCAMin,LongDCAMax);
556  LongDCASig->setAxisTitle("dz/#sigma_{dz}",1);
557 
558  histname = "TransDCASig_";
559  TransDCASig = ibooker.book1D(histname+CategoryName,histname+CategoryName,TransDCABins,TransDCAMin,TransDCAMax);
560  TransDCASig->setAxisTitle("dxy/#sigma_{dxy}",1);
561 
562  histname = "dNdPhi_HighPurity_";
563  dNdPhi_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,PhiBin,PhiMin,PhiMax);
564  dNdPhi_HighPurity->setAxisTitle("#phi",1);
565 
566  histname = "dNdEta_HighPurity_";
567  dNdEta_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,EtaBin,EtaMin,EtaMax);
568  dNdEta_HighPurity->setAxisTitle("#eta",1);
569 
570  histname = "dNdPt_HighPurity_";
571  dNdPt_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,150,0,0.3);
572  dNdPt_HighPurity->setAxisTitle("#sigma_{p_{T}}/p_{T}",1);
573 
574  histname = "NhitVsEta_HighPurity_";
575  NhitVsEta_HighPurity = ibooker.bookProfile(histname+CategoryName,histname+CategoryName,EtaBin,EtaMin,EtaMax,-0.5,39.5,"");
576  NhitVsEta_HighPurity->setAxisTitle("Track #eta",1);
577  NhitVsEta_HighPurity->setAxisTitle("Number of Valid RecHits in each Track",2);
578 
579  histname = "NhitVsPhi_HighPurity_";
580  NhitVsPhi_HighPurity = ibooker.bookProfile(histname+CategoryName,histname+CategoryName,PhiBin,PhiMin,PhiMax,-0.5,39.5,"");
581  NhitVsPhi_HighPurity->setAxisTitle("Track #phi",1);
582  NhitVsPhi_HighPurity->setAxisTitle("Number of Valid RecHits in each Track",2);
583 
584  histname = "Ptdist_HighPurity_";
585  Ptdist_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,150,0,50.);
586  Ptdist_HighPurity->setAxisTitle("p_{T} (GeV/c)",1);
587  Ptdist_HighPurity->setAxisTitle("Number of Tracks",2);
588 
589  histname = "dNhitdPt_HighPurity_";
590  dNhitdPt_HighPurity = ibooker.bookProfile(histname+CategoryName,histname+CategoryName,150,0,25.,-0.5,39.5,"");
591  dNhitdPt_HighPurity->setAxisTitle("p_{T} (GeV/c)",1);
592  dNhitdPt_HighPurity->setAxisTitle("N_{hit}",2);
593 
594  }
595 
596 
597 
599  histname = "xPointOfClosestApproach_";
600  xPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax);
601  xPointOfClosestApproach->setAxisTitle("x component of Track PCA to beam line (cm)",1);
602  xPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
603 
604  histname = "yPointOfClosestApproach_";
605  yPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax);
606  yPointOfClosestApproach->setAxisTitle("y component of Track PCA to beam line (cm)",1);
607  yPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
608 
609  histname = "zPointOfClosestApproach_";
610  zPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax);
611  zPointOfClosestApproach->setAxisTitle("z component of Track PCA to beam line (cm)",1);
612  zPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
613 
614  histname = "xPointOfClosestApproachToPV_";
615  xPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax);
616  xPointOfClosestApproachToPV->setAxisTitle("x component of Track PCA to pv (cm)",1);
617  xPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
618 
619  histname = "yPointOfClosestApproachToPV_";
620  yPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax);
621  yPointOfClosestApproachToPV->setAxisTitle("y component of Track PCA to pv line (cm)",1);
622  yPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
623 
624  histname = "zPointOfClosestApproachToPV_";
625  zPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax);
626  zPointOfClosestApproachToPV->setAxisTitle("z component of Track PCA to pv line (cm)",1);
627  zPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
628  }
629 
630  // See DataFormats/TrackReco/interface/TrackBase.h for track algorithm enum definition
631  // http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/TrackReco/interface/TrackBase.h?view=log
632  histname = "algorithm_";
633  algorithm = ibooker.book1D(histname+CategoryName, histname+CategoryName, reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize));
634  algorithm->setAxisTitle("Tracking algorithm",1);
635  algorithm->setAxisTitle("Number of Tracks",2);
636 
637  histname = "originalAlgorithm_";
638  oriAlgo = ibooker.book1D(histname+CategoryName, histname+CategoryName, reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize));
639  oriAlgo->setAxisTitle("Tracking algorithm",1);
640  oriAlgo->setAxisTitle("Number of Tracks",2);
641 
642  for (size_t ibin=0; ibin<reco::TrackBase::algoSize-1; ibin++) {
645  }
646 
647  size_t StopReasonNameSize = sizeof(StopReasonName::StopReasonName)/sizeof(std::string);
648  histname = "stoppingSource_";
649  stoppingSource = ibooker.book1D(histname+CategoryName, histname+CategoryName, StopReasonNameSize, 0., double(StopReasonNameSize));
650  stoppingSource->setAxisTitle("stopping reason",1);
651  stoppingSource->setAxisTitle("Number of Tracks",2);
652 
653  histname = "stoppingSourceVSeta_";
654  stoppingSourceVSeta = ibooker.bookProfile(histname+CategoryName, histname+CategoryName,
655  EtaBin, EtaMin, EtaMax, 2, 0., 2.);
656  stoppingSourceVSeta->setAxisTitle("track #eta",1);
657  stoppingSourceVSeta->setAxisTitle("stopped fraction",2);
658 
659  histname = "stoppingSourceVSphi_";
660  stoppingSourceVSphi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName,
661  PhiBin, PhiMin, PhiMax, 2, 0., 2.);
662  stoppingSourceVSphi->setAxisTitle("track #phi",1);
663  stoppingSourceVSphi->setAxisTitle("stopped fraction",2);
664 
665  for (size_t ibin=0; ibin<StopReasonNameSize; ibin++) {
667  }
668 
669  }
670 
671 }
672 
674 
675  // parameters from the configuration
676  std::string QualName = conf_->getParameter<std::string>("Quality");
677  std::string AlgoName = conf_->getParameter<std::string>("AlgoName");
678 
679  // use the AlgoName and Quality Name
680  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
681 
682 
683  // book LS analysis related histograms
684  // -----------------------------------
685  if ( doLumiAnalysis_ ) {
686 
687  // get binning from the configuration
688  int TKHitBin = conf_->getParameter<int>( "RecHitBin");
689  double TKHitMin = conf_->getParameter<double>("RecHitMin");
690  double TKHitMax = conf_->getParameter<double>("RecHitMax");
691 
692  int Chi2NDFBin = conf_->getParameter<int>( "Chi2NDFBin");
693  double Chi2NDFMin = conf_->getParameter<double>("Chi2NDFMin");
694  double Chi2NDFMax = conf_->getParameter<double>("Chi2NDFMax");
695 
696  // add by Mia in order to deal w/ LS transitions
697  ibooker.setCurrentFolder(TopFolder_+"/LSanalysis");
698 
699  histname = "NumberOfRecHitsPerTrack_lumiFlag_";
700  NumberOfRecHitsPerTrack_lumiFlag = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
701  NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of all RecHits of each Track");
702  NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of Tracks", 2);
703 
704  histname = "Chi2oNDF_lumiFlag_";
705  Chi2oNDF_lumiFlag = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax);
706  Chi2oNDF_lumiFlag->setAxisTitle("Track #chi^{2}/ndf",1);
707  Chi2oNDF_lumiFlag->setAxisTitle("Number of Tracks" ,2);
708 
709  }
710 }
711 
713 
714  // parameters from the configuration
715  std::string QualName = conf_->getParameter<std::string>("Quality");
716  std::string AlgoName = conf_->getParameter<std::string>("AlgoName");
717 
718  // use the AlgoName and Quality Name
719  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
720 
721  // book the Beam Spot related histograms
722  // ---------------------------------------------------------------------------------//
723 
725 
726  int DxyBin = conf_->getParameter<int>( "DxyBin");
727  double DxyMin = conf_->getParameter<double>("DxyMin");
728  double DxyMax = conf_->getParameter<double>("DxyMax");
729 
730  int AbsDxyBin = conf_->getParameter<int>( "AbsDxyBin");
731  double AbsDxyMin = conf_->getParameter<double>("AbsDxyMin");
732  double AbsDxyMax = conf_->getParameter<double>("AbsDxyMax");
733 
734  int PhiBin = conf_->getParameter<int>( "PhiBin");
735  double PhiMin = conf_->getParameter<double>("PhiMin");
736  double PhiMax = conf_->getParameter<double>("PhiMax");
737 
738  int X0Bin = conf_->getParameter<int>( "X0Bin");
739  double X0Min = conf_->getParameter<double>("X0Min");
740  double X0Max = conf_->getParameter<double>("X0Max");
741 
742  int Y0Bin = conf_->getParameter<int>( "Y0Bin");
743  double Y0Min = conf_->getParameter<double>("Y0Min");
744  double Y0Max = conf_->getParameter<double>("Y0Max");
745 
746  int Z0Bin = conf_->getParameter<int>( "Z0Bin");
747  double Z0Min = conf_->getParameter<double>("Z0Min");
748  double Z0Max = conf_->getParameter<double>("Z0Max");
749 
750  int VZBinProf = conf_->getParameter<int>( "VZBinProf");
751  double VZMinProf = conf_->getParameter<double>("VZMinProf");
752  double VZMaxProf = conf_->getParameter<double>("VZMaxProf");
753 
754 
755  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
756 
757  histname = "DistanceOfClosestApproachToBS_";
758  DistanceOfClosestApproachToBS = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
759  DistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1);
760  DistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2);
761 
762  histname = "AbsDistanceOfClosestApproachToBS_";
763  AbsDistanceOfClosestApproachToBS = ibooker.book1D(histname+CategoryName,histname+CategoryName,AbsDxyBin,AbsDxyMin,AbsDxyMax);
764  AbsDistanceOfClosestApproachToBS->setAxisTitle("Track |d_{xy}| wrt beam spot (cm)",1);
765  AbsDistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2);
766 
767  histname = "DistanceOfClosestApproachToBSVsPhi_";
768  DistanceOfClosestApproachToBSVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
769  DistanceOfClosestApproachToBSVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
771  DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2);
772 
773  histname = "xPointOfClosestApproachVsZ0wrt000_";
774  xPointOfClosestApproachVsZ0wrt000 = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
776  xPointOfClosestApproachVsZ0wrt000->setAxisTitle("x component of Track PCA to beam line (cm)",2);
777 
778  histname = "yPointOfClosestApproachVsZ0wrt000_";
779  yPointOfClosestApproachVsZ0wrt000 = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
781  yPointOfClosestApproachVsZ0wrt000->setAxisTitle("y component of Track PCA to beam line (cm)",2);
782 
783  histname = "xPointOfClosestApproachVsZ0wrtBS_";
784  xPointOfClosestApproachVsZ0wrtBS = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
785  xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
786  xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("x component of Track PCA to BS (cm)",2);
787 
788  histname = "yPointOfClosestApproachVsZ0wrtBS_";
789  yPointOfClosestApproachVsZ0wrtBS = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
790  yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
791  yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("y component of Track PCA to BS (cm)",2);
792 
793  histname = "zPointOfClosestApproachVsPhi_";
794  zPointOfClosestApproachVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, VZBinProf, VZMinProf, VZMaxProf, "");
796  zPointOfClosestApproachVsPhi->setAxisTitle("z component of Track PCA to beam line (cm)",2);
797  }
798 
800 
801  int DxyBin = conf_->getParameter<int>( "DxyBin");
802  double DxyMin = conf_->getParameter<double>("DxyMin");
803  double DxyMax = conf_->getParameter<double>("DxyMax");
804 
805  int PhiBin = conf_->getParameter<int>( "PhiBin");
806  double PhiMin = conf_->getParameter<double>("PhiMin");
807  double PhiMax = conf_->getParameter<double>("PhiMax");
808 
809  int X0Bin = conf_->getParameter<int>( "X0Bin");
810  double X0Min = conf_->getParameter<double>("X0Min");
811  double X0Max = conf_->getParameter<double>("X0Max");
812 
813  int Y0Bin = conf_->getParameter<int>( "Y0Bin");
814  double Y0Min = conf_->getParameter<double>("Y0Min");
815  double Y0Max = conf_->getParameter<double>("Y0Max");
816 
817  int Z0Bin = conf_->getParameter<int>( "Z0Bin");
818  double Z0Min = conf_->getParameter<double>("Z0Min");
819  double Z0Max = conf_->getParameter<double>("Z0Max");
820 
821  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
822 
823  histname = "DistanceOfClosestApproachToPV_";
824  DistanceOfClosestApproachToPV = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
825  DistanceOfClosestApproachToPV->setAxisTitle("Track d_{xy} w.r.t. PV (cm)",1);
826  DistanceOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
827 
828  histname = "DistanceOfClosestApproachToPVZoom_";
829  DistanceOfClosestApproachToPVZoom = ibooker.book1D(histname+CategoryName,histname+CategoryName,100,-0.08,0.08);
830  DistanceOfClosestApproachToPVZoom->setAxisTitle("Track d_{xy} w.r.t. PV (cm)",1);
831  DistanceOfClosestApproachToPVZoom->setAxisTitle("Number of Tracks",2);
832 
833 
834  histname = "DeltaZToPV_";
835  DeltaZToPV = ibooker.book1D(histname+CategoryName,histname+CategoryName,Z0Bin,Z0Min,Z0Max);
836  DeltaZToPV->setAxisTitle("Track d_{z} w.r.t. PV (cm)",1);
837  DeltaZToPV->setAxisTitle("Number of Tracks",2);
838 
839  histname = "DeltaZToPVZoom_";
840  DeltaZToPVZoom = ibooker.book1D(histname+CategoryName,histname+CategoryName,100,-0.15,0.15);
841  DeltaZToPVZoom->setAxisTitle("Track d_{z} w.r.t. PV (cm)",1);
842  DeltaZToPVZoom->setAxisTitle("Number of Tracks",2);
843 
844 
845  histname = "DistanceOfClosestApproachToPVVsPhi_";
846  DistanceOfClosestApproachToPVVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
847  DistanceOfClosestApproachToPVVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
849  DistanceOfClosestApproachToPVVsPhi->setAxisTitle("Track d_{xy} w.r.t. PV (cm)",2);
850 
851  histname = "xPointOfClosestApproachVsZ0wrtPV_";
852  xPointOfClosestApproachVsZ0wrtPV = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
853  xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. PV (cm)",1);
854  xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("x component of Track PCA to PV (cm)",2);
855 
856  histname = "yPointOfClosestApproachVsZ0wrtPV_";
857  yPointOfClosestApproachVsZ0wrtPV = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
858  yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. PV (cm)",1);
859  yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("y component of Track PCA to PV (cm)",2);
860 
861  }
862 
863  if (doBSPlots_ || doAllPlots_) {
864  if (doTestPlots_) {
865 
866  int DxyBin = conf_->getParameter<int>( "DxyBin");
867  double DxyMin = conf_->getParameter<double>("DxyMin");
868  double DxyMax = conf_->getParameter<double>("DxyMax");
869 
870  int PhiBin = conf_->getParameter<int>( "PhiBin");
871  double PhiMin = conf_->getParameter<double>("PhiMin");
872  double PhiMax = conf_->getParameter<double>("PhiMax");
873 
874  histname = "TESTDistanceOfClosestApproachToBS_";
875  TESTDistanceOfClosestApproachToBS = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
876  TESTDistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1);
877  TESTDistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2);
878 
879  histname = "TESTDistanceOfClosestApproachToBSVsPhi_";
880  TESTDistanceOfClosestApproachToBSVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
881  TESTDistanceOfClosestApproachToBSVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
883  TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2);
884 
885  }
886 
887  }
888 
889  // book the Profile plots for DCA related histograms
890  // ---------------------------------------------------------------------------------//
891  if(doDCAPlots_ || doAllPlots_) {
892 
893  if (doDCAwrt000Plots_) {
894 
895  int EtaBin = conf_->getParameter<int>( "EtaBin");
896  double EtaMin = conf_->getParameter<double>("EtaMin");
897  double EtaMax = conf_->getParameter<double>("EtaMax");
898 
899  int PhiBin = conf_->getParameter<int>( "PhiBin");
900  double PhiMin = conf_->getParameter<double>("PhiMin");
901  double PhiMax = conf_->getParameter<double>("PhiMax");
902 
903  int DxyBin = conf_->getParameter<int>( "DxyBin");
904  double DxyMin = conf_->getParameter<double>("DxyMin");
905  double DxyMax = conf_->getParameter<double>("DxyMax");
906 
907  if (doThetaPlots_) {
908  int ThetaBin = conf_->getParameter<int>( "ThetaBin");
909  double ThetaMin = conf_->getParameter<double>("ThetaMin");
910  double ThetaMax = conf_->getParameter<double>("ThetaMax");
911 
912  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
913  histname = "DistanceOfClosestApproachVsTheta_";
914  DistanceOfClosestApproachVsTheta = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, ThetaBin, ThetaMin, ThetaMax, DxyMin,DxyMax,"");
916  DistanceOfClosestApproachVsTheta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
917  }
918 
919  histname = "DistanceOfClosestApproachVsEta_";
920  DistanceOfClosestApproachVsEta = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, EtaBin, EtaMin, EtaMax, DxyMin, DxyMax,"");
922  DistanceOfClosestApproachVsEta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
923  // temporary patch in order to put back those MEs in Muon Workspace
924 
925  histname = "DistanceOfClosestApproach_";
926  DistanceOfClosestApproach = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
927  DistanceOfClosestApproach->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",1);
928  DistanceOfClosestApproach->setAxisTitle("Number of Tracks",2);
929 
930  histname = "DistanceOfClosestApproachVsPhi_";
931  DistanceOfClosestApproachVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyMin,DxyMax,"");
932  DistanceOfClosestApproachVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
934  DistanceOfClosestApproachVsPhi->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
935  }
936  }
937 
938 
939  if (doSIPPlots_ || doAllPlots_) {
940  const double sipBins = 200;
941  const double sipMin = -20;
942  const double sipMax = 20;
943 
944  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
945 
946  // SIP wrt. beamspot
947  histname = "SIPDxyToBS_";
948  sipDxyToBS = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
949  sipDxyToBS->setAxisTitle("Track dxy significance wrt beam spot",1);
950  sipDxyToBS->setAxisTitle("Number of Tracks",2);
951 
952  histname = "SIPDzToBS_";
953  sipDzToBS = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
954  sipDzToBS->setAxisTitle("Track dz significance wrt beam spot",1);
955  sipDzToBS->setAxisTitle("Number of Tracks",2);
956 
957  // SIP wrt. vertex
958  histname = "SIP3DToPV_";
959  sip3dToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
960  sip3dToPV->setAxisTitle("3D IP significance wrt primary vertex",1);
961  sip3dToPV->setAxisTitle("Number of Tracks",2);
962 
963  histname = "SIP2DToPV_";
964  sip2dToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
965  sip2dToPV->setAxisTitle("2D IP significance wrt primary vertex",1);
966  sip2dToPV->setAxisTitle("Number of Tracks",2);
967 
968  histname = "SIPDxyToPV_";
969  sipDxyToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
970  sipDxyToPV->setAxisTitle("Track dxy significance wrt primary vertex",1);
971  sipDxyToPV->setAxisTitle("Number of Tracks",2);
972 
973  histname = "SIPDzToPV_";
974  sipDzToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
975  sipDzToPV->setAxisTitle("Track dz significance wrt primary vertex",1);
976  sipDzToPV->setAxisTitle("Number of Tracks",2);
977  }
978 }
979 
980 // -- Analyse
981 // ---------------------------------------------------------------------------------//
983 
984  good_vertices_ = 0;
985 
986  edm::Handle<reco::VertexCollection> recoPrimaryVerticesHandle;
987  iEvent.getByToken(pvToken_, recoPrimaryVerticesHandle);
988  if (recoPrimaryVerticesHandle.isValid())
989  if (!recoPrimaryVerticesHandle->empty())
990  for (auto v : *recoPrimaryVerticesHandle)
991  if (v.ndof() >= pvNDOF_ && !v.isFake())
992  ++good_vertices_;
993 }
994 
996  bx_ = iEvent.bunchCrossing();
997 }
998 
1001  // as done by pixelLumi http://cmslxr.fnal.gov/source/DQM/PixelLumi/plugins/PixelLumiDQM.cc
1002 
1004  iEvent.getByToken(lumiscalersToken_, lumiScalers);
1005  if ( lumiScalers.isValid() && !lumiScalers->empty() ) {
1006  LumiScalersCollection::const_iterator scalit = lumiScalers->begin();
1007  scal_lumi_ = scalit->instantLumi();
1008  } else
1009  scal_lumi_ = -1;
1010 
1012  iEvent.getByToken(pixelClustersToken_, pixelClusters);
1013  if ( pixelClusters.isValid() ) {
1014 
1015  edm::ESHandle<TrackerTopology> tTopoHandle;
1016  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
1017  const TrackerTopology* const tTopo = tTopoHandle.product();
1018 
1019  // Count the number of clusters with at least a minimum
1020  // number of pixels per cluster and at least a minimum charge.
1021  size_t numClusters = 0;
1022  size_t tot = 0;
1023 
1024  edmNew::DetSetVector<SiPixelCluster>::const_iterator pixCluDet = pixelClusters->begin();
1025  for ( ; pixCluDet!=pixelClusters->end(); ++pixCluDet) {
1026 
1027  DetId detid = pixCluDet->detId();
1028  size_t subdetid = detid.subdetId();
1029  // std::cout << tTopo->print(detid) << std::endl;
1030  if ( subdetid == (int) PixelSubdetector::PixelBarrel )
1031  if ( tTopo->layer(detid)==1 )
1032  continue;
1033 
1035  for ( ; pixClu != pixCluDet->end(); ++pixClu ) {
1036  ++tot;
1037  if ( (pixClu->size() >= minNumberOfPixelsPerCluster_) &&
1038  (pixClu->charge() >= minPixelClusterCharge_ ) ) {
1039  ++numClusters;
1040  }
1041  }
1042  }
1043  pixel_lumi_ = lumi_factor_per_bx_ * numClusters / GetLumi::CM2_TO_NANOBARN ; // ?!?!
1044  } else
1045  pixel_lumi_ = -1.;
1046 
1047 }
1048 
1050 {
1051  auto pt = track.pt();
1052  auto phi = track.phi();
1053  // double eta = track.eta();
1054  auto phiIn = track.innerPosition().phi();
1055  auto etaIn = track.innerPosition().eta();
1056  auto phiOut = track.outerPosition().phi();
1057  auto etaOut = track.outerPosition().eta();
1058 
1060  int nValidRecHits = track.numberOfValidHits();
1061  int nLostRecHits = track.numberOfLostHits();
1064 
1065  auto chi2 = track.chi2();
1066  auto chi2prob = TMath::Prob(track.chi2(),(int)track.ndof());
1067  auto chi2oNDF = track.normalizedChi2();
1068 
1070  // rec hits
1071  NumberOfRecHitsPerTrack -> Fill(nRecHits);
1072  NumberOfValidRecHitsPerTrack-> Fill(nValidRecHits);
1073  NumberOfLostRecHitsPerTrack -> Fill(nLostRecHits);
1074  NumberOfMIRecHitsPerTrack -> Fill(nLostIn);
1075  NumberOfMORecHitsPerTrack -> Fill(nLostOut);
1077 
1078 
1079  // 2D plots
1081  NumberOfValidRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nValidRecHits);
1082  NumberOfLostRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostRecHits);
1083  NumberOfMIRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostIn);
1084  NumberOfMORecHitVsPhiVsEtaPerTrack->Fill(etaOut,phiOut,nLostOut);
1085  ValidFractionVsPhiVsEtaPerTrack -> Fill(etaIn,phiIn,track.validFraction());
1086  }
1088  NumberOfValidRecHitVsPtVsEtaPerTrack->Fill(etaIn,pt,nValidRecHits);
1089  NumberOfLostRecHitVsPtVsEtaPerTrack->Fill(etaIn,pt,nLostRecHits);
1090  NumberOfMIRecHitVsPtVsEtaPerTrack->Fill(etaIn,pt,nLostIn);
1091  NumberOfMORecHitVsPtVsEtaPerTrack->Fill(etaOut,pt,nLostOut);
1092  }
1093  NumberOfValidRecHitsPerTrackVsPt->Fill(pt,nValidRecHits);
1094  NumberOfLostRecHitsPerTrackVsPt->Fill(pt,nLostRecHits);
1097 
1098  int nLayers[5] = { track.hitPattern().trackerLayersWithMeasurement(),
1103  };
1104 
1105  // layers
1106  for (int i=0;i<4;++i) NumberOfLayersPerTrack[i]->Fill(nLayers[i]);
1107 
1108  // 2D plots
1110  for (int i=0;i<5;++i) NumberOfLayersVsPhiVsEtaPerTrack[i]->Fill(etaIn,phiIn,nLayers[i]);
1111 
1112  }
1113 
1115  if (doEffFromHitPatternVsBX_ || doAllPlots_) fillHistosForEfficiencyFromHitPatter(track,"VsBX", float(bx_), false );
1117  // if (doEffFromHitPatternVsLUMI_ || doAllPlots_) fillHistosForEfficiencyFromHitPatter(track,"VsPIXELLUMI", pixel_lumi_ );
1120 
1121 
1123  // fitting
1124  Chi2 -> Fill(chi2);
1125  Chi2Prob -> Fill(chi2prob);
1126  Chi2oNDF -> Fill(chi2oNDF);
1127 
1128  // DCA
1129  // temporary patch in order to put back those MEs in Muon Workspace
1130  if (doDCAPlots_) {
1131  if (doDCAwrt000Plots_) {
1133  DistanceOfClosestApproachVsPhi->Fill(phi, track.dxy());
1134  }
1135 
1136  // PCA
1140  }
1141 
1142  // algorithm
1143  algorithm->Fill(static_cast<double>(track.algo()));
1144  oriAlgo->Fill(static_cast<double>(track.originalAlgo()));
1145 
1146  // stopping source
1147  int max = stoppingSource->getNbinsX();
1148  double stop = track.stopReason() > max ? double(max-1) : static_cast<double>(track.stopReason());
1149  double stopped = int(StopReason::NOT_STOPPED)==track.stopReason() ? 0. : 1.;
1150  stoppingSource->Fill(stop);
1151  stoppingSourceVSeta->Fill(track.eta(),stopped);
1152  stoppingSourceVSphi->Fill(track.phi(),stopped);
1153  }
1154 
1155  if ( doLumiAnalysis_ ) {
1157  Chi2oNDF_lumiFlag -> Fill(chi2oNDF);
1158  }
1159 
1161 
1162  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
1163  iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle);
1164  const reco::BeamSpot& bs = *recoBeamSpotHandle;
1165 
1168  DistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position()));
1169  zPointOfClosestApproachVsPhi -> Fill(track.phi(), track.vz());
1170  xPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vx());
1171  yPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vy());
1172  xPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vx()-bs.position(track.vz()).x()));
1173  yPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vy()-bs.position(track.vz()).y()));
1174  if (doTestPlots_) {
1175  TESTDistanceOfClosestApproachToBS -> Fill(track.dxy(bs.position(track.vz())));
1176  TESTDistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position(track.vz())));
1177  }
1178 
1179  if(doSIPPlots_) {
1180  sipDxyToBS->Fill(track.dxy(bs.position())/track.dxyError());
1181  sipDzToBS->Fill(track.dz(bs.position())/track.dzError());
1182  }
1183  }
1184 
1186  edm::Handle<reco::VertexCollection> recoPrimaryVerticesHandle;
1187  iEvent.getByToken(pvToken_,recoPrimaryVerticesHandle);
1188  if (recoPrimaryVerticesHandle.isValid() && !recoPrimaryVerticesHandle->empty()) {
1189  const reco::Vertex& pv = (*recoPrimaryVerticesHandle)[0];
1190 
1191 
1193  //HI PLOTS///////
1195 
1196  if(doHIPlots_)
1197  {
1198  double longDCAsig = 0, transDCAsig = 0;
1199  double zerr2 = track.dzError()*track.dzError()+pv.zError()*pv.zError();
1200  double xyerr2 = track.d0Error()*track.d0Error()+pv.xError()*pv.yError();
1201  if(zerr2 > 0) longDCAsig = track.dz(pv.position())/zerr2;
1202  if(xyerr2 > 0) transDCAsig = track.dxy(pv.position())/xyerr2;
1203  LongDCASig->Fill(longDCAsig);
1204  TransDCASig->Fill(transDCAsig);
1205 
1206 
1207 
1208 
1210  {
1211  dNdEta_HighPurity->Fill(track.eta());
1212  dNdPhi_HighPurity->Fill(track.phi());
1213  dNdPt_HighPurity->Fill(track.ptError()/track.pt());
1214  NhitVsEta_HighPurity->Fill(track.eta(),track.numberOfValidHits());
1215  NhitVsPhi_HighPurity->Fill(track.phi(),track.numberOfValidHits());
1216  dNhitdPt_HighPurity->Fill(track.pt(),track.numberOfValidHits());
1217  Ptdist_HighPurity->Fill(track.pt());
1218  }//end of high quality tracks requirement
1219  }
1220 
1221 
1222  xPointOfClosestApproachToPV->Fill(track.vx()-pv.position().x());
1223  yPointOfClosestApproachToPV->Fill(track.vy()-pv.position().y());
1226  DeltaZToPV -> Fill(track.dz (pv.position()));
1228  DeltaZToPVZoom -> Fill(track.dz (pv.position()));
1229  DistanceOfClosestApproachToPVVsPhi -> Fill(track.phi(), track.dxy(pv.position()));
1230  xPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vx()-pv.position().x()));
1231  yPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vy()-pv.position().y()));
1232 
1233 
1234  if(doSIPPlots_) {
1236  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
1237  reco::TransientTrack transTrack = theB->build(track);
1238 
1239  GlobalVector dir(track.px(), track.py(), track.pz());
1240  std::pair<bool, Measurement1D> ip3d = IPTools::signedImpactParameter3D(transTrack, dir, pv);
1241  std::pair<bool, Measurement1D> ip2d = IPTools::signedTransverseImpactParameter(transTrack, dir, pv);
1242  if(ip3d.first) sip3dToPV->Fill(ip3d.second.value() / ip3d.second.error());
1243  if(ip2d.first) sip2dToPV->Fill(ip2d.second.value() / ip2d.second.error());
1244  sipDxyToPV->Fill(track.dxy(pv.position())/track.dxyError());
1245  sipDzToPV->Fill(track.dz(pv.position())/track.dzError());
1246  }
1247  }
1248  }
1249 
1250  if(doDCAPlots_ || doAllPlots_) {
1251  if (doDCAwrt000Plots_) {
1252  if (doThetaPlots_) {
1253  DistanceOfClosestApproachVsTheta->Fill(track.theta(), track.d0());
1254  }
1255  DistanceOfClosestApproachVsEta->Fill(track.eta(), track.d0());
1256  }
1257 
1258  }
1259 
1260  //Tracker Specific Histograms
1263  }
1264 
1266 
1267  if (stateName_ == "All") {
1268  fillHistosForState(iSetup, track, std::string("OuterSurface"));
1269  fillHistosForState(iSetup, track, std::string("InnerSurface"));
1270  fillHistosForState(iSetup, track, std::string("ImpactPoint"));
1271  } else if (
1272  stateName_ != "OuterSurface" &&
1273  stateName_ != "InnerSurface" &&
1274  stateName_ != "ImpactPoint" &&
1275  stateName_ != "default"
1276  ) {
1277  fillHistosForState(iSetup, track, std::string("default"));
1278  } else {
1279  fillHistosForState(iSetup, track, stateName_);
1280  }
1281  }
1282 
1283  if ( doAllPlots_ ) {
1284  }
1285 
1286 }
1287 
1289 
1290  int mon = -1;
1291  for (int i=0; i<monQuantity::END; i++) {
1292  if (monName[i] == suffix) mon = i;
1293  }
1294  if (useInac) mon+=monQuantity::END;
1295 
1296  // if (track.pt() > 1.0 && track.dxy() < 0.1 and monitoring > 0) {
1297  if (track.pt() > 1.0 && track.dxy() < 0.1 and monitoring > -9.) {
1298  auto hp = track.hitPattern();
1299  // Here hit_category is meant to iterate over
1300  // reco::HitPattern::HitCategory, defined here:
1301  // http://cmslxr.fnal.gov/dxr/CMSSW/source/DataFormats/TrackReco/interface/HitPattern.h
1302  for (unsigned int category = 0; category < 3; ++category) {
1303  for (int hit = 0; hit < hp.numberOfAllHits((reco::HitPattern::HitCategory)(category)); ++hit) {
1304  auto pattern = hp.getHitPattern((reco::HitPattern::HitCategory)(category), hit);
1305  // Boolean bad is missing simply because it is inferred and the only missing case.
1306  bool valid = hp.validHitFilter(pattern);
1307  bool missing = hp.missingHitFilter(pattern);
1308  bool inactive = hp.inactiveHitFilter(pattern);
1309  int hit_type = -1;
1310  hit_type = valid ? 0 :
1311  ( missing ? 1 :
1312  ( inactive ? 2 : 3));
1313  if (hits_valid_.find(Key(hp.getSubStructure(pattern), hp.getSubSubStructure(pattern), mon)) == hits_valid_.end()) {
1314  LogDebug("TrackAnalyzer") << "Invalid combination of detector and subdetector: ("
1315  << hp.getSubStructure(pattern) << ", "
1316  << hp.getSubSubStructure(pattern) << ", "
1317  << mon
1318  << "): ignoring it.\n";
1319  continue;
1320  }
1321  switch (hit_type) {
1322  case 0:
1323  hits_valid_[Key(hp.getSubStructure(pattern), hp.getSubSubStructure(pattern), mon)]->Fill(monitoring);
1324  hits_total_[Key(hp.getSubStructure(pattern), hp.getSubSubStructure(pattern), mon)]->Fill(monitoring);
1325  break;
1326  case 2:
1327  if (!useInac) break;
1328  case 1:
1329  hits_total_[Key(hp.getSubStructure(pattern), hp.getSubSubStructure(pattern), mon)]->Fill(monitoring);
1330  break;
1331  default:
1332  LogDebug("TrackAnalyzer") << "Invalid hit category used " << hit_type << " ignored\n";
1333  }
1334  }
1335  }
1336  }
1337 
1338 }
1339 
1340 // book histograms at differnt measurement points
1341 // ---------------------------------------------------------------------------------//
1343 {
1344 
1345  // parameters from the configuration
1346  std::string QualName = conf_->getParameter<std::string>("Quality");
1347  std::string AlgoName = conf_->getParameter<std::string>("AlgoName");
1348 
1349  // use the AlgoName and Quality Name
1350  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
1351 
1352  // get binning from the configuration
1353  double Chi2NDFMin = conf_->getParameter<double>("Chi2NDFMin");
1354  double Chi2NDFMax = conf_->getParameter<double>("Chi2NDFMax");
1355 
1356  int RecHitBin = conf_->getParameter<int>( "RecHitBin");
1357  double RecHitMin = conf_->getParameter<double>("RecHitMin");
1358  double RecHitMax = conf_->getParameter<double>("RecHitMax");
1359 
1360  int RecLayBin = conf_->getParameter<int>( "RecHitBin");
1361  double RecLayMin = conf_->getParameter<double>("RecHitMin");
1362  double RecLayMax = conf_->getParameter<double>("RecHitMax");
1363 
1364 
1365  int PhiBin = conf_->getParameter<int>( "PhiBin");
1366  double PhiMin = conf_->getParameter<double>("PhiMin");
1367  double PhiMax = conf_->getParameter<double>("PhiMax");
1368 
1369  int EtaBin = conf_->getParameter<int>( "EtaBin");
1370  double EtaMin = conf_->getParameter<double>("EtaMin");
1371  double EtaMax = conf_->getParameter<double>("EtaMax");
1372 
1373  int ThetaBin = conf_->getParameter<int>( "ThetaBin");
1374  double ThetaMin = conf_->getParameter<double>("ThetaMin");
1375  double ThetaMax = conf_->getParameter<double>("ThetaMax");
1376 
1377  int TrackQBin = conf_->getParameter<int>( "TrackQBin");
1378  double TrackQMin = conf_->getParameter<double>("TrackQMin");
1379  double TrackQMax = conf_->getParameter<double>("TrackQMax");
1380 
1381  int TrackPtBin = conf_->getParameter<int>( "TrackPtBin");
1382  double TrackPtMin = conf_->getParameter<double>("TrackPtMin");
1383  double TrackPtMax = conf_->getParameter<double>("TrackPtMax");
1384 
1385  int TrackPBin = conf_->getParameter<int>( "TrackPBin");
1386  double TrackPMin = conf_->getParameter<double>("TrackPMin");
1387  double TrackPMax = conf_->getParameter<double>("TrackPMax");
1388 
1389  int TrackPxBin = conf_->getParameter<int>( "TrackPxBin");
1390  double TrackPxMin = conf_->getParameter<double>("TrackPxMin");
1391  double TrackPxMax = conf_->getParameter<double>("TrackPxMax");
1392 
1393  int TrackPyBin = conf_->getParameter<int>( "TrackPyBin");
1394  double TrackPyMin = conf_->getParameter<double>("TrackPyMin");
1395  double TrackPyMax = conf_->getParameter<double>("TrackPyMax");
1396 
1397  int TrackPzBin = conf_->getParameter<int>( "TrackPzBin");
1398  double TrackPzMin = conf_->getParameter<double>("TrackPzMin");
1399  double TrackPzMax = conf_->getParameter<double>("TrackPzMax");
1400 
1401  int ptErrBin = conf_->getParameter<int>( "ptErrBin");
1402  double ptErrMin = conf_->getParameter<double>("ptErrMin");
1403  double ptErrMax = conf_->getParameter<double>("ptErrMax");
1404 
1405  int pxErrBin = conf_->getParameter<int>( "pxErrBin");
1406  double pxErrMin = conf_->getParameter<double>("pxErrMin");
1407  double pxErrMax = conf_->getParameter<double>("pxErrMax");
1408 
1409  int pyErrBin = conf_->getParameter<int>( "pyErrBin");
1410  double pyErrMin = conf_->getParameter<double>("pyErrMin");
1411  double pyErrMax = conf_->getParameter<double>("pyErrMax");
1412 
1413  int pzErrBin = conf_->getParameter<int>( "pzErrBin");
1414  double pzErrMin = conf_->getParameter<double>("pzErrMin");
1415  double pzErrMax = conf_->getParameter<double>("pzErrMax");
1416 
1417  int pErrBin = conf_->getParameter<int>( "pErrBin");
1418  double pErrMin = conf_->getParameter<double>("pErrMin");
1419  double pErrMax = conf_->getParameter<double>("pErrMax");
1420 
1421  int phiErrBin = conf_->getParameter<int>( "phiErrBin");
1422  double phiErrMin = conf_->getParameter<double>("phiErrMin");
1423  double phiErrMax = conf_->getParameter<double>("phiErrMax");
1424 
1425  int etaErrBin = conf_->getParameter<int>( "etaErrBin");
1426  double etaErrMin = conf_->getParameter<double>("etaErrMin");
1427  double etaErrMax = conf_->getParameter<double>("etaErrMax");
1428 
1429 
1430  double Chi2ProbMin = conf_->getParameter<double>("Chi2ProbMin");
1431  double Chi2ProbMax = conf_->getParameter<double>("Chi2ProbMax");
1432 
1433  ibooker.setCurrentFolder(TopFolder_);
1434 
1435  TkParameterMEs tkmes;
1436 
1437  std::string histTag = (sname == "default") ? CategoryName : sname + "_" + CategoryName;
1438 
1439  if(doAllPlots_) {
1440 
1441  // general properties
1442  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1443 
1444  if (doThetaPlots_) {
1445  histname = "Chi2oNDFVsTheta_" + histTag;
1446  tkmes.Chi2oNDFVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,"");
1447  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1);
1448  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2);
1449  }
1450  histname = "Chi2oNDFVsPhi_" + histTag;
1451  tkmes.Chi2oNDFVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,"");
1452  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1);
1453  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2);
1454 
1455  histname = "Chi2ProbVsPhi_" + histTag;
1456  tkmes.Chi2ProbVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax);
1457  tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1);
1458  tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2);
1459 
1460  histname = "Chi2ProbVsEta_" + histTag;
1461  tkmes.Chi2ProbVsEta = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax);
1462  tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1);
1463  tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2);
1464 
1465  }
1466 
1467  // general properties
1468  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1469 
1470 
1471  histname = "Chi2oNDFVsEta_" + histTag;
1472  tkmes.Chi2oNDFVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,"");
1473  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1);
1474  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2);
1475 
1476  histname = "Chi2oNDFVsPt_" + histTag;
1477  tkmes.Chi2oNDFVsPt = ibooker.bookProfile(histname, histname, TrackPtBin, TrackPtMin, TrackPtMax, Chi2NDFMin, Chi2NDFMax,"");
1478  tkmes.Chi2oNDFVsPt->setAxisTitle("Track p_{T} (GeV/c)", 1);
1479  tkmes.Chi2oNDFVsPt->setAxisTitle("Track #chi^{2}/ndf",2);
1480 
1481  histname = "Chi2oNDFVsNHits_" + histTag;
1482  tkmes.Chi2oNDFVsNHits = ibooker.bookProfile(histname, histname, 50, 0, 50, Chi2NDFMin, Chi2NDFMax,"");
1483  tkmes.Chi2oNDFVsNHits->setAxisTitle("Track NHits", 1);
1484  tkmes.Chi2oNDFVsNHits->setAxisTitle("Track #chi^{2}/ndf",2);
1485 
1486  histname = "TrackP_" + histTag;
1487  tkmes.TrackP = ibooker.book1D(histname, histname, TrackPBin, TrackPMin, TrackPMax);
1488  tkmes.TrackP->setAxisTitle("Track |p| (GeV/c)", 1);
1489  tkmes.TrackP->setAxisTitle("Number of Tracks",2);
1490 
1491  histname = "TrackPt_" + histTag;
1492  tkmes.TrackPt = ibooker.book1D(histname, histname, TrackPtBin, TrackPtMin, TrackPtMax);
1493  tkmes.TrackPt->setAxisTitle("Track p_{T} (GeV/c)", 1);
1494  tkmes.TrackPt->setAxisTitle("Number of Tracks",2);
1495 
1496  if (doTrackPxPyPlots_) {
1497  histname = "TrackPx_" + histTag;
1498  tkmes.TrackPx = ibooker.book1D(histname, histname, TrackPxBin, TrackPxMin, TrackPxMax);
1499  tkmes.TrackPx->setAxisTitle("Track p_{x} (GeV/c)", 1);
1500  tkmes.TrackPx->setAxisTitle("Number of Tracks",2);
1501 
1502  histname = "TrackPy_" + histTag;
1503  tkmes.TrackPy = ibooker.book1D(histname, histname, TrackPyBin, TrackPyMin, TrackPyMax);
1504  tkmes.TrackPy->setAxisTitle("Track p_{y} (GeV/c)", 1);
1505  tkmes.TrackPy->setAxisTitle("Number of Tracks",2);
1506  }
1507  histname = "TrackPz_" + histTag;
1508  tkmes.TrackPz = ibooker.book1D(histname, histname, TrackPzBin, TrackPzMin, TrackPzMax);
1509  tkmes.TrackPz->setAxisTitle("Track p_{z} (GeV/c)", 1);
1510  tkmes.TrackPz->setAxisTitle("Number of Tracks",2);
1511 
1512  histname = "TrackPhi_" + histTag;
1513  tkmes.TrackPhi = ibooker.book1D(histname, histname, PhiBin, PhiMin, PhiMax);
1514  tkmes.TrackPhi->setAxisTitle("Track #phi", 1);
1515  tkmes.TrackPhi->setAxisTitle("Number of Tracks",2);
1516 
1517  histname = "TrackEta_" + histTag;
1518  tkmes.TrackEta = ibooker.book1D(histname, histname, EtaBin, EtaMin, EtaMax);
1519  tkmes.TrackEta->setAxisTitle("Track #eta", 1);
1520  tkmes.TrackEta->setAxisTitle("Number of Tracks",2);
1521 
1522  histname = "TrackEtaPhi_" + histTag;
1523  tkmes.TrackEtaPhi = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax);
1524  tkmes.TrackEtaPhi->setAxisTitle("Track #eta", 1);
1525  tkmes.TrackEtaPhi->setAxisTitle("Track #phi", 2);
1526 
1527  histname = "TrackEtaPhiInner_" + histTag;
1528  tkmes.TrackEtaPhiInner = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax);
1529  tkmes.TrackEtaPhiInner->setAxisTitle("Track #eta", 1);
1530  tkmes.TrackEtaPhiInner->setAxisTitle("Track #phi", 2);
1531 
1532  histname = "TrackEtaPhiOuter_" + histTag;
1533  tkmes.TrackEtaPhiOuter = ibooker.book2D(histname, histname, EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax);
1534  tkmes.TrackEtaPhiOuter->setAxisTitle("Track #eta", 1);
1535  tkmes.TrackEtaPhiOuter->setAxisTitle("Track #phi", 2);
1536 
1537 
1538 
1539  if (doThetaPlots_) {
1540  histname = "TrackTheta_" + histTag;
1541  tkmes.TrackTheta = ibooker.book1D(histname, histname, ThetaBin, ThetaMin, ThetaMax);
1542  tkmes.TrackTheta->setAxisTitle("Track #theta", 1);
1543  tkmes.TrackTheta->setAxisTitle("Number of Tracks",2);
1544  }
1545  histname = "TrackQ_" + histTag;
1546  tkmes.TrackQ = ibooker.book1D(histname, histname, TrackQBin, TrackQMin, TrackQMax);
1547  tkmes.TrackQ->setAxisTitle("Track Charge", 1);
1548  tkmes.TrackQ->setAxisTitle("Number of Tracks",2);
1549 
1550  histname = "TrackPErrOverP_" + histTag;
1551  tkmes.TrackPErr = ibooker.book1D(histname, histname, pErrBin, pErrMin, pErrMax);
1552  tkmes.TrackPErr->setAxisTitle("track error(p)/p", 1);
1553  tkmes.TrackPErr->setAxisTitle("Number of Tracks",2);
1554 
1555  histname = "TrackPtErrOverPt_" + histTag;
1556  tkmes.TrackPtErr = ibooker.book1D(histname, histname, ptErrBin, ptErrMin, ptErrMax);
1557  tkmes.TrackPtErr->setAxisTitle("track error(p_{T})/p_{T}", 1);
1558  tkmes.TrackPtErr->setAxisTitle("Number of Tracks",2);
1559 
1560  histname = "TrackPtErrOverPtVsEta_" + histTag;
1561  tkmes.TrackPtErrVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, ptErrMin, ptErrMax);
1562  tkmes.TrackPtErrVsEta->setAxisTitle("Track #eta",1);
1563  tkmes.TrackPtErrVsEta->setAxisTitle("track error(p_{T})/p_{T}", 2);
1564 
1565  if (doTrackPxPyPlots_) {
1566  histname = "TrackPxErrOverPx_" + histTag;
1567  tkmes.TrackPxErr = ibooker.book1D(histname, histname, pxErrBin, pxErrMin, pxErrMax);
1568  tkmes.TrackPxErr->setAxisTitle("track error(p_{x})/p_{x}", 1);
1569  tkmes.TrackPxErr->setAxisTitle("Number of Tracks",2);
1570 
1571  histname = "TrackPyErrOverPy_" + histTag;
1572  tkmes.TrackPyErr = ibooker.book1D(histname, histname, pyErrBin, pyErrMin, pyErrMax);
1573  tkmes.TrackPyErr->setAxisTitle("track error(p_{y})/p_{y}", 1);
1574  tkmes.TrackPyErr->setAxisTitle("Number of Tracks",2);
1575  }
1576  histname = "TrackPzErrOverPz_" + histTag;
1577  tkmes.TrackPzErr = ibooker.book1D(histname, histname, pzErrBin, pzErrMin, pzErrMax);
1578  tkmes.TrackPzErr->setAxisTitle("track error(p_{z})/p_{z}", 1);
1579  tkmes.TrackPzErr->setAxisTitle("Number of Tracks",2);
1580 
1581  histname = "TrackPhiErr_" + histTag;
1582  tkmes.TrackPhiErr = ibooker.book1D(histname, histname, phiErrBin, phiErrMin, phiErrMax);
1583  tkmes.TrackPhiErr->setAxisTitle("track error(#phi)");
1584  tkmes.TrackPhiErr->setAxisTitle("Number of Tracks",2);
1585 
1586  histname = "TrackEtaErr_" + histTag;
1587  tkmes.TrackEtaErr = ibooker.book1D(histname, histname, etaErrBin, etaErrMin, etaErrMax);
1588  tkmes.TrackEtaErr->setAxisTitle("track error(#eta)");
1589  tkmes.TrackEtaErr->setAxisTitle("Number of Tracks",2);
1590 
1591  // rec hit profiles
1592  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1593  histname = "NumberOfRecHitsPerTrackVsPhi_" + histTag;
1594  tkmes.NumberOfRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitBin, RecHitMin, RecHitMax,"");
1595  tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1596  tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of RecHits in each Track",2);
1597 
1598  if (doThetaPlots_) {
1599  histname = "NumberOfRecHitsPerTrackVsTheta_" + histTag;
1600  tkmes.NumberOfRecHitsPerTrackVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecHitBin, RecHitMin, RecHitMax,"");
1601  tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Track #phi",1);
1602  tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Number of RecHits in each Track",2);
1603  }
1604  histname = "NumberOfRecHitsPerTrackVsEta_" + histTag;
1605  tkmes.NumberOfRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitBin, RecHitMin, RecHitMax,"");
1606  tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1607  tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of RecHits in each Track",2);
1608 
1609  histname = "NumberOfValidRecHitsPerTrackVsPhi_" + histTag;
1610  tkmes.NumberOfValidRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,"");
1611  tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1612  tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Number of valid RecHits in each Track",2);
1613 
1614  histname = "NumberOfValidRecHitsPerTrackVsEta_" + histTag;
1615  tkmes.NumberOfValidRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,"");
1616  tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1617  tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Number of valid RecHits in each Track",2);
1618 
1619  histname = "NumberOfValidRecHitsPerTrackVsPt_" + histTag;
1620  tkmes.NumberOfValidRecHitsPerTrackVsPt = ibooker.bookProfile(histname, histname, TrackPtBin, TrackPtMin, TrackPtMax, RecHitMin, RecHitMax,"");
1621  tkmes.NumberOfValidRecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]",1);
1622  tkmes.NumberOfValidRecHitsPerTrackVsPt->setAxisTitle("Number of valid RecHits in each Track",2);
1623 
1625  histname = "NumberOfLayersPerTrackVsPhi_" + histTag;
1626  tkmes.NumberOfLayersPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecLayBin, RecLayMin, RecLayMax,"");
1627  tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1);
1628  tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of Layers in each Track",2);
1629 
1630  if (doThetaPlots_) {
1631  histname = "NumberOfLayersPerTrackVsTheta_" + histTag;
1632  tkmes.NumberOfLayersPerTrackVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecLayBin, RecLayMin, RecLayMax,"");
1633  tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Track #phi",1);
1634  tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Number of Layers in each Track",2);
1635  }
1636  histname = "NumberOfLayersPerTrackVsEta_" + histTag;
1637  tkmes.NumberOfLayersPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecLayBin, RecLayMin, RecLayMax,"");
1638  tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1);
1639  tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of Layers in each Track",2);
1640 
1641  if (doThetaPlots_) {
1642  histname = "Chi2oNDFVsTheta_" + histTag;
1643  tkmes.Chi2oNDFVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,"");
1644  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1);
1645  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2);
1646  }
1647  if (doAllPlots_) {
1648  histname = "Chi2oNDFVsPhi_" + histTag;
1649  tkmes.Chi2oNDFVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,"");
1650  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1);
1651  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2);
1652 
1653  histname = "Chi2oNDFVsEta_" + histTag;
1654  tkmes.Chi2oNDFVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,"");
1655  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1);
1656  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2);
1657 
1658  histname = "Chi2ProbVsPhi_" + histTag;
1659  tkmes.Chi2ProbVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax);
1660  tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1);
1661  tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2);
1662 
1663  histname = "Chi2ProbVsEta_" + histTag;
1664  tkmes.Chi2ProbVsEta = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax);
1665  tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1);
1666  tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2);
1667  }
1668 
1669  // now put the MEs in the map
1670  TkParameterMEMap.insert( std::make_pair(sname, tkmes) );
1671 
1672 }
1673 
1674 
1675 // fill histograms at differnt measurement points
1676 // ---------------------------------------------------------------------------------//
1678 {
1679  //get the kinematic parameters
1680  double p, px, py, pz, pt, theta, phi, eta, q;
1681  double pxerror, pyerror, pzerror, pterror, perror, phierror, etaerror;
1682 
1683  auto phiIn = track.innerPosition().phi();
1684  auto etaIn = track.innerPosition().eta();
1685  auto phiOut = track.outerPosition().phi();
1686  auto etaOut = track.outerPosition().eta();
1687 
1688 
1689  if (sname == "default") {
1690 
1691  p = track.p();
1692  px = track.px();
1693  py = track.py();
1694  pz = track.pz();
1695  pt = track.pt();
1696  phi = track.phi();
1697  theta = track.theta();
1698  eta = track.eta();
1699  q = track.charge();
1700 
1701  pterror = (pt) ? track.ptError()/(pt*pt) : 0.0;
1702  pxerror = -1.0;
1703  pyerror = -1.0;
1704  pzerror = -1.0;
1705  perror = -1.0;
1706  phierror = track.phiError();
1707  etaerror = track.etaError();
1708 
1709  } else {
1710 
1712  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
1713  reco::TransientTrack TransTrack = theB->build(track);
1714 
1716 
1717  if (sname == "OuterSurface") TSOS = TransTrack.outermostMeasurementState();
1718  else if (sname == "InnerSurface") TSOS = TransTrack.innermostMeasurementState();
1719  else if (sname == "ImpactPoint") TSOS = TransTrack.impactPointState();
1720 
1721  p = TSOS.globalMomentum().mag();
1722  px = TSOS.globalMomentum().x();
1723  py = TSOS.globalMomentum().y();
1724  pz = TSOS.globalMomentum().z();
1725  pt = TSOS.globalMomentum().perp();
1726  phi = TSOS.globalMomentum().phi();
1727  theta = TSOS.globalMomentum().theta();
1728  eta = TSOS.globalMomentum().eta();
1729  q = TSOS.charge();
1730 
1731  //get the error of the kinimatic parameters
1733  double partialPterror = errors(3,3)*pow(TSOS.globalMomentum().x(),2) + errors(4,4)*pow(TSOS.globalMomentum().y(),2);
1734  pterror = sqrt(partialPterror)/TSOS.globalMomentum().perp();
1735  pxerror = sqrt(errors(3,3))/TSOS.globalMomentum().x();
1736  pyerror = sqrt(errors(4,4))/TSOS.globalMomentum().y();
1737  pzerror = sqrt(errors(5,5))/TSOS.globalMomentum().z();
1738  perror = sqrt(partialPterror+errors(5,5)*pow(TSOS.globalMomentum().z(),2))/TSOS.globalMomentum().mag();
1739  phierror = sqrt(TSOS.curvilinearError().matrix()(2,2));
1740  etaerror = sqrt(TSOS.curvilinearError().matrix()(1,1))*fabs(sin(TSOS.globalMomentum().theta()));
1741 
1742  }
1743 
1744  std::map<std::string, TkParameterMEs>::iterator iPos = TkParameterMEMap.find(sname);
1745  if (iPos != TkParameterMEMap.end()) {
1746 
1747  TkParameterMEs tkmes = iPos->second;
1748 
1749  // momentum
1750  tkmes.TrackP->Fill(p);
1751  if (doTrackPxPyPlots_) {
1752  tkmes.TrackPx->Fill(px);
1753  tkmes.TrackPy->Fill(py);
1754  }
1755  tkmes.TrackPz->Fill(pz);
1756  tkmes.TrackPt->Fill(pt);
1757 
1758  // angles
1759  tkmes.TrackPhi->Fill(phi);
1760  tkmes.TrackEta->Fill(eta);
1761  tkmes.TrackEtaPhi->Fill(eta,phi);
1762  tkmes.TrackEtaPhiInner->Fill(etaIn,phiIn);
1763  tkmes.TrackEtaPhiOuter->Fill(etaOut,phiOut);
1764 
1765  if (doThetaPlots_) {
1766  tkmes.TrackTheta->Fill(theta);
1767  }
1768  tkmes.TrackQ->Fill(q);
1769 
1770  // errors
1771  tkmes.TrackPtErr->Fill(pterror);
1772  tkmes.TrackPtErrVsEta->Fill(eta,pterror);
1773  if (doTrackPxPyPlots_) {
1774  tkmes.TrackPxErr->Fill(pxerror);
1775  tkmes.TrackPyErr->Fill(pyerror);
1776  }
1777  tkmes.TrackPzErr->Fill(pzerror);
1778  tkmes.TrackPErr->Fill(perror);
1779  tkmes.TrackPhiErr->Fill(phierror);
1780  tkmes.TrackEtaErr->Fill(etaerror);
1781 
1783  int nValidRecHits = track.numberOfValidHits();
1784  // rec hits
1785  tkmes.NumberOfRecHitsPerTrackVsPhi->Fill(phi, nRecHits);
1786  if (doThetaPlots_) {
1787  tkmes.NumberOfRecHitsPerTrackVsTheta->Fill(theta,nRecHits);
1788  }
1789  tkmes.NumberOfRecHitsPerTrackVsEta->Fill(eta, nRecHits);
1790 
1791  tkmes.NumberOfValidRecHitsPerTrackVsPhi->Fill(phi, nValidRecHits);
1792  tkmes.NumberOfValidRecHitsPerTrackVsEta->Fill(eta, nValidRecHits);
1793  tkmes.NumberOfValidRecHitsPerTrackVsPt ->Fill(pt, nValidRecHits);
1794 
1796  // rec layers
1797  tkmes.NumberOfLayersPerTrackVsPhi->Fill(phi, nLayers);
1798  if (doThetaPlots_) {
1799  tkmes.NumberOfLayersPerTrackVsTheta->Fill(theta, nLayers);
1800  }
1801  tkmes.NumberOfLayersPerTrackVsEta->Fill(eta, nLayers);
1802 
1803  double chi2prob = TMath::Prob(track.chi2(),(int)track.ndof());
1804  double chi2oNDF = track.normalizedChi2();
1805 
1806  tkmes.Chi2oNDFVsEta->Fill(eta, chi2oNDF);
1807  tkmes.Chi2oNDFVsPt->Fill(pt, chi2oNDF);
1808  tkmes.Chi2oNDFVsNHits->Fill(nRecHits, chi2oNDF);
1809 
1810  if(doAllPlots_) {
1811 
1812  // general properties
1813  if (doThetaPlots_) {
1814  tkmes.Chi2oNDFVsTheta->Fill(theta, chi2oNDF);
1815  }
1816  tkmes.Chi2oNDFVsPhi->Fill(phi, chi2oNDF);
1817  tkmes.Chi2ProbVsPhi->Fill(phi, chi2prob);
1818  tkmes.Chi2ProbVsEta->Fill(eta, chi2prob);
1819  }
1820 
1821  }
1822 
1823 }
1824 
1825 
1827 {
1828 
1829  // parameters from the configuration
1830  std::string QualName = conf_->getParameter<std::string>("Quality");
1831  std::string AlgoName = conf_->getParameter<std::string>("AlgoName");
1832 
1833  // use the AlgoName and Quality Name
1834  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
1835 
1836  int PhiBin = conf_->getParameter<int>( "PhiBin");
1837  double PhiMin = conf_->getParameter<double>("PhiMin");
1838  double PhiMax = conf_->getParameter<double>("PhiMax");
1839 
1840  int EtaBin = conf_->getParameter<int>( "EtaBin");
1841  double EtaMin = conf_->getParameter<double>("EtaMin");
1842  double EtaMax = conf_->getParameter<double>("EtaMax");
1843 
1844  int PtBin = conf_->getParameter<int>( "TrackPtBin");
1845  double PtMin = conf_->getParameter<double>("TrackPtMin");
1846  double PtMax = conf_->getParameter<double>("TrackPtMax");
1847 
1848  // book hit property histograms
1849  // ---------------------------------------------------------------------------------//
1850  ibooker.setCurrentFolder(TopFolder_+"/HitProperties");
1851 
1852 
1853 
1854  std::vector<std::string> subdetectors = conf_->getParameter<std::vector<std::string> >("subdetectors");
1855  int detBin = conf_->getParameter<int>("subdetectorBin");
1856 
1857  for ( auto det : subdetectors ) {
1858 
1859  // hits properties
1860  ibooker.setCurrentFolder(TopFolder_+"/HitProperties/"+det);
1861 
1862  TkRecHitsPerSubDetMEs recHitsPerSubDet_mes;
1863 
1864  recHitsPerSubDet_mes.detectorTag = det;
1865  int detID = -1;
1866  if ( det == "TIB" ) detID = StripSubdetector::TIB; // 3
1867  if ( det == "TOB" ) detID = StripSubdetector::TOB; // 5
1868  if ( det == "TID" ) detID = StripSubdetector::TID; // 4
1869  if ( det == "TEC" ) detID = StripSubdetector::TEC; // 6
1870  if ( det == "PixBarrel" ) detID = PixelSubdetector::PixelBarrel; // 1
1871  if ( det == "PixEndcap" ) detID = PixelSubdetector::PixelEndcap; // 2
1872  if ( det == "Pixel" ) detID = 0;
1873  if ( det == "Strip" ) detID = 7;
1874 
1875  recHitsPerSubDet_mes.detectorId = detID;
1876 
1877  histname = "NumberOfRecHitsPerTrack_" + det + "_" + CategoryName;
1878  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack = ibooker.book1D(histname, histname, detBin, -0.5, double(detBin)-0.5);
1879  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of " + det + " valid RecHits in each Track",1);
1880  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
1881 
1882  histname = "NumberOfRecHitsPerTrackVsPhi_" + det + "_" + CategoryName;
1883  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,"");
1884  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1885  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of " + det + " valid RecHits in each Track",2);
1886 
1887  histname = "NumberOfRecHitsPerTrackVsEta_" + det + "_" + CategoryName;
1888  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,"");
1889  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1890  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of " + det + " valid RecHits in each Track",2);
1891 
1892  histname = "NumberOfRecHitsPerTrackVsPt_" + det + "_" + CategoryName;
1893  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPt = ibooker.bookProfile(histname, histname, PtBin, PtMin, PtMax, detBin, -0.5, double(detBin)-0.5,"");
1894  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]",1);
1895  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPt->setAxisTitle("Number of " + det + " valid RecHits in each Track",2);
1896 
1897  histname = "NumberOfLayersPerTrack_" + det + "_" + CategoryName;
1898  recHitsPerSubDet_mes.NumberOfLayersPerTrack = ibooker.book1D(histname, histname, detBin, -0.5, double(detBin)-0.5);
1899  recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of " + det + " valid Layers in each Track",1);
1900  recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of Tracks", 2);
1901 
1902  histname = "NumberOfLayersPerTrackVsPhi_" + det + "_" + CategoryName;
1903  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,"");
1904  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1);
1905  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of " + det + " valid Layers in each Track",2);
1906 
1907  histname = "NumberOfLayersPerTrackVsEta_" + det + "_" + CategoryName;
1908  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,"");
1909  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1);
1910  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of " + det + " valid Layers in each Track",2);
1911 
1912  histname = "NumberOfLayersPerTrackVsPt_" + det + "_" + CategoryName;
1913  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPt = ibooker.bookProfile(histname, histname, PtBin, PtMin, PtMax, detBin, -0.5, double(detBin)-0.5,"");
1914  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPt->setAxisTitle("Track p_{T} [GeV]",1);
1915  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPt->setAxisTitle("Number of " + det + " valid Layers in each Track",2);
1916 
1917  TkRecHitsPerSubDetMEMap.insert(std::pair<std::string,TkRecHitsPerSubDetMEs>(det,recHitsPerSubDet_mes));
1918 
1919 
1920  }
1921 
1922 
1923 }
1924 
1925 
1927 {
1928 
1929  double phi = track.phi();
1930  double eta = track.eta();
1931  double pt = track.pt();
1932 
1933  for ( std::map<std::string,TkRecHitsPerSubDetMEs>::iterator it = TkRecHitsPerSubDetMEMap.begin();
1934  it != TkRecHitsPerSubDetMEMap.end(); it++ ) {
1935 
1936  int nValidLayers = 0;
1937  int nValidRecHits = 0;
1938  int substr = it->second.detectorId;
1939  switch(substr) {
1940  case 0 :
1941  nValidLayers = track.hitPattern().pixelBarrelLayersWithMeasurement()
1942  + track.hitPattern().pixelEndcapLayersWithMeasurement(); // case 0: pixel
1943  nValidRecHits = track.hitPattern().numberOfValidPixelBarrelHits()
1944  + track.hitPattern().numberOfValidPixelEndcapHits(); // case 0: pixel
1945  break;
1946  case StripSubdetector::TIB :
1947  nValidLayers = track.hitPattern().stripTIBLayersWithMeasurement(); // case 3: strip TIB
1948  nValidRecHits = track.hitPattern().numberOfValidStripTIBHits(); // case 3: strip TIB
1949  break;
1950  case StripSubdetector::TID :
1951  nValidLayers = track.hitPattern().stripTIDLayersWithMeasurement(); // case 4: strip TID
1952  nValidRecHits = track.hitPattern().numberOfValidStripTIDHits(); // case 4: strip TID
1953  break;
1954  case StripSubdetector::TOB :
1955  nValidLayers = track.hitPattern().stripTOBLayersWithMeasurement(); // case 5: strip TOB
1956  nValidRecHits = track.hitPattern().numberOfValidStripTOBHits(); // case 5: strip TOB
1957  break;
1958  case StripSubdetector::TEC :
1959  nValidLayers = track.hitPattern().stripTECLayersWithMeasurement(); // case 6: strip TEC
1960  nValidRecHits = track.hitPattern().numberOfValidStripTECHits(); // case 6: strip TEC
1961  break;
1963  nValidLayers = track.hitPattern().pixelBarrelLayersWithMeasurement(); // case 1: pixel PXB
1964  nValidRecHits = track.hitPattern().numberOfValidPixelBarrelHits(); // case 1: pixel PXB
1965  break;
1967  nValidLayers = track.hitPattern().pixelEndcapLayersWithMeasurement(); // case 2: pixel PXF
1968  nValidRecHits = track.hitPattern().numberOfValidPixelEndcapHits(); // case 2: pixel PXF
1969  break;
1970  case 7 :
1971  nValidLayers = track.hitPattern().stripTIBLayersWithMeasurement() // case 7: strip
1975  nValidRecHits = track.hitPattern().numberOfValidStripTIBHits() // case 7: strip
1979  break;
1980  default :
1981  break;
1982  }
1983 
1984  //Fill Layers and RecHits
1985  it->second.NumberOfRecHitsPerTrack -> Fill(nValidRecHits);
1986  it->second.NumberOfRecHitsPerTrackVsPhi -> Fill(phi, nValidRecHits);
1987  it->second.NumberOfRecHitsPerTrackVsEta -> Fill(eta, nValidRecHits);
1988  it->second.NumberOfRecHitsPerTrackVsPt -> Fill(pt, nValidRecHits);
1989 
1990  it->second.NumberOfLayersPerTrack -> Fill(nValidLayers);
1991  it->second.NumberOfLayersPerTrackVsPhi -> Fill(phi, nValidLayers);
1992  it->second.NumberOfLayersPerTrackVsEta -> Fill(eta, nValidLayers);
1993  it->second.NumberOfLayersPerTrackVsPt -> Fill(pt, nValidLayers);
1994  }
1995 
1996 }
1997 //
1998 // -- Set Lumi Flag
1999 //
2001 
2002  TkParameterMEs tkmes;
2005 }
2006 //
2007 // -- Apply SoftReset
2008 //
2010  TkParameterMEs tkmes;
2011  dqmStore_->softReset(Chi2oNDF);
2012  dqmStore_->softReset(NumberOfRecHitsPerTrack);
2013 }
2014 //
2015 // -- Apply Reset
2016 //
2018  TkParameterMEs tkmes;
2021 }
2022 //
2023 // -- Remove SoftReset
2024 //
2026  TkParameterMEs tkmes;
2027  dqmStore_->disableSoftReset(Chi2oNDF);
2028  dqmStore_->disableSoftReset(NumberOfRecHitsPerTrack);
2029 }
2030 
2031 
#define LogDebug(id)
MonitorElement * sipDzToPV
std::map< std::string, TkParameterMEs > TkParameterMEMap
MonitorElement * NumberOfValidRecHitsPerTrack
MonitorElement * Ptdist_HighPurity
double p() const
momentum vector magnitude
Definition: TrackBase.h:615
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:604
unsigned int bx_
T getParameter(std::string const &) const
MonitorElement * NumberOfValidRecHitsPerTrackVsPt
MonitorElement * sip2dToPV
const Point & referencePoint() const
Reference point on the track.
Definition: TrackBase.h:681
MonitorElement * Chi2oNDFVsTheta
double d0Error() const
error on d0
Definition: TrackBase.h:802
MonitorElement * xPointOfClosestApproachVsZ0wrtPV
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
MonitorElement * NumberOfValidRecHitsPerTrackVsEta
MonitorElement * NumberOfValidRecHitsPerTrackVsPhi
void fillHistosForEfficiencyFromHitPatter(const reco::Track &track, const std::string suffix, const float monitoring, bool useInac)
T perp() const
Definition: PV3DBase.h:72
MonitorElement * dNdPt_HighPurity
MonitorElement * sipDxyToPV
double validFraction() const
fraction of valid hits on the track
Definition: TrackBase.h:832
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
Definition: TrackBase.h:597
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
MonitorElement * NumberOfValidRecHitVsPhiVsEtaPerTrack
int stripTIBLayersWithMeasurement() const
Definition: HitPattern.cc:582
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:561
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:160
MonitorElement * NumberOfValidRecHitsPerTrackVsPhi
MonitorElement * LongDCASig
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
double zError() const
error on z
Definition: Vertex.h:123
MonitorElement * yPointOfClosestApproach
double theta() const
polar angle
Definition: TrackBase.h:579
double dxyError() const
error on dxy
Definition: TrackBase.h:796
void doSoftReset(DQMStore *dqmStore_)
MonitorElement * NumberOfMIRecHitsPerTrackVsPt
const CurvilinearTrajectoryError & curvilinearError() const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
MonitorElement * NumberOfValidRecHitsPerTrackVsPt
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
unsigned int good_vertices_
void initHisto(DQMStore::IBooker &ibooker, const edm::EventSetup &, const edm::ParameterSet &)
uint8_t stopReason() const
Definition: TrackBase.h:400
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
MonitorElement * DistanceOfClosestApproachToBSVsPhi
TH1 * getTH1() const
const CartesianTrajectoryError cartesianError() const
MonitorElement * zPointOfClosestApproachToPV
Geom::Theta< T > theta() const
reco::TransientTrack build(const reco::Track *p) const
T y() const
Definition: PV3DBase.h:63
double etaError() const
error on eta
Definition: TrackBase.h:784
int bunchCrossing() const
Definition: EventBase.h:66
std::string stateName_
Definition: TrackAnalyzer.h:83
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * NumberOfLostRecHitsPerTrackVsPt
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:645
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:826
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
data_type const * const_iterator
Definition: DetSetNew.h:30
const double EtaMax[kNumberCalorimeter]
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:627
static const std::string StopReasonName[]
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:499
MonitorElement * yPointOfClosestApproachVsZ0wrtPV
#define nullptr
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:65
MonitorElement * NumberOfRecHitsPerTrackVsTheta
edm::EDGetTokenT< LumiScalersCollection > lumiscalersToken_
Definition: TrackAnalyzer.h:78
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:518
MonitorElement * sipDxyToBS
const Point & position() const
position
Definition: Vertex.h:109
int pixelEndcapLayersWithMeasurement() const
Definition: HitPattern.cc:570
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:868
#define constexpr
MonitorElement * algorithm
MonitorElement * NumberOfLayersPerTrackVsTheta
TrajectoryStateOnSurface innermostMeasurementState() const
static double XSEC_PIXEL_CLUSTER
Definition: GetLumi.h:41
unsigned int numberOfLayers(int subdet) const
void Fill(long long x)
int numberOfLostTrackerHits(HitCategory category) const
Definition: HitPattern.h:907
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:55
TrackAlgorithm algo() const
Definition: TrackBase.h:497
void bookHistosForHitProperties(DQMStore::IBooker &ibooker)
MonitorElement * NumberOfMORecHitVsPtVsEtaPerTrack
MonitorElement * yPointOfClosestApproachToPV
void bookHistosForTrackerSpecific(DQMStore::IBooker &ibooker)
MonitorElement * xPointOfClosestApproach
MonitorElement * Chi2oNDF_lumiFlag
MonitorElement * DistanceOfClosestApproach
MonitorElement * Chi2oNDF
MonitorElement * NumberOfRecHitsPerTrackVsPhi
static const unsigned int lastBunchCrossing
Definition: GetLumi.h:48
MonitorElement * ValidFractionPerTrack
bool doRecHitVsPtVsEtaPerTrack_
Definition: TrackAnalyzer.h:94
MonitorElement * NumberOfLostRecHitVsPhiVsEtaPerTrack
int iEvent
Definition: GenABIO.cc:230
def cat(path)
Definition: eostools.py:400
T mag() const
Definition: PV3DBase.h:67
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:651
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
Definition: HitPattern.cc:341
int numberOfValidPixelBarrelHits() const
Definition: HitPattern.h:843
void setBX(const edm::Event &)
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:549
TrackAnalyzer(const edm::ParameterSet &)
MonitorElement * NumberOfLayersVsPhiVsEtaPerTrack[5]
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:166
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * DistanceOfClosestApproachToPVVsPhi
MonitorElement * NumberOfLayersPerTrackVsEta
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:555
MonitorElement * NumberOfMORecHitsPerTrackVsPt
int stripTIDLayersWithMeasurement() const
Definition: HitPattern.cc:593
MonitorElement * NumberOfLayersPerTrackVsPhi
susybsm::HSCParticleRefProd hp
Definition: classes.h:27
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * NumberOfRecHitsPerTrackVsEta
MonitorElement * xPointOfClosestApproachVsZ0wrtBS
double pt() const
track transverse momentum
Definition: TrackBase.h:621
MonitorElement * Chi2ProbVsEta
T z() const
Definition: PV3DBase.h:64
MonitorElement * stoppingSourceVSeta
void bookHistosForLScertification(DQMStore::IBooker &ibooker)
MonitorElement * DistanceOfClosestApproachToBS
MonitorElement * yPointOfClosestApproachVsZ0wrtBS
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:763
double phiError() const
error on phi
Definition: TrackBase.h:790
int numberOfAllHits(HitCategory category) const
Definition: HitPattern.h:807
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
void fillHistosForTrackerSpecific(const reco::Track &track)
def pv(vc)
Definition: MetAnalyzer.py:6
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::ParameterSet const * conf_
Definition: TrackAnalyzer.h:81
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:863
MonitorElement * NumberOfMIRecHitVsPtVsEtaPerTrack
const double EtaMin[kNumberCalorimeter]
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:820
int numberOfValidStripTECHits() const
Definition: HitPattern.h:873
static double CM2_TO_NANOBARN
Definition: GetLumi.h:47
void bookHistosForEfficiencyFromHitPatter(DQMStore::IBooker &ibooker, const edm::EventSetup &iSetup, const std::string suffix, bool useInac)
MonitorElement * dNhitdPt_HighPurity
MonitorElement * sipDzToBS
T min(T a, T b)
Definition: MathUtil.h:58
MonitorElement * xPointOfClosestApproachVsZ0wrt000
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: TrackAnalyzer.h:75
TrajectoryStateOnSurface outermostMeasurementState() const
std::array< T, N+1 > makeLogBins(const T min, const T max)
MonitorElement * DistanceOfClosestApproachVsPhi
std::unordered_map< Key, MonitorElement *, KeyHasher > hits_valid_
MonitorElement * TESTDistanceOfClosestApproachToBS
void undoSoftReset(DQMStore *dqmStore_)
bool isValid() const
Definition: HandleBase.h:74
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:38
std::string monName[monQuantity::END]
int trackerLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.h:1061
MonitorElement * NumberOfMIRecHitsPerTrack
MonitorElement * DeltaZToPVZoom
edm::EDGetTokenT< reco::VertexCollection > pvToken_
Definition: TrackAnalyzer.h:76
const AlgebraicSymMatrix66 & matrix() const
MonitorElement * ValidFractionVsPhiVsEtaPerTrack
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:639
MonitorElement * NhitVsEta_HighPurity
MonitorElement * stoppingSourceVSphi
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:609
void setNumberOfGoodVertices(const edm::Event &)
double dzError() const
error on dz
Definition: TrackBase.h:814
void bookHistosForBeamSpot(DQMStore::IBooker &ibooker)
MonitorElement * NumberOfLostRecHitVsPtVsEtaPerTrack
MonitorElement * dNdPhi_HighPurity
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:669
void fillHistosForState(const edm::EventSetup &iSetup, const reco::Track &track, std::string sname)
std::string histname
Definition: DetId.h:18
TrackAlgorithm originalAlgo() const
Definition: TrackBase.h:501
TrajectoryStateOnSurface TSOS
Definition: TestHits.cc:19
void bookHistosForState(std::string sname, DQMStore::IBooker &ibooker)
MonitorElement * TESTDistanceOfClosestApproachToBSVsPhi
MonitorElement * oriAlgo
bool doGeneralPropertiesPlots_
Definition: TrackAnalyzer.h:90
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:125
double xError() const
error on x
Definition: Vertex.h:119
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
#define N
Definition: blowfish.cc:9
MonitorElement * NumberOfRecHitsPerTrack
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:446
MonitorElement * NhitVsPhi_HighPurity
MonitorElement * yPointOfClosestApproachVsZ0wrt000
std::string TopFolder_
Definition: TrackAnalyzer.h:73
bool doRecHitVsPhiVsEtaPerTrack_
Definition: TrackAnalyzer.h:93
const T & get() const
Definition: EventSetup.h:59
int pixelBarrelLayersWithMeasurement() const
Definition: HitPattern.cc:558
MonitorElement * NumberOfMIRecHitVsPhiVsEtaPerTrack
MonitorElement * NumberOfRecHitsPerTrackVsEta
static double rXSEC_PIXEL_CLUSTER
Definition: GetLumi.h:45
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:858
static const std::string algoNames[]
Definition: TrackBase.h:148
bool quality(const TrackQuality) const
Track quality.
Definition: TrackBase.h:510
unsigned int layer(const DetId &id) const
MonitorElement * Chi2oNDFVsPhi
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:848
std::map< std::string, TkRecHitsPerSubDetMEs > TkRecHitsPerSubDetMEMap
T eta() const
Definition: PV3DBase.h:76
int trackerLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:535
MonitorElement * xPointOfClosestApproachToPV
double vy() const
y coordinate of the reference point on track
Definition: TrackBase.h:663
const AlgebraicSymMatrix55 & matrix() const
GlobalVector globalMomentum() const
MonitorElement * NumberOfMORecHitVsPhiVsEtaPerTrack
MonitorElement * DistanceOfClosestApproachVsTheta
MonitorElement * dNdEta_HighPurity
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:615
MonitorElement * stoppingSource
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > pixelClustersToken_
Definition: TrackAnalyzer.h:77
std::vector< LumiScalers > LumiScalersCollection
Definition: LumiScalers.h:160
MonitorElement * DistanceOfClosestApproachToPVZoom
int charge() const
track electric charge
Definition: TrackBase.h:567
const Point & position() const
position
Definition: BeamSpot.h:62
TrajectoryStateOnSurface impactPointState() const
MonitorElement * DeltaZToPV
Definition: errors.py:1
MonitorElement * zPointOfClosestApproachVsPhi
MonitorElement * Chi2oNDFVsEta
void Reset(std::vector< TH2F > &depth)
int getNbinsX() const
get # of bins in X-axis
MonitorElement * NumberOfValidRecHitsPerTrackVsEta
std::string qualityString_
MonitorElement * NumberOfMORecHitsPerTrack
dbl *** dir
Definition: mlp_gen.cc:35
Definition: Chi2.h:17
size_type size() const
Definition: DetSetNew.h:87
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:591
T x() const
Definition: PV3DBase.h:62
MonitorElement * zPointOfClosestApproach
MonitorElement * Chi2ProbVsPhi
MonitorElement * AbsDistanceOfClosestApproachToBS
void setLumi(const edm::Event &, const edm::EventSetup &iSetup)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
std::unordered_map< Key, MonitorElement *, KeyHasher > hits_total_
MonitorElement * DistanceOfClosestApproachVsEta
T const * product() const
Definition: ESHandle.h:86
static double FREQ_ORBIT
Definition: GetLumi.h:32
MonitorElement * NumberOfRecHitsPerTrackVsTheta
MonitorElement * NumberOfValidRecHitVsPtVsEtaPerTrack
MonitorElement * sip3dToPV
MonitorElement * NumberOfRecHitVsPhiVsEtaPerTrack
MonitorElement * Chi2Prob
MonitorElement * NumberOfRecHitsPerTrackVsPhi
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double yError() const
error on y
Definition: Vertex.h:121
MonitorElement * DistanceOfClosestApproachToPV
const_iterator begin(bool update=false) const
MonitorElement * TransDCASig
const int NBINS
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:633
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::Track &track)
double vx() const
x coordinate of the reference point on track
Definition: TrackBase.h:657
bool doLayersVsPhiVsEtaPerTrack_
Definition: TrackAnalyzer.h:96
MonitorElement * NumberOfLostRecHitsPerTrack
MonitorElement * NumberOfRecHitsPerTrack_lumiFlag
static double SECONDS_PER_LS
Definition: GetLumi.h:33
MonitorElement * NumberOfLayersPerTrack[4]