File indexing completed on 2024-04-06 12:24:51
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "FWCore/Framework/interface/Frameworkfwd.h"
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "FWCore/Framework/interface/MakerMacros.h"
0018 #include "FWCore/Framework/interface/global/EDProducer.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0021 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0022
0023 #include "DataFormats/EgammaCandidates/interface/Electron.h"
0024 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
0025 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
0026 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
0027 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h"
0028 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0029 #include "DataFormats/TrackReco/interface/Track.h"
0030
0031 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaL1TkIsolation.h"
0032
0033 #include <memory>
0034
0035 class EgammaHLTEleL1TrackIsolProducer : public edm::global::EDProducer<> {
0036 public:
0037 explicit EgammaHLTEleL1TrackIsolProducer(const edm::ParameterSet&);
0038 ~EgammaHLTEleL1TrackIsolProducer() override = default;
0039 void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override;
0040 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0041
0042 private:
0043 const edm::EDGetTokenT<reco::RecoEcalCandidateCollection> ecalCandsToken_;
0044 const edm::EDGetTokenT<reco::ElectronCollection> elesToken_;
0045 const edm::EDGetTokenT<L1TrackCollection> l1TrksToken_;
0046 EgammaL1TkIsolation isolAlgo_;
0047 };
0048
0049 EgammaHLTEleL1TrackIsolProducer::EgammaHLTEleL1TrackIsolProducer(const edm::ParameterSet& config)
0050 : ecalCandsToken_(consumes<reco::RecoEcalCandidateCollection>(config.getParameter<edm::InputTag>("ecalCands"))),
0051 elesToken_(consumes<reco::ElectronCollection>(config.getParameter<edm::InputTag>("eles"))),
0052 l1TrksToken_(consumes<L1TrackCollection>(config.getParameter<edm::InputTag>("l1Tracks"))),
0053 isolAlgo_(config.getParameter<edm::ParameterSet>("isolCfg")) {
0054 produces<reco::RecoEcalCandidateIsolationMap>();
0055 }
0056
0057 void EgammaHLTEleL1TrackIsolProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0058 edm::ParameterSetDescription desc;
0059 desc.add<edm::InputTag>("ecalCands", edm::InputTag("hltEgammaCandidates"));
0060 desc.add<edm::InputTag>("eles", edm::InputTag("hltEgammaGsfElectrons"));
0061 desc.add<edm::InputTag>("l1Tracks", edm::InputTag("l1tTTTracksFromTrackletEmulation", "Level1TTTracks"));
0062 desc.add("isolCfg", EgammaL1TkIsolation::makePSetDescription());
0063 descriptions.add("hltEgammaHLTEleL1TrackIsolProducer", desc);
0064 }
0065 void EgammaHLTEleL1TrackIsolProducer::produce(edm::StreamID sid,
0066 edm::Event& iEvent,
0067 const edm::EventSetup& iSetup) const {
0068 auto ecalCands = iEvent.getHandle(ecalCandsToken_);
0069 auto eles = iEvent.getHandle(elesToken_);
0070 auto l1Trks = iEvent.getHandle(l1TrksToken_);
0071
0072 auto recoEcalCandMap = std::make_unique<reco::RecoEcalCandidateIsolationMap>(ecalCands);
0073
0074 for (size_t candNr = 0; candNr < ecalCands->size(); candNr++) {
0075 reco::RecoEcalCandidateRef recoEcalCandRef(ecalCands, candNr);
0076 reco::ElectronRef eleRef;
0077 for (size_t eleNr = 0; eleNr < eles->size(); eleNr++) {
0078 if ((*eles)[eleNr].superCluster() == recoEcalCandRef->superCluster()) {
0079 eleRef = reco::ElectronRef(eles, eleNr);
0080 break;
0081 }
0082 }
0083
0084 float isol =
0085 eleRef.isNonnull() ? isolAlgo_.calIsol(*eleRef->gsfTrack(), *l1Trks).second : std::numeric_limits<float>::max();
0086
0087 recoEcalCandMap->insert(recoEcalCandRef, isol);
0088 }
0089 iEvent.put(std::move(recoEcalCandMap));
0090 }
0091
0092 #include "FWCore/Framework/interface/MakerMacros.h"
0093 DEFINE_FWK_MODULE(EgammaHLTEleL1TrackIsolProducer);