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 
14 
19 
22 
23 // for selection cut
25 
26 #include "TMath.h"
27 
28 using namespace std;
29 using namespace edm;
30 using namespace reco;
31 
34 
35 //
36 //struct for histogram dimensions
37 //
39  //p
40  unsigned int nBinP;
41  double minP, maxP;
42  //pt
43  unsigned int nBinPt;
44  double minPt, maxPt;
45  //if abs eta
46  bool doAbsEta;
47  //eta
48  unsigned int nBinEta;
49  double minEta, maxEta;
50  //phi
51  unsigned int nBinPhi;
52  double minPhi, maxPhi;
53  //dxy
54  unsigned int nBinDxy;
55  double minDxy, maxDxy;
56  //dz
57  unsigned int nBinDz;
58  double minDz, maxDz;
59  //pulls
60  unsigned int nBinPull;
61  double wPull;
62  //resolustions
63  unsigned int nBinErr;
64  double minErrP, maxErrP;
65  double minErrPt, maxErrPt;
66  double minErrQPt, maxErrQPt;
67  double minErrEta, maxErrEta;
68  double minErrPhi, maxErrPhi;
69  double minErrDxy, maxErrDxy;
70  double minErrDz, maxErrDz;
71  //track multiplicities
72  unsigned int nTrks, nAssoc;
73  unsigned int nDof;
74 };
75 
76 //
77 //Struct containing all histograms definitions
78 //
80  typedef MonitorElement* MEP;
81 
82 //general kinematics
83  MEP hSimP_, hSimPt_, hSimEta_, hSimPhi_, hSimDxy_, hSimDz_;
84 //only for efficiencies
85  MEP hP_, hPt_, hEta_, hPhi_;
86  MEP hNSim_, hNMuon_;
87 
88 //misc vars
89  MEP hNTrks_, hNTrksEta_, hNTrksPt_;
90  MEP hMisQPt_, hMisQEta_;
91 
92 //resolutions
93  MEP hErrP_, hErrPt_, hErrEta_, hErrPhi_;
94  MEP hErrPBarrel_, hErrPOverlap_, hErrPEndcap_;
95  MEP hErrPtBarrel_, hErrPtOverlap_, hErrPtEndcap_;
96  MEP hErrDxy_, hErrDz_;
97 
98  MEP hErrP_vs_Eta_, hErrPt_vs_Eta_, hErrQPt_vs_Eta_;
99  MEP hErrP_vs_P_, hErrPt_vs_Pt_, hErrQPt_vs_Pt_, hErrEta_vs_Eta_;
100 
101 //hit pattern
103  MEP hNSimToReco_, hNRecoToSim_;
104 
105  MEP hNHits_, hNLostHits_, hNTrackerHits_, hNMuonHits_;
106  MEP hNHits_vs_Pt_, hNHits_vs_Eta_;
107  MEP hNLostHits_vs_Pt_, hNLostHits_vs_Eta_;
108  MEP hNTrackerHits_vs_Pt_, hNTrackerHits_vs_Eta_;
109  MEP hNMuonHits_vs_Pt_, hNMuonHits_vs_Eta_;
110 
111 //pulls
112  MEP hPullPt_, hPullEta_, hPullPhi_, hPullQPt_, hPullDxy_, hPullDz_;
113  MEP hPullPt_vs_Eta_, hPullPt_vs_Pt_, hPullEta_vs_Eta_, hPullPhi_vs_Eta_, hPullEta_vs_Pt_;
114 
115 //chi2, ndof
116  MEP hNDof_, hChi2_, hChi2Norm_, hChi2Prob_;
117  MEP hNDof_vs_Eta_, hChi2_vs_Eta_, hChi2Norm_vs_Eta_, hChi2Prob_vs_Eta_;
118 
119  bool doAbsEta_;
120 
121 //
122 //books histograms
123 //
124  void bookHistograms(DQMStore* dqm, const string& dirName, const HistoDimensions& hDim)
125  {
126  dqm->cd();
127  dqm->setCurrentFolder(dirName.c_str());
128 
129  doAbsEta_ = hDim.doAbsEta;
130 
131  //histograms for efficiency plots
132  hP_ = dqm->book1D("P" , "p of recoTracks" , hDim.nBinP , hDim.minP , hDim.maxP );
133  hPt_ = dqm->book1D("Pt" , "p_{T} of recoTracks", hDim.nBinPt , hDim.minPt , hDim.maxPt );
134  hEta_ = dqm->book1D("Eta", "#eta of recoTracks" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
135  hPhi_ = dqm->book1D("Phi", "#phi of recoTracks" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
136 
137  hSimP_ = dqm->book1D("SimP" , "p of simTracks" , hDim.nBinP , hDim.minP , hDim.maxP );
138  hSimPt_ = dqm->book1D("SimPt" , "p_{T} of simTracks", hDim.nBinPt , hDim.minPt , hDim.maxPt );
139  hSimEta_ = dqm->book1D("SimEta", "#eta of simTracks" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
140  hSimPhi_ = dqm->book1D("SimPhi", "#phi of simTracks" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
141  hSimDxy_ = dqm->book1D("SimDxy", "Dxy of simTracks" , hDim.nBinDxy, hDim.minDxy, hDim.maxDxy);
142  hSimDz_ = dqm->book1D("Dz", "Dz of simTracks" , hDim.nBinDz, hDim.minDz, hDim.maxDz);
143 
144  //track multiplicities
145  hNSim_ = dqm->book1D("NSim" , "Number of particles per event", hDim.nTrks, 0, hDim.nTrks);
146  hNMuon_ = dqm->book1D("NMuon", "Number of muons per event" , hDim.nTrks, 0, hDim.nTrks);
147 
148  // - Misc. variables
149  hNTrks_ = dqm->book1D("NTrks", "Number of reco tracks per event", hDim.nTrks, 0, hDim.nTrks);
150  hNTrksEta_ = dqm->book1D("NTrksEta", "Number of reco tracks vs #eta", hDim.nBinEta, hDim.minEta, hDim.maxEta);
151  hNTrksPt_ = dqm->book1D("NTrksPt", "Number of reco tracks vs p_{T}", hDim.nBinPt, hDim.minPt, hDim.maxPt);
152 
153  hMisQPt_ = dqm->book1D("MisQPt" , "Charge mis-id vs Pt" , hDim.nBinPt , hDim.minPt , hDim.maxPt );
154  hMisQEta_ = dqm->book1D("MisQEta", "Charge mis-id vs Eta", hDim.nBinEta, hDim.minEta, hDim.maxEta);
155 
156  // - Resolutions
157  hErrP_ = dqm->book1D("ErrP" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
158  hErrPBarrel_ = dqm->book1D("ErrP_barrel" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
159  hErrPOverlap_ = dqm->book1D("ErrP_overlap" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
160  hErrPEndcap_ = dqm->book1D("ErrP_endcap" , "#Delta(p)/p" , hDim.nBinErr, hDim.minErrP , hDim.maxErrP );
161  hErrPt_ = dqm->book1D("ErrPt" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
162  hErrPtBarrel_ = dqm->book1D("ErrPt_barrel" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
163  hErrPtOverlap_ = dqm->book1D("ErrPt_overlap" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
164  hErrPtEndcap_ = dqm->book1D("ErrPt_endcap" , "#Delta(p_{T})/p_{T}", hDim.nBinErr, hDim.minErrPt , hDim.maxErrPt );
165  hErrEta_ = dqm->book1D("ErrEta", "#sigma(#eta))" , hDim.nBinErr, hDim.minErrEta, hDim.maxErrEta);
166  hErrPhi_ = dqm->book1D("ErrPhi", "#sigma(#phi)" , hDim.nBinErr, hDim.minErrPhi, hDim.maxErrPhi);
167  hErrDxy_ = dqm->book1D("ErrDxy", "#sigma(d_{xy})" , hDim.nBinErr, hDim.minErrDxy, hDim.maxErrDxy);
168  hErrDz_ = dqm->book1D("ErrDz" , "#sigma(d_{z})" , hDim.nBinErr, hDim.minErrDz , hDim.maxErrDz );
169 
170  // -- Resolutions vs Eta
171  hErrP_vs_Eta_ = dqm->book2D("ErrP_vs_Eta", "#Delta(p)/p vs #eta",
172  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrP, hDim.maxErrP);
173  hErrPt_vs_Eta_ = dqm->book2D("ErrPt_vs_Eta", "#Delta(p_{T})/p_{T} vs #eta",
174  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrPt, hDim.maxErrPt);
175  hErrQPt_vs_Eta_ = dqm->book2D("ErrQPt_vs_Eta", "#Delta(q/p_{T})/(q/p_{T}) vs #eta",
176  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrQPt, hDim.maxErrQPt);
177  hErrEta_vs_Eta_ = dqm->book2D("ErrEta_vs_Eta", "#sigma(#eta) vs #eta",
178  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, hDim.minErrEta, hDim.maxErrEta);
179 
180  // -- Resolutions vs momentum
181  hErrP_vs_P_ = dqm->book2D("ErrP_vs_P", "#Delta(p)/p vs p",
182  hDim.nBinP, hDim.minP, hDim.maxP, hDim.nBinErr, hDim.minErrP, hDim.maxErrP);
183  hErrPt_vs_Pt_ = dqm->book2D("ErrPt_vs_Pt", "#Delta(p_{T})/p_{T} vs p_{T}",
184  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinErr, hDim.minErrPt, hDim.maxErrPt);
185  hErrQPt_vs_Pt_ = dqm->book2D("ErrQPt_vs_Pt", "#Delta(q/p_{T})/(q/p_{T}) vs p_{T}",
186  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinErr, hDim.minErrQPt, hDim.maxErrQPt);
187 
188  // - Pulls
189  hPullPt_ = dqm->book1D("PullPt" , "Pull(#p_{T})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
190  hPullEta_ = dqm->book1D("PullEta", "Pull(#eta)" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
191  hPullPhi_ = dqm->book1D("PullPhi", "Pull(#phi)" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
192  hPullQPt_ = dqm->book1D("PullQPt", "Pull(q/p_{T})", hDim.nBinPull, -hDim.wPull, hDim.wPull);
193  hPullDxy_ = dqm->book1D("PullDxy", "Pull(D_{xy})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
194  hPullDz_ = dqm->book1D("PullDz" , "Pull(D_{z})" , hDim.nBinPull, -hDim.wPull, hDim.wPull);
195 
196  // -- Pulls vs Eta
197  hPullPt_vs_Eta_ = dqm->book2D("PullPt_vs_Eta", "Pull(p_{T}) vs #eta",
198  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
199  hPullEta_vs_Eta_ = dqm->book2D("PullEta_vs_Eta", "Pull(#eta) vs #eta",
200  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
201  hPullPhi_vs_Eta_ = dqm->book2D("PullPhi_vs_Eta", "Pull(#phi) vs #eta",
202  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinPull, -hDim.wPull, hDim.wPull);
203 
204  // -- Pulls vs Pt
205  hPullPt_vs_Pt_ = dqm->book2D("PullPt_vs_Pt", "Pull(p_{T}) vs p_{T}",
206  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinPull, -hDim.wPull, hDim.wPull);
207  hPullEta_vs_Pt_ = dqm->book2D("PullEta_vs_Pt", "Pull(#eta) vs p_{T}",
208  hDim.nBinPt, hDim.minPt, hDim.maxPt, hDim.nBinPull, -hDim.wPull, hDim.wPull);
209 
210  // -- Number of Hits
211  const int nHits = 201;
212  hNHits_ = dqm->book1D("NHits", "Number of hits", nHits, 0, nHits);
213  hNHits_vs_Pt_ = dqm->book2D("NHits_vs_Pt", "Number of hits vs p_{T}",
214  hDim.nBinPt, hDim.minPt, hDim.maxPt, nHits/4, 0, nHits);
215  hNHits_vs_Eta_ = dqm->book2D("NHits_vs_Eta", "Number of hits vs #eta",
216  hDim.nBinEta, hDim.minEta, hDim.maxEta, nHits/4, 0, nHits);
217  hNSimHits_ = dqm->book1D("NSimHits", "Number of simHits", nHits, 0, nHits);
218 
219  const int nLostHits = 5;
220  hNLostHits_ = dqm->book1D("NLostHits", "Number of Lost hits", nLostHits, 0, nLostHits);
221  hNLostHits_vs_Pt_ = dqm->book2D("NLostHits_vs_Pt", "Number of lost Hits vs p_{T}",
222  hDim.nBinPt, hDim.minPt, hDim.maxPt, nLostHits, 0, nLostHits);
223  hNLostHits_vs_Eta_ = dqm->book2D("NLostHits_vs_Eta", "Number of lost Hits vs #eta",
224  hDim.nBinEta, hDim.minEta, hDim.maxEta, nLostHits, 0, nLostHits);
225 
226  const int nTrackerHits = 40;
227  hNTrackerHits_ = dqm->book1D("NTrackerHits", "Number of valid tracker hits", nTrackerHits, 0, nTrackerHits);
228  hNTrackerHits_vs_Pt_ = dqm->book2D("NTrackerHits_vs_Pt", "Number of valid traker hits vs p_{T}",
229  hDim.nBinPt, hDim.minPt, hDim.maxPt, nTrackerHits/4, 0, nTrackerHits);
230  hNTrackerHits_vs_Eta_ = dqm->book2D("NTrackerHits_vs_Eta", "Number of valid tracker hits vs #eta",
231  hDim.nBinEta, hDim.minEta, hDim.maxEta, nTrackerHits/4, 0, nTrackerHits);
232 
233  const int nMuonHits = 60;
234  hNMuonHits_ = dqm->book1D("NMuonHits", "Number of valid muon hits", nMuonHits, 0, nMuonHits);
235  hNMuonHits_vs_Pt_ = dqm->book2D("NMuonHits_vs_Pt", "Number of valid muon hits vs p_{T}",
236  hDim.nBinPt, hDim.minPt, hDim.maxPt, nMuonHits/4, 0, nMuonHits);
237  hNMuonHits_vs_Eta_ = dqm->book2D("NMuonHits_vs_Eta", "Number of valid muon hits vs #eta",
238  hDim.nBinEta, hDim.minEta, hDim.maxEta, nMuonHits/4, 0, nMuonHits);
239 
240  hNDof_ = dqm->book1D("NDof", "Number of DoF", hDim.nDof, 0, hDim.nDof);
241  hChi2_ = dqm->book1D("Chi2", "#Chi^{2}", hDim.nBinErr, 0, 200);
242  hChi2Norm_ = dqm->book1D("Chi2Norm", "Normalized #Chi^{2}", hDim.nBinErr, 0, 50);
243  hChi2Prob_ = dqm->book1D("Chi2Prob", "Prob(#Chi^{2})", hDim.nBinErr, 0, 1);
244 
245  hNDof_vs_Eta_ = dqm->book2D("NDof_vs_Eta", "Number of DoF vs #eta",
246  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, hDim.nDof);
247  hChi2_vs_Eta_ = dqm->book2D("Chi2_vs_Eta", "#Chi^{2} vs #eta",
248  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 200);
249  hChi2Norm_vs_Eta_ = dqm->book2D("Chi2Norm_vs_Eta", "Normalized #Chi^{2} vs #eta",
250  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 100);
251  hChi2Prob_vs_Eta_ = dqm->book2D("Chi2Prob_vs_Eta", "Prob(#Chi^{2}) vs #eta",
252  hDim.nBinEta, hDim.minEta, hDim.maxEta, hDim.nBinErr, 0, 1);
253 
254  hNSimToReco_ = dqm->book1D("NSimToReco", "Number of associated reco tracks", hDim.nAssoc, 0, hDim.nAssoc);
255  hNRecoToSim_ = dqm->book1D("NRecoToSim", "Number of associated sim TP's", hDim.nAssoc, 0, hDim.nAssoc);
256 
257  };
258 
259 //
260 //Fill hists booked, simRef and recoRef are associated by hits
261 //
262  void fill(const TrackingParticle* simRef, const Track* recoRef)
263  {
264  const double simP = simRef->p();
265  const double simPt = simRef->pt();
266  const double simEta = doAbsEta_ ? fabs(simRef->eta()) : simRef->eta();
267  const double simPhi = simRef->phi();
268  const double simQ = simRef->charge();
269  const double simQPt = simQ/simPt;
270 
271  GlobalPoint simVtx(simRef->vertex().x(), simRef->vertex().y(), simRef->vertex().z());
272  GlobalVector simMom(simRef->momentum().x(), simRef->momentum().y(), simRef->momentum().z());
273  const double simDxy = -simVtx.x()*sin(simPhi)+simVtx.y()*cos(simPhi);
274  const double simDz = simVtx.z() - (simVtx.x()*simMom.x()+simVtx.y()*simMom.y())*simMom.z()/simMom.perp2();
275 
276 // const unsigned int nSimHits = simRef->pSimHit_end() - simRef->pSimHit_begin();
277 
278 /*
279  // Histograms for efficiency plots
280  hSimP_ ->Fill(simP );
281  hSimPt_ ->Fill(simPt );
282  hSimEta_->Fill(simEta);
283  hSimPhi_->Fill(simPhi);
284  hSimDxy_->Fill(simDxy);
285  hSimDz_->Fill(simDz);
286  hNSimHits_->Fill(nSimHits);
287 */
288 
289  // Number of reco-hits
290  const int nRecoHits = recoRef->numberOfValidHits();
291  const int nLostHits = recoRef->numberOfLostHits();
292 
293  hNHits_->Fill(nRecoHits);
294  hNHits_vs_Pt_ ->Fill(simPt , nRecoHits);
295  hNHits_vs_Eta_->Fill(simEta, nRecoHits);
296 
297  hNLostHits_->Fill(nLostHits);
298  hNLostHits_vs_Pt_ ->Fill(simPt , nLostHits);
299  hNLostHits_vs_Eta_->Fill(simEta, nLostHits);
300 
301  const double recoNDof = recoRef->ndof();
302  const double recoChi2 = recoRef->chi2();
303  const double recoChi2Norm = recoRef->normalizedChi2();
304  const double recoChi2Prob = TMath::Prob(recoRef->chi2(), static_cast<int>(recoRef->ndof()));
305 
306  hNDof_->Fill(recoNDof);
307  hChi2_->Fill(recoChi2);
308  hChi2Norm_->Fill(recoChi2Norm);
309  hChi2Prob_->Fill(recoChi2Prob);
310 
311  hNDof_vs_Eta_->Fill(simEta, recoNDof);
312  hChi2_vs_Eta_->Fill(simEta, recoChi2);
313  hChi2Norm_vs_Eta_->Fill(simEta, recoChi2Norm);
314  hChi2Prob_vs_Eta_->Fill(simEta, recoChi2Prob);
315 
316  const double recoQ = recoRef->charge();
317  if ( simQ*recoQ < 0 ) {
318  hMisQPt_ ->Fill(simPt );
319  hMisQEta_->Fill(simEta);
320  }
321 
322  const double recoP = recoRef->p();
323  const double recoPt = recoRef->pt();
324  const double recoEta = recoRef->eta();
325  const double recoPhi = recoRef->phi();
326  const double recoQPt = recoQ/recoPt;
327 
328  const double recoDxy = recoRef->dxy();
329  const double recoDz = recoRef->dz();
330 
331  const double errP = (recoP-simP)/simP;
332  const double errPt = (recoPt-simPt)/simPt;
333  const double errEta = (recoEta-simEta)/simEta;
334  const double errPhi = (recoPhi-simPhi)/simPhi;
335  const double errQPt = (recoQPt-simQPt)/simQPt;
336 
337  const double errDxy = (recoDxy-simDxy)/simDxy;
338  const double errDz = (recoDz-simDz)/simDz;
339 
340  hP_ ->Fill(simP);
341  hPt_ ->Fill(simPt );
342  hEta_->Fill(simEta);
343  hPhi_->Fill(simPhi);
344 
345  hErrP_ ->Fill(errP );
346  hErrPt_ ->Fill(errPt );
347  hErrEta_->Fill(errEta);
348  hErrPhi_->Fill(errPhi);
349  hErrDxy_->Fill(errDxy);
350  hErrDz_ ->Fill(errDz );
351 
352  if(fabs(simEta) > 0. && fabs(simEta) < 0.8) {
353  hErrPBarrel_->Fill(errP);
354  hErrPtBarrel_->Fill(errPt);
355  } else if (fabs(simEta) > 0.8 && fabs(simEta) < 1.2) {
356  hErrPOverlap_->Fill(errP);
357  hErrPtOverlap_->Fill(errPt);
358  } else if (fabs(simEta) > 1.2 ){
359  hErrPEndcap_->Fill(errP);
360  hErrPtEndcap_->Fill(errPt);
361  }
362 
363  hErrP_vs_Eta_ ->Fill(simEta, errP );
364  hErrPt_vs_Eta_ ->Fill(simEta, errPt );
365  hErrQPt_vs_Eta_->Fill(simEta, errQPt);
366 
367  hErrP_vs_P_ ->Fill(simP , errP );
368  hErrPt_vs_Pt_ ->Fill(simPt , errPt );
369  hErrQPt_vs_Pt_->Fill(simQPt, errQPt);
370 
371  hErrEta_vs_Eta_->Fill(simEta, errEta);
372 
373  const double pullPt = (recoPt-simPt)/recoRef->ptError();
374  const double pullQPt = (recoQPt-simQPt)/recoRef->qoverpError();
375  const double pullEta = (recoEta-simEta)/recoRef->etaError();
376  const double pullPhi = (recoPhi-simPhi)/recoRef->phiError();
377  const double pullDxy = (recoDxy-simDxy)/recoRef->dxyError();
378  const double pullDz = (recoDz-simDz)/recoRef->dzError();
379 
380  hPullPt_ ->Fill(pullPt );
381  hPullEta_->Fill(pullEta);
382  hPullPhi_->Fill(pullPhi);
383  hPullQPt_->Fill(pullQPt);
384  hPullDxy_->Fill(pullDxy);
385  hPullDz_ ->Fill(pullDz );
386 
387  hPullPt_vs_Eta_->Fill(simEta, pullPt);
388  hPullPt_vs_Pt_ ->Fill(simPt, pullPt);
389 
390  hPullEta_vs_Eta_->Fill(simEta, pullEta);
391  hPullPhi_vs_Eta_->Fill(simEta, pullPhi);
392 
393  hPullEta_vs_Pt_->Fill(simPt, pullEta);
394  };
395 };
396 
397 //
398 //struct defininiong histograms
399 //
401  typedef MonitorElement* MEP;
402 
403 //diffs
404  MEP hTrkToGlbDiffNTrackerHits_, hStaToGlbDiffNMuonHits_;
405  MEP hTrkToGlbDiffNTrackerHitsEta_, hStaToGlbDiffNMuonHitsEta_;
406  MEP hTrkToGlbDiffNTrackerHitsPt_, hStaToGlbDiffNMuonHitsPt_;
407 
408 //global muon hit pattern
409  MEP hNInvalidHitsGTHitPattern_, hNInvalidHitsITHitPattern_, hNInvalidHitsOTHitPattern_;
411 
412 //muon based momentum assignment
413  MEP hMuonP_, hMuonPt_, hMuonEta_, hMuonPhi_;
414 //track based kinematics
415  MEP hMuonTrackP_, hMuonTrackPt_, hMuonTrackEta_, hMuonTrackPhi_, hMuonTrackDxy_, hMuonTrackDz_;
416 //histograms for fractions
417  MEP hMuonAllP_, hMuonAllPt_, hMuonAllEta_, hMuonAllPhi_;
418 };
419 
420 //
421 //Constructor
422 //
424  selector_(pset.getParameter<std::string>("selection"))
425 {
426  verbose_ = pset.getUntrackedParameter<unsigned int>("verbose", 0);
427 
428  outputFileName_ = pset.getUntrackedParameter<string>("outputFileName", "");
429 
430  // Set histogram dimensions from config
431  HistoDimensions hDim;
432 
433  hDim.nBinP = pset.getUntrackedParameter<unsigned int>("nBinP");
434  hDim.minP = pset.getUntrackedParameter<double>("minP");
435  hDim.maxP = pset.getUntrackedParameter<double>("maxP");
436 
437  hDim.nBinPt = pset.getUntrackedParameter<unsigned int>("nBinPt");
438  hDim.minPt = pset.getUntrackedParameter<double>("minPt");
439  hDim.maxPt = pset.getUntrackedParameter<double>("maxPt");
440 
441  doAbsEta_ = pset.getUntrackedParameter<bool>("doAbsEta");
442  hDim.doAbsEta = doAbsEta_;
443  hDim.nBinEta = pset.getUntrackedParameter<unsigned int>("nBinEta");
444  hDim.minEta = pset.getUntrackedParameter<double>("minEta");
445  hDim.maxEta = pset.getUntrackedParameter<double>("maxEta");
446 
447  hDim.nBinDxy = pset.getUntrackedParameter<unsigned int>("nBinDxy");
448  hDim.minDxy = pset.getUntrackedParameter<double>("minDxy");
449  hDim.maxDxy = pset.getUntrackedParameter<double>("maxDxy");
450 
451  hDim.nBinDz = pset.getUntrackedParameter<unsigned int>("nBinDz");
452  hDim.minDz = pset.getUntrackedParameter<double>("minDz");
453  hDim.maxDz = pset.getUntrackedParameter<double>("maxDz");
454 
455  hDim.nBinPhi = pset.getUntrackedParameter<unsigned int>("nBinPhi");
456  hDim.minPhi = pset.getUntrackedParameter<double>("minPhi", -TMath::Pi());
457  hDim.maxPhi = pset.getUntrackedParameter<double>("maxPhi", TMath::Pi());
458 
459  hDim.nBinErr = pset.getUntrackedParameter<unsigned int>("nBinErr");
460  hDim.nBinPull = pset.getUntrackedParameter<unsigned int>("nBinPull");
461 
462  hDim.wPull = pset.getUntrackedParameter<double>("wPull");
463 
464  hDim.minErrP = pset.getUntrackedParameter<double>("minErrP");
465  hDim.maxErrP = pset.getUntrackedParameter<double>("maxErrP");
466 
467  hDim.minErrPt = pset.getUntrackedParameter<double>("minErrPt");
468  hDim.maxErrPt = pset.getUntrackedParameter<double>("maxErrPt");
469 
470  hDim.minErrQPt = pset.getUntrackedParameter<double>("minErrQPt");
471  hDim.maxErrQPt = pset.getUntrackedParameter<double>("maxErrQPt");
472 
473  hDim.minErrEta = pset.getUntrackedParameter<double>("minErrEta");
474  hDim.maxErrEta = pset.getUntrackedParameter<double>("maxErrEta");
475 
476  hDim.minErrPhi = pset.getUntrackedParameter<double>("minErrPhi");
477  hDim.maxErrPhi = pset.getUntrackedParameter<double>("maxErrPhi");
478 
479  hDim.minErrDxy = pset.getUntrackedParameter<double>("minErrDxy");
480  hDim.maxErrDxy = pset.getUntrackedParameter<double>("maxErrDxy");
481 
482  hDim.minErrDz = pset.getUntrackedParameter<double>("minErrDz" );
483  hDim.maxErrDz = pset.getUntrackedParameter<double>("maxErrDz" );
484 
485  hDim.nTrks = pset.getUntrackedParameter<unsigned int>("nTrks");
486  hDim.nAssoc = pset.getUntrackedParameter<unsigned int>("nAssoc");
487  hDim.nDof = pset.getUntrackedParameter<unsigned int>("nDof", 55);
488 
489  // Labels for simulation and reconstruction tracks
490  simLabel_ = pset.getParameter<InputTag>("simLabel" );
491  muonLabel_ = pset.getParameter<InputTag>("muonLabel");
492 
493  // Labels for sim-reco association
494  doAssoc_ = pset.getUntrackedParameter<bool>("doAssoc", true);
495  muAssocLabel_ = pset.getParameter<InputTag>("muAssocLabel");
496 
497  //type of track
498  std::string trackType = pset.getParameter< std::string >("trackType");
499  if (trackType == "inner") trackType_ = MuonAssociatorByHits::InnerTk;
500  else if (trackType == "outer") trackType_ = MuonAssociatorByHits::OuterTk;
501  else if (trackType == "global") trackType_ = MuonAssociatorByHits::GlobalTk;
502  else if (trackType == "segments") trackType_ = MuonAssociatorByHits::Segments;
503  else throw cms::Exception("Configuration") << "Track type '" << trackType << "' not supported.\n";
504 
505 // seedPropagatorName_ = pset.getParameter<string>("SeedPropagator");
506 
507  ParameterSet tpset = pset.getParameter<ParameterSet>("tpSelector");
508  tpSelector_ = TrackingParticleSelector(tpset.getParameter<double>("ptMin"),
509  tpset.getParameter<double>("minRapidity"),
510  tpset.getParameter<double>("maxRapidity"),
511  tpset.getParameter<double>("tip"),
512  tpset.getParameter<double>("lip"),
513  tpset.getParameter<int>("minHit"),
514  tpset.getParameter<bool>("signalOnly"),
515  tpset.getParameter<bool>("chargedOnly"),
516  tpset.getParameter<bool>("stableOnly"),
517  tpset.getParameter<std::vector<int> >("pdgId"));
518 
519  // the service parameters
520  ParameterSet serviceParameters
521  = pset.getParameter<ParameterSet>("ServiceParameters");
522  theMuonService = new MuonServiceProxy(serviceParameters);
523 
524  // retrieve the instance of DQMService
525  theDQM = 0;
527 
528  if ( ! theDQM ) {
529  LogError("RecoMuonValidator") << "DQMService not initialized\n";
530  return;
531  }
532 
533  subDir_ = pset.getUntrackedParameter<string>("subDir");
534  if ( subDir_.empty() ) subDir_ = "RecoMuonV";
535  if ( subDir_[subDir_.size()-1] == '/' ) subDir_.erase(subDir_.size()-1);
536 
537  // book histograms
538  theDQM->cd();
539 
541 
542  commonME_ = new CommonME;
543  muonME_ = new MuonME;
544 
545  //commonME
546  const int nHits = 201;
547 
548  // - diffs
549  commonME_->hTrkToGlbDiffNTrackerHits_ = theDQM->book1D("TrkGlbDiffNTrackerHits", "Difference of number of tracker hits (tkMuon - globalMuon)", nHits, -100.5, 100.5);
550  commonME_->hStaToGlbDiffNMuonHits_ = theDQM->book1D("StaGlbDiffNMuonHits", "Difference of number of muon hits (staMuon - globalMuon)", nHits, -100.5, 100.5);
551 
552  commonME_->hTrkToGlbDiffNTrackerHitsEta_ = theDQM->book2D("TrkGlbDiffNTrackerHitsEta", "Difference of number of tracker hits (tkMuon - globalMuon)", hDim.nBinEta, hDim.minEta, hDim.maxEta,nHits, -100.5, 100.5);
553  commonME_->hStaToGlbDiffNMuonHitsEta_ = theDQM->book2D("StaGlbDiffNMuonHitsEta", "Difference of number of muon hits (staMuon - globalMuon)", hDim.nBinEta, hDim.minEta, hDim.maxEta,nHits, -100.5, 100.5);
554 
555  commonME_->hTrkToGlbDiffNTrackerHitsPt_ = theDQM->book2D("TrkGlbDiffNTrackerHitsPt", "Difference of number of tracker hits (tkMuon - globalMuon)", hDim.nBinPt, hDim.minPt, hDim.maxPt,nHits, -100.5, 100.5);
556  commonME_->hStaToGlbDiffNMuonHitsPt_ = theDQM->book2D("StaGlbDiffNMuonHitsPt", "Difference of number of muon hits (staMuon - globalMuon)", hDim.nBinPt, hDim.minPt, hDim.maxPt,nHits, -100.5, 100.5);
557 
558  // -global muon hit pattern
559  commonME_->hNInvalidHitsGTHitPattern_ = theDQM->book1D("NInvalidHitsGTHitPattern", "Number of invalid hits on a global track", nHits, 0, nHits);
560  commonME_->hNInvalidHitsITHitPattern_ = theDQM->book1D("NInvalidHitsITHitPattern", "Number of invalid hits on an inner track", nHits, 0, nHits);
561  commonME_->hNInvalidHitsOTHitPattern_ = theDQM->book1D("NInvalidHitsOTHitPattern", "Number of invalid hits on an outer track", nHits, 0, nHits);
562  commonME_->hNDeltaInvalidHitsHitPattern_ = theDQM->book1D("hNDeltaInvalidHitsHitPattern", "The discrepancy for Number of invalid hits on an global track and inner and outer tracks", 2.*nHits, -nHits, nHits);
563 
564  //muon based kinematics
565  commonME_->hMuonP_ = theDQM->book1D("PMuon" , "p of muon" , hDim.nBinP , hDim.minP , hDim.maxP );
566  commonME_->hMuonPt_ = theDQM->book1D("PtMuon" , "p_{T} of muon", hDim.nBinPt , hDim.minPt , hDim.maxPt );
567  commonME_->hMuonEta_ = theDQM->book1D("EtaMuon", "#eta of muon" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
568  commonME_->hMuonPhi_ = theDQM->book1D("PhiMuon", "#phi of muon" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
569  //track based kinematics
570  commonME_->hMuonTrackP_ = theDQM->book1D("PMuonTrack" , "p of reco muon track" , hDim.nBinP , hDim.minP , hDim.maxP );
571  commonME_->hMuonTrackPt_ = theDQM->book1D("PtMuonTrack" , "p_{T} of reco muon track", hDim.nBinPt , hDim.minPt , hDim.maxPt );
572  commonME_->hMuonTrackEta_ = theDQM->book1D("EtaMuonTrack", "#eta of reco muon track" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
573  commonME_->hMuonTrackPhi_ = theDQM->book1D("PhiMuonTrack", "#phi of reco muon track" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
574  commonME_->hMuonTrackDxy_ = theDQM->book1D("DxyMuonTrack", "Dxy of reco muon track" , hDim.nBinDxy, hDim.minDxy, hDim.maxDxy);
575  commonME_->hMuonTrackDz_ = theDQM->book1D("DzMuonTrack", "Dz of reco muon track" , hDim.nBinDz, hDim.minDz, hDim.maxDz);
576 
577  //histograms for fractions
578  commonME_->hMuonAllP_ = theDQM->book1D("PMuonAll" , "p of muons of all types" , hDim.nBinP , hDim.minP , hDim.maxP );
579  commonME_->hMuonAllPt_ = theDQM->book1D("PtMuonAll" , "p_{T} of muon of all types", hDim.nBinPt , hDim.minPt , hDim.maxPt );
580  commonME_->hMuonAllEta_ = theDQM->book1D("EtaMuonAll", "#eta of muon of all types" , hDim.nBinEta, hDim.minEta, hDim.maxEta);
581  commonME_->hMuonAllPhi_ = theDQM->book1D("PhiMuonAll", "#phi of muon of all types" , hDim.nBinPhi, hDim.minPhi, hDim.maxPhi);
582 
584 
585  if ( verbose_ > 0 ) theDQM->showDirStructure();
586 }
587 
588 //
589 //Destructor
590 //
592 {
593  if ( theMuonService ) delete theMuonService;
594 }
595 
596 //
597 //Begin run
598 //
599 void RecoMuonValidator::beginRun(const edm::Run& , const EventSetup& eventSetup)
600 {
601  if ( theMuonService ) theMuonService->update(eventSetup);
602 
603  if ( doAssoc_ ) {
604  edm::ESHandle<TrackAssociatorBase> associatorBase;
605  eventSetup.get<TrackAssociatorRecord>().get(muAssocLabel_.label(), associatorBase);
606  assoByHits = dynamic_cast<const MuonAssociatorByHits *>(associatorBase.product());
607  if (assoByHits == 0) throw cms::Exception("Configuration") << "The Track Associator with label '" << muAssocLabel_.label() << "' is not a MuonAssociatorByHits.\n";
608  }
609 
610 }
611 
612 //
613 //End run
614 //
616 {
617  if ( theDQM && ! outputFileName_.empty() ) theDQM->save(outputFileName_);
618 }
619 
620 //
621 //Analyze
622 //
623 void RecoMuonValidator::analyze(const Event& event, const EventSetup& eventSetup)
624 {
625  if ( ! theDQM ) {
626  LogError("RecoMuonValidator") << "DQMService not initialized\n";
627  return;
628  }
629 
630  // Get TrackingParticles
632  event.getByLabel(simLabel_, simHandle);
633  const TrackingParticleCollection simColl = *(simHandle.product());
634 
635  // Get Muons
636  Handle<View<Muon> > muonHandle;
637  event.getByLabel(muonLabel_, muonHandle);
638  View<Muon> muonColl = *(muonHandle.product());
639 
640  const TrackingParticleCollection::size_type nSim = simColl.size();
641 
643  Muons = muonHandle->refVector();
644 
646  for (size_t i = 0; i < nSim; ++i) {
647  allTPs.push_back(TrackingParticleRef(simHandle,i));
648  }
649 
650  muonME_->hNSim_->Fill(nSim);
651  muonME_->hNMuon_->Fill(muonColl.size());
652 
655 
656  if ( doAssoc_ ) {
657  assoByHits->associateMuons(muonToSimColl, simToMuonColl, Muons, trackType_, allTPs, &event, &eventSetup);
658  } else {
659 /*
660  // SimToMuon associations
661  Handle<reco::RecoToSimCollection> simToTrkMuHandle;
662  event.getByLabel(trkMuAssocLabel_, simToTrkMuHandle);
663  trkSimRecColl = *(simToTrkMuHandle.product());
664 
665  Handle<reco::RecoToSimCollection> simToStaMuHandle;
666  event.getByLabel(staMuAssocLabel_, simToStaMuHandle);
667  staSimRecColl = *(simToStaMuHandle.product());
668 
669  Handle<reco::RecoToSimCollection> simToGlbMuHandle;
670  event.getByLabel(glbMuAssocLabel_, simToGlbMuHandle);
671  glbSimRecColl = *(simToGlbMuHandle.product());
672 
673  // MuonToSim associations
674  Handle<reco::SimToRecoCollection> trkMuToSimHandle;
675  event.getByLabel(trkMuAssocLabel_, trkMuToSimHandle);
676  trkRecSimColl = *(trkMuToSimHandle.product());
677 
678  Handle<reco::SimToRecoCollection> staMuToSimHandle;
679  event.getByLabel(staMuAssocLabel_, staMuToSimHandle);
680  staRecSimColl = *(staMuToSimHandle.product());
681 
682  Handle<reco::SimToRecoCollection> glbMuToSimHandle;
683  event.getByLabel(glbMuAssocLabel_, glbMuToSimHandle);
684  glbRecSimColl = *(glbMuToSimHandle.product());
685 */
686  }
687 
688  int glbNTrackerHits = 0; int trkNTrackerHits = 0; int staNTrackerHits = 0;
689  int glbNMuonHits = 0; int trkNMuonHits = 0; int staNMuonHits = 0;
690  int NTrackerHits = 0; int NMuonHits = 0;
691 
692  // Analyzer reco::Muon
693  for(View<Muon>::const_iterator iMuon = muonColl.begin();
694  iMuon != muonColl.end(); ++iMuon) {
695 
696  //histograms for fractions
697  commonME_->hMuonAllP_->Fill(iMuon->p());
698  commonME_->hMuonAllPt_->Fill(iMuon->pt());
699  commonME_->hMuonAllEta_->Fill(iMuon->eta());
700  commonME_->hMuonAllPhi_->Fill(iMuon->phi());
701 
702  if (!selector_(*iMuon)) continue;
703 
704 
705  TrackRef Track = iMuon->track();
706 
707  if (Track.isNonnull()) {
708  commonME_->hMuonTrackP_->Fill(Track->p());
709  commonME_->hMuonTrackPt_->Fill(Track->pt());
710  commonME_->hMuonTrackEta_->Fill(Track->eta());
711  commonME_->hMuonTrackPhi_->Fill(Track->phi());
712 
713  //ip histograms
714  commonME_->hMuonTrackDxy_->Fill(Track->dxy());
715  commonME_->hMuonTrackDz_->Fill(Track->dz());
716  }
717 
718  if (iMuon->isGlobalMuon()) {
719  Track = iMuon->combinedMuon();
720  glbNTrackerHits = countTrackerHits(*Track);
721  glbNMuonHits = countMuonHits(*Track);
722  } else if (iMuon->isTrackerMuon()) {
723  Track = iMuon->track();
724  trkNTrackerHits = countTrackerHits(*Track);
725  trkNMuonHits = countMuonHits(*Track);
726  } else {
727  Track = iMuon->standAloneMuon();
728  staNTrackerHits = countTrackerHits(*Track);
729  staNMuonHits = countMuonHits(*Track);
730  }
731 
732  NTrackerHits = countTrackerHits(*Track);
733  NMuonHits = countMuonHits(*Track);
734 
735 //list of histos for each type
736 
737 // muonME_->hNTrks_->Fill();
738  muonME_->hNTrksEta_->Fill(Track->eta());
739  muonME_->hNTrksPt_->Fill(Track->pt());
740 
741  commonME_->hMuonP_->Fill(iMuon->p());
742  commonME_->hMuonPt_->Fill(iMuon->pt());
743  commonME_->hMuonEta_->Fill(iMuon->eta());
744  commonME_->hMuonPhi_->Fill(iMuon->phi());
745 
746  if (iMuon->isGlobalMuon()) {
747  double gtHitPat = iMuon->globalTrack()->hitPattern().numberOfHits() - iMuon->globalTrack()->hitPattern().numberOfValidHits();
748  double itHitPat = iMuon->innerTrack()->hitPattern().numberOfHits() - iMuon->innerTrack()->hitPattern().numberOfValidHits();
749  double otHitPat = iMuon->outerTrack()->hitPattern().numberOfHits() - iMuon->outerTrack()->hitPattern().numberOfValidHits();
750 
754  commonME_->hNDeltaInvalidHitsHitPattern_->Fill(gtHitPat - itHitPat - otHitPat);
755  }
756 
757  muonME_->hNTrackerHits_->Fill(NTrackerHits);
758  muonME_->hNTrackerHits_vs_Pt_->Fill(Track->pt(), NTrackerHits);
759  muonME_->hNTrackerHits_vs_Eta_->Fill(Track->eta(), NTrackerHits);
760 
761  muonME_->hNMuonHits_->Fill(NMuonHits);
762  muonME_->hNMuonHits_vs_Pt_->Fill(Track->pt(), NMuonHits);
763  muonME_->hNMuonHits_vs_Eta_->Fill(Track->eta(), NMuonHits);
764 
765  //must be global and standalone
766  if (iMuon->isGlobalMuon() && iMuon->isStandAloneMuon()) {
767  commonME_->hStaToGlbDiffNMuonHitsEta_->Fill(Track->eta(),staNMuonHits-glbNMuonHits);
768  commonME_->hStaToGlbDiffNMuonHitsPt_->Fill(Track->pt(),staNMuonHits-glbNMuonHits);
769  commonME_->hStaToGlbDiffNMuonHits_->Fill(staNMuonHits-glbNMuonHits);
770  }
771 
772  //must be global and tracker
773  if (iMuon->isGlobalMuon() && iMuon->isTrackerMuon()) {
774  commonME_->hTrkToGlbDiffNTrackerHitsEta_->Fill(Track->eta(),trkNTrackerHits-glbNTrackerHits);
775  commonME_->hTrkToGlbDiffNTrackerHitsPt_->Fill(Track->pt(),trkNTrackerHits-glbNTrackerHits);
776  commonME_->hTrkToGlbDiffNTrackerHits_->Fill(trkNTrackerHits-glbNTrackerHits);
777  }
778 
779  }//end of reco muon loop
780 
781  // Associate by hits
782  for(TrackingParticleCollection::size_type i=0; i<nSim; i++) {
783  TrackingParticleRef simRef(simHandle, i);
784  const TrackingParticle* simTP = simRef.get();
785  if ( ! tpSelector_(*simTP) ) continue;
786 
787  //denominators for efficiency plots
788  const double simP = simRef->p();
789  const double simPt = simRef->pt();
790  const double simEta = doAbsEta_ ? fabs(simRef->eta()) : simRef->eta();
791  const double simPhi = simRef->phi();
792 
793  GlobalPoint simVtx(simRef->vertex().x(), simRef->vertex().y(), simRef->vertex().z());
794  GlobalVector simMom(simRef->momentum().x(), simRef->momentum().y(), simRef->momentum().z());
795  const double simDxy = -simVtx.x()*sin(simPhi)+simVtx.y()*cos(simPhi);
796  const double simDz = simVtx.z() - (simVtx.x()*simMom.x()+simVtx.y()*simMom.y())*simMom.z()/simMom.perp2();
797 
798  const unsigned int nSimHits = simRef->pSimHit_end() - simRef->pSimHit_begin();
799 
800  muonME_->hSimP_ ->Fill(simP );
801  muonME_->hSimPt_ ->Fill(simPt );
802  muonME_->hSimEta_->Fill(simEta);
803  muonME_->hSimPhi_->Fill(simPhi);
804  muonME_->hSimDxy_->Fill(simDxy);
805  muonME_->hSimDz_->Fill(simDz);
806  muonME_->hNSimHits_->Fill(nSimHits);
807 
808  // Get sim-reco association for a simRef
809  vector<pair<RefToBase<Muon>, double> > MuRefV;
810  if ( simToMuonColl.find(simRef) != simToMuonColl.end() ) {
811  MuRefV = simToMuonColl[simRef];
812 
813  if ( !MuRefV.empty()) {
814  muonME_->hNSimToReco_->Fill(MuRefV.size());
815  const Muon* Mu = MuRefV.begin()->first.get();
816  if (!selector_(*Mu)) continue;
817 
818  reco::TrackRef muonTrack = Mu->track();
819 
820  if (muonTrack.isNonnull())
821  muonME_->fill(&*simTP, &*muonTrack);
822  }
823  }
824  }
825 }
826 
827 int
830 
831  int count = 0;
832 
833  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
834  if((*hit)->isValid()) {
835  DetId recoid = (*hit)->geographicalId();
836  if ( recoid.det() == DetId::Muon ) count++;
837  }
838  }
839  return count;
840 }
841 
842 int
845 
846  int count = 0;
847 
848  for (trackingRecHit_iterator hit = track.recHitsBegin(); hit != track.recHitsEnd(); ++hit) {
849  if((*hit)->isValid()) {
850  DetId recoid = (*hit)->geographicalId();
851  if ( recoid.det() == DetId::Tracker ) count++;
852  }
853  }
854  return count;
855 }
856 /* vim:set ts=2 sts=2 sw=2 expandtab: */
double p() const
momentum vector magnitude
Definition: TrackBase.h:129
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
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:514
unsigned int nBinPhi
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:111
double dxyError() const
error on dxy
Definition: TrackBase.h:209
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:209
void associateMuons(MuonToSimCollection &recoToSim, SimToMuonCollection &simToReco, const edm::RefToBaseVector< reco::Muon > &, MuonTrackType, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
unsigned int nBinPull
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:1898
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
edm::InputTag simLabel_
double etaError() const
error on eta
Definition: TrackBase.h:205
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:39
StringCutObjectSelector< reco::Muon > selector_
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:139
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:234
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
void Fill(long long x)
unsigned int nBinDxy
FreeTrajectoryState FTS
TrackingParticleSelector tpSelector_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:249
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
std::map< TrackingParticleRef, std::vector< std::pair< edm::RefToBase< reco::Muon >, double > > > SimToMuonCollection
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 eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:141
MuonServiceProxy * theMuonService
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:107
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:109
edm::InputTag muAssocLabel_
double pt() const
track transverse momentum
Definition: TrackBase.h:131
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:194
virtual int countMuonHits(const reco::Track &track) const
double phiError() const
error on phi
Definition: TrackBase.h:207
const MuonAssociatorByHits * assoByHits
std::string outputFileName_
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:232
unsigned int verbose_
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:192
edm::InputTag muonLabel_
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:127
double dzError() const
error on dz
Definition: TrackBase.h:215
MuonAssociatorByHits::MuonTrackType trackType_
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 nBinDz
unsigned int nBinP
void push_back(value_type const &ref)
Add a Ref&lt;C, T&gt; to the RefVector.
Definition: RefVector.h:60
virtual void endRun()
const_iterator begin() const
int charge() const
track electric charge
Definition: TrackBase.h:113
const_iterator end() const
std::vector< TrackingParticle > TrackingParticleCollection
void showDirStructure(void) const
Definition: DQMStore.cc:2554
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:642
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:241
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:121
T x() const
Definition: PV3DBase.h:56
void fill(const TrackingParticle *simRef, const Track *recoRef)
std::map< edm::RefToBase< reco::Muon >, std::vector< std::pair< TrackingParticleRef, double > >, RefToBaseSort > MuonToSimCollection
edm::Ref< TrackingParticleCollection > TrackingParticleRef
RecoMuonValidator(const edm::ParameterSet &pset)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
Definition: Run.h:32
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