CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 
14 
19 #include <string>
20 #include "TMath.h"
21 
23  : conf_( iConfig )
24  , doTrackerSpecific_ ( conf_.getParameter<bool>("doTrackerSpecific") )
25  , doAllPlots_ ( conf_.getParameter<bool>("doAllPlots") )
26  , doBSPlots_ ( conf_.getParameter<bool>("doBeamSpotPlots") )
27  , doPVPlots_ ( conf_.getParameter<bool>("doPrimaryVertexPlots") )
28  , doDCAPlots_ ( conf_.getParameter<bool>("doDCAPlots") )
29  , doGeneralPropertiesPlots_ ( conf_.getParameter<bool>("doGeneralPropertiesPlots") )
30  , doMeasurementStatePlots_ ( conf_.getParameter<bool>("doMeasurementStatePlots") )
31  , doHitPropertiesPlots_ ( conf_.getParameter<bool>("doHitPropertiesPlots") )
32  , doRecHitVsPhiVsEtaPerTrack_ ( conf_.getParameter<bool>("doRecHitVsPhiVsEtaPerTrack") )
33  , doLayersVsPhiVsEtaPerTrack_ ( conf_.getParameter<bool>("doLayersVsPhiVsEtaPerTrack") )
34  , doRecHitsPerTrackProfile_ ( conf_.getParameter<bool>("doRecHitsPerTrackProfile") )
35  , doThetaPlots_ ( conf_.getParameter<bool>("doThetaPlots") )
36  , doTrackPxPyPlots_ ( conf_.getParameter<bool>("doTrackPxPyPlots") )
37  , doDCAwrtPVPlots_ ( conf_.getParameter<bool>("doDCAwrtPVPlots") )
38  , doDCAwrt000Plots_ ( conf_.getParameter<bool>("doDCAwrt000Plots") )
39  , doLumiAnalysis_ ( conf_.getParameter<bool>("doLumiAnalysis") )
40  , doTestPlots_ ( conf_.getParameter<bool>("doTestPlots") )
41  , doHIPlots_ ( conf_.getParameter<bool>("doHIPlots") )
42  , doSIPPlots_ ( conf_.getParameter<bool>("doSIPPlots") )
43  , qualityString_ ( conf_.getParameter<std::string>("qualityString"))
44 {
45  initHistos();
46  TopFolder_ = conf_.getParameter<std::string>("FolderName");
47 
48 }
49 
51  : TrackAnalyzer(iConfig)
52 {
53  edm::InputTag bsSrc = conf_.getParameter<edm::InputTag>("beamSpot");
54  edm::InputTag primaryVertexInputTag = conf_.getParameter<edm::InputTag>("primaryVertex");
56  pvToken_ = iC.consumes<reco::VertexCollection>(primaryVertexInputTag);
57 }
58 
60 {
61  Chi2 = nullptr;
62  Chi2Prob = nullptr;
63  Chi2ProbVsPhi = nullptr;
64  Chi2ProbVsEta = nullptr;
65  Chi2oNDF = nullptr;
66  Chi2oNDFVsEta = nullptr;
67  Chi2oNDFVsPhi = nullptr;
68  Chi2oNDFVsTheta = nullptr;
69  Chi2oNDFVsTheta = nullptr;
70  Chi2oNDFVsPhi = nullptr;
71  Chi2oNDFVsEta = nullptr;
72 
73  NumberOfRecHitsPerTrack = nullptr;
76 
80 
82 
85 
86 
87  DistanceOfClosestApproach = nullptr;
93  xPointOfClosestApproach = nullptr;
96  yPointOfClosestApproach = nullptr;
99  zPointOfClosestApproach = nullptr;
101  algorithm = nullptr;
102  oriAlgo = nullptr;
103  // TESTING
106 
107 // by Mia in order to deal w/ LS transitions
108  Chi2oNDF_lumiFlag = nullptr;
110 
112  //special Plots for HI DQM //SHOULD I ADD THE BOOL HERE??
114  LongDCASig = nullptr;
115  TransDCASig = nullptr;
116  dNdPhi_HighPurity = nullptr;
117  dNdEta_HighPurity = nullptr;
118  dNdPt_HighPurity = nullptr;
119  NhitVsEta_HighPurity = nullptr;
120  NhitVsPhi_HighPurity = nullptr;
121 
122  // IP significance
123  sipDxyToBS = nullptr;
124  sipDzToBS = nullptr;
125  sip3dToPV = nullptr;
126  sip2dToPV = nullptr;
127  sipDxyToPV = nullptr;
128  sipDzToPV = nullptr;
129 
130 }
131 
133 {
134 }
135 
137 {
138 
140  bookHistosForBeamSpot(ibooker);
142 
143  // book tracker specific related histograms
144  // ---------------------------------------------------------------------------------//
146 
147  // book state related histograms
148  // ---------------------------------------------------------------------------------//
150 
151  std::string StateName = conf_.getParameter<std::string>("MeasurementState");
152 
153  if (StateName == "All") {
154  bookHistosForState("OuterSurface", ibooker);
155  bookHistosForState("InnerSurface", ibooker);
156  bookHistosForState("ImpactPoint" , ibooker);
157  } else if (
158  StateName != "OuterSurface" &&
159  StateName != "InnerSurface" &&
160  StateName != "ImpactPoint" &&
161  StateName != "default"
162  ) {
163  bookHistosForState("default", ibooker);
164 
165  } else {
166  bookHistosForState(StateName, ibooker);
167  }
168 
169  }
170 }
171 
173 
174  // parameters from the configuration
175  std::string QualName = conf_.getParameter<std::string>("Quality");
177  std::string MEBSFolderName = conf_.getParameter<std::string>("BSFolderName");
178 
179  // use the AlgoName and Quality Name
180  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
181 
182  // get binning from the configuration
183  int TKHitBin = conf_.getParameter<int>( "RecHitBin");
184  double TKHitMin = conf_.getParameter<double>("RecHitMin");
185  double TKHitMax = conf_.getParameter<double>("RecHitMax");
186 
187  int TKLostBin = conf_.getParameter<int>( "RecLostBin");
188  double TKLostMin = conf_.getParameter<double>("RecLostMin");
189  double TKLostMax = conf_.getParameter<double>("RecLostMax");
190 
191  int TKLayBin = conf_.getParameter<int>( "RecLayBin");
192  double TKLayMin = conf_.getParameter<double>("RecLayMin");
193  double TKLayMax = conf_.getParameter<double>("RecLayMax");
194 
195  int PhiBin = conf_.getParameter<int>( "PhiBin");
196  double PhiMin = conf_.getParameter<double>("PhiMin");
197  double PhiMax = conf_.getParameter<double>("PhiMax");
198 
199  int EtaBin = conf_.getParameter<int>( "EtaBin");
200  double EtaMin = conf_.getParameter<double>("EtaMin");
201  double EtaMax = conf_.getParameter<double>("EtaMax");
202 
203  int VXBin = conf_.getParameter<int>( "VXBin");
204  double VXMin = conf_.getParameter<double>("VXMin");
205  double VXMax = conf_.getParameter<double>("VXMax");
206 
207  int VYBin = conf_.getParameter<int>( "VYBin");
208  double VYMin = conf_.getParameter<double>("VYMin");
209  double VYMax = conf_.getParameter<double>("VYMax");
210 
211  int VZBin = conf_.getParameter<int>( "VZBin");
212  double VZMin = conf_.getParameter<double>("VZMin");
213  double VZMax = conf_.getParameter<double>("VZMax");
214 
215  ibooker.setCurrentFolder(TopFolder_);
216 
217  // book the Hit Property histograms
218  // ---------------------------------------------------------------------------------//
219 
220  TkParameterMEs tkmes;
222 
223  ibooker.setCurrentFolder(TopFolder_+"/HitProperties");
224 
225  histname = "NumberOfRecHitsPerTrack_";
226  NumberOfRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
227  NumberOfRecHitsPerTrack->setAxisTitle("Number of all RecHits of each Track");
228  NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
229 
230  histname = "NumberOfValidRecHitsPerTrack_";
231  NumberOfValidRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
232  NumberOfValidRecHitsPerTrack->setAxisTitle("Number of valid RecHits for each Track");
233  NumberOfValidRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
234 
235  histname = "NumberOfLostRecHitsPerTrack_";
236  NumberOfLostRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKLostBin, TKLostMin, TKLostMax);
237  NumberOfLostRecHitsPerTrack->setAxisTitle("Number of lost RecHits for each Track");
238  NumberOfLostRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
239 
240  histname = "NumberOfMissingInnerRecHitsPerTrack_";
241  NumberOfMIRecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 10, -0.5, 9.5);
242  NumberOfMIRecHitsPerTrack->setAxisTitle("Number of missing-inner RecHits for each Track");
243  NumberOfMIRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
244 
245  histname = "NumberOfMissingOuterRecHitsPerTrack_";
246  NumberOfMORecHitsPerTrack = ibooker.book1D(histname+CategoryName, histname+CategoryName, 10, -0.5, 9.5);
247  NumberOfMORecHitsPerTrack->setAxisTitle("Number of missing-outer RecHits for each Track");
248  NumberOfMORecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
249 
250 
252 
253  histname = "NumberOfValidRecHitVsPhiVsEtaPerTrack_";
254  NumberOfValidRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
255  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., "");
258 
259  histname = "NumberOfLostRecHitVsPhiVsEtaPerTrack_";
260  NumberOfLostRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
261  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 5., "");
264 
265 
266  histname = "NumberMIRecHitVsPhiVsEtaPerTrack_";
267  NumberOfMIRecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
268  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 15., "");
271 
272  histname = "NumberMORecHitVsPhiVsEtaPerTrack_";
273  NumberOfMORecHitVsPhiVsEtaPerTrack = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
274  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 15., "");
277 
278 
279  }
280 
281  std::string layerTypeName[4] = {"","Off","3D","Missing"};
282  for (int i=0; i<4; ++i) {
283  histname = "NumberOf"+ layerTypeName[i] + "LayersPerTrack_";
284  NumberOfLayersPerTrack[i] = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKLayBin, TKLayMin, TKLayMax);
285  NumberOfLayersPerTrack[i]->setAxisTitle("Number of " + layerTypeName[i] + " Layers of each Track", 1);
286  NumberOfLayersPerTrack[i]->setAxisTitle("Number of Tracks", 2);
287  }
289  for (int i=0; i<4; ++i) {
290  histname = "NumberOf"+ layerTypeName[i] + "LayersVsPhiVsEtaPerTrack_";
291  NumberOfLayersVsPhiVsEtaPerTrack[i] = ibooker.bookProfile2D(histname+CategoryName, histname+CategoryName,
292  EtaBin, EtaMin, EtaMax, PhiBin, PhiMin, PhiMax, 0, 40., "");
293  NumberOfLayersVsPhiVsEtaPerTrack[i]->setAxisTitle("Track #eta ", 1);
294  NumberOfLayersVsPhiVsEtaPerTrack[i]->setAxisTitle("Track #phi ", 2);
295  }
296  }
297 
298  // book the General Property histograms
299  // ---------------------------------------------------------------------------------//
300 
302 
303  int Chi2Bin = conf_.getParameter<int>( "Chi2Bin");
304  double Chi2Min = conf_.getParameter<double>("Chi2Min");
305  double Chi2Max = conf_.getParameter<double>("Chi2Max");
306 
307  int Chi2NDFBin = conf_.getParameter<int>( "Chi2NDFBin");
308  double Chi2NDFMin = conf_.getParameter<double>("Chi2NDFMin");
309  double Chi2NDFMax = conf_.getParameter<double>("Chi2NDFMax");
310 
311  int Chi2ProbBin = conf_.getParameter<int>( "Chi2ProbBin");
312  double Chi2ProbMin = conf_.getParameter<double>("Chi2ProbMin");
313  double Chi2ProbMax = conf_.getParameter<double>("Chi2ProbMax");
314 
315 
316  //HI PLOTS////
317  int TransDCABins = conf_.getParameter<int>("TransDCABins");
318  double TransDCAMin = conf_.getParameter<double>("TransDCAMin");
319  double TransDCAMax = conf_.getParameter<double>("TransDCAMax");
320 
321  int LongDCABins = conf_.getParameter<int>("LongDCABins");
322  double LongDCAMin = conf_.getParameter<double>("LongDCAMin");
323  double LongDCAMax = conf_.getParameter<double>("LongDCAMax");
325 
326 
327  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
328 
329  histname = "Chi2_";
330  Chi2 = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2Bin, Chi2Min, Chi2Max);
331  Chi2->setAxisTitle("Track #chi^{2}" ,1);
332  Chi2->setAxisTitle("Number of Tracks",2);
333 
334  histname = "Chi2Prob_";
335  Chi2Prob = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2ProbBin, Chi2ProbMin, Chi2ProbMax);
336  Chi2Prob->setAxisTitle("Track #chi^{2} probability",1);
337  Chi2Prob->setAxisTitle("Number of Tracks" ,2);
338 
339  histname = "Chi2oNDF_";
340  Chi2oNDF = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax);
341  Chi2oNDF->setAxisTitle("Track #chi^{2}/ndf",1);
342  Chi2oNDF->setAxisTitle("Number of Tracks" ,2);
343 
344 
346  //HI PLOTS///
348  if (doHIPlots_)
349  {
350  histname = "LongDCASig_";
351  LongDCASig = ibooker.book1D(histname+CategoryName, histname+CategoryName,LongDCABins,LongDCAMin,LongDCAMax);
352  LongDCASig->setAxisTitle("dz/#sigma_{dz}",1);
353 
354  histname = "TransDCASig_";
355  TransDCASig = ibooker.book1D(histname+CategoryName,histname+CategoryName,TransDCABins,TransDCAMin,TransDCAMax);
356  TransDCASig->setAxisTitle("dxy/#sigma_{dxy}",1);
357 
358  histname = "dNdPhi_HighPurity_";
359  dNdPhi_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,PhiBin,PhiMin,PhiMax);
360  dNdPhi_HighPurity->setAxisTitle("#phi",1);
361 
362  histname = "dNdEta_HighPurity_";
363  dNdEta_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,EtaBin,EtaMin,EtaMax);
364  dNdEta_HighPurity->setAxisTitle("#eta",1);
365 
366  histname = "dNdPt_HighPurity_";
367  dNdPt_HighPurity = ibooker.book1D(histname+CategoryName,histname+CategoryName,150,0,0.3);
368  dNdPt_HighPurity->setAxisTitle("#sigma_{p_{T}}/p_{T}",1);
369 
370  histname = "NhitVsEta_HighPurity_";
371  NhitVsEta_HighPurity = ibooker.bookProfile(histname+CategoryName,histname+CategoryName,EtaBin,EtaMin,EtaMax,-0.5,39.5,"");
372  NhitVsEta_HighPurity->setAxisTitle("Track #eta",1);
373  NhitVsEta_HighPurity->setAxisTitle("Number of Valid RecHits in each Track",2);
374 
375  histname = "NhitVsPhi_HighPurity_";
376  NhitVsPhi_HighPurity = ibooker.bookProfile(histname+CategoryName,histname+CategoryName,PhiBin,PhiMin,PhiMax,-0.5,39.5,"");
377  NhitVsPhi_HighPurity->setAxisTitle("Track #phi",1);
378  NhitVsPhi_HighPurity->setAxisTitle("Number of Valid RecHits in each Track",2);
379  }
380 
381 
382 
384  histname = "xPointOfClosestApproach_";
385  xPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax);
386  xPointOfClosestApproach->setAxisTitle("x component of Track PCA to beam line (cm)",1);
387  xPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
388 
389  histname = "yPointOfClosestApproach_";
390  yPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax);
391  yPointOfClosestApproach->setAxisTitle("y component of Track PCA to beam line (cm)",1);
392  yPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
393 
394  histname = "zPointOfClosestApproach_";
395  zPointOfClosestApproach = ibooker.book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax);
396  zPointOfClosestApproach->setAxisTitle("z component of Track PCA to beam line (cm)",1);
397  zPointOfClosestApproach->setAxisTitle("Number of Tracks",2);
398 
399  histname = "xPointOfClosestApproachToPV_";
400  xPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VXBin, VXMin, VXMax);
401  xPointOfClosestApproachToPV->setAxisTitle("x component of Track PCA to pv (cm)",1);
402  xPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
403 
404  histname = "yPointOfClosestApproachToPV_";
405  yPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VYBin, VYMin, VYMax);
406  yPointOfClosestApproachToPV->setAxisTitle("y component of Track PCA to pv line (cm)",1);
407  yPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
408 
409  histname = "zPointOfClosestApproachToPV_";
410  zPointOfClosestApproachToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, VZBin, VZMin, VZMax);
411  zPointOfClosestApproachToPV->setAxisTitle("z component of Track PCA to pv line (cm)",1);
412  zPointOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
413  }
414 
415  // See DataFormats/TrackReco/interface/TrackBase.h for track algorithm enum definition
416  // http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/DataFormats/TrackReco/interface/TrackBase.h?view=log
417  histname = "algorithm_";
418  algorithm = ibooker.book1D(histname+CategoryName, histname+CategoryName, reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize));
419  algorithm->setAxisTitle("Tracking algorithm",1);
420  algorithm->setAxisTitle("Number of Tracks",2);
421  histname = "originalAlgorithm_";
422  oriAlgo = ibooker.book1D(histname+CategoryName, histname+CategoryName, reco::TrackBase::algoSize, 0., double(reco::TrackBase::algoSize));
423  oriAlgo->setAxisTitle("Tracking algorithm",1);
424  oriAlgo->setAxisTitle("Number of Tracks",2);
425 
426  for (size_t ibin=0; ibin<reco::TrackBase::algoSize-1; ibin++) {
429  }
430  }
431 
432 }
433 
435 
436  // parameters from the configuration
437  std::string QualName = conf_.getParameter<std::string>("Quality");
439 
440  // use the AlgoName and Quality Name
441  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
442 
443 
444  // book LS analysis related histograms
445  // -----------------------------------
446  if ( doLumiAnalysis_ ) {
447 
448  // get binning from the configuration
449  int TKHitBin = conf_.getParameter<int>( "RecHitBin");
450  double TKHitMin = conf_.getParameter<double>("RecHitMin");
451  double TKHitMax = conf_.getParameter<double>("RecHitMax");
452 
453  int Chi2NDFBin = conf_.getParameter<int>( "Chi2NDFBin");
454  double Chi2NDFMin = conf_.getParameter<double>("Chi2NDFMin");
455  double Chi2NDFMax = conf_.getParameter<double>("Chi2NDFMax");
456 
457  // add by Mia in order to deal w/ LS transitions
458  ibooker.setCurrentFolder(TopFolder_+"/LSanalysis");
459 
460  histname = "NumberOfRecHitsPerTrack_lumiFlag_";
461  NumberOfRecHitsPerTrack_lumiFlag = ibooker.book1D(histname+CategoryName, histname+CategoryName, TKHitBin, TKHitMin, TKHitMax);
462  NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of all RecHits of each Track");
463  NumberOfRecHitsPerTrack_lumiFlag->setAxisTitle("Number of Tracks", 2);
464 
465  histname = "Chi2oNDF_lumiFlag_";
466  Chi2oNDF_lumiFlag = ibooker.book1D(histname+CategoryName, histname+CategoryName, Chi2NDFBin, Chi2NDFMin, Chi2NDFMax);
467  Chi2oNDF_lumiFlag->setAxisTitle("Track #chi^{2}/ndf",1);
468  Chi2oNDF_lumiFlag->setAxisTitle("Number of Tracks" ,2);
469 
470  }
471 }
472 
474 
475  // parameters from the configuration
476  std::string QualName = conf_.getParameter<std::string>("Quality");
478 
479  // use the AlgoName and Quality Name
480  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
481 
482  // book the Beam Spot related histograms
483  // ---------------------------------------------------------------------------------//
484 
486 
487  int DxyBin = conf_.getParameter<int>( "DxyBin");
488  double DxyMin = conf_.getParameter<double>("DxyMin");
489  double DxyMax = conf_.getParameter<double>("DxyMax");
490 
491  int PhiBin = conf_.getParameter<int>( "PhiBin");
492  double PhiMin = conf_.getParameter<double>("PhiMin");
493  double PhiMax = conf_.getParameter<double>("PhiMax");
494 
495  int X0Bin = conf_.getParameter<int>( "X0Bin");
496  double X0Min = conf_.getParameter<double>("X0Min");
497  double X0Max = conf_.getParameter<double>("X0Max");
498 
499  int Y0Bin = conf_.getParameter<int>( "Y0Bin");
500  double Y0Min = conf_.getParameter<double>("Y0Min");
501  double Y0Max = conf_.getParameter<double>("Y0Max");
502 
503  int Z0Bin = conf_.getParameter<int>( "Z0Bin");
504  double Z0Min = conf_.getParameter<double>("Z0Min");
505  double Z0Max = conf_.getParameter<double>("Z0Max");
506 
507  int VZBinProf = conf_.getParameter<int>( "VZBinProf");
508  double VZMinProf = conf_.getParameter<double>("VZMinProf");
509  double VZMaxProf = conf_.getParameter<double>("VZMaxProf");
510 
511 
512  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
513 
514  histname = "DistanceOfClosestApproachToBS_";
515  DistanceOfClosestApproachToBS = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
516  DistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1);
517  DistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2);
518 
519  histname = "DistanceOfClosestApproachToBSVsPhi_";
520  DistanceOfClosestApproachToBSVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
521  DistanceOfClosestApproachToBSVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
523  DistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2);
524 
525  histname = "xPointOfClosestApproachVsZ0wrt000_";
526  xPointOfClosestApproachVsZ0wrt000 = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
528  xPointOfClosestApproachVsZ0wrt000->setAxisTitle("x component of Track PCA to beam line (cm)",2);
529 
530  histname = "yPointOfClosestApproachVsZ0wrt000_";
531  yPointOfClosestApproachVsZ0wrt000 = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
533  yPointOfClosestApproachVsZ0wrt000->setAxisTitle("y component of Track PCA to beam line (cm)",2);
534 
535  histname = "xPointOfClosestApproachVsZ0wrtBS_";
536  xPointOfClosestApproachVsZ0wrtBS = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
537  xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
538  xPointOfClosestApproachVsZ0wrtBS->setAxisTitle("x component of Track PCA to BS (cm)",2);
539 
540  histname = "yPointOfClosestApproachVsZ0wrtBS_";
541  yPointOfClosestApproachVsZ0wrtBS = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
542  yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
543  yPointOfClosestApproachVsZ0wrtBS->setAxisTitle("y component of Track PCA to BS (cm)",2);
544 
545  histname = "zPointOfClosestApproachVsPhi_";
546  zPointOfClosestApproachVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, VZBinProf, VZMinProf, VZMaxProf, "");
548  zPointOfClosestApproachVsPhi->setAxisTitle("y component of Track PCA to beam line (cm)",2);
549  }
550 
552 
553  int DxyBin = conf_.getParameter<int>( "DxyBin");
554  double DxyMin = conf_.getParameter<double>("DxyMin");
555  double DxyMax = conf_.getParameter<double>("DxyMax");
556 
557  int PhiBin = conf_.getParameter<int>( "PhiBin");
558  double PhiMin = conf_.getParameter<double>("PhiMin");
559  double PhiMax = conf_.getParameter<double>("PhiMax");
560 
561  int X0Bin = conf_.getParameter<int>( "X0Bin");
562  double X0Min = conf_.getParameter<double>("X0Min");
563  double X0Max = conf_.getParameter<double>("X0Max");
564 
565  int Y0Bin = conf_.getParameter<int>( "Y0Bin");
566  double Y0Min = conf_.getParameter<double>("Y0Min");
567  double Y0Max = conf_.getParameter<double>("Y0Max");
568 
569  int Z0Bin = conf_.getParameter<int>( "Z0Bin");
570  double Z0Min = conf_.getParameter<double>("Z0Min");
571  double Z0Max = conf_.getParameter<double>("Z0Max");
572 
573  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
574 
575  histname = "DistanceOfClosestApproachToPV_";
576  DistanceOfClosestApproachToPV = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
577  DistanceOfClosestApproachToPV->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1);
578  DistanceOfClosestApproachToPV->setAxisTitle("Number of Tracks",2);
579 
580  histname = "DistanceOfClosestApproachToPVVsPhi_";
581  DistanceOfClosestApproachToPVVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
582  DistanceOfClosestApproachToPVVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
584  DistanceOfClosestApproachToPVVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2);
585 
586  histname = "xPointOfClosestApproachVsZ0wrtPV_";
587  xPointOfClosestApproachVsZ0wrtPV = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, X0Bin, X0Min, X0Max,"");
588  xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
589  xPointOfClosestApproachVsZ0wrtPV->setAxisTitle("x component of Track PCA to PV (cm)",2);
590 
591  histname = "yPointOfClosestApproachVsZ0wrtPV_";
592  yPointOfClosestApproachVsZ0wrtPV = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, Z0Bin, Z0Min, Z0Max, Y0Bin, Y0Min, Y0Max,"");
593  yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("d_{z} w.r.t. Beam Spot (cm)",1);
594  yPointOfClosestApproachVsZ0wrtPV->setAxisTitle("y component of Track PCA to PV (cm)",2);
595 
596  }
597 
598  if (doBSPlots_ || doAllPlots_) {
599  if (doTestPlots_) {
600 
601  int DxyBin = conf_.getParameter<int>( "DxyBin");
602  double DxyMin = conf_.getParameter<double>("DxyMin");
603  double DxyMax = conf_.getParameter<double>("DxyMax");
604 
605  int PhiBin = conf_.getParameter<int>( "PhiBin");
606  double PhiMin = conf_.getParameter<double>("PhiMin");
607  double PhiMax = conf_.getParameter<double>("PhiMax");
608 
609  histname = "TESTDistanceOfClosestApproachToBS_";
610  TESTDistanceOfClosestApproachToBS = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
611  TESTDistanceOfClosestApproachToBS->setAxisTitle("Track d_{xy} wrt beam spot (cm)",1);
612  TESTDistanceOfClosestApproachToBS->setAxisTitle("Number of Tracks",2);
613 
614  histname = "TESTDistanceOfClosestApproachToBSVsPhi_";
615  TESTDistanceOfClosestApproachToBSVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyBin, DxyMin, DxyMax,"");
616  TESTDistanceOfClosestApproachToBSVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
618  TESTDistanceOfClosestApproachToBSVsPhi->setAxisTitle("Track d_{xy} wrt beam spot (cm)",2);
619 
620  }
621 
622  }
623 
624  // book the Profile plots for DCA related histograms
625  // ---------------------------------------------------------------------------------//
626  if(doDCAPlots_ || doAllPlots_) {
627 
628  if (doDCAwrt000Plots_) {
629 
630  int EtaBin = conf_.getParameter<int>( "EtaBin");
631  double EtaMin = conf_.getParameter<double>("EtaMin");
632  double EtaMax = conf_.getParameter<double>("EtaMax");
633 
634  int PhiBin = conf_.getParameter<int>( "PhiBin");
635  double PhiMin = conf_.getParameter<double>("PhiMin");
636  double PhiMax = conf_.getParameter<double>("PhiMax");
637 
638  int DxyBin = conf_.getParameter<int>( "DxyBin");
639  double DxyMin = conf_.getParameter<double>("DxyMin");
640  double DxyMax = conf_.getParameter<double>("DxyMax");
641 
642  if (doThetaPlots_) {
643  int ThetaBin = conf_.getParameter<int>( "ThetaBin");
644  double ThetaMin = conf_.getParameter<double>("ThetaMin");
645  double ThetaMax = conf_.getParameter<double>("ThetaMax");
646 
647  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
648  histname = "DistanceOfClosestApproachVsTheta_";
649  DistanceOfClosestApproachVsTheta = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, ThetaBin, ThetaMin, ThetaMax, DxyMin,DxyMax,"");
651  DistanceOfClosestApproachVsTheta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
652  }
653 
654  histname = "DistanceOfClosestApproachVsEta_";
655  DistanceOfClosestApproachVsEta = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, EtaBin, EtaMin, EtaMax, DxyMin, DxyMax,"");
657  DistanceOfClosestApproachVsEta->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
658  // temporary patch in order to put back those MEs in Muon Workspace
659 
660  histname = "DistanceOfClosestApproach_";
661  DistanceOfClosestApproach = ibooker.book1D(histname+CategoryName,histname+CategoryName,DxyBin,DxyMin,DxyMax);
662  DistanceOfClosestApproach->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",1);
663  DistanceOfClosestApproach->setAxisTitle("Number of Tracks",2);
664 
665  histname = "DistanceOfClosestApproachVsPhi_";
666  DistanceOfClosestApproachVsPhi = ibooker.bookProfile(histname+CategoryName,histname+CategoryName, PhiBin, PhiMin, PhiMax, DxyMin,DxyMax,"");
667  DistanceOfClosestApproachVsPhi->getTH1()->SetCanExtend(TH1::kAllAxes);
669  DistanceOfClosestApproachVsPhi->setAxisTitle("Track d_{xy} wrt (0,0,0) (cm)",2);
670  }
671  }
672 
673 
674  if (doSIPPlots_ || doAllPlots_) {
675  const double sipBins = 200;
676  const double sipMin = -20;
677  const double sipMax = 20;
678 
679  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
680 
681  // SIP wrt. beamspot
682  histname = "SIPDxyToBS_";
683  sipDxyToBS = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
684  sipDxyToBS->setAxisTitle("Track dxy significance wrt beam spot",1);
685  sipDxyToBS->setAxisTitle("Number of Tracks",2);
686 
687  histname = "SIPDzToBS_";
688  sipDzToBS = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
689  sipDzToBS->setAxisTitle("Track dz significance wrt beam spot",1);
690  sipDzToBS->setAxisTitle("Number of Tracks",2);
691 
692  // SIP wrt. vertex
693  histname = "SIP3DToPV_";
694  sip3dToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
695  sip3dToPV->setAxisTitle("3D IP significance wrt primary vertex",1);
696  sip3dToPV->setAxisTitle("Number of Tracks",2);
697 
698  histname = "SIP2DToPV_";
699  sip2dToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
700  sip2dToPV->setAxisTitle("2D IP significance wrt primary vertex",1);
701  sip2dToPV->setAxisTitle("Number of Tracks",2);
702 
703  histname = "SIPDxyToPV_";
704  sipDxyToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
705  sipDxyToPV->setAxisTitle("Track dxy significance wrt primary vertex",1);
706  sipDxyToPV->setAxisTitle("Number of Tracks",2);
707 
708  histname = "SIPDzToPV_";
709  sipDzToPV = ibooker.book1D(histname+CategoryName, histname+CategoryName, sipBins, sipMin, sipMax);
710  sipDzToPV->setAxisTitle("Track dz significance wrt primary vertex",1);
711  sipDzToPV->setAxisTitle("Number of Tracks",2);
712  }
713 }
714 
715 // -- Analyse
716 // ---------------------------------------------------------------------------------//
717 void TrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::Track& track)
718 {
719  double phi = track.phi();
720  // double eta = track.eta();
721  auto phiIn = track.innerPosition().phi();
722  auto etaIn = track.innerPosition().eta();
723  auto phiOut = track.outerPosition().phi();
724  auto etaOut = track.outerPosition().eta();
725 
726  int nRecHits = track.hitPattern().numberOfHits(reco::HitPattern::TRACK_HITS);
727  int nValidRecHits = track.numberOfValidHits();
728  int nLostRecHits = track.numberOfLostHits();
731 
732  double chi2 = track.chi2();
733  double chi2prob = TMath::Prob(track.chi2(),(int)track.ndof());
734  double chi2oNDF = track.normalizedChi2();
735 
737  // rec hits
738  NumberOfRecHitsPerTrack -> Fill(nRecHits);
739  NumberOfValidRecHitsPerTrack-> Fill(nValidRecHits);
740  NumberOfLostRecHitsPerTrack -> Fill(nLostRecHits);
741  NumberOfMIRecHitsPerTrack -> Fill(nLostIn);
742  NumberOfMORecHitsPerTrack -> Fill(nLostOut);
743 
744  // 2D plots
746  NumberOfValidRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nValidRecHits);
747  NumberOfLostRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostRecHits);
748  NumberOfMIRecHitVsPhiVsEtaPerTrack->Fill(etaIn,phiIn,nLostIn);
749  NumberOfMORecHitVsPhiVsEtaPerTrack->Fill(etaOut,phiOut,nLostOut);
750  }
751 
752  int nLayers[4] = { track.hitPattern().trackerLayersWithMeasurement(),
756  };
757 
758  // layers
759  for (int i=0;i<4;++i) NumberOfLayersPerTrack[i]->Fill(nLayers[i]);
760 
761  // 2D plots
763  for (int i=0;i<4;++i) NumberOfLayersVsPhiVsEtaPerTrack[i]->Fill(etaIn,phiIn,nLayers[i]);
764  }
765 
767  // fitting
768  Chi2 -> Fill(chi2);
769  Chi2Prob -> Fill(chi2prob);
770  Chi2oNDF -> Fill(chi2oNDF);
771 
772  // DCA
773  // temporary patch in order to put back those MEs in Muon Workspace
774  if (doDCAPlots_) {
775  if (doDCAwrt000Plots_) {
777  DistanceOfClosestApproachVsPhi->Fill(phi, track.dxy());
778  }
779 
780  // PCA
784  }
785 
786  // algorithm
787  algorithm->Fill(static_cast<double>(track.algo()));
788  oriAlgo->Fill(static_cast<double>(track.originalAlgo()));
789  }
790 
791  if ( doLumiAnalysis_ ) {
793  Chi2oNDF_lumiFlag -> Fill(chi2oNDF);
794  }
795 
797 
798  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
799  iEvent.getByToken(beamSpotToken_,recoBeamSpotHandle);
800  const reco::BeamSpot& bs = *recoBeamSpotHandle;
801 
803  DistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position()));
804  zPointOfClosestApproachVsPhi -> Fill(track.phi(), track.vz());
805  xPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vx());
806  yPointOfClosestApproachVsZ0wrt000 -> Fill(track.dz(), track.vy());
807  xPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vx()-bs.position(track.vz()).x()));
808  yPointOfClosestApproachVsZ0wrtBS -> Fill(track.dz(bs.position()),(track.vy()-bs.position(track.vz()).y()));
809  if (doTestPlots_) {
810  TESTDistanceOfClosestApproachToBS -> Fill(track.dxy(bs.position(track.vz())));
811  TESTDistanceOfClosestApproachToBSVsPhi -> Fill(track.phi(), track.dxy(bs.position(track.vz())));
812  }
813 
814  if(doSIPPlots_) {
815  sipDxyToBS->Fill(track.dxy(bs.position())/track.dxyError());
816  sipDzToBS->Fill(track.dz(bs.position())/track.dzError());
817  }
818  }
819 
821  edm::Handle<reco::VertexCollection> recoPrimaryVerticesHandle;
822  iEvent.getByToken(pvToken_,recoPrimaryVerticesHandle);
823  if (recoPrimaryVerticesHandle->size() > 0) {
824  const reco::Vertex& pv = (*recoPrimaryVerticesHandle)[0];
825 
826 
828  //HI PLOTS///////
830 
831  if(doHIPlots_)
832  {
833  double longDCAsig = 0, transDCAsig = 0;
834  double zerr2 = track.dzError()*track.dzError()+pv.zError()*pv.zError();
835  double xyerr2 = track.d0Error()*track.d0Error()+pv.xError()*pv.yError();
836  if(zerr2 > 0) longDCAsig = track.dz(pv.position())/zerr2;
837  if(xyerr2 > 0) transDCAsig = track.dxy(pv.position())/xyerr2;
838  LongDCASig->Fill(longDCAsig);
839  TransDCASig->Fill(transDCAsig);
841  {
842  dNdEta_HighPurity->Fill(track.eta());
843  dNdPhi_HighPurity->Fill(track.phi());
844  dNdPt_HighPurity->Fill(track.ptError()/track.pt());
847  }//end of high quality tracks requirement
848  }
849 
850 
851  xPointOfClosestApproachToPV->Fill(track.vx()-pv.position().x());
852  yPointOfClosestApproachToPV->Fill(track.vy()-pv.position().y());
855  DistanceOfClosestApproachToPVVsPhi -> Fill(track.phi(), track.dxy(pv.position()));
856  xPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vx()-pv.position().x()));
857  yPointOfClosestApproachVsZ0wrtPV -> Fill(track.dz(pv.position()),(track.vy()-pv.position().y()));
858 
859 
860  if(doSIPPlots_) {
862  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
863  reco::TransientTrack transTrack = theB->build(track);
864 
865  GlobalVector dir(track.px(), track.py(), track.pz());
866  std::pair<bool, Measurement1D> ip3d = IPTools::signedImpactParameter3D(transTrack, dir, pv);
867  std::pair<bool, Measurement1D> ip2d = IPTools::signedTransverseImpactParameter(transTrack, dir, pv);
868  if(ip3d.first) sip3dToPV->Fill(ip3d.second.value() / ip3d.second.error());
869  if(ip2d.first) sip2dToPV->Fill(ip2d.second.value() / ip2d.second.error());
870  sipDxyToPV->Fill(track.dxy(pv.position())/track.dxyError());
871  sipDzToPV->Fill(track.dz(pv.position())/track.dzError());
872  }
873  }
874  }
875 
876  if(doDCAPlots_ || doAllPlots_) {
877  if (doDCAwrt000Plots_) {
878  if (doThetaPlots_) {
879  DistanceOfClosestApproachVsTheta->Fill(track.theta(), track.d0());
880  }
881  DistanceOfClosestApproachVsEta->Fill(track.eta(), track.d0());
882  }
883 
884  }
885 
886  //Tracker Specific Histograms
889  }
890 
892  std::string StateName = conf_.getParameter<std::string>("MeasurementState");
893 
894  if (StateName == "All") {
895  fillHistosForState(iSetup, track, std::string("OuterSurface"));
896  fillHistosForState(iSetup, track, std::string("InnerSurface"));
897  fillHistosForState(iSetup, track, std::string("ImpactPoint"));
898  } else if (
899  StateName != "OuterSurface" &&
900  StateName != "InnerSurface" &&
901  StateName != "ImpactPoint" &&
902  StateName != "default"
903  ) {
904  fillHistosForState(iSetup, track, std::string("default"));
905  } else {
906  fillHistosForState(iSetup, track, StateName);
907  }
908  }
909 
910  if ( doAllPlots_ ) {
911  }
912 
913 }
914 
915 // book histograms at differnt measurement points
916 // ---------------------------------------------------------------------------------//
918 {
919 
920  // parameters from the configuration
921  std::string QualName = conf_.getParameter<std::string>("Quality");
923 
924  // use the AlgoName and Quality Name
925  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
926 
927  // get binning from the configuration
928  double Chi2NDFMin = conf_.getParameter<double>("Chi2NDFMin");
929  double Chi2NDFMax = conf_.getParameter<double>("Chi2NDFMax");
930 
931  int RecHitBin = conf_.getParameter<int>( "RecHitBin");
932  double RecHitMin = conf_.getParameter<double>("RecHitMin");
933  double RecHitMax = conf_.getParameter<double>("RecHitMax");
934 
935  int RecLayBin = conf_.getParameter<int>( "RecHitBin");
936  double RecLayMin = conf_.getParameter<double>("RecHitMin");
937  double RecLayMax = conf_.getParameter<double>("RecHitMax");
938 
939 
940  int PhiBin = conf_.getParameter<int>( "PhiBin");
941  double PhiMin = conf_.getParameter<double>("PhiMin");
942  double PhiMax = conf_.getParameter<double>("PhiMax");
943 
944  int EtaBin = conf_.getParameter<int>( "EtaBin");
945  double EtaMin = conf_.getParameter<double>("EtaMin");
946  double EtaMax = conf_.getParameter<double>("EtaMax");
947 
948  int ThetaBin = conf_.getParameter<int>( "ThetaBin");
949  double ThetaMin = conf_.getParameter<double>("ThetaMin");
950  double ThetaMax = conf_.getParameter<double>("ThetaMax");
951 
952  int TrackQBin = conf_.getParameter<int>( "TrackQBin");
953  double TrackQMin = conf_.getParameter<double>("TrackQMin");
954  double TrackQMax = conf_.getParameter<double>("TrackQMax");
955 
956  int TrackPtBin = conf_.getParameter<int>( "TrackPtBin");
957  double TrackPtMin = conf_.getParameter<double>("TrackPtMin");
958  double TrackPtMax = conf_.getParameter<double>("TrackPtMax");
959 
960  int TrackPBin = conf_.getParameter<int>( "TrackPBin");
961  double TrackPMin = conf_.getParameter<double>("TrackPMin");
962  double TrackPMax = conf_.getParameter<double>("TrackPMax");
963 
964  int TrackPxBin = conf_.getParameter<int>( "TrackPxBin");
965  double TrackPxMin = conf_.getParameter<double>("TrackPxMin");
966  double TrackPxMax = conf_.getParameter<double>("TrackPxMax");
967 
968  int TrackPyBin = conf_.getParameter<int>( "TrackPyBin");
969  double TrackPyMin = conf_.getParameter<double>("TrackPyMin");
970  double TrackPyMax = conf_.getParameter<double>("TrackPyMax");
971 
972  int TrackPzBin = conf_.getParameter<int>( "TrackPzBin");
973  double TrackPzMin = conf_.getParameter<double>("TrackPzMin");
974  double TrackPzMax = conf_.getParameter<double>("TrackPzMax");
975 
976  int ptErrBin = conf_.getParameter<int>( "ptErrBin");
977  double ptErrMin = conf_.getParameter<double>("ptErrMin");
978  double ptErrMax = conf_.getParameter<double>("ptErrMax");
979 
980  int pxErrBin = conf_.getParameter<int>( "pxErrBin");
981  double pxErrMin = conf_.getParameter<double>("pxErrMin");
982  double pxErrMax = conf_.getParameter<double>("pxErrMax");
983 
984  int pyErrBin = conf_.getParameter<int>( "pyErrBin");
985  double pyErrMin = conf_.getParameter<double>("pyErrMin");
986  double pyErrMax = conf_.getParameter<double>("pyErrMax");
987 
988  int pzErrBin = conf_.getParameter<int>( "pzErrBin");
989  double pzErrMin = conf_.getParameter<double>("pzErrMin");
990  double pzErrMax = conf_.getParameter<double>("pzErrMax");
991 
992  int pErrBin = conf_.getParameter<int>( "pErrBin");
993  double pErrMin = conf_.getParameter<double>("pErrMin");
994  double pErrMax = conf_.getParameter<double>("pErrMax");
995 
996  int phiErrBin = conf_.getParameter<int>( "phiErrBin");
997  double phiErrMin = conf_.getParameter<double>("phiErrMin");
998  double phiErrMax = conf_.getParameter<double>("phiErrMax");
999 
1000  int etaErrBin = conf_.getParameter<int>( "etaErrBin");
1001  double etaErrMin = conf_.getParameter<double>("etaErrMin");
1002  double etaErrMax = conf_.getParameter<double>("etaErrMax");
1003 
1004 
1005  double Chi2ProbMin = conf_.getParameter<double>("Chi2ProbMin");
1006  double Chi2ProbMax = conf_.getParameter<double>("Chi2ProbMax");
1007 
1008  ibooker.setCurrentFolder(TopFolder_);
1009 
1010  TkParameterMEs tkmes;
1011 
1012  std::string histTag = (sname == "default") ? CategoryName : sname + "_" + CategoryName;
1013 
1014  if(doAllPlots_) {
1015 
1016  // general properties
1017  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1018 
1019  if (doThetaPlots_) {
1020  histname = "Chi2oNDFVsTheta_" + histTag;
1021  tkmes.Chi2oNDFVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,"");
1022  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1);
1023  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2);
1024  }
1025  histname = "Chi2oNDFVsPhi_" + histTag;
1026  tkmes.Chi2oNDFVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,"");
1027  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1);
1028  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2);
1029 
1030  histname = "Chi2oNDFVsEta_" + histTag;
1031  tkmes.Chi2oNDFVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,"");
1032  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1);
1033  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2);
1034 
1035  histname = "Chi2ProbVsPhi_" + histTag;
1036  tkmes.Chi2ProbVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax);
1037  tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1);
1038  tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2);
1039 
1040  histname = "Chi2ProbVsEta_" + histTag;
1041  tkmes.Chi2ProbVsEta = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax);
1042  tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1);
1043  tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2);
1044 
1045  }
1046 
1047  // general properties
1048  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1049 
1050  histname = "TrackP_" + histTag;
1051  tkmes.TrackP = ibooker.book1D(histname, histname, TrackPBin, TrackPMin, TrackPMax);
1052  tkmes.TrackP->setAxisTitle("Track |p| (GeV/c)", 1);
1053  tkmes.TrackP->setAxisTitle("Number of Tracks",2);
1054 
1055  histname = "TrackPt_" + histTag;
1056  tkmes.TrackPt = ibooker.book1D(histname, histname, TrackPtBin, TrackPtMin, TrackPtMax);
1057  tkmes.TrackPt->setAxisTitle("Track p_{T} (GeV/c)", 1);
1058  tkmes.TrackPt->setAxisTitle("Number of Tracks",2);
1059 
1060  if (doTrackPxPyPlots_) {
1061  histname = "TrackPx_" + histTag;
1062  tkmes.TrackPx = ibooker.book1D(histname, histname, TrackPxBin, TrackPxMin, TrackPxMax);
1063  tkmes.TrackPx->setAxisTitle("Track p_{x} (GeV/c)", 1);
1064  tkmes.TrackPx->setAxisTitle("Number of Tracks",2);
1065 
1066  histname = "TrackPy_" + histTag;
1067  tkmes.TrackPy = ibooker.book1D(histname, histname, TrackPyBin, TrackPyMin, TrackPyMax);
1068  tkmes.TrackPy->setAxisTitle("Track p_{y} (GeV/c)", 1);
1069  tkmes.TrackPy->setAxisTitle("Number of Tracks",2);
1070  }
1071  histname = "TrackPz_" + histTag;
1072  tkmes.TrackPz = ibooker.book1D(histname, histname, TrackPzBin, TrackPzMin, TrackPzMax);
1073  tkmes.TrackPz->setAxisTitle("Track p_{z} (GeV/c)", 1);
1074  tkmes.TrackPz->setAxisTitle("Number of Tracks",2);
1075 
1076  histname = "TrackPhi_" + histTag;
1077  tkmes.TrackPhi = ibooker.book1D(histname, histname, PhiBin, PhiMin, PhiMax);
1078  tkmes.TrackPhi->setAxisTitle("Track #phi", 1);
1079  tkmes.TrackPhi->setAxisTitle("Number of Tracks",2);
1080 
1081  histname = "TrackEta_" + histTag;
1082  tkmes.TrackEta = ibooker.book1D(histname, histname, EtaBin, EtaMin, EtaMax);
1083  tkmes.TrackEta->setAxisTitle("Track #eta", 1);
1084  tkmes.TrackEta->setAxisTitle("Number of Tracks",2);
1085 
1086  if (doThetaPlots_) {
1087  histname = "TrackTheta_" + histTag;
1088  tkmes.TrackTheta = ibooker.book1D(histname, histname, ThetaBin, ThetaMin, ThetaMax);
1089  tkmes.TrackTheta->setAxisTitle("Track #theta", 1);
1090  tkmes.TrackTheta->setAxisTitle("Number of Tracks",2);
1091  }
1092  histname = "TrackQ_" + histTag;
1093  tkmes.TrackQ = ibooker.book1D(histname, histname, TrackQBin, TrackQMin, TrackQMax);
1094  tkmes.TrackQ->setAxisTitle("Track Charge", 1);
1095  tkmes.TrackQ->setAxisTitle("Number of Tracks",2);
1096 
1097  histname = "TrackPErrOverP_" + histTag;
1098  tkmes.TrackPErr = ibooker.book1D(histname, histname, pErrBin, pErrMin, pErrMax);
1099  tkmes.TrackPErr->setAxisTitle("track error(p)/p", 1);
1100  tkmes.TrackPErr->setAxisTitle("Number of Tracks",2);
1101 
1102  histname = "TrackPtErrOverPt_" + histTag;
1103  tkmes.TrackPtErr = ibooker.book1D(histname, histname, ptErrBin, ptErrMin, ptErrMax);
1104  tkmes.TrackPtErr->setAxisTitle("track error(p_{T})/p_{T}", 1);
1105  tkmes.TrackPtErr->setAxisTitle("Number of Tracks",2);
1106 
1107  histname = "TrackPtErrOverPtVsEta_" + histTag;
1108  tkmes.TrackPtErrVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, ptErrMin, ptErrMax);
1109  tkmes.TrackPtErrVsEta->setAxisTitle("Track #eta",1);
1110  tkmes.TrackPtErrVsEta->setAxisTitle("track error(p_{T})/p_{T}", 2);
1111 
1112  if (doTrackPxPyPlots_) {
1113  histname = "TrackPxErrOverPx_" + histTag;
1114  tkmes.TrackPxErr = ibooker.book1D(histname, histname, pxErrBin, pxErrMin, pxErrMax);
1115  tkmes.TrackPxErr->setAxisTitle("track error(p_{x})/p_{x}", 1);
1116  tkmes.TrackPxErr->setAxisTitle("Number of Tracks",2);
1117 
1118  histname = "TrackPyErrOverPy_" + histTag;
1119  tkmes.TrackPyErr = ibooker.book1D(histname, histname, pyErrBin, pyErrMin, pyErrMax);
1120  tkmes.TrackPyErr->setAxisTitle("track error(p_{y})/p_{y}", 1);
1121  tkmes.TrackPyErr->setAxisTitle("Number of Tracks",2);
1122  }
1123  histname = "TrackPzErrOverPz_" + histTag;
1124  tkmes.TrackPzErr = ibooker.book1D(histname, histname, pzErrBin, pzErrMin, pzErrMax);
1125  tkmes.TrackPzErr->setAxisTitle("track error(p_{z})/p_{z}", 1);
1126  tkmes.TrackPzErr->setAxisTitle("Number of Tracks",2);
1127 
1128  histname = "TrackPhiErr_" + histTag;
1129  tkmes.TrackPhiErr = ibooker.book1D(histname, histname, phiErrBin, phiErrMin, phiErrMax);
1130  tkmes.TrackPhiErr->setAxisTitle("track error(#phi)");
1131  tkmes.TrackPhiErr->setAxisTitle("Number of Tracks",2);
1132 
1133  histname = "TrackEtaErr_" + histTag;
1134  tkmes.TrackEtaErr = ibooker.book1D(histname, histname, etaErrBin, etaErrMin, etaErrMax);
1135  tkmes.TrackEtaErr->setAxisTitle("track error(#eta)");
1136  tkmes.TrackEtaErr->setAxisTitle("Number of Tracks",2);
1137 
1138  // rec hit profiles
1139  ibooker.setCurrentFolder(TopFolder_+"/GeneralProperties");
1140  histname = "NumberOfRecHitsPerTrackVsPhi_" + histTag;
1141  tkmes.NumberOfRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitBin, RecHitMin, RecHitMax,"");
1142  tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1143  tkmes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of RecHits in each Track",2);
1144 
1145  if (doThetaPlots_) {
1146  histname = "NumberOfRecHitsPerTrackVsTheta_" + histTag;
1147  tkmes.NumberOfRecHitsPerTrackVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecHitBin, RecHitMin, RecHitMax,"");
1148  tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Track #phi",1);
1149  tkmes.NumberOfRecHitsPerTrackVsTheta->setAxisTitle("Number of RecHits in each Track",2);
1150  }
1151  histname = "NumberOfRecHitsPerTrackVsEta_" + histTag;
1152  tkmes.NumberOfRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitBin, RecHitMin, RecHitMax,"");
1153  tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1154  tkmes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of RecHits in each Track",2);
1155 
1156  histname = "NumberOfValidRecHitsPerTrackVsPhi_" + histTag;
1157  tkmes.NumberOfValidRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecHitMin, RecHitMax,"");
1158  tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1159  tkmes.NumberOfValidRecHitsPerTrackVsPhi->setAxisTitle("Number of valid RecHits in each Track",2);
1160 
1161  // std::cout << "[TrackAnalyzer::bookHistosForState] histTag: " << histTag << std::endl;
1162  histname = "NumberOfValidRecHitsPerTrackVsEta_" + histTag;
1163  tkmes.NumberOfValidRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecHitMin, RecHitMax,"");
1164  tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1165  tkmes.NumberOfValidRecHitsPerTrackVsEta->setAxisTitle("Number of valid RecHits in each Track",2);
1166 
1168  histname = "NumberOfLayersPerTrackVsPhi_" + histTag;
1169  tkmes.NumberOfLayersPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, RecLayBin, RecLayMin, RecLayMax,"");
1170  tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1);
1171  tkmes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of Layers in each Track",2);
1172 
1173  if (doThetaPlots_) {
1174  histname = "NumberOfLayersPerTrackVsTheta_" + histTag;
1175  tkmes.NumberOfLayersPerTrackVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, RecLayBin, RecLayMin, RecLayMax,"");
1176  tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Track #phi",1);
1177  tkmes.NumberOfLayersPerTrackVsTheta->setAxisTitle("Number of Layers in each Track",2);
1178  }
1179  histname = "NumberOfLayersPerTrackVsEta_" + histTag;
1180  tkmes.NumberOfLayersPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, RecLayBin, RecLayMin, RecLayMax,"");
1181  tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1);
1182  tkmes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of Layers in each Track",2);
1183 
1184  if (doThetaPlots_) {
1185  histname = "Chi2oNDFVsTheta_" + histTag;
1186  tkmes.Chi2oNDFVsTheta = ibooker.bookProfile(histname, histname, ThetaBin, ThetaMin, ThetaMax, Chi2NDFMin, Chi2NDFMax,"");
1187  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #theta",1);
1188  tkmes.Chi2oNDFVsTheta->setAxisTitle("Track #chi^{2}/ndf",2);
1189  }
1190  if (doAllPlots_) {
1191  histname = "Chi2oNDFVsPhi_" + histTag;
1192  tkmes.Chi2oNDFVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, Chi2NDFMin, Chi2NDFMax,"");
1193  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #phi",1);
1194  tkmes.Chi2oNDFVsPhi->setAxisTitle("Track #chi^{2}/ndf",2);
1195 
1196  histname = "Chi2oNDFVsEta_" + histTag;
1197  tkmes.Chi2oNDFVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, Chi2NDFMin, Chi2NDFMax,"");
1198  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #eta",1);
1199  tkmes.Chi2oNDFVsEta->setAxisTitle("Track #chi^{2}/ndf",2);
1200 
1201  histname = "Chi2ProbVsPhi_" + histTag;
1202  tkmes.Chi2ProbVsPhi = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, PhiBin, PhiMin, PhiMax, Chi2ProbMin, Chi2ProbMax);
1203  tkmes.Chi2ProbVsPhi->setAxisTitle("Tracks #phi" ,1);
1204  tkmes.Chi2ProbVsPhi->setAxisTitle("Track #chi^{2} probability",2);
1205 
1206  histname = "Chi2ProbVsEta_" + histTag;
1207  tkmes.Chi2ProbVsEta = ibooker.bookProfile(histname+CategoryName, histname+CategoryName, EtaBin, EtaMin, EtaMax, Chi2ProbMin, Chi2ProbMax);
1208  tkmes.Chi2ProbVsEta->setAxisTitle("Tracks #eta" ,1);
1209  tkmes.Chi2ProbVsEta->setAxisTitle("Track #chi^{2} probability",2);
1210  }
1211 
1212  // now put the MEs in the map
1213  TkParameterMEMap.insert( std::make_pair(sname, tkmes) );
1214 
1215 }
1216 
1217 
1218 // fill histograms at differnt measurement points
1219 // ---------------------------------------------------------------------------------//
1221 {
1222  //get the kinematic parameters
1223  double p, px, py, pz, pt, theta, phi, eta, q;
1224  double pxerror, pyerror, pzerror, pterror, perror, phierror, etaerror;
1225 
1226  if (sname == "default") {
1227 
1228  p = track.p();
1229  px = track.px();
1230  py = track.py();
1231  pz = track.pz();
1232  pt = track.pt();
1233  phi = track.phi();
1234  theta = track.theta();
1235  eta = track.eta();
1236  q = track.charge();
1237 
1238  pterror = (pt) ? track.ptError()/(pt*pt) : 0.0;
1239  pxerror = -1.0;
1240  pyerror = -1.0;
1241  pzerror = -1.0;
1242  perror = -1.0;
1243  phierror = track.phiError();
1244  etaerror = track.etaError();
1245 
1246  } else {
1247 
1249  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
1250  reco::TransientTrack TransTrack = theB->build(track);
1251 
1253 
1254  if (sname == "OuterSurface") TSOS = TransTrack.outermostMeasurementState();
1255  else if (sname == "InnerSurface") TSOS = TransTrack.innermostMeasurementState();
1256  else if (sname == "ImpactPoint") TSOS = TransTrack.impactPointState();
1257 
1258  p = TSOS.globalMomentum().mag();
1259  px = TSOS.globalMomentum().x();
1260  py = TSOS.globalMomentum().y();
1261  pz = TSOS.globalMomentum().z();
1262  pt = TSOS.globalMomentum().perp();
1263  phi = TSOS.globalMomentum().phi();
1264  theta = TSOS.globalMomentum().theta();
1265  eta = TSOS.globalMomentum().eta();
1266  q = TSOS.charge();
1267 
1268  //get the error of the kinimatic parameters
1270  double partialPterror = errors(3,3)*pow(TSOS.globalMomentum().x(),2) + errors(4,4)*pow(TSOS.globalMomentum().y(),2);
1271  pterror = sqrt(partialPterror)/TSOS.globalMomentum().perp();
1272  pxerror = sqrt(errors(3,3))/TSOS.globalMomentum().x();
1273  pyerror = sqrt(errors(4,4))/TSOS.globalMomentum().y();
1274  pzerror = sqrt(errors(5,5))/TSOS.globalMomentum().z();
1275  perror = sqrt(partialPterror+errors(5,5)*pow(TSOS.globalMomentum().z(),2))/TSOS.globalMomentum().mag();
1276  phierror = sqrt(TSOS.curvilinearError().matrix()(2,2));
1277  etaerror = sqrt(TSOS.curvilinearError().matrix()(1,1))*fabs(sin(TSOS.globalMomentum().theta()));
1278 
1279  }
1280 
1281  std::map<std::string, TkParameterMEs>::iterator iPos = TkParameterMEMap.find(sname);
1282  if (iPos != TkParameterMEMap.end()) {
1283 
1284  TkParameterMEs tkmes = iPos->second;
1285 
1286  // momentum
1287  tkmes.TrackP->Fill(p);
1288  if (doTrackPxPyPlots_) {
1289  tkmes.TrackPx->Fill(px);
1290  tkmes.TrackPy->Fill(py);
1291  }
1292  tkmes.TrackPz->Fill(pz);
1293  tkmes.TrackPt->Fill(pt);
1294 
1295  // angles
1296  tkmes.TrackPhi->Fill(phi);
1297  tkmes.TrackEta->Fill(eta);
1298  if (doThetaPlots_) {
1299  tkmes.TrackTheta->Fill(theta);
1300  }
1301  tkmes.TrackQ->Fill(q);
1302 
1303  // errors
1304  tkmes.TrackPtErr->Fill(pterror);
1305  tkmes.TrackPtErrVsEta->Fill(eta,pterror);
1306  if (doTrackPxPyPlots_) {
1307  tkmes.TrackPxErr->Fill(pxerror);
1308  tkmes.TrackPyErr->Fill(pyerror);
1309  }
1310  tkmes.TrackPzErr->Fill(pzerror);
1311  tkmes.TrackPErr->Fill(perror);
1312  tkmes.TrackPhiErr->Fill(phierror);
1313  tkmes.TrackEtaErr->Fill(etaerror);
1314 
1315  int nRecHits = track.hitPattern().numberOfHits(reco::HitPattern::TRACK_HITS);
1316  int nValidRecHits = track.numberOfValidHits();
1317  // rec hits
1318  tkmes.NumberOfRecHitsPerTrackVsPhi->Fill(phi, nRecHits);
1319  if (doThetaPlots_) {
1320  tkmes.NumberOfRecHitsPerTrackVsTheta->Fill(theta,nRecHits);
1321  }
1322  tkmes.NumberOfRecHitsPerTrackVsEta->Fill(eta, nRecHits);
1323 
1324  tkmes.NumberOfValidRecHitsPerTrackVsPhi->Fill(phi, nValidRecHits);
1325  tkmes.NumberOfValidRecHitsPerTrackVsEta->Fill(eta, nValidRecHits);
1326 
1327  int nLayers = track.hitPattern().trackerLayersWithMeasurement();
1328  // rec layers
1329  tkmes.NumberOfLayersPerTrackVsPhi->Fill(phi, nLayers);
1330  if (doThetaPlots_) {
1331  tkmes.NumberOfLayersPerTrackVsTheta->Fill(theta, nLayers);
1332  }
1333  tkmes.NumberOfLayersPerTrackVsEta->Fill(eta, nLayers);
1334 
1335  double chi2prob = TMath::Prob(track.chi2(),(int)track.ndof());
1336  double chi2oNDF = track.normalizedChi2();
1337 
1338  if(doAllPlots_) {
1339 
1340  // general properties
1341  if (doThetaPlots_) {
1342  tkmes.Chi2oNDFVsTheta->Fill(theta, chi2oNDF);
1343  }
1344  tkmes.Chi2oNDFVsPhi->Fill(phi, chi2oNDF);
1345  tkmes.Chi2oNDFVsEta->Fill(eta, chi2oNDF);
1346  tkmes.Chi2ProbVsPhi->Fill(phi, chi2prob);
1347  tkmes.Chi2ProbVsEta->Fill(eta, chi2prob);
1348  }
1349 
1350  }
1351 
1352 }
1353 
1354 
1356 {
1357 
1358  // parameters from the configuration
1359  std::string QualName = conf_.getParameter<std::string>("Quality");
1361 
1362  // use the AlgoName and Quality Name
1363  std::string CategoryName = QualName != "" ? AlgoName + "_" + QualName : AlgoName;
1364 
1365  int PhiBin = conf_.getParameter<int>( "PhiBin");
1366  double PhiMin = conf_.getParameter<double>("PhiMin");
1367  double PhiMax = conf_.getParameter<double>("PhiMax");
1368 
1369  int EtaBin = conf_.getParameter<int>( "EtaBin");
1370  double EtaMin = conf_.getParameter<double>("EtaMin");
1371  double EtaMax = conf_.getParameter<double>("EtaMax");
1372 
1373  // book hit property histograms
1374  // ---------------------------------------------------------------------------------//
1375  ibooker.setCurrentFolder(TopFolder_+"/HitProperties");
1376 
1377 
1378 
1379  std::vector<std::string> subdetectors = conf_.getParameter<std::vector<std::string> >("subdetectors");
1380  int detBin = conf_.getParameter<int>("subdetectorBin");
1381 
1382  for ( auto det : subdetectors ) {
1383 
1384  // hits properties
1385  ibooker.setCurrentFolder(TopFolder_+"/HitProperties/"+det);
1386 
1387  TkRecHitsPerSubDetMEs recHitsPerSubDet_mes;
1388 
1389  recHitsPerSubDet_mes.detectorTag = det;
1390  int detID = -1;
1391  if ( det == "TIB" ) detID = StripSubdetector::TIB;
1392  if ( det == "TOB" ) detID = StripSubdetector::TOB;
1393  if ( det == "TID" ) detID = StripSubdetector::TID;
1394  if ( det == "TEC" ) detID = StripSubdetector::TEC;
1395  if ( det == "PixBarrel" ) detID = PixelSubdetector::PixelBarrel;
1396  if ( det == "PixEndcap" ) detID = PixelSubdetector::PixelEndcap;
1397  recHitsPerSubDet_mes.detectorId = detID;
1398 
1399  histname = "NumberOfRecHitsPerTrack_" + det + "_" + CategoryName;
1400  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack = ibooker.book1D(histname, histname, detBin, -0.5, double(detBin)-0.5);
1401  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of " + det + " valid RecHits in each Track",1);
1402  recHitsPerSubDet_mes.NumberOfRecHitsPerTrack->setAxisTitle("Number of Tracks", 2);
1403 
1404  histname = "NumberOfRecHitsPerTrackVsPhi_" + det + "_" + CategoryName;
1405  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,"");
1406  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Track #phi",1);
1407  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsPhi->setAxisTitle("Number of " + det + " valid RecHits in each Track",2);
1408 
1409  histname = "NumberOfRecHitsPerTrackVsEta_" + det + "_" + CategoryName;
1410  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,"");
1411  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Track #eta",1);
1412  recHitsPerSubDet_mes.NumberOfRecHitsPerTrackVsEta->setAxisTitle("Number of " + det + " valid RecHits in each Track",2);
1413 
1414  histname = "NumberOfLayersPerTrack_" + det + "_" + CategoryName;
1415  recHitsPerSubDet_mes.NumberOfLayersPerTrack = ibooker.book1D(histname, histname, detBin, -0.5, double(detBin)-0.5);
1416  recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of " + det + " valid Layers in each Track",1);
1417  recHitsPerSubDet_mes.NumberOfLayersPerTrack->setAxisTitle("Number of Tracks", 2);
1418 
1419  histname = "NumberOfLayersPerTrackVsPhi_" + det + "_" + CategoryName;
1420  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi = ibooker.bookProfile(histname, histname, PhiBin, PhiMin, PhiMax, detBin, -0.5, double(detBin)-0.5,"");
1421  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Track #phi",1);
1422  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsPhi->setAxisTitle("Number of " + det + " valid Layers in each Track",2);
1423 
1424  histname = "NumberOfLayersPerTrackVsEta_" + det + "_" + CategoryName;
1425  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta = ibooker.bookProfile(histname, histname, EtaBin, EtaMin, EtaMax, detBin, -0.5, double(detBin)-0.5,"");
1426  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Track #eta",1);
1427  recHitsPerSubDet_mes.NumberOfLayersPerTrackVsEta->setAxisTitle("Number of " + det + " valid Layers in each Track",2);
1428 
1429  TkRecHitsPerSubDetMEMap.insert(std::pair<std::string,TkRecHitsPerSubDetMEs>(det,recHitsPerSubDet_mes));
1430 
1431 
1432  }
1433 
1434 
1435 }
1436 
1437 
1439 {
1440 
1441  double phi = track.phi();
1442  double eta = track.eta();
1443 
1444  for ( std::map<std::string,TkRecHitsPerSubDetMEs>::iterator it = TkRecHitsPerSubDetMEMap.begin();
1445  it != TkRecHitsPerSubDetMEMap.end(); it++ ) {
1446 
1447  int nValidLayers = 0;
1448  int nValidRecHits = 0;
1449  int substr = it->second.detectorId;
1450  switch(substr) {
1451  case StripSubdetector::TIB :
1452  nValidLayers = track.hitPattern().stripTIBLayersWithMeasurement(); // case 0: strip TIB
1453  nValidRecHits = track.hitPattern().numberOfValidStripTIBHits(); // case 0: strip TIB
1454  break;
1455  case StripSubdetector::TID :
1456  nValidLayers = track.hitPattern().stripTIDLayersWithMeasurement(); // case 0: strip TID
1457  nValidRecHits = track.hitPattern().numberOfValidStripTIDHits(); // case 0: strip TID
1458  break;
1459  case StripSubdetector::TOB :
1460  nValidLayers = track.hitPattern().stripTOBLayersWithMeasurement(); // case 0: strip TOB
1461  nValidRecHits = track.hitPattern().numberOfValidStripTOBHits(); // case 0: strip TOB
1462  break;
1463  case StripSubdetector::TEC :
1464  nValidLayers = track.hitPattern().stripTECLayersWithMeasurement(); // case 0: strip TEC
1465  nValidRecHits = track.hitPattern().numberOfValidStripTECHits(); // case 0: strip TEC
1466  break;
1468  nValidLayers = track.hitPattern().pixelBarrelLayersWithMeasurement(); // case 0: pixel PXB
1469  nValidRecHits = track.hitPattern().numberOfValidPixelBarrelHits(); // case 0: pixel PXB
1470  break;
1472  nValidLayers = track.hitPattern().pixelEndcapLayersWithMeasurement(); // case 0: pixel PXF
1473  nValidRecHits = track.hitPattern().numberOfValidPixelEndcapHits(); // case 0: pixel PXF
1474  break;
1475  default :
1476  break;
1477  }
1478 
1479  //Fill Layers and RecHits
1480  it->second.NumberOfRecHitsPerTrack -> Fill(nValidRecHits);
1481  it->second.NumberOfRecHitsPerTrackVsPhi -> Fill(phi, nValidRecHits);
1482  it->second.NumberOfRecHitsPerTrackVsEta -> Fill(eta, nValidRecHits);
1483 
1484  it->second.NumberOfLayersPerTrack -> Fill(nValidLayers);
1485  it->second.NumberOfLayersPerTrackVsPhi -> Fill(phi, nValidLayers);
1486  it->second.NumberOfLayersPerTrackVsEta -> Fill(eta, nValidLayers);
1487  }
1488 
1489 }
1490 //
1491 // -- Set Lumi Flag
1492 //
1494 
1495  TkParameterMEs tkmes;
1498 }
1499 //
1500 // -- Apply SoftReset
1501 //
1503  TkParameterMEs tkmes;
1504  dqmStore_->softReset(Chi2oNDF);
1505  dqmStore_->softReset(NumberOfRecHitsPerTrack);
1506 }
1507 //
1508 // -- Apply Reset
1509 //
1511  TkParameterMEs tkmes;
1514 }
1515 //
1516 // -- Remove SoftReset
1517 //
1519  TkParameterMEs tkmes;
1520  dqmStore_->disableSoftReset(Chi2oNDF);
1522 }
1523 
1524 
MonitorElement * NumberOfRecHitsPerTrackVsPhi
MonitorElement * NumberOfValidRecHitsPerTrackVsPhi
MonitorElement * Chi2ProbVsPhi
double p() const
momentum vector magnitude
Definition: TrackBase.h:578
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
MonitorElement * NumberOfLayersPerTrackVsPhi
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:563
T getParameter(std::string const &) const
MonitorElement * DistanceOfClosestApproachToPVVsPhi
const Point & referencePoint() const
Reference point on the track.
Definition: TrackBase.h:644
int i
Definition: DBlmapReader.cc:9
MonitorElement * NumberOfRecHitVsPhiVsEtaPerTrack
bool doTrackerSpecific_
Definition: TrackAnalyzer.h:66
double d0Error() const
error on d0
Definition: TrackBase.h:765
void fillHistosForTrackerSpecific(const reco::Track &track)
MonitorElement * NumberOfRecHitsPerTrackVsEta
void bookHistosForLScertification(DQMStore::IBooker &ibooker)
T perp() const
Definition: PV3DBase.h:72
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
Definition: TrackBase.h:560
MonitorElement * NumberOfValidRecHitsPerTrack
int stripTIBLayersWithMeasurement() const
Definition: HitPattern.cc:541
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:524
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:118
MonitorElement * Chi2oNDF_lumiFlag
double theta() const
polar angle
Definition: TrackBase.h:542
double dxyError() const
error on dxy
Definition: TrackBase.h:759
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
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:64
const CartesianTrajectoryError cartesianError() const
Geom::Theta< T > theta() const
bool doGeneralPropertiesPlots_
Definition: TrackAnalyzer.h:71
T y() const
Definition: PV3DBase.h:63
double etaError() const
error on eta
Definition: TrackBase.h:747
MonitorElement * Chi2oNDFVsPhi
MonitorElement * Chi2ProbVsPhi
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:608
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:789
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
MonitorElement * sipDzToBS
std::map< std::string, TkParameterMEs > TkParameterMEMap
MonitorElement * NumberOfLayersPerTrack[4]
MonitorElement * NhitVsPhi_HighPurity
MonitorElement * NumberOfRecHitsPerTrackVsTheta
MonitorElement * algorithm
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:590
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:458
bool doHitPropertiesPlots_
Definition: TrackAnalyzer.h:73
MonitorElement * DistanceOfClosestApproach
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:65
bool doRecHitVsPhiVsEtaPerTrack_
Definition: TrackAnalyzer.h:74
MonitorElement * NumberOfLayersPerTrackVsTheta
MonitorElement * NumberOfRecHitsPerTrack_lumiFlag
std::map< std::string, TkRecHitsPerSubDetMEs > TkRecHitsPerSubDetMEMap
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:477
const Point & position() const
position
Definition: Vertex.h:106
MonitorElement * NumberOfValidRecHitVsPhiVsEtaPerTrack
int pixelEndcapLayersWithMeasurement() const
Definition: HitPattern.cc:529
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:779
bool doMeasurementStatePlots_
Definition: TrackAnalyzer.h:72
TrajectoryStateOnSurface innermostMeasurementState() const
MonitorElement * NumberOfRecHitsPerTrack
void Fill(long long x)
int numberOfLostTrackerHits(HitCategory category) const
Definition: HitPattern.h:809
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:460
void disableSoftReset(MonitorElement *me)
Definition: DQMStore.cc:3382
MonitorElement * TESTDistanceOfClosestApproachToBSVsPhi
MonitorElement * NumberOfValidRecHitsPerTrackVsEta
MonitorElement * Chi2oNDFVsEta
MonitorElement * TransDCASig
int iEvent
Definition: GenABIO.cc:230
MonitorElement * NumberOfMIRecHitVsPhiVsEtaPerTrack
MonitorElement * NumberOfRecHitsPerTrackVsPhi
MonitorElement * xPointOfClosestApproachVsZ0wrt000
T mag() const
Definition: PV3DBase.h:67
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:614
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
Definition: HitPattern.cc:300
std::string qualityString_
int trackerLayersTotallyOffOrBad() const
Definition: HitPattern.h:945
int numberOfValidPixelBarrelHits() const
Definition: HitPattern.h:754
MonitorElement * oriAlgo
bool doDCAwrt000Plots_
Definition: TrackAnalyzer.h:88
MonitorElement * NumberOfRecHitsPerTrackVsTheta
MonitorElement * NumberOfLostRecHitVsPhiVsEtaPerTrack
MonitorElement * xPointOfClosestApproach
MonitorElement * Chi2oNDFVsTheta
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:512
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:518
int stripTIDLayersWithMeasurement() const
Definition: HitPattern.cc:552
MonitorElement * NumberOfValidRecHitsPerTrackVsEta
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * NumberOfRecHitsPerTrackVsPhi
double pt() const
track transverse momentum
Definition: TrackBase.h:584
T z() const
Definition: PV3DBase.h:64
MonitorElement * dNdPt_HighPurity
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:726
std::string TopFolder_
Definition: TrackAnalyzer.h:59
MonitorElement * xPointOfClosestApproachVsZ0wrtBS
double phiError() const
error on phi
Definition: TrackBase.h:753
MonitorElement * NumberOfValidRecHitsPerTrackVsPhi
MonitorElement * dNdPhi_HighPurity
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:774
TH1 * getTH1(void) const
MonitorElement * yPointOfClosestApproachToPV
const double EtaMin[kNumberCalorimeter]
MonitorElement * NumberOfRecHitsPerTrackVsEta
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:783
int numberOfValidStripTECHits() const
Definition: HitPattern.h:784
MonitorElement * sip2dToPV
void softReset(MonitorElement *me)
Definition: DQMStore.cc:3374
MonitorElement * Chi2oNDFVsTheta
TrajectoryStateOnSurface outermostMeasurementState() const
MonitorElement * sipDzToPV
MonitorElement * sipDxyToBS
void bookHistosForHitProperties(DQMStore::IBooker &ibooker)
MonitorElement * DistanceOfClosestApproachVsEta
MonitorElement * zPointOfClosestApproachVsPhi
const AlgebraicSymMatrix66 & matrix() const
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:602
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:572
MonitorElement * NumberOfLayersPerTrackVsEta
double dzError() const
error on dz
Definition: TrackBase.h:777
MonitorElement * dNdEta_HighPurity
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:632
void bookHistosForTrackerSpecific(DQMStore::IBooker &ibooker)
void fillHistosForState(const edm::EventSetup &iSetup, const reco::Track &track, std::string sname)
TrackAlgorithm originalAlgo() const
Definition: TrackBase.h:464
TrajectoryStateOnSurface TSOS
Definition: TestHits.cc:19
virtual ~TrackAnalyzer()
bool doLumiAnalysis_
Definition: TrackAnalyzer.h:90
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:123
double xError() const
error on x
Definition: Vertex.h:114
MonitorElement * NumberOfLayersPerTrackVsEta
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: TrackAnalyzer.h:61
MonitorElement * sipDxyToPV
virtual void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::Track &track)
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:421
MonitorElement * xPointOfClosestApproachVsZ0wrtPV
MonitorElement * yPointOfClosestApproachVsZ0wrtBS
const T & get() const
Definition: EventSetup.h:55
int pixelBarrelLayersWithMeasurement() const
Definition: HitPattern.cc:517
MonitorElement * DistanceOfClosestApproachVsTheta
void bookHistosForBeamSpot(DQMStore::IBooker &ibooker)
virtual void initHisto(DQMStore::IBooker &ibooker)
MonitorElement * Chi2ProbVsEta
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:769
static const std::string algoNames[]
Definition: TrackBase.h:146
bool quality(const TrackQuality) const
Track quality.
Definition: TrackBase.h:473
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:759
MonitorElement * zPointOfClosestApproachToPV
T eta() const
Definition: PV3DBase.h:76
int trackerLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:494
MonitorElement * DistanceOfClosestApproachToPV
double vy() const
y coordinate of the reference point on track
Definition: TrackBase.h:626
const AlgebraicSymMatrix55 & matrix() const
bool doTrackPxPyPlots_
Definition: TrackAnalyzer.h:84
GlobalVector globalMomentum() const
MonitorElement * DistanceOfClosestApproachToBSVsPhi
bool doLayersVsPhiVsEtaPerTrack_
Definition: TrackAnalyzer.h:76
MonitorElement * NhitVsEta_HighPurity
void doSoftReset(DQMStore *dqmStore_)
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:574
MonitorElement * yPointOfClosestApproachVsZ0wrt000
MonitorElement * TrackPtErrVsEta
MonitorElement * TESTDistanceOfClosestApproachToBS
MonitorElement * NumberOfRecHitsPerTrackVsEta
int charge() const
track electric charge
Definition: TrackBase.h:530
const Point & position() const
position
Definition: BeamSpot.h:62
TrajectoryStateOnSurface impactPointState() const
void bookHistosForState(std::string sname, DQMStore::IBooker &ibooker)
MonitorElement * yPointOfClosestApproach
void Reset(std::vector< TH2F > &depth)
dbl *** dir
Definition: mlp_gen.cc:35
MonitorElement * Chi2Prob
Definition: Chi2.h:17
MonitorElement * yPointOfClosestApproachVsZ0wrtPV
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:554
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)
MonitorElement * Chi2ProbVsEta
MonitorElement * DistanceOfClosestApproachToBS
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:116
std::string histname
MonitorElement * Chi2oNDFVsEta
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:596
double vx() const
x coordinate of the reference point on track
Definition: TrackBase.h:620
void undoSoftReset(DQMStore *dqmStore_)
int numberOfHits(HitCategory category) const
Definition: HitPattern.h:718
MonitorElement * NumberOfMORecHitVsPhiVsEtaPerTrack
MonitorElement * NumberOfMORecHitsPerTrack
MonitorElement * NumberOfLayersPerTrackVsPhi
MonitorElement * LongDCASig
edm::EDGetTokenT< reco::VertexCollection > pvToken_
Definition: TrackAnalyzer.h:62
MonitorElement * Chi2oNDFVsPhi