Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:24:51

0001 // -*- C++ -*-
0002 //
0003 // Package:    EgammaHLTProducers
0004 // Class:      EgammaHLTClusterShapeProducer
0005 //
0006 /**\class EgammaHLTClusterShapeProducer EgammaHLTClusterShapeProducer.cc RecoEgamma/EgammaHLTProducers/interface/EgammaHLTClusterShapeProducer.h
0007 */
0008 //
0009 // Original Author:  Roberto Covarelli (CERN)
0010 //         Created:  Tue Jun 13 14:48:33 CEST 2006
0011 // $Id: EgammaHLTClusterShapeProducer.h,v 1.1 2009/01/15 14:28:27 covarell Exp $
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   // ----------member data ---------------------------
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   //register your products
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   // Get the HLT filtered objects
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   //Map is for sigmaIEtaIEta
0100   reco::RecoEcalCandidateIsolationMap clshMap(recoecalcandHandle);
0101   reco::RecoEcalCandidateIsolationMap clsh5x5Map(recoecalcandHandle);
0102   reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap(recoecalcandHandle);
0103 
0104   //Map2 is for sigmaIPhiIPhi
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) {  //HGCAL, skip for now
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;  //sigmaIphiIphi, needed in e/gamma HLT regression setup
0135 
0136     const auto& vCov = lazyTools.localCovariances(*(recoecalcandref->superCluster()->seed()));
0137     sigmaee = sqrt(vCov[0]);
0138     sigmapp = sqrt(vCov[2]);
0139 
0140     //this is full5x5 showershape
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);