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/global/EDProducer.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
0021 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
0022 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidateIsolation.h"
0023 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
0024 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
0025 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0026 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0027 #include "RecoEcal/EgammaCoreTools/interface/EgammaLocalCovParamDefaults.h"
0028
0029 class EgammaHLTClusterShapeProducer : public edm::global::EDProducer<> {
0030 public:
0031 explicit EgammaHLTClusterShapeProducer(const edm::ParameterSet&);
0032 ~EgammaHLTClusterShapeProducer() override;
0033
0034 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0035 void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override;
0036
0037 private:
0038
0039
0040 const edm::EDGetTokenT<reco::RecoEcalCandidateCollection> recoEcalCandidateProducer_;
0041 const edm::EDGetTokenT<EcalRecHitCollection> ecalRechitEBToken_;
0042 const edm::EDGetTokenT<EcalRecHitCollection> ecalRechitEEToken_;
0043 const EcalClusterLazyTools::ESGetTokens ecalClusterLazyToolsESGetTokens_;
0044 const edm::ESGetToken<EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd> ecalPFRechitThresholdsToken_;
0045 const double multThresEB_;
0046 const double multThresEE_;
0047 };
0048
0049 EgammaHLTClusterShapeProducer::EgammaHLTClusterShapeProducer(const edm::ParameterSet& config)
0050 : recoEcalCandidateProducer_(consumes(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"))),
0051 ecalRechitEBToken_(consumes(config.getParameter<edm::InputTag>("ecalRechitEB"))),
0052 ecalRechitEEToken_(consumes(config.getParameter<edm::InputTag>("ecalRechitEE"))),
0053 ecalClusterLazyToolsESGetTokens_{consumesCollector()},
0054 ecalPFRechitThresholdsToken_{esConsumes()},
0055 multThresEB_(config.getParameter<double>("multThresEB")),
0056 multThresEE_(config.getParameter<double>("multThresEE")) {
0057
0058 produces<reco::RecoEcalCandidateIsolationMap>();
0059 produces<reco::RecoEcalCandidateIsolationMap>("sigmaIEtaIEta5x5");
0060 produces<reco::RecoEcalCandidateIsolationMap>("sigmaIEtaIEta5x5NoiseCleaned");
0061 produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi");
0062 produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi5x5");
0063 produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi5x5NoiseCleaned");
0064 produces<reco::RecoEcalCandidateIsolationMap>("sMajor");
0065 produces<reco::RecoEcalCandidateIsolationMap>("sMinor");
0066 produces<reco::RecoEcalCandidateIsolationMap>("e2x2");
0067 }
0068
0069 EgammaHLTClusterShapeProducer::~EgammaHLTClusterShapeProducer() {}
0070
0071 void EgammaHLTClusterShapeProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0072 edm::ParameterSetDescription desc;
0073 desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag("hltL1SeededRecoEcalCandidate"));
0074 desc.add<edm::InputTag>(("ecalRechitEB"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEB"));
0075 desc.add<edm::InputTag>(("ecalRechitEE"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEE"));
0076 desc.add<double>(("multThresEB"), EgammaLocalCovParamDefaults::kMultThresEB);
0077 desc.add<double>(("multThresEE"), EgammaLocalCovParamDefaults::kMultThresEE);
0078 descriptions.add(("hltEgammaHLTClusterShapeProducer"), desc);
0079 }
0080
0081 void EgammaHLTClusterShapeProducer::produce(edm::StreamID sid,
0082 edm::Event& iEvent,
0083 const edm::EventSetup& iSetup) const {
0084
0085 edm::Handle<reco::RecoEcalCandidateCollection> recoecalcandHandle;
0086 iEvent.getByToken(recoEcalCandidateProducer_, recoecalcandHandle);
0087
0088 edm::Handle<EcalRecHitCollection> rechitsEB_;
0089 edm::Handle<EcalRecHitCollection> rechitsEE_;
0090 iEvent.getByToken(ecalRechitEBToken_, rechitsEB_);
0091 iEvent.getByToken(ecalRechitEEToken_, rechitsEE_);
0092
0093 auto const& ecalClusterLazyToolsESData = ecalClusterLazyToolsESGetTokens_.get(iSetup);
0094 auto const& thresholds = iSetup.getData(ecalPFRechitThresholdsToken_);
0095
0096 EcalClusterLazyTools lazyTools(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
0097 noZS::EcalClusterLazyTools lazyTools5x5(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
0098
0099
0100 reco::RecoEcalCandidateIsolationMap clshMap(recoecalcandHandle);
0101 reco::RecoEcalCandidateIsolationMap clsh5x5Map(recoecalcandHandle);
0102 reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap(recoecalcandHandle);
0103
0104
0105 reco::RecoEcalCandidateIsolationMap clshMap2(recoecalcandHandle);
0106 reco::RecoEcalCandidateIsolationMap clsh5x5Map2(recoecalcandHandle);
0107 reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap2(recoecalcandHandle);
0108
0109 reco::RecoEcalCandidateIsolationMap clshSMajorMap(recoecalcandHandle);
0110 reco::RecoEcalCandidateIsolationMap clshSMinorMap(recoecalcandHandle);
0111
0112 reco::RecoEcalCandidateIsolationMap e2x2Map(recoecalcandHandle);
0113
0114 for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoecalcandHandle->size(); iRecoEcalCand++) {
0115 reco::RecoEcalCandidateRef recoecalcandref(recoecalcandHandle, iRecoEcalCand);
0116 if (recoecalcandref->superCluster()->seed()->seed().det() != DetId::Ecal) {
0117 clshMap.insert(recoecalcandref, 0);
0118 clsh5x5Map.insert(recoecalcandref, 0);
0119 clsh5x5NoiseCleanedMap.insert(recoecalcandref, 0);
0120
0121 clshMap2.insert(recoecalcandref, 0);
0122 clsh5x5Map2.insert(recoecalcandref, 0);
0123 clsh5x5NoiseCleanedMap2.insert(recoecalcandref, 0);
0124
0125 clshSMajorMap.insert(recoecalcandref, 0);
0126 clshSMinorMap.insert(recoecalcandref, 0);
0127
0128 e2x2Map.insert(recoecalcandref, 0);
0129
0130 continue;
0131 }
0132
0133 double sigmaee;
0134 double sigmapp;
0135
0136 const auto& vCov = lazyTools.localCovariances(*(recoecalcandref->superCluster()->seed()));
0137 sigmaee = sqrt(vCov[0]);
0138 sigmapp = sqrt(vCov[2]);
0139
0140
0141 auto const ecalCandLocalCov = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()));
0142 auto const sigmaee5x5 = sqrt(ecalCandLocalCov[0]);
0143 auto const sigmapp5x5 = sqrt(ecalCandLocalCov[2]);
0144
0145 auto const ecalCandLocalCovNoiseCleaned = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()),
0146 EgammaLocalCovParamDefaults::kRelEnCut,
0147 &thresholds,
0148 multThresEB_,
0149 multThresEE_);
0150 auto const sigmaee5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[0]);
0151 auto const sigmapp5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[2]);
0152
0153 clshMap.insert(recoecalcandref, sigmaee);
0154 clsh5x5Map.insert(recoecalcandref, sigmaee5x5);
0155 clsh5x5NoiseCleanedMap.insert(recoecalcandref, sigmaee5x5NoiseCleaned);
0156
0157 clshMap2.insert(recoecalcandref, sigmapp);
0158 clsh5x5Map2.insert(recoecalcandref, sigmapp5x5);
0159 clsh5x5NoiseCleanedMap2.insert(recoecalcandref, sigmapp5x5NoiseCleaned);
0160
0161 reco::CaloClusterPtr SCseed = recoecalcandref->superCluster()->seed();
0162 const EcalRecHitCollection* rechits =
0163 (std::abs(recoecalcandref->eta()) < 1.479) ? rechitsEB_.product() : rechitsEE_.product();
0164 Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
0165 float sMaj = moments.sMaj;
0166 float sMin = moments.sMin;
0167 clshSMajorMap.insert(recoecalcandref, sMaj);
0168 clshSMinorMap.insert(recoecalcandref, sMin);
0169
0170 auto const e2x2 = lazyTools.e2x2(*(recoecalcandref->superCluster()->seed()));
0171 e2x2Map.insert(recoecalcandref, e2x2);
0172 }
0173
0174 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap));
0175 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map), "sigmaIEtaIEta5x5");
0176 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap),
0177 "sigmaIEtaIEta5x5NoiseCleaned");
0178
0179 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap2), "sigmaIPhiIPhi");
0180 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map2), "sigmaIPhiIPhi5x5");
0181 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap2),
0182 "sigmaIPhiIPhi5x5NoiseCleaned");
0183
0184 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMajorMap), "sMajor");
0185 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMinorMap), "sMinor");
0186
0187 iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(e2x2Map), "e2x2");
0188 }
0189
0190 #include "FWCore/Framework/interface/MakerMacros.h"
0191 DEFINE_FWK_MODULE(EgammaHLTClusterShapeProducer);