@@ -67,6 +67,10 @@ class HLTHcalPFClusterIsolationProducer : public edm::global::EDProducer<> {
6767 const double rhoScale_;
6868 const std::vector<double > effectiveAreas_;
6969 const std::vector<double > absEtaLowEdges_;
70+
71+ const bool doEffAreaCorrection_;
72+ const std::vector<double > effectiveAreasCorr_;
73+ const std::vector<double > effectiveAreasThres_;
7074};
7175
7276template <typename T1>
@@ -91,7 +95,10 @@ HLTHcalPFClusterIsolationProducer<T1>::HLTHcalPFClusterIsolationProducer(const e
9195 rhoMax_(config.getParameter<double >(" rhoMax" )),
9296 rhoScale_(config.getParameter<double >(" rhoScale" )),
9397 effectiveAreas_(config.getParameter<std::vector<double >>(" effectiveAreas" )),
94- absEtaLowEdges_(config.getParameter<std::vector<double >>(" absEtaLowEdges" )) {
98+ absEtaLowEdges_(config.getParameter<std::vector<double >>(" absEtaLowEdges" )),
99+ doEffAreaCorrection_(config.getParameter<bool >(" doEffAreaCorrection" )),
100+ effectiveAreasCorr_(config.getParameter<std::vector<double >>(" effectiveAreasCorr" )),
101+ effectiveAreasThres_(config.getParameter<std::vector<double >>(" effectiveAreasThres" )) {
95102 if (doRhoCorrection_) {
96103 if (absEtaLowEdges_.size () != effectiveAreas_.size ())
97104 throw cms::Exception (" IncompatibleVects" ) << " absEtaLowEdges and effectiveAreas should be of the same size. \n " ;
@@ -149,6 +156,9 @@ void HLTHcalPFClusterIsolationProducer<T1>::fillDescriptions(edm::ConfigurationD
149156 desc.add <bool >(" useEt" , true );
150157 desc.add <std::vector<double >>(" effectiveAreas" , {0.2 , 0.25 }); // 2016 post-ichep sinEle default
151158 desc.add <std::vector<double >>(" absEtaLowEdges" , {0.0 , 1.479 }); // Barrel, Endcap
159+ desc.add <bool >(" doEffAreaCorrection" , false );
160+ desc.add <std::vector<double >>(" effectiveAreasCorr" , {0.0 , 0.0 });
161+ desc.add <std::vector<double >>(" effectiveAreasThres" , {0.0 , 0.0 });
152162 descriptions.add (defaultModuleLabel<HLTHcalPFClusterIsolationProducer<T1>>(), desc);
153163}
154164
@@ -177,7 +187,6 @@ void HLTHcalPFClusterIsolationProducer<T1>::produce(edm::StreamID sid,
177187
178188 iEvent.getByToken (recoCandidateProducer_, recoCandHandle);
179189 iEvent.getByToken (pfClusterProducerHCAL_, clusterHcalHandle);
180- // const reco::PFClusterCollection* forIsolationHcal = clusterHcalHandle.product();
181190 clusterHandles.push_back (clusterHcalHandle);
182191
183192 if (useHF_) {
@@ -193,7 +202,6 @@ void HLTHcalPFClusterIsolationProducer<T1>::produce(edm::StreamID sid,
193202
194203 for (unsigned int iReco = 0 ; iReco < recoCandHandle->size (); iReco++) {
195204 T1Ref candRef (recoCandHandle, iReco);
196-
197205 float sum = isoAlgo.getSum (candRef, clusterHandles);
198206
199207 if (doRhoCorrection_) {
@@ -205,7 +213,12 @@ void HLTHcalPFClusterIsolationProducer<T1>::produce(edm::StreamID sid,
205213 break ;
206214 }
207215 }
208- sum = sum - rho * effectiveAreas_[iEA];
216+ if (doEffAreaCorrection_) {
217+ float correction = (rho > effectiveAreasThres_[iEA]) ? (1 + effectiveAreasCorr_[iEA]) : 1 ;
218+ sum -= rho * correction * effectiveAreas_[iEA];
219+ } else {
220+ sum -= rho * effectiveAreas_[iEA];
221+ }
209222 }
210223
211224 recoCandMap.insert (candRef, sum);
0 commit comments