CMS 3D CMS Logo

PFMETProducerMVA.cc
Go to the documentation of this file.
2 
3 using namespace reco;
4 
5 const double dR2Min = 0.01 * 0.01;
6 const double dR2Max = 0.5 * 0.5;
7 const double dPtMatch = 0.1;
8 
9 PFMETProducerMVA::PFMETProducerMVA(const edm::ParameterSet& cfg) : mvaMEtAlgo_(cfg), mvaMEtAlgo_isInitialized_(false) {
10  srcCorrJets_ = consumes<reco::PFJetCollection>(cfg.getParameter<edm::InputTag>("srcCorrJets"));
11  srcUncorrJets_ = consumes<reco::PFJetCollection>(cfg.getParameter<edm::InputTag>("srcUncorrJets"));
12  srcJetIds_ = consumes<edm::ValueMap<float> >(cfg.getParameter<edm::InputTag>("srcMVAPileupJetId"));
13  srcPFCandidatesView_ = consumes<reco::CandidateView>(cfg.getParameter<edm::InputTag>("srcPFCandidates"));
14  srcVertices_ = consumes<reco::VertexCollection>(cfg.getParameter<edm::InputTag>("srcVertices"));
15  vInputTag srcLeptonsTags = cfg.getParameter<vInputTag>("srcLeptons");
16  for (vInputTag::const_iterator it = srcLeptonsTags.begin(); it != srcLeptonsTags.end(); it++) {
17  srcLeptons_.push_back(consumes<reco::CandidateView>(*it));
18  }
19  mJetCorrector_ = consumes<reco::JetCorrector>(cfg.getParameter<edm::InputTag>("corrector"));
20  minNumLeptons_ = cfg.getParameter<int>("minNumLeptons");
21 
22  globalThreshold_ = cfg.getParameter<double>("globalThreshold");
23 
24  minCorrJetPt_ = cfg.getParameter<double>("minCorrJetPt");
25  useType1_ = cfg.getParameter<bool>("useType1");
26 
27  verbosity_ = (cfg.exists("verbosity")) ? cfg.getParameter<int>("verbosity") : 0;
28 
29  produces<reco::PFMETCollection>();
30 }
31 
33 
35  // CV: check if the event is to be skipped
36  if (minNumLeptons_ > 0) {
37  int numLeptons = 0;
38  for (std::vector<edm::EDGetTokenT<reco::CandidateView> >::const_iterator srcLeptons_i = srcLeptons_.begin();
39  srcLeptons_i != srcLeptons_.end();
40  ++srcLeptons_i) {
42  evt.getByToken(*srcLeptons_i, leptons);
43  numLeptons += leptons->size();
44  }
45  if (!(numLeptons >= minNumLeptons_)) {
46  LogDebug("produce") << "<PFMETProducerMVA::produce>:" << std::endl
47  << "Run: " << evt.id().run() << ", LS: " << evt.luminosityBlock()
48  << ", Event: " << evt.id().event() << std::endl
49  << " numLeptons = " << numLeptons << ", minNumLeptons = " << minNumLeptons_
50  << " --> skipping !!" << std::endl;
51 
52  reco::PFMET pfMEt;
53  auto pfMEtCollection = std::make_unique<reco::PFMETCollection>();
54  pfMEtCollection->push_back(pfMEt);
55  evt.put(std::move(pfMEtCollection));
56  return;
57  }
58  }
59 
60  //get jet IDs
62  evt.getByToken(srcJetIds_, jetIds);
63 
64  // get jets (corrected and uncorrected)
66  evt.getByToken(srcCorrJets_, corrJets);
67 
69  evt.getByToken(srcUncorrJets_, uncorrJets);
70 
72  if (useType1_) {
74  }
75 
76  edm::Handle<reco::CandidateView> pfCandidates_view;
77  evt.getByToken(srcPFCandidatesView_, pfCandidates_view);
78 
79  // get vertices
82  // take vertex with highest sum(trackPt) as the vertex of the "hard scatter" interaction
83  // (= first entry in vertex collection)
84  const reco::Vertex* hardScatterVertex = (!vertices->empty()) ? &(vertices->front()) : nullptr;
85 
86  // get leptons
87  // (excluded from sum over PFCandidates when computing hadronic recoil)
88  int lId = 0;
89  bool lHasPhotons = false;
90  std::vector<reco::PUSubMETCandInfo> leptonInfo =
91  computeLeptonInfo(srcLeptons_, *pfCandidates_view, hardScatterVertex, lId, lHasPhotons, evt);
92 
93  // initialize MVA MET algorithm
94  // (this will load the BDTs, stored as GBRForrest objects;
95  // either in input ROOT files or in SQL-lite files/the Conditions Database)
99  }
100 
101  // reconstruct "standard" particle-flow missing Et
102  CommonMETData pfMEt_data = metAlgo_.run((*pfCandidates_view), globalThreshold_);
103  SpecificPFMETData specificPfMET = pfMEtSpecificAlgo_.run((*pfCandidates_view));
104  const reco::Candidate::LorentzVector p4(pfMEt_data.mex, pfMEt_data.mey, 0.0, pfMEt_data.met);
105  const reco::Candidate::Point vtx(0.0, 0.0, 0.0);
106  reco::PFMET pfMEt(specificPfMET, pfMEt_data.sumet, p4, vtx);
107  reco::Candidate::LorentzVector pfMEtP4_original = pfMEt.p4();
108 
109  // compute objects specific to MVA based MET reconstruction
110  std::vector<reco::PUSubMETCandInfo> pfCandidateInfo = computePFCandidateInfo(*pfCandidates_view, hardScatterVertex);
111  std::vector<reco::PUSubMETCandInfo> jetInfo = computeJetInfo(
112  *uncorrJets, corrJets, *jetIds, *vertices, hardScatterVertex, *corrector, evt, es, leptonInfo, pfCandidateInfo);
113  std::vector<reco::Vertex::Point> vertexInfo = computeVertexInfo(*vertices);
114  // compute MVA based MET and estimate of its uncertainty
115  mvaMEtAlgo_.setInput(leptonInfo, jetInfo, pfCandidateInfo, vertexInfo);
116  mvaMEtAlgo_.setHasPhotons(lHasPhotons);
118  pfMEt.setP4(mvaMEtAlgo_.getMEt());
120 
121  LogDebug("produce") << "Run: " << evt.id().run() << ", LS: " << evt.luminosityBlock()
122  << ", Event: " << evt.id().event() << std::endl
123  << " PFMET: Pt = " << pfMEtP4_original.pt() << ", phi = " << pfMEtP4_original.phi() << " "
124  << "(Px = " << pfMEtP4_original.px() << ", Py = " << pfMEtP4_original.py() << ")" << std::endl
125  << " MVA MET: Pt = " << pfMEt.pt() << " phi = " << pfMEt.phi() << " (Px = " << pfMEt.px()
126  << ", Py = " << pfMEt.py() << ")" << std::endl
127  << " Cov:" << std::endl
128  << (mvaMEtAlgo_.getMEtCov())(0, 0) << " " << (mvaMEtAlgo_.getMEtCov())(0, 1) << std::endl
129  << (mvaMEtAlgo_.getMEtCov())(1, 0) << " " << (mvaMEtAlgo_.getMEtCov())(1, 1) << std::endl
130  << std::endl;
131 
132  // add PFMET object to the event
133  auto pfMEtCollection = std::make_unique<reco::PFMETCollection>();
134  pfMEtCollection->push_back(pfMEt);
135  evt.put(std::move(pfMEtCollection));
136 }
137 
138 std::vector<reco::PUSubMETCandInfo> PFMETProducerMVA::computeLeptonInfo(
139  const std::vector<edm::EDGetTokenT<reco::CandidateView> >& srcLeptons_,
140  const reco::CandidateView& pfCandidates_view,
141  const reco::Vertex* hardScatterVertex,
142  int& lId,
143  bool& lHasPhotons,
144  edm::Event& evt) {
145  std::vector<reco::PUSubMETCandInfo> leptonInfo;
146 
147  for (std::vector<edm::EDGetTokenT<reco::CandidateView> >::const_iterator srcLeptons_i = srcLeptons_.begin();
148  srcLeptons_i != srcLeptons_.end();
149  ++srcLeptons_i) {
151  evt.getByToken(*srcLeptons_i, leptons);
152  for (reco::CandidateView::const_iterator lepton1 = leptons->begin(); lepton1 != leptons->end(); ++lepton1) {
153  bool pMatch = false;
154  for (std::vector<edm::EDGetTokenT<reco::CandidateView> >::const_iterator srcLeptons_j = srcLeptons_.begin();
155  srcLeptons_j != srcLeptons_.end();
156  ++srcLeptons_j) {
158  evt.getByToken(*srcLeptons_j, leptons2);
159  for (reco::CandidateView::const_iterator lepton2 = leptons2->begin(); lepton2 != leptons2->end(); ++lepton2) {
160  if (&(*lepton1) == &(*lepton2)) {
161  continue;
162  }
163  if (deltaR2(lepton1->p4(), lepton2->p4()) < dR2Max) {
164  pMatch = true;
165  }
166  if (pMatch && !istau(&(*lepton1)) && istau(&(*lepton2))) {
167  pMatch = false;
168  }
169  if (pMatch && ((istau(&(*lepton1)) && istau(&(*lepton2))) || (!istau(&(*lepton1)) && !istau(&(*lepton2)))) &&
170  lepton1->pt() > lepton2->pt()) {
171  pMatch = false;
172  }
173  if (pMatch && lepton1->pt() == lepton2->pt()) {
174  pMatch = false;
175  for (unsigned int i0 = 0; i0 < leptonInfo.size(); i0++) {
176  if (std::abs(lepton1->pt() - leptonInfo[i0].p4().pt()) < dPtMatch) {
177  pMatch = true;
178  break;
179  }
180  }
181  }
182  if (pMatch)
183  break;
184  }
185  if (pMatch)
186  break;
187  }
188  if (pMatch)
189  continue;
190  reco::PUSubMETCandInfo pLeptonInfo;
191  pLeptonInfo.setP4(lepton1->p4());
192  pLeptonInfo.setChargedEnFrac(chargedEnFrac(&(*lepton1), pfCandidates_view, hardScatterVertex));
193  leptonInfo.push_back(pLeptonInfo);
194  if (lepton1->isPhoton()) {
195  lHasPhotons = true;
196  }
197  }
198  lId++;
199  }
200 
201  return leptonInfo;
202 }
203 
204 std::vector<reco::PUSubMETCandInfo> PFMETProducerMVA::computeJetInfo(const reco::PFJetCollection& uncorrJets,
205  const edm::Handle<reco::PFJetCollection>& corrJets,
206  const edm::ValueMap<float>& jetIds,
208  const reco::Vertex* hardScatterVertex,
209  const reco::JetCorrector& iCorrector,
211  const edm::EventSetup& iSetup,
212  std::vector<reco::PUSubMETCandInfo>& iLeptons,
213  std::vector<reco::PUSubMETCandInfo>& iCands) {
214  std::vector<reco::PUSubMETCandInfo> retVal;
215  for (reco::PFJetCollection::const_iterator uncorrJet = uncorrJets.begin(); uncorrJet != uncorrJets.end();
216  ++uncorrJet) {
217  // for ( reco::PFJetCollection::const_iterator corrJet = corrJets.begin();
218  // corrJet != corrJets.end(); ++corrJet ) {
219  auto corrJet = corrJets->begin();
220  for (size_t cjIdx = 0; cjIdx < corrJets->size(); ++cjIdx, ++corrJet) {
221  reco::PFJetRef corrJetRef(corrJets, cjIdx);
222 
223  // match corrected and uncorrected jets
224  if (uncorrJet->jetArea() != corrJet->jetArea())
225  continue;
226  if (deltaR2(corrJet->p4(), uncorrJet->p4()) > dR2Min)
227  continue;
228 
229  // check that jet passes loose PFJet id.
230  if (!passPFLooseId(&(*uncorrJet)))
231  continue;
232 
233  // compute jet energy correction factor
234  // (= ratio of corrected/uncorrected jet Pt)
235  //double jetEnCorrFactor = corrJet->pt()/uncorrJet->pt();
236  reco::PUSubMETCandInfo jetInfo;
237 
238  // PH: apply jet energy corrections for all Jets ignoring recommendations
239  jetInfo.setP4(corrJet->p4());
240  double lType1Corr = 0;
241  if (useType1_) { //Compute the type 1 correction ===> This code is crap
242  double pCorr = iCorrector.correction(*uncorrJet);
243  lType1Corr = std::abs(corrJet->pt() - pCorr * uncorrJet->pt());
244  TLorentzVector pVec;
245  pVec.SetPtEtaPhiM(lType1Corr, 0, corrJet->phi(), 0);
247  pType1Corr.SetCoordinates(pVec.Px(), pVec.Py(), pVec.Pz(), pVec.E());
248  //Filter to leptons
249  bool pOnLepton = false;
250  for (unsigned int i0 = 0; i0 < iLeptons.size(); i0++) {
251  if (deltaR2(iLeptons[i0].p4(), corrJet->p4()) < dR2Max) {
252  pOnLepton = true;
253  break;
254  }
255  }
256  //Add it to PF Collection
257  if (corrJet->pt() > 10 && !pOnLepton) {
258  reco::PUSubMETCandInfo pfCandidateInfo;
259  pfCandidateInfo.setP4(pType1Corr);
260  pfCandidateInfo.setDZ(-999);
261  iCands.push_back(pfCandidateInfo);
262  }
263  //Scale
264  lType1Corr = (pCorr * uncorrJet->pt() - uncorrJet->pt());
265  lType1Corr /= corrJet->pt();
266  }
267 
268  // check that jet Pt used to compute MVA based jet id. is above threshold
269  if (!(jetInfo.p4().pt() > minCorrJetPt_))
270  continue;
271 
272  jetInfo.setMvaVal(jetIds[corrJetRef]);
273  float chEnF = (uncorrJet->chargedEmEnergy() + uncorrJet->chargedHadronEnergy() + uncorrJet->chargedMuEnergy()) /
274  uncorrJet->energy();
275  if (useType1_)
276  chEnF += lType1Corr * (1 - jetInfo.chargedEnFrac());
277  jetInfo.setChargedEnFrac(chEnF);
278  retVal.push_back(jetInfo);
279  break;
280  }
281  }
282 
283  //order jets per pt
284  std::sort(retVal.begin(), retVal.end());
285 
286  return retVal;
287 }
288 
290  const reco::Vertex* hardScatterVertex) {
291  std::vector<reco::PUSubMETCandInfo> retVal;
292  for (reco::CandidateView::const_iterator pfCandidate = pfCandidates.begin(); pfCandidate != pfCandidates.end();
293  ++pfCandidate) {
294  double dZ = -999.; // PH: If no vertex is reconstructed in the event
295  // or PFCandidate has no track, set dZ to -999
296  if (hardScatterVertex) {
297  const reco::PFCandidate* pfc = dynamic_cast<const reco::PFCandidate*>(&(*pfCandidate));
298  if (pfc != nullptr) { //PF candidate for RECO and PAT levels
299  if (pfc->trackRef().isNonnull())
300  dZ = std::abs(pfc->trackRef()->dz(hardScatterVertex->position()));
301  else if (pfc->gsfTrackRef().isNonnull())
302  dZ = std::abs(pfc->gsfTrackRef()->dz(hardScatterVertex->position()));
303  } else { //if not, then packedCandidate for miniAOD level
304  const pat::PackedCandidate* pfc = dynamic_cast<const pat::PackedCandidate*>(&(*pfCandidate));
305  dZ = std::abs(pfc->dz(hardScatterVertex->position()));
306  //exact dz=zero corresponds to the -999 case for pfcandidate
307  if (dZ == 0) {
308  dZ = -999;
309  }
310  }
311  }
312  reco::PUSubMETCandInfo pfCandidateInfo;
313  pfCandidateInfo.setP4(pfCandidate->p4());
314  pfCandidateInfo.setDZ(dZ);
315  retVal.push_back(pfCandidateInfo);
316  }
317  return retVal;
318 }
319 
320 std::vector<reco::Vertex::Point> PFMETProducerMVA::computeVertexInfo(const reco::VertexCollection& vertices) {
321  std::vector<reco::Vertex::Point> retVal;
322  for (reco::VertexCollection::const_iterator vertex = vertices.begin(); vertex != vertices.end(); ++vertex) {
323  if (std::abs(vertex->z()) > 24.)
324  continue;
325  if (vertex->ndof() < 4.)
326  continue;
327  if (vertex->position().Rho() > 2.)
328  continue;
329  retVal.push_back(vertex->position());
330  }
331  return retVal;
332 }
335  const reco::Vertex* hardScatterVertex) {
336  if (iCand->isMuon()) {
337  return 1;
338  }
339  if (iCand->isElectron()) {
340  return 1.;
341  }
342  if (iCand->isPhoton()) {
343  return chargedFracInCone(iCand, pfCandidates, hardScatterVertex);
344  }
345  double lPtTot = 0;
346  double lPtCharged = 0;
347  const reco::PFTau* lPFTau = nullptr;
348  lPFTau = dynamic_cast<const reco::PFTau*>(iCand);
349  if (lPFTau != nullptr) {
350  for (UInt_t i0 = 0; i0 < lPFTau->signalCands().size(); i0++) {
351  lPtTot += (lPFTau->signalCands())[i0]->pt();
352  if ((lPFTau->signalCands())[i0]->charge() == 0)
353  continue;
354  lPtCharged += (lPFTau->signalCands())[i0]->pt();
355  }
356  } else {
357  const pat::Tau* lPatPFTau = nullptr;
358  lPatPFTau = dynamic_cast<const pat::Tau*>(iCand);
359  if (lPatPFTau != nullptr) {
360  for (UInt_t i0 = 0; i0 < lPatPFTau->signalCands().size(); i0++) {
361  lPtTot += (lPatPFTau->signalCands())[i0]->pt();
362  if ((lPatPFTau->signalCands())[i0]->charge() == 0)
363  continue;
364  lPtCharged += (lPatPFTau->signalCands())[i0]->pt();
365  }
366  }
367  }
368  if (lPtTot == 0)
369  lPtTot = 1.;
370  return lPtCharged / lPtTot;
371 }
372 //Return tau id by process of elimination
374  if (iCand->isMuon())
375  return false;
376  if (iCand->isElectron())
377  return false;
378  if (iCand->isPhoton())
379  return false;
380  return true;
381 }
383  if (iJet->energy() == 0)
384  return false;
385  if (iJet->neutralHadronEnergy() / iJet->energy() > 0.99)
386  return false;
387  if (iJet->neutralEmEnergy() / iJet->energy() > 0.99)
388  return false;
389  if (iJet->nConstituents() < 2)
390  return false;
391  if (iJet->chargedHadronEnergy() / iJet->energy() <= 0 && std::abs(iJet->eta()) < 2.4)
392  return false;
393  if (iJet->chargedEmEnergy() / iJet->energy() > 0.99 && std::abs(iJet->eta()) < 2.4)
394  return false;
395  if (iJet->chargedMultiplicity() < 1 && std::abs(iJet->eta()) < 2.4)
396  return false;
397  return true;
398 }
399 
402  const reco::Vertex* hardScatterVertex,
403  double iDRMax) {
404  double iDR2Max = iDRMax * iDRMax;
405  reco::Candidate::LorentzVector lVis(0, 0, 0, 0);
406  for (reco::CandidateView::const_iterator pfCandidate = pfCandidates.begin(); pfCandidate != pfCandidates.end();
407  ++pfCandidate) {
408  if (deltaR2(iCand->p4(), pfCandidate->p4()) > iDR2Max)
409  continue;
410  double dZ = -999.; // PH: If no vertex is reconstructed in the event
411  // or PFCandidate has no track, set dZ to -999
412  if (hardScatterVertex) {
413  const reco::PFCandidate* pfc = dynamic_cast<const reco::PFCandidate*>((&(*pfCandidate)));
414  if (pfc != nullptr) { //PF candidate for RECO and PAT levels
415  if (pfc->trackRef().isNonnull())
416  dZ = std::abs(pfc->trackRef()->dz(hardScatterVertex->position()));
417  else if (pfc->gsfTrackRef().isNonnull())
418  dZ = std::abs(pfc->gsfTrackRef()->dz(hardScatterVertex->position()));
419  } else { //if not, then packedCandidate for miniAOD level
420  const pat::PackedCandidate* pfc = dynamic_cast<const pat::PackedCandidate*>(&(*pfCandidate));
421  dZ = std::abs(pfc->dz(hardScatterVertex->position()));
422  }
423  }
424  if (std::abs(dZ) > 0.1)
425  continue;
426  lVis += pfCandidate->p4();
427  }
428  return lVis.pt() / iCand->pt();
429 }
430 
432 
reco::PFCandidate::trackRef
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:408
reco::PFMETProducerMVA::computeLeptonInfo
std::vector< reco::PUSubMETCandInfo > computeLeptonInfo(const std::vector< edm::EDGetTokenT< reco::CandidateView > > &srcLeptons_, const reco::CandidateView &pfCandidates, const reco::Vertex *hardScatterVertex, int &lId, bool &lHasPhotons, edm::Event &iEvent)
Definition: PFMETProducerMVA.cc:138
CommonMETData::met
double met
Definition: CommonMETData.h:14
edm::View::begin
const_iterator begin() const
zmumugammaAnalyzer_cfi.pfCandidates
pfCandidates
Definition: zmumugammaAnalyzer_cfi.py:11
reco::PFTau::signalCands
const std::vector< reco::CandidatePtr > & signalCands() const
Candidates in signal region.
Definition: PFTau.cc:73
edm::PtrVectorBase::size
size_type size() const
Size of the RefVector.
Definition: PtrVectorBase.h:73
funct::false
false
Definition: Factorize.h:34
reco::PFMETProducerMVA::mJetCorrector_
edm::EDGetTokenT< reco::JetCorrector > mJetCorrector_
Definition: PFMETProducerMVA.h:91
METAlgo::run
CommonMETData run(const edm::View< reco::Candidate > &candidates, double globalThreshold=0.0, edm::ValueMap< float > const *weights=nullptr)
Definition: METAlgo.cc:16
SpecificPFMETData
MET made from Particle Flow Candidates.
Definition: SpecificPFMETData.h:12
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
edm::EDGetTokenT
Definition: EDGetToken.h:33
reco::PUSubMETCandInfo::setDZ
void setDZ(float dZ)
Definition: PUSubMETData.h:47
pat::Tau
Analysis-level tau class.
Definition: Tau.h:53
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
reco::JetCorrector
Definition: JetCorrector.h:35
PFMETAlgorithmMVA::initialize
void initialize(const edm::EventSetup &)
Definition: PFMETAlgorithmMVA.cc:143
PFSpecificAlgo::run
SpecificPFMETData run(const edm::View< reco::Candidate > &pfCands, edm::ValueMap< float > const *weights=nullptr)
Definition: PFSpecificAlgo.cc:15
reco::Candidate::pt
virtual double pt() const =0
transverse momentum
reco::Candidate::isPhoton
virtual bool isPhoton() const =0
reco::PFTau
Definition: PFTau.h:36
reco::Vertex::position
const Point & position() const
position
Definition: Vertex.h:114
reco::PUSubMETCandInfo::setP4
void setP4(const reco::Candidate::LorentzVector p4)
Definition: PUSubMETData.h:46
reco::JetCorrector::correction
double correction(const LorentzVector &fJet) const
get correction using Jet information only
Definition: JetCorrector.h:47
reco::PFMETProducerMVA::PFMETProducerMVA
PFMETProducerMVA(const edm::ParameterSet &)
Definition: PFMETProducerMVA.cc:9
CommonMETData
Structure containing data common to all types of MET.
Definition: CommonMETData.h:12
reco::LeafCandidate::pt
double pt() const final
transverse momentum
Definition: LeafCandidate.h:146
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
reco::PFMETProducerMVA::srcPFCandidatesView_
edm::EDGetTokenT< edm::View< reco::Candidate > > srcPFCandidatesView_
Definition: PFMETProducerMVA.h:89
edm::Handle
Definition: AssociativeIterator.h:50
reco::PUSubMETCandInfo::chargedEnFrac
float chargedEnFrac() const
Definition: PUSubMETData.h:41
reco::PUSubMETCandInfo::setChargedEnFrac
void setChargedEnFrac(float chEnF)
Definition: PUSubMETData.h:57
reco::PFMETProducerMVA
Definition: PFMETProducerMVA.h:43
edm::Ref< PFJetCollection >
PFMETAlgorithmMVA::getMEtCov
const reco::METCovMatrix & getMEtCov() const
Definition: PFMETAlgorithmMVA.h:48
reco::PFMETProducerMVA::globalThreshold_
double globalThreshold_
Definition: PFMETProducerMVA.h:98
reco::PFMETProducerMVA::minCorrJetPt_
double minCorrJetPt_
Definition: PFMETProducerMVA.h:100
reco::PFMETProducerMVA::srcUncorrJets_
edm::EDGetTokenT< reco::PFJetCollection > srcUncorrJets_
Definition: PFMETProducerMVA.h:86
pfClustersFromHGC3DClusters_cfi.corrector
corrector
Definition: pfClustersFromHGC3DClusters_cfi.py:5
reco::PFJet::chargedHadronEnergy
float chargedHadronEnergy() const
chargedHadronEnergy
Definition: PFJet.h:95
reco::PFMETProducerMVA::chargedEnFrac
double chargedEnFrac(const reco::Candidate *iCand, const reco::CandidateView &pfCandidates, const reco::Vertex *hardScatterVertex)
Definition: PFMETProducerMVA.cc:333
pat::Tau::signalCands
reco::CandidatePtrVector signalCands() const
reco::PFMETProducerMVA::computeVertexInfo
std::vector< reco::Vertex::Point > computeVertexInfo(const reco::VertexCollection &)
Definition: PFMETProducerMVA.cc:320
reco::MET::setSignificanceMatrix
void setSignificanceMatrix(const reco::METCovMatrix &matrix)
Definition: MET.cc:142
MakerMacros.h
reco::PUSubMETCandInfo
Definition: PUSubMETData.h:21
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CommonMETData::mex
double mex
Definition: CommonMETData.h:15
reco::PUSubMETCandInfo::p4
const reco::Candidate::LorentzVector & p4() const
Definition: PUSubMETData.h:30
PFMETProducerMVA.h
reco::LeafCandidate::py
double py() const final
y coordinate of momentum vector
Definition: LeafCandidate.h:142
reco::PFMETProducerMVA::verbosity_
int verbosity_
Definition: PFMETProducerMVA.h:108
reco::PFMETProducerMVA::useType1_
bool useType1_
Definition: PFMETProducerMVA.h:96
reco::PFJet::chargedMultiplicity
int chargedMultiplicity() const
chargedMultiplicity
Definition: PFJet.h:152
reco::Jet::nConstituents
virtual int nConstituents() const
Definition: Jet.h:65
pat::PackedCandidate::dz
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
Definition: PackedCandidate.h:745
reco::PFMETProducerMVA::mvaMEtAlgo_
PFMETAlgorithmMVA mvaMEtAlgo_
Definition: PFMETProducerMVA.h:104
reco::PFJet::chargedEmEnergy
float chargedEmEnergy() const
chargedEmEnergy
Definition: PFJet.h:139
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
reco::PFMETProducerMVA::minNumLeptons_
int minNumLeptons_
Definition: PFMETProducerMVA.h:94
edm::EventID::run
RunNumber_t run() const
Definition: EventID.h:38
badGlobalMuonTaggersAOD_cff.vtx
vtx
Definition: badGlobalMuonTaggersAOD_cff.py:5
reco::Candidate::isMuon
virtual bool isMuon() const =0
CommonMETData::sumet
double sumet
Definition: CommonMETData.h:18
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
PFMETAlgorithmMVA::setHasPhotons
void setHasPhotons(bool hasPhotons)
Definition: PFMETAlgorithmMVA.h:38
edm::View
Definition: CaloClusterFwd.h:14
reco::PFMET
Definition: PFMET.h:18
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
reco::PFCandidate::gsfTrackRef
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:440
reco::PFMETProducerMVA::srcJetIds_
edm::EDGetTokenT< edm::ValueMap< float > > srcJetIds_
Definition: PFMETProducerMVA.h:87
reco::PFMETProducerMVA::pfMEtSpecificAlgo_
PFSpecificAlgo pfMEtSpecificAlgo_
Definition: PFMETProducerMVA.h:103
reco::LeafCandidate::eta
double eta() const final
momentum pseudorapidity
Definition: LeafCandidate.h:152
edm::EventBase::luminosityBlock
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:61
pat::PackedCandidate
Definition: PackedCandidate.h:22
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
reco::deltaR2
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
HLT_2018_cff.leptons
leptons
Definition: HLT_2018_cff.py:24820
AK4CaloJetsMCFlavour_cff.leptonInfo
leptonInfo
Definition: AK4CaloJetsMCFlavour_cff.py:14
HLT_2018_cff.numLeptons
numLeptons
Definition: HLT_2018_cff.py:24819
edm::EventID::event
EventNumber_t event() const
Definition: EventID.h:40
iEvent
int iEvent
Definition: GenABIO.cc:224
reco::PFMETProducerMVA::vInputTag
std::vector< edm::InputTag > vInputTag
Definition: PFMETProducerMVA.h:92
reco::LeafCandidate::p4
const LorentzVector & p4() const final
four-momentum Lorentz vector
Definition: LeafCandidate.h:114
p4
double p4[4]
Definition: TauolaWrapper.h:92
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:132
reco::PFMETProducerMVA::srcLeptons_
std::vector< edm::EDGetTokenT< reco::CandidateView > > srcLeptons_
Definition: PFMETProducerMVA.h:93
reco::PFMETProducerMVA::passPFLooseId
bool passPFLooseId(const reco::PFJet *iJet)
Definition: PFMETProducerMVA.cc:382
edm::EventSetup
Definition: EventSetup.h:57
dR2Max
const double dR2Max
Definition: PFMETProducerMVA.cc:6
reco::PFMETProducerMVA::srcVertices_
edm::EDGetTokenT< reco::VertexCollection > srcVertices_
Definition: PFMETProducerMVA.h:90
PFMETAlgorithmMVA::setInput
void setInput(const std::vector< reco::PUSubMETCandInfo > &, const std::vector< reco::PUSubMETCandInfo > &, const std::vector< reco::PUSubMETCandInfo > &, const std::vector< reco::Vertex::Point > &)
Definition: PFMETAlgorithmMVA.cc:170
looper.cfg
cfg
Definition: looper.py:297
reco::Candidate
Definition: Candidate.h:27
dR2Min
const double dR2Min
Definition: PFMETProducerMVA.cc:5
PFMETAlgorithmMVA::getMEt
reco::Candidate::LorentzVector getMEt() const
Definition: PFMETAlgorithmMVA.h:47
reco::LeafCandidate::setP4
void setP4(const LorentzVector &p4) final
set 4-momentum
Definition: LeafCandidate.h:158
reco::PUSubMETCandInfo::setMvaVal
void setMvaVal(float mva)
Definition: PUSubMETData.h:56
reco::Candidate::isElectron
virtual bool isElectron() const =0
eostools.move
def move(src, dest)
Definition: eostools.py:511
reco::LeafCandidate::phi
double phi() const final
momentum azimuthal angle
Definition: LeafCandidate.h:148
reco::PFJetCollection
std::vector< PFJet > PFJetCollection
collection of PFJet objects
Definition: PFJetCollection.h:14
reco::PFJet::neutralHadronEnergy
float neutralHadronEnergy() const
neutralHadronEnergy
Definition: PFJet.h:99
edm::ValueMap< float >
reco::PFMETProducerMVA::mvaMEtAlgo_isInitialized_
bool mvaMEtAlgo_isInitialized_
Definition: PFMETProducerMVA.h:105
edm::EventBase::id
edm::EventID id() const
Definition: EventBase.h:59
reco::PFJet
Jets made from PFObjects.
Definition: PFJet.h:20
reco::PFJet::neutralEmEnergy
float neutralEmEnergy() const
neutralEmEnergy
Definition: PFJet.h:147
reco::PFMETProducerMVA::computePFCandidateInfo
std::vector< reco::PUSubMETCandInfo > computePFCandidateInfo(const reco::CandidateView &, const reco::Vertex *)
Definition: PFMETProducerMVA.cc:289
reco::PFMETProducerMVA::chargedFracInCone
double chargedFracInCone(const reco::Candidate *iCand, const reco::CandidateView &pfCandidates, const reco::Vertex *hardScatterVertex, double iDRMax=0.2)
Definition: PFMETProducerMVA.cc:400
reco::Candidate::p4
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector
reco::PFMETProducerMVA::computeJetInfo
std::vector< reco::PUSubMETCandInfo > computeJetInfo(const reco::PFJetCollection &, const edm::Handle< reco::PFJetCollection > &, const edm::ValueMap< float > &, const reco::VertexCollection &, const reco::Vertex *, const reco::JetCorrector &iCorr, edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< reco::PUSubMETCandInfo > &iLeptons, std::vector< reco::PUSubMETCandInfo > &iCands)
Definition: PFMETProducerMVA.cc:204
reco::LeafCandidate::energy
double energy() const final
energy
Definition: LeafCandidate.h:125
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
PFMETAlgorithmMVA::evaluateMVA
void evaluateMVA()
Definition: PFMETAlgorithmMVA.cc:236
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
dPtMatch
const double dPtMatch
Definition: PFMETProducerMVA.cc:7
edm::View::end
const_iterator end() const
reco::PFMETProducerMVA::srcCorrJets_
edm::EDGetTokenT< reco::PFJetCollection > srcCorrJets_
Definition: PFMETProducerMVA.h:85
reco::Candidate::LorentzVector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
reco::Candidate::Point
math::XYZPoint Point
point in the space
Definition: Candidate.h:40
edm::Event
Definition: Event.h:73
reco::PFMETProducerMVA::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: PFMETProducerMVA.cc:34
reco::PFMETProducerMVA::metAlgo_
METAlgo metAlgo_
Definition: PFMETProducerMVA.h:102
reco::LeafCandidate::px
double px() const final
x coordinate of momentum vector
Definition: LeafCandidate.h:140
CommonMETData::mey
double mey
Definition: CommonMETData.h:16
edm::InputTag
Definition: InputTag.h:15
reco::Vertex
Definition: Vertex.h:35
reco::PFMETProducerMVA::istau
bool istau(const reco::Candidate *iCand)
Definition: PFMETProducerMVA.cc:373
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7
reco::PFMETProducerMVA::~PFMETProducerMVA
~PFMETProducerMVA() override
Definition: PFMETProducerMVA.cc:32