File indexing completed on 2024-04-06 12:25:09
0001 #include "PhysicsTools/SelectorUtils/interface/CutApplicatorBase.h"
0002 #include "DataFormats/EgammaCandidates/interface/Photon.h"
0003
0004 template <bool isBC>
0005 class PhotonHcalOverEcalCut : public CutApplicatorBase {
0006 public:
0007 PhotonHcalOverEcalCut(const edm::ParameterSet& c)
0008 : CutApplicatorBase(c),
0009 _hcalOverEcalCutValueEB(c.getParameter<double>("hcalOverEcalCutValueEB")),
0010 _hcalOverEcalCutValueEE(c.getParameter<double>("hcalOverEcalCutValueEE")),
0011 _barrelCutOff(c.getParameter<double>("barrelCutOff")) {}
0012
0013 result_type operator()(const reco::PhotonPtr&) const final;
0014
0015 double value(const reco::CandidatePtr& cand) const final;
0016
0017 CandidateType candidateType() const final { return PHOTON; }
0018
0019 private:
0020 const float _hcalOverEcalCutValueEB, _hcalOverEcalCutValueEE, _barrelCutOff;
0021 };
0022
0023 DEFINE_EDM_PLUGIN(CutApplicatorFactory, PhotonHcalOverEcalCut<false>, "PhotonHcalOverEcalCut");
0024 DEFINE_EDM_PLUGIN(CutApplicatorFactory, PhotonHcalOverEcalCut<true>, "PhotonHcalOverEcalBcCut");
0025
0026 template <bool isBC>
0027 CutApplicatorBase::result_type PhotonHcalOverEcalCut<isBC>::operator()(const reco::PhotonPtr& cand) const {
0028 const float hcalOverEcalCutValue =
0029 (std::abs(cand->superCluster()->eta()) < _barrelCutOff ? _hcalOverEcalCutValueEB : _hcalOverEcalCutValueEE);
0030
0031 if constexpr (isBC)
0032 return cand->hcalOverEcalBc() < hcalOverEcalCutValue;
0033 else
0034 return cand->hcalOverEcal() < hcalOverEcalCutValue;
0035 }
0036
0037 template <bool isBC>
0038 double PhotonHcalOverEcalCut<isBC>::value(const reco::CandidatePtr& cand) const {
0039 reco::PhotonPtr pho(cand);
0040 if constexpr (isBC)
0041 return pho->hcalOverEcalBc();
0042 else
0043 return pho->hcalOverEcal();
0044 }