CMS 3D CMS Logo

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

#include <PuppiProducer.h>

Inheritance diagram for PuppiProducer:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef edm::View< reco::CandidateCandidateView
 
typedef math::XYZTLorentzVector LorentzVector
 
typedef std::vector< LorentzVectorLorentzVectorCollection
 
typedef std::vector< pat::PackedCandidatePackedOutputCollection
 
typedef std::vector< reco::PFCandidatePFInputCollection
 
typedef std::vector< reco::PFCandidatePFOutputCollection
 
typedef edm::View< reco::PFCandidatePFView
 
typedef reco::VertexCollection VertexCollection
 
- 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 Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase 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
 

Public Member Functions

 PuppiProducer (const edm::ParameterSet &)
 
 ~PuppiProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::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)
 
virtual ~ProducerBase () noexcept(false)
 
- 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
 
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::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

virtual void beginJob ()
 
virtual void endJob ()
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

bool fClonePackedCands
 
float fDZCut
 
std::unique_ptr< PackedOutputCollectionfPackedPuppiCandidates
 
std::string fPFName
 
float fPtMax
 
std::unique_ptr< PFOutputCollectionfPuppiCandidates
 
std::unique_ptr< PuppiContainerfPuppiContainer
 
bool fPuppiDiagnostics
 
bool fPuppiForLeptons
 
std::string fPuppiName
 
std::string fPVName
 
std::vector< RecoObjfRecoObjCollection
 
bool fUseDZ
 
bool fUseExistingWeights
 
bool fUseWeightsNoLep
 
int fVtxNdofCut
 
double fVtxZCut
 
edm::EDGetTokenT< CandidateViewtokenPFCandidates_
 
edm::EDGetTokenT< VertexCollectiontokenVertices_
 

Additional Inherited Members

- 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 19 of file PuppiProducer.h.

Member Typedef Documentation

Definition at line 29 of file PuppiProducer.h.

Definition at line 26 of file PuppiProducer.h.

Definition at line 27 of file PuppiProducer.h.

Definition at line 32 of file PuppiProducer.h.

Definition at line 30 of file PuppiProducer.h.

Definition at line 31 of file PuppiProducer.h.

Definition at line 33 of file PuppiProducer.h.

Definition at line 28 of file PuppiProducer.h.

Constructor & Destructor Documentation

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

Definition at line 30 of file PuppiProducer.cc.

References fClonePackedCands, fDZCut, fPtMax, fPuppiContainer, fPuppiDiagnostics, fPuppiForLeptons, fUseDZ, fUseExistingWeights, fUseWeightsNoLep, fVtxNdofCut, fVtxZCut, edm::ParameterSet::getParameter(), tokenPFCandidates_, and tokenVertices_.

30  {
31  fPuppiDiagnostics = iConfig.getParameter<bool>("puppiDiagnostics");
32  fPuppiForLeptons = iConfig.getParameter<bool>("puppiForLeptons");
33  fUseDZ = iConfig.getParameter<bool>("UseDeltaZCut");
34  fDZCut = iConfig.getParameter<double>("DeltaZCut");
35  fPtMax = iConfig.getParameter<double>("PtMaxNeutrals");
36  fUseExistingWeights = iConfig.getParameter<bool>("useExistingWeights");
37  fUseWeightsNoLep = iConfig.getParameter<bool>("useWeightsNoLep");
38  fClonePackedCands = iConfig.getParameter<bool>("clonePackedCands");
39  fVtxNdofCut = iConfig.getParameter<int>("vtxNdofCut");
40  fVtxZCut = iConfig.getParameter<double>("vtxZCut");
41  fPuppiContainer = std::unique_ptr<PuppiContainer> ( new PuppiContainer(iConfig) );
42 
44  = consumes<CandidateView>(iConfig.getParameter<edm::InputTag>("candName"));
46  = consumes<VertexCollection>(iConfig.getParameter<edm::InputTag>("vertexName"));
47 
48 
49  produces<edm::ValueMap<float> > ();
50  produces<edm::ValueMap<LorentzVector> > ();
51  produces< edm::ValueMap<reco::CandidatePtr> >();
52 
54  produces<pat::PackedCandidateCollection>();
55  else
56  produces<reco::PFCandidateCollection>();
57 
58  if (fPuppiDiagnostics){
59  produces<double> ("PuppiNAlgos");
60  produces<std::vector<double>> ("PuppiRawAlphas");
61  produces<std::vector<double>> ("PuppiAlphas");
62  produces<std::vector<double>> ("PuppiAlphasMed");
63  produces<std::vector<double>> ("PuppiAlphasRms");
64  }
65 }
T getParameter(std::string const &) const
bool fUseWeightsNoLep
Definition: PuppiProducer.h:51
bool fPuppiDiagnostics
Definition: PuppiProducer.h:45
std::unique_ptr< PuppiContainer > fPuppiContainer
Definition: PuppiProducer.h:55
edm::EDGetTokenT< VertexCollection > tokenVertices_
Definition: PuppiProducer.h:41
bool fClonePackedCands
Definition: PuppiProducer.h:52
bool fPuppiForLeptons
Definition: PuppiProducer.h:46
bool fUseExistingWeights
Definition: PuppiProducer.h:50
edm::EDGetTokenT< CandidateView > tokenPFCandidates_
Definition: PuppiProducer.h:40
PuppiProducer::~PuppiProducer ( )
override

