CMS 3D CMS Logo

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 
21 
22 typedef std::vector<TrackingVertex> TrackingVertexCollection;
26 
28  : theDQMRootFileName(iConfig.getUntrackedParameter<std::string>("DQMRootFileName")),
29  dirName(iConfig.getUntrackedParameter<std::string>("dirName")),
30  recoRecoToSimCollectionToken_(
31  consumes<reco::RecoToSimCollection>(iConfig.getUntrackedParameter<edm::InputTag>("trackAssociatorMap"))),
32  recoSimToRecoCollectionToken_(
33  consumes<reco::SimToRecoCollection>(iConfig.getUntrackedParameter<edm::InputTag>("trackAssociatorMap"))),
34  trackingVertexCollection_Token_(
35  consumes<TrackingVertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>("trackingVertexCollection"))),
36  vec_recoVertex_Token_(
37  consumes<std::vector<reco::Vertex> >(iConfig.getUntrackedParameter<edm::InputTag>("vertexCollection"))),
38  recoVertexCompositeCandidateCollection_k0s_Token_(consumes<reco::VertexCompositeCandidateCollection>(
39  iConfig.getUntrackedParameter<edm::InputTag>("kShortCollection"))),
40  recoVertexCompositeCandidateCollection_lambda_Token_(consumes<reco::VertexCompositeCandidateCollection>(
41  iConfig.getUntrackedParameter<edm::InputTag>("lambdaCollection"))) {}
42 
44 
46  double minKsMass = 0.49767 - 0.07;
47  double maxKsMass = 0.49767 + 0.07;
48  double minLamMass = 1.1156 - 0.05;
49  double maxLamMass = 1.1156 + 0.05;
50  int ksMassNbins = 100;
51  double ksMassXmin = minKsMass;
52  double ksMassXmax = maxKsMass;
53  int lamMassNbins = 100;
54  double lamMassXmin = minLamMass;
55  double lamMassXmax = maxLamMass;
56 
57  ibooker.cd();
58  std::string subDirName = V0Validator::dirName + "/K0";
59  ibooker.setCurrentFolder(subDirName);
60 
62  ibooker.book1D("K0sEffVsR_num", "K^{0}_{S} Efficiency vs #rho", 80, 0., 40.);
64  ibooker.book1D("K0sEffVsEta_num", "K^{0}_{S} Efficiency vs #eta", 40, -2.5, 2.5);
66  ibooker.book1D("K0sEffVsPt_num", "K^{0}_{S} Efficiency vs p_{T}", 70, 0., 20.);
67 
69  ibooker.book1D("K0sTkEffVsR_num", "K^{0}_{S} Tracking Efficiency vs #rho", 80, 0., 40.);
71  ibooker.book1D("K0sTkEffVsEta_num", "K^{0}_{S} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
73  ibooker.book1D("K0sTkEffVsPt_num", "K^{0}_{S} Tracking Efficiency vs p_{T}", 70, 0., 20.);
74 
76  ibooker.book1D("K0sEffVsR_denom", "K^{0}_{S} Efficiency vs #rho", 80, 0., 40.);
78  ibooker.book1D("K0sEffVsEta_denom", "K^{0}_{S} Efficiency vs #eta", 40, -2.5, 2.5);
80  ibooker.book1D("K0sEffVsPt_denom", "K^{0}_{S} Efficiency vs p_{T}", 70, 0., 20.);
81 
83  ibooker.book1D("K0sFakeVsR_num", "K^{0}_{S} Fake Rate vs #rho", 80, 0., 40.);
85  ibooker.book1D("K0sFakeVsEta_num", "K^{0}_{S} Fake Rate vs #eta", 40, -2.5, 2.5);
87  ibooker.book1D("K0sFakeVsPt_num", "K^{0}_{S} Fake Rate vs p_{T}", 70, 0., 20.);
89  ibooker.book1D("K0sTkFakeVsR_num", "K^{0}_{S} Tracking Fake Rate vs #rho", 80, 0., 80.);
91  ibooker.book1D("K0sTkFakeVsEta_num", "K^{0}_{S} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
93  ibooker.book1D("K0sTkFakeVsPt_num", "K^{0}_{S} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
94 
96  ibooker.book1D("K0sFakeVsR_denom", "K^{0}_{S} Fake Rate vs #rho", 80, 0., 40.);
98  ibooker.book1D("K0sFakeVsEta_denom", "K^{0}_{S} Fake Rate vs #eta", 40, -2.5, 2.5);
100  ibooker.book1D("K0sFakeVsPt_denom", "K^{0}_{S} Fake Rate vs p_{T}", 70, 0., 20.);
101  nCandidates_[V0Validator::KSHORT] = ibooker.book1D("nK0s", "Number of K^{0}_{S} found per event", 60, 0., 60.);
103  ibooker.book1D("ksMassFake", "Mass of fake K0S", ksMassNbins, minKsMass, maxKsMass);
105  ibooker.book1D("ksMassGood", "Mass of good reco K0S", ksMassNbins, minKsMass, maxKsMass);
107  ibooker.book1D("ksMassAll", "Invariant mass of all K0S", ksMassNbins, ksMassXmin, ksMassXmax);
109  ibooker.book1D("radDistFakeKs", "Production radius of daughter particle of Ks fake", 100, 0., 15.);
110  candidateStatus_[V0Validator::KSHORT] = ibooker.book1D("ksCandStatus", "Fake type by cand status", 10, 0., 10.);
111 
112  // Lambda Plots follow
113 
114  subDirName = V0Validator::dirName + "/Lambda";
115  ibooker.setCurrentFolder(subDirName);
116 
118  ibooker.book1D("LamEffVsR_num", "#Lambda^{0} Efficiency vs #rho", 80, 0., 40.);
120  ibooker.book1D("LamEffVsEta_num", "#Lambda^{0} Efficiency vs #eta", 40, -2.5, 2.5);
122  ibooker.book1D("LamEffVsPt_num", "#Lambda^{0} Efficiency vs p_{T}", 70, 0., 20.);
123 
125  ibooker.book1D("LamTkEffVsR_num", "#Lambda^{0} TrackingEfficiency vs #rho", 80, 0., 40.);
127  ibooker.book1D("LamTkEffVsEta_num", "#Lambda^{0} Tracking Efficiency vs #eta", 40, -2.5, 2.5);
129  ibooker.book1D("LamTkEffVsPt_num", "#Lambda^{0} Tracking Efficiency vs p_{T}", 70, 0., 20.);
130 
132  ibooker.book1D("LamEffVsR_denom", "#Lambda^{0} Efficiency vs #rho", 80, 0., 40.);
134  ibooker.book1D("LamEffVsEta_denom", "#Lambda^{0} Efficiency vs #eta", 40, -2.5, 2.5);
136  ibooker.book1D("LamEffVsPt_denom", "#Lambda^{0} Efficiency vs p_{T}", 70, 0., 20.);
137 
139  ibooker.book1D("LamFakeVsR_num", "#Lambda^{0} Fake Rate vs #rho", 80, 0., 40.);
141  ibooker.book1D("LamFakeVsEta_num", "#Lambda^{0} Fake Rate vs #eta", 40, -2.5, 2.5);
143  ibooker.book1D("LamFakeVsPt_num", "#Lambda^{0} Fake Rate vs p_{T}", 70, 0., 20.);
145  ibooker.book1D("LamTkFakeVsR_num", "#Lambda^{0} Tracking Fake Rate vs #rho", 80, 0., 40.);
147  ibooker.book1D("LamTkFakeVsEta_num", "#Lambda^{0} Tracking Fake Rate vs #eta", 40, -2.5, 2.5);
149  ibooker.book1D("LamTkFakeVsPt_num", "#Lambda^{0} Tracking Fake Rate vs p_{T}", 70, 0., 20.);
150 
152  ibooker.book1D("LamFakeVsR_denom", "#Lambda^{0} Fake Rate vs #rho", 80, 0., 40.);
154  ibooker.book1D("LamFakeVsEta_denom", "#Lambda^{0} Fake Rate vs #eta", 40, -2.5, 2.5);
156  ibooker.book1D("LamFakeVsPt_denom", "#Lambda^{0} Fake Rate vs p_{T}", 70, 0., 20.);
157 
158  nCandidates_[V0Validator::LAMBDA] = ibooker.book1D("nLam", "Number of #Lambda^{0} found per event", 60, 0., 60.);
160  ibooker.book1D("lamMassFake", "Mass of fake Lambda", lamMassNbins, minLamMass, maxLamMass);
162  ibooker.book1D("lamMassGood", "Mass of good Lambda", lamMassNbins, minLamMass, maxLamMass);
163 
165  ibooker.book1D("lamMassAll", "Invariant mass of all #Lambda^{0}", lamMassNbins, lamMassXmin, lamMassXmax);
167  ibooker.book1D("radDistFakeLam", "Production radius of daughter particle of Lam fake", 100, 0., 15.);
168 
169  candidateStatus_[V0Validator::LAMBDA] = ibooker.book1D("ksCandStatus", "Fake type by cand status", 10, 0., 10.);
170 }
171 
173  const reco::RecoToSimCollection& recotosimCollection,
174  V0Type v0_type,
175  int particle_pdgid,
176  int misreconstructed_particle_pdgid) {
177  using namespace edm;
178 
179  int numCandidateFound = 0;
180  double mass = 0.;
181  float CandidatepT = 0.;
182  float CandidateEta = 0.;
183  float CandidateR = 0.;
184  int CandidateStatus = 0;
185  const unsigned int NUM_DAUGHTERS = 2;
186  if (!collection.empty()) {
187  for (reco::VertexCompositeCandidateCollection::const_iterator iCandidate = collection.begin();
188  iCandidate != collection.end();
189  iCandidate++) {
190  // Fill values to be histogrammed
191  mass = iCandidate->mass();
192  CandidatepT = (sqrt(iCandidate->momentum().perp2()));
193  CandidateEta = iCandidate->momentum().eta();
194  CandidateR = (sqrt(iCandidate->vertex().perp2()));
195  candidateMassAll[v0_type]->Fill(mass);
196  CandidateStatus = 0;
197 
198  std::array<reco::TrackRef, NUM_DAUGHTERS> theDaughterTracks = {
199  {(*(dynamic_cast<const reco::RecoChargedCandidate*>(iCandidate->daughter(0)))).track(),
200  (*(dynamic_cast<const reco::RecoChargedCandidate*>(iCandidate->daughter(1)))).track()}};
201 
202  TrackingParticleRef tpref;
203  TrackingParticleRef firstDauTP;
204  TrackingVertexRef candidateVtx;
205 
206  std::array<double, NUM_DAUGHTERS> radDist;
207  // Loop through candidate's daugher tracks
208  for (View<reco::Track>::size_type i = 0; i < theDaughterTracks.size(); ++i) {
209  radDist = {{-1., -1.}};
210  // Found track from theDaughterTracks
211  RefToBase<reco::Track> track(theDaughterTracks.at(i));
212 
213  if (recotosimCollection.find(track) != recotosimCollection.end()) {
214  const std::vector<std::pair<TrackingParticleRef, double> >& tp = recotosimCollection[track];
215  if (!tp.empty()) {
216  tpref = tp.begin()->first;
217 
218  TrackingVertexRef parentVertex = tpref->parentVertex();
219  if (parentVertex.isNonnull()) {
220  radDist[i] = parentVertex->position().R();
221  if (candidateVtx.isNonnull()) {
222  if (candidateVtx->position() == parentVertex->position()) {
223  if (parentVertex->nDaughterTracks() == 2) {
224  if (parentVertex->nSourceTracks() == 0) {
225  // No source tracks found for candidate's
226  // vertex: it shouldn't happen, but does for
227  // evtGen events
228  CandidateStatus = 6;
229  }
230 
231  for (TrackingVertex::tp_iterator iTP = parentVertex->sourceTracks_begin();
232  iTP != parentVertex->sourceTracks_end();
233  iTP++) {
234  if (abs((*iTP)->pdgId()) == particle_pdgid) {
235  CandidateStatus = 1;
236  numCandidateFound += 1.;
237  goodCandidateMass[v0_type]->Fill(mass);
238  } else {
239  CandidateStatus = 2;
240  if (abs((*iTP)->pdgId()) == misreconstructed_particle_pdgid) {
241  CandidateStatus = 7;
242  }
243  }
244  }
245  } else {
246  // Found a bad match because the mother has too
247  // many daughters
248  CandidateStatus = 3;
249  }
250  } else {
251  // Found a bad match because the parent vertices
252  // from the two tracks are different
253  CandidateStatus = 4;
254  }
255  } else {
256  // if candidateVtx is null, fill it with parentVertex
257  // to compare to the parentVertex from the second
258  // track
259  candidateVtx = parentVertex;
260  firstDauTP = tpref;
261  }
262  } // parent vertex is null
263  } // check on associated tp size zero
264  } else {
265  CandidateStatus = 5;
266  }
267  } // Loop on candidate's daughter tracks
268 
269  // fill the fake rate histograms
270  if (CandidateStatus > 1) {
271  candidateFakeVsR_num_[v0_type]->Fill(CandidateR);
272  candidateFakeVsEta_num_[v0_type]->Fill(CandidateEta);
273  candidateFakeVsPt_num_[v0_type]->Fill(CandidatepT);
274  candidateStatus_[v0_type]->Fill((float)CandidateStatus);
275  fakeCandidateMass_[v0_type]->Fill(mass);
276  for (auto distance : radDist) {
277  if (distance > 0)
278  candidateFakeDauRadDist_[v0_type]->Fill(distance);
279  }
280  }
281  if (CandidateStatus == 5) {
282  candidateTkFakeVsR_num_[v0_type]->Fill(CandidateR);
283  candidateTkFakeVsEta_num_[v0_type]->Fill(CandidateEta);
284  candidateTkFakeVsPt_num_[v0_type]->Fill(CandidatepT);
285  }
286  candidateFakeVsR_denom_[v0_type]->Fill(CandidateR);
287  candidateFakeVsEta_denom_[v0_type]->Fill(CandidateEta);
288  candidateFakeVsPt_denom_[v0_type]->Fill(CandidatepT);
289  } // Loop on candidates
290  } // check on presence of candidate's collection in the event
291  nCandidates_[v0_type]->Fill((float)numCandidateFound);
292 }
293 
295  V0Type v0_type,
296  int parent_particle_id,
297  int first_daughter_id, /* give only positive charge */
298  int second_daughter_id, /* give only positive charge */
300  const reco::SimToRecoCollection& simtorecoCollection) {
301  /* We store the TrackRef of the tracks that have been used to
302  * produce the V0 under consideration here. This is used later to
303  * check if a specific V0 has been really reconstructed or not. The
304  * ordering is based on the key_index of the reference, since it
305  * indeed does not matter that much. */
306 
307  std::set<V0Couple> reconstructed_V0_couples;
308  if (!collection.empty()) {
309  for (reco::VertexCompositeCandidateCollection::const_iterator iCandidate = collection.begin();
310  iCandidate != collection.end();
311  iCandidate++) {
312  reconstructed_V0_couples.insert(
313  V0Couple((dynamic_cast<const reco::RecoChargedCandidate*>(iCandidate->daughter(0)))->track(),
314  (dynamic_cast<const reco::RecoChargedCandidate*>(iCandidate->daughter(1)))->track()));
315  }
316  }
317 
318  /* PSEUDO CODE
319  for v in gen_vertices
320  if v.eventId().BX() !=0 continue
321  if v.nDaughterTracks != 2 continue
322  for source in v.sourceTracks_begin
323  if source is parent_particle_id
324  for daughter in v.daughterTracks_begin
325  if daughter in region_and_kine_cuts
326  decay_found
327  */
328  unsigned int candidateEff[2] = {0, 0};
329  for (auto const& gen_vertex : gen_vertices) {
330  if (gen_vertex.eventId().bunchCrossing() != 0)
331  continue; // Consider only in-time events
332  if (gen_vertex.nDaughterTracks() != 2)
333  continue; // Keep only V0 vertices
334  for (TrackingVertex::tp_iterator source = gen_vertex.sourceTracks_begin(); source != gen_vertex.sourceTracks_end();
335  ++source) {
336  if (std::abs((*source)->pdgId()) == parent_particle_id) {
337  if ((std::abs((gen_vertex.daughterTracks().at(0))->pdgId()) == first_daughter_id &&
338  std::abs((gen_vertex.daughterTracks().at(1))->pdgId()) == second_daughter_id) ||
339  (std::abs((gen_vertex.daughterTracks().at(0))->pdgId()) == second_daughter_id &&
340  std::abs((gen_vertex.daughterTracks().at(1))->pdgId()) == first_daughter_id)) {
341  if ((std::abs((gen_vertex.daughterTracks().at(0))->momentum().eta()) < 2.4 &&
342  gen_vertex.daughterTracks().at(0)->pt() > 0.9) &&
343  (std::abs((gen_vertex.daughterTracks().at(1))->momentum().eta()) < 2.4 &&
344  gen_vertex.daughterTracks().at(1)->pt() > 0.9)) {
345  // found desired generated Candidate
346  float candidateGenpT = sqrt((*source)->momentum().perp2());
347  float candidateGenEta = (*source)->momentum().eta();
348  float candidateGenR = sqrt((*source)->vertex().perp2());
349  candidateEffVsPt_denom_[v0_type]->Fill(candidateGenpT);
350  candidateEffVsEta_denom_[v0_type]->Fill(candidateGenEta);
351  candidateEffVsR_denom_[v0_type]->Fill(candidateGenR);
352 
353  std::array<reco::TrackRef, 2> reco_daughter;
354 
355  for (unsigned int daughter = 0; daughter < 2; ++daughter) {
356  if (simtorecoCollection.find(gen_vertex.daughterTracks()[daughter]) != simtorecoCollection.end()) {
357  if (!simtorecoCollection[gen_vertex.daughterTracks()[daughter]].empty()) {
358  candidateEff[daughter] = 1; // Found a daughter track
359  reco_daughter[daughter] =
360  simtorecoCollection[gen_vertex.daughterTracks()[daughter]].begin()->first.castTo<reco::TrackRef>();
361  }
362  } else {
363  candidateEff[daughter] = 2; // First daughter not found
364  }
365  }
366  if ((candidateEff[0] == 1 && candidateEff[1] == 1) && (reco_daughter[0].key() != reco_daughter[1].key()) &&
367  (reconstructed_V0_couples.find(V0Couple(reco_daughter[0], reco_daughter[1])) !=
368  reconstructed_V0_couples.end())) {
369  candidateEffVsPt_num_[v0_type]->Fill(candidateGenpT);
370  candidateEffVsEta_num_[v0_type]->Fill(candidateGenEta);
371  candidateEffVsR_num_[v0_type]->Fill(candidateGenR);
372  }
373  } // Check that daughters are inside the desired kinematic region
374  } // Check decay products of the current generatex vertex
375  } // Check pdgId of the source of the current generated vertex
376  } // Loop over all sources of the current generated vertex
377  } // Loop over all generated vertices
378 }
379 
381  using std::cout;
382  using std::endl;
383  using namespace edm;
384  using namespace std;
385 
386  // Make matching collections
387  Handle<reco::RecoToSimCollection> recotosimCollectionH;
388  iEvent.getByToken(recoRecoToSimCollectionToken_, recotosimCollectionH);
389 
390  Handle<reco::SimToRecoCollection> simtorecoCollectionH;
391  iEvent.getByToken(recoSimToRecoCollectionToken_, simtorecoCollectionH);
392 
393  // Get Monte Carlo information
395  iEvent.getByToken(trackingVertexCollection_Token_, TVCollectionH);
396 
397  // Select the primary vertex, create a new reco::Vertex to hold it
398  edm::Handle<std::vector<reco::Vertex> > primaryVtxCollectionH;
399  iEvent.getByToken(vec_recoVertex_Token_, primaryVtxCollectionH);
400 
401  std::vector<reco::Vertex>::const_iterator iVtxPH = primaryVtxCollectionH->begin();
402  for (std::vector<reco::Vertex>::const_iterator iVtx = primaryVtxCollectionH->begin();
403  iVtx < primaryVtxCollectionH->end();
404  iVtx++) {
405  if (primaryVtxCollectionH->size() > 1) {
406  if (iVtx->tracksSize() > iVtxPH->tracksSize()) {
407  iVtxPH = iVtx;
408  }
409  } else
410  iVtxPH = iVtx;
411  }
412 
413  // get the V0s;
418 
419  // Do fake rate and efficiency calculation
420 
421  // Get gen vertex collection out of the event, as done in the Vertex
422  // validation package!!!
423  if (k0sCollection.isValid()) {
424  doFakeRates(*k0sCollection.product(), *recotosimCollectionH.product(), V0Type::KSHORT, 310, 3122);
425  doEfficiencies(*TVCollectionH.product(),
426  V0Type::KSHORT,
427  310,
428  211,
429  211,
430  *k0sCollection.product(),
431  *simtorecoCollectionH.product());
432  }
433  if (lambdaCollection.isValid()) {
434  doFakeRates(*lambdaCollection.product(), *recotosimCollectionH.product(), V0Type::LAMBDA, 3122, 310);
435  doEfficiencies(*TVCollectionH.product(),
436  V0Type::LAMBDA,
437  3122,
438  211,
439  2212,
440  *lambdaCollection.product(),
441  *simtorecoCollectionH.product());
442  }
443 }
444 
445 // define this as a plug-in
446 // DEFINE_FWK_MODULE(V0Validator);
unsigned int size_type
Definition: View.h:92
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: V0Validator.cc:45
std::vector< VertexCompositeCandidate > VertexCompositeCandidateCollection
collection of Candidate objects
edm::EDGetTokenT< reco::SimToRecoCollection > recoSimToRecoCollectionToken_
Definition: V0Validator.h:145
V0Validator(const edm::ParameterSet &)
Definition: V0Validator.cc:27
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > recoVertexCompositeCandidateCollection_k0s_Token_
Definition: V0Validator.h:148
std::array< MonitorElement *, 2 > candidateStatus_
Definition: V0Validator.h:136
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
edm::RefVector< edm::HepMCProduct, HepMC::GenParticle > GenParticleRefVector
Definition: V0Validator.cc:25
std::array< MonitorElement *, 2 > candidateEffVsEta_num_
Definition: V0Validator.h:116
std::array< MonitorElement *, 2 > candidateFakeVsEta_num_
Definition: V0Validator.h:122
T const * product() const
Definition: Handle.h:70
edm::AssociationMap< edm::OneToManyWithQualityGeneric< CaloParticleCollection, reco::CaloClusterCollection, std::pair< float, float > > > SimToRecoCollection
std::array< MonitorElement *, 2 > candidateFakeVsR_denom_
Definition: V0Validator.h:128
std::array< MonitorElement *, 2 > goodCandidateMass
Definition: V0Validator.h:140
std::array< MonitorElement *, 2 > candidateTkEffVsPt_num_
Definition: V0Validator.h:120
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
std::array< MonitorElement *, 2 > fakeCandidateMass_
Definition: V0Validator.h:137
std::array< MonitorElement *, 2 > candidateEffVsPt_num_
Definition: V0Validator.h:117
std::array< MonitorElement *, 2 > candidateEffVsR_denom_
Definition: V0Validator.h:131
std::array< MonitorElement *, 2 > candidateFakeVsR_num_
Definition: V0Validator.h:121
bool empty() const
return true if empty
const_iterator find(const key_type &k) const
find element with specified reference key
std::array< MonitorElement *, 2 > candidateFakeDauRadDist_
Definition: V0Validator.h:138
std::array< MonitorElement *, 2 > candidateTkFakeVsEta_num_
Definition: V0Validator.h:125
std::array< MonitorElement *, 2 > candidateTkEffVsEta_num_
Definition: V0Validator.h:119
const_iterator end() const
last iterator over the map (read only)
edm::Ref< TrackingVertexCollection > TrackingVertexRef
Definition: V0Validator.cc:23
edm::AssociationMap< edm::OneToManyWithQualityGeneric< reco::CaloClusterCollection, CaloParticleCollection, float > > RecoToSimCollection
int iEvent
Definition: GenABIO.cc:224
std::array< MonitorElement *, 2 > candidateTkEffVsR_num_
Definition: V0Validator.h:118
T sqrt(T t)
Definition: SSEVec.h:23
~V0Validator() override
Definition: V0Validator.cc:43
std::array< MonitorElement *, 2 > candidateFakeVsPt_num_
Definition: V0Validator.h:123
std::array< MonitorElement *, 2 > candidateTkFakeVsR_num_
Definition: V0Validator.h:124
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexCollection_Token_
Definition: V0Validator.h:146
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: V0Validator.cc:380
std::array< MonitorElement *, 2 > candidateTkFakeVsPt_num_
Definition: V0Validator.h:126
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< std::vector< reco::Vertex > > vec_recoVertex_Token_
Definition: V0Validator.h:147
std::array< MonitorElement *, 2 > nCandidates_
Definition: V0Validator.h:135
void doFakeRates(const reco::VertexCompositeCandidateCollection &collection, const reco::RecoToSimCollection &recotosimCollection, V0Type t, int particle_pdgid, int misreconstructed_particle_pdgid)
Definition: V0Validator.cc:172
std::array< MonitorElement *, 2 > candidateFakeVsPt_denom_
Definition: V0Validator.h:130
std::vector< TrackingVertex > TrackingVertexCollection
edm::RefVector< edm::HepMCProduct, HepMC::GenVertex > GenVertexRefVector
Definition: V0Validator.cc:24
std::array< MonitorElement *, 2 > candidateFakeVsEta_denom_
Definition: V0Validator.h:129
bool isValid() const
Definition: HandleBase.h:70
const_iterator begin() const
first iterator over the map (read only)
fixed size matrix
HLT enums.
std::array< MonitorElement *, 2 > candidateEffVsPt_denom_
Definition: V0Validator.h:133
std::array< MonitorElement *, 2 > candidateMassAll
Definition: V0Validator.h:139
edm::EDGetTokenT< reco::RecoToSimCollection > recoRecoToSimCollectionToken_
Definition: V0Validator.h:144
edm::EDGetTokenT< reco::VertexCompositeCandidateCollection > recoVertexCompositeCandidateCollection_lambda_Token_
Definition: V0Validator.h:148
std::array< MonitorElement *, 2 > candidateEffVsR_num_
Definition: V0Validator.h:115
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
std::array< MonitorElement *, 2 > candidateEffVsEta_denom_
Definition: V0Validator.h:132
std::string dirName
Definition: V0Validator.h:143
void doEfficiencies(const TrackingVertexCollection &gen_vertices, V0Type t, int parent_particle_id, int first_daughter_id, int second_daughter_id, const reco::VertexCompositeCandidateCollection &collection, const reco::SimToRecoCollection &simtorecoCollection)
Definition: V0Validator.cc:294
static std::string const source
Definition: EdmProvDump.cc:49
Definition: Run.h:45
std::vector< TrackingVertex > TrackingVertexCollection
Definition: V0Validator.cc:22