CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
Onia2MuMuPAT Class Reference

#include <Onia2MuMuPAT.h>

Inheritance diagram for Onia2MuMuPAT:
edm::stream::EDProducer<>

Public Member Functions

 Onia2MuMuPAT (const edm::ParameterSet &)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 

Private Member Functions

std::pair< int, float > findJpsiMCInfo (reco::GenParticleRef genJpsi) const
 
bool isAbHadron (int pdgID) const
 
bool isAMixedbHadron (int pdgID, int momPdgID) const
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

bool addCommonVertex_
 
bool addMCTruth_
 
bool addMuonlessPrimaryVertex_
 
StringCutObjectSelector< reco::Candidate, true > dimuonSelection_
 
StringCutObjectSelector< pat::MuonhigherPuritySelection_
 
StringCutObjectSelector< pat::MuonlowerPuritySelection_
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagneticFieldToken_
 
InvariantMassFromVertex massCalculator
 
edm::EDGetTokenT< edm::View< pat::Muon > > muons_
 
bool resolveAmbiguity_
 
edm::EDGetTokenT< reco::BeamSpotrevtxbs_
 
edm::EDGetTokenT< reco::TrackCollectionrevtxtrks_
 
edm::EDGetTokenT< reco::BeamSpotthebeamspot_
 
edm::EDGetTokenT< reco::VertexCollectionthePVs_
 
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecordtheTTBuilderToken_
 
GreaterByVProb< pat::CompositeCandidatevPComparator_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 39 of file Onia2MuMuPAT.h.

Constructor & Destructor Documentation

◆ Onia2MuMuPAT()

Onia2MuMuPAT::Onia2MuMuPAT ( const edm::ParameterSet iConfig)
explicit

Definition at line 26 of file Onia2MuMuPAT.cc.

27  : muons_(consumes<edm::View<pat::Muon>>(iConfig.getParameter<edm::InputTag>("muons"))),
28  thebeamspot_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpotTag"))),
29  thePVs_(consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("primaryVertexTag"))),
30  magneticFieldToken_(esConsumes<MagneticField, IdealMagneticFieldRecord>()),
32  esConsumes<TransientTrackBuilder, TransientTrackRecord>(edm::ESInputTag("", "TransientTrackBuilder"))),
33  higherPuritySelection_(iConfig.getParameter<std::string>("higherPuritySelection")),
34  lowerPuritySelection_(iConfig.getParameter<std::string>("lowerPuritySelection")),
35  dimuonSelection_(iConfig.getParameter<std::string>("dimuonSelection")),
36  addCommonVertex_(iConfig.getParameter<bool>("addCommonVertex")),
37  addMuonlessPrimaryVertex_(iConfig.getParameter<bool>("addMuonlessPrimaryVertex")),
38  resolveAmbiguity_(iConfig.getParameter<bool>("resolvePileUpAmbiguity")),
39  addMCTruth_(iConfig.getParameter<bool>("addMCTruth")) {
40  revtxtrks_ = consumes<reco::TrackCollection>(
41  (edm::InputTag) "generalTracks"); //if that is not true, we will raise an exception
42  revtxbs_ = consumes<reco::BeamSpot>((edm::InputTag) "offlineBeamSpot");
43  produces<pat::CompositeCandidateCollection>();
44 }

References revtxbs_, and revtxtrks_.

Member Function Documentation

◆ fillDescriptions()

void Onia2MuMuPAT::fillDescriptions ( edm::ConfigurationDescriptions iDescriptions)
static

Definition at line 486 of file Onia2MuMuPAT.cc.

486  {
488  desc.add<edm::InputTag>("muons");
489  desc.add<edm::InputTag>("beamSpotTag");
490  desc.add<edm::InputTag>("primaryVertexTag");
491  desc.add<std::string>("higherPuritySelection");
492  desc.add<std::string>("lowerPuritySelection");
493  desc.add<std::string>("dimuonSelection", "");
494  desc.add<bool>("addCommonVertex");
495  desc.add<bool>("addMuonlessPrimaryVertex");
496  desc.add<bool>("resolvePileUpAmbiguity");
497  desc.add<bool>("addMCTruth");
498 
499  iDescriptions.addDefault(desc);
500 }

References edm::ConfigurationDescriptions::addDefault(), submitPVResolutionJobs::desc, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ findJpsiMCInfo()

std::pair< int, float > Onia2MuMuPAT::findJpsiMCInfo ( reco::GenParticleRef  genJpsi) const
private

Definition at line 430 of file Onia2MuMuPAT.cc.