Definition at line 67 of file PuppiProducer.cc.

67  {
68 }

Member Function Documentation

void PuppiProducer::beginJob ( void  )
privatevirtual

Definition at line 321 of file PuppiProducer.cc.

321  {
322 }
void PuppiProducer::endJob ( void  )
privatevirtual

Definition at line 324 of file PuppiProducer.cc.

Referenced by o2olib.O2ORunMgr::executeJob().

324  {
325 }
void PuppiProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 327 of file PuppiProducer.cc.

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

327  {
328  //The following says we do not know what parameters are allowed so do no validation
329  // Please change this to state exactly what you do use, even if it is no parameters
331  desc.setUnknown();
332  descriptions.addDefault(desc);
333 }
void addDefault(ParameterSetDescription const &psetDescription)
void PuppiProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 70 of file PuppiProducer.cc.

References funct::abs(), edm::View< T >::begin(), RecoObj::charge, RecoObj::d0, pat::PackedCandidate::dxy(), RecoObj::dZ, pat::PackedCandidate::dz(), edm::View< T >::end(), pat::PackedCandidate::energy(), RecoObj::eta, Exception, fClonePackedCands, fDZCut, edm::helper::Filler< Map >::fill(), objects.autophobj::filler, fPackedPuppiCandidates, fPuppiCandidates, fPuppiContainer, fPuppiDiagnostics, fPuppiForLeptons, fRecoObjCollection, pat::PackedCandidate::fromPV(), fUseDZ, fUseExistingWeights, fUseWeightsNoLep, fVtxNdofCut, fVtxZCut, edm::Event::getByToken(), reco::PFCandidate::gsfTrackRef(), mps_fire::i, RecoObj::id, triggerObjects_cff::id, edm::helper::Filler< Map >::insert(), edm::Ref< C, T, F >::isNonnull(), edm::errors::LogicError, RecoObj::m, eostools::move(), reco::LeafCandidate::p4(), RecoObj::phi, edm::Handle< T >::product(), RecoObj::pt, pat::PackedCandidate::puppiWeight(), pat::PackedCandidate::puppiWeightNoLep(), edm::Event::put(), pat::PackedCandidate::PVLoose, pat::PackedCandidate::PVTight, pat::PackedCandidate::PVUsedInFit, pat::PackedCandidate::px(), pat::PackedCandidate::py(), pat::PackedCandidate::pz(), RecoObj::rapidity, edm::View< T >::size(), tokenPFCandidates_, tokenVertices_, reco::PFCandidate::trackRef(), reco::PFCandidate::translatePdgIdToType(), heppy_batch::val, MuonErrorMatrixValues_cff::values, and pat::PackedCandidate::vertexRef().

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

70  {
71 
72  // Get PFCandidate Collection
73  edm::Handle<CandidateView> hPFProduct;
74  iEvent.getByToken(tokenPFCandidates_,hPFProduct);
75  const CandidateView *pfCol = hPFProduct.product();
76 
77  // Get vertex collection w/PV as the first entry?
79  iEvent.getByToken(tokenVertices_,hVertexProduct);
80  const reco::VertexCollection *pvCol = hVertexProduct.product();
81 
82  int npv = 0;
83  const reco::VertexCollection::const_iterator vtxEnd = pvCol->end();
84  for (reco::VertexCollection::const_iterator vtxIter = pvCol->begin(); vtxEnd != vtxIter; ++vtxIter) {
85  if (!vtxIter->isFake() && vtxIter->ndof()>=fVtxNdofCut && std::abs(vtxIter->z())<=fVtxZCut)
86  npv++;
87  }
88 
89  //Fill the reco objects
90  fRecoObjCollection.clear();
91  for(CandidateView::const_iterator itPF = pfCol->begin(); itPF!=pfCol->end(); itPF++) {
92  // std::cout << "itPF->pdgId() = " << itPF->pdgId() << std::endl;
93  RecoObj pReco;
94  pReco.pt = itPF->pt();
95  pReco.eta = itPF->eta();
96  pReco.phi = itPF->phi();
97  pReco.m = itPF->mass();
98  pReco.rapidity = itPF->rapidity();
99  pReco.charge = itPF->charge();
100  const reco::Vertex *closestVtx = nullptr;
101  double pDZ = -9999;
102  double pD0 = -9999;
103  int pVtxId = -9999;
104  bool lFirst = true;
105  const pat::PackedCandidate *lPack = dynamic_cast<const pat::PackedCandidate*>(&(*itPF));
106  if(lPack == nullptr ) {
107 
108  const reco::PFCandidate *pPF = dynamic_cast<const reco::PFCandidate*>(&(*itPF));
109  double curdz = 9999;
110  int closestVtxForUnassociateds = -9999;
111  for(reco::VertexCollection::const_iterator iV = pvCol->begin(); iV!=pvCol->end(); ++iV) {
112  if(lFirst) {
113  if ( pPF->trackRef().isNonnull() ) pDZ = pPF->trackRef() ->dz(iV->position());
114  else if ( pPF->gsfTrackRef().isNonnull() ) pDZ = pPF->gsfTrackRef()->dz(iV->position());
115  if ( pPF->trackRef().isNonnull() ) pD0 = pPF->trackRef() ->d0();
116  else if ( pPF->gsfTrackRef().isNonnull() ) pD0 = pPF->gsfTrackRef()->d0();
117  lFirst = false;
118  if(pDZ > -9999) pVtxId = 0;
119  }
120  if(iV->trackWeight(pPF->trackRef())>0) {
121  closestVtx = &(*iV);
122  break;
123  }
124  // in case it's unassocciated, keep more info
125  double tmpdz = 99999;
126  if ( pPF->trackRef().isNonnull() ) tmpdz = pPF->trackRef() ->dz(iV->position());
127  else if ( pPF->gsfTrackRef().isNonnull() ) tmpdz = pPF->gsfTrackRef()->dz(iV->position());
128  if (std::abs(tmpdz) < curdz){
129  curdz = std::abs(tmpdz);
130  closestVtxForUnassociateds = pVtxId;
131  }
132  pVtxId++;
133 
134  }
135  int tmpFromPV = 0;
136  // mocking the miniAOD definitions
137  if (closestVtx != nullptr && std::abs(pReco.charge) > 0 && pVtxId > 0) tmpFromPV = 0;
138  if (closestVtx != nullptr && std::abs(pReco.charge) > 0 && pVtxId == 0) tmpFromPV = 3;
139  if (closestVtx == nullptr && std::abs(pReco.charge) > 0 && closestVtxForUnassociateds == 0) tmpFromPV = 2;
140  if (closestVtx == nullptr && std::abs(pReco.charge) > 0 && closestVtxForUnassociateds != 0) tmpFromPV = 1;
141  pReco.dZ = pDZ;
142  pReco.d0 = pD0;
143  pReco.id = 0;
144  if (std::abs(pReco.charge) == 0){ pReco.id = 0; }
145  else{
146  if (tmpFromPV == 0){ pReco.id = 2; } // 0 is associated to PU vertex
147  if (tmpFromPV == 3){ pReco.id = 1; }
148  if (tmpFromPV == 1 || tmpFromPV == 2){
149  pReco.id = 0;
150  if (!fPuppiForLeptons && fUseDZ && (std::abs(pDZ) < fDZCut)) pReco.id = 1;
151  if (!fPuppiForLeptons && fUseDZ && (std::abs(pDZ) > fDZCut)) pReco.id = 2;
152  if (fPuppiForLeptons && tmpFromPV == 1) pReco.id = 2;
153  if (fPuppiForLeptons && tmpFromPV == 2) pReco.id = 1;
154  }
155  }
156  }
157  else if(lPack->vertexRef().isNonnull() ) {
158  pDZ = lPack->dz();
159  pD0 = lPack->dxy();
160  pReco.dZ = pDZ;
161  pReco.d0 = pD0;
162 
163  pReco.id = 0;
164  if (std::abs(pReco.charge) == 0){ pReco.id = 0; }
165  if (std::abs(pReco.charge) > 0){
166  if (lPack->fromPV() == 0){ pReco.id = 2; } // 0 is associated to PU vertex
167  if (lPack->fromPV() == (pat::PackedCandidate::PVUsedInFit)){ pReco.id = 1; }
168  if (lPack->fromPV() == (pat::PackedCandidate::PVTight) || lPack->fromPV() == (pat::PackedCandidate::PVLoose)){
169  pReco.id = 0;
170  if (!fPuppiForLeptons && fUseDZ && (std::abs(pDZ) < fDZCut)) pReco.id = 1;
171  if (!fPuppiForLeptons && fUseDZ && (std::abs(pDZ) > fDZCut)) pReco.id = 2;
172  if (fPuppiForLeptons && lPack->fromPV() == (pat::PackedCandidate::PVLoose)) pReco.id = 2;
173  if (fPuppiForLeptons && lPack->fromPV() == (pat::PackedCandidate::PVTight)) pReco.id = 1;
174  }
175  }
176  }
177 
178  fRecoObjCollection.push_back(pReco);
179 
180  }
181 
182  fPuppiContainer->initialize(fRecoObjCollection);
183  fPuppiContainer->setNPV( npv );
184 
185  std::vector<double> lWeights;
186  std::vector<PuppiCandidate> lCandidates;
187  if (!fUseExistingWeights){
188  //Compute the weights and get the particles
189  lWeights = fPuppiContainer->puppiWeights();
190  lCandidates = fPuppiContainer->puppiParticles();
191  }
192  else{
193  //Use the existing weights
194  int lPackCtr = 0;
195  for(CandidateView::const_iterator itPF = pfCol->begin(); itPF!=pfCol->end(); itPF++) {
196  const pat::PackedCandidate *lPack = dynamic_cast<const pat::PackedCandidate*>(&(*itPF));
197  float curpupweight = -1.;
198  if(lPack == nullptr ) {
199  // throw error
200  throw edm::Exception(edm::errors::LogicError,"PuppiProducer: cannot get weights since inputs are not PackedCandidates");
201  }
202  else{
203  if (fUseWeightsNoLep){ curpupweight = lPack->puppiWeightNoLep(); }
204  else{ curpupweight = lPack->puppiWeight(); }
205  }
206  lWeights.push_back(curpupweight);
207  PuppiCandidate curjet( curpupweight*lPack->px(), curpupweight*lPack->py(), curpupweight*lPack->pz(), curpupweight*lPack->energy());
208  curjet.set_user_index(lPackCtr);
209  lCandidates.push_back(curjet);
210  lPackCtr++;
211  }
212  }
213 
214  //Fill it into the event
215  std::unique_ptr<edm::ValueMap<float> > lPupOut(new edm::ValueMap<float>());
216  edm::ValueMap<float>::Filler lPupFiller(*lPupOut);
217  lPupFiller.insert(hPFProduct,lWeights.begin(),lWeights.end());
218  lPupFiller.fill();
219 
220  // This is a dummy to access the "translate" method which is a
221  // non-static member function even though it doesn't need to be.
222  // Will fix in the future.
223  static const reco::PFCandidate dummySinceTranslateIsNotStatic;
224 
225  // Fill a new PF/Packed Candidate Collection and write out the ValueMap of the new p4s.
226  // Since the size of the ValueMap must be equal to the input collection, we need
227  // to search the "puppi" particles to find a match for each input. If none is found,
228  // the input is set to have a four-vector of 0,0,0,0
231  std::unique_ptr<edm::ValueMap<LorentzVector> > p4PupOut(new edm::ValueMap<LorentzVector>());
232  LorentzVectorCollection puppiP4s;
233  std::vector<reco::CandidatePtr> values(hPFProduct->size());
234 
235  for ( auto i0 = hPFProduct->begin(),
236  i0begin = hPFProduct->begin(),
237  i0end = hPFProduct->end(); i0 != i0end; ++i0 ) {
238  std::unique_ptr<pat::PackedCandidate> pCand;
239  std::unique_ptr<reco::PFCandidate> pfCand;
241  const pat::PackedCandidate *cand = dynamic_cast<const pat::PackedCandidate*>(&(*i0));
242  if(!cand)
243  throw edm::Exception(edm::errors::LogicError,"PuppiProducer: inputs are not PackedCandidates");
244  pCand.reset( new pat::PackedCandidate(*cand) );
245  } else {
246  auto id = dummySinceTranslateIsNotStatic.translatePdgIdToType(i0->pdgId());
247  const reco::PFCandidate *cand = dynamic_cast<const reco::PFCandidate*>(&(*i0));
248  pfCand.reset( new reco::PFCandidate( cand ? *cand : reco::PFCandidate(i0->charge(), i0->p4(), id) ) );
249  }
250  LorentzVector pVec = i0->p4();
251  int val = i0 - i0begin;
252 
253  // Find the Puppi particle matched to the input collection using the "user_index" of the object.
254  auto puppiMatched = find_if( lCandidates.begin(), lCandidates.end(), [&val]( PuppiCandidate const & i ){ return i.user_index() == val; } );
255  if ( puppiMatched != lCandidates.end() ) {
256  pVec.SetPxPyPzE(puppiMatched->px(),puppiMatched->py(),puppiMatched->pz(),puppiMatched->E());
257  } else {
258  pVec.SetPxPyPzE( 0, 0, 0, 0);
259  }
260  puppiP4s.push_back( pVec );
261 
263  pCand->setP4(pVec);
264  pCand->setSourceCandidatePtr( i0->sourceCandidatePtr(0) );
265  fPackedPuppiCandidates->push_back(*pCand);
266  } else {
267  pfCand->setP4(pVec);
268  pfCand->setSourceCandidatePtr( i0->sourceCandidatePtr(0) );
269  fPuppiCandidates->push_back(*pfCand);
270  }
271  }
272 
273  //Compute the modified p4s
274  edm::ValueMap<LorentzVector>::Filler p4PupFiller(*p4PupOut);
275  p4PupFiller.insert(hPFProduct,puppiP4s.begin(), puppiP4s.end() );
276  p4PupFiller.fill();
277 
278  iEvent.put(std::move(lPupOut));
279  iEvent.put(std::move(p4PupOut));
282  for(unsigned int ic=0, nc = oh->size(); ic < nc; ++ic) {
283  reco::CandidatePtr pkref( oh, ic );
284  values[ic] = pkref;
285  }
286  } else {
288  for(unsigned int ic=0, nc = oh->size(); ic < nc; ++ic) {
289  reco::CandidatePtr pkref( oh, ic );
290  values[ic] = pkref;
291  }
292  }
293  std::unique_ptr<edm::ValueMap<reco::CandidatePtr> > pfMap_p(new edm::ValueMap<reco::CandidatePtr>());
295  filler.insert(hPFProduct, values.begin(), values.end());
296  filler.fill();
297  iEvent.put(std::move(pfMap_p));
298 
299 
302 
303  // all the different alphas per particle
304  // THE alpha per particle
305  std::unique_ptr<std::vector<double> > theAlphas(new std::vector<double>(fPuppiContainer->puppiAlphas()));
306  std::unique_ptr<std::vector<double> > theAlphasMed(new std::vector<double>(fPuppiContainer->puppiAlphasMed()));
307  std::unique_ptr<std::vector<double> > theAlphasRms(new std::vector<double>(fPuppiContainer->puppiAlphasRMS()));
308  std::unique_ptr<std::vector<double> > alphas(new std::vector<double>(fPuppiContainer->puppiRawAlphas()));
309  std::unique_ptr<double> nalgos(new double(fPuppiContainer->puppiNAlgos()));
310 
311  iEvent.put(std::move(alphas),"PuppiRawAlphas");
312  iEvent.put(std::move(nalgos),"PuppiNAlgos");
313  iEvent.put(std::move(theAlphas),"PuppiAlphas");
314  iEvent.put(std::move(theAlphasMed),"PuppiAlphasMed");
315  iEvent.put(std::move(theAlphasRms),"PuppiAlphasRms");
316  }
317 
318 }
float puppiWeight() const
Set both weights at once (with option for only full PUPPI)
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:127
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:253
double px() const override
x coordinate of momentum vector
float puppiWeightNoLep() const
Weight from full PUPPI.
float d0
Definition: RecoObj.h:28
bool fUseWeightsNoLep
Definition: PuppiProducer.h:51
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:508
std::vector< reco::PFCandidate > PFOutputCollection
Definition: PuppiProducer.h:31
Definition: RecoObj.h:4
bool fPuppiDiagnostics
Definition: PuppiProducer.h:45
std::vector< pat::PackedCandidate > PackedOutputCollection
Definition: PuppiProducer.h:32
std::vector< RecoObj > fRecoObjCollection
Definition: PuppiProducer.h:56
size_type size() const
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
const reco::VertexRef vertexRef() const
std::unique_ptr< PuppiContainer > fPuppiContainer
Definition: PuppiProducer.h:55
int charge
Definition: RecoObj.h:29
double pz() const override
z coordinate of momentum vector
edm::EDGetTokenT< VertexCollection > tokenVertices_
Definition: PuppiProducer.h:41
float dZ
Definition: RecoObj.h:27
double py() const override
y coordinate of momentum vector
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:438
float rapidity
Definition: RecoObj.h:17
float pt
Definition: RecoObj.h:17
const_iterator begin() const
int id
Definition: RecoObj.h:18
float phi
Definition: RecoObj.h:17
const PVAssoc fromPV(size_t ipv=0) const
std::unique_ptr< PackedOutputCollection > fPackedPuppiCandidates
Definition: PuppiProducer.h:58
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool fClonePackedCands
Definition: PuppiProducer.h:52
double energy() const override
energy
math::XYZTLorentzVector LorentzVector
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:99
edm::View< reco::Candidate > CandidateView
Definition: PuppiProducer.h:29
bool fPuppiForLeptons
Definition: PuppiProducer.h:46
std::vector< LorentzVector > LorentzVectorCollection
float m
Definition: RecoObj.h:17
T const * product() const
Definition: Handle.h:81
ParticleType translatePdgIdToType(int pdgid) const
Definition: PFCandidate.cc:229
float eta
Definition: RecoObj.h:17
bool fUseExistingWeights
Definition: PuppiProducer.h:50
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:39
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:476
edm::EDGetTokenT< CandidateView > tokenPFCandidates_
Definition: PuppiProducer.h:40
const_iterator end() const
virtual float dxy() const
dxy with respect to the PV ref
std::unique_ptr< PFOutputCollection > fPuppiCandidates
Definition: PuppiProducer.h:57
def move(src, dest)
Definition: eostools.py:510

Member Data Documentation

bool PuppiProducer::fClonePackedCands
private

Definition at line 52 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

float PuppiProducer::fDZCut
private

Definition at line 48 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

std::unique_ptr< PackedOutputCollection > PuppiProducer::fPackedPuppiCandidates
private

Definition at line 58 of file PuppiProducer.h.

Referenced by produce().

std::string PuppiProducer::fPFName
private

Definition at line 43 of file PuppiProducer.h.

float PuppiProducer::fPtMax
private

Definition at line 49 of file PuppiProducer.h.

Referenced by PuppiProducer().

std::unique_ptr< PFOutputCollection > PuppiProducer::fPuppiCandidates
private

Definition at line 57 of file PuppiProducer.h.

Referenced by produce().

std::unique_ptr<PuppiContainer> PuppiProducer::fPuppiContainer
private

Definition at line 55 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

bool PuppiProducer::fPuppiDiagnostics
private

Definition at line 45 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

bool PuppiProducer::fPuppiForLeptons
private

Definition at line 46 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

std::string PuppiProducer::fPuppiName
private

Definition at line 42 of file PuppiProducer.h.

std::string PuppiProducer::fPVName
private

Definition at line 44 of file PuppiProducer.h.

std::vector<RecoObj> PuppiProducer::fRecoObjCollection
private

Definition at line 56 of file PuppiProducer.h.

Referenced by produce().

bool PuppiProducer::fUseDZ
private

Definition at line 47 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

bool PuppiProducer::fUseExistingWeights
private

Definition at line 50 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

bool PuppiProducer::fUseWeightsNoLep
private

Definition at line 51 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

int PuppiProducer::fVtxNdofCut
private

Definition at line 53 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

double PuppiProducer::fVtxZCut
private

Definition at line 54 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

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

Definition at line 40 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().

edm::EDGetTokenT< VertexCollection > PuppiProducer::tokenVertices_
private

Definition at line 41 of file PuppiProducer.h.

Referenced by produce(), and PuppiProducer().