CMS 3D CMS Logo

ShiftedPFCandidateProducerForNoPileUpPFMEt.cc
Go to the documentation of this file.
2 
5 
7 
9  : srcPFCandidatesToken_(consumes<reco::PFCandidateCollection>(cfg.getParameter<edm::InputTag>("srcPFCandidates"))),
10  srcJetsToken_(consumes<reco::PFJetCollection>(cfg.getParameter<edm::InputTag>("srcJets"))) {
11  jetCorrUncertaintyTag_ = cfg.getParameter<std::string>("jetCorrUncertaintyTag");
12  if (cfg.exists("jetCorrInputFileName")) {
13  jetCorrInputFileName_ = cfg.getParameter<edm::FileInPath>("jetCorrInputFileName");
15  throw cms::Exception("ShiftedJetProducerT")
16  << " Failed to find JEC parameter file = " << jetCorrInputFileName_ << " !!\n";
19  } else {
20  jetCorrPayloadName_ = cfg.getParameter<std::string>("jetCorrPayloadName");
21  }
22 
23  minJetPt_ = cfg.getParameter<double>("minJetPt");
24 
25  shiftBy_ = cfg.getParameter<double>("shiftBy");
26 
27  unclEnUncertainty_ = cfg.getParameter<double>("unclEnUncertainty");
28 
29  produces<reco::PFCandidateCollection>();
30 }
31 
33  // nothing to be done yet...
34 }
35 
37  edm::Handle<reco::PFCandidateCollection> originalPFCandidates;
38  evt.getByToken(srcPFCandidatesToken_, originalPFCandidates);
39 
41  evt.getByToken(srcJetsToken_, jets);
42 
43  std::vector<const reco::PFJet*> selectedJets;
44  for (reco::PFJetCollection::const_iterator jet = jets->begin(); jet != jets->end(); ++jet) {
45  if (jet->pt() > minJetPt_)
46  selectedJets.push_back(&(*jet));
47  }
48 
49  if (!jetCorrPayloadName_.empty()) {
51  es.get<JetCorrectionsRecord>().get(jetCorrPayloadName_, jetCorrParameterSet);
52  const JetCorrectorParameters& jetCorrParameters = (*jetCorrParameterSet)[jetCorrUncertaintyTag_];
53  delete jecUncertainty_;
54  jecUncertainty_ = new JetCorrectionUncertainty(jetCorrParameters);
55  }
56 
57  auto shiftedPFCandidates = std::make_unique<reco::PFCandidateCollection>();
58  for (reco::PFCandidateCollection::const_iterator originalPFCandidate = originalPFCandidates->begin();
59  originalPFCandidate != originalPFCandidates->end();
60  ++originalPFCandidate) {
61  const reco::PFJet* jet_matched = nullptr;
62  for (std::vector<const reco::PFJet*>::iterator jet = selectedJets.begin(); jet != selectedJets.end(); ++jet) {
63  std::vector<reco::PFCandidatePtr> jetConstituents = (*jet)->getPFConstituents();
64  for (std::vector<reco::PFCandidatePtr>::const_iterator jetConstituent = jetConstituents.begin();
65  jetConstituent != jetConstituents.end() && !jet_matched;
66  ++jetConstituent) {
67  if (deltaR(originalPFCandidate->p4(), (*jetConstituent)->p4()) < 1.e-2)
68  jet_matched = (*jet);
69  }
70  }
71 
72  double shift = 0.;
73  if (jet_matched) {
74  jecUncertainty_->setJetEta(jet_matched->eta());
75  jecUncertainty_->setJetPt(jet_matched->pt());
76 
77  shift = jecUncertainty_->getUncertainty(true);
78  } else {
79  shift = unclEnUncertainty_;
80  }
81 
82  shift *= shiftBy_;
83 
84  reco::Candidate::LorentzVector shiftedPFCandidateP4 = originalPFCandidate->p4();
85  shiftedPFCandidateP4 *= (1. + shift);
86 
87  reco::PFCandidate shiftedPFCandidate(*originalPFCandidate);
88  shiftedPFCandidate.setP4(shiftedPFCandidateP4);
89 
90  shiftedPFCandidates->push_back(shiftedPFCandidate);
91  }
92 
93  evt.put(std::move(shiftedPFCandidates));
94 }
95 
97 
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
double eta() const final
momentum pseudorapidity
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
bool exists(std::string const &parameterName) const
checks if a parameter exists
edm::EDGetTokenT< reco::PFCandidateCollection > srcPFCandidatesToken_
double pt() const final
transverse momentum
Jets made from PFObjects.
Definition: PFJet.h:20
void produce(edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
LocationCode location() const
Where was the file found?
Definition: FileInPath.cc:161
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
std::vector< PFJet > PFJetCollection
collection of PFJet objects
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
fixed size matrix
HLT enums.
T get() const
Definition: EventSetup.h:73
static unsigned int const shift
virtual std::vector< reco::PFCandidatePtr > getPFConstituents() const
get all constituents
Definition: PFJet.cc:41
std::string fullPath() const
Definition: FileInPath.cc:163
float getUncertainty(bool fDirection)
void setP4(const LorentzVector &p4) final
set 4-momentum
def move(src, dest)
Definition: eostools.py:511