CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RecoMuonValidator.cc
Go to the documentation of this file.
2 
8 
12 
17 
20 
21 #include "TMath.h"
22 
23 using namespace std;
24 using namespace edm;
25 using namespace reco;
26 
29 
31  unsigned int nBinP;
32  double minP, maxP;
33 
34  unsigned int nBinPt;
35  double minPt, maxPt;
36 
37  bool doAbsEta;
38  unsigned int nBinEta;
39  double minEta, maxEta;
40 
41  unsigned int nBinPhi;
42  double minPhi, maxPhi;
43 
44  unsigned int nBinPull;
45  double wPull;
46 
47  unsigned int nBinErr;
48  double minErrP, maxErrP;
49  double minErrPt, maxErrPt;
50  double minErrQPt, maxErrQPt;
51  double minErrEta, maxErrEta;
52  double minErrPhi, maxErrPhi;
53  double minErrDxy, maxErrDxy;
54  double minErrDz, maxErrDz;
55 
56  unsigned int nTrks, nAssoc;
57  unsigned int nDof;
58 };
59 
61  void bookHistograms(DQMStore* dqm, const string& dirName, const HistoDimensions& hDim)
62  {
63  dqm->cd();
64  dqm->setCurrentFolder(dirName.c_str());
65 
66  doAbsEta_ = hDim.doAbsEta;
67 
68  hP_ = dqm->book1D("P" , "p of recoTracks" , hDim.nBinP , hDim.minP , hDim.maxP );
69  hPt_ = dqm->book1D("Pt" , "p_{T} of recoTracks", hDim.nBinPt , hDim.minPt , hDim.maxPt );
70  hEta_ = dqm->book1D("Eta", "#eta of recoTracks" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
71  hPhi_ = dqm->book1D("Phi", "#phi of recoTracks" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
72 
73  // - Resolutions
74  hErrP_ = dqm->book1D("ErrP" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
75  hErrPBarrel_ = dqm->book1D("ErrP_barrel" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
76  hErrPOverlap_ = dqm->book1D("ErrP_overlap" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
77  hErrPEndcap_ = dqm->book1D("ErrP_endcap" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
78  hErrPt_ = dqm->book1D("ErrPt" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
79  hErrPtBarrel_ = dqm->book1D("ErrPt_barrel" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
80  hErrPtOverlap_ = dqm->book1D("ErrPt_overlap" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
81  hErrPtEndcap_ = dqm->book1D("ErrPt_endcap" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
82  hErrEta_ = dqm->book1D("ErrEta", "#sigma(#eta))" , hDim.nBinErr, hDim.minErrEta, hDim.maxErrEta);
83  hErrPhi_ = dqm->book1D("ErrPhi", "#sigma(#phi)" , hDim.nBinErr, hDim.minErrPhi, hDim.maxErrPhi);
84  hErrDxy_ = dqm->book1D("ErrDxy", "#sigma(d_{xy})" , hDim.nBinErr, hDim.minErrDxy, hDim.maxErrDxy);
85  hErrDz_ = dqm->book1D("ErrDz" , "#sigma(d_{z})" , hDim.nBinErr, hDim.minErrDz , hDim.maxErrDz );
86 
87  // -- Resolutions vs Eta
88  hErrP_vs_Eta_ = dqm->book2D("ErrP_vs_Eta", "#Delta(p)/p vs #eta",
89  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrP, hDim.maxErrP);
90  hErrPt_vs_Eta_ = dqm->book2D("ErrPt_vs_Eta", "#Delta(p_{T})/p_{T} vs #eta",
91  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrPt, hDim.maxErrPt);
92  hErrQPt_vs_Eta_ = dqm->book2D("ErrQPt_vs_Eta", "#Delta(q/p_{T})/(q/p_{T}) vs #eta",
93  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrQPt, hDim.maxErrQPt);
94  hErrEta_vs_Eta_ = dqm->book2D("ErrEta_vs_Eta", "#sigma(#eta) vs #eta",
95  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrEta, hDim.maxErrEta);
96 
97  // -- Resolutions vs momentum
98  hErrP_vs_P_ = dqm->book2D("ErrP_vs_P", "#Delta(p)/p vs p",
99  hDim.nBinP, hDim.minP, hDim.maxP, hDim.nBinErr, hDim.minErrP, hDim.maxErrP);
100 
101  hErrPt_vs_Pt_ = dqm->book2D("ErrPt_vs_Pt", "#Delta(p_{T})/p_{T} vs p_{T}",
102  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinErr, hDim.minErrPt, hDim.maxErrPt);
103  hErrQPt_vs_Pt_ = dqm->book2D("ErrQPt_vs_Pt", "#Delta(q/p_{T})/(q/p_{T}) vs p_{T}",
104  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinErr, hDim.minErrQPt, hDim.maxErrQPt);
105 
106 
107  // - Pulls
108  hPullPt_ = dqm->book1D("PullPt" , "Pull(#p_{T})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
109  hPullEta_ = dqm->book1D("PullEta", "Pull(#eta)" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
110  hPullPhi_ = dqm->book1D("PullPhi", "Pull(#phi)" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
111  hPullQPt_ = dqm->book1D("PullQPt", "Pull(q/p_{T})", hDim.nBinPull, -hDim.wPull, hDim.wPull);
112  hPullDxy_ = dqm->book1D("PullDxy", "Pull(D_{xy})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
113  hPullDz_ = dqm->book1D("PullDz" , "Pull(D_{z})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
114 
115  // -- Pulls vs Eta
116  hPullPt_vs_Eta_ = dqm->book2D("PullPt_vs_Eta", "Pull(p_{T}) vs #eta",
117  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
118  hPullEta_vs_Eta_ = dqm->book2D("PullEta_vs_Eta", "Pull(#eta) vs #eta",
119  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
120  hPullPhi_vs_Eta_ = dqm->book2D("PullPhi_vs_Eta", "Pull(#phi) vs #eta",
121  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
122 
123  // -- Pulls vs Pt
124  hPullPt_vs_Pt_ = dqm->book2D("PullPt_vs_Pt", "Pull(p_{T}) vs p_{T}",
125  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinPull, -hDim.wPull, hDim.wPull);
126  hPullEta_vs_Pt_ = dqm->book2D("PullEta_vs_Pt", "Pull(#eta) vs p_{T}",
127  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinPull, -hDim.wPull, hDim.wPull);
128 
129  // - Misc. variables
130  hNTrks_ = dqm->book1D("NTrks", "Number of reco tracks per event", hDim.nTrks, 0, hDim.nTrks);
131  hNTrksEta_ = dqm->book1D("NTrksEta", "Number of reco tracks vs #eta", hDim.nBinEta, hDim.minEta, hDim.maxEta);
132  hNTrksPt_ = dqm->book1D("NTrksPt", "Number of reco tracks vs p_{T}", hDim.nBinPt, hDim.minPt, hDim.maxPt);
133 
134  hMisQPt_ = dqm->book1D("MisQPt" , "Charge mis-id vs Pt" , hDim.nBinPt , hDim.minPt , hDim.maxPt );
135  hMisQEta_ = dqm->book1D("MisQEta", "Charge mis-id vs Eta", hDim.nBinEta, hDim.minEta, hDim.maxEta);
136 
137  // -- Number of Hits
138  const int nHits = 80;
139  hNHits_ = dqm->book1D("NHits", "Number of hits", nHits, 0, nHits);
140  hNHits_vs_Pt_ = dqm->book2D("NHits_vs_Pt", "Number of hits vs p_{T}",
141  hDim.nBinPt, hDim.minPt, hDim.maxPt, nHits/4, 0, nHits);
142  hNHits_vs_Eta_ = dqm->book2D("NHits_vs_Eta", "Number of hits vs #eta",
143  hDim.nBinEta, hDim.minEta, hDim.maxEta, nHits/4, 0, nHits);
144 
145  hNSimHits_ = dqm->book1D("NSimHits", "Number of simHits", nHits, 0, nHits);
146 
147  const int nLostHits = 5;
148  hNLostHits_ = dqm->book1D("NLostHits", "Number of Lost hits", nLostHits, 0, nLostHits);
149  hNLostHits_vs_Pt_ = dqm->book2D("NLostHits_vs_Pt", "Number of lost Hits vs p_{T}",
150  hDim.nBinPt, hDim.minPt, hDim.maxPt, nLostHits, 0, nLostHits);
151  hNLostHits_vs_Eta_ = dqm->book2D("NLostHits_vs_Eta", "Number of lost Hits vs #eta",
152  hDim.nBinEta, hDim.minEta, hDim.maxEta, nLostHits, 0, nLostHits);
153 
154  const int nTrackerHits = 40;
155  hNTrackerHits_ = dqm->book1D("NTrackerHits", "Number of valid tracker hits", nTrackerHits, 0, nTrackerHits);
156  hNTrackerHits_vs_Pt_ = dqm->book2D("NTrackerHits_vs_Pt", "Number of valid traker hits vs p_{T}",
157  hDim.nBinPt, hDim.minPt, hDim.maxPt, nTrackerHits/4, 0, nTrackerHits);
158  hNTrackerHits_vs_Eta_ = dqm->book2D("NTrackerHits_vs_Eta", "Number of valid tracker hits vs #eta",
159  hDim.nBinEta, hDim.minEta, hDim.maxEta, nTrackerHits/4, 0, nTrackerHits);
160 
161  const int nMuonHits = 40;
162  hNMuonHits_ = dqm->book1D("NMuonHits", "Number of valid muon hits", nMuonHits, 0, nMuonHits);
163  hNMuonHits_vs_Pt_ = dqm->book2D("NMuonHits_vs_Pt", "Number of valid muon hits vs p_{T}",
164  hDim.nBinPt, hDim.minPt, hDim.maxPt, nMuonHits/4, 0, nMuonHits);
165  hNMuonHits_vs_Eta_ = dqm->book2D("NMuonHits_vs_Eta", "Number of valid muon hits vs #eta",
166  hDim.nBinEta, hDim.minEta, hDim.maxEta, nMuonHits/4, 0, nMuonHits);
167 
168  hNDof_ = dqm->book1D("NDof", "Number of DoF", hDim.nDof, 0, hDim.nDof);
169  hChi2_ = dqm->book1D("Chi2", "#Chi^{2}", hDim.nBinErr, 0, 200);
170  hChi2Norm_ = dqm->book1D("Chi2Norm", "Normalized #Chi^{2}", hDim.nBinErr, 0, 50);
171  hChi2Prob_ = dqm->book1D("Chi2Prob", "Prob(#Chi^{2})", hDim.nBinErr, 0, 1);
172 
173  hNDof_vs_Eta_ = dqm->book2D("NDof_vs_Eta", "Number of DoF vs #eta",
174  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, hDim.nDof);
175  hChi2_vs_Eta_ = dqm->book2D("Chi2_vs_Eta", "#Chi^{2} vs #eta",
176  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 200);
177  hChi2Norm_vs_Eta_ = dqm->book2D("Chi2Norm_vs_Eta", "Normalized #Chi^{2} vs #eta",
178  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 100);
179  hChi2Prob_vs_Eta_ = dqm->book2D("Chi2Prob_vs_Eta", "Prob(#Chi^{2}) vs #eta",
180  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 1);
181 
182  hNSimToReco_ = dqm->book1D("NSimToReco", "Number of associated reco tracks", hDim.nAssoc, 0, hDim.nAssoc);
183  hNRecoToSim_ = dqm->book1D("NRecoToSim", "Number of associated sim TP's", hDim.nAssoc, 0, hDim.nAssoc);
184  };
185 
186  void fill(const TrackingParticle* simRef, const Track* recoRef)
187  {
188  const double simP = simRef->p();
189  const double simPt = simRef->pt();
190  const double simEta = doAbsEta_ ? fabs(simRef->eta()) : simRef->eta();
191  const double simPhi = simRef->phi();
192  const double simQ = simRef->charge();
193  const double simQPt = simQ/simPt;
194 
195  GlobalPoint simVtx(simRef->vertex().x(), simRef->vertex().y(), simRef->vertex().z());
196  GlobalVector simMom(simRef->momentum().x(), simRef->momentum().y(), simRef->momentum().z());
197  const double simDxy = -simVtx.x()*sin(simPhi)+simVtx.y()*cos(simPhi);
198  const double simDz = simVtx.z() - (simVtx.x()*simMom.x()+simVtx.y()*simMom.y())*simMom.z()/simMom.perp2();
199 
200  const unsigned int nSimHits = simRef->pSimHit_end() - simRef->pSimHit_begin();
201 
202  // Histograms for efficiency plots
203  hP_ ->Fill(simP );
204  hPt_ ->Fill(simPt );
205  hEta_->Fill(simEta);
206  hPhi_->Fill(simPhi);
207  hNSimHits_->Fill(nSimHits);
208 
209  // Number of reco-hits
210  const int nRecoHits = recoRef->numberOfValidHits();
211  const int nLostHits = recoRef->numberOfLostHits();
212 
213  hNHits_->Fill(nRecoHits);
214  hNHits_vs_Pt_ ->Fill(simPt , nRecoHits);
215  hNHits_vs_Eta_->Fill(simEta, nRecoHits);
216 
217  hNLostHits_->Fill(nLostHits);
218  hNLostHits_vs_Pt_ ->Fill(simPt , nLostHits);
219  hNLostHits_vs_Eta_->Fill(simEta, nLostHits);
220 
221  const double recoNDof = recoRef->ndof();
222  const double recoChi2 = recoRef->chi2();
223  const double recoChi2Norm = recoRef->normalizedChi2();
224  const double recoChi2Prob = TMath::Prob(recoRef->chi2(), static_cast<int>(recoRef->ndof()));
225 
226  hNDof_->Fill(recoNDof);
227  hChi2_->Fill(recoChi2);
228  hChi2Norm_->Fill(recoChi2Norm);
229  hChi2Prob_->Fill(recoChi2Prob);
230 
231  hNDof_vs_Eta_->Fill(simEta, recoNDof);
232  hChi2_vs_Eta_->Fill(simEta, recoChi2);
233  hChi2Norm_vs_Eta_->Fill(simEta, recoChi2Norm);
234  hChi2Prob_vs_Eta_->Fill(simEta, recoChi2Prob);
235 
236  const double recoQ = recoRef->charge();
237  if ( simQ*recoQ < 0 ) {
238  hMisQPt_ ->Fill(simPt );
239  hMisQEta_->Fill(simEta);
240  }
241 
242  const double recoP = sqrt(recoRef->momentum().mag2());
243  const double recoPt = sqrt(recoRef->momentum().perp2());
244  const double recoEta = recoRef->momentum().eta();
245  const double recoPhi = recoRef->momentum().phi();
246  const double recoQPt = recoQ/recoPt;
247 
248  const double recoDxy = recoRef->dxy();
249  const double recoDz = recoRef->dz();
250 
251  const double errP = (recoP-simP)/simP;
252  const double errPt = (recoPt-simPt)/simPt;
253  const double errEta = (recoEta-simEta)/simEta;
254  const double errPhi = (recoPhi-simPhi)/simPhi;
255  const double errQPt = (recoQPt-simQPt)/simQPt;
256 
257  const double errDxy = (recoDxy-simDxy)/simDxy;
258  const double errDz = (recoDz-simDz)/simDz;
259 
260  hErrP_ ->Fill(errP );
261  hErrPt_ ->Fill(errPt );
262  hErrEta_->Fill(errEta);
263  hErrPhi_->Fill(errPhi);
264  hErrDxy_->Fill(errDxy);
265  hErrDz_ ->Fill(errDz );
266 
267  if(fabs(simEta) > 0. && fabs(simEta) < 0.8) {
268  hErrPBarrel_->Fill(errP);
269  hErrPtBarrel_->Fill(errPt);
270  } else if (fabs(simEta) > 0.8 && fabs(simEta) < 1.2) {
271  hErrPOverlap_->Fill(errP);
272  hErrPtOverlap_->Fill(errPt);
273  } else if (fabs(simEta) > 1.2 ){
274  hErrPEndcap_->Fill(errP);
275  hErrPtEndcap_->Fill(errPt);
276  }
277 
278  hErrP_vs_Eta_ ->Fill(simEta, errP );
279  hErrPt_vs_Eta_ ->Fill(simEta, errPt );
280  hErrQPt_vs_Eta_->Fill(simEta, errQPt);
281 
282  hErrP_vs_P_ ->Fill(simP , errP );
283  hErrPt_vs_Pt_ ->Fill(simPt , errPt );
284  hErrQPt_vs_Pt_->Fill(simQPt, errQPt);
285 
286  hErrEta_vs_Eta_->Fill(simEta, errEta);
287 
288  const double pullPt = (recoPt-simPt)/recoRef->ptError();
289  const double pullQPt = (recoQPt-simQPt)/recoRef->qoverpError();
290  const double pullEta = (recoEta-simEta)/recoRef->etaError();
291  const double pullPhi = (recoPhi-simPhi)/recoRef->phiError();
292  const double pullDxy = (recoDxy-simDxy)/recoRef->dxyError();
293  const double pullDz = (recoDz-simDz)/recoRef->dzError();
294 
295  hPullPt_ ->Fill(pullPt );
296  hPullEta_->Fill(pullEta);
297  hPullPhi_->Fill(pullPhi);
298  hPullQPt_->Fill(pullQPt);
299  hPullDxy_->Fill(pullDxy);
300  hPullDz_ ->Fill(pullDz );
301 
302  hPullPt_vs_Eta_->Fill(simEta, pullPt);
303  hPullPt_vs_Pt_ ->Fill(simPt, pullPt);
304 
305  hPullEta_vs_Eta_->Fill(simEta, pullEta);
306  hPullPhi_vs_Eta_->Fill(simEta, pullPhi);
307 
308  hPullEta_vs_Pt_->Fill(simPt, pullEta);
309 
310 
311  };
312 
313  bool doAbsEta_;
314 
315  typedef MonitorElement* MEP;
316 
317  MEP hP_, hPt_, hEta_, hPhi_;
318  MEP hErrP_, hErrPt_, hErrEta_, hErrPhi_;
319  MEP hErrPBarrel_, hErrPOverlap_, hErrPEndcap_;
320  MEP hErrPtBarrel_, hErrPtOverlap_, hErrPtEndcap_;
321  MEP hErrDxy_, hErrDz_;
322 
323  MEP hErrP_vs_Eta_, hErrPt_vs_Eta_, hErrQPt_vs_Eta_;
324  MEP hErrP_vs_P_, hErrPt_vs_Pt_, hErrQPt_vs_Pt_, hErrEta_vs_Eta_;
325 
326  MEP hPullPt_, hPullEta_, hPullPhi_, hPullQPt_, hPullDxy_, hPullDz_;
327  MEP hPullPt_vs_Eta_, hPullPt_vs_Pt_, hPullEta_vs_Eta_, hPullPhi_vs_Eta_, hPullEta_vs_Pt_;
328 
329  MEP hNDof_, hChi2_, hChi2Norm_, hChi2Prob_;
330  MEP hNDof_vs_Eta_, hChi2_vs_Eta_, hChi2Norm_vs_Eta_, hChi2Prob_vs_Eta_;
331 
332  MEP hNTrks_, hNTrksEta_, hNTrksPt_;
333 
334  MEP hMisQPt_, hMisQEta_;
335 
337  MEP hNHits_, hNLostHits_, hNTrackerHits_, hNMuonHits_;
338  MEP hNHits_vs_Pt_, hNHits_vs_Eta_;
339  MEP hNLostHits_vs_Pt_, hNLostHits_vs_Eta_;
340  MEP hNTrackerHits_vs_Pt_, hNTrackerHits_vs_Eta_;
341  MEP hNMuonHits_vs_Pt_, hNMuonHits_vs_Eta_;
342 
343  MEP hNSimToReco_, hNRecoToSim_;
344 };
345 
347  typedef MonitorElement* MEP;
348 
349  MEP hSimP_, hSimPt_, hSimEta_, hSimPhi_;
350  MEP hNSim_, hNMuon_;
352 
353  MEP hTrkToGlbDiffNTrackerHits_, hStaToGlbDiffNMuonHits_;
354  MEP hTrkToGlbDiffNTrackerHitsEta_, hStaToGlbDiffNMuonHitsEta_;
355  MEP hTrkToGlbDiffNTrackerHitsPt_, hStaToGlbDiffNMuonHitsPt_;
356 };
357 
359 {
360  verbose_ = pset.getUntrackedParameter<unsigned int>("verbose", 0);
361 
362  outputFileName_ = pset.getUntrackedParameter<string>("outputFileName", "");
363 
364  // Set histogram dimensions
365  HistoDimensions hDim;
366 
367  hDim.nBinP = pset.getUntrackedParameter<unsigned int>("nBinP");
368  hDim.minP = pset.getUntrackedParameter<double>("minP");
369  hDim.maxP = pset.getUntrackedParameter<double>("maxP");
370 
371  hDim.nBinPt = pset.getUntrackedParameter<unsigned int>("nBinPt");
372  hDim.minPt = pset.getUntrackedParameter<double>("minPt");
373  hDim.maxPt = pset.getUntrackedParameter<double>("maxPt");
374 
375  doAbsEta_ = pset.getUntrackedParameter<bool>("doAbsEta");
376  hDim.doAbsEta = doAbsEta_;
377  hDim.nBinEta = pset.getUntrackedParameter<unsigned int>("nBinEta");
378  hDim.minEta = pset.getUntrackedParameter<double>("minEta");
379  hDim.maxEta = pset.getUntrackedParameter<double>("maxEta");
380 
381  hDim.nBinPhi = pset.getUntrackedParameter<unsigned int>("nBinPhi");
382  hDim.minPhi = pset.getUntrackedParameter<double>("minPhi", -TMath::Pi());
383  hDim.maxPhi = pset.getUntrackedParameter<double>("maxPhi", TMath::Pi());
384 
385  hDim.nBinErr = pset.getUntrackedParameter<unsigned int>("nBinErr");
386  hDim.nBinPull = pset.getUntrackedParameter<unsigned int>("nBinPull");
387 
388  hDim.wPull = pset.getUntrackedParameter<double>("wPull");
389 
390  hDim.minErrP = pset.getUntrackedParameter<double>("minErrP");
391  hDim.maxErrP = pset.getUntrackedParameter<double>("maxErrP");
392 
393  hDim.minErrPt = pset.getUntrackedParameter<double>("minErrPt");
394  hDim.maxErrPt = pset.getUntrackedParameter<double>("maxErrPt");
395 
396  hDim.minErrQPt = pset.getUntrackedParameter<double>("minErrQPt");
397  hDim.maxErrQPt = pset.getUntrackedParameter<double>("maxErrQPt");
398 
399  hDim.minErrEta = pset.getUntrackedParameter<double>("minErrEta");
400  hDim.maxErrEta = pset.getUntrackedParameter<double>("maxErrEta");
401 
402  hDim.minErrPhi = pset.getUntrackedParameter<double>("minErrPhi");
403  hDim.maxErrPhi = pset.getUntrackedParameter<double>("maxErrPhi");
404 
405  hDim.minErrDxy = pset.getUntrackedParameter<double>("minErrDxy");
406  hDim.maxErrDxy = pset.getUntrackedParameter<double>("maxErrDxy");
407 
408  hDim.minErrDz = pset.getUntrackedParameter<double>("minErrDz" );
409  hDim.maxErrDz = pset.getUntrackedParameter<double>("maxErrDz" );
410 
411  hDim.nTrks = pset.getUntrackedParameter<unsigned int>("nTrks");
412  hDim.nAssoc = pset.getUntrackedParameter<unsigned int>("nAssoc");
413  hDim.nDof = pset.getUntrackedParameter<unsigned int>("nDof", 55);
414 
415  // Labels for simulation and reconstruction tracks
416  simLabel_ = pset.getParameter<InputTag>("simLabel" );
417  trkMuLabel_ = pset.getParameter<InputTag>("trkMuLabel");
418  staMuLabel_ = pset.getParameter<InputTag>("staMuLabel");
419  glbMuLabel_ = pset.getParameter<InputTag>("glbMuLabel");
420  muonLabel_ = pset.getParameter<InputTag>("muonLabel");
421 
422  // Labels for sim-reco association
423  doAssoc_ = pset.getUntrackedParameter<bool>("doAssoc", true);
424  trkMuAssocLabel_ = pset.getParameter<InputTag>("trkMuAssocLabel");
425  staMuAssocLabel_ = pset.getParameter<InputTag>("staMuAssocLabel");
426  glbMuAssocLabel_ = pset.getParameter<InputTag>("glbMuAssocLabel");
427 
428 // seedPropagatorName_ = pset.getParameter<string>("SeedPropagator");
429 
430  ParameterSet tpset = pset.getParameter<ParameterSet>("tpSelector");
431  tpSelector_ = TrackingParticleSelector(tpset.getParameter<double>("ptMin"),
432  tpset.getParameter<double>("minRapidity"),
433  tpset.getParameter<double>("maxRapidity"),
434  tpset.getParameter<double>("tip"),
435  tpset.getParameter<double>("lip"),
436  tpset.getParameter<int>("minHit"),
437  tpset.getParameter<bool>("signalOnly"),
438  tpset.getParameter<bool>("chargedOnly"),
439  tpset.getParameter<std::vector<int> >("pdgId"));
440 
441  // the service parameters
442  ParameterSet serviceParameters
443  = pset.getParameter<ParameterSet>("ServiceParameters");
444  theMuonService = new MuonServiceProxy(serviceParameters);
445 
446  // retrieve the instance of DQMService
447  theDQM = 0;
448  theDQM = Service<DQMStore>().operator->();
449 
450  if ( ! theDQM ) {
451  LogError("RecoMuonValidator") << "DQMService not initialized\n";
452  return;
453  }
454 
455  subDir_ = pset.getUntrackedParameter<string>("subDir");
456  if ( subDir_.empty() ) subDir_ = "RecoMuonV";
457  if ( subDir_[subDir_.size()-1] == '/' ) subDir_.erase(subDir_.size()-1);
458 
459  // book histograms
460  theDQM->cd();
461 
462  theDQM->setCurrentFolder(subDir_+"/Muons");
463 
464  commonME_ = new CommonME;
465  trkMuME_ = new MuonME;
466  staMuME_ = new MuonME;
467  glbMuME_ = new MuonME;
468 
469  commonME_->hSimP_ = theDQM->book1D("SimP" , "p of simTracks" , hDim.nBinP , hDim.minP , hDim.maxP );
470  commonME_->hSimPt_ = theDQM->book1D("SimPt" , "p_{T} of simTracks", hDim.nBinPt , hDim.minPt , hDim.maxPt );
471  commonME_->hSimEta_ = theDQM->book1D("SimEta", "#eta of simTracks" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
472  commonME_->hSimPhi_ = theDQM->book1D("SimPhi", "#phi of simTracks" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
473 
474  commonME_->hNSim_ = theDQM->book1D("NSim" , "Number of particles per event", hDim.nTrks, 0, hDim.nTrks);
475  commonME_->hNMuon_ = theDQM->book1D("NMuon", "Number of muons per event" , hDim.nTrks, 0, hDim.nTrks);
476 
477  const int nHits = 201;
478  commonME_->hNSimHits_ = theDQM->book1D("NSimHits", "Number of simHits", nHits, -100.5, 100.5);
479 
480  commonME_->hTrkToGlbDiffNTrackerHits_ = theDQM->book1D("TrkGlbDiffNTrackerHits", "Difference of number of tracker hits (tkMuon - globalMuon)", nHits, -100.5, 100.5);
481  commonME_->hStaToGlbDiffNMuonHits_ = theDQM->book1D("StaGlbDiffNMuonHits", "Difference of number of muon hits (staMuon - globalMuon)", nHits, -100.5, 100.5);
482 
483  commonME_->hTrkToGlbDiffNTrackerHitsEta_ = theDQM->book2D("TrkGlbDiffNTrackerHitsEta", "Difference of number of tracker hits (tkMuon - globalMuon)", hDim.nBinEta, hDim.minEta, hDim.maxEta,nHits, -100.5, 100.5);
484  commonME_->hStaToGlbDiffNMuonHitsEta_ = theDQM->book2D("StaGlbDiffNMuonHitsEta", "Difference of number of muon hits (staMuon - globalMuon)", hDim.nBinEta, hDim.minEta, hDim.maxEta,nHits, -100.5, 100.5);
485 
486  commonME_->hTrkToGlbDiffNTrackerHitsPt_ = theDQM->book2D("TrkGlbDiffNTrackerHitsPt", "Difference of number of tracker hits (tkMuon - globalMuon)", hDim.nBinPt, hDim.minPt, hDim.maxPt,nHits, -100.5, 100.5);
487  commonME_->hStaToGlbDiffNMuonHitsPt_ = theDQM->book2D("StaGlbDiffNMuonHitsPt", "Difference of number of muon hits (staMuon - globalMuon)", hDim.nBinPt, hDim.minPt, hDim.maxPt,nHits, -100.5, 100.5);
488 
489  // - histograms on tracking variables
490  theDQM->setCurrentFolder(subDir_+"/Trk");
491  theDQM->bookString("TrackLabel", trkMuLabel_.label()+"_"+trkMuLabel_.instance());
492  theDQM->bookString("AssocLabel", trkMuAssocLabel_.label());
493 
494  theDQM->setCurrentFolder(subDir_+"/Sta");
495  theDQM->bookString("TrackLabel", staMuLabel_.label()+"_"+staMuLabel_.instance());
496  theDQM->bookString("AssocLabel", staMuAssocLabel_.label());
497 
498  theDQM->setCurrentFolder(subDir_+"/Glb");
499  theDQM->bookString("TrackLabel", glbMuLabel_.label()+"_"+glbMuLabel_.instance());
500  theDQM->bookString("AssocLabel", glbMuAssocLabel_.label());
501 
502  trkMuME_->bookHistograms(theDQM, subDir_+"/Trk", hDim);
503  staMuME_->bookHistograms(theDQM, subDir_+"/Sta", hDim);
504  glbMuME_->bookHistograms(theDQM, subDir_+"/Glb", hDim);
505 
506  if ( verbose_ > 0 ) theDQM->showDirStructure();
507 
508 }
509 
511 {
512  if ( theMuonService ) delete theMuonService;
513 }
514 
515 void RecoMuonValidator::beginRun(const edm::Run& , const EventSetup& eventSetup)
516 {
517  if ( theMuonService ) theMuonService->update(eventSetup);
518 
519  trkMuAssociator_ = 0;
520  staMuAssociator_ = 0;
521  glbMuAssociator_ = 0;
522  if ( doAssoc_ ) {
523  ESHandle<TrackAssociatorBase> trkMuAssocHandle;
524  eventSetup.get<TrackAssociatorRecord>().get(trkMuAssocLabel_.label(), trkMuAssocHandle);
525  trkMuAssociator_ = const_cast<TrackAssociatorBase*>(trkMuAssocHandle.product());
526 
527  ESHandle<TrackAssociatorBase> staMuAssocHandle;
528  eventSetup.get<TrackAssociatorRecord>().get(staMuAssocLabel_.label(), staMuAssocHandle);
529  staMuAssociator_ = const_cast<TrackAssociatorBase*>(staMuAssocHandle.product());
530 
531  ESHandle<TrackAssociatorBase> glbMuAssocHandle;
532  eventSetup.get<TrackAssociatorRecord>().get(glbMuAssocLabel_.label(), glbMuAssocHandle);
533  glbMuAssociator_ = const_cast<TrackAssociatorBase*>(glbMuAssocHandle.product());
534  }
535 }
536 
538 {
539  if ( theDQM && ! outputFileName_.empty() ) theDQM->save(outputFileName_);
540 }
541 
542 void RecoMuonValidator::analyze(const Event& event, const EventSetup& eventSetup)
543 {
544  if ( ! theDQM ) {
545  LogError("RecoMuonValidator") << "DQMService not initialized\n";
546  return;
547  }
548 
549  // Get TrackingParticles
551  event.getByLabel(simLabel_, simHandle);
552  const TrackingParticleCollection simColl = *(simHandle.product());
553 
554  // Get Muon Tracks
555  Handle<View<Track> > trkMuHandle;
556  event.getByLabel(trkMuLabel_, trkMuHandle);
557  View<Track> trkMuColl = *(trkMuHandle.product());
558 
559  Handle<View<Track> > staMuHandle;
560  event.getByLabel(staMuLabel_, staMuHandle);
561  View<Track> staMuColl = *(staMuHandle.product());
562 
563  Handle<View<Track> > glbMuHandle;
564  event.getByLabel(glbMuLabel_, glbMuHandle);
565  View<Track> glbMuColl = *(glbMuHandle.product());
566 
567  // Get Muons
568  Handle<View<Muon> > muonHandle;
569  event.getByLabel(muonLabel_, muonHandle);
570  View<Muon> muonColl = *(muonHandle.product());
571 
572  // Get Association maps
573  SimToRecoCollection simToTrkMuColl;
574  SimToRecoCollection simToStaMuColl;
575  SimToRecoCollection simToGlbMuColl;
576 
577  RecoToSimCollection trkMuToSimColl;
578  RecoToSimCollection staMuToSimColl;
579  RecoToSimCollection glbMuToSimColl;
580 
581  if ( doAssoc_ ) {
582  // SimToReco associations
583  simToTrkMuColl = trkMuAssociator_->associateSimToReco(trkMuHandle, simHandle, &event);
584  simToStaMuColl = staMuAssociator_->associateSimToReco(staMuHandle, simHandle, &event);
585  simToGlbMuColl = glbMuAssociator_->associateSimToReco(glbMuHandle, simHandle, &event);
586 
587  // // RecoToSim associations
588  trkMuToSimColl = trkMuAssociator_->associateRecoToSim(trkMuHandle, simHandle, &event);
589  staMuToSimColl = staMuAssociator_->associateRecoToSim(staMuHandle, simHandle, &event);
590  glbMuToSimColl = glbMuAssociator_->associateRecoToSim(glbMuHandle, simHandle, &event);
591  }
592  else {
593  // SimToReco associations
594  Handle<SimToRecoCollection> simToTrkMuHandle;
595  event.getByLabel(trkMuAssocLabel_, simToTrkMuHandle);
596  simToTrkMuColl = *(simToTrkMuHandle.product());
597 
598  Handle<SimToRecoCollection> simToStaMuHandle;
599  event.getByLabel(staMuAssocLabel_, simToStaMuHandle);
600  simToStaMuColl = *(simToStaMuHandle.product());
601 
602  Handle<SimToRecoCollection> simToGlbMuHandle;
603  event.getByLabel(glbMuAssocLabel_, simToGlbMuHandle);
604  simToGlbMuColl = *(simToGlbMuHandle.product());
605 
606  // RecoToSim associations
607  Handle<RecoToSimCollection> trkMuToSimHandle;
608  event.getByLabel(trkMuAssocLabel_, trkMuToSimHandle);
609  trkMuToSimColl = *(trkMuToSimHandle.product());
610 
611  Handle<RecoToSimCollection> staMuToSimHandle;
612  event.getByLabel(staMuAssocLabel_, staMuToSimHandle);
613  staMuToSimColl = *(staMuToSimHandle.product());
614 
615  Handle<RecoToSimCollection> glbMuToSimHandle;
616  event.getByLabel(glbMuAssocLabel_, glbMuToSimHandle);
617  glbMuToSimColl = *(glbMuToSimHandle.product());
618  }
619 
620  const TrackingParticleCollection::size_type nSim = simColl.size();
621  commonME_->hNSim_->Fill(nSim);
622 
623  commonME_->hNMuon_->Fill(muonColl.size());
624 
625  trkMuME_->hNTrks_->Fill(trkMuColl.size());
626  staMuME_->hNTrks_->Fill(staMuColl.size());
627  glbMuME_->hNTrks_->Fill(glbMuColl.size());
628 
629  // Analyzer reco::Muon
630  for(View<Muon>::const_iterator iMuon = muonColl.begin();
631  iMuon != muonColl.end(); ++iMuon) {
632  int trkNTrackerHits = 0, glbNTrackerHits = 0;
633  int staNMuonHits = 0, glbNMuonHits = 0;
634 
635  if ( iMuon->isTrackerMuon() ) {
636  const TrackRef trkTrack = iMuon->track();
637 
638  trkNTrackerHits = countTrackerHits(*trkTrack);
639 
640  trkMuME_->hNTrackerHits_->Fill(trkNTrackerHits);
641  trkMuME_->hNTrackerHits_vs_Pt_->Fill(trkTrack->pt(), trkNTrackerHits);
642  trkMuME_->hNTrackerHits_vs_Eta_->Fill(trkTrack->eta(), trkNTrackerHits);
643  }
644 
645  if ( iMuon->isStandAloneMuon() ) {
646  const TrackRef staTrack = iMuon->standAloneMuon();
647 
648  staNMuonHits = countMuonHits(*staTrack);
649 
650  staMuME_->hNMuonHits_->Fill(staNMuonHits);
651  staMuME_->hNMuonHits_vs_Pt_->Fill(staTrack->pt(), staNMuonHits);
652  staMuME_->hNMuonHits_vs_Eta_->Fill(staTrack->eta(), staNMuonHits);
653 
654  staMuME_->hNTrksEta_->Fill(staTrack->eta());
655  staMuME_->hNTrksPt_->Fill(staTrack->pt());
656 
657  }
658 
659  if ( iMuon->isGlobalMuon() ) {
660  const TrackRef glbTrack = iMuon->combinedMuon();
661 
662  glbNTrackerHits = countTrackerHits(*glbTrack);
663  glbNMuonHits = countMuonHits(*glbTrack);
664 
665  glbMuME_->hNTrackerHits_->Fill(glbNTrackerHits);
666  glbMuME_->hNTrackerHits_vs_Pt_->Fill(glbTrack->pt(), glbNTrackerHits);
667  glbMuME_->hNTrackerHits_vs_Eta_->Fill(glbTrack->eta(), glbNTrackerHits);
668 
669  glbMuME_->hNMuonHits_->Fill(glbNMuonHits);
670  glbMuME_->hNMuonHits_vs_Pt_->Fill(glbTrack->pt(), glbNMuonHits);
671  glbMuME_->hNMuonHits_vs_Eta_->Fill(glbTrack->eta(), glbNMuonHits);
672 
673  glbMuME_->hNTrksEta_->Fill(glbTrack->eta());
674  glbMuME_->hNTrksPt_->Fill(glbTrack->pt());
675 
676  commonME_->hTrkToGlbDiffNTrackerHitsEta_->Fill(glbTrack->eta(),trkNTrackerHits-glbNTrackerHits);
677  commonME_->hStaToGlbDiffNMuonHitsEta_->Fill(glbTrack->eta(),staNMuonHits-glbNMuonHits);
678 
679  commonME_->hTrkToGlbDiffNTrackerHitsPt_->Fill(glbTrack->pt(),trkNTrackerHits-glbNTrackerHits);
680  commonME_->hStaToGlbDiffNMuonHitsPt_->Fill(glbTrack->pt(),staNMuonHits-glbNMuonHits);
681 
682  commonME_->hTrkToGlbDiffNTrackerHits_->Fill(trkNTrackerHits-glbNTrackerHits);
683  commonME_->hStaToGlbDiffNMuonHits_->Fill(staNMuonHits-glbNMuonHits);
684 
685  }
686 
687  }
688 
689  // Analyzer reco::Track
690  for(TrackingParticleCollection::size_type i=0; i<nSim; i++) {
691  TrackingParticleRef simRef(simHandle, i);
692  const TrackingParticle* simTP = simRef.get();
693  if ( ! tpSelector_(*simTP) ) continue;
694 
695  const double simP = simRef->p();
696  const double simPt = simRef->pt();
697  const double simEta = doAbsEta_ ? fabs(simRef->eta()) : simRef->eta();
698  const double simPhi = simRef->phi();
699 
700  const unsigned int nSimHits = simRef->pSimHit_end() - simRef->pSimHit_begin();
701 
702  commonME_->hSimP_ ->Fill(simP );
703  commonME_->hSimPt_ ->Fill(simPt );
704  commonME_->hSimEta_->Fill(simEta);
705  commonME_->hSimPhi_->Fill(simPhi);
706 
707  commonME_->hNSimHits_->Fill(nSimHits);
708 
709  // Get sim-reco association for a simRef
710  vector<pair<RefToBase<Track>, double> > trkMuRefV, staMuRefV, glbMuRefV;
711  if ( simToTrkMuColl.find(simRef) != simToTrkMuColl.end() ) {
712  trkMuRefV = simToTrkMuColl[simRef];
713 
714  trkMuME_->hNSimToReco_->Fill(trkMuRefV.size());
715  if ( ! trkMuRefV.empty() ) {
716  const Track* trkMuTrack = trkMuRefV.begin()->first.get();
717 // const double assocQuality = trkMuRefV.begin()->second;
718 
719  trkMuME_->fill(simTP, trkMuTrack);
720  }
721  }
722 
723  if ( simToStaMuColl.find(simRef) != simToStaMuColl.end() ) {
724  staMuRefV = simToStaMuColl[simRef];
725 
726  staMuME_->hNSimToReco_->Fill(staMuRefV.size());
727  if ( ! staMuRefV.empty() ) {
728  const Track* staMuTrack = staMuRefV.begin()->first.get();
729 // const double assocQuality = staMuRefV.begin().second;
730 
731  staMuME_->fill(simTP, staMuTrack);
732  }
733  }
734 
735  if ( simToGlbMuColl.find(simRef) != simToGlbMuColl.end() ) {
736  glbMuRefV = simToGlbMuColl[simRef];
737 
738  glbMuME_->hNSimToReco_->Fill(glbMuRefV.size());
739  if ( ! glbMuRefV.empty() ) {
740  const Track* glbMuTrack = glbMuRefV.begin()->first.get();
741 // const double assocQuality = glbMuRefV.begin().second;
742 
743  glbMuME_->fill(simTP, glbMuTrack);
744  }
745  }
746  }
747 }
748 
749 int
752 
753  int count = 0;
754 
755  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
756  if((*hit)->isValid()) {
757  DetId recoid = (*hit)->geographicalId();
758  if ( recoid.det() == DetId::Muon ) count++;
759  }
760  }
761  return count;
762 }
763 
764 int
767 
768  int count = 0;
769 
770  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
771  if((*hit)->isValid()) {
772  DetId recoid = (*hit)->geographicalId();
773  if ( recoid.det() == DetId::Tracker ) count++;
774  }
775  }
776  return count;
777 }
778 
779 /* vim:set ts=2 sts=2 sw=2 expandtab: */
const double Pi
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
unsigned int nAssoc
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:149
int charge() const
electric charge
Definition: ParticleBase.h:55
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:519
unsigned int nBinPhi
const_iterator end() const
last iterator over the map (read only)
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:110
double dxyError() const
error on dxy
Definition: TrackBase.h:202
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:214
unsigned int nBinPull
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
const_iterator find(const key_type &k) const
find element with specified reference key
const std::vector< PSimHit >::const_iterator pSimHit_begin() const
double etaError() const
error on eta
Definition: TrackBase.h:198
const std::vector< PSimHit >::const_iterator pSimHit_end() const
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:227
double maxEta
double pt() const
transverse momentum
Definition: ParticleBase.h:158
unsigned int nTrks
TrajectoryStateOnSurface TSOS
virtual int countTrackerHits(const reco::Track &track) const
uint16_t size_type
FreeTrajectoryState FTS
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
double phi() const
momentum azimuthal angle
Definition: ParticleBase.h:163
double p() const
magnitude of momentum vector
Definition: ParticleBase.h:100
virtual void analyze(const edm::Event &event, const edm::EventSetup &eventSetup)
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:106
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:108
T sqrt(T t)
Definition: SSEVec.h:28
tuple result
Definition: query.py:137
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double ptError() const
error on Pt (set to 1000 TeV if charge==0 for safety)
Definition: TrackBase.h:187
virtual int countMuonHits(const reco::Track &track) const
double phiError() const
error on phi
Definition: TrackBase.h:200
tuple pset
Definition: CrabTask.py:85
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:225
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:63
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
unsigned int nBinEta
unsigned int nBinPt
virtual void beginRun(const edm::Run &, const edm::EventSetup &eventSetup)
double qoverpError() const
error on signed transverse curvature
Definition: TrackBase.h:185
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:126
double dzError() const
error on dz
Definition: TrackBase.h:208
unsigned int nBinErr
std::vector< ConstRecHitPointer > ConstRecHitContainer
Definition: DetId.h:20
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
size_type size() const
Vector momentum() const
spatial momentum vector
Definition: ParticleBase.h:87
T const * product() const
Definition: Handle.h:74
std::string const & label() const
Definition: InputTag.h:25
unsigned int nBinP
CovarianceMatrix & fill(CovarianceMatrix &v) const
fill SMatrix
Definition: TrackBase.cc:42
virtual void endRun()
const_iterator begin() const
int charge() const
track electric charge
Definition: TrackBase.h:112
const_iterator end() const
std::vector< TrackingParticle > TrackingParticleCollection
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:647
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:239
Detector det() const
get the detector field from this detid
Definition: DetId.h:37
const Point & vertex() const
vertex position
Definition: ParticleBase.h:229
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:120
T x() const
Definition: PV3DBase.h:56
void fill(const TrackingParticle *simRef, const Track *recoRef)
std::string const & instance() const
Definition: InputTag.h:26
RecoMuonValidator(const edm::ParameterSet &pset)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:237
Definition: Run.h:31
void bookHistograms(DQMStore *dqm, const string &dirName, const HistoDimensions &hDim)
double eta() const
momentum pseudorapidity
Definition: ParticleBase.h:174
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:65