430  {
431  int momJpsiID = 0;
432  float trueLife = -99.;
433 
434  if (genJpsi->numberOfMothers() > 0) {
435  TVector3 trueVtx(0.0, 0.0, 0.0);
436  TVector3 trueP(0.0, 0.0, 0.0);
437  TVector3 trueVtxMom(0.0, 0.0, 0.0);
438 
439  trueVtx.SetXYZ(genJpsi->vertex().x(), genJpsi->vertex().y(), genJpsi->vertex().z());
440  trueP.SetXYZ(genJpsi->momentum().x(), genJpsi->momentum().y(), genJpsi->momentum().z());
441 
442  bool aBhadron = false;
443  reco::GenParticleRef Jpsimom = genJpsi->motherRef(); // find mothers
444  if (Jpsimom.isNull()) {
445  std::pair<int, float> result = std::make_pair(momJpsiID, trueLife);
446  return result;
447  } else {
448  reco::GenParticleRef Jpsigrandmom = Jpsimom->motherRef();
449  if (isAbHadron(Jpsimom->pdgId())) {
450  if (Jpsigrandmom.isNonnull() && isAMixedbHadron(Jpsimom->pdgId(), Jpsigrandmom->pdgId())) {
451  momJpsiID = Jpsigrandmom->pdgId();
452  trueVtxMom.SetXYZ(Jpsigrandmom->vertex().x(), Jpsigrandmom->vertex().y(), Jpsigrandmom->vertex().z());
453  } else {
454  momJpsiID = Jpsimom->pdgId();
455  trueVtxMom.SetXYZ(Jpsimom->vertex().x(), Jpsimom->vertex().y(), Jpsimom->vertex().z());
456  }
457  aBhadron = true;
458  } else {
459  if (Jpsigrandmom.isNonnull() && isAbHadron(Jpsigrandmom->pdgId())) {
460  reco::GenParticleRef JpsiGrandgrandmom = Jpsigrandmom->motherRef();
461  if (JpsiGrandgrandmom.isNonnull() && isAMixedbHadron(Jpsigrandmom->pdgId(), JpsiGrandgrandmom->pdgId())) {
462  momJpsiID = JpsiGrandgrandmom->pdgId();
463  trueVtxMom.SetXYZ(
464  JpsiGrandgrandmom->vertex().x(), JpsiGrandgrandmom->vertex().y(), JpsiGrandgrandmom->vertex().z());
465  } else {
466  momJpsiID = Jpsigrandmom->pdgId();
467  trueVtxMom.SetXYZ(Jpsigrandmom->vertex().x(), Jpsigrandmom->vertex().y(), Jpsigrandmom->vertex().z());
468  }
469  aBhadron = true;
470  }
471  }
472  if (!aBhadron) {
473  momJpsiID = Jpsimom->pdgId();
474  trueVtxMom.SetXYZ(Jpsimom->vertex().x(), Jpsimom->vertex().y(), Jpsimom->vertex().z());
475  }
476  }
477 
478  TVector3 vdiff = trueVtx - trueVtxMom;
479  //trueLife = vdiff.Perp()*3.09688/trueP.Perp();
480  trueLife = vdiff.Perp() * genJpsi->mass() / trueP.Perp();
481  }
482  std::pair<int, float> result = std::make_pair(momJpsiID, trueLife);
483  return result;
484 }

References isAbHadron(), isAMixedbHadron(), edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::isNull(), and mps_fire::result.

Referenced by produce().

◆ isAbHadron()

bool Onia2MuMuPAT::isAbHadron ( int  pdgID) const
private

Definition at line 417 of file Onia2MuMuPAT.cc.

417  {
418  if (abs(pdgID) == 511 || abs(pdgID) == 521 || abs(pdgID) == 531 || abs(pdgID) == 5122)
419  return true;
420  return false;
421 }

References funct::abs().

Referenced by findJpsiMCInfo().

◆ isAMixedbHadron()

bool Onia2MuMuPAT::isAMixedbHadron ( int  pdgID,
int  momPdgID 
) const
private

Definition at line 423 of file Onia2MuMuPAT.cc.

423  {
424  if ((abs(pdgID) == 511 && abs(momPdgID) == 511 && pdgID * momPdgID < 0) ||
425  (abs(pdgID) == 531 && abs(momPdgID) == 531 && pdgID * momPdgID < 0))
426  return true;
427  return false;
428 }

References funct::abs().

Referenced by findJpsiMCInfo().

◆ produce()

void Onia2MuMuPAT::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

DCA

end DCA

Definition at line 51 of file Onia2MuMuPAT.cc.

