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