CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
V0Validator.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: V0Validator
4 // Class: V0Validator
5 //
13 //
14 // Original Author: Brian Drell
15 // Created: Wed Feb 18 17:21:04 MST 2009
16 //
17 //
18 
19 
22 
23 typedef std::vector<TrackingVertex> TrackingVertexCollection;
27 
29  : theDQMRootFileName(iConfig.getUntrackedParameter<std::string>("DQMRootFileName"))
30  , dirName(iConfig.getUntrackedParameter<std::string>("dirName"))
31  , recoRecoToSimCollectionToken_( consumes<reco::RecoToSimCollection>( iConfig.getUntrackedParameter<edm::InputTag>("trackAssociatorMap") ) )
32  , recoSimToRecoCollectionToken_( consumes<reco::SimToRecoCollection>( iConfig.getUntrackedParameter<edm::InputTag>("trackAssociatorMap") ) )
33  , trackingParticleCollection_Eff_Token_( consumes<TrackingParticleCollection>( iConfig.getUntrackedParameter<edm::InputTag>("trackingParticleCollectionEff") ) )
34  , vec_recoVertex_Token_( consumes< std::vector<reco::Vertex> >( iConfig.getUntrackedParameter<edm::InputTag>("vertexCollection") ) )
35  , recoVertexCompositeCandidateCollection_k0s_Token_( consumes<reco::VertexCompositeCandidateCollection>( iConfig.getUntrackedParameter<edm::InputTag>( "kShortCollection" ) ) )
36  , recoVertexCompositeCandidateCollection_lambda_Token_( consumes<reco::VertexCompositeCandidateCollection>( iConfig.getUntrackedParameter<edm::InputTag>( "lambdaCollection" ) ) )
37 {
38 
40 
41 }
42 
44 
45 }
46 
48  ibooker.cd();
49  std::string subDirName = V0Validator::dirName + "/EffFakes";
50  ibooker.setCurrentFolder(subDirName.c_str());
51 
52  ksEffVsR = ibooker.book1D("K0sEffVsR",
53  "K^{0}_{S} Efficiency vs #rho", 40, 0., 40.);
54  ksEffVsEta = ibooker.book1D("K0sEffVsEta",
55  "K^{0}_{S} Efficiency vs #eta", 40, -2.5, 2.5);
56  ksEffVsPt = ibooker.book1D("K0sEffVsPt",
57  "K^{0}_{S} Efficiency vs p_{T}", 70, 0., 20.);;
58 
59  ksTkEffVsR = ibooker.book1D("K0sTkEffVsR",
60  "K^{0}_{S} Tracking Efficiency vs #rho", 40, 0., 40.);
61  ksTkEffVsEta = ibooker.book1D("K0sTkEffVsEta",
62  "K^{0}_{S} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
63  ksTkEffVsPt = ibooker.book1D("K0sTkEffVsPt",
64  "K^{0}_{S} Tracking Efficiency vs p_{T}", 70, 0., 20.);
65 
66  ksEffVsR_num = ibooker.book1D("K0sEffVsR_num",
67  "K^{0}_{S} Efficiency vs #rho", 40, 0., 40.);
68  ksEffVsEta_num = ibooker.book1D("K0sEffVsEta_num",
69  "K^{0}_{S} Efficiency vs #eta", 40, -2.5, 2.5);
70  ksEffVsPt_num = ibooker.book1D("K0sEffVsPt_num",
71  "K^{0}_{S} Efficiency vs p_{T}", 70, 0., 20.);;
72 
73  ksTkEffVsR_num = ibooker.book1D("K0sTkEffVsR_num",
74  "K^{0}_{S} Tracking Efficiency vs #rho", 40, 0., 40.);
75  ksTkEffVsEta_num = ibooker.book1D("K0sTkEffVsEta_num",
76  "K^{0}_{S} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
77  ksTkEffVsPt_num = ibooker.book1D("K0sTkEffVsPt_num",
78  "K^{0}_{S} Tracking Efficiency vs p_{T}", 70, 0., 20.);;
79 
80  ksEffVsR_denom = ibooker.book1D("K0sEffVsR_denom",
81  "K^{0}_{S} Efficiency vs #rho", 40, 0., 40.);
82  ksEffVsEta_denom = ibooker.book1D("K0sEffVsEta_denom",
83  "K^{0}_{S} Efficiency vs #eta", 40, -2.5, 2.5);
84  ksEffVsPt_denom = ibooker.book1D("K0sEffVsPt_denom",
85  "K^{0}_{S} Efficiency vs p_{T}", 70, 0., 20.);;
86 
87  lamEffVsR = ibooker.book1D("LamEffVsR",
88  "#Lambda^{0} Efficiency vs #rho", 40, 0., 40.);
89  lamEffVsEta = ibooker.book1D("LamEffVsEta",
90  "#Lambda^{0} Efficiency vs #eta", 40, -2.5, 2.5);
91  lamEffVsPt = ibooker.book1D("LamEffVsPt",
92  "#Lambda^{0} Efficiency vs p_{T}", 70, 0., 20.);
93 
94  lamTkEffVsR = ibooker.book1D("LamTkEffVsR",
95  "#Lambda^{0} TrackingEfficiency vs #rho", 40, 0., 40.);
96  lamTkEffVsEta = ibooker.book1D("LamTkEffVsEta",
97  "#Lambda^{0} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
98  lamTkEffVsPt = ibooker.book1D("LamTkEffVsPt",
99  "#Lambda^{0} Tracking Efficiency vs p_{T}", 70, 0., 20.);
100 
101  lamEffVsR_num = ibooker.book1D("LamEffVsR_num",
102  "#Lambda^{0} Efficiency vs #rho", 40, 0., 40.);
103  lamEffVsEta_num = ibooker.book1D("LamEffVsEta_num",
104  "#Lambda^{0} Efficiency vs #eta", 40, -2.5, 2.5);
105  lamEffVsPt_num = ibooker.book1D("LamEffVsPt_num",
106  "#Lambda^{0} Efficiency vs p_{T}", 70, 0., 20.);
107 
108  lamTkEffVsR_num = ibooker.book1D("LamTkEffVsR_num",
109  "#Lambda^{0} TrackingEfficiency vs #rho", 40, 0., 40.);
110  lamTkEffVsEta_num = ibooker.book1D("LamTkEffVsEta_num",
111  "#Lambda^{0} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
112  lamTkEffVsPt_num = ibooker.book1D("LamTkEffVsPt_num",
113  "#Lambda^{0} Tracking Efficiency vs p_{T}", 70, 0., 20.);
114 
115  lamEffVsR_denom = ibooker.book1D("LamEffVsR_denom",
116  "#Lambda^{0} Efficiency vs #rho", 40, 0., 40.);
117  lamEffVsEta_denom = ibooker.book1D("LamEffVsEta_denom",
118  "#Lambda^{0} Efficiency vs #eta", 40, -2.5, 2.5);
119  lamEffVsPt_denom = ibooker.book1D("LamEffVsPt_denom",
120  "#Lambda^{0} Efficiency vs p_{T}", 70, 0., 20.);
121 
122  ksFakeVsR = ibooker.book1D("K0sFakeVsR",
123  "K^{0}_{S} Fake Rate vs #rho", 40, 0., 40.);
124  ksFakeVsEta = ibooker.book1D("K0sFakeVsEta",
125  "K^{0}_{S} Fake Rate vs #eta", 40, -2.5, 2.5);
126  ksFakeVsPt = ibooker.book1D("K0sFakeVsPt",
127  "K^{0}_{S} Fake Rate vs p_{T}", 70, 0., 20.);
128  ksTkFakeVsR = ibooker.book1D("K0sTkFakeVsR",
129  "K^{0}_{S} Tracking Fake Rate vs #rho", 40, 0., 40.);
130  ksTkFakeVsEta = ibooker.book1D("K0sTkFakeVsEta",
131  "K^{0}_{S} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
132  ksTkFakeVsPt = ibooker.book1D("K0sTkFakeVsPt",
133  "K^{0}_{S} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
134 
135  ksFakeVsR_num = ibooker.book1D("K0sFakeVsR_num",
136  "K^{0}_{S} Fake Rate vs #rho", 40, 0., 40.);
137  ksFakeVsEta_num = ibooker.book1D("K0sFakeVsEta_num",
138  "K^{0}_{S} Fake Rate vs #eta", 40, -2.5, 2.5);
139  ksFakeVsPt_num = ibooker.book1D("K0sFakeVsPt_num",
140  "K^{0}_{S} Fake Rate vs p_{T}", 70, 0., 20.);
141  ksTkFakeVsR_num = ibooker.book1D("K0sTkFakeVsR_num",
142  "K^{0}_{S} Tracking Fake Rate vs #rho", 40, 0., 40.);
143  ksTkFakeVsEta_num = ibooker.book1D("K0sTkFakeVsEta_num",
144  "K^{0}_{S} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
145  ksTkFakeVsPt_num = ibooker.book1D("K0sTkFakeVsPt_num",
146  "K^{0}_{S} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
147 
148  ksFakeVsR_denom = ibooker.book1D("K0sFakeVsR_denom",
149  "K^{0}_{S} Fake Rate vs #rho", 40, 0., 40.);
150  ksFakeVsEta_denom = ibooker.book1D("K0sFakeVsEta_denom",
151  "K^{0}_{S} Fake Rate vs #eta", 40, -2.5, 2.5);
152  ksFakeVsPt_denom = ibooker.book1D("K0sFakeVsPt_denom",
153  "K^{0}_{S} Fake Rate vs p_{T}", 70, 0., 20.);
154 
155  lamFakeVsR = ibooker.book1D("LamFakeVsR",
156  "#Lambda^{0} Fake Rate vs #rho", 40, 0., 40.);
157  lamFakeVsEta = ibooker.book1D("LamFakeVsEta",
158  "#Lambda^{0} Fake Rate vs #eta", 40, -2.5, 2.5);
159  lamFakeVsPt = ibooker.book1D("LamFakeVsPt",
160  "#Lambda^{0} Fake Rate vs p_{T}", 70, 0., 20.);
161  lamTkFakeVsR = ibooker.book1D("LamTkFakeVsR",
162  "#Lambda^{0} Tracking Fake Rate vs #rho", 40, 0., 40.);
163  lamTkFakeVsEta = ibooker.book1D("LamTkFakeVsEta",
164  "#Lambda^{0} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
165  lamTkFakeVsPt = ibooker.book1D("LamTkFakeVsPt",
166  "#Lambda^{0} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
167 
168  lamFakeVsR_num = ibooker.book1D("LamFakeVsR_num",
169  "#Lambda^{0} Fake Rate vs #rho", 40, 0., 40.);
170  lamFakeVsEta_num = ibooker.book1D("LamFakeVsEta_num",
171  "#Lambda^{0} Fake Rate vs #eta", 40, -2.5, 2.5);
172  lamFakeVsPt_num = ibooker.book1D("LamFakeVsPt_num",
173  "#Lambda^{0} Fake Rate vs p_{T}", 70, 0., 20.);
174  lamTkFakeVsR_num = ibooker.book1D("LamTkFakeVsR_num",
175  "#Lambda^{0} Tracking Fake Rate vs #rho", 40, 0., 40.);
176  lamTkFakeVsEta_num = ibooker.book1D("LamTkFakeVsEta_num",
177  "#Lambda^{0} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
178  lamTkFakeVsPt_num = ibooker.book1D("LamTkFakeVsPt_num",
179  "#Lambda^{0} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
180 
181  lamFakeVsR_denom = ibooker.book1D("LamFakeVsR_denom",
182  "#Lambda^{0} Fake Rate vs #rho", 40, 0., 40.);
183  lamFakeVsEta_denom = ibooker.book1D("LamFakeVsEta_denom",
184  "#Lambda^{0} Fake Rate vs #eta", 40, -2.5, 2.5);
185  lamFakeVsPt_denom = ibooker.book1D("LamFakeVsPt_denom",
186  "#Lambda^{0} Fake Rate vs p_{T}", 70, 0., 20.);
187 
188  ibooker.cd();
189  subDirName = dirName + "/Other";
190  ibooker.setCurrentFolder(subDirName.c_str());
191 
192  nKs = ibooker.book1D("nK0s",
193  "Number of K^{0}_{S} found per event", 60, 0., 60.);
194  nLam = ibooker.book1D("nLam",
195  "Number of #Lambda^{0} found per event", 60, 0., 60.);
196 
197  ksXResolution = ibooker.book1D("ksXResolution",
198  "Resolution of V0 decay vertex X coordinate", 50, 0., 50.);
199  ksYResolution = ibooker.book1D("ksYResolution",
200  "Resolution of V0 decay vertex Y coordinate", 50, 0., 50.);
201  ksZResolution = ibooker.book1D("ksZResolution",
202  "Resolution of V0 decay vertex Z coordinate", 50, 0., 50.);
203  lamXResolution = ibooker.book1D("lamXResolution",
204  "Resolution of V0 decay vertex X coordinate", 50, 0., 50.);
205  lamYResolution = ibooker.book1D("lamYResolution",
206  "Resolution of V0 decay vertex Y coordinate", 50, 0., 50.);
207  lamZResolution = ibooker.book1D("lamZResolution",
208  "Resolution of V0 decay vertex Z coordinate", 50, 0., 50.);
209  ksAbsoluteDistResolution = ibooker.book1D("ksRResolution",
210  "Resolution of absolute distance from primary vertex to V0 vertex",
211  100, 0., 50.);
212  lamAbsoluteDistResolution = ibooker.book1D("lamRResolution",
213  "Resolution of absolute distance from primary vertex to V0 vertex",
214  100, 0., 50.);
215 
216  ksCandStatus = ibooker.book1D("ksCandStatus",
217  "Fake type by cand status",
218  10, 0., 10.);
219  lamCandStatus = ibooker.book1D("ksCandStatus",
220  "Fake type by cand status",
221  10, 0., 10.);
222 
223  double minKsMass = 0.49767 - 0.07;
224  double maxKsMass = 0.49767 + 0.07;
225  double minLamMass = 1.1156 - 0.05;
226  double maxLamMass = 1.1156 + 0.05;
227  int ksMassNbins = 100;
228  double ksMassXmin = minKsMass;
229  double ksMassXmax = maxKsMass;
230  int lamMassNbins = 100;
231  double lamMassXmin = minLamMass;
232  double lamMassXmax = maxLamMass;
233 
234  fakeKsMass = ibooker.book1D("ksMassFake",
235  "Mass of fake K0S",
236  ksMassNbins, minKsMass, maxKsMass);
237  goodKsMass = ibooker.book1D("ksMassGood",
238  "Mass of good reco K0S",
239  ksMassNbins, minKsMass, maxKsMass);
240  fakeLamMass = ibooker.book1D("lamMassFake",
241  "Mass of fake Lambda",
242  lamMassNbins, minLamMass, maxLamMass);
243  goodLamMass = ibooker.book1D("lamMassGood",
244  "Mass of good Lambda",
245  lamMassNbins, minLamMass, maxLamMass);
246 
247  ksMassAll = ibooker.book1D("ksMassAll",
248  "Invariant mass of all K0S",
249  ksMassNbins, ksMassXmin, ksMassXmax);
250  lamMassAll = ibooker.book1D("lamMassAll",
251  "Invariant mass of all #Lambda^{0}",
252  lamMassNbins, lamMassXmin, lamMassXmax);
253 
254  ksFakeDauRadDist = ibooker.book1D("radDistFakeKs",
255  "Production radius of daughter particle of Ks fake",
256  100, 0., 15.);
257  lamFakeDauRadDist = ibooker.book1D("radDistFakeLam",
258  "Production radius of daughter particle of Lam fake",
259  100, 0., 15.);
260 }
261 
263 
264  using std::cout;
265  using std::endl;
266  using namespace edm;
267  using namespace std;
268 
269  // Get event setup info, B-field and tracker geometry
270  ESHandle<MagneticField> bFieldHandle;
271  iSetup.get<IdealMagneticFieldRecord>().get(bFieldHandle);
272  ESHandle<GlobalTrackingGeometry> globTkGeomHandle;
273  iSetup.get<GlobalTrackingGeometryRecord>().get(globTkGeomHandle);
274 
275  // Make matching collections
276  Handle<reco::RecoToSimCollection > recotosimCollectionH;
277  iEvent.getByToken( recoRecoToSimCollectionToken_, recotosimCollectionH );
278 
279  Handle<reco::SimToRecoCollection> simtorecoCollectionH;
280  iEvent.getByToken( recoSimToRecoCollectionToken_, simtorecoCollectionH );
281 
283  iEvent.getByToken( trackingParticleCollection_Eff_Token_, TPCollectionEff );
284  const TrackingParticleCollection& tPCeff = *( TPCollectionEff.product() );
285 
286  // Select the primary vertex, create a new reco::Vertex to hold it
287  edm::Handle< std::vector<reco::Vertex> > primaryVtxCollectionH;
288  iEvent.getByToken( vec_recoVertex_Token_, primaryVtxCollectionH );
289 
290  std::vector<reco::Vertex>::const_iterator iVtxPH = primaryVtxCollectionH->begin();
291  for(std::vector<reco::Vertex>::const_iterator iVtx = primaryVtxCollectionH->begin();
292  iVtx < primaryVtxCollectionH->end();
293  iVtx++) {
294  if(primaryVtxCollectionH->size() > 1) {
295  if(iVtx->tracksSize() > iVtxPH->tracksSize()) {
296  iVtxPH = iVtx;
297  }
298  }
299  else iVtxPH = iVtx;
300  }
301 
302  //get the V0s;
307 
308  //make vector of pair of trackingParticles to hold good V0 candidates
309  std::vector< pair<TrackingParticleRef, TrackingParticleRef> > trueK0s;
310  std::vector< pair<TrackingParticleRef, TrackingParticleRef> > trueLams;
311  std::vector<double> trueKsMasses;
312  std::vector<double> trueLamMasses;
313 
315  // Do fake rate calculation //
317 
318  // Kshorts
319  double numK0sFound = 0.;
320  double mass = 0.;
321  std::vector<double> radDist;
322  if ( k0sCollection->size() > 0 ) {
323  vector<reco::TrackRef> theDaughterTracks;
324  for( reco::VertexCompositeCandidateCollection::const_iterator iK0s = k0sCollection->begin();
325  iK0s != k0sCollection->end();
326  iK0s++) {
327  // Fill mass of all K0S
328  ksMassAll->Fill( iK0s->mass() );
329  // Fill values to be histogrammed
330  K0sCandpT = (sqrt( iK0s->momentum().perp2() ));
331  K0sCandEta = iK0s->momentum().eta();
332  K0sCandR = (sqrt( iK0s->vertex().perp2() ));
333  K0sCandStatus = 0;
334  mass = iK0s->mass();
335 
336  theDaughterTracks.push_back( (*(dynamic_cast<const reco::RecoChargedCandidate *> (iK0s->daughter(0)) )).track() );
337  theDaughterTracks.push_back( (*(dynamic_cast<const reco::RecoChargedCandidate *> (iK0s->daughter(1)) )).track() );
338 
339  for (int itrack = 0; itrack < 2; itrack++) {
340  K0sPiCandStatus[itrack] = 0;
341  }
342 
343  std::vector< std::pair<TrackingParticleRef, double> > tp;
344  TrackingParticleRef tpref;
345  TrackingParticleRef firstDauTP;
346  TrackingVertexRef k0sVtx;
347 
348  // Loop through K0s candidate daugher tracks
349  for(View<reco::Track>::size_type i=0; i<theDaughterTracks.size(); ++i){
350  // Found track from theDaughterTracks
351  RefToBase<reco::Track> track( theDaughterTracks.at(i) );
352 
353  if(recotosimCollectionH->find(track) != recotosimCollectionH->end()) {
354  tp = (*recotosimCollectionH)[track];
355  if (tp.size() != 0) {
356  K0sPiCandStatus[i] = 1;
357  tpref = tp.begin()->first;
358 
359  if( simtorecoCollectionH->find(tpref) == simtorecoCollectionH->end() ) {
360  K0sPiCandStatus[i] = 3;
361  }
362  TrackingVertexRef parentVertex = tpref->parentVertex();
363  if(parentVertex.isNonnull()) radDist.push_back(parentVertex->position().R());
364 
365  if( parentVertex.isNonnull() ) {
366  if( k0sVtx.isNonnull() ) {
367  if( k0sVtx->position() == parentVertex->position() ) {
368  if( parentVertex->nDaughterTracks() == 2 ) {
369  if( parentVertex->nSourceTracks() == 0 ) {
370  // No source tracks found for K0s vertex; shouldn't happen, but does for evtGen events
371  K0sCandStatus = 6;
372  }
373 
374  for( TrackingVertex::tp_iterator iTP = parentVertex->sourceTracks_begin();
375  iTP != parentVertex->sourceTracks_end(); iTP++) {
376  if( (*iTP)->pdgId() == 310 ) {
377  K0sCandStatus = 1;
378  realK0sFound++;
379  numK0sFound += 1.;
380  std::pair<TrackingParticleRef, TrackingParticleRef> pair(firstDauTP, tpref);
381  // Pushing back a good V0
382  trueK0s.push_back(pair);
383  trueKsMasses.push_back(mass);
384  }
385  else {
386  K0sCandStatus = 2;
387  if( (*iTP)->pdgId() == 3122 ) {
388  K0sCandStatus = 7;
389  }
390  }
391  }
392  }
393  else {
394  // Found a bad match because the mother has too many daughters
395  K0sCandStatus = 3;
396  }
397  }
398  else {
399  // Found a bad match because the parent vertices from the two tracks are different
400  K0sCandStatus = 4;
401  }
402  }
403  else {
404  // if k0sVtx is null, fill it with parentVertex to compare to the parentVertex from the second track
405  k0sVtx = parentVertex;
406  firstDauTP = tpref;
407  }
408  }//parent vertex is null
409  }//tp size zero
410  }
411  else {
412  K0sPiCandStatus[i] = 2;
413  noTPforK0sCand++;
414  K0sCandStatus = 5;
415  theDaughterTracks.clear();
416  }
417  }
418  theDaughterTracks.clear();
419  // fill the fake rate histograms
420  if( K0sCandStatus > 1 ) {
424  ksCandStatus->Fill((float) K0sCandStatus);
425  fakeKsMass->Fill(mass);
426  for( unsigned int ndx = 0; ndx < radDist.size(); ndx++ ) {
427  ksFakeDauRadDist->Fill(radDist[ndx]);
428  }
429  }
430  if( K0sCandStatus == 5 ) {
434  }
438  }
439  }
440  nKs->Fill( (float) numK0sFound );
441  numK0sFound = 0.;
442 
443  double numLamFound = 0.;
444  mass = 0.;
445  radDist.clear();
446  // Lambdas
447  if ( lambdaCollection->size() > 0 ) {
448  vector<reco::TrackRef> theDaughterTracks;
449  for( reco::VertexCompositeCandidateCollection::const_iterator iLam = lambdaCollection->begin();
450  iLam != lambdaCollection->end();
451  iLam++) {
452  // Fill mass plot with ALL lambdas
453  lamMassAll->Fill( iLam->mass() );
454  // Fill values to be histogrammed
455  LamCandpT = (sqrt( iLam->momentum().perp2() ));
456  LamCandEta = iLam->momentum().eta();
457  LamCandR = (sqrt( iLam->vertex().perp2() ));
458  LamCandStatus = 0;
459  mass = iLam->mass();
460 
461  //cout << "Lam daughter tracks" << endl;
462  theDaughterTracks.push_back( (*(dynamic_cast<const reco::RecoChargedCandidate *> (iLam->daughter(0)) )).track() );
463  theDaughterTracks.push_back( (*(dynamic_cast<const reco::RecoChargedCandidate *> (iLam->daughter(1)) )).track() );
464 
465  for (int itrack = 0; itrack < 2; itrack++) {
466  LamPiCandStatus[itrack] = 0;
467  }
468 
469  std::vector< std::pair<TrackingParticleRef, double> > tp;
470  TrackingParticleRef tpref;
471  TrackingParticleRef firstDauTP;
472  TrackingVertexRef LamVtx;
473  // Loop through Lambda candidate daughter tracks
474  for(View<reco::Track>::size_type i=0; i<theDaughterTracks.size(); ++i){
475  // Found track from theDaughterTracks
476  RefToBase<reco::Track> track( theDaughterTracks.at(i) );
477 
478  if(recotosimCollectionH->find(track) != recotosimCollectionH->end()) {
479  tp = (*recotosimCollectionH)[track];
480  if (tp.size() != 0) {
481  LamPiCandStatus[i] = 1;
482  tpref = tp.begin()->first;
483  if( simtorecoCollectionH->find(tpref) == simtorecoCollectionH->end() ) {
484  LamPiCandStatus[i] = 3;
485  }
486  TrackingVertexRef parentVertex = tpref->parentVertex();
487  if( parentVertex.isNonnull() ) radDist.push_back(parentVertex->position().R());
488 
489  if( parentVertex.isNonnull() ) {
490  if( LamVtx.isNonnull() ) {
491  if( LamVtx->position() == parentVertex->position() ) {
492  if( parentVertex->nDaughterTracks() == 2 ) {
493  if( parentVertex->nSourceTracks() == 0 ) {
494  // No source tracks found for K0s vertex; shouldn't happen, but does for evtGen events
495  LamCandStatus = 6;
496  }
497 
498  for( TrackingVertex::tp_iterator iTP = parentVertex->sourceTracks_begin();
499  iTP != parentVertex->sourceTracks_end(); ++iTP) {
500  if( abs((*iTP)->pdgId()) == 3122 ) {
501  LamCandStatus = 1;
502  realLamFound++;
503  numLamFound += 1.;
504  std::pair<TrackingParticleRef, TrackingParticleRef> pair(firstDauTP, tpref);
505  // Pushing back a good V0
506  trueLams.push_back(pair);
507  trueLamMasses.push_back(mass);
508  }
509  else {
510  LamCandStatus = 2;
511  if( abs((*iTP)->pdgId() ) == 310 ) {
512  LamCandStatus = 7;
513  }
514  }
515  }
516  }
517  else {
518  // Found a bad match because the mother has too many daughters
519  LamCandStatus = 3;
520  }
521  }
522  else {
523  // Found a bad match because the parent vertices from the two tracks are different
524  LamCandStatus = 4;
525  }
526  }
527  else {
528  // if lamVtx is null, fill it with parentVertex to compare to the parentVertex from the second track
529  LamVtx = parentVertex;
530  firstDauTP = tpref;
531  }
532  }//parent vertex is null
533  }//tp size zero
534  }
535  else {
536  LamPiCandStatus[i] = 2;
537  noTPforLamCand++;
538  LamCandStatus = 5;
539  theDaughterTracks.clear();
540  }
541  }
542  theDaughterTracks.clear();
543  // fill the fake rate histograms
544  if( LamCandStatus > 1 ) {
548  lamCandStatus->Fill((float) LamCandStatus);
549  fakeLamMass->Fill(mass);
550  for( unsigned int ndx = 0; ndx < radDist.size(); ndx++ ) {
551  lamFakeDauRadDist->Fill(radDist[ndx]);
552  }
553  }
554  if( K0sCandStatus == 5 ) {
558  }
562  }
563  }
564  nLam->Fill( (double) numLamFound );
565  numLamFound = 0.;
566 
567 
569  // Do efficiency calculation //
571  // Lambdas
572  for(TrackingParticleCollection::size_type i = 0; i < tPCeff.size(); i++) {
573  TrackingParticleRef tpr1(TPCollectionEff, i);
574  const TrackingParticle* itp1 = tpr1.get();
575  if( (itp1->pdgId() == 211 || itp1->pdgId() == 2212)
576  && itp1->parentVertex().isNonnull()
577  && abs(itp1->momentum().eta()) < 2.4
578  && sqrt( itp1->momentum().perp2() ) > 0.9) {
579  bool isLambda = false;
580  if( itp1->pdgId() == 2212 ) isLambda = true;
581  if( itp1->parentVertex()->nDaughterTracks() == 2 ) {
582 
583  TrackingVertexRef piCand1Vertex = itp1->parentVertex();
584  for(TrackingVertex::tp_iterator iTP1 = piCand1Vertex->sourceTracks_begin();
585  iTP1 != piCand1Vertex->sourceTracks_end(); iTP1++) {
586  if( abs((*iTP1)->pdgId()) == 3122 ) {
587  // ----->>>>>>Keep going here
589  j < tPCeff.size();
590  j++) {
591  TrackingParticleRef tpr2(TPCollectionEff, j);
592  const TrackingParticle* itp2 = tpr2.get();
593  int particle2pdgId;
594  if (isLambda) particle2pdgId = -211;
595  else particle2pdgId = -2212;
596  if( itp2->pdgId() == particle2pdgId
597  && itp2->parentVertex().isNonnull()
598  && abs(itp2->momentum().eta()) < 2.4
599  && sqrt(itp2->momentum().perp2()) > 0.9) {
600  if(itp2->parentVertex() == itp1->parentVertex()) {
601  // Found a good pair of Lambda daughters
602  TrackingVertexRef piCand2Vertex = itp2->parentVertex();
603  for (TrackingVertex::tp_iterator iTP2 = piCand2Vertex->sourceTracks_begin();
604  iTP2 != piCand2Vertex->sourceTracks_end();
605  ++iTP2) {
606  LamGenEta = LamGenpT = LamGenR = 0.;
607  LamGenStatus = 0;
608  for(int ifill = 0;
609  ifill < 2;
610  ifill++) {
611  // do nothing?
612  }
613  if( abs((*iTP2)->pdgId()) == 3122 ) {
614  // found generated Lambda
615  LamGenpT = sqrt((*iTP2)->momentum().perp2());
616  LamGenEta = (*iTP2)->momentum().eta();
617  LamGenR = sqrt(itp2->vertex().perp2());
618  genLam++;
619  if(trueLams.size() > 0) {
620  int loop_1 = 0;
621  for(std::vector< pair<TrackingParticleRef, TrackingParticleRef> >::const_iterator iEffCheck = trueLams.begin();
622  iEffCheck != trueLams.end();
623  iEffCheck++) {
624  if( itp1->parentVertex() == iEffCheck->first->parentVertex()
625  && itp2->parentVertex() == iEffCheck->second->parentVertex() ) {
626  realLamFoundEff++;
627  //V0Producer found the generated Lambda
628  LamGenStatus = 1;
629  goodLamMass->Fill(trueLamMasses[loop_1]);
630  break;
631  }
632  else {
633  //V0Producer didn't find the generated Lambda
634  LamGenStatus = 2;
635  }
636  loop_1++;
637  }
638  }
639  else {
640  //No V0 cand found, so V0Producer didn't find the generated Lambda
641  LamGenStatus = 2;
642  }
643  std::vector< std::pair<RefToBase<reco::Track>, double> > rt1;
644  std::vector< std::pair<RefToBase<reco::Track>, double> > rt2;
645 
646  if( simtorecoCollectionH->find(tpr1) != simtorecoCollectionH->end() ) {
647  rt1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) (*simtorecoCollectionH)[tpr1];
648  if(rt1.size() != 0) {
649  LamPiEff[0] = 1; //Found the first daughter track
650  edm::RefToBase<reco::Track> t1 = rt1.begin()->first;
651  }
652  }
653  else {
654  LamPiEff[0] = 2;//First daughter not found
655  }
656  if( (simtorecoCollectionH->find(tpr2) != simtorecoCollectionH->end()) ) {
657  rt2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) (*simtorecoCollectionH)[tpr2];
658  if(rt2.size() != 0) {
659  LamPiEff[1] = 1;//Found the second daughter track
660  edm::RefToBase<reco::Track> t2 = rt2.begin()->first;
661  }
662  }
663  else {
664  LamPiEff[1] = 2;//Second daughter not found
665  }
666 
667  if( LamGenStatus == 1
668  && (LamPiEff[0] == 2 || LamPiEff[1] == 2) ) {
669  // Good Lambda found, but recoTrack->trackingParticle->recoTrack didn't work
670  LamGenStatus = 4;
671  realLamFoundEff--;
672  }
673  if( LamGenStatus == 2
674  && (LamPiEff[0] == 2 || LamPiEff[1] == 2) ) {
675  // Lambda not found because we didn't find a daughter track
676  LamGenStatus = 3;
677  }
678  // Fill histograms
679  if(LamGenR > 0.) {
680  if(LamGenStatus == 1) {
682  }
683  if((double) LamGenStatus < 2.5) {
685  }
687  }
688  if(abs(LamGenEta) > 0.) {
689  if(LamGenStatus == 1) {
690  lamEffVsEta_num->Fill(LamGenEta);
691  }
692  if((double) LamGenStatus < 2.5) {
693  lamTkEffVsEta_num->Fill(LamGenEta);
694  }
695  lamEffVsEta_denom->Fill(LamGenEta);
696  }
697  if(LamGenpT > 0.) {
698  if(LamGenStatus == 1) {
700  }
701  if((double) LamGenStatus < 2.5) {
703  }
705  }
706  }
707  }
708  }
709  }
710  }
711  }
712  }
713  }
714  }
715  }
716 
717  //Kshorts
718 
719  for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
720  TrackingParticleRef tpr1(TPCollectionEff, i);
721  const TrackingParticle* itp1 = tpr1.get();
722  // only count the efficiency for pions with |eta|<2.4 and pT>0.9 GeV. First search for a suitable pi+
723  if ( itp1->pdgId() == 211
724  && itp1->parentVertex().isNonnull()
725  && abs(itp1->momentum().eta()) < 2.4
726  && sqrt(itp1->momentum().perp2()) > 0.9) {
727  if ( itp1->parentVertex()->nDaughterTracks() == 2 ) {
728  TrackingVertexRef piCand1Vertex = itp1->parentVertex();
729  //check trackingParticle pion for a Ks mother
730  for (TrackingVertex::tp_iterator iTP1 = piCand1Vertex->sourceTracks_begin();
731  iTP1 != piCand1Vertex->sourceTracks_end(); ++iTP1) {
732  //iTP1 is a TrackingParticle
733  if ( (*iTP1)->pdgId()==310 ) {
734  //with a Ks mother found for the pi+, loop through trackingParticles again to find a pi-
735  for (TrackingParticleCollection::size_type j=0; j<tPCeff.size(); j++){
736  TrackingParticleRef tpr2(TPCollectionEff, j);
737  const TrackingParticle* itp2 = tpr2.get();
738 
739  if ( itp2->pdgId() == -211 && itp2->parentVertex().isNonnull()
740  && abs(itp2->momentum().eta()) < 2.4
741  && sqrt(itp2->momentum().perp2()) > 0.9) {
742  //check the pi+ and pi- have the same vertex
743  if ( itp2->parentVertex() == itp1->parentVertex() ) {
744  TrackingVertexRef piCand2Vertex = itp2->parentVertex();
745  for (TrackingVertex::tp_iterator iTP2 = piCand2Vertex->sourceTracks_begin();
746  iTP2 != piCand2Vertex->sourceTracks_end(); ++iTP2) {
747  //iTP2 is a TrackingParticle
748  K0sGenEta = K0sGenpT = K0sGenR = 0.;
749  K0sGenStatus = 0;
750  if( (*iTP2)->pdgId() == 310 ) {
751  K0sGenpT = sqrt( (*iTP2)->momentum().perp2() );
752  K0sGenEta = (*iTP2)->momentum().eta();
753  K0sGenR = sqrt(itp2->vertex().perp2());
754  genK0s++;
755  int loop_2 = 0;
756  if( trueK0s.size() > 0 ) {
757  for( std::vector< pair<TrackingParticleRef, TrackingParticleRef> >::const_iterator iEffCheck = trueK0s.begin();
758  iEffCheck != trueK0s.end();
759  iEffCheck++) {
760  //if the parent vertices for the tracks are the same, then the generated Ks was found
761  if (itp1->parentVertex()==iEffCheck->first->parentVertex() &&
762  itp2->parentVertex()==iEffCheck->second->parentVertex()) {
763  realK0sFoundEff++;
764  K0sGenStatus = 1;
765  goodKsMass->Fill(trueKsMasses[loop_2]);
766  break;
767  }
768  else {
769  K0sGenStatus = 2;
770  }
771  }
772  }
773  else {
774  K0sGenStatus = 2;
775  }
776 
777  // Check if the generated Ks tracks were found or not
778  // by searching the recoTracks list for a match to the trackingParticles
779 
780  std::vector<std::pair<RefToBase<reco::Track>, double> > rt1;
781  std::vector<std::pair<RefToBase<reco::Track>, double> > rt2;
782 
783  if( simtorecoCollectionH->find(tpr1) != simtorecoCollectionH->end() ) {
784  rt1 = (std::vector< std::pair<RefToBase<reco::Track>, double> >) (*simtorecoCollectionH)[tpr1];
785  if(rt1.size() != 0) {
786  //First pion found
787  K0sPiEff[0] = 1;
788  edm::RefToBase<reco::Track> t1 = rt1.begin()->first;
789  }
790  }
791  else {
792  //First pion not found
793  K0sPiEff[0] = 2;
794  }
795 
796  if( simtorecoCollectionH->find(tpr2) != simtorecoCollectionH->end() ) {
797  rt2 = (std::vector< std::pair<RefToBase<reco::Track>, double> >) (*simtorecoCollectionH)[tpr2];
798  if(rt2.size() != 0) {
799  //Second pion found
800  K0sPiEff[1] = 1;
801  edm::RefToBase<reco::Track> t2 = rt2.begin()->first;
802  }
803  }
804  else {
805  K0sPiEff[1] = 2;
806  }
807  if(K0sGenStatus == 1
808  && (K0sPiEff[0] == 2 || K0sPiEff[1] == 2)) {
809  K0sGenStatus = 4;
810  realK0sFoundEff--;
811  }
812  if(K0sGenStatus == 2
813  && (K0sPiEff[0] == 2 || K0sPiEff[1] == 2)) {
814  K0sGenStatus = 3;
815  }
816  if(K0sPiEff[0] == 1 && K0sPiEff[1] == 1) {
817  k0sTracksFound++;
818  }
819  //Fill Histograms
820  if(K0sGenR > 0.) {
821  if(K0sGenStatus == 1) {
823  }
824  if((double) K0sGenStatus < 2.5) {
826  }
828  }
829  if(abs(K0sGenEta) > 0.) {
830  if(K0sGenStatus == 1) {
831  ksEffVsEta_num->Fill(K0sGenEta);
832  }
833  if((double) K0sGenStatus < 2.5) {
834  ksTkEffVsEta_num->Fill(K0sGenEta);
835  }
836  ksEffVsEta_denom->Fill(K0sGenEta);
837  }
838  if(K0sGenpT > 0.) {
839  if(K0sGenStatus == 1) {
841  }
842  if((double) K0sGenStatus < 2.5) {
844  }
846  }
847  }
848  }
849  }
850  }
851  }
852  }
853  }
854  }
855  }
856  }
857 }
858 
859 //define this as a plug-in
860 //DEFINE_FWK_MODULE(V0Validator);
MonitorElement * ksTkFakeVsPt
Definition: V0Validator.h:115
unsigned int size_type
Definition: View.h:89
int i
Definition: DBlmapReader.cc:9
MonitorElement * nLam
Definition: V0Validator.h:180
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: V0Validator.cc:47
std::vector< VertexCompositeCandidate > VertexCompositeCandidateCollection
collection of Candidate objects
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
MonitorElement * lamTkFakeVsR_num
Definition: V0Validator.h:166
MonitorElement * ksEffVsR
Definition: V0Validator.h:104
unsigned int K0sCandStatus
Definition: V0Validator.h:96
edm::EDGetTokenT< reco::SimToRecoCollection > recoSimToRecoCollectionToken_
Definition: V0Validator.h:201
V0Validator(const edm::ParameterSet &)
Definition: V0Validator.cc:28
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > recoVertexCompositeCandidateCollection_k0s_Token_
Definition: V0Validator.h:204
float LamGenR
Definition: V0Validator.h:93
std::vector< TrackingParticle > TrackingParticleCollection
Vector momentum() const
spatial momentum vector
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * ksFakeVsPt_denom
Definition: V0Validator.h:132
float LamCandR
Definition: V0Validator.h:95
MonitorElement * lamTkEffVsR
Definition: V0Validator.h:147
int pdgId() const
PDG ID.
MonitorElement * lamFakeVsPt
Definition: V0Validator.h:152
MonitorElement * ksTkFakeVsEta
Definition: V0Validator.h:114
MonitorElement * ksFakeVsR_denom
Definition: V0Validator.h:130
MonitorElement * ksFakeVsEta_num
Definition: V0Validator.h:124
unsigned int LamPiCandStatus[2]
Definition: V0Validator.h:97
MonitorElement * lamEffVsEta_num
Definition: V0Validator.h:158
MonitorElement * lamFakeVsPt_denom
Definition: V0Validator.h:139
MonitorElement * ksEffVsR_num
Definition: V0Validator.h:117
MonitorElement * ksFakeVsPt_num
Definition: V0Validator.h:125
MonitorElement * lamFakeVsR_denom
Definition: V0Validator.h:137
MonitorElement * lamEffVsPt_denom
Definition: V0Validator.h:142
unsigned int K0sPiCandStatus[2]
Definition: V0Validator.h:97
uint16_t size_type
MonitorElement * lamEffVsPt_num
Definition: V0Validator.h:159
MonitorElement * lamTkFakeVsR
Definition: V0Validator.h:153
MonitorElement * lamFakeVsR
Definition: V0Validator.h:150
void Fill(long long x)
MonitorElement * ksFakeVsEta
Definition: V0Validator.h:111
MonitorElement * lamZResolution
Definition: V0Validator.h:176
unsigned int LamPiEff[2]
Definition: V0Validator.h:97
MonitorElement * lamFakeDauRadDist
Definition: V0Validator.h:195
MonitorElement * lamTkEffVsEta
Definition: V0Validator.h:148
MonitorElement * lamEffVsR
Definition: V0Validator.h:144
MonitorElement * ksFakeVsEta_denom
Definition: V0Validator.h:131
int iEvent
Definition: GenABIO.cc:230
MonitorElement * fakeLamMass
Definition: V0Validator.h:187
MonitorElement * ksFakeDauRadDist
Definition: V0Validator.h:194
MonitorElement * lamTkFakeVsEta_num
Definition: V0Validator.h:167
edm::RefVector< edm::HepMCProduct, HepMC::GenVertex > GenVertexRefVector
MonitorElement * lamTkFakeVsPt
Definition: V0Validator.h:155
MonitorElement * ksEffVsPt_denom
Definition: V0Validator.h:135
int lamCandFound
Definition: V0Validator.h:101
MonitorElement * ksTkFakeVsEta_num
Definition: V0Validator.h:127
int k0sCandFound
Definition: V0Validator.h:101
int noTPforLamCand
Definition: V0Validator.h:101
T sqrt(T t)
Definition: SSEVec.h:48
MonitorElement * ksTkEffVsR_num
Definition: V0Validator.h:120
MonitorElement * lamFakeVsEta_denom
Definition: V0Validator.h:138
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: V0Validator.cc:262
MonitorElement * lamXResolution
Definition: V0Validator.h:174
MonitorElement * ksEffVsEta_denom
Definition: V0Validator.h:134
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
MonitorElement * lamTkEffVsPt
Definition: V0Validator.h:149
float K0sCandEta
Definition: V0Validator.h:95
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
MonitorElement * goodKsMass
Definition: V0Validator.h:186
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
float LamGenpT
Definition: V0Validator.h:93
int realLamFound
Definition: V0Validator.h:100
const TrackingVertexRef & parentVertex() const
MonitorElement * fakeKsMass
Definition: V0Validator.h:185
edm::EDGetTokenT< std::vector< reco::Vertex > > vec_recoVertex_Token_
Definition: V0Validator.h:203
MonitorElement * ksTkEffVsPt
Definition: V0Validator.h:109
MonitorElement * goodLamMass
Definition: V0Validator.h:188
MonitorElement * ksFakeVsPt
Definition: V0Validator.h:112
edm::Ref< TrackingVertexCollection > TrackingVertexRef
unsigned int LamGenStatus
Definition: V0Validator.h:96
MonitorElement * lamTkFakeVsEta
Definition: V0Validator.h:154
unsigned int K0sGenStatus
Definition: V0Validator.h:96
MonitorElement * ksMassAll
Definition: V0Validator.h:190
MonitorElement * lamTkEffVsR_num
Definition: V0Validator.h:160
MonitorElement * ksTkEffVsR
Definition: V0Validator.h:107
MonitorElement * nKs
Definition: V0Validator.h:179
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * lamTkEffVsEta_num
Definition: V0Validator.h:161
int noTPforK0sCand
Definition: V0Validator.h:101
float K0sGenEta
Definition: V0Validator.h:93
MonitorElement * ksXResolution
Definition: V0Validator.h:170
float K0sCandpT
Definition: V0Validator.h:95
float K0sGenpT
Definition: V0Validator.h:93
MonitorElement * lamEffVsEta_denom
Definition: V0Validator.h:141
std::vector< TrackingVertex > TrackingVertexCollection
const T & get() const
Definition: EventSetup.h:55
MonitorElement * lamFakeVsEta
Definition: V0Validator.h:151
MonitorElement * ksAbsoluteDistResolution
Definition: V0Validator.h:173
edm::AssociationMap< edm::OneToManyWithQualityGeneric< edm::View< reco::Track >, TrackingParticleCollection, double > > RecoToSimCollection
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleCollection_Eff_Token_
Definition: V0Validator.h:202
MonitorElement * ksCandStatus
Definition: V0Validator.h:182
MonitorElement * lamCandStatus
Definition: V0Validator.h:183
MonitorElement * lamEffVsEta
Definition: V0Validator.h:145
MonitorElement * lamTkFakeVsPt_num
Definition: V0Validator.h:168
MonitorElement * lamFakeVsEta_num
Definition: V0Validator.h:164
Point vertex() const
Parent vertex position.
MonitorElement * ksTkEffVsPt_num
Definition: V0Validator.h:122
MonitorElement * lamFakeVsPt_num
Definition: V0Validator.h:165
MonitorElement * lamMassAll
Definition: V0Validator.h:191
float K0sCandR
Definition: V0Validator.h:95
MonitorElement * lamFakeVsR_num
Definition: V0Validator.h:163
float LamGenEta
Definition: V0Validator.h:93
float LamCandEta
Definition: V0Validator.h:95
MonitorElement * lamEffVsR_num
Definition: V0Validator.h:157
MonitorElement * ksFakeVsR
Definition: V0Validator.h:110
MonitorElement * ksEffVsEta
Definition: V0Validator.h:105
MonitorElement * lamTkEffVsPt_num
Definition: V0Validator.h:162
edm::EDGetTokenT< reco::RecoToSimCollection > recoRecoToSimCollectionToken_
Definition: V0Validator.h:200
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > recoVertexCompositeCandidateCollection_lambda_Token_
Definition: V0Validator.h:204
edm::AssociationMap< edm::OneToManyWithQualityGeneric< TrackingParticleCollection, edm::View< reco::Track >, double > > SimToRecoCollection
MonitorElement * lamAbsoluteDistResolution
Definition: V0Validator.h:177
MonitorElement * ksZResolution
Definition: V0Validator.h:172
unsigned int LamCandStatus
Definition: V0Validator.h:96
Monte Carlo truth information used for tracking validation.
MonitorElement * ksEffVsPt_num
Definition: V0Validator.h:119
MonitorElement * ksTkEffVsEta_num
Definition: V0Validator.h:121
tuple cout
Definition: gather_cfg.py:121
MonitorElement * lamEffVsPt
Definition: V0Validator.h:146
MonitorElement * ksEffVsR_denom
Definition: V0Validator.h:133
MonitorElement * ksTkFakeVsPt_num
Definition: V0Validator.h:128
int realK0sFoundEff
Definition: V0Validator.h:100
MonitorElement * ksTkEffVsEta
Definition: V0Validator.h:108
MonitorElement * ksFakeVsR_num
Definition: V0Validator.h:123
MonitorElement * ksEffVsEta_num
Definition: V0Validator.h:118
MonitorElement * lamYResolution
Definition: V0Validator.h:175
std::string dirName
Definition: V0Validator.h:199
MonitorElement * ksEffVsPt
Definition: V0Validator.h:106
unsigned int K0sPiEff[2]
Definition: V0Validator.h:97
int k0sTracksFound
Definition: V0Validator.h:101
edm::RefVector< edm::HepMCProduct, HepMC::GenParticle > GenParticleRefVector
Definition: V0Validator.cc:26
int realLamFoundEff
Definition: V0Validator.h:100
float K0sGenR
Definition: V0Validator.h:93
MonitorElement * ksTkFakeVsR
Definition: V0Validator.h:113
MonitorElement * ksYResolution
Definition: V0Validator.h:171
MonitorElement * lamEffVsR_denom
Definition: V0Validator.h:140
Definition: Run.h:41
int realK0sFound
Definition: V0Validator.h:100
float LamCandpT
Definition: V0Validator.h:95
MonitorElement * ksTkFakeVsR_num
Definition: V0Validator.h:126