CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PuppiProducer.cc
Go to the documentation of this file.
23 
24 #include <memory>
25 
26 // ------------------------------------------------------------------------------------------
28 public:
29  explicit PuppiProducer(const edm::ParameterSet&);
30  ~PuppiProducer() override;
31 
32  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
34  typedef std::vector<LorentzVector> LorentzVectorCollection;
37  typedef std::vector<reco::PFCandidate> PFInputCollection;
38  typedef std::vector<reco::PFCandidate> PFOutputCollection;
39  typedef std::vector<pat::PackedCandidate> PackedOutputCollection;
42 
43 private:
44  virtual void beginJob();
45  void produce(edm::Event&, const edm::EventSetup&) override;
46  virtual void endJob();
47 
74  bool fUseDZ;
75  double fDZCut;
76  double fEtaMinUseDZ;
77  double fPtMaxCharged;
79  double fPtMaxPhotons;
86  double fVtxZCut;
88  std::unique_ptr<PuppiContainer> fPuppiContainer;
89  std::vector<RecoObj> fRecoObjCollection;
90 };
91 
92 // ------------------------------------------------------------------------------------------
94  fPuppiDiagnostics = iConfig.getParameter<bool>("puppiDiagnostics");
95  fPuppiNoLep = iConfig.getParameter<bool>("puppiNoLep");
96  fUseFromPVLooseTight = iConfig.getParameter<bool>("UseFromPVLooseTight");
97  fUseDZ = iConfig.getParameter<bool>("UseDeltaZCut");
98  fDZCut = iConfig.getParameter<double>("DeltaZCut");
99  fEtaMinUseDZ = iConfig.getParameter<double>("EtaMinUseDeltaZ");
100  fPtMaxCharged = iConfig.getParameter<double>("PtMaxCharged");
101  fEtaMaxCharged = iConfig.getParameter<double>("EtaMaxCharged");
102  fPtMaxPhotons = iConfig.getParameter<double>("PtMaxPhotons");
103  fEtaMaxPhotons = iConfig.getParameter<double>("EtaMaxPhotons");
104  fNumOfPUVtxsForCharged = iConfig.getParameter<uint>("NumOfPUVtxsForCharged");
105  fDZCutForChargedFromPUVtxs = iConfig.getParameter<double>("DeltaZCutForChargedFromPUVtxs");
106  fUseExistingWeights = iConfig.getParameter<bool>("useExistingWeights");
107  fClonePackedCands = iConfig.getParameter<bool>("clonePackedCands");
108  fVtxNdofCut = iConfig.getParameter<int>("vtxNdofCut");
109  fVtxZCut = iConfig.getParameter<double>("vtxZCut");
110  fPuppiContainer = std::make_unique<PuppiContainer>(iConfig);
111 
112  tokenPFCandidates_ = consumes<CandidateView>(iConfig.getParameter<edm::InputTag>("candName"));
113  tokenVertices_ = consumes<VertexCollection>(iConfig.getParameter<edm::InputTag>("vertexName"));
114  fUseVertexAssociation = iConfig.getParameter<bool>("useVertexAssociation");
115  vertexAssociationQuality_ = iConfig.getParameter<int>("vertexAssociationQuality");
116  if (fUseVertexAssociation) {
117  tokenVertexAssociation_ = consumes<CandToVertex>(iConfig.getParameter<edm::InputTag>("vertexAssociation"));
119  consumes<edm::ValueMap<int>>(iConfig.getParameter<edm::InputTag>("vertexAssociation"));
120  }
121 
122  fUsePUProxyValue = iConfig.getParameter<bool>("usePUProxyValue");
123 
124  if (fUsePUProxyValue) {
125  puProxyValueToken_ = consumes<double>(iConfig.getParameter<edm::InputTag>("PUProxyValue"));
126  }
127 
128  ptokenPupOut_ = produces<edm::ValueMap<float>>();
129  ptokenP4PupOut_ = produces<edm::ValueMap<LorentzVector>>();
130  ptokenValues_ = produces<edm::ValueMap<reco::CandidatePtr>>();
131 
132  if (fUseExistingWeights || fClonePackedCands)
133  ptokenPackedPuppiCandidates_ = produces<pat::PackedCandidateCollection>();
134  else {
135  ptokenPuppiCandidates_ = produces<reco::PFCandidateCollection>();
136  }
137 
138  if (fPuppiDiagnostics) {
139  ptokenNalgos_ = produces<double>("PuppiNAlgos");
140  ptokenRawAlphas_ = produces<std::vector<double>>("PuppiRawAlphas");
141  ptokenAlphas_ = produces<std::vector<double>>("PuppiAlphas");
142  ptokenAlphasMed_ = produces<std::vector<double>>("PuppiAlphasMed");
143  ptokenAlphasRms_ = produces<std::vector<double>>("PuppiAlphasRms");
144  }
145 }
146 // ------------------------------------------------------------------------------------------
148 // ------------------------------------------------------------------------------------------
150  // Get PFCandidate Collection
151  edm::Handle<CandidateView> hPFProduct;
152  iEvent.getByToken(tokenPFCandidates_, hPFProduct);
153  const CandidateView* pfCol = hPFProduct.product();
154 
155  // Get vertex collection w/PV as the first entry?
157  iEvent.getByToken(tokenVertices_, hVertexProduct);
158  const reco::VertexCollection* pvCol = hVertexProduct.product();
159 
161  edm::ValueMap<int> associationQuality;
163  associatedPV = iEvent.get(tokenVertexAssociation_);
164  associationQuality = iEvent.get(tokenVertexAssociationQuality_);
165  }
166 
167  double puProxyValue = 0.;
168  if (fUsePUProxyValue) {
169  puProxyValue = iEvent.get(puProxyValueToken_);
170  } else {
171  for (auto const& vtx : *pvCol) {
172  if (!vtx.isFake() && vtx.ndof() >= fVtxNdofCut && std::abs(vtx.z()) <= fVtxZCut)
173  ++puProxyValue;
174  }
175  }
176 
177  std::vector<double> lWeights;
178  if (!fUseExistingWeights) {
179  //Fill the reco objects
180  fRecoObjCollection.clear();
181  fRecoObjCollection.reserve(pfCol->size());
182  int iCand = 0;
183  for (auto const& aPF : *pfCol) {
184  RecoObj pReco;
185  pReco.pt = aPF.pt();
186  pReco.eta = aPF.eta();
187  pReco.phi = aPF.phi();
188  pReco.m = aPF.mass();
189  pReco.rapidity = aPF.rapidity();
190  pReco.charge = aPF.charge();
191  pReco.pdgId = aPF.pdgId();
192  const reco::Vertex* closestVtx = nullptr;
193  double pDZ = -9999;
194  double pD0 = -9999;
195  uint pVtxId = 0;
196  bool isLepton = ((std::abs(pReco.pdgId) == 11) || (std::abs(pReco.pdgId) == 13));
197  const pat::PackedCandidate* lPack = dynamic_cast<const pat::PackedCandidate*>(&aPF);
198 
199  if (fUseVertexAssociation) {
200  const reco::VertexRef& PVOrig = associatedPV[reco::CandidatePtr(hPFProduct, iCand)];
201  int quality = associationQuality[reco::CandidatePtr(hPFProduct, iCand)];
202  if (PVOrig.isNonnull() && (quality >= vertexAssociationQuality_)) {
203  closestVtx = PVOrig.get();
204  pVtxId = PVOrig.key();
205  }
206  if (std::abs(pReco.charge) == 0)
207  pReco.id = 0;
208  else if (fPuppiNoLep && isLepton)
209  pReco.id = 3;
210  else if (closestVtx != nullptr && pVtxId == 0)
211  pReco.id = 1; // Associated to main vertex
212  else if (closestVtx != nullptr && pVtxId > 0)
213  pReco.id = 2; // Associated to PU
214  else
215  pReco.id = 0; // Unassociated
216  } else if (lPack == nullptr) {
217  const reco::PFCandidate* pPF = dynamic_cast<const reco::PFCandidate*>(&aPF);
218  double curdz = 9999;
219  int closestVtxForUnassociateds = -9999;
220  const reco::TrackRef aTrackRef = pPF->trackRef();
221  bool lFirst = true;
222  for (auto const& aV : *pvCol) {
223  if (lFirst) {
224  if (aTrackRef.isNonnull()) {
225  pDZ = aTrackRef->dz(aV.position());
226  pD0 = aTrackRef->d0();
227  } else if (pPF->gsfTrackRef().isNonnull()) {
228  pDZ = pPF->gsfTrackRef()->dz(aV.position());
229  pD0 = pPF->gsfTrackRef()->d0();
230  }
231  lFirst = false;
232  if (pDZ > -9999)
233  pVtxId = 0;
234  }
235  if (aTrackRef.isNonnull() && aV.trackWeight(pPF->trackRef()) > 0) {
236  closestVtx = &aV;
237  break;
238  }
239  // in case it's unassocciated, keep more info
240  double tmpdz = 99999;
241  if (aTrackRef.isNonnull())
242  tmpdz = aTrackRef->dz(aV.position());
243  else if (pPF->gsfTrackRef().isNonnull())
244  tmpdz = pPF->gsfTrackRef()->dz(aV.position());
245  if (std::abs(tmpdz) < curdz) {
246  curdz = std::abs(tmpdz);
247  closestVtxForUnassociateds = pVtxId;
248  }
249  pVtxId++;
250  }
251  int tmpFromPV = 0;
252  // mocking the miniAOD definitions
253  if (std::abs(pReco.charge) > 0) {
254  if (closestVtx != nullptr && pVtxId > 0)
255  tmpFromPV = 0;
256  if (closestVtx != nullptr && pVtxId == 0)
257  tmpFromPV = 3;
258  if (closestVtx == nullptr && closestVtxForUnassociateds == 0)
259  tmpFromPV = 2;
260  if (closestVtx == nullptr && closestVtxForUnassociateds != 0)
261  tmpFromPV = 1;
262  }
263  pReco.dZ = pDZ;
264  pReco.d0 = pD0;
265  pReco.id = 0;
266  if (std::abs(pReco.charge) == 0) {
267  pReco.id = 0;
268  } else {
269  if (fPuppiNoLep && isLepton)
270  pReco.id = 3;
271  else if (tmpFromPV == 0) {
272  pReco.id = 2;
273  if (fNumOfPUVtxsForCharged > 0 and (pVtxId <= fNumOfPUVtxsForCharged) and
275  pReco.id = 1;
276  } else if (tmpFromPV == 3)
277  pReco.id = 1;
278  else if (tmpFromPV == 1 || tmpFromPV == 2) {
279  pReco.id = 0;
280  if ((fPtMaxCharged > 0) and (pReco.pt > fPtMaxCharged))
281  pReco.id = 1;
282  else if (std::abs(pReco.eta) > fEtaMaxCharged)
283  pReco.id = 1;
284  else if ((fUseDZ) && (std::abs(pReco.eta) >= fEtaMinUseDZ))
285  pReco.id = (std::abs(pDZ) < fDZCut) ? 1 : 2;
286  else if (fUseFromPVLooseTight && tmpFromPV == 1)
287  pReco.id = 2;
288  else if (fUseFromPVLooseTight && tmpFromPV == 2)
289  pReco.id = 1;
290  }
291  }
292  } else if (lPack->vertexRef().isNonnull()) {
293  pDZ = lPack->dz();
294  pD0 = lPack->dxy();
295  pReco.dZ = pDZ;
296  pReco.d0 = pD0;
297 
298  pReco.id = 0;
299  if (std::abs(pReco.charge) == 0) {
300  pReco.id = 0;
301  }
302  if (std::abs(pReco.charge) > 0) {
303  if (fPuppiNoLep && isLepton) {
304  pReco.id = 3;
305  } else if (lPack->fromPV() == 0) {
306  pReco.id = 2;
308  for (size_t puVtx_idx = 1; puVtx_idx <= fNumOfPUVtxsForCharged && puVtx_idx < pvCol->size();
309  ++puVtx_idx) {
310  if (lPack->fromPV(puVtx_idx) >= 2) {
311  pReco.id = 1;
312  break;
313  }
314  }
315  }
316  } else if (lPack->fromPV() == (pat::PackedCandidate::PVUsedInFit)) {
317  pReco.id = 1;
318  } else if (lPack->fromPV() == (pat::PackedCandidate::PVTight) ||
319  lPack->fromPV() == (pat::PackedCandidate::PVLoose)) {
320  pReco.id = 0;
321  if ((fPtMaxCharged > 0) and (pReco.pt > fPtMaxCharged))
322  pReco.id = 1;
323  else if (std::abs(pReco.eta) > fEtaMaxCharged)
324  pReco.id = 1;
325  else if ((fUseDZ) && (std::abs(pReco.eta) >= fEtaMinUseDZ))
326  pReco.id = (std::abs(pDZ) < fDZCut) ? 1 : 2;
328  pReco.id = 2;
330  pReco.id = 1;
331  }
332  }
333  }
334 
335  fRecoObjCollection.push_back(pReco);
336  iCand++;
337  }
338 
339  fPuppiContainer->initialize(fRecoObjCollection);
340  fPuppiContainer->setPUProxy(puProxyValue);
341 
342  //Compute the weights and get the particles
343  lWeights = fPuppiContainer->puppiWeights();
344  } else {
345  //Use the existing weights
346  int lPackCtr = 0;
347  for (auto const& aPF : *pfCol) {
348  const pat::PackedCandidate* lPack = dynamic_cast<const pat::PackedCandidate*>(&aPF);
349  float curpupweight = -1.;
350  if (lPack == nullptr) {
351  // throw error
353  "PuppiProducer: cannot get weights since inputs are not PackedCandidates");
354  } else {
355  if (fPuppiNoLep) {
356  curpupweight = lPack->puppiWeightNoLep();
357  } else {
358  curpupweight = lPack->puppiWeight();
359  }
360  }
361  // Protect high pT photons (important for gamma to hadronic recoil balance)
362  if ((fPtMaxPhotons > 0) && (lPack->pdgId() == 22) && (std::abs(lPack->eta()) < fEtaMaxPhotons) &&
363  (lPack->pt() > fPtMaxPhotons))
364  curpupweight = 1;
365  lWeights.push_back(curpupweight);
366  lPackCtr++;
367  }
368  }
369 
370  //Fill it into the event
371  edm::ValueMap<float> lPupOut;
372  edm::ValueMap<float>::Filler lPupFiller(lPupOut);
373  lPupFiller.insert(hPFProduct, lWeights.begin(), lWeights.end());
374  lPupFiller.fill();
375 
376  // This is a dummy to access the "translate" method which is a
377  // non-static member function even though it doesn't need to be.
378  // Will fix in the future.
379  static const reco::PFCandidate dummySinceTranslateIsNotStatic;
380 
381  // Fill a new PF/Packed Candidate Collection and write out the ValueMap of the new p4s.
382  // Since the size of the ValueMap must be equal to the input collection, we need
383  // to search the "puppi" particles to find a match for each input. If none is found,
384  // the input is set to have a four-vector of 0,0,0,0
385  PFOutputCollection fPuppiCandidates;
386  PackedOutputCollection fPackedPuppiCandidates;
387 
389  LorentzVectorCollection puppiP4s;
390  std::vector<reco::CandidatePtr> values(hPFProduct->size());
391 
392  int iCand = -1;
393  for (auto const& aCand : *hPFProduct) {
394  ++iCand;
395  std::unique_ptr<pat::PackedCandidate> pCand;
396  std::unique_ptr<reco::PFCandidate> pfCand;
397 
399  const pat::PackedCandidate* cand = dynamic_cast<const pat::PackedCandidate*>(&aCand);
400  if (!cand)
401  throw edm::Exception(edm::errors::LogicError, "PuppiProducer: inputs are not PackedCandidates");
402  pCand = std::make_unique<pat::PackedCandidate>(*cand);
403  } else {
404  auto id = dummySinceTranslateIsNotStatic.translatePdgIdToType(aCand.pdgId());
405  const reco::PFCandidate* cand = dynamic_cast<const reco::PFCandidate*>(&aCand);
406  pfCand = std::make_unique<reco::PFCandidate>(cand ? *cand : reco::PFCandidate(aCand.charge(), aCand.p4(), id));
407  }
408 
409  // Here, we are using new weights computed and putting them in the packed candidates.
411  if (fPuppiNoLep)
412  pCand->setPuppiWeight(pCand->puppiWeight(), lWeights[iCand]);
413  else
414  pCand->setPuppiWeight(lWeights[iCand], pCand->puppiWeightNoLep());
415  }
416 
417  puppiP4s.emplace_back(lWeights[iCand] * aCand.px(),
418  lWeights[iCand] * aCand.py(),
419  lWeights[iCand] * aCand.pz(),
420  lWeights[iCand] * aCand.energy());
421 
422  // Here, we are using existing weights, or we're using packed candidates.
423  // That is, whether or not we recomputed the weights, we store the
424  // source candidate appropriately, and set the p4 of the packed candidate.
426  pCand->setP4(puppiP4s.back());
427  pCand->setSourceCandidatePtr(aCand.sourceCandidatePtr(0));
428  fPackedPuppiCandidates.push_back(*pCand);
429  } else {
430  pfCand->setP4(puppiP4s.back());
431  pfCand->setSourceCandidatePtr(aCand.sourceCandidatePtr(0));
432  fPuppiCandidates.push_back(*pfCand);
433  }
434  }
435 
436  //Compute the modified p4s
437  edm::ValueMap<LorentzVector>::Filler p4PupFiller(p4PupOut);
438  p4PupFiller.insert(hPFProduct, puppiP4s.begin(), puppiP4s.end());
439  p4PupFiller.fill();
440 
441  iEvent.emplace(ptokenPupOut_, lPupOut);
442  iEvent.emplace(ptokenP4PupOut_, p4PupOut);
445  iEvent.emplace(ptokenPackedPuppiCandidates_, fPackedPuppiCandidates);
446  for (unsigned int ic = 0, nc = oh->size(); ic < nc; ++ic) {
447  reco::CandidatePtr pkref(oh, ic);
448  values[ic] = pkref;
449  }
450  } else {
452  for (unsigned int ic = 0, nc = oh->size(); ic < nc; ++ic) {
453  reco::CandidatePtr pkref(oh, ic);
454  values[ic] = pkref;
455  }
456  }
459  filler.insert(hPFProduct, values.begin(), values.end());
460  filler.fill();
461  iEvent.emplace(ptokenValues_, pfMap_p);
462 
465  // all the different alphas per particle
466  // THE alpha per particle
467  std::vector<double> theAlphas(fPuppiContainer->puppiAlphas());
468  std::vector<double> theAlphasMed(fPuppiContainer->puppiAlphasMed());
469  std::vector<double> theAlphasRms(fPuppiContainer->puppiAlphasRMS());
470  std::vector<double> alphas(fPuppiContainer->puppiRawAlphas());
471  double nalgos(fPuppiContainer->puppiNAlgos());
472 
473  iEvent.emplace(ptokenRawAlphas_, alphas);
474  iEvent.emplace(ptokenNalgos_, nalgos);
475  iEvent.emplace(ptokenAlphas_, theAlphas);
476  iEvent.emplace(ptokenAlphasMed_, theAlphasMed);
477  iEvent.emplace(ptokenAlphasRms_, theAlphasRms);
478  }
479 }
480 
481 // ------------------------------------------------------------------------------------------
483 // ------------------------------------------------------------------------------------------
485 // ------------------------------------------------------------------------------------------
488  desc.add<bool>("puppiDiagnostics", false);
489  desc.add<bool>("puppiNoLep", false);
490  desc.add<bool>("UseFromPVLooseTight", false);
491  desc.add<bool>("UseDeltaZCut", true);
492  desc.add<double>("DeltaZCut", 0.3);
493  desc.add<double>("EtaMinUseDeltaZ", 0.);
494  desc.add<double>("PtMaxCharged", -1.);
495  desc.add<double>("EtaMaxCharged", 99999.);
496  desc.add<double>("PtMaxPhotons", -1.);
497  desc.add<double>("EtaMaxPhotons", 2.5);
498  desc.add<double>("PtMaxNeutrals", 200.);
499  desc.add<double>("PtMaxNeutralsStartSlope", 0.);
500  desc.add<uint>("NumOfPUVtxsForCharged", 0);
501  desc.add<double>("DeltaZCutForChargedFromPUVtxs", 0.2);
502  desc.add<bool>("useExistingWeights", false);
503  desc.add<bool>("clonePackedCands", false);
504  desc.add<int>("vtxNdofCut", 4);
505  desc.add<double>("vtxZCut", 24);
506  desc.add<edm::InputTag>("candName", edm::InputTag("particleFlow"));
507  desc.add<edm::InputTag>("vertexName", edm::InputTag("offlinePrimaryVertices"));
508  desc.add<bool>("useVertexAssociation", false);
509  desc.add<int>("vertexAssociationQuality", 0);
510  desc.add<edm::InputTag>("vertexAssociation", edm::InputTag(""));
511  desc.add<bool>("applyCHS", true);
512  desc.add<bool>("invertPuppi", false);
513  desc.add<bool>("useExp", false);
514  desc.add<double>("MinPuppiWeight", .01);
515  desc.add<bool>("usePUProxyValue", false);
516  desc.add<edm::InputTag>("PUProxyValue", edm::InputTag(""));
517 
519 
520  descriptions.add("PuppiProducer", desc);
521 }
522 //define this as a plug-in
float puppiWeight() const
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
std::vector< reco::PFCandidate > PFInputCollection
bool fUseFromPVLooseTight
edm::EDPutTokenT< pat::PackedCandidateCollection > ptokenPackedPuppiCandidates_
std::string fPFName
edm::EDPutTokenT< std::vector< double > > ptokenAlphasMed_
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
edm::EDGetTokenT< PuppiContainer > tokenPuppiContainer_
float puppiWeightNoLep() const
Weight from full PUPPI.
uint16_t *__restrict__ id
float d0
Definition: RecoObj.h:37
double fDZCutForChargedFromPUVtxs
virtual void endJob()
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
uint32_t const *__restrict__ Quality * quality
static void fillDescriptionsPuppiAlgo(edm::ParameterSetDescription &desc)
Definition: PuppiAlgo.cc:218
Definition: RecoObj.h:4
bool fPuppiDiagnostics
bool fUseVertexAssociation
void insert(const H &h, I begin, I end)
Definition: ValueMap.h:53
std::vector< RecoObj > fRecoObjCollection
size_type size() const
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::vector< LorentzVector > LorentzVectorCollection
std::string fPVName
bool isLepton(const Candidate &part)
Definition: pdgIdUtils.h:13
edm::EDGetTokenT< CandToVertex > tokenVertexAssociation_
virtual void beginJob()
key_type key() const
Accessor for product key.
Definition: Ref.h:250
edm::EDPutTokenT< reco::PFCandidateCollection > ptokenPuppiCandidates_
edm::EDPutTokenT< double > ptokenNalgos_
int pdgId() const override
PDG identifier.
math::XYZTLorentzVector LorentzVector
const reco::VertexRef vertexRef() const
double fEtaMaxCharged
std::unique_ptr< PuppiContainer > fPuppiContainer
int charge
Definition: RecoObj.h:38
edm::EDGetTokenT< PFOutputCollection > tokenPuppiCandidates_
float dZ
Definition: RecoObj.h:36
edm::EDPutTokenT< edm::ValueMap< reco::CandidatePtr > > ptokenValues_
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:430
float rapidity
Definition: RecoObj.h:26
int vertexAssociationQuality_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
reco::VertexCollection VertexCollection
edm::EDGetTokenT< double > puProxyValueToken_
float pt
Definition: RecoObj.h:26
int iEvent
Definition: GenABIO.cc:224
double eta() const override
momentum pseudorapidity
int id
Definition: RecoObj.h:27
float phi
Definition: RecoObj.h:26
std::vector< reco::PFCandidate > PFOutputCollection
const PVAssoc fromPV(size_t ipv=0) const
if(conf_.getParameter< bool >("UseStripCablingDB"))
edm::EDGetTokenT< edm::ValueMap< int > > tokenVertexAssociationQuality_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool fClonePackedCands
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
edm::View< reco::Candidate > CandidateView
void produce(edm::Event &, const edm::EventSetup &) override
std::string fPuppiName
std::vector< pat::PackedCandidate > PackedOutputCollection
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
ParameterDescriptionBase * add(U const &iLabel, T const &value)
PuppiProducer(const edm::ParameterSet &)
edm::EDGetTokenT< VertexCollection > tokenVertices_
edm::EDPutTokenT< edm::ValueMap< float > > ptokenPupOut_
edm::EDPutTokenT< std::vector< double > > ptokenAlphas_
edm::EDPutTokenT< std::vector< double > > ptokenRawAlphas_
edm::EDGetTokenT< CandidateView > tokenPFCandidates_
edm::Association< reco::VertexCollection > CandToVertex
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
float m
Definition: RecoObj.h:26
double pt() const override
transverse momentum
T const * product() const
Definition: Handle.h:70
OrphanHandle< PROD > emplace(EDPutTokenT< PROD > token, Args &&...args)
puts a new product
Definition: Event.h:433
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
double fPtMaxPhotons
double fPtMaxCharged
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
void add(std::string const &label, ParameterSetDescription const &psetDescription)
int pdgId
Definition: RecoObj.h:28
ParticleType translatePdgIdToType(int pdgid) const
Definition: PFCandidate.cc:231
float eta
Definition: RecoObj.h:26
uint fNumOfPUVtxsForCharged
edm::EDPutTokenT< edm::ValueMap< LorentzVector > > ptokenP4PupOut_
bool fUseExistingWeights
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:462
edm::View< reco::PFCandidate > PFView
edm::EDPutTokenT< std::vector< double > > ptokenAlphasRms_
double fEtaMaxPhotons
edm::EDGetTokenT< PackedOutputCollection > tokenPackedPuppiCandidates_
virtual float dxy() const
dxy with respect to the PV ref
~PuppiProducer() override
double fEtaMinUseDZ