CMS 3D CMS Logo

EgammaHLTClusterShapeProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: EgammaHLTProducers
4 // Class: EgammaHLTClusterShapeProducer
5 //
8 //
9 // Original Author: Roberto Covarelli (CERN)
10 // Created: Tue Jun 13 14:48:33 CEST 2006
11 // $Id: EgammaHLTClusterShapeProducer.h,v 1.1 2009/01/15 14:28:27 covarell Exp $
12 //
13 //
14 
28 
30 public:
33 
34  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
35  void produce(edm::StreamID sid, edm::Event&, const edm::EventSetup&) const override;
36 
37 private:
38  // ----------member data ---------------------------
39 
45  const double multThresEB_;
46  const double multThresEE_;
47 };
48 
50  : recoEcalCandidateProducer_(consumes(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"))),
51  ecalRechitEBToken_(consumes(config.getParameter<edm::InputTag>("ecalRechitEB"))),
52  ecalRechitEEToken_(consumes(config.getParameter<edm::InputTag>("ecalRechitEE"))),
53  ecalClusterLazyToolsESGetTokens_{consumesCollector()},
54  ecalPFRechitThresholdsToken_{esConsumes()},
55  multThresEB_(config.getParameter<double>("multThresEB")),
56  multThresEE_(config.getParameter<double>("multThresEE")) {
57  //register your products
58  produces<reco::RecoEcalCandidateIsolationMap>();
59  produces<reco::RecoEcalCandidateIsolationMap>("sigmaIEtaIEta5x5");
60  produces<reco::RecoEcalCandidateIsolationMap>("sigmaIEtaIEta5x5NoiseCleaned");
61  produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi");
62  produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi5x5");
63  produces<reco::RecoEcalCandidateIsolationMap>("sigmaIPhiIPhi5x5NoiseCleaned");
64  produces<reco::RecoEcalCandidateIsolationMap>("sMajor");
65  produces<reco::RecoEcalCandidateIsolationMap>("sMinor");
66  produces<reco::RecoEcalCandidateIsolationMap>("e2x2");
67 }
68 
70 
73  desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag("hltL1SeededRecoEcalCandidate"));
74  desc.add<edm::InputTag>(("ecalRechitEB"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEB"));
75  desc.add<edm::InputTag>(("ecalRechitEE"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEE"));
76  desc.add<double>(("multThresEB"), EgammaLocalCovParamDefaults::kMultThresEB);
77  desc.add<double>(("multThresEE"), EgammaLocalCovParamDefaults::kMultThresEE);
78  descriptions.add(("hltEgammaHLTClusterShapeProducer"), desc);
79 }
80 
83  const edm::EventSetup& iSetup) const {
84  // Get the HLT filtered objects
86  iEvent.getByToken(recoEcalCandidateProducer_, recoecalcandHandle);
87 
90  iEvent.getByToken(ecalRechitEBToken_, rechitsEB_);
91  iEvent.getByToken(ecalRechitEEToken_, rechitsEE_);
92 
93  auto const& ecalClusterLazyToolsESData = ecalClusterLazyToolsESGetTokens_.get(iSetup);
94  auto const& thresholds = iSetup.getData(ecalPFRechitThresholdsToken_);
95 
96  EcalClusterLazyTools lazyTools(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
97  noZS::EcalClusterLazyTools lazyTools5x5(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
98 
99  //Map is for sigmaIEtaIEta
100  reco::RecoEcalCandidateIsolationMap clshMap(recoecalcandHandle);
101  reco::RecoEcalCandidateIsolationMap clsh5x5Map(recoecalcandHandle);
102  reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap(recoecalcandHandle);
103 
104  //Map2 is for sigmaIPhiIPhi
105  reco::RecoEcalCandidateIsolationMap clshMap2(recoecalcandHandle);
106  reco::RecoEcalCandidateIsolationMap clsh5x5Map2(recoecalcandHandle);
107  reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap2(recoecalcandHandle);
108 
109  reco::RecoEcalCandidateIsolationMap clshSMajorMap(recoecalcandHandle);
110  reco::RecoEcalCandidateIsolationMap clshSMinorMap(recoecalcandHandle);
111 
112  reco::RecoEcalCandidateIsolationMap e2x2Map(recoecalcandHandle);
113 
114  for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoecalcandHandle->size(); iRecoEcalCand++) {
115  reco::RecoEcalCandidateRef recoecalcandref(recoecalcandHandle, iRecoEcalCand);
116  if (recoecalcandref->superCluster()->seed()->seed().det() != DetId::Ecal) { //HGCAL, skip for now
117  clshMap.insert(recoecalcandref, 0);
118  clsh5x5Map.insert(recoecalcandref, 0);
119  clsh5x5NoiseCleanedMap.insert(recoecalcandref, 0);
120 
121  clshMap2.insert(recoecalcandref, 0);
122  clsh5x5Map2.insert(recoecalcandref, 0);
123  clsh5x5NoiseCleanedMap2.insert(recoecalcandref, 0);
124 
125  clshSMajorMap.insert(recoecalcandref, 0);
126  clshSMinorMap.insert(recoecalcandref, 0);
127 
128  e2x2Map.insert(recoecalcandref, 0);
129 
130  continue;
131  }
132 
133  double sigmaee;
134  double sigmapp; //sigmaIphiIphi, needed in e/gamma HLT regression setup
135 
136  const auto& vCov = lazyTools.localCovariances(*(recoecalcandref->superCluster()->seed()));
137  sigmaee = sqrt(vCov[0]);
138  sigmapp = sqrt(vCov[2]);
139 
140  //this is full5x5 showershape
141  auto const ecalCandLocalCov = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()));
142  auto const sigmaee5x5 = sqrt(ecalCandLocalCov[0]);
143  auto const sigmapp5x5 = sqrt(ecalCandLocalCov[2]);
144 
145  auto const ecalCandLocalCovNoiseCleaned = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()),
147  &thresholds,
148  multThresEB_,
149  multThresEE_);
150  auto const sigmaee5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[0]);
151  auto const sigmapp5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[2]);
152 
153  clshMap.insert(recoecalcandref, sigmaee);
154  clsh5x5Map.insert(recoecalcandref, sigmaee5x5);
155  clsh5x5NoiseCleanedMap.insert(recoecalcandref, sigmaee5x5NoiseCleaned);
156 
157  clshMap2.insert(recoecalcandref, sigmapp);
158  clsh5x5Map2.insert(recoecalcandref, sigmapp5x5);
159  clsh5x5NoiseCleanedMap2.insert(recoecalcandref, sigmapp5x5NoiseCleaned);
160 
161  reco::CaloClusterPtr SCseed = recoecalcandref->superCluster()->seed();
162  const EcalRecHitCollection* rechits =
163  (std::abs(recoecalcandref->eta()) < 1.479) ? rechitsEB_.product() : rechitsEE_.product();
164  Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
165  float sMaj = moments.sMaj;
166  float sMin = moments.sMin;
167  clshSMajorMap.insert(recoecalcandref, sMaj);
168  clshSMinorMap.insert(recoecalcandref, sMin);
169 
170  auto const e2x2 = lazyTools.e2x2(*(recoecalcandref->superCluster()->seed()));
171  e2x2Map.insert(recoecalcandref, e2x2);
172  }
173 
174  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap));
175  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map), "sigmaIEtaIEta5x5");
176  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap),
177  "sigmaIEtaIEta5x5NoiseCleaned");
178 
179  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap2), "sigmaIPhiIPhi");
180  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map2), "sigmaIPhiIPhi5x5");
181  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap2),
182  "sigmaIPhiIPhi5x5NoiseCleaned");
183 
184  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMajorMap), "sMajor");
185  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMinorMap), "sMinor");
186 
187  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(e2x2Map), "e2x2");
188 }
189 
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T const * product() const
Definition: Handle.h:70
Definition: config.py:1
void produce(edm::StreamID sid, edm::Event &, const edm::EventSetup &) const override
EgammaHLTClusterShapeProducer(const edm::ParameterSet &)
const edm::ESGetToken< EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd > ecalPFRechitThresholdsToken_
ESData get(edm::EventSetup const &eventSetup) const
int iEvent
Definition: GenABIO.cc:224
const EcalClusterLazyTools::ESGetTokens ecalClusterLazyToolsESGetTokens_
std::array< float, 3 > localCovariances(const reco::BasicCluster &cluster, float w0=EgammaLocalCovParamDefaults::kRelEnCut, const EcalPFRecHitThresholds *rhthresholds=nullptr, float multEB=0.0, float multEE=0.0) const
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
T sqrt(T t)
Definition: SSEVec.h:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void insert(const key_type &k, const data_type &v)
insert an association
const edm::EDGetTokenT< EcalRecHitCollection > ecalRechitEEToken_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
HLT enums.
const edm::EDGetTokenT< EcalRecHitCollection > ecalRechitEBToken_
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_