CMS 3D CMS Logo

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

#include <PuppiPhoton.h>

Inheritance diagram for PuppiPhoton:
edm::stream::EDProducer<>

Public Types

typedef edm::View< reco::CandidateCandidateView
 
typedef math::XYZTLorentzVector LorentzVector
 
typedef std::vector< LorentzVectorLorentzVectorCollection
 
typedef std::vector< reco::PFCandidatePFOutputCollection
 
typedef edm::View< reco::PFCandidatePFView
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

 PuppiPhoton (const edm::ParameterSet &)
 
 ~PuppiPhoton () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

bool matchPFCandidate (const reco::Candidate *iPF, const reco::Candidate *iPho)
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::unique_ptr< PFOutputCollectioncorrCandidates_
 
std::vector< double > dRMatch_
 
double eta_
 
std::vector< int32_t > pdgIds_
 
double pt_
 
edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
 
bool runOnMiniAOD_
 
edm::EDGetTokenT< CandidateViewtokenPFCandidates_
 
edm::EDGetTokenT< CandidateViewtokenPhotonCandidates_
 
edm::EDGetTokenT< edm::ValueMap< bool > > tokenPhotonId_
 
edm::EDGetTokenT< CandidateViewtokenPuppiCandidates_
 
edm::EDGetTokenT< edm::ValueMap< float > > tokenWeights_
 
bool usePFphotons_
 
bool usePFRef_
 
bool usePhotonId_
 
bool useValueMap_
 
double weight_
 

Detailed Description

Definition at line 20 of file PuppiPhoton.h.

Member Typedef Documentation

Definition at line 28 of file PuppiPhoton.h.

Definition at line 26 of file PuppiPhoton.h.

Definition at line 27 of file PuppiPhoton.h.

Definition at line 29 of file PuppiPhoton.h.

Definition at line 30 of file PuppiPhoton.h.

Constructor & Destructor Documentation

PuppiPhoton::PuppiPhoton ( const edm::ParameterSet iConfig)
explicit

Definition at line 27 of file PuppiPhoton.cc.

References dRMatch_, eta_, edm::ParameterSet::getParameter(), pdgIds_, pt_, reco2pf_, runOnMiniAOD_, tokenPFCandidates_, tokenPhotonCandidates_, tokenPhotonId_, tokenPuppiCandidates_, tokenWeights_, usePFphotons_, usePFRef_, usePhotonId_, useValueMap_, and weight_.

27  {
28  tokenPFCandidates_ = consumes<CandidateView>(iConfig.getParameter<edm::InputTag>("candName"));
29  tokenPuppiCandidates_ = consumes<CandidateView>(iConfig.getParameter<edm::InputTag>("puppiCandName"));
30  usePFphotons_ = iConfig.getParameter<bool>("usePFphotons");
31  if (!usePFphotons_)
32  tokenPhotonCandidates_ = consumes<CandidateView>(iConfig.getParameter<edm::InputTag>("photonName"));
33  usePhotonId_ = !(iConfig.getParameter<edm::InputTag>("photonId")).label().empty();
34  if (usePhotonId_)
35  tokenPhotonId_ = consumes<edm::ValueMap<bool>>(iConfig.getParameter<edm::InputTag>("photonId"));
36  runOnMiniAOD_ = iConfig.getParameter<bool>("runOnMiniAOD");
37  if (!runOnMiniAOD_)
38  reco2pf_ =
39  consumes<edm::ValueMap<std::vector<reco::PFCandidateRef>>>(iConfig.getParameter<edm::InputTag>("recoToPFMap"));
40  useValueMap_ = iConfig.getParameter<bool>("useValueMap");
41  if (useValueMap_)
42  tokenWeights_ = consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("weightsName"));
43 
44  pt_ = iConfig.getParameter<double>("pt");
45  eta_ = iConfig.getParameter<double>("eta");
46  dRMatch_ = iConfig.getParameter<std::vector<double>>("dRMatch");
47  pdgIds_ = iConfig.getParameter<std::vector<int32_t>>("pdgids");
48  usePFRef_ = iConfig.getParameter<bool>("useRefs");
49  weight_ = iConfig.getParameter<double>("weight");
50  produces<PFOutputCollection>();
51  produces<edm::ValueMap<reco::CandidatePtr>>();
52 }
std::vector< int32_t > pdgIds_
Definition: PuppiPhoton.h:48
double pt_
Definition: PuppiPhoton.h:41
T getParameter(std::string const &) const
bool runOnMiniAOD_
Definition: PuppiPhoton.h:45
bool usePFRef_
Definition: PuppiPhoton.h:43
bool usePFphotons_
Definition: PuppiPhoton.h:44
edm::EDGetTokenT< edm::ValueMap< float > > tokenWeights_
Definition: PuppiPhoton.h:39
edm::EDGetTokenT< edm::ValueMap< bool > > tokenPhotonId_
Definition: PuppiPhoton.h:40
edm::EDGetTokenT< CandidateView > tokenPFCandidates_
Definition: PuppiPhoton.h:35
bool usePhotonId_
Definition: PuppiPhoton.h:46
double weight_
Definition: PuppiPhoton.h:50
double eta_
Definition: PuppiPhoton.h:42
edm::EDGetTokenT< CandidateView > tokenPuppiCandidates_
Definition: PuppiPhoton.h:36
std::vector< double > dRMatch_
Definition: PuppiPhoton.h:47
edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
Definition: PuppiPhoton.h:38
bool useValueMap_
Definition: PuppiPhoton.h:51
edm::EDGetTokenT< CandidateView > tokenPhotonCandidates_
Definition: PuppiPhoton.h:37
PuppiPhoton::~PuppiPhoton ( )
override

