File indexing completed on 2024-04-06 12:24:55
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h"
0010 #include "DataFormats/Candidate/interface/CandAssociation.h"
0011 #include "DataFormats/Candidate/interface/Candidate.h"
0012 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/stream/EDProducer.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h"
0017
0018 class EgammaTowerIsolationProducer : public edm::stream::EDProducer<> {
0019 public:
0020 explicit EgammaTowerIsolationProducer(const edm::ParameterSet&);
0021
0022 void produce(edm::Event&, const edm::EventSetup&) override;
0023
0024 private:
0025
0026
0027 const edm::EDGetTokenT<edm::View<reco::Candidate>> emObjectProducer_;
0028 const edm::EDGetTokenT<CaloTowerCollection> towerProducer_;
0029
0030 const edm::EDPutTokenT<edm::ValueMap<double>> putToken_;
0031
0032 const double egHcalIsoPtMin_;
0033 const double egHcalIsoConeSizeOut_;
0034 const double egHcalIsoConeSizeIn_;
0035 const signed int egHcalDepth_;
0036 };
0037
0038 #include "FWCore/Framework/interface/MakerMacros.h"
0039 DEFINE_FWK_MODULE(EgammaTowerIsolationProducer);
0040
0041 EgammaTowerIsolationProducer::EgammaTowerIsolationProducer(const edm::ParameterSet& config)
0042 : emObjectProducer_{consumes(config.getParameter<edm::InputTag>("emObjectProducer"))},
0043 towerProducer_{consumes(config.getParameter<edm::InputTag>("towerProducer"))},
0044 putToken_{produces<edm::ValueMap<double>>()},
0045 egHcalIsoPtMin_{config.getParameter<double>("etMin")},
0046 egHcalIsoConeSizeOut_{config.getParameter<double>("extRadius")},
0047 egHcalIsoConeSizeIn_{config.getParameter<double>("intRadius")},
0048 egHcalDepth_{config.getParameter<int>("Depth")} {}
0049
0050 void EgammaTowerIsolationProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0051
0052 auto emObjectHandle = iEvent.getHandle(emObjectProducer_);
0053
0054
0055 auto const& towers = iEvent.get(towerProducer_);
0056
0057 edm::ValueMap<double> isoMap;
0058 edm::ValueMap<double>::Filler filler(isoMap);
0059 std::vector<double> retV(emObjectHandle->size(), 0);
0060
0061 EgammaTowerIsolation myHadIsolation(
0062 egHcalIsoConeSizeOut_, egHcalIsoConeSizeIn_, egHcalIsoPtMin_, egHcalDepth_, &towers);
0063
0064 for (size_t i = 0; i < emObjectHandle->size(); ++i) {
0065 double isoValue = myHadIsolation.getTowerEtSum(&(emObjectHandle->at(i)));
0066 retV[i] = isoValue;
0067 }
0068
0069 filler.insert(emObjectHandle, retV.begin(), retV.end());
0070 filler.fill();
0071 iEvent.emplace(putToken_, std::move(isoMap));
0072 }