51  {
52  using namespace edm;
53  using namespace std;
54  using namespace reco;
56 
57  vector<double> muMasses;
58  muMasses.push_back(0.1056583715);
59  muMasses.push_back(0.1056583715);
60 
61  std::unique_ptr<pat::CompositeCandidateCollection> oniaOutput(new pat::CompositeCandidateCollection);
62 
63  Vertex thePrimaryV;
64  Vertex theBeamSpotV;
65 
66  const MagneticField &field = iSetup.getData(magneticFieldToken_);
67 
68  Handle<BeamSpot> theBeamSpot;
69  iEvent.getByToken(thebeamspot_, theBeamSpot);
70  BeamSpot bs = *theBeamSpot;
71  theBeamSpotV = Vertex(bs.position(), bs.covariance3D());
72 
74  iEvent.getByToken(thePVs_, priVtxs);
75  if (priVtxs->begin() != priVtxs->end()) {
76  thePrimaryV = Vertex(*(priVtxs->begin()));
77  } else {
78  thePrimaryV = Vertex(bs.position(), bs.covariance3D());
79  }
80 
82  iEvent.getByToken(muons_, muons);
83 
85  KalmanVertexFitter vtxFitter(true);
86  TrackCollection muonLess;
87 
88  // JPsi candidates only from muons
89  for (View<pat::Muon>::const_iterator it = muons->begin(), itend = muons->end(); it != itend; ++it) {
90  // both must pass low quality
91  if (!lowerPuritySelection_(*it))
92  continue;
93  for (View<pat::Muon>::const_iterator it2 = it + 1; it2 != itend; ++it2) {
94  // both must pass low quality
95  if (!lowerPuritySelection_(*it2))
96  continue;
97  // one must pass tight quality
99  continue;
100 
102  vector<TransientVertex> pvs;
103 
104  // ---- no explicit order defined ----
105  myCand.addDaughter(*it, "muon1");
106  myCand.addDaughter(*it2, "muon2");
107 
108  // ---- define and set candidate's 4momentum ----
109  LorentzVector jpsi = it->p4() + it2->p4();
110  myCand.setP4(jpsi);
111  myCand.setCharge(it->charge() + it2->charge());
112 
113  // ---- apply the dimuon cut ----
114  if (!dimuonSelection_(myCand))
115  continue;
116 
117  // ---- fit vertex using Tracker tracks (if they have tracks) ----
118  if (it->track().isNonnull() && it2->track().isNonnull()) {
119  //build the dimuon secondary vertex
120  vector<TransientTrack> t_tks;
121  t_tks.push_back(theTTBuilder->build(
122  *it->track())); // pass the reco::Track, not the reco::TrackRef (which can be transient)
123  t_tks.push_back(theTTBuilder->build(*it2->track())); // otherwise the vertex will have transient refs inside.
124  TransientVertex myVertex = vtxFitter.vertex(t_tks);
125 
126  CachingVertex<5> VtxForInvMass = vtxFitter.vertex(t_tks);
127 
128  Measurement1D MassWErr(jpsi.M(), -9999.);
129  if (field.nominalValue() > 0) {
130  MassWErr = massCalculator.invariantMass(VtxForInvMass, muMasses);
131  } else {
132  myVertex = TransientVertex(); // with no arguments it is invalid
133  }
134 
135  myCand.addUserFloat("MassErr", MassWErr.error());
136 
137  if (myVertex.isValid()) {
138  float vChi2 = myVertex.totalChiSquared();
139  float vNDF = myVertex.degreesOfFreedom();
140  float vProb(TMath::Prob(vChi2, (int)vNDF));
141 
142  myCand.addUserFloat("vNChi2", vChi2 / vNDF);
143  myCand.addUserFloat("vProb", vProb);
144 
145  TVector3 vtx;
146  TVector3 pvtx;
147  VertexDistanceXY vdistXY;
148 
149  vtx.SetXYZ(myVertex.position().x(), myVertex.position().y(), 0);
150  TVector3 pperp(jpsi.px(), jpsi.py(), 0);
151  AlgebraicVector3 vpperp(pperp.x(), pperp.y(), 0);
152 
153  if (resolveAmbiguity_) {
154  float minDz = 999999.;
156  bool status = ttmd.calculate(
158  GlobalPoint(myVertex.position().x(), myVertex.position().y(), myVertex.position().z()),
159  GlobalVector(myCand.px(), myCand.py(), myCand.pz()),
160  TrackCharge(0),
161  &(field)),
162  GlobalTrajectoryParameters(GlobalPoint(bs.position().x(), bs.position().y(), bs.position().z()),
163  GlobalVector(bs.dxdz(), bs.dydz(), 1.),
164  TrackCharge(0),
165  &(field)));
166  float extrapZ = -9E20;
167  if (status)
168  extrapZ = ttmd.points().first.z();
169 
170  for (VertexCollection::const_iterator itv = priVtxs->begin(), itvend = priVtxs->end(); itv != itvend;
171  ++itv) {
172  float deltaZ = fabs(extrapZ - itv->position().z());
173  if (deltaZ < minDz) {
174  minDz = deltaZ;
175  thePrimaryV = Vertex(*itv);
176  }
177  }
178  }
179 
180  Vertex theOriginalPV = thePrimaryV;
181 
182  muonLess.clear();
183  muonLess.reserve(thePrimaryV.tracksSize());
184  if (addMuonlessPrimaryVertex_ && thePrimaryV.tracksSize() > 2) {
185  // Primary vertex matched to the dimuon, now refit it removing the two muons
186  OniaVtxReProducer revertex(priVtxs, iEvent);
188  iEvent.getByToken(revtxtrks_, pvtracks);
189  if (!pvtracks.isValid()) {
190  std::cout << "pvtracks NOT valid " << std::endl;
191  } else {
192  edm::Handle<reco::BeamSpot> pvbeamspot;
193  iEvent.getByToken(revtxbs_, pvbeamspot);
194  if (pvbeamspot.id() != theBeamSpot.id())
195  edm::LogWarning("Inconsistency")
196  << "The BeamSpot used for PV reco is not the same used in this analyzer.";
197  // I need to go back to the reco::Muon object, as the TrackRef in the pat::Muon can be an embedded ref.
198  const reco::Muon *rmu1 = dynamic_cast<const reco::Muon *>(it->originalObject());
199  const reco::Muon *rmu2 = dynamic_cast<const reco::Muon *>(it2->originalObject());
200  // check that muons are truly from reco::Muons (and not, e.g., from PF Muons)
201  // also check that the tracks really come from the track collection used for the BS
202  if (rmu1 != nullptr && rmu2 != nullptr && rmu1->track().id() == pvtracks.id() &&
203  rmu2->track().id() == pvtracks.id()) {
204  // Save the keys of the tracks in the primary vertex
205  // std::vector<size_t> vertexTracksKeys;
206  // vertexTracksKeys.reserve(thePrimaryV.tracksSize());
207  if (thePrimaryV.hasRefittedTracks()) {
208  // Need to go back to the original tracks before taking the key
209  std::vector<reco::Track>::const_iterator itRefittedTrack = thePrimaryV.refittedTracks().begin();
210  std::vector<reco::Track>::const_iterator refittedTracksEnd = thePrimaryV.refittedTracks().end();
211  for (; itRefittedTrack != refittedTracksEnd; ++itRefittedTrack) {
212  if (thePrimaryV.originalTrack(*itRefittedTrack).key() == rmu1->track().key())
213  continue;
214  if (thePrimaryV.originalTrack(*itRefittedTrack).key() == rmu2->track().key())
215  continue;
216  // vertexTracksKeys.push_back(thePrimaryV.originalTrack(*itRefittedTrack).key());
217  muonLess.push_back(*(thePrimaryV.originalTrack(*itRefittedTrack)));
218  }
219  } else {
220  std::vector<reco::TrackBaseRef>::const_iterator itPVtrack = thePrimaryV.tracks_begin();
221  for (; itPVtrack != thePrimaryV.tracks_end(); ++itPVtrack)
222  if (itPVtrack->isNonnull()) {
223  if (itPVtrack->key() == rmu1->track().key())
224  continue;
225  if (itPVtrack->key() == rmu2->track().key())
226  continue;
227  // vertexTracksKeys.push_back(itPVtrack->key());
228  muonLess.push_back(**itPVtrack);
229  }
230  }
231  if (muonLess.size() > 1 && muonLess.size() < thePrimaryV.tracksSize()) {
232  pvs = revertex.makeVertices(muonLess, *pvbeamspot, *theTTBuilder);
233  if (!pvs.empty()) {
234  Vertex muonLessPV = Vertex(pvs.front());
235  thePrimaryV = muonLessPV;
236  }
237  }
238  }
239  }
240  }
241 
242  // count the number of high Purity tracks with pT > 900 MeV attached to the chosen vertex
243  double vertexWeight = -1., sumPTPV = -1.;
244  int countTksOfPV = -1;
245  const reco::Muon *rmu1 = dynamic_cast<const reco::Muon *>(it->originalObject());
246  const reco::Muon *rmu2 = dynamic_cast<const reco::Muon *>(it2->originalObject());
247  try {
248  for (reco::Vertex::trackRef_iterator itVtx = theOriginalPV.tracks_begin();
249  itVtx != theOriginalPV.tracks_end();
250  itVtx++)
251  if (itVtx->isNonnull()) {
252  const reco::Track &track = **itVtx;
253  if (!track.quality(reco::TrackBase::highPurity))
254  continue;
255  if (track.pt() < 0.5)
256  continue; //reject all rejects from counting if less than 900 MeV
257  TransientTrack tt = theTTBuilder->build(track);
258  pair<bool, Measurement1D> tkPVdist = IPTools::absoluteImpactParameter3D(tt, thePrimaryV);
259  if (!tkPVdist.first)
260  continue;
261  if (tkPVdist.second.significance() > 3)
262  continue;
263  if (track.ptError() / track.pt() > 0.1)
264  continue;
265  // do not count the two muons
266  if (rmu1 != nullptr && rmu1->innerTrack().key() == itVtx->key())
267  continue;
268  if (rmu2 != nullptr && rmu2->innerTrack().key() == itVtx->key())
269  continue;
270 
271  vertexWeight += theOriginalPV.trackWeight(*itVtx);
272  if (theOriginalPV.trackWeight(*itVtx) > 0.5) {
273  countTksOfPV++;
274  sumPTPV += track.pt();
275  }
276  }
277  } catch (std::exception &err) {
278  std::cout << " muon Selection%G�%@failed " << std::endl;
279  return;
280  }
281 
282  myCand.addUserInt("countTksOfPV", countTksOfPV);
283  myCand.addUserFloat("vertexWeight", (float)vertexWeight);
284  myCand.addUserFloat("sumPTPV", (float)sumPTPV);
285 
287  TrajectoryStateClosestToPoint mu1TS = t_tks[0].impactPointTSCP();
288  TrajectoryStateClosestToPoint mu2TS = t_tks[1].impactPointTSCP();
289  float dca = 1E20;
290  if (mu1TS.isValid() && mu2TS.isValid()) {
292  cApp.calculate(mu1TS.theState(), mu2TS.theState());
293  if (cApp.status())
294  dca = cApp.distance();
295  }
296  myCand.addUserFloat("DCA", dca);
298 
300  myCand.addUserData("muonlessPV", Vertex(thePrimaryV));
301  else
302  myCand.addUserData("PVwithmuons", thePrimaryV);
303 
304  // lifetime using PV
305  pvtx.SetXYZ(thePrimaryV.position().x(), thePrimaryV.position().y(), 0);
306  TVector3 vdiff = vtx - pvtx;
307  double cosAlpha = vdiff.Dot(pperp) / (vdiff.Perp() * pperp.Perp());
308  Measurement1D distXY = vdistXY.distance(Vertex(myVertex), thePrimaryV);
309  //double ctauPV = distXY.value()*cosAlpha*3.09688/pperp.Perp();
310  double ctauPV = distXY.value() * cosAlpha * myCand.mass() / pperp.Perp();
311  GlobalError v1e = (Vertex(myVertex)).error();
312  GlobalError v2e = thePrimaryV.error();
313  AlgebraicSymMatrix33 vXYe = v1e.matrix() + v2e.matrix();
314  //double ctauErrPV = sqrt(vXYe.similarity(vpperp))*3.09688/(pperp.Perp2());
315  double ctauErrPV = sqrt(ROOT::Math::Similarity(vpperp, vXYe)) * myCand.mass() / (pperp.Perp2());
316 
317  myCand.addUserFloat("ppdlPV", ctauPV);
318  myCand.addUserFloat("ppdlErrPV", ctauErrPV);
319  myCand.addUserFloat("cosAlpha", cosAlpha);
320 
321  // lifetime using BS
322  pvtx.SetXYZ(theBeamSpotV.position().x(), theBeamSpotV.position().y(), 0);
323  vdiff = vtx - pvtx;
324  cosAlpha = vdiff.Dot(pperp) / (vdiff.Perp() * pperp.Perp());
325  distXY = vdistXY.distance(Vertex(myVertex), theBeamSpotV);
326  //double ctauBS = distXY.value()*cosAlpha*3.09688/pperp.Perp();
327  double ctauBS = distXY.value() * cosAlpha * myCand.mass() / pperp.Perp();
328  GlobalError v1eB = (Vertex(myVertex)).error();
329  GlobalError v2eB = theBeamSpotV.error();
330  AlgebraicSymMatrix33 vXYeB = v1eB.matrix() + v2eB.matrix();
331  //double ctauErrBS = sqrt(vXYeB.similarity(vpperp))*3.09688/(pperp.Perp2());
332  double ctauErrBS = sqrt(ROOT::Math::Similarity(vpperp, vXYeB)) * myCand.mass() / (pperp.Perp2());
333 
334  myCand.addUserFloat("ppdlBS", ctauBS);
335  myCand.addUserFloat("ppdlErrBS", ctauErrBS);
336 
337  if (addCommonVertex_) {
338  myCand.addUserData("commonVertex", Vertex(myVertex));
339  }
340  } else {
341  myCand.addUserFloat("vNChi2", -1);
342  myCand.addUserFloat("vProb", -1);
343  myCand.addUserFloat("ppdlPV", -100);
344  myCand.addUserFloat("ppdlErrPV", -100);
345  myCand.addUserFloat("cosAlpha", -100);
346  myCand.addUserFloat("ppdlBS", -100);
347  myCand.addUserFloat("ppdlErrBS", -100);
348  myCand.addUserFloat("DCA", -1);
349  if (addCommonVertex_) {
350  myCand.addUserData("commonVertex", Vertex());
351  }
353  myCand.addUserData("muonlessPV", Vertex());
354  } else {
355  myCand.addUserData("PVwithmuons", Vertex());
356  }
357  }
358  }
359 
360  // ---- MC Truth, if enabled ----
361  if (addMCTruth_) {
362  reco::GenParticleRef genMu1 = it->genParticleRef();
363  reco::GenParticleRef genMu2 = it2->genParticleRef();
364  if (genMu1.isNonnull() && genMu2.isNonnull()) {
365  if (genMu1->numberOfMothers() > 0 && genMu2->numberOfMothers() > 0) {
366  reco::GenParticleRef mom1 = genMu1->motherRef();
367  reco::GenParticleRef mom2 = genMu2->motherRef();
368  if (mom1.isNonnull() && (mom1 == mom2)) {
369  myCand.setGenParticleRef(mom1); // set
370  myCand.embedGenParticle(); // and embed
371  std::pair<int, float> MCinfo = findJpsiMCInfo(mom1);
372  myCand.addUserInt("momPDGId", MCinfo.first);
373  myCand.addUserFloat("ppdlTrue", MCinfo.second);
374  } else {
375  myCand.addUserInt("momPDGId", 0);
376  myCand.addUserFloat("ppdlTrue", -99.);
377  }
378  } else {
381  consumes<reco::GenParticleCollection>((edm::InputTag) "genParticles");
382  iEvent.getByToken(genCands_, theGenParticles);
383  if (theGenParticles.isValid()) {
384  for (size_t iGenParticle = 0; iGenParticle < theGenParticles->size(); ++iGenParticle) {
385  const Candidate &genCand = (*theGenParticles)[iGenParticle];
386  if (genCand.pdgId() == 443 || genCand.pdgId() == 100443 || genCand.pdgId() == 553 ||
387  genCand.pdgId() == 100553 || genCand.pdgId() == 200553) {
388  reco::GenParticleRef mom1(theGenParticles, iGenParticle);
389  myCand.setGenParticleRef(mom1);
390  myCand.embedGenParticle();
391  std::pair<int, float> MCinfo = findJpsiMCInfo(mom1);
392  myCand.addUserInt("momPDGId", MCinfo.first);
393  myCand.addUserFloat("ppdlTrue", MCinfo.second);
394  }
395  }
396  } else {
397  myCand.addUserInt("momPDGId", 0);
398  myCand.addUserFloat("ppdlTrue", -99.);
399  }
400  }
401  } else {
402  myCand.addUserInt("momPDGId", 0);
403  myCand.addUserFloat("ppdlTrue", -99.);
404  }
405  }
406 
407  // ---- Push back output ----
408  oniaOutput->push_back(myCand);
409  }
410  }
411 
412  std::sort(oniaOutput->begin(), oniaOutput->end(), vPComparator_);
413 
414  iEvent.put(std::move(oniaOutput));
415 }

