CMS 3D CMS Logo

Muon.cc
Go to the documentation of this file.
1 //
2 //
3 
8 #include <limits>
9 
10 using namespace pat;
11 
12 
14 Muon::Muon() :
15  Lepton<reco::Muon>(),
16  embeddedMuonBestTrack_(false),
17  embeddedTunePMuonBestTrack_(false),
18  embeddedTrack_(false),
19  embeddedStandAloneMuon_(false),
20  embeddedCombinedMuon_(false),
21  embeddedTCMETMuonCorrs_(false),
22  embeddedCaloMETMuonCorrs_(false),
23  embeddedPickyMuon_(false),
24  embeddedTpfmsMuon_(false),
25  embeddedDytMuon_(false),
26  embeddedPFCandidate_(false),
27  pfCandidateRef_(),
28  cachedNormChi2_(false),
29  normChi2_(0.0),
30  cachedNumberOfValidHits_(false),
31  numberOfValidHits_(0),
32  pfEcalEnergy_(0),
33  jetPtRatio_(0),
34  jetPtRel_(0),
35  mvaValue_(0)
36 {
37  initImpactParameters();
38  initSimInfo();
39 }
40 
42 Muon::Muon(const reco::Muon & aMuon) :
43  Lepton<reco::Muon>(aMuon),
44  embeddedMuonBestTrack_(false),
45  embeddedTunePMuonBestTrack_(false),
46  embeddedTrack_(false),
47  embeddedStandAloneMuon_(false),
48  embeddedCombinedMuon_(false),
49  embeddedTCMETMuonCorrs_(false),
50  embeddedCaloMETMuonCorrs_(false),
51  embeddedPickyMuon_(false),
52  embeddedTpfmsMuon_(false),
53  embeddedDytMuon_(false),
54  embeddedPFCandidate_(false),
55  pfCandidateRef_(),
56  cachedNormChi2_(false),
57  normChi2_(0.0),
58  cachedNumberOfValidHits_(false),
59  numberOfValidHits_(0),
60  pfEcalEnergy_(0),
61  jetPtRatio_(0),
62  jetPtRel_(0),
63  mvaValue_(0)
64 {
65  initImpactParameters();
66  initSimInfo();
67 }
68 
70 Muon::Muon(const edm::RefToBase<reco::Muon> & aMuonRef) :
71  Lepton<reco::Muon>(aMuonRef),
72  embeddedMuonBestTrack_(false),
73  embeddedTunePMuonBestTrack_(false),
74  embeddedTrack_(false),
75  embeddedStandAloneMuon_(false),
76  embeddedCombinedMuon_(false),
77  embeddedTCMETMuonCorrs_(false),
78  embeddedCaloMETMuonCorrs_(false),
79  embeddedPickyMuon_(false),
80  embeddedTpfmsMuon_(false),
81  embeddedDytMuon_(false),
82  embeddedPFCandidate_(false),
83  pfCandidateRef_(),
84  cachedNormChi2_(false),
85  normChi2_(0.0),
86  cachedNumberOfValidHits_(false),
87  numberOfValidHits_(0),
88  pfEcalEnergy_(0),
89  jetPtRatio_(0),
90  jetPtRel_(0),
91  mvaValue_(0)
92 {
93  initImpactParameters();
94  initSimInfo();
95 }
96 
98 Muon::Muon(const edm::Ptr<reco::Muon> & aMuonRef) :
99  Lepton<reco::Muon>(aMuonRef),
100  embeddedMuonBestTrack_(false),
101  embeddedTunePMuonBestTrack_(false),
102  embeddedTrack_(false),
103  embeddedStandAloneMuon_(false),
104  embeddedCombinedMuon_(false),
105  embeddedTCMETMuonCorrs_(false),
106  embeddedCaloMETMuonCorrs_(false),
107  embeddedPickyMuon_(false),
108  embeddedTpfmsMuon_(false),
109  embeddedDytMuon_(false),
110  embeddedPFCandidate_(false),
111  pfCandidateRef_(),
112  cachedNormChi2_(false),
113  normChi2_(0.0),
114  cachedNumberOfValidHits_(false),
115  numberOfValidHits_(0),
116  pfEcalEnergy_(0),
117  jetPtRatio_(0),
118  jetPtRel_(0),
119  mvaValue_(0)
120 {
121  initImpactParameters();
122  initSimInfo();
123 }
124 
126 Muon::~Muon() {
127 }
128 
129 std::ostream&
130 reco::operator<<(std::ostream& out, const pat::Muon& obj)
131 {
132  if(!out) return out;
133 
134  out << "\tpat::Muon: ";
135  out << std::setiosflags(std::ios::right);
136  out << std::setiosflags(std::ios::fixed);
137  out << std::setprecision(3);
138  out << " E/pT/eta/phi "
139  << obj.energy()<<"/"
140  << obj.pt()<<"/"
141  << obj.eta()<<"/"
142  << obj.phi();
143  return out;
144 }
145 
146 // initialize impact parameter container vars
147 void Muon::initImpactParameters() {
148  std::fill(ip_, ip_+IpTypeSize, 0.0f);
149  std::fill(eip_, eip_+IpTypeSize, 0.0f);
150  cachedIP_ = 0;
151 }
152 
153 // initialize impact parameter container vars
154 void Muon::initSimInfo() {
155  simType_ = reco::MuonSimType::Unknown;
157  simFlavour_ = 0;
158  simHeaviestMotherFlavour_ = 0;
159  simPdgId_ = 0;
160  simMotherPdgId_ = 0;
161  simBX_ = 999;
162  simProdRho_ = 0.0;
163  simProdZ_ = 0.0;
164  simPt_ = 0.0;
165  simEta_ = 0.0;
166  simPhi_ = 0.0;
167 }
168 
169 
171 reco::TrackRef Muon::track() const {
172  if (embeddedTrack_) {
173  return reco::TrackRef(&track_, 0);
174  } else {
175  return reco::Muon::innerTrack();
176  }
177 }
178 
179 
182  if (embeddedStandAloneMuon_) {
183  return reco::TrackRef(&standAloneMuon_, 0);
184  } else {
185  return reco::Muon::outerTrack();
186  }
187 }
188 
189 
191 reco::TrackRef Muon::combinedMuon() const {
192  if (embeddedCombinedMuon_) {
193  return reco::TrackRef(&combinedMuon_, 0);
194  } else {
195  return reco::Muon::globalTrack();
196  }
197 }
198 
200 reco::TrackRef Muon::pickyTrack() const {
201  if (embeddedPickyMuon_) {
202  return reco::TrackRef(&pickyMuon_, 0);
203  } else {
204  return reco::Muon::pickyTrack();
205  }
206 }
207 
209 reco::TrackRef Muon::tpfmsTrack() const {
210  if (embeddedTpfmsMuon_) {
211  return reco::TrackRef(&tpfmsMuon_, 0);
212  } else {
213  return reco::Muon::tpfmsTrack();
214  }
215 }
216 
218 reco::TrackRef Muon::dytTrack() const {
219  if (embeddedDytMuon_) {
220  return reco::TrackRef(&dytMuon_, 0);
221  } else {
222  return reco::Muon::dytTrack();
223  }
224 }
225 
227 reco::TrackRef Muon::muonBestTrack() const {
228  if (!muonBestTrack_.empty()) {
229  return reco::TrackRef(&muonBestTrack_, 0);
230  } else {
231  return reco::Muon::muonBestTrack();
232  }
233 }
234 
236 reco::TrackRef Muon::tunePMuonBestTrack() const {
237  if (!tunePMuonBestTrack_.empty()) {
238  return reco::TrackRef(&tunePMuonBestTrack_, 0);
239  } else if (muonBestTrackType() == tunePMuonBestTrackType()) {
240  return muonBestTrack();
241  } else {
243  }
244 }
245 
246 
247 
248 
250 reco::PFCandidateRef Muon::pfCandidateRef() const {
251  if (embeddedPFCandidate_) {
253  } else {
254  return pfCandidateRef_;
255  }
256 }
257 
260  if(pfCandidateRef_.isNonnull() && i==0 ) return reco::CandidatePtr(edm::refToPtr(pfCandidateRef_) );
261  if(refToOrig_.isNonnull() && pfCandidateRef_.isNonnull() && i==1 ) return refToOrig_;
262  if(refToOrig_.isNonnull() && ! pfCandidateRef_.isNonnull() && i==0 ) return refToOrig_;
263  return reco::CandidatePtr();
264 }
265 
267 void Muon::embedMuonBestTrack(bool force) {
268  muonBestTrack_.clear();
269  embeddedMuonBestTrack_ = false;
270  bool alreadyEmbedded = false;
271  if (!force) {
272  switch (muonBestTrackType()) {
273  case None: alreadyEmbedded = true; break;
274  case InnerTrack: if (embeddedTrack_) alreadyEmbedded = true; break;
275  case OuterTrack: if (embeddedStandAloneMuon_) alreadyEmbedded = true; break;
276  case CombinedTrack: if (embeddedCombinedMuon_) alreadyEmbedded = true; break;
277  case TPFMS: if (embeddedTpfmsMuon_) alreadyEmbedded = true; break;
278  case Picky: if (embeddedPickyMuon_) alreadyEmbedded = true; break;
279  case DYT: if (embeddedDytMuon_) alreadyEmbedded = true; break;
280  }
281  }
282  if (force || !alreadyEmbedded) {
283  muonBestTrack_.push_back(*reco::Muon::muonBestTrack());
284  embeddedMuonBestTrack_ = true;
285  }
286 }
287 
290  tunePMuonBestTrack_.clear();
291  bool alreadyEmbedded = false;
292  embeddedTunePMuonBestTrack_ = false;
293  if (!force) {
294  switch (tunePMuonBestTrackType()) {
295  case None: alreadyEmbedded = true; break;
296  case InnerTrack: if (embeddedTrack_) alreadyEmbedded = true; break;
297  case OuterTrack: if (embeddedStandAloneMuon_) alreadyEmbedded = true; break;
298  case CombinedTrack: if (embeddedCombinedMuon_) alreadyEmbedded = true; break;
299  case TPFMS: if (embeddedTpfmsMuon_) alreadyEmbedded = true; break;
300  case Picky: if (embeddedPickyMuon_) alreadyEmbedded = true; break;
301  case DYT: if (embeddedDytMuon_) alreadyEmbedded = true; break;
302  }
303  if (muonBestTrackType() == tunePMuonBestTrackType()) {
304  if (embeddedMuonBestTrack_) alreadyEmbedded = true;
305  }
306  }
307  if (force || !alreadyEmbedded) {
308  tunePMuonBestTrack_.push_back(*reco::Muon::tunePMuonBestTrack());
309  embeddedTunePMuonBestTrack_ = true;
310  }
311 }
312 
313 
315 void Muon::embedTrack() {
316  track_.clear();
317  if (reco::Muon::innerTrack().isNonnull()) {
318  track_.push_back(*reco::Muon::innerTrack());
319  embeddedTrack_ = true;
320  }
321 }
322 
323 
326  standAloneMuon_.clear();
327  if (reco::Muon::outerTrack().isNonnull()) {
328  standAloneMuon_.push_back(*reco::Muon::outerTrack());
329  embeddedStandAloneMuon_ = true;
330  }
331 }
332 
333 
336  combinedMuon_.clear();
337  if (reco::Muon::globalTrack().isNonnull()) {
338  combinedMuon_.push_back(*reco::Muon::globalTrack());
339  embeddedCombinedMuon_ = true;
340  }
341 }
342 
345  caloMETMuonCorrs_.clear();
346  caloMETMuonCorrs_.push_back(t);
347  embeddedCaloMETMuonCorrs_ = true;
348 }
349 
352  tcMETMuonCorrs_.clear();
353  tcMETMuonCorrs_.push_back(t);
354  embeddedTCMETMuonCorrs_ = true;
355 }
356 
358 void Muon::embedPickyMuon() {
359  pickyMuon_.clear();
361  if (tk.isNonnull()) {
362  pickyMuon_.push_back(*tk);
363  embeddedPickyMuon_ = true;
364  }
365 }
366 
368 void Muon::embedTpfmsMuon() {
369  tpfmsMuon_.clear();
371  if (tk.isNonnull()) {
372  tpfmsMuon_.push_back(*tk);
373  embeddedTpfmsMuon_ = true;
374  }
375 }
376 
378 void Muon::embedDytMuon() {
379  dytMuon_.clear();
381  if (tk.isNonnull()) {
382  dytMuon_.push_back(*tk);
383  embeddedDytMuon_ = true;
384  }
385 }
386 
388 void Muon::embedPFCandidate() {
389  pfCandidate_.clear();
390  if ( pfCandidateRef_.isAvailable() && pfCandidateRef_.isNonnull()) {
391  pfCandidate_.push_back( *pfCandidateRef_ );
392  embeddedPFCandidate_ = true;
393  }
394 }
395 
396 bool Muon::muonID(const std::string& name) const {
398  return muon::isGoodMuon(*this, st);
399 }
400 
401 
406 double Muon::normChi2() const {
407  if ( cachedNormChi2_ ) {
408  return normChi2_;
409  } else {
411  return t->chi2() / t->ndof();
412  }
413 }
414 
419 unsigned int Muon::numberOfValidHits() const {
420  if ( cachedNumberOfValidHits_ ) {
421  return numberOfValidHits_;
422  } else {
424  return t->numberOfValidHits();
425  }
426 }
427 
428 // embed various impact parameters with errors
429 // IpType defines the type of the impact parameter
430 double Muon::dB(IpType type_) const {
431  // more IP types (new)
432  if ( cachedIP_ & (1 << int(type_))) {
433  return ip_[type_];
434  } else {
436  }
437 }
438 
439 
440 // embed various impact parameters with errors
441 // IpType defines the type of the impact parameter
442 double Muon::edB(IpType type_) const {
443  // more IP types (new)
444  if ( cachedIP_ & (1 << int(type_))) {
445  return eip_[type_];
446  } else {
448  }
449 }
450 
451 
452 double Muon::segmentCompatibility(reco::Muon::ArbitrationType arbitrationType) const {
453  return muon::segmentCompatibility(*this, arbitrationType);
454 }
455 
456 // Selectors
457 bool Muon::isTightMuon(const reco::Vertex&vtx) const {
458  return muon::isTightMuon(*this, vtx);
459 }
460 
461 bool Muon::isLooseMuon() const {
462  return muon::isLooseMuon(*this);
463 
464 }
465 
466 bool Muon::isMediumMuon() const {
467  return muon::isMediumMuon(*this);
468 
469 }
470 
471 bool Muon::isSoftMuon(const reco::Vertex& vtx) const {
472  return muon::isSoftMuon(*this, vtx);
473 }
474 
475 
476 bool Muon::isHighPtMuon(const reco::Vertex& vtx) const{
477  return muon::isHighPtMuon(*this, vtx);
478 }
479 
embedCombinedMuon
whether to embed in AOD externally stored standalone muon track
embedPFCandidate
embed in AOD externally stored the electron&#39;s pflow preshower clusters
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:253
double eta() const final
momentum pseudorapidity
Ptr< typename C::value_type > refToPtr(Ref< C, typename C::value_type, refhelper::FindUsingAdvance< C, typename C::value_type > > const &ref)
Definition: RefToPtr.h:18
size_t size_type
Definition: Candidate.h:30
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
virtual TrackRef innerTrack() const
Definition: Muon.h:48
CandidatePtr sourceCandidatePtr(size_type i) const override
Definition: LeafCandidate.h:86
embedDytMuon
embed in AOD externally stored TeV-refit TPFMS muon track
~Muon()
Definition: Muon.cc:96
reco::PFCandidatePtr pfCandidate_
double pt() const final
transverse momentum
virtual TrackRef tpfmsTrack() const
Definition: Muon.h:57
bool isLooseMuon(const reco::Muon &)
SelectionType
Selector type.
Definition: MuonSelectors.h:17
Definition: HeavyIon.h:7
embedPickyMuon
embed in AOD externally stored standalone muon track
virtual TrackRef muonBestTrack() const
Definition: Muon.h:63
Muon()
default constructor
std::ostream & operator<<(std::ostream &, BeamSpot beam)
Definition: BeamSpot.cc:71
embedTrack
embed in AOD externally stored particle flow candidate
Definition: Muon.py:1
ArbitrationType
define arbitration schemes
Definition: Muon.h:182
double energy() const final
energy
virtual TrackRef pickyTrack() const
Definition: Muon.h:58
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
double f[11][100]
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:51
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
bool isHighPtMuon(const reco::Muon &, const reco::Vertex &)
static const int muonID
Definition: TopGenEvent.h:20
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
embedTpfmsMuon
embed in AOD externally stored TeV-refit picky muon track
SelectionType selectionTypeFromString(const std::string &label)
Definition: MuonSelectors.cc:9
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
virtual TrackRef dytTrack() const
Definition: Muon.h:59
fixed size matrix
embedStandAloneMuon
whether to embed in AOD externally stored gsf track
embedTunePMuonBestTrack
embed in AOD externally stored muon best track from global pflow
virtual TrackRef tunePMuonBestTrack() const
Definition: Muon.h:65
Definition: Lepton.py:1
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
double phi() const final
momentum azimuthal angle
Analysis-level muon class.
Definition: Muon.h:50
Muon()
Definition: Muon.cc:3
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
Definition: Muon.h:54