Definition at line 54 of file PuppiPhoton.cc.

54 {}

Member Function Documentation

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

Definition at line 236 of file PuppiPhoton.cc.

References edm::ConfigurationDescriptions::addDefault(), DEFINE_FWK_MODULE, and edm::ParameterSetDescription::setUnknown().

236  {
237  //The following says we do not know what parameters are allowed so do no validation
238  // Please change this to state exactly what you do use, even if it is no parameters
240  desc.setUnknown();
241  descriptions.addDefault(desc);
242 }
void addDefault(ParameterSetDescription const &psetDescription)
bool PuppiPhoton::matchPFCandidate ( const reco::Candidate iPF,
const reco::Candidate iPho 
)
private

Definition at line 225 of file PuppiPhoton.cc.

References funct::abs(), PbPb_ZMuSkimMuonDPG_cff::deltaR, dRMatch_, reco::Candidate::eta(), reco::Candidate::pdgId(), pdgIds_, and reco::Candidate::phi().

Referenced by produce().

225  {
226  if (iPF->pdgId() != iPho->pdgId())
227  return false;
228  double lDR = deltaR(iPF->eta(), iPF->phi(), iPho->eta(), iPho->phi());
229  for (unsigned int i0 = 0; i0 < pdgIds_.size(); i0++) {
230  if (std::abs(iPF->pdgId()) == pdgIds_[i0] && lDR < dRMatch_[i0])
231  return true;
232  }
233  return false;
234 }
std::vector< int32_t > pdgIds_
Definition: PuppiPhoton.h:48
virtual int pdgId() const =0
PDG identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual double eta() const =0
momentum pseudorapidity
std::vector< double > dRMatch_
Definition: PuppiPhoton.h:47
virtual double phi() const =0
momentum azimuthal angle
void PuppiPhoton::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 56 of file PuppiPhoton.cc.

References funct::abs(), pat::Electron::associatedPackedPFCandidates(), pat::Photon::associatedPackedPFCandidates(), edm::View< T >::begin(), ALCARECOTkAlJpsiMuMu_cff::charge, corrCandidates_, edm::View< T >::end(), HCALHighEnergyHPDFilter_cfi::energy, eta_, edm::helper::Filler< Map >::fill(), trigObjTnPSource_cfi::filler, edm::Event::getByToken(), triggerObjects_cff::id, edm::helper::Filler< Map >::insert(), matchPFCandidate(), eostools::move(), p4, EgammaValidation_cff::pdgId, edm::Handle< T >::product(), DiDispStaMuonMonitor_cfi::pt, pt_, edm::View< T >::ptrAt(), edm::Event::put(), multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, reco2pf_, edm::View< T >::refAt(), runOnMiniAOD_, reco::LeafCandidate::setP4(), reco::PFCandidate::setSourceCandidatePtr(), edm::View< T >::size(), tokenPFCandidates_, tokenPhotonCandidates_, tokenPhotonId_, tokenPuppiCandidates_, tokenWeights_, reco::PFCandidate::translatePdgIdToType(), usePFphotons_, usePFRef_, usePhotonId_, useValueMap_, contentValuesCheck::values, and weight_.

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

