CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
PhotonIDValueMapProducer Class Reference
Inheritance diagram for PhotonIDValueMapProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 PhotonIDValueMapProducer (const edm::ParameterSet &)
 
 ~PhotonIDValueMapProducer () 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
 
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)
 
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 Member Functions

float computeWorstPFChargedIsolation (const reco::Photon &photon, const edm::View< reco::Candidate > &pfCands, const reco::VertexCollection &vertices, const reco::Vertex &pv, unsigned char options, bool isAOD) const
 
void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 

Private Attributes

const MultiTokenT< EcalRecHitCollectionebRecHits_
 
const MultiTokenT< EcalRecHitCollectioneeRecHits_
 
const MultiTokenT< EcalRecHitCollectionesRecHits_
 
const edm::EDGetToken particleBasedIsolationToken_
 
const MultiTokenT< edm::View< reco::Candidate > > pfCandsToken_
 
const MultiTokenT< edm::View< reco::Photon > > src_
 
const bool usesES_
 
const MultiTokenT< reco::VertexCollectionvtxToken_
 

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 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 81 of file PhotonIDValueMapProducer.cc.

Constructor & Destructor Documentation

PhotonIDValueMapProducer::PhotonIDValueMapProducer ( const edm::ParameterSet cfg)
explicit

Definition at line 159 of file PhotonIDValueMapProducer.cc.

References mps_fire::i, nVars_, and edm::ProductRegistryHelper::produces().

160  : usesES_(!cfg.getParameter<edm::InputTag>("esReducedRecHitCollection").label().empty()
161  || !cfg.getParameter<edm::InputTag>("esReducedRecHitCollectionMiniAOD").label().empty())
162  , src_( consumesCollector(), cfg, "src", "srcMiniAOD")
163  , ebRecHits_ (src_, consumesCollector(), cfg, "ebReducedRecHitCollection", "ebReducedRecHitCollectionMiniAOD")
164  , eeRecHits_ (src_, consumesCollector(), cfg, "eeReducedRecHitCollection", "eeReducedRecHitCollectionMiniAOD")
165  , esRecHits_ (src_, consumesCollector(), cfg, "esReducedRecHitCollection", "esReducedRecHitCollectionMiniAOD")
166  , vtxToken_ (src_, consumesCollector(), cfg, "vertices", "verticesMiniAOD")
167  , pfCandsToken_(src_, consumesCollector(), cfg, "pfCandidates", "pfCandidatesMiniAOD")
168  , particleBasedIsolationToken_(mayConsume<edm::ValueMap<std::vector<reco::PFCandidateRef>>>(
169  cfg.getParameter<edm::InputTag>("particleBasedIsolation")) /* ...only for AOD... */ )
170 {
171 
172  // Declare producibles
173  for (int i = 0; i < nVars_; ++i)
175 }
BranchAliasSetterT< ProductType > produces()
declare what type of product will make and with which optional label
T getParameter(std::string const &) const
const MultiTokenT< EcalRecHitCollection > esRecHits_
const MultiTokenT< EcalRecHitCollection > ebRecHits_
const MultiTokenT< edm::View< reco::Photon > > src_
const std::string names[nVars_]
const MultiTokenT< EcalRecHitCollection > eeRecHits_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::string const & label() const
Definition: InputTag.h:36
const edm::EDGetToken particleBasedIsolationToken_
const MultiTokenT< edm::View< reco::Candidate > > pfCandsToken_
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
const MultiTokenT< reco::VertexCollection > vtxToken_
PhotonIDValueMapProducer::~PhotonIDValueMapProducer ( )
inlineoverride

Member Function Documentation

float PhotonIDValueMapProducer::computeWorstPFChargedIsolation ( const reco::Photon photon,
const edm::View< reco::Candidate > &  pfCands,
const reco::VertexCollection vertices,
const reco::Vertex pv,
unsigned char  options,
bool  isAOD 
) const
private

Definition at line 372 of file PhotonIDValueMapProducer.cc.

