File indexing completed on 2024-04-06 12:05:08
0001 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
0002 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004
0005 using namespace reco;
0006
0007 RecoCandidate::~RecoCandidate() {}
0008
0009 RecoCandidate* RecoCandidate::clone() const {
0010 throw cms::Exception("LogicError", "reco::RecoCandidate is abstract, so it's clone() method can't be implemented.\n");
0011 }
0012
0013 TrackRef RecoCandidate::track() const { return TrackRef(); }
0014
0015 TrackRef RecoCandidate::track(size_t) const { return TrackRef(); }
0016
0017 size_t RecoCandidate::numberOfTracks() const { return 0; }
0018
0019 GsfTrackRef RecoCandidate::gsfTrack() const { return GsfTrackRef(); }
0020
0021 TrackRef RecoCandidate::standAloneMuon() const { return TrackRef(); }
0022
0023 TrackRef RecoCandidate::combinedMuon() const { return TrackRef(); }
0024
0025 SuperClusterRef RecoCandidate::superCluster() const { return SuperClusterRef(); }
0026
0027 CaloTowerRef RecoCandidate::caloTower() const { return CaloTowerRef(); }
0028
0029 const Track* RecoCandidate::bestTrack() const {
0030 TrackRef muRef = combinedMuon();
0031 if (muRef.isNonnull())
0032 return muRef.get();
0033 TrackRef trkRef = track();
0034 if (trkRef.isNonnull())
0035 return trkRef.get();
0036 GsfTrackRef gsfTrkRef = gsfTrack();
0037 if (gsfTrkRef.isNonnull())
0038 return gsfTrkRef.get();
0039 TrackRef staRef = standAloneMuon();
0040 if (staRef.isNonnull())
0041 return staRef.get();
0042 return nullptr;
0043 }
0044
0045 TrackBaseRef RecoCandidate::bestTrackRef() const {
0046 TrackRef muRef = combinedMuon();
0047 if (muRef.isNonnull())
0048 return TrackBaseRef(muRef);
0049 TrackRef trkRef = track();
0050 if (trkRef.isNonnull())
0051 return TrackBaseRef(trkRef);
0052 GsfTrackRef gsfTrkRef = gsfTrack();
0053 if (gsfTrkRef.isNonnull())
0054 return TrackBaseRef(gsfTrkRef);
0055 TrackRef staRef = standAloneMuon();
0056 if (staRef.isNonnull())
0057 return TrackBaseRef(staRef);
0058 return TrackBaseRef();
0059 }
0060
0061 RecoCandidate::TrackType RecoCandidate::bestTrackType() const {
0062 if (combinedMuon().isNonnull())
0063 return recoTrackType;
0064 if (track().isNonnull())
0065 return recoTrackType;
0066 if (gsfTrack().isNonnull())
0067 return gsfTrackType;
0068 return noTrackType;
0069 }
0070
0071 float RecoCandidate::dzError() const {
0072 const Track* tr = bestTrack();
0073 if (tr != nullptr)
0074 return tr->dzError();
0075 else
0076 return 0;
0077 }
0078 float RecoCandidate::dxyError() const {
0079 const Track* tr = bestTrack();
0080 if (tr != nullptr)
0081 return tr->dxyError();
0082 else
0083 return 0;
0084 }