References IPTools::absoluteImpactParameter3D(), addCommonVertex_, reco::CompositeCandidate::addDaughter(), addMCTruth_, addMuonlessPrimaryVertex_, pat::PATObject< ObjectType >::addUserData(), pat::PATObject< ObjectType >::addUserFloat(), pat::PATObject< ObjectType >::addUserInt(), align::BeamSpot, cms::cuda::bs, TransientTrackBuilder::build(), TwoTrackMinimumDistance::calculate(), ClosestApproachInRPhi::calculate(), gather_cfg::cout, dimuonSelection_, VertexDistanceXY::distance(), ClosestApproachInRPhi::distance(), pat::PATObject< ObjectType >::embedGenParticle(), submitPVResolutionJobs::err, Measurement1D::error(), relativeConstraints::error, reco::Vertex::error(), cppFunctionSkipper::exception, findJpsiMCInfo(), edm::EventSetup::getData(), edm::EventSetup::getHandle(), reco::Vertex::hasRefittedTracks(), higherPuritySelection_, reco::TrackBase::highPurity, edm::ProductID::id(), edm::HandleBase::id(), edm::Ref< C, T, F >::id(), iEvent, reco::Muon::innerTrack(), InvariantMassFromVertex::invariantMass(), edm::Ref< C, T, F >::isNonnull(), edm::HandleBase::isValid(), TrajectoryStateClosestToPoint::isValid(), TransientVertex::isValid(), jpsi, edm::RefToBase< T >::key(), edm::Ref< C, T, F >::key(), lowerPuritySelection_, magneticFieldToken_, OniaVtxReProducer::makeVertices(), reco::LeafCandidate::mass(), massCalculator, GlobalErrorBase< T, ErrorWeightType >::matrix(), pfMETCorrectionType0_cfi::minDz, eostools::move(), PDWG_BPHSkim_cff::muons, muons_, MagneticField::nominalValue(), reco::Vertex::originalTrack(), reco::Candidate::pdgId(), TwoTrackMinimumDistance::points(), reco::Vertex::position(), TransientVertex::position(), FSQDQM_cfi::pvs, reco::LeafCandidate::px(), reco::LeafCandidate::py(), reco::LeafCandidate::pz(), reco::Vertex::refittedTracks(), resolveAmbiguity_, revtxbs_, revtxtrks_, reco::LeafCandidate::setCharge(), pat::PATObject< ObjectType >::setGenParticleRef(), reco::LeafCandidate::setP4(), jetUpdater_cfi::sort, mathSSE::sqrt(), ClosestApproachInRPhi::status(), mps_update::status, thebeamspot_, thePVs_, TrajectoryStateClosestToPoint::theState(), theTTBuilderToken_, reco::Muon::track(), HLT_FULL_cff::track, reco::Vertex::tracks_begin(), reco::Vertex::tracks_end(), reco::Vertex::tracksSize(), reco::Vertex::trackWeight(), groupFilesInBlocks::tt, Measurement1D::value(), HltBtagValidation_cff::Vertex, KalmanVertexFitter::vertex(), vPComparator_, extraflags_cff::vtx, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Member Data Documentation