References DEFINE_FWK_MODULE, reco::deltaR2(), dRvetoEndcap, reco::PFCandidate::h, reco::Photon::isEB(), SiStripPI::max, ptMin, edm::View< T >::size(), reco::Photon::superCluster(), and badGlobalMuonTaggersAOD_cff::vtx.

Referenced by produce().

374 {
375  float worstIsolation = 0.0;
376 
377  const float dRveto = photon.isEB() ? dRvetoBarrel : dRvetoEndcap;
378 
379  std::vector<CachingPtrCandidate> chargedCands;
380  chargedCands.reserve(pfCands.size());
381  for (auto const& aCand : pfCands){
382 
383  // require that PFCandidate is a charged hadron
384  reco::PFCandidate::ParticleType thisCandidateType = getCandidatePdgId(&aCand, isAOD);
385  if (thisCandidateType != reco::PFCandidate::h)
386  continue;
387 
388  if ((options & PT_MIN_THRESH) && aCand.pt() < ptMin)
389  continue;
390 
391  chargedCands.emplace_back(&aCand, isAOD);
392  }
393 
394  // Calculate isolation sum separately for each vertex
395  for (unsigned int ivtx = 0; ivtx < vertices.size(); ++ivtx) {
396 
397  // Shift the photon according to the vertex
398  const reco::VertexRef vtx(&vertices, ivtx);
399  math::XYZVector phoWrtVtx(photon.superCluster()->x() - vtx->x(),
400  photon.superCluster()->y() - vtx->y(), photon.superCluster()->z() - vtx->z());
401 
402  float sum = 0;
403  // Loop over the PFCandidates
404  for (auto const& aCCand : chargedCands) {
405 
406  float dxy = -999;
407  float dz = -999;
408  if (options & PV_CONSTRAINT)
409  getImpactParameters(aCCand, pv, dxy, dz);
410  else
411  getImpactParameters(aCCand, *vtx, dxy, dz);
412 
413  if (fabs(dxy) > dxyMax || fabs(dz) > dzMax)
414  continue;
415 
416  auto iCand = aCCand.candidate;
417  float dR2 = deltaR2(phoWrtVtx.Eta(), phoWrtVtx.Phi(), iCand->eta(), iCand->phi());
418  if (dR2 > coneSizeDR * coneSizeDR ||
419  (options & DR_VETO && dR2 < dRveto * dRveto))
420  continue;
421 
422  sum += iCand->pt();
423  }
424 
425  worstIsolation = std::max(sum, worstIsolation);
426  }
427 
428  return worstIsolation;
429 }
float dRvetoEndcap
const unsigned char DR_VETO
ParticleType
particle types
Definition: PFCandidate.h:45
const unsigned char PV_CONSTRAINT
size_type size() const
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
const unsigned char PT_MIN_THRESH
float coneSizeDR
float dRvetoBarrel
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
bool isEB() const
Definition: Photon.h:121
void PhotonIDValueMapProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 350 of file PhotonIDValueMapProducer.cc.

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

