test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
BPHTrackReference.h
Go to the documentation of this file.
1 #ifndef HeavyFlavorAnalysis_RecoDecay_BPHTrackReference_h
2 #define HeavyFlavorAnalysis_RecoDecay_BPHTrackReference_h
3 
13 //----------------------
14 // Base Class Headers --
15 //----------------------
16 
17 
18 //------------------------------------
19 // Collaborating Class Declarations --
20 //------------------------------------
28 
29 //---------------
30 // C++ Headers --
31 //---------------
32 #include <iostream>
33 
34 // ---------------------
35 // -- Class Interface --
36 // ---------------------
37 
39 
40  public:
41 
43 
47 
51 
54  static const reco::Track* getTrack( const reco::Candidate& rc,
69  const char* modeList = "cfhbpmnigse" ) {
70  if ( rc.charge() == 0 ) return 0;
71  const char* mptr = modeList;
72  char mode;
73  const reco::Track* tkp = 0;
74  while ( ( mode = *mptr++ ) ) {
75  switch ( mode ) {
76  case 'c': if ( ( tkp = getFromRC( rc ) ) != 0 ) return tkp; break;
77  case 'f': if ( ( tkp = getFromPF( rc ) ) != 0 ) return tkp; break;
78  case 'h': if ( ( tkp = getFromGP( rc ) ) != 0 ) return tkp; break;
79  case 'b': if ( ( tkp = getFromBT( rc ) ) != 0 ) return tkp; break;
80  case 'p': if ( ( tkp = getFromPC( rc ) ) != 0 ) return tkp; break;
81  case 'm': if ( ( tkp = getMuonPF( rc ) ) != 0 ) return tkp; break;
82  case 'n': if ( ( tkp = getMuonBT( rc ) ) != 0 ) return tkp; break;
83  case 'i': if ( ( tkp = getMuonIT( rc ) ) != 0 ) return tkp; break;
84  case 'g': if ( ( tkp = getMuonGT( rc ) ) != 0 ) return tkp; break;
85  case 's': if ( ( tkp = getMuonSA( rc ) ) != 0 ) return tkp; break;
86  case 'e': if ( ( tkp = getElecPF( rc ) ) != 0 ) return tkp; break;
87  }
88  }
89  return 0;
90  }
91 
92  static const reco::Track* getFromRC( const reco::Candidate& rc ) {
93 // std::cout << "getFromRC" << std::endl;
94  try {
95  const reco::TrackRef& tkr = rc.get<reco::TrackRef>();
96  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
97  }
98  catch ( edm::Exception e ) {
99  }
100  return 0;
101  }
102  static const reco::Track* getFromPF( const reco::Candidate& rc ) {
103 // std::cout << "getFromPF" << std::endl;
104  const reco::PFCandidate* pf =
105  dynamic_cast<const reco::PFCandidate*>( &rc );
106  if ( pf == 0 ) return 0;
107  try {
108  const reco::TrackRef& tkr = pf->trackRef();
109  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
110  }
111  catch ( edm::Exception e ) {
112  }
113  return 0;
114  }
115  static const reco::Track* getFromGP( const reco::Candidate& rc ) {
116 // std::cout << "getFromGC" << std::endl;
117  const pat::GenericParticle* gp =
118  dynamic_cast<const pat::GenericParticle*>( &rc );
119  if ( gp == 0 ) return 0;
120  try {
121  const reco::TrackRef& tkr = gp->track();
122  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
123  }
124  catch ( edm::Exception e ) {
125  }
126  return 0;
127  }
128  static const reco::Track* getFromBT( const reco::Candidate& rc ) {
129 // std::cout << "getFromBT" << std::endl;
130  try {
131  const reco::Track* trk = rc.bestTrack();
132  return trk;
133  }
134  catch ( edm::Exception e ) {
135  }
136  return 0;
137  }
138  static const reco::Track* getFromPC( const reco::Candidate& rc ) {
139 // std::cout << "getFromPC" << std::endl;
140  const pat::PackedCandidate* pp =
141  dynamic_cast<const pat::PackedCandidate*>( &rc );
142  if ( pp == 0 ) return 0;
143  try {
144  const reco::Track* trk = &pp->pseudoTrack();
145  return trk;
146  }
147  catch ( edm::Exception e ) {
148  }
149  return 0;
150  }
151  static const reco::Track* getMuonPF( const reco::Candidate& rc ) {
152 // std::cout << "getMuonPF" << std::endl;
153  const pat::Muon* mu = dynamic_cast<const pat::Muon*>( &rc );
154  if ( mu == 0 ) return 0;
155  return getMuonPF( mu );
156  }
157  static const reco::Track* getMuonPF( const pat::Muon* mu ) {
158  try {
159  const reco::PFCandidateRef& pcr = mu->pfCandidateRef();
160  if ( pcr.isNonnull() && pcr.isAvailable() ) {
161  const reco::TrackRef& tkr = pcr->trackRef();
162  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
163  }
164  }
165  catch ( edm::Exception e ) {
166  }
167  return 0;
168  }
169  static const reco::Track* getMuonBT( const reco::Candidate& rc ) {
170 // std::cout << "getMuonBT" << std::endl;
171  const reco::Muon* mu = dynamic_cast<const reco::Muon*>( &rc );
172  if ( mu == 0 ) return 0;
173  return getMuonBT( mu );
174  }
175  static const reco::Track* getMuonBT( const reco::Muon* mu ) {
176  try {
177  const reco::TrackRef& tkr = mu->muonBestTrack();
178  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
179  }
180  catch ( edm::Exception e ) {
181  }
182  return 0;
183  }
184  static const reco::Track* getMuonIT( const reco::Candidate& rc ) {
185 // std::cout << "getMuonIT" << std::endl;
186  const pat::Muon* mu = dynamic_cast<const pat::Muon*>( &rc );
187  if ( mu == 0 ) return 0;
188  return getMuonIT( mu );
189  }
190  static const reco::Track* getMuonIT( const pat::Muon* mu ) {
191  if ( !mu->isTrackerMuon() ) return 0;
192  try {
193  const reco::TrackRef& mit = mu->innerTrack();
194  if ( mit.isNonnull() && mit.isAvailable() ) return mit.get();
195  }
196  catch ( edm::Exception e ) {
197  }
198  return 0;
199  }
200  static const reco::Track* getMuonGT( const reco::Candidate& rc ) {
201 // std::cout << "getMuonGT" << std::endl;
202  const pat::Muon* mu = dynamic_cast<const pat::Muon*>( &rc );
203  if ( mu == 0 ) return 0;
204  return getMuonGT( mu );
205  }
206  static const reco::Track* getMuonGT( const pat::Muon* mu ) {
207  if ( !mu->isGlobalMuon() ) return 0;
208  try {
209  const reco::TrackRef& mgt = mu->globalTrack();
210  if ( mgt.isNonnull() && mgt.isAvailable() ) return mgt.get();
211  }
212  catch ( edm::Exception e ) {
213  }
214  return 0;
215  }
216  static const reco::Track* getMuonSA( const reco::Candidate& rc ) {
217 // std::cout << "getMuonGT" << std::endl;
218  const pat::Muon* mu = dynamic_cast<const pat::Muon*>( &rc );
219  if ( mu == 0 ) return 0;
220  return getMuonSA( mu );
221  }
222  static const reco::Track* getMuonSA( const pat::Muon* mu ) {
223  if ( !mu->isStandAloneMuon() ) return 0;
224  try {
225  const reco::TrackRef& msa = mu->standAloneMuon();
226  if ( msa.isNonnull() && msa.isAvailable() ) return msa.get();
227  }
228  catch ( edm::Exception e ) {
229  }
230  return 0;
231  }
232  static const reco::Track* getElecPF( const reco::Candidate& rc ) {
233 // std::cout << "getElecPF" << std::endl;
234  const pat::Electron* el = dynamic_cast<const pat::Electron*>( &rc );
235  if ( el == 0 ) return 0;
236  return getElecPF( el );
237  }
238  static const reco::Track* getElecPF( const pat::Electron* el ) {
239  try {
240  const reco::PFCandidateRef& pcr = el->pfCandidateRef();
241  if ( pcr.isNonnull() && pcr.isAvailable() ) {
242  const reco::TrackRef& tkr = pcr->trackRef();
243  if ( tkr.isNonnull() && tkr.isAvailable() ) return tkr.get();
244  }
245  }
246  catch ( edm::Exception e ) {
247  }
248  return 0;
249  }
250 
251  private:
252 
253  // private copy and assigment constructors
256 
257 };
258 
259 
260 #endif
261 
static const reco::Track * getMuonPF(const reco::Candidate &rc)
bool isAvailable() const
Definition: Ref.h:576
static const reco::Track * getFromPF(const reco::Candidate &rc)
reco::TrackRef innerTrack() const
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
Definition: Muon.h:72
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
static const reco::Track * getMuonSA(const reco::Candidate &rc)
static const reco::Track * getMuonGT(const pat::Muon *mu)
tuple pp
Definition: createTree.py:15
virtual const Track * bestTrack() const
Definition: Candidate.h:247
bool isTrackerMuon() const
Definition: Muon.h:226
bool isGlobalMuon() const
Definition: Muon.h:225
static const reco::Track * getMuonIT(const pat::Muon *mu)
bool isStandAloneMuon() const
Definition: Muon.h:227
pat::PackedCandidate candidate
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:438
static const reco::Track * getFromRC(const reco::Candidate &rc)
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
reco::TrackRef standAloneMuon() const
reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
virtual TrackRef muonBestTrack() const
Definition: Muon.h:63
static const reco::Track * getMuonPF(const pat::Muon *mu)
reco::PFCandidateRef pfCandidateRef() const
reference to the source PFCandidates; null if this has been built from a standard electron ...
static const reco::Track * getMuonIT(const reco::Candidate &rc)
static const reco::Track * getMuonGT(const reco::Candidate &rc)
reco::PFCandidateRef pfCandidateRef() const
static const reco::Track * getMuonSA(const pat::Muon *mu)
virtual const reco::Track & pseudoTrack() const
Return reference to a pseudo track made with candidate kinematics, parameterized error for eta...
virtual int charge() const =0
electric charge
virtual reco::TrackRef track() const
const int mu
Definition: Constants.h:22
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
reco::TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector (reimplemented from reco::Muon) ...
Definition: Muon.h:80
static const reco::Track * getMuonBT(const reco::Muon *mu)
Analysis-level electron class.
Definition: Electron.h:52
static const reco::Track * getElecPF(const reco::Candidate &rc)
static const reco::Track * getTrack(const reco::Candidate &rc, const char *modeList="cfhbpmnigse")
BPHTrackReference & operator=(const BPHTrackReference &x)
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:39
T get() const
get a component
Definition: Candidate.h:217
static const reco::Track * getFromPC(const reco::Candidate &rc)
static const reco::Track * getElecPF(const pat::Electron *el)
Analysis-level muon class.
Definition: Muon.h:49
static const reco::Track * getFromGP(const reco::Candidate &rc)
static const reco::Track * getMuonBT(const reco::Candidate &rc)
static const reco::Track * getFromBT(const reco::Candidate &rc)