ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.3
Committed: Sat Apr 7 09:36:33 2012 UTC (13 years, 1 month ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.2: +37 -36 lines
Log Message:
Update of Met regresion

File Contents

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