23 rhoProducer_ ( consumes<double>(config.getParameter<edm::
InputTag>(
"rhoProducer"))),
26 useHF_ ( config.getParameter<bool>(
"useHF")),
27 drMax_ ( config.getParameter<double>(
"drMax")),
28 drVetoBarrel_ ( config.getParameter<double>(
"drVetoBarrel")),
29 drVetoEndcap_ ( config.getParameter<double>(
"drVetoEndcap")),
30 etaStripBarrel_ ( config.getParameter<double>(
"etaStripBarrel")),
31 etaStripEndcap_ ( config.getParameter<double>(
"etaStripEndcap")),
32 energyBarrel_ ( config.getParameter<double>(
"energyBarrel")),
33 energyEndcap_ ( config.getParameter<double>(
"energyEndcap")),
34 useEt_ ( config.getParameter<bool>(
"useEt")),
35 doRhoCorrection_ ( config.getParameter<bool>(
"doRhoCorrection")),
36 rhoMax_ ( config.getParameter<double>(
"rhoMax")),
37 rhoScale_ ( config.getParameter<double>(
"rhoScale")),
38 effectiveAreas_ ( config.getParameter<std::vector<double> >(
"effectiveAreas")) ,
39 absEtaLowEdges_ ( config.getParameter<std::vector<double> >(
"absEtaLowEdges")) {
43 throw cms::Exception(
"IncompatibleVects") <<
"absEtaLowEdges and effectiveAreas should be of the same size. \n";
46 throw cms::Exception(
"IncompleteCoverage") <<
"absEtaLowEdges should start from 0. \n";
50 throw cms::Exception(
"ImproperBinning") <<
"absEtaLowEdges entries should be in increasing order. \n";
54 std::string recoCandidateProducerName =
"recoCandidateProducer";
58 produces <T1IsolationMap >();
68 std::string recoCandidateProducerName =
"recoCandidateProducer";
80 desc.
add<
bool>(
"doRhoCorrection",
false);
81 desc.
add<
double>(
"rhoMax", 9.9999999E7);
82 desc.
add<
double>(
"rhoScale", 1.0);
83 desc.
add<
double>(
"drMax", 0.3);
84 desc.
add<
double>(
"drVetoBarrel", 0.0);
85 desc.
add<
double>(
"drVetoEndcap", 0.0);
86 desc.
add<
double>(
"etaStripBarrel", 0.0);
87 desc.
add<
double>(
"etaStripEndcap", 0.0);
88 desc.
add<
double>(
"energyBarrel", 0.0);
89 desc.
add<
double>(
"energyEndcap", 0.0);
90 desc.
add<
bool>(
"useEt",
true);
91 desc.
add<std::vector<double> >(
"effectiveAreas", {0.2, 0.25});
92 desc.
add<std::vector<double> >(
"absEtaLowEdges", {0.0, 1.479});
101 if (doRhoCorrection_) {
113 std::vector<edm::Handle<reco::PFClusterCollection>> clusterHandles;
118 iEvent.
getByToken(recoCandidateProducer_,recoCandHandle);
119 iEvent.
getByToken(pfClusterProducerHCAL_, clusterHcalHandle);
121 clusterHandles.push_back(clusterHcalHandle);
124 iEvent.
getByToken(pfClusterProducerHFEM_, clusterHfemHandle);
125 clusterHandles.push_back(clusterHfemHandle);
126 iEvent.
getByToken(pfClusterProducerHFHAD_, clusterHfhadHandle);
127 clusterHandles.push_back(clusterHfhadHandle);
131 HcalPFClusterIsolation<T1> isoAlgo(drMax_, drVetoBarrel_, drVetoEndcap_, etaStripBarrel_, etaStripEndcap_, energyBarrel_, energyEndcap_, useEt_);
133 for (
unsigned int iReco = 0; iReco < recoCandHandle->size(); iReco++) {
134 T1Ref candRef(recoCandHandle, iReco);
136 float sum = isoAlgo.
getSum(candRef, clusterHandles);
138 if (doRhoCorrection_) {
140 auto cEta =
std::abs(candRef->eta());
141 for (
int bIt = absEtaLowEdges_.size() - 1; bIt > -1; bIt--) {
142 if ( cEta > absEtaLowEdges_.at(bIt) ) {
148 sum = sum - rho*effectiveAreas_.at(iEA);
151 recoCandMap.
insert(candRef, sum);
154 std::auto_ptr<T1IsolationMap> mapForEvent(
new T1IsolationMap(recoCandMap));
155 iEvent.
put(mapForEvent);
T getParameter(std::string const &) const
std::string defaultModuleLabel()
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void produce(edm::StreamID sid, edm::Event &, const edm::EventSetup &) const override
#define DEFINE_FWK_MODULE(type)
const std::vector< double > effectiveAreas_
~HLTHcalPFClusterIsolationProducer()
const bool doRhoCorrection_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Abs< T >::type abs(const T &t)
HLTHcalPFClusterIsolationProducer< reco::RecoEcalCandidate > EgammaHLTHcalPFClusterIsolationProducer
ParameterDescriptionBase * add(U const &iLabel, T const &value)
double getSum(const T1Ref candRef, const std::vector< edm::Handle< reco::PFClusterCollection >> &clusterHandles)
edm::EDGetTokenT< T1Collection > recoCandidateProducer_
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::auto_ptr< ParameterDescriptionCases< T > > cases)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T const * product() const
void insert(const key_type &k, const data_type &v)
insert an association
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const std::vector< double > absEtaLowEdges_
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
HLTHcalPFClusterIsolationProducer(const edm::ParameterSet &)
HLTHcalPFClusterIsolationProducer< reco::RecoChargedCandidate > MuonHLTHcalPFClusterIsolationProducer