56  {
57  int iC = -1;
58  std::vector<const reco::Candidate *> phoCands;
59  std::vector<uint16_t> phoIndx;
60 
62  if (!runOnMiniAOD_)
63  iEvent.getByToken(reco2pf_, reco2pf);
64 
65  // Get PFCandidate Collection
66  edm::Handle<CandidateView> hPFProduct;
67  iEvent.getByToken(tokenPFCandidates_, hPFProduct);
68  const CandidateView *pfCol = hPFProduct.product();
69 
70  edm::Handle<CandidateView> hPuppiProduct;
71  iEvent.getByToken(tokenPuppiCandidates_, hPuppiProduct);
72  const CandidateView *pupCol = hPuppiProduct.product();
73  if (usePFphotons_) {
74  for (const auto &pho : *pfCol) {
75  iC++;
76  if (pho.pt() < pt_)
77  continue;
78  if (std::abs(pho.pdgId()) != 22)
79  continue;
80  if (fabs(pho.eta()) < eta_) {
81  phoIndx.push_back(iC);
82  phoCands.push_back(&pho);
83  }
84  }
85  } else {
86  edm::Handle<CandidateView> hPhoProduct;
87  iEvent.getByToken(tokenPhotonCandidates_, hPhoProduct);
88  const CandidateView *phoCol = hPhoProduct.product();
89 
91  if (usePhotonId_)
92  iEvent.getByToken(tokenPhotonId_, photonId);
93 
94  for (CandidateView::const_iterator itPho = phoCol->begin(); itPho != phoCol->end(); itPho++) {
95  iC++;
96  bool passObject = false;
97  if (itPho->isPhoton() && usePhotonId_)
98  passObject = (*photonId)[phoCol->ptrAt(iC)];
99  if (itPho->pt() < pt_)
100  continue;
101  if (!passObject && usePhotonId_)
102  continue;
103  if (runOnMiniAOD_) {
104  const pat::Photon *pPho = dynamic_cast<const pat::Photon *>(&(*itPho));
105  if (pPho != nullptr) {
107  if (fabs(ref->eta()) < eta_) {
108  phoIndx.push_back(ref.key());
109  phoCands.push_back(&(*(pfCol->ptrAt(ref.key()))));
110  }
111  }
112  continue;
113  }
114  const pat::Electron *pElectron = dynamic_cast<const pat::Electron *>(&(*itPho));
115  if (pElectron != nullptr) {
117  if (fabs(ref->eta()) < eta_) {
118  phoIndx.push_back(ref.key());
119  phoCands.push_back(&(*(pfCol->ptrAt(ref.key()))));
120  }
121  }
122  } else {
123  for (const edm::Ref<std::vector<reco::PFCandidate>> &ref : (*reco2pf)[phoCol->ptrAt(iC)]) {
124  if (fabs(ref->eta()) < eta_) {
125  phoIndx.push_back(ref.key());
126  phoCands.push_back(&(*(pfCol->ptrAt(ref.key()))));
127  }
128  }
129  }
130  }
131  }
132  //Get Weights
134  if (useValueMap_)
135  iEvent.getByToken(tokenWeights_, pupWeights);
136  std::unique_ptr<edm::ValueMap<LorentzVector>> p4PupOut(new edm::ValueMap<LorentzVector>());
137  LorentzVectorCollection puppiP4s;
138  std::vector<reco::CandidatePtr> values(hPFProduct->size());
139  int iPF = 0;
140  std::vector<float> lWeights;
141  static const reco::PFCandidate dummySinceTranslateIsNotStatic;
143  std::set<int> foundPhoIndex;
144  for (CandidateView::const_iterator itPF = pupCol->begin(); itPF != pupCol->end(); itPF++) {
145  auto id = dummySinceTranslateIsNotStatic.translatePdgIdToType(itPF->pdgId());
146  const reco::PFCandidate *pPF = dynamic_cast<const reco::PFCandidate *>(&(*itPF));
147  reco::PFCandidate pCand(pPF ? *pPF : reco::PFCandidate(itPF->charge(), itPF->p4(), id));
148  LorentzVector pVec = itPF->p4();
149  float pWeight = 1.;
150  if (useValueMap_)
151  pWeight = (*pupWeights)[pupCol->ptrAt(iPF)];
152  if (!usePFRef_) {
153  int iPho = -1;
154  for (std::vector<const reco::Candidate *>::iterator itPho = phoCands.begin(); itPho != phoCands.end(); itPho++) {
155  iPho++;
156  if ((!matchPFCandidate(&(*itPF), *itPho)) || (foundPhoIndex.count(iPho) != 0))
157  continue;
158  pWeight = weight_;
159  if (!useValueMap_ && itPF->pt() != 0)
160  pWeight = pWeight * (phoCands[iPho]->pt() / itPF->pt());
161  if (!useValueMap_ && itPF->pt() == 0)
162  pVec.SetPxPyPzE(phoCands[iPho]->px() * pWeight,
163  phoCands[iPho]->py() * pWeight,
164  phoCands[iPho]->pz() * pWeight,
165  phoCands[iPho]->energy() * pWeight);
166  foundPhoIndex.insert(iPho);
167  }
168  } else {
169  int iPho = -1;
170  for (std::vector<uint16_t>::const_iterator itPho = phoIndx.begin(); itPho != phoIndx.end(); itPho++) {
171  iPho++;
172  if (pupCol->refAt(iPF).key() != *itPho)
173  continue;
174  pWeight = weight_;
175  if (!useValueMap_ && itPF->pt() != 0)
176  pWeight = pWeight * (phoCands[iPho]->pt() / itPF->pt());
177  if (!useValueMap_ && itPF->pt() == 0)
178  pVec.SetPxPyPzE(phoCands[iPho]->px() * pWeight,
179  phoCands[iPho]->py() * pWeight,
180  phoCands[iPho]->pz() * pWeight,
181  phoCands[iPho]->energy() * pWeight);
182  foundPhoIndex.insert(iPho);
183  }
184  }
185  if (itPF->pt() != 0)
186  pVec.SetPxPyPzE(itPF->px() * pWeight, itPF->py() * pWeight, itPF->pz() * pWeight, itPF->energy() * pWeight);
187 
188  lWeights.push_back(pWeight);
189  pCand.setP4(pVec);
190  puppiP4s.push_back(pVec);
191  pCand.setSourceCandidatePtr(itPF->sourceCandidatePtr(0));
192  corrCandidates_->push_back(pCand);
193  iPF++;
194  }
195  //Add the missing pfcandidates
196  for (unsigned int iPho = 0; iPho < phoCands.size(); iPho++) {
197  if (foundPhoIndex.count(iPho) != 0)
198  continue;
199  auto id = dummySinceTranslateIsNotStatic.translatePdgIdToType(phoCands[iPho]->pdgId());
200  reco::PFCandidate pCand(reco::PFCandidate(phoCands[iPho]->charge(), phoCands[iPho]->p4(), id));
201  pCand.setSourceCandidatePtr(phoCands[iPho]->sourceCandidatePtr(0));
202  LorentzVector pVec = phoCands[iPho]->p4();
203  pVec.SetPxPyPzE(phoCands[iPho]->px() * weight_,
204  phoCands[iPho]->py() * weight_,
205  phoCands[iPho]->pz() * weight_,
206  phoCands[iPho]->energy() * weight_);
207  pCand.setP4(pVec);
208  lWeights.push_back(weight_);
209  puppiP4s.push_back(pVec);
210  corrCandidates_->push_back(pCand);
211  }
212  //Fill it into the event
214  for (unsigned int ic = 0, nc = pupCol->size(); ic < nc; ++ic) {
215  reco::CandidatePtr pkref(oh, ic);
216  values[ic] = pkref;
217  }
218  std::unique_ptr<edm::ValueMap<reco::CandidatePtr>> pfMap_p(new edm::ValueMap<reco::CandidatePtr>());
220  filler.insert(hPFProduct, values.begin(), values.end());
221  filler.fill();
222  iEvent.put(std::move(pfMap_p));
223 }
double pt_
Definition: PuppiPhoton.h:41
Analysis-level Photon class.
Definition: Photon.h:46
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
bool runOnMiniAOD_
Definition: PuppiPhoton.h:45
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::RefVector< pat::PackedCandidateCollection > associatedPackedPFCandidates() const
References to PFCandidates linked to this object (e.g. for isolation vetos or masking before jet recl...
size_type size() const
edm::View< reco::Candidate > CandidateView
Definition: PuppiPhoton.h:28
bool usePFRef_
Definition: PuppiPhoton.h:43
bool usePFphotons_
Definition: PuppiPhoton.h:44
double p4[4]
Definition: TauolaWrapper.h:92
edm::EDGetTokenT< edm::ValueMap< float > > tokenWeights_
Definition: PuppiPhoton.h:39
edm::EDGetTokenT< edm::ValueMap< bool > > tokenPhotonId_
Definition: PuppiPhoton.h:40
edm::EDGetTokenT< CandidateView > tokenPFCandidates_
Definition: PuppiPhoton.h:35
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZTLorentzVector LorentzVector
bool matchPFCandidate(const reco::Candidate *iPF, const reco::Candidate *iPho)
Definition: PuppiPhoton.cc:225
bool usePhotonId_
Definition: PuppiPhoton.h:46
std::vector< LorentzVector > LorentzVectorCollection
double weight_
Definition: PuppiPhoton.h:50
double eta_
Definition: PuppiPhoton.h:42
std::vector< reco::PFCandidate > PFOutputCollection
Definition: PuppiPhoton.h:29
T const * product() const
Definition: Handle.h:69
Analysis-level electron class.
Definition: Electron.h:51
ParticleType translatePdgIdToType(int pdgid) const
Definition: PFCandidate.cc:209
edm::EDGetTokenT< CandidateView > tokenPuppiCandidates_
Definition: PuppiPhoton.h:36
std::unique_ptr< PFOutputCollection > corrCandidates_
Definition: PuppiPhoton.h:49
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
Definition: PuppiPhoton.h:38
edm::RefVector< pat::PackedCandidateCollection > associatedPackedPFCandidates() const
References to PFCandidates linked to this object (e.g. for isolation vetos or masking before jet recl...
def move(src, dest)
Definition: eostools.py:511
bool useValueMap_
Definition: PuppiPhoton.h:51
edm::EDGetTokenT< CandidateView > tokenPhotonCandidates_
Definition: PuppiPhoton.h:37

Member Data Documentation

std::unique_ptr<PFOutputCollection> PuppiPhoton::corrCandidates_
private

Definition at line 49 of file PuppiPhoton.h.

Referenced by produce().

std::vector<double> PuppiPhoton::dRMatch_
private

Definition at line 47 of file PuppiPhoton.h.

Referenced by matchPFCandidate(), and PuppiPhoton().

double PuppiPhoton::eta_
private

Definition at line 42 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

std::vector<int32_t> PuppiPhoton::pdgIds_
private

Definition at line 48 of file PuppiPhoton.h.

Referenced by matchPFCandidate(), and PuppiPhoton().

double PuppiPhoton::pt_
private

Definition at line 41 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<edm::ValueMap<std::vector<reco::PFCandidateRef> > > PuppiPhoton::reco2pf_
private

Definition at line 38 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

bool PuppiPhoton::runOnMiniAOD_
private

Definition at line 45 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<CandidateView> PuppiPhoton::tokenPFCandidates_
private

Definition at line 35 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<CandidateView> PuppiPhoton::tokenPhotonCandidates_
private

Definition at line 37 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<edm::ValueMap<bool> > PuppiPhoton::tokenPhotonId_
private

Definition at line 40 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<CandidateView> PuppiPhoton::tokenPuppiCandidates_
private

Definition at line 36 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

edm::EDGetTokenT<edm::ValueMap<float> > PuppiPhoton::tokenWeights_
private

Definition at line 39 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

bool PuppiPhoton::usePFphotons_
private

Definition at line 44 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

bool PuppiPhoton::usePFRef_
private

Definition at line 43 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

bool PuppiPhoton::usePhotonId_
private

Definition at line 46 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

bool PuppiPhoton::useValueMap_
private

Definition at line 51 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().

double PuppiPhoton::weight_
private

Definition at line 50 of file PuppiPhoton.h.

Referenced by produce(), and PuppiPhoton().