350  {
351  // photonIDValueMapProducer
353  desc.add<edm::InputTag>("particleBasedIsolation", edm::InputTag("particleBasedIsolation","gedPhotons"));
354  desc.add<edm::InputTag>("src", edm::InputTag("gedPhotons"));
355  desc.add<edm::InputTag>("srcMiniAOD", edm::InputTag("slimmedPhotons","","@skipCurrentProcess"));
356  desc.add<edm::InputTag>("esReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedESRecHits"));
357  desc.add<edm::InputTag>("eeReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsEE"));
358  desc.add<edm::InputTag>("pfCandidates", edm::InputTag("particleFlow"));
359  desc.add<edm::InputTag>("vertices", edm::InputTag("offlinePrimaryVertices"));
360  desc.add<edm::InputTag>("ebReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedEBRecHits"));
361  desc.add<edm::InputTag>("eeReducedRecHitCollectionMiniAOD", edm::InputTag("reducedEgamma","reducedEERecHits"));
362  desc.add<edm::InputTag>("esReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsES"));
363  desc.add<edm::InputTag>("pfCandidatesMiniAOD", edm::InputTag("packedPFCandidates"));
364  desc.add<edm::InputTag>("verticesMiniAOD", edm::InputTag("offlineSlimmedPrimaryVertices"));
365  desc.add<edm::InputTag>("ebReducedRecHitCollection", edm::InputTag("reducedEcalRecHitsEB"));
366  descriptions.add("photonIDValueMapProducer", desc);
367 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void PhotonIDValueMapProducer::produce ( edm::StreamID  ,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overrideprivate

Definition at line 177 of file PhotonIDValueMapProducer.cc.

References computeWorstPFChargedIsolation(), reco::deltaR2(), DR_VETO, ebRecHits_, eeRecHits_, esRecHits_, Exception, f, reco::PFCandidate::gamma, edm::Event::getByToken(), MultiTokenT< T >::getGoodTokenIndex(), MultiTokenT< T >::getValidHandle(), reco::PFCandidate::h, reco::PFCandidate::h0, mps_fire::i, iEvent, edm::isNotFinite(), nVars_, particleBasedIsolationToken_, pfCandsToken_, PV_CONSTRAINT, mathSSE::sqrt(), TrackRefitter_38T_cff::src, src_, PFTauMVAInputDiscriminatorTranslator_cfi::test, usesES_, electrons_cff::vertices, vtxToken_, writeValueMap(), reco::Vertex::x(), reco::Vertex::y(), and reco::Vertex::z().

178 {
179  // Get the handles
180  auto src = src_.getValidHandle(iEvent);
181  auto vertices = vtxToken_.getValidHandle(iEvent);
182  auto pfCandsHandle = pfCandsToken_.getValidHandle(iEvent);
183 
184  bool isAOD = src_.getGoodTokenIndex() == 0;
186  if (isAOD) { // this exists only in AOD
187  iEvent.getByToken(particleBasedIsolationToken_, particleBasedIsolationMap);
188  } else if (!src->empty()) {
189  edm::Ptr<pat::Photon> test(src->ptrAt(0));
190  if (test.isNull() || !test.isAvailable()) {
191  throw cms::Exception("InvalidConfiguration")
192  << "DataFormat is detected as miniAOD but cannot cast to pat::Photon!";
193  }
194  }
195 
196  // Configure Lazy Tools, which will compute 5x5 quantities
197  std::unique_ptr<noZS::EcalClusterLazyTools> lazyToolnoZS;
198 
199  if (usesES_) {
200  lazyToolnoZS = std::make_unique<noZS::EcalClusterLazyTools>(
201  iEvent, iSetup, ebRecHits_.get(iEvent), eeRecHits_.get(iEvent), esRecHits_.get(iEvent));
202  } else {
203  lazyToolnoZS = std::make_unique<noZS::EcalClusterLazyTools>(
204  iEvent, iSetup, ebRecHits_.get(iEvent), eeRecHits_.get(iEvent));
205  }
206 
207  // Get PV
208  if (vertices->empty())
209  return; // skip the event if no PV found
210  const reco::Vertex& pv = vertices->front();
211 
212  std::vector<float> vars[nVars_];
213 
214  // reco::Photon::superCluster() is virtual so we can exploit polymorphism
215  for (unsigned i = 0; i < src->size(); ++i) {
216  const auto& iPho = src->ptrAt(i);
217 
218  //
219  // Compute full 5x5 quantities
220  //
221  const auto& theseed = *(iPho->superCluster()->seed());
222 
223  // For full5x5_sigmaIetaIeta, for 720 we use: lazy tools for AOD,
224  // and userFloats or lazy tools for miniAOD. From some point in 72X and on, one can
225  // retrieve the full5x5 directly from the object with ->full5x5_sigmaIetaIeta()
226  // for both formats.
227  std::vector<float> vCov = lazyToolnoZS->localCovariances(theseed);
228  vars[0].push_back(edm::isNotFinite(vCov[0]) ? 0. : sqrt(vCov[0]));
229  vars[1].push_back(vCov[1]);
230  vars[2].push_back(lazyToolnoZS->e1x3(theseed));
231  vars[3].push_back(lazyToolnoZS->e2x2(theseed));
232  vars[4].push_back(lazyToolnoZS->e2x5Max(theseed));
233  vars[5].push_back(lazyToolnoZS->e5x5(theseed));
234  vars[6].push_back(lazyToolnoZS->eseffsirir(*(iPho->superCluster())));
235  vars[7].push_back(vars[2][i] / vars[5][i]);
236  vars[8].push_back(vars[3][i] / vars[5][i]);
237  vars[9].push_back(vars[4][i] / vars[5][i]);
238 
239  //
240  // Compute absolute uncorrected isolations with footprint removal
241  //
242 
243  // First, find photon direction with respect to the good PV
244  math::XYZVector phoWrtVtx(
245  iPho->superCluster()->x() - pv.x(), iPho->superCluster()->y() - pv.y(), iPho->superCluster()->z() - pv.z());
246 
247  // isolation sums
248  float chargedIsoSum = 0.;
249  float neutralHadronIsoSum = 0.;
250  float photonIsoSum = 0.;
251 
252  // Loop over all PF candidates
253  for (unsigned int idxcand = 0; idxcand < pfCandsHandle->size(); ++idxcand) {
254 
255  // Here, the type will be a simple reco::Candidate. We cast it
256  // for full PFCandidate or PackedCandidate below as necessary
257  const auto& iCand = pfCandsHandle->ptrAt(idxcand);
258 
259  // One would think that we should check that this iCand from the
260  // generic PF collection is not identical to the iPho photon for
261  // which we are computing the isolations. However, it turns out to
262  // be unnecessary. Below, in the function isInFootprint(), we drop
263  // this iCand if it is in the footprint, and this always removes
264  // the iCand if it matches the iPho. The explicit check at this
265  // point is not totally trivial because of non-triviality of
266  // implementation of this check for miniAOD (PackedCandidates of
267  // the PF collection do not contain the supercluser link, so can't
268  // use that).
269  //
270  // if( isAOD ) {
271  // if( ((const edm::Ptr<reco::PFCandidate>)iCand)->superClusterRef() == iPho->superCluster() )
272  // continue;
273  // }
274 
275  // Check if this candidate is within the isolation cone
276  float dR2 = deltaR2(phoWrtVtx.Eta(), phoWrtVtx.Phi(), iCand->eta(), iCand->phi());
277  if (dR2 > coneSizeDR * coneSizeDR)
278  continue;
279 
280  // Check if this candidate is not in the footprint
281  if (isAOD) {
282  if(isInFootprint((*particleBasedIsolationMap)[iPho], iCand))
283  continue;
284  } else {
286  if(isInFootprint(patPhotonPtr->associatedPackedPFCandidates(), iCand))
287  continue;
288  }
289 
290  // Find candidate type
291  reco::PFCandidate::ParticleType thisCandidateType = getCandidatePdgId(&*iCand, isAOD);
292 
293  // Increment the appropriate isolation sum
294  if (thisCandidateType == reco::PFCandidate::h) {
295  // for charged hadrons, additionally check consistency
296  // with the PV
297  float dxy = -999;
298  float dz = -999;
299 
300  getImpactParameters(CachingPtrCandidate(&*iCand, isAOD), pv, dxy, dz);
301 
302  if (fabs(dxy) > dxyMax || fabs(dz) > dzMax)
303  continue;
304 
305  // The candidate is eligible, increment the isolaiton
306  chargedIsoSum += iCand->pt();
307  }
308 
309  if (thisCandidateType == reco::PFCandidate::h0)
310  neutralHadronIsoSum += iCand->pt();
311 
312  if (thisCandidateType == reco::PFCandidate::gamma)
313  photonIsoSum += iCand->pt();
314  }
315 
316  vars[10].push_back(chargedIsoSum);
317  vars[11].push_back(neutralHadronIsoSum);
318  vars[12].push_back(photonIsoSum);
319 
320  // Worst isolation computed with no vetos or ptMin cut, as in Run 1 Hgg code.
321  unsigned char options = 0;
322  vars[13].push_back(computeWorstPFChargedIsolation(*iPho, *pfCandsHandle, *vertices, pv, options, isAOD));
323 
324  // Worst isolation computed with cone vetos and a ptMin cut, as in Run 2 Hgg code.
325  options |= PT_MIN_THRESH | DR_VETO;
326  vars[14].push_back(computeWorstPFChargedIsolation(*iPho, *pfCandsHandle, *vertices, pv, options, isAOD));
327 
328  // Like before, but adding primary vertex constraint
329  options |= PV_CONSTRAINT;
330  vars[15].push_back(computeWorstPFChargedIsolation(*iPho, *pfCandsHandle, *vertices, pv, options, isAOD));
331 
332  // PFCluster Isolations
333  vars[16].push_back(iPho->trkSumPtSolidConeDR04());
334  if (isAOD) {
335  vars[17].push_back(0.f);
336  vars[18].push_back(0.f);
337  } else {
339  vars[17].push_back(patPhotonPtr->hcalPFClusterIso());
340  vars[18].push_back(patPhotonPtr->ecalPFClusterIso());
341  }
342  }
343 
344  // write the value maps
345  for (int i = 0; i < nVars_; ++i) {
346  writeValueMap(iEvent, src, vars[i], names[i]);
347  }
348 }
const unsigned char DR_VETO
float computeWorstPFChargedIsolation(const reco::Photon &photon, const edm::View< reco::Candidate > &pfCands, const reco::VertexCollection &vertices, const reco::Vertex &pv, unsigned char options, bool isAOD) const
ParticleType
particle types
Definition: PFCandidate.h:45
const unsigned char PV_CONSTRAINT
const MultiTokenT< EcalRecHitCollection > esRecHits_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
double y() const
y coordinate
Definition: Vertex.h:113
const MultiTokenT< EcalRecHitCollection > ebRecHits_
const MultiTokenT< edm::View< reco::Photon > > src_
const std::string names[nVars_]
void writeValueMap(edm::Event &iEvent, const edm::Handle< HandleType > &handle, const std::vector< ValueType > &values, const std::string &label)
Definition: Utils.h:13
const MultiTokenT< EcalRecHitCollection > eeRecHits_
const unsigned char PT_MIN_THRESH
int iEvent
Definition: GenABIO.cc:230
bool isNotFinite(T x)
Definition: isFinite.h:10
float coneSizeDR
T sqrt(T t)
Definition: SSEVec.h:18
def pv(vc)
Definition: MetAnalyzer.py:6
double z() const
z coordinate
Definition: Vertex.h:115
double f[11][100]
edm::Handle< T > getValidHandle(const edm::Event &iEvent) const
Definition: MultiToken.h:95
double x() const
x coordinate
Definition: Vertex.h:111
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
edm::Ptr< pat::Photon > patPhotonPtr
int getGoodTokenIndex() const
Definition: MultiToken.h:147
const edm::EDGetToken particleBasedIsolationToken_
vars
Definition: DeepTauId.cc:77
const MultiTokenT< edm::View< reco::Candidate > > pfCandsToken_
const MultiTokenT< reco::VertexCollection > vtxToken_

Member Data Documentation

const MultiTokenT<EcalRecHitCollection> PhotonIDValueMapProducer::ebRecHits_
private

Definition at line 110 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const MultiTokenT<EcalRecHitCollection> PhotonIDValueMapProducer::eeRecHits_
private

Definition at line 111 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const MultiTokenT<EcalRecHitCollection> PhotonIDValueMapProducer::esRecHits_
private

Definition at line 112 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const edm::EDGetToken PhotonIDValueMapProducer::particleBasedIsolationToken_
private

Definition at line 115 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const MultiTokenT<edm::View<reco::Candidate> > PhotonIDValueMapProducer::pfCandsToken_
private

Definition at line 114 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const MultiTokenT<edm::View<reco::Photon> > PhotonIDValueMapProducer::src_
private

Definition at line 109 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const bool PhotonIDValueMapProducer::usesES_
private

Definition at line 106 of file PhotonIDValueMapProducer.cc.

Referenced by produce().

const MultiTokenT<reco::VertexCollection> PhotonIDValueMapProducer::vtxToken_
private

Definition at line 113 of file PhotonIDValueMapProducer.cc.

Referenced by produce().