◆ addCommonVertex_

bool Onia2MuMuPAT::addCommonVertex_
private

Definition at line 63 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ addMCTruth_

bool Onia2MuMuPAT::addMCTruth_
private

Definition at line 65 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ addMuonlessPrimaryVertex_

bool Onia2MuMuPAT::addMuonlessPrimaryVertex_
private

Definition at line 63 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ dimuonSelection_

StringCutObjectSelector<reco::Candidate, true> Onia2MuMuPAT::dimuonSelection_
private

Definition at line 62 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ higherPuritySelection_

StringCutObjectSelector<pat::Muon> Onia2MuMuPAT::higherPuritySelection_
private

Definition at line 60 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ lowerPuritySelection_

StringCutObjectSelector<pat::Muon> Onia2MuMuPAT::lowerPuritySelection_
private

Definition at line 61 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ magneticFieldToken_

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> Onia2MuMuPAT::magneticFieldToken_
private

Definition at line 58 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ massCalculator

InvariantMassFromVertex Onia2MuMuPAT::massCalculator
private

Definition at line 68 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ muons_

edm::EDGetTokenT<edm::View<pat::Muon> > Onia2MuMuPAT::muons_
private

Definition at line 53 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ resolveAmbiguity_

bool Onia2MuMuPAT::resolveAmbiguity_
private

Definition at line 64 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ revtxbs_

edm::EDGetTokenT<reco::BeamSpot> Onia2MuMuPAT::revtxbs_
private

Definition at line 57 of file Onia2MuMuPAT.h.

Referenced by Onia2MuMuPAT(), and produce().

◆ revtxtrks_

edm::EDGetTokenT<reco::TrackCollection> Onia2MuMuPAT::revtxtrks_
private

Definition at line 56 of file Onia2MuMuPAT.h.

Referenced by Onia2MuMuPAT(), and produce().

◆ thebeamspot_

edm::EDGetTokenT<reco::BeamSpot> Onia2MuMuPAT::thebeamspot_
private

Definition at line 54 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ thePVs_

edm::EDGetTokenT<reco::VertexCollection> Onia2MuMuPAT::thePVs_
private

Definition at line 55 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ theTTBuilderToken_

edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> Onia2MuMuPAT::theTTBuilderToken_
private

Definition at line 59 of file Onia2MuMuPAT.h.

Referenced by produce().

◆ vPComparator_

GreaterByVProb<pat::CompositeCandidate> Onia2MuMuPAT::vPComparator_
private

Definition at line 66 of file Onia2MuMuPAT.h.

Referenced by produce().

reco::Vertex::trackRef_iterator
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
Definition: Vertex.h:38
PDWG_BPHSkim_cff.muons
muons
Definition: PDWG_BPHSkim_cff.py:47
reco::Vertex::originalTrack
TrackBaseRef originalTrack(const Track &refTrack) const
Definition: Vertex.cc:96
AlgebraicVector3
ROOT::Math::SVector< double, 3 > AlgebraicVector3
Definition: AlgebraicROOTObjects.h:12
Measurement1D
Definition: Measurement1D.h:11
AlgebraicSymMatrix33
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
Definition: AlgebraicROOTObjects.h:21
edm::ESInputTag
Definition: ESInputTag.h:87
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
Onia2MuMuPAT::thebeamspot_
edm::EDGetTokenT< reco::BeamSpot > thebeamspot_
Definition: Onia2MuMuPAT.h:54
TrackCharge
int TrackCharge
Definition: TrackCharge.h:4
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
ClosestApproachInRPhi::status
bool status() const override
Definition: ClosestApproachInRPhi.h:37
edm::RefToBase::key
size_t key() const
Definition: RefToBase.h:219
TransientVertex::isValid
bool isValid() const
Definition: TransientVertex.h:195
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
mps_update.status
status
Definition: mps_update.py:69
CachingVertex< 5 >
edm::EDGetTokenT< reco::GenParticleCollection >
edm::Ref::isNull
bool isNull() const
Checks for null.
Definition: Ref.h:235
pat::CompositeCandidate
Analysis-level particle class.
Definition: CompositeCandidate.h:31
edm
HLT enums.
Definition: AlignableModifier.h:19
Measurement1D::value
double value() const
Definition: Measurement1D.h:25
IPTools::absoluteImpactParameter3D
std::pair< bool, Measurement1D > absoluteImpactParameter3D(const reco::TransientTrack &transientTrack, const reco::Vertex &vertex)
Definition: IPTools.cc:38
gather_cfg.cout
cout
Definition: gather_cfg.py:144
TwoTrackMinimumDistance
Definition: TwoTrackMinimumDistance.h:20
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
pat::CompositeCandidateCollection
std::vector< CompositeCandidate > CompositeCandidateCollection
Definition: CompositeCandidate.h:22
TransientVertex::position
GlobalPoint position() const
Definition: TransientVertex.h:169
reco::Vertex::position
const Point & position() const
position
Definition: Vertex.h:114
pat::PATObject::addUserInt
void addUserInt(const std::string &label, int32_t data, const bool overwrite=false)
Set user-defined int.
Definition: PATObject.h:929
GlobalErrorBase::matrix
const AlgebraicSymMatrix33 matrix() const
Definition: GlobalErrorBase.h:121
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
GlobalVector
Global3DVector GlobalVector
Definition: GlobalVector.h:10
edm::Handle
Definition: AssociativeIterator.h:50
relativeConstraints.error
error
Definition: relativeConstraints.py:53
reco::Muon
Definition: Muon.h:27
Onia2MuMuPAT::findJpsiMCInfo
std::pair< int, float > findJpsiMCInfo(reco::GenParticleRef genJpsi) const
Definition: Onia2MuMuPAT.cc:430
edm::Ref< GenParticleCollection >
TwoTrackMinimumDistance::calculate
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
Definition: TwoTrackMinimumDistance.cc:83
Onia2MuMuPAT::vPComparator_
GreaterByVProb< pat::CompositeCandidate > vPComparator_
Definition: Onia2MuMuPAT.h:66
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
Onia2MuMuPAT::isAMixedbHadron
bool isAMixedbHadron(int pdgID, int momPdgID) const
Definition: Onia2MuMuPAT.cc:423
cms::cuda::bs
bs
Definition: HistoContainer.h:127
ClosestApproachInRPhi::calculate
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
Definition: ClosestApproachInRPhi.cc:8
reco::LeafCandidate::py
double py() const final
y coordinate of momentum vector
Definition: LeafCandidate.h:142
pat::PATObject::addUserData
void addUserData(const std::string &label, const T &data, bool transientOnly=false, bool overwrite=false)
Definition: PATObject.h:348
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
reco::Vertex::tracks_end
trackRef_iterator tracks_end() const
last iterator over tracks
Definition: Vertex.cc:73
reco::BeamSpot
Definition: BeamSpot.h:21
reco::Track
Definition: Track.h:27
edm::ESHandle< TransientTrackBuilder >
MagneticField::nominalValue
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:49
ClosestApproachInRPhi
Definition: ClosestApproachInRPhi.h:26
Onia2MuMuPAT::isAbHadron
bool isAbHadron(int pdgID) const
Definition: Onia2MuMuPAT.cc:417
GlobalTrajectoryParameters
Definition: GlobalTrajectoryParameters.h:15
Onia2MuMuPAT::theTTBuilderToken_
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > theTTBuilderToken_
Definition: Onia2MuMuPAT.h:59
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
InvariantMassFromVertex::invariantMass
Measurement1D invariantMass(const CachingVertex< 5 > &vertex, const std::vector< double > &masses) const
Definition: InvariantMassFromVertex.cc:57
reco::CompositeCandidate::addDaughter
void addDaughter(const Candidate &, const std::string &s="")
add a clone of the passed candidate as daughter
Definition: CompositeCandidate.cc:108
reco::Vertex::refittedTracks
const std::vector< Track > & refittedTracks() const
Returns the container of refitted tracks.
Definition: Vertex.h:183
Onia2MuMuPAT::revtxbs_
edm::EDGetTokenT< reco::BeamSpot > revtxbs_
Definition: Onia2MuMuPAT.h:57
reco::Vertex::hasRefittedTracks
bool hasRefittedTracks() const
Checks whether refitted tracks are stored.
Definition: Vertex.h:168
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
TwoTrackMinimumDistance::points
std::pair< GlobalPoint, GlobalPoint > points() const override
Definition: TwoTrackMinimumDistance.cc:75
cppFunctionSkipper.exception
exception
Definition: cppFunctionSkipper.py:10
edm::View
Definition: CaloClusterFwd.h:14
reco::LeafCandidate::mass
double mass() const final
mass
Definition: LeafCandidate.h:131
Onia2MuMuPAT::muons_
edm::EDGetTokenT< edm::View< pat::Muon > > muons_
Definition: Onia2MuMuPAT.h:53
Onia2MuMuPAT::revtxtrks_
edm::EDGetTokenT< reco::TrackCollection > revtxtrks_
Definition: Onia2MuMuPAT.h:56
Onia2MuMuPAT::higherPuritySelection_
StringCutObjectSelector< pat::Muon > higherPuritySelection_
Definition: Onia2MuMuPAT.h:60
reco::Vertex::tracks_begin
trackRef_iterator tracks_begin() const
first iterator over tracks
Definition: Vertex.cc:71
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
Onia2MuMuPAT::lowerPuritySelection_
StringCutObjectSelector< pat::Muon > lowerPuritySelection_
Definition: Onia2MuMuPAT.h:61
reco::Vertex::tracksSize
size_t tracksSize() const
number of tracks
Definition: Vertex.cc:69
iEvent
int iEvent
Definition: GenABIO.cc:224
jpsi
#define jpsi
Definition: CascadeWrapper.h:46
pat::PATObject::addUserFloat
void addUserFloat(const std::string &label, float data, const bool overwrite=false)
Set user-defined float.
Definition: PATObject.h:892
reco::Vertex::error
Error error() const
return SMatrix
Definition: Vertex.h:150
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
GlobalErrorBase< double, ErrorMatrixTag >
TransientVertex
Definition: TransientVertex.h:18
TrajectoryStateClosestToPoint
Definition: TrajectoryStateClosestToPoint.h:18
VertexDistanceXY
Definition: VertexDistanceXY.h:11
pat::PATObject::setGenParticleRef
void setGenParticleRef(const reco::GenParticleRef &ref, bool embed=false)
Set the generator level particle reference.
Definition: PATObject.h:743
submitPVResolutionJobs.err
err
Definition: submitPVResolutionJobs.py:85
FSQDQM_cfi.pvs
pvs
Definition: FSQDQM_cfi.py:12
reco::Candidate::pdgId
virtual int pdgId() const =0
PDG identifier.
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
reco::Candidate
Definition: Candidate.h:27
reco::JetExtendedAssociation::LorentzVector
math::PtEtaPhiELorentzVectorF LorentzVector
Definition: JetExtendedAssociation.h:25
reco::Muon::track
TrackRef track() const override
reference to a Track
Definition: Muon.h:46
reco::Vertex::trackWeight
float trackWeight(const TREF &r) const
returns the weight with which a Track has contributed to the vertex-fit.
Definition: Vertex.h:85
reco::Muon::innerTrack
virtual TrackRef innerTrack() const
Definition: Muon.h:45
edm::Ref::id
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
reco::LeafCandidate::setP4
void setP4(const LorentzVector &p4) final
set 4-momentum
Definition: LeafCandidate.h:158
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
reco::TransientTrack
Definition: TransientTrack.h:19
VertexDistanceXY::distance
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
Definition: VertexDistanceXY.cc:19
extraflags_cff.vtx
vtx
Definition: extraflags_cff.py:18
Onia2MuMuPAT::resolveAmbiguity_
bool resolveAmbiguity_
Definition: Onia2MuMuPAT.h:64
LorentzVector
math::XYZTLorentzVector LorentzVector
Definition: HLTMuonMatchAndPlot.h:49
reco::LeafCandidate::setCharge
void setCharge(Charge q) final
set electric charge
Definition: LeafCandidate.h:108
Onia2MuMuPAT::dimuonSelection_
StringCutObjectSelector< reco::Candidate, true > dimuonSelection_
Definition: Onia2MuMuPAT.h:62
OniaVtxReProducer
Definition: OniaVtxReProducer.h:15
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
TrajectoryStateClosestToPoint::isValid
bool isValid() const
Definition: TrajectoryStateClosestToPoint.h:111
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
TransientTrackBuilder::build
reco::TransientTrack build(const reco::Track *p) const
Definition: TransientTrackBuilder.cc:20
Onia2MuMuPAT::addMuonlessPrimaryVertex_
bool addMuonlessPrimaryVertex_
Definition: Onia2MuMuPAT.h:63
mps_fire.result
result
Definition: mps_fire.py:311
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Onia2MuMuPAT::magneticFieldToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
Definition: Onia2MuMuPAT.h:58
Onia2MuMuPAT::thePVs_
edm::EDGetTokenT< reco::VertexCollection > thePVs_
Definition: Onia2MuMuPAT.h:55
reco::Candidate::LorentzVector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
TrajectoryStateClosestToPoint::theState
const FreeTrajectoryState & theState() const
Definition: TrajectoryStateClosestToPoint.h:96
pat::PATObject::embedGenParticle
void embedGenParticle()
Definition: PATObject.h:768
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
MagneticField
Definition: MagneticField.h:19
edm::Log
Definition: MessageLogger.h:70
ClosestApproachInRPhi::distance
float distance() const override
Definition: ClosestApproachInRPhi.cc:54
reco::LeafCandidate::px
double px() const final
x coordinate of momentum vector
Definition: LeafCandidate.h:140
edm::HandleBase::id
ProductID id() const
Definition: HandleBase.cc:29
reco::LeafCandidate::pz
double pz() const final
z coordinate of momentum vector
Definition: LeafCandidate.h:144
edm::InputTag
Definition: InputTag.h:15
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
reco::Vertex
Definition: Vertex.h:35
Onia2MuMuPAT::massCalculator
InvariantMassFromVertex massCalculator
Definition: Onia2MuMuPAT.h:68
Onia2MuMuPAT::addCommonVertex_
bool addCommonVertex_
Definition: Onia2MuMuPAT.h:63
pfMETCorrectionType0_cfi.minDz
minDz
Definition: pfMETCorrectionType0_cfi.py:52
Onia2MuMuPAT::addMCTruth_
bool addMCTruth_
Definition: Onia2MuMuPAT.h:65
KalmanVertexFitter
Definition: KalmanVertexFitter.h:22
edm::ProductID::id
ProductIndex id() const
Definition: ProductID.h:35
reco::TrackBase::highPurity
Definition: TrackBase.h:154