Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
#include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
#include "FWCore/Utilities/interface/Exception.h"

using namespace reco;

RecoCandidate::~RecoCandidate() {}

RecoCandidate* RecoCandidate::clone() const {
  throw cms::Exception("LogicError", "reco::RecoCandidate is abstract, so it's clone() method can't be implemented.\n");
}

TrackRef RecoCandidate::track() const { return TrackRef(); }

TrackRef RecoCandidate::track(size_t) const { return TrackRef(); }

size_t RecoCandidate::numberOfTracks() const { return 0; }

GsfTrackRef RecoCandidate::gsfTrack() const { return GsfTrackRef(); }

TrackRef RecoCandidate::standAloneMuon() const { return TrackRef(); }

TrackRef RecoCandidate::combinedMuon() const { return TrackRef(); }

SuperClusterRef RecoCandidate::superCluster() const { return SuperClusterRef(); }

CaloTowerRef RecoCandidate::caloTower() const { return CaloTowerRef(); }

const Track* RecoCandidate::bestTrack() const {
  TrackRef muRef = combinedMuon();
  if (muRef.isNonnull())
    return muRef.get();
  TrackRef trkRef = track();
  if (trkRef.isNonnull())
    return trkRef.get();
  GsfTrackRef gsfTrkRef = gsfTrack();
  if (gsfTrkRef.isNonnull())
    return gsfTrkRef.get();
  TrackRef staRef = standAloneMuon();
  if (staRef.isNonnull())
    return staRef.get();
  return nullptr;
}

TrackBaseRef RecoCandidate::bestTrackRef() const {
  TrackRef muRef = combinedMuon();
  if (muRef.isNonnull())
    return TrackBaseRef(muRef);
  TrackRef trkRef = track();
  if (trkRef.isNonnull())
    return TrackBaseRef(trkRef);
  GsfTrackRef gsfTrkRef = gsfTrack();
  if (gsfTrkRef.isNonnull())
    return TrackBaseRef(gsfTrkRef);
  TrackRef staRef = standAloneMuon();
  if (staRef.isNonnull())
    return TrackBaseRef(staRef);
  return TrackBaseRef();
}

RecoCandidate::TrackType RecoCandidate::bestTrackType() const {
  if (combinedMuon().isNonnull())
    return recoTrackType;
  if (track().isNonnull())
    return recoTrackType;
  if (gsfTrack().isNonnull())
    return gsfTrackType;
  return noTrackType;
}

float RecoCandidate::dzError() const {
  const Track* tr = bestTrack();
  if (tr != nullptr)
    return tr->dzError();
  else
    return 0;
}
float RecoCandidate::dxyError() const {
  const Track* tr = bestTrack();
  if (tr != nullptr)
    return tr->dxyError();
  else
    return 0;
}