CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
EgammaHLTPFNeutralIsolationProducer Class Reference

#include <EgammaHLTPFNeutralIsolationProducer.h>

Inheritance diagram for EgammaHLTPFNeutralIsolationProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 EgammaHLTPFNeutralIsolationProducer (const edm::ParameterSet &)
 
void produce (edm::StreamID sid, edm::Event &, const edm::EventSetup &) const override
 
 ~EgammaHLTPFNeutralIsolationProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

bool doRhoCorrection_
 
double drMax_
 
double drVetoBarrel_
 
double drVetoEndcap_
 
float effectiveAreaBarrel_
 
float effectiveAreaEndcap_
 
edm::EDGetTokenT< reco::ElectronCollectionelectronProducer_
 
double energyBarrel_
 
double energyEndcap_
 
double etaStripBarrel_
 
double etaStripEndcap_
 
edm::EDGetTokenT< reco::PFCandidateCollectionpfCandidateProducer_
 
int pfToUse_
 
edm::EDGetTokenT< reco::RecoEcalCandidateCollectionrecoEcalCandidateProducer_
 
float rhoMax_
 
edm::EDGetTokenT< double > rhoProducer_
 
float rhoScale_
 
bool useSCRefs_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 32 of file EgammaHLTPFNeutralIsolationProducer.h.

Constructor & Destructor Documentation

EgammaHLTPFNeutralIsolationProducer::EgammaHLTPFNeutralIsolationProducer ( const edm::ParameterSet config)
explicit
Author
Matteo Sani (UCSD)

$Id:

Definition at line 26 of file EgammaHLTPFNeutralIsolationProducer.cc.

References doRhoCorrection_, drMax_, drVetoBarrel_, drVetoEndcap_, effectiveAreaBarrel_, effectiveAreaEndcap_, electronProducer_, energyBarrel_, energyEndcap_, etaStripBarrel_, etaStripEndcap_, edm::ParameterSet::getParameter(), pfCandidateProducer_, pfToUse_, recoEcalCandidateProducer_, rhoMax_, rhoProducer_, rhoScale_, and useSCRefs_.

26  {
27 
28  pfCandidateProducer_ = consumes<reco::PFCandidateCollection>(config.getParameter<edm::InputTag>("pfCandidatesProducer"));
29 
30  useSCRefs_ = config.getParameter<bool>("useSCRefs");
31 
32  drMax_ = config.getParameter<double>("drMax");
33  drVetoBarrel_ = config.getParameter<double>("drVetoBarrel");
34  drVetoEndcap_ = config.getParameter<double>("drVetoEndcap");
35  etaStripBarrel_ = config.getParameter<double>("etaStripBarrel");
36  etaStripEndcap_ = config.getParameter<double>("etaStripEndcap");
37  energyBarrel_ = config.getParameter<double>("energyBarrel");
38  energyEndcap_ = config.getParameter<double>("energyEndcap");
39  pfToUse_ = config.getParameter<int>("pfCandidateType");
40 
41  doRhoCorrection_ = config.getParameter<bool>("doRhoCorrection");
42  if (doRhoCorrection_)
43  rhoProducer_ = consumes<double>(config.getParameter<edm::InputTag>("rhoProducer"));
44 
45  rhoMax_ = config.getParameter<double>("rhoMax");
46  rhoScale_ = config.getParameter<double>("rhoScale");
47  effectiveAreaBarrel_ = config.getParameter<double>("effectiveAreaBarrel");
48  effectiveAreaEndcap_ = config.getParameter<double>("effectiveAreaEndcap");
49 
50  if(useSCRefs_) {
51  produces < reco::RecoEcalCandidateIsolationMap >();
52  recoEcalCandidateProducer_ = consumes<reco::RecoEcalCandidateCollection>(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"));
53  } else {
54  produces < reco::ElectronIsolationMap >();
55  electronProducer_ = consumes<reco::ElectronCollection>(config.getParameter<edm::InputTag>("electronProducer"));
56  }
57 }
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidateProducer_
edm::EDGetTokenT< reco::ElectronCollection > electronProducer_
EgammaHLTPFNeutralIsolationProducer::~EgammaHLTPFNeutralIsolationProducer ( )
inlineoverride

Definition at line 35 of file EgammaHLTPFNeutralIsolationProducer.h.

References fillDescriptions().

35 {};

Member Function Documentation

void EgammaHLTPFNeutralIsolationProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 59 of file EgammaHLTPFNeutralIsolationProducer.cc.

References edm::ConfigurationDescriptions::add(), and edm::ParameterSetDescription::add().

59  {
61  desc.add<edm::InputTag>("electronProducer", edm::InputTag("hltEle27WP80PixelMatchElectronsL1SeededPF"));
62  desc.add<edm::InputTag>("recoEcalCandidateProducer", edm::InputTag("hltL1SeededRecoEcalCandidatePF"));
63  desc.add<edm::InputTag>("pfCandidatesProducer", edm::InputTag("hltParticleFlowReg"));
64  desc.add<edm::InputTag>("rhoProducer", edm::InputTag("fixedGridRhoFastjetAllCalo"));
65  desc.add<bool>("doRhoCorrection", false);
66  desc.add<double>("rhoMax", 9.9999999E7);
67  desc.add<double>("rhoScale", 1.0);
68  desc.add<double>("effectiveAreaBarrel", 0.101);
69  desc.add<double>("effectiveAreaEndcap", 0.046);
70  desc.add<bool>("useSCRefs", false);
71  desc.add<double>("drMax", 0.3);
72  desc.add<double>("drVetoBarrel", 0.0);
73  desc.add<double>("drVetoEndcap", 0.0);
74  desc.add<double>("etaStripBarrel", 0.0);
75  desc.add<double>("etaStripEndcap", 0.0);
76  desc.add<double>("energyBarrel", 0.0);
77  desc.add<double>("energyEndcap", 0.0);
78  desc.add<int>("pfCandidateType", 5);
79  descriptions.add(("hltEgammaHLTPFNeutralIsolationProducer"), desc);
80 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void EgammaHLTPFNeutralIsolationProducer::produce ( edm::StreamID  sid,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
override

Definition at line 82 of file EgammaHLTPFNeutralIsolationProducer.cc.

References boostedElectronIsolation_cff::deltaR, particleFlow_cfi::dEta, doRhoCorrection_, drMax_, drVetoBarrel_, drVetoEndcap_, effectiveAreaBarrel_, effectiveAreaEndcap_, electronProducer_, reco::LeafCandidate::energy(), energyBarrel_, energyEndcap_, etaStripBarrel_, etaStripEndcap_, edm::Event::getByToken(), mps_fire::i, edm::AssociationMap< Tag >::insert(), reco::LeafCandidate::momentum(), reco::PFCandidate::particleId(), pfCandidateProducer_, pfToUse_, edm::Handle< T >::product(), reco::LeafCandidate::pt(), edm::Event::put(), recoEcalCandidateProducer_, rho, rhoMax_, rhoProducer_, rhoScale_, useSCRefs_, and reco::PFCandidate::vertex().

82  {
83 
84  edm::Handle<double> rhoHandle;
85  double rho = 0.0;
86  if (doRhoCorrection_) {
87  iEvent.getByToken(rhoProducer_, rhoHandle);
88  rho = *(rhoHandle.product());
89  }
90 
91  if (rho > rhoMax_)
92  rho = rhoMax_;
93 
94  rho = rho*rhoScale_;
95 
99 
100  iEvent.getByToken(pfCandidateProducer_, pfHandle);
101  const reco::PFCandidateCollection* forIsolation = pfHandle.product();
102 
103  if(useSCRefs_) {
104 
105  iEvent.getByToken(recoEcalCandidateProducer_,recoecalcandHandle);
106  reco::RecoEcalCandidateIsolationMap recoEcalCandMap(recoecalcandHandle);
107 
108  float dRVeto = -1.;
109  float etaStrip = -1;
110 
111  for (unsigned int iReco = 0; iReco < recoecalcandHandle->size(); iReco++) {
112  reco::RecoEcalCandidateRef candRef(recoecalcandHandle, iReco);
113 
114  if (fabs(candRef->eta()) < 1.479) {
115  dRVeto = drVetoBarrel_;
116  etaStrip = etaStripBarrel_;
117  } else {
118  dRVeto = drVetoEndcap_;
119  etaStrip = etaStripEndcap_;
120  }
121 
122  float sum = 0;
123 
124  // Loop over the PFCandidates
125  for(unsigned i=0; i<forIsolation->size(); i++) {
126  const reco::PFCandidate& pfc = (*forIsolation)[i];
127 
128  //require that the PFCandidate is a neutral hadron
129  if (pfc.particleId() == pfToUse_) {
130 
131  if (fabs(candRef->eta()) < 1.479) {
132  if (fabs(pfc.pt()) < energyBarrel_)
133  continue;
134  } else {
135  if (fabs(pfc.energy()) < energyEndcap_)
136  continue;
137  }
138 
139  // Shift the RecoEcalCandidate direction vector according to the PF vertex
140  const math::XYZPoint& pfvtx = pfc.vertex();
141  math::XYZVector candDirectionWrtVtx(candRef->superCluster()->x() - pfvtx.x(),
142  candRef->superCluster()->y() - pfvtx.y(),
143  candRef->superCluster()->z() - pfvtx.z());
144 
145  float dEta = fabs(candDirectionWrtVtx.Eta() - pfc.momentum().Eta());
146  if(dEta < etaStrip) continue;
147 
148  float dR = deltaR(candDirectionWrtVtx.Eta(), candDirectionWrtVtx.Phi(), pfc.momentum().Eta(), pfc.momentum().Phi());
149  if(dR > drMax_ || dR < dRVeto) continue;
150 
151  sum += pfc.pt();
152  }
153  }
154 
155  if (doRhoCorrection_) {
156  if (fabs(candRef->eta()) < 1.479)
157  sum = sum - rho*effectiveAreaBarrel_;
158  else
159  sum = sum - rho*effectiveAreaEndcap_;
160  }
161 
162  recoEcalCandMap.insert(candRef, sum);
163  }
164  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(recoEcalCandMap));
165 
166  } else {
167 
168  iEvent.getByToken(electronProducer_,electronHandle);
169  reco::ElectronIsolationMap eleMap(electronHandle);
170 
171  float dRVeto = -1.;
172  float etaStrip = -1;
173 
174  for(unsigned int iEl=0; iEl<electronHandle->size(); iEl++) {
175  reco::ElectronRef eleRef(electronHandle, iEl);
176 
177  if (fabs(eleRef->eta()) < 1.479) {
178  dRVeto = drVetoBarrel_;
179  etaStrip = etaStripBarrel_;
180  } else {
181  dRVeto = drVetoEndcap_;
182  etaStrip = etaStripEndcap_;
183  }
184 
185  float sum = 0;
186 
187  // Loop over the PFCandidates
188  for(unsigned i=0; i<forIsolation->size(); i++) {
189  const reco::PFCandidate& pfc = (*forIsolation)[i];
190 
191  //require that the PFCandidate is a neutral hadron
192  if (pfc.particleId() == pfToUse_) {
193 
194  if (fabs(eleRef->eta()) < 1.479) {
195  if (fabs(pfc.pt()) < energyBarrel_)
196  continue;
197  } else {
198  if (fabs(pfc.energy()) < energyEndcap_)
199  continue;
200  }
201 
202  float dEta = fabs(eleRef->eta() - pfc.momentum().Eta());
203  if(dEta < etaStrip) continue;
204 
205  float dR = deltaR(eleRef->eta(), eleRef->phi(), pfc.momentum().Eta(), pfc.momentum().Phi());
206  if(dR > drMax_ || dR < dRVeto) continue;
207 
208  sum += pfc.pt();
209  }
210  }
211 
212  if (doRhoCorrection_) {
213  if (fabs(eleRef->superCluster()->eta()) < 1.479)
214  sum = sum - rho*effectiveAreaBarrel_;
215  else
216  sum = sum - rho*effectiveAreaEndcap_;
217  }
218 
219  eleMap.insert(eleRef, sum);
220  }
221  iEvent.put(std::make_unique<reco::ElectronIsolationMap>(eleMap));
222  }
223 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
double pt() const final
transverse momentum
edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_
const Point & vertex() const override
vertex position (overwritten by PF...)
Definition: PFCandidate.cc:656
Vector momentum() const final
spatial momentum vector
edm::EDGetTokenT< reco::PFCandidateCollection > pfCandidateProducer_
edm::EDGetTokenT< reco::ElectronCollection > electronProducer_
double energy() const final
energy
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
T const * product() const
Definition: Handle.h:74
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
virtual ParticleType particleId() const
Definition: PFCandidate.h:374

Member Data Documentation

bool EgammaHLTPFNeutralIsolationProducer::doRhoCorrection_
private
double EgammaHLTPFNeutralIsolationProducer::drMax_
private
double EgammaHLTPFNeutralIsolationProducer::drVetoBarrel_
private
double EgammaHLTPFNeutralIsolationProducer::drVetoEndcap_
private
float EgammaHLTPFNeutralIsolationProducer::effectiveAreaBarrel_
private
float EgammaHLTPFNeutralIsolationProducer::effectiveAreaEndcap_
private
edm::EDGetTokenT<reco::ElectronCollection> EgammaHLTPFNeutralIsolationProducer::electronProducer_
private
double EgammaHLTPFNeutralIsolationProducer::energyBarrel_
private
double EgammaHLTPFNeutralIsolationProducer::energyEndcap_
private
double EgammaHLTPFNeutralIsolationProducer::etaStripBarrel_
private
double EgammaHLTPFNeutralIsolationProducer::etaStripEndcap_
private
edm::EDGetTokenT<reco::PFCandidateCollection> EgammaHLTPFNeutralIsolationProducer::pfCandidateProducer_
private
int EgammaHLTPFNeutralIsolationProducer::pfToUse_
private
edm::EDGetTokenT<reco::RecoEcalCandidateCollection> EgammaHLTPFNeutralIsolationProducer::recoEcalCandidateProducer_
private
float EgammaHLTPFNeutralIsolationProducer::rhoMax_
private
edm::EDGetTokenT<double> EgammaHLTPFNeutralIsolationProducer::rhoProducer_
private
float EgammaHLTPFNeutralIsolationProducer::rhoScale_
private
bool EgammaHLTPFNeutralIsolationProducer::useSCRefs_
private