CMS 3D CMS Logo

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

#include <CommonTools/PileupAlgos/plugins/SoftKillerProducer.cc>

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

Public Types

typedef math::XYZTLorentzVector LorentzVector
 
typedef std::vector< LorentzVectorLorentzVectorCollection
 
typedef std::vector< reco::PFCandidatePFOutputCollection
 
- 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

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

Private Member Functions

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

Private Attributes

double Rho_EtaMax_
 
double rParam_
 
edm::EDGetTokenT< reco::CandidateViewtokenPFCandidates_
 

Detailed Description

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 42 of file SoftKillerProducer.cc.

Member Typedef Documentation

◆ LorentzVector

Definition at line 44 of file SoftKillerProducer.cc.

◆ LorentzVectorCollection

Definition at line 45 of file SoftKillerProducer.cc.

◆ PFOutputCollection

Definition at line 46 of file SoftKillerProducer.cc.

Constructor & Destructor Documentation

◆ SoftKillerProducer()

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

Definition at line 71 of file SoftKillerProducer.cc.

72  : Rho_EtaMax_(iConfig.getParameter<double>("Rho_EtaMax")), rParam_(iConfig.getParameter<double>("rParam")) {
73  tokenPFCandidates_ = consumes<reco::CandidateView>(iConfig.getParameter<edm::InputTag>("PFCandidates"));
74 
75  produces<edm::ValueMap<LorentzVector> >("SoftKillerP4s");
76  produces<PFOutputCollection>();
77 }

References edm::ParameterSet::getParameter(), and tokenPFCandidates_.

◆ ~SoftKillerProducer()

SoftKillerProducer::~SoftKillerProducer ( )
override

Definition at line 79 of file SoftKillerProducer.cc.

79 {}

Member Function Documentation

◆ produce()

void SoftKillerProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 86 of file SoftKillerProducer.cc.

86  {
87  std::unique_ptr<PFOutputCollection> pOutput(new PFOutputCollection);
88 
89  // get PF Candidates
92 
93  std::vector<fastjet::PseudoJet> fjInputs;
94  for (auto i = pfCandidates->begin(), ibegin = pfCandidates->begin(), iend = pfCandidates->end(); i != iend; ++i) {
95  fjInputs.push_back(fastjet::PseudoJet(i->px(), i->py(), i->pz(), i->energy()));
96  fjInputs.back().set_user_index(i - ibegin);
97  }
98 
99  // soft killer:
100  fastjet::contrib::SoftKiller soft_killer(Rho_EtaMax_, rParam_);
101 
102  double pt_threshold = 0.;
103  std::vector<fastjet::PseudoJet> soft_killed_event;
104  soft_killer.apply(fjInputs, soft_killed_event, pt_threshold);
105 
106  std::unique_ptr<edm::ValueMap<LorentzVector> > p4SKOut(new edm::ValueMap<LorentzVector>());
108 
109  static const reco::PFCandidate dummySinceTranslateIsNotStatic;
110 
111  // To satisfy the value map, the size of the "killed" collection needs to be the
112  // same size as the input collection, so if the constituent is killed, just set E = 0
113  for (auto j = fjInputs.begin(), jend = fjInputs.end(); j != jend; ++j) {
114  const reco::Candidate& cand = pfCandidates->at(j->user_index());
115  auto id = dummySinceTranslateIsNotStatic.translatePdgIdToType(cand.pdgId());
116  const reco::PFCandidate* pPF = dynamic_cast<const reco::PFCandidate*>(&cand);
117  reco::PFCandidate pCand(pPF ? *pPF : reco::PFCandidate(cand.charge(), cand.p4(), id));
118  auto val = j->user_index();
119  auto skmatch = find_if(soft_killed_event.begin(), soft_killed_event.end(), [&val](fastjet::PseudoJet const& i) {
120  return i.user_index() == val;
121  });
122  LorentzVector pVec;
123  if (skmatch != soft_killed_event.end()) {
124  pVec.SetPxPyPzE(skmatch->px(), skmatch->py(), skmatch->pz(), skmatch->E());
125  } else {
126  pVec.SetPxPyPzE(0., 0., 0., 0.);
127  }
128  pCand.setP4(pVec);
129  skP4s.push_back(pVec);
130  pOutput->push_back(pCand);
131  }
132 
133  //Compute the modified p4s
134  edm::ValueMap<LorentzVector>::Filler p4SKFiller(*p4SKOut);
135  p4SKFiller.insert(pfCandidates, skP4s.begin(), skP4s.end());
136  p4SKFiller.fill();
137 
138  iEvent.put(std::move(p4SKOut), "SoftKillerP4s");
139  iEvent.put(std::move(pOutput));
140 }

References edm::helper::Filler< Map >::fill(), mps_fire::i, triggerObjects_cff::id, iEvent, edm::helper::Filler< Map >::insert(), dqmiolumiharvest::j, eostools::move(), zmumugammaAnalyzer_cfi::pfCandidates, Rho_EtaMax_, rParam_, reco::LeafCandidate::setP4(), tokenPFCandidates_, reco::PFCandidate::translatePdgIdToType(), and heppy_batch::val.

Member Data Documentation

◆ Rho_EtaMax_

double SoftKillerProducer::Rho_EtaMax_
private

Definition at line 56 of file SoftKillerProducer.cc.

Referenced by produce().

◆ rParam_

double SoftKillerProducer::rParam_
private

Definition at line 57 of file SoftKillerProducer.cc.

Referenced by produce().

◆ tokenPFCandidates_

edm::EDGetTokenT<reco::CandidateView> SoftKillerProducer::tokenPFCandidates_
private

Definition at line 54 of file SoftKillerProducer.cc.

Referenced by produce(), and SoftKillerProducer().

zmumugammaAnalyzer_cfi.pfCandidates
pfCandidates
Definition: zmumugammaAnalyzer_cfi.py:11
mps_fire.i
i
Definition: mps_fire.py:355
SoftKillerProducer::PFOutputCollection
std::vector< reco::PFCandidate > PFOutputCollection
Definition: SoftKillerProducer.cc:46
SoftKillerProducer::rParam_
double rParam_
Definition: SoftKillerProducer.cc:57
edm::Handle
Definition: AssociativeIterator.h:50
cand
Definition: decayParser.h:34
iEvent
int iEvent
Definition: GenABIO.cc:224
LorentzVectorCollection
std::vector< LorentzVector > LorentzVectorCollection
Definition: HLTTauMCProducer.h:31
SoftKillerProducer::tokenPFCandidates_
edm::EDGetTokenT< reco::CandidateView > tokenPFCandidates_
Definition: SoftKillerProducer.cc:54
reco::Candidate
Definition: Candidate.h:27
SoftKillerProducer::Rho_EtaMax_
double Rho_EtaMax_
Definition: SoftKillerProducer.cc:56
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
heppy_batch.val
val
Definition: heppy_batch.py:351
eostools.move
def move(src, dest)
Definition: eostools.py:511
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
LorentzVector
math::XYZTLorentzVector LorentzVector
Definition: HLTMuonMatchAndPlot.h:49
edm::ValueMap
Definition: ValueMap.h:107
reco::PFCandidate::translatePdgIdToType
ParticleType translatePdgIdToType(int pdgid) const
Definition: PFCandidate.cc:209
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
edm::helper::Filler
Definition: ValueMap.h:22
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
edm::InputTag
Definition: InputTag.h:15