File indexing completed on 2023-03-17 11:17:43
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h"
0010 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTrackSelector.h"
0011
0012 PhotonTkIsolation::PhotonTkIsolation(float extRadius,
0013 float intRadiusBarrel,
0014 float intRadiusEndcap,
0015 float stripBarrel,
0016 float stripEndcap,
0017 float etLow,
0018 float lip,
0019 float drb,
0020 const reco::TrackCollection* trackCollection,
0021 reco::TrackBase::Point beamPoint,
0022 const std::string& dzOptionString)
0023 : extRadius2_(extRadius * extRadius),
0024 intRadiusBarrel2_(intRadiusBarrel * intRadiusBarrel),
0025 intRadiusEndcap2_(intRadiusEndcap * intRadiusEndcap),
0026 stripBarrel_(stripBarrel),
0027 stripEndcap_(stripEndcap),
0028 etLow_(etLow),
0029 lip_(lip),
0030 drb_(drb),
0031 trackCollection_(trackCollection),
0032 beamPoint_(beamPoint) {
0033 setDzOption(dzOptionString);
0034 }
0035
0036 void PhotonTkIsolation::setDzOption(const std::string& s) {
0037 if (!s.compare("dz"))
0038 dzOption_ = egammaisolation::EgammaTrackSelector::dz;
0039 else if (!s.compare("vz"))
0040 dzOption_ = egammaisolation::EgammaTrackSelector::vz;
0041 else if (!s.compare("bs"))
0042 dzOption_ = egammaisolation::EgammaTrackSelector::bs;
0043 else if (!s.compare("vtx"))
0044 dzOption_ = egammaisolation::EgammaTrackSelector::vtx;
0045 else
0046 dzOption_ = egammaisolation::EgammaTrackSelector::dz;
0047 }
0048
0049 PhotonTkIsolation::~PhotonTkIsolation() {}
0050
0051
0052 std::pair<int, float> PhotonTkIsolation::getIso(const reco::Candidate* photon) const {
0053 int counter = 0;
0054 float ptSum = 0.;
0055
0056
0057 float photonEta = photon->eta();
0058
0059
0060 for (reco::TrackCollection::const_iterator trItr = trackCollection_->begin(); trItr != trackCollection_->end();
0061 ++trItr) {
0062
0063 float dzCut = 0;
0064 switch (dzOption_) {
0065 case egammaisolation::EgammaTrackSelector::dz:
0066 dzCut = fabs((*trItr).dz() - photon->vertex().z());
0067 break;
0068 case egammaisolation::EgammaTrackSelector::vz:
0069 dzCut = fabs((*trItr).vz() - photon->vertex().z());
0070 break;
0071 case egammaisolation::EgammaTrackSelector::bs:
0072 dzCut = fabs((*trItr).dz(beamPoint_) - photon->vertex().z());
0073 break;
0074 case egammaisolation::EgammaTrackSelector::vtx:
0075 dzCut = fabs((*trItr).dz(photon->vertex()));
0076 break;
0077 default:
0078 dzCut = fabs((*trItr).vz() - photon->vertex().z());
0079 break;
0080 }
0081 if (dzCut > lip_)
0082 continue;
0083
0084 float this_pt = (*trItr).pt();
0085 if (this_pt < etLow_)
0086 continue;
0087 if (fabs((*trItr).dxy(beamPoint_)) > drb_)
0088 continue;
0089 float dr2 = reco::deltaR2(*trItr, *photon);
0090 float deta = (*trItr).eta() - photonEta;
0091 if (fabs(photonEta) < 1.479) {
0092 if (dr2 < extRadius2_ && dr2 >= intRadiusBarrel2_ && fabs(deta) >= stripBarrel_) {
0093 ++counter;
0094 ptSum += this_pt;
0095 }
0096 } else {
0097 if (dr2 < extRadius2_ && dr2 >= intRadiusEndcap2_ && fabs(deta) >= stripEndcap_) {
0098 ++counter;
0099 ptSum += this_pt;
0100 }
0101 }
0102
0103 }
0104
0105 std::pair<int, float> retval;
0106 retval.first = counter;
0107 retval.second = ptSum;
0108 return retval;
0109 }