File indexing completed on 2023-10-25 09:59:13
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0010 #include "DataFormats/Candidate/interface/CandAssociation.h"
0011 #include "DataFormats/Candidate/interface/Candidate.h"
0012 #include "DataFormats/Common/interface/Handle.h"
0013 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/global/EDProducer.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0017 #include "RecoEgamma/EgammaIsolationAlgos/interface/PhotonTkIsolation.h"
0018
0019 class EgammaPhotonTkNumIsolationProducer : public edm::global::EDProducer<> {
0020 public:
0021 explicit EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet&);
0022
0023 void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override;
0024
0025 private:
0026 const edm::EDGetTokenT<edm::View<reco::Candidate>> photonProducer_;
0027 const edm::EDGetTokenT<reco::TrackCollection> trackProducer_;
0028 const edm::EDGetTokenT<reco::BeamSpot> beamspotProducer_;
0029
0030 const double ptMin_;
0031 const double intRadiusBarrel_;
0032 const double intRadiusEndcap_;
0033 const double stripBarrel_;
0034 const double stripEndcap_;
0035 const double extRadius_;
0036 const double maxVtxDist_;
0037 const double drb_;
0038 };
0039
0040 #include "FWCore/Framework/interface/MakerMacros.h"
0041 DEFINE_FWK_MODULE(EgammaPhotonTkNumIsolationProducer);
0042
0043 EgammaPhotonTkNumIsolationProducer::EgammaPhotonTkNumIsolationProducer(const edm::ParameterSet& config)
0044 :
0045
0046 photonProducer_{consumes(config.getParameter<edm::InputTag>("photonProducer"))},
0047
0048 trackProducer_{consumes(config.getParameter<edm::InputTag>("trackProducer"))},
0049 beamspotProducer_{consumes(config.getParameter<edm::InputTag>("BeamspotProducer"))},
0050
0051 ptMin_(config.getParameter<double>("ptMin")),
0052 intRadiusBarrel_(config.getParameter<double>("intRadiusBarrel")),
0053 intRadiusEndcap_(config.getParameter<double>("intRadiusEndcap")),
0054 stripBarrel_(config.getParameter<double>("stripBarrel")),
0055 stripEndcap_(config.getParameter<double>("stripEndcap")),
0056 extRadius_(config.getParameter<double>("extRadius")),
0057 maxVtxDist_(config.getParameter<double>("maxVtxDist")),
0058 drb_(config.getParameter<double>("maxVtxDistXY"))
0059
0060 {
0061
0062 produces<edm::ValueMap<int>>();
0063 }
0064
0065
0066 void EgammaPhotonTkNumIsolationProducer::produce(edm::StreamID sid,
0067 edm::Event& iEvent,
0068 const edm::EventSetup& iSetup) const {
0069
0070 auto photonHandle = iEvent.getHandle(photonProducer_);
0071
0072
0073 auto isoMap = std::make_unique<edm::ValueMap<int>>();
0074 edm::ValueMap<int>::Filler filler(*isoMap);
0075 std::vector<int> retV(photonHandle->size(), 0);
0076
0077 PhotonTkIsolation myTkIsolation(extRadius_,
0078 intRadiusBarrel_,
0079 intRadiusEndcap_,
0080 stripBarrel_,
0081 stripEndcap_,
0082 ptMin_,
0083 maxVtxDist_,
0084 drb_,
0085 &iEvent.get(trackProducer_),
0086 iEvent.get(beamspotProducer_).position());
0087
0088 for (unsigned int i = 0; i < photonHandle->size(); ++i) {
0089 int isoValue = myTkIsolation.getIso(&(photonHandle->at(i))).first;
0090 retV[i] = isoValue;
0091 }
0092
0093
0094 filler.insert(photonHandle, retV.begin(), retV.end());
0095 filler.fill();
0096 iEvent.put(std::move(isoMap));
0097 }