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 }
67 
69 
72  desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag("hltL1SeededRecoEcalCandidate"));
73  desc.add<edm::InputTag>(("ecalRechitEB"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEB"));
74  desc.add<edm::InputTag>(("ecalRechitEE"), edm::InputTag("hltEcalRegionalEgammaRecHit", "EcalRecHitsEE"));
75  desc.add<double>(("multThresEB"), EgammaLocalCovParamDefaults::kMultThresEB);
76  desc.add<double>(("multThresEE"), EgammaLocalCovParamDefaults::kMultThresEE);
77  descriptions.add(("hltEgammaHLTClusterShapeProducer"), desc);
78 }
79 
82  const edm::EventSetup& iSetup) const {
83  // Get the HLT filtered objects
85  iEvent.getByToken(recoEcalCandidateProducer_, recoecalcandHandle);
86 
89  iEvent.getByToken(ecalRechitEBToken_, rechitsEB_);
90  iEvent.getByToken(ecalRechitEEToken_, rechitsEE_);
91 
92  auto const& ecalClusterLazyToolsESData = ecalClusterLazyToolsESGetTokens_.get(iSetup);
93  auto const& thresholds = iSetup.getData(ecalPFRechitThresholdsToken_);
94 
95  EcalClusterLazyTools lazyTools(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
96  noZS::EcalClusterLazyTools lazyTools5x5(iEvent, ecalClusterLazyToolsESData, ecalRechitEBToken_, ecalRechitEEToken_);
97 
98  //Map is for sigmaIEtaIEta
99  reco::RecoEcalCandidateIsolationMap clshMap(recoecalcandHandle);
100  reco::RecoEcalCandidateIsolationMap clsh5x5Map(recoecalcandHandle);
101  reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap(recoecalcandHandle);
102 
103  //Map2 is for sigmaIPhiIPhi
104  reco::RecoEcalCandidateIsolationMap clshMap2(recoecalcandHandle);
105  reco::RecoEcalCandidateIsolationMap clsh5x5Map2(recoecalcandHandle);
106  reco::RecoEcalCandidateIsolationMap clsh5x5NoiseCleanedMap2(recoecalcandHandle);
107 
108  reco::RecoEcalCandidateIsolationMap clshSMajorMap(recoecalcandHandle);
109  reco::RecoEcalCandidateIsolationMap clshSMinorMap(recoecalcandHandle);
110 
111  for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoecalcandHandle->size(); iRecoEcalCand++) {
112  reco::RecoEcalCandidateRef recoecalcandref(recoecalcandHandle, iRecoEcalCand);
113  if (recoecalcandref->superCluster()->seed()->seed().det() != DetId::Ecal) { //HGCAL, skip for now
114  clshMap.insert(recoecalcandref, 0);
115  clsh5x5Map.insert(recoecalcandref, 0);
116  clsh5x5NoiseCleanedMap.insert(recoecalcandref, 0);
117 
118  clshMap2.insert(recoecalcandref, 0);
119  clsh5x5Map2.insert(recoecalcandref, 0);
120  clsh5x5NoiseCleanedMap2.insert(recoecalcandref, 0);
121 
122  clshSMajorMap.insert(recoecalcandref, 0);
123  clshSMinorMap.insert(recoecalcandref, 0);
124 
125  continue;
126  }
127 
128  double sigmaee;
129  double sigmapp; //sigmaIphiIphi, needed in e/gamma HLT regression setup
130 
131  const auto& vCov = lazyTools.localCovariances(*(recoecalcandref->superCluster()->seed()));
132  sigmaee = sqrt(vCov[0]);
133  sigmapp = sqrt(vCov[2]);
134 
135  //this is full5x5 showershape
136  auto const ecalCandLocalCov = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()));
137  auto const sigmaee5x5 = sqrt(ecalCandLocalCov[0]);
138  auto const sigmapp5x5 = sqrt(ecalCandLocalCov[2]);
139 
140  auto const ecalCandLocalCovNoiseCleaned = lazyTools5x5.localCovariances(*(recoecalcandref->superCluster()->seed()),
142  &thresholds,
143  multThresEB_,
144  multThresEE_);
145  auto const sigmaee5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[0]);
146  auto const sigmapp5x5NoiseCleaned = sqrt(ecalCandLocalCovNoiseCleaned[2]);
147 
148  clshMap.insert(recoecalcandref, sigmaee);
149  clsh5x5Map.insert(recoecalcandref, sigmaee5x5);
150  clsh5x5NoiseCleanedMap.insert(recoecalcandref, sigmaee5x5NoiseCleaned);
151 
152  clshMap2.insert(recoecalcandref, sigmapp);
153  clsh5x5Map2.insert(recoecalcandref, sigmapp5x5);
154  clsh5x5NoiseCleanedMap2.insert(recoecalcandref, sigmapp5x5NoiseCleaned);
155 
156  reco::CaloClusterPtr SCseed = recoecalcandref->superCluster()->seed();
158  (std::abs(recoecalcandref->eta()) < 1.479) ? rechitsEB_.product() : rechitsEE_.product();
159  Cluster2ndMoments moments = EcalClusterTools::cluster2ndMoments(*SCseed, *rechits);
160  float sMaj = moments.sMaj;
161  float sMin = moments.sMin;
162  clshSMajorMap.insert(recoecalcandref, sMaj);
163  clshSMinorMap.insert(recoecalcandref, sMin);
164  }
165 
166  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap));
167  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map), "sigmaIEtaIEta5x5");
168  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap),
169  "sigmaIEtaIEta5x5NoiseCleaned");
170 
171  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshMap2), "sigmaIPhiIPhi");
172  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5Map2), "sigmaIPhiIPhi5x5");
173  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clsh5x5NoiseCleanedMap2),
174  "sigmaIPhiIPhi5x5NoiseCleaned");
175 
176  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMajorMap), "sMajor");
177  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(clshSMinorMap), "sMinor");
178 }
179 
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_