ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.15
Committed: Wed May 2 21:59:34 2012 UTC (13 years ago) by pharris
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_028, Mit_027, Mit_027a
Changes since 1.14: +13 -13 lines
Log Message:
Updated the training

File Contents

# Content
1 #include "MitPhysics/Utils/interface/RecoilTools.h"
2 #include "MitPhysics/Utils/interface/JetTools.h"
3 #include <TFile.h>
4
5 ClassImp(mithep::RecoilTools)
6
7 using namespace mithep;
8
9 RecoilTools::RecoilTools(TString iJetLowPtMVAFile,TString iJetHighPtMVAFile,TString iCutFile) {
10 fJetIDMVA = new JetIDMVA();
11 fJetIDMVA->Initialize( JetIDMVA::kMET,iJetLowPtMVAFile,iJetHighPtMVAFile,JetIDMVA::kBaseline,iCutFile);
12 }
13 //--------------------------------------------------------------------------------------------------
14 RecoilTools::~RecoilTools() {
15 delete fJetIDMVA;
16 }
17 //--------------------------------------------------------------------------------------------------
18 bool RecoilTools::filter(const PFJet *iJet,Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2) {
19 double pDEta1 = iJet->Eta() - iEta1;
20 double pDPhi1 = fabs(iJet->Phi() - iPhi1); if(pDPhi1 > 2.*TMath::Pi()-pDPhi1) pDPhi1 = 2.*TMath::Pi()-pDPhi1;
21 double pDR1 = sqrt(pDEta1*pDEta1 + pDPhi1*pDPhi1);
22 if(pDR1 < 0.5) return false;
23 double pDEta2 = iJet->Eta() - iEta2;
24 double pDPhi2 = fabs(iJet->Phi() - iPhi2); if(pDPhi2 > 2.*TMath::Pi()-pDPhi2) pDPhi2 = 2.*TMath::Pi()-pDPhi2;
25 double pDR2 = sqrt(pDEta2*pDEta2 + pDPhi2*pDPhi2);
26 if(pDR2 < 0.5) return false;
27 return true;
28 }
29
30 //--------------------------------------------------------------------------------------------------
31 Met RecoilTools::pfRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
32 const PFCandidateCol *iCands) {
33 double lSumEt = 0;
34 FourVectorM lVec(0,0,0,0);
35 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) { lVec -= iCands->At(i0)->Mom(); lSumEt += iCands->At(i0)->Et();}
36 Met lPFMet(lVec.Px(),lVec.Py());
37 lPFMet.SetSumEt(lSumEt);
38 lPFMet.SetMex (lPFMet.Mex()+iVisPt*cos(iVisPhi));
39 lPFMet.SetMey (lPFMet.Mey()+iVisPt*sin(iVisPhi));
40 lPFMet.SetSumEt(lPFMet.SumEt()-iVisSumEt);
41 return lPFMet;
42 }
43 //--------------------------------------------------------------------------------------------------
44 Met RecoilTools::trackMet(const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
45 double trkMetx = 0;
46 double trkMety = 0;
47 double trkSumEt = 0;
48 for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
49 const PFCandidate *pfcand = iCands->At(i0);
50 if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
51 (pfcand->HasGsfTrk() && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex)) < iDZCut)) ) {
52 trkMetx -= pfcand->Px();
53 trkMety -= pfcand->Py();
54 trkSumEt += pfcand->Pt();
55 }
56 }
57 Met lMet(trkMetx,trkMety);
58 lMet.SetSumEt(trkSumEt);
59 return lMet;
60 }
61
62 //--------------------------------------------------------------------------------------------------
63 //Compute the recoil => here this requires the vector sum of the visible components
64 //VisPt => Vector sum pT of the visible non-recoiling components
65 //VisPhi => Vector sum Phi of the visible non-recoiling components
66 //visSumEt => Vector sum Et =f the visible non-recoiling components
67 Met RecoilTools::trackRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
68 const PFCandidateCol *iCands,const Vertex *iVertex,double iDZCut) {
69 Met lTrkMet = trackMet(iCands,iVertex,iDZCut);
70 lTrkMet.SetMex (lTrkMet.Mex()+iVisPt*cos(iVisPhi));
71 lTrkMet.SetMey (lTrkMet.Mey()+iVisPt*sin(iVisPhi));
72 lTrkMet.SetSumEt(lTrkMet.SumEt()-iVisSumEt);
73 return lTrkMet;
74 }
75 //--------------------------------------------------------------------------------------------------
76 void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,
77 FactorizedJetCorrector *iJetCorrector,const PileupEnergyDensityCol *iPUEnergyDensity,
78 int iSign) {
79 FourVectorM lVec(0,0,0,0);
80 double lPt = fJetIDMVA->correctedPt(iJet,iJetCorrector,iPUEnergyDensity);
81 //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iPUEnergyDensity->At(0)->Rho(),0.);
82 lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
83 lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
84 if(iSign > 0) iVec -= lVec;
85 if(iSign < 0) iVec += lVec;
86 //iSumEt += lPt;
87 //=== Above was a bug in the training
88 if(iSign > 0) iSumEt += lPt;
89 if(iSign < 0) iSumEt -= lPt;
90 }
91
92 //--------------------------------------------------------------------------------------------------
93 //Corrected Jets
94 void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,double iRho,int iSign) {
95 FourVectorM lVec(0,0,0,0);
96 double lPt = iJet->Pt();
97 //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iRho,0.);//to be fixed
98 //if(iJet->RawMom().Pt() < 10) lPt = iJet->RawMom().Pt()*iJet->L1OffsetCorrectionScale();
99 lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
100 lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
101 if(iSign > 0) iVec -= lVec;
102 if(iSign < 0) iVec += lVec;
103 //iSumEt += lPt;
104 //=== Above was a bug in the training
105 if(iSign > 0) iSumEt += lPt;
106 if(iSign < 0) iSumEt -= lPt;
107 }
108
109 //--------------------------------------------------------------------------------------------------
110 Met RecoilTools::NoPUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
111 const PileupEnergyDensityCol *iPileupEnergyDensity,
112 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
113 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
114
115 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
116 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
117 const PFCandidate *pPF = iCands->At(i0);
118 const Track* pTrack = pPF->TrackerTrk();
119 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
120 if(pTrack == 0 ) continue;
121 if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
122 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
123 lSumEt += pPF->Pt();
124 lVec -= pPF->Mom();
125 }
126 int lNPass = 0;
127 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
128 const PFJet *pJet = iJets->At(i0);
129 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue;
130 if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
131 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
132 lNPass++;
133 }
134 Met lMet(lVec.Px(),lVec.Py());
135 lMet.SetSumEt( lSumEt);
136 return lMet;
137 }
138 //--------------------------------------------------------------------------------------------------
139 //Corrected Jets
140 Met RecoilTools::NoPUMet( const PFJetCol *iJets,
141 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
142 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
143
144 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
145 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
146 const PFCandidate *pPF = iCands->At(i0);
147 const Track* pTrack = pPF->TrackerTrk();
148 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
149 if(pTrack == 0 ) continue;
150 if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
151 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
152 lVec -= pPF->Mom();
153 lSumEt += pPF->Pt();
154 }
155 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
156 const PFJet *pJet = iJets->At(i0);
157 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue;
158 if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
159 addNeut(pJet,lVec,lSumEt,iRho);
160 }
161 Met lMet(lVec.Px(),lVec.Py());
162 lMet.SetSumEt(lSumEt);
163 return lMet;
164 }
165 //--------------------------------------------------------------------------------------------------
166 Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
167 const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
168 const PileupEnergyDensityCol *iPileupEnergyDensity,
169 const PFCandidateCol *iCands ,const Vertex *iVertex,
170 const VertexCol *iVertices,
171 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
172 Double_t iDZCut) {
173
174 Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
175 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
176 lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
177 lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
178 return lNoPUMet;
179 }
180 //--------------------------------------------------------------------------------------------------
181 //Corrected Jets
182 Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
183 const PFJetCol *iJets,const PFCandidateCol *iCands,
184 const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
185 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
186 Double_t iDZCut) {
187
188 Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
189 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
190 lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
191 lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
192 return lNoPUMet;
193 }
194 //--------------------------------------------------------------------------------------------------
195 Met RecoilTools::PUCMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
196 const PileupEnergyDensityCol *iPileupEnergyDensity,
197 const PFCandidateCol *iCands,
198 const Vertex *iVertex,const VertexCol *iVertices,
199 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
200 Double_t iDZCut) {
201
202 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
203 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
204 const PFCandidate *pPF = iCands->At(i0);
205 const Track* pTrack = pPF->TrackerTrk();
206 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
207 if(pTrack == 0 &&
208 (pPF->PFType() == PFCandidate::eGamma ||
209 pPF->PFType() == PFCandidate::eEGammaHF ||
210 pPF->PFType() == PFCandidate::eNeutralHadron ||
211 pPF->PFType() == PFCandidate::eHadronHF ))
212 {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
213 if(pTrack == 0 ) continue;
214 if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
215 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
216 lVec -= pPF->Mom();
217 lSumEt += pPF->Pt();
218 }
219 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
220 const PFJet *pJet = iJets->At(i0);
221 if(!JetTools::passPFLooseId(pJet)) continue;
222 if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
223 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
224 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
225 }
226 Met lMet(lVec.Px(),lVec.Py());
227 lMet.SetSumEt(lSumEt);
228 return lMet;
229 }
230 //--------------------------------------------------------------------------------------------------
231 //Corrected jets
232 Met RecoilTools::PUCMet( const PFJetCol *iJets,const PFCandidateCol *iCands,
233 const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
234 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
235 Double_t iDZCut) {
236
237 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
238 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
239 const PFCandidate *pPF = iCands->At(i0);
240 const Track* pTrack = pPF->TrackerTrk();
241 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
242 if(pTrack == 0 &&
243 (pPF->PFType() == PFCandidate::eGamma ||
244 pPF->PFType() == PFCandidate::eEGammaHF ||
245 pPF->PFType() == PFCandidate::eNeutralHadron ||
246 pPF->PFType() == PFCandidate::eHadronHF ))
247 {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
248 if(pTrack == 0 ) continue;
249 if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
250 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
251 lVec -= pPF->Mom();
252 lSumEt += pPF->Pt();
253 }
254 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
255 const PFJet *pJet = iJets->At(i0);
256 if(!JetTools::passPFLooseId(pJet)) continue;
257 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
258 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
259 addNeut(pJet,lVec,lSumEt,iRho,-1);
260 }
261 Met lMet(lVec.Px(),lVec.Py());
262 lMet.SetSumEt(lSumEt);
263 return lMet;
264 }
265 //----> This MET is a bug need to fix it
266 //--------------------------------------------------------------------------------------------------
267 Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
268 const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
269 const PileupEnergyDensityCol *iPileupEnergyDensity,
270 const PFCandidateCol *iCands,const Vertex *iVertex,
271 const VertexCol *iVertices,
272 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
273 Double_t iDZCut) {
274 Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
275 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
276 lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
277 lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
278 return lPUCMet;
279 }
280 //--------------------------------------------------------------------------------------------------
281 //Corrected Jets
282 Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
283 const PFJetCol *iJets,
284 const PFCandidateCol *iCands,const Vertex *iVertex,
285 const VertexCol *iVertices,Double_t iRho,
286 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
287 Double_t iDZCut) {
288 Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
289 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
290 lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
291 lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
292 return lPUCMet;
293 }
294 //--------------------------------------------------------------------------------------------------
295 Met RecoilTools::PUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
296 const PileupEnergyDensityCol *iPileupEnergyDensity,
297 const PFCandidateCol *iCands,const Vertex *iVertex,
298 const VertexCol *iVertices,
299 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
300 Double_t iDZCut) {
301
302 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
303 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
304 const PFCandidate *pPF = iCands->At(i0);
305 const Track* pTrack = pPF->TrackerTrk();
306 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
307 if(pTrack == 0 ) continue;
308 if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
309 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
310 lVec -= pPF->Mom();
311 lSumEt += pPF->Pt();
312 }
313 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
314 const PFJet *pJet = iJets->At(i0);
315 if(!JetTools::passPFLooseId(pJet)) continue;
316 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
317 if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
318 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
319 }
320 Met lMet(lVec.Px(),lVec.Py());
321 lMet.SetSumEt(lSumEt);
322 return lMet;
323 }
324 //--------------------------------------------------------------------------------------------------
325 //Corrected Jets
326 Met RecoilTools::PUMet( const PFJetCol *iJets,
327 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
328 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
329 Double_t iDZCut) {
330
331 FourVectorM lVec (0,0,0,0); double lSumEt = 0;
332 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
333 const PFCandidate *pPF = iCands->At(i0);
334 const Track* pTrack = pPF->TrackerTrk();
335 if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
336 if(pTrack == 0 ) continue;
337 if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
338 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
339 lVec -= pPF->Mom();
340 lSumEt += pPF->Pt();
341 }
342 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
343 const PFJet *pJet = iJets->At(i0);
344 if(!JetTools::passPFLooseId(pJet)) continue;
345 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
346 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
347 addNeut(pJet,lVec,lSumEt,iRho);
348 }
349 Met lMet(lVec.Px(),lVec.Py());
350 lMet.SetSumEt(lSumEt);
351 return lMet;
352 }
353 //--------------------------------------------------------------------------------------------------
354 Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
355 const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
356 const PileupEnergyDensityCol *iPileupEnergyDensity,
357 const PFCandidateCol *iCands,const Vertex *iVertex,
358 const VertexCol *iVertices,
359 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
360 Double_t iDZCut) {
361 Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
362 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
363 lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
364 lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
365 return lPUMet;
366 }
367 //--------------------------------------------------------------------------------------------------
368 //Corrected Jets
369 Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
370 const PFJetCol *iJets,
371 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
372 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
373 Double_t iDZCut) {
374 Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
375 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
376 lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
377 lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
378 return lPUMet;
379 }