51 produces<edm::ValueMap<float>>(
"miniIsoChg");
52 produces<edm::ValueMap<float>>(
"miniIsoAll");
57 produces<edm::ValueMap<float>>(
"PFIsoChg");
58 produces<edm::ValueMap<float>>(
"PFIsoAll");
59 produces<edm::ValueMap<float>>(
"PFIsoAll04");
63 produces<edm::ValueMap<float>>(
"PFIsoChg");
64 produces<edm::ValueMap<float>>(
"PFIsoAll");
103 template <
typename T>
116 template <
typename T>
130 template <
typename T>
137 unsigned int nInput = src->size();
140 miniIsoChg.reserve(nInput);
141 miniIsoAll.reserve(nInput);
143 for (
const auto&
obj : *src) {
144 auto iso =
obj.miniPFIsolation();
145 auto chg = iso.chargedHadronIso();
146 auto neu = iso.neutralHadronIso();
147 auto pho = iso.photonIso();
152 miniIsoChg.push_back(scale *
chg);
153 miniIsoAll.push_back(scale * (chg +
std::max(0.0, neu + pho - (*rho) * ea)));
158 fillerChg.
insert(src, miniIsoChg.begin(), miniIsoChg.end());
162 fillerAll.
insert(src, miniIsoAll.begin(), miniIsoAll.end());
172 template <
typename T>
182 unsigned int nInput = src->size();
185 PFIsoChg.reserve(nInput);
186 PFIsoAll.reserve(nInput);
187 PFIsoAll04.reserve(nInput);
189 for (
const auto&
obj : *src) {
190 auto iso =
obj.pfIsolationVariables();
191 auto chg = iso.sumChargedHadronPt;
192 auto neu = iso.sumNeutralHadronEt;
193 auto pho = iso.sumPhotonEt;
196 PFIsoChg.push_back(scale *
chg);
197 PFIsoAll.push_back(scale * (chg +
std::max(0.0, neu + pho - (*rho) * ea)));
198 PFIsoAll04.push_back(scale * (
obj.chargedHadronIso() +
199 std::max(0.0,
obj.neutralHadronIso() +
obj.photonIso() - (*rho) * ea * 16. / 9.)));
204 fillerChg.
insert(src, PFIsoChg.begin(), PFIsoChg.end());
208 fillerAll.
insert(src, PFIsoAll.begin(), PFIsoAll.end());
212 fillerAll04.
insert(src, PFIsoAll04.begin(), PFIsoAll04.end());
220 template <
typename T>
230 unsigned int nInput = src->size();
233 PFIsoChg.reserve(nInput);
234 PFIsoAll.reserve(nInput);
236 for (
const auto&
obj : *src) {
237 auto chg =
obj.chargedHadronIso();
238 auto neu =
obj.neutralHadronIso();
239 auto pho =
obj.photonIso();
244 PFIsoChg.push_back(scale *
std::max(0.0,
chg - (*rho) * ea_chg));
245 PFIsoAll.push_back(PFIsoChg.back() +
246 scale * (
std::max(0.0, neu - (*rho) * ea_neu) +
std::max(0.0, pho - (*rho) * ea_pho)));
251 fillerChg.
insert(src, PFIsoChg.begin(), PFIsoChg.end());
255 fillerAll.
insert(src, PFIsoAll.begin(), PFIsoAll.end());
263 template <
typename T>
266 desc.
add<
edm::InputTag>(
"src")->setComment(
"input physics object collection");
267 desc.
add<
bool>(
"relative")->setComment(
"compute relative isolation instead of absolute one");
271 ->setComment(
"txt file containing effective areas to be used for mini-isolation pileup subtraction");
273 ->setComment(
"rho to be used for effective-area based mini-isolation pileup subtraction");
278 "txt file containing effective areas to be used for PF-isolation pileup subtraction for electrons");
280 ->setComment(
"rho to be used for effective-area based PF-isolation pileup subtraction for electrons");
283 desc.
add<
edm::InputTag>(
"mapIsoChg")->setComment(
"input charged PF isolation calculated in VID for photons");
284 desc.
add<
edm::InputTag>(
"mapIsoNeu")->setComment(
"input neutral PF isolation calculated in VID for photons");
285 desc.
add<
edm::InputTag>(
"mapIsoPho")->setComment(
"input photon PF isolation calculated in VID for photons");
288 "txt file containing effective areas to be used for charged PF-isolation pileup subtraction for photons");
291 "txt file containing effective areas to be used for neutral PF-isolation pileup subtraction for photons");
294 "txt file containing effective areas to be used for photon PF-isolation pileup subtraction for photons");
296 ->setComment(
"rho to be used for effective-area based PF-isolation pileup subtraction for photons");
306 modname +=
"IsoTrack";
307 modname +=
"IsoValueMapProducer";
308 descriptions.
add(modname, desc);
T getParameter(std::string const &) const
Analysis-level Photon class.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
IsoValueMapProducer(const edm::ParameterSet &iConfig)
IsoValueMapProducer< pat::Muon > MuonIsoValueMapProducer
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< double > rho_pfiso_
void insert(const H &h, I begin, I end)
void doPFIsoEle(edm::Event &) const
reco::SuperClusterRef superCluster() const override
override the superCluster method from CaloJet, to access the internal storage of the supercluster ...
IsoValueMapProducer< pat::Photon > PhoIsoValueMapProducer
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
~IsoValueMapProducer() override
#define DEFINE_FWK_MODULE(type)
void doMiniIso(edm::Event &) const
IsoValueMapProducer< pat::IsolatedTrack > IsoTrackIsoValueMapProducer
ParameterDescriptionBase * add(U const &iLabel, T const &value)
IsoValueMapProducer< pat::Electron > EleIsoValueMapProducer
std::unique_ptr< EffectiveAreas > ea_pfiso_chg_
std::unique_ptr< EffectiveAreas > ea_pfiso_pho_
edm::EDGetTokenT< edm::View< T > > src_
std::unique_ptr< EffectiveAreas > ea_pfiso_neu_
Analysis-level electron class.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
float getEtaForEA(const T *) const
void doPFIsoPho(edm::Event &) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::EDGetTokenT< double > rho_miniiso_
std::unique_ptr< EffectiveAreas > ea_pfiso_
std::unique_ptr< EffectiveAreas > ea_miniiso_
Analysis-level muon class.
reco::SuperClusterRef superCluster() const override
override the reco::GsfElectron::superCluster method, to access the internal storage of the superclust...
Power< A, B >::type pow(const A &a, const B &b)