ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.6
Committed: Mon Apr 23 15:38:00 2012 UTC (13 years ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.5: +3 -1 lines
Log Message:
52 MET update w/Covariance matrix

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.6 fJetIDMVA->Initialize( JetIDMVA::kMET,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 pharris 1.5 if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ) {
48     //(pfcand->HasGsfTrk() && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex)) < iDZCut)) ) {
49 pharris 1.1 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 pharris 1.6 if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iPUEnergyDensity->At(0)->Rho(),0.);
79 pharris 1.1 lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
80     lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
81     if(iSign > 0) iVec -= lVec;
82     if(iSign < 0) iVec += lVec;
83     iSumEt += lPt;
84 pharris 1.4 //=== Above was a bug in the training
85     //if(iSign > 0) iSumEt += lPt;
86     //if(iSign < 0) iSumEt -= lPt;
87 pharris 1.1 }
88 pharris 1.2
89     //--------------------------------------------------------------------------------------------------
90     //Corrected Jets
91     void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,int iSign) {
92     FourVectorM lVec(0,0,0,0);
93     double lPt = iJet->Pt();
94 pharris 1.6 if(iJet->RawMom().Pt() < 10) lPt = iJet->RawMom().Pt()*iJet->L1OffsetCorrectionScale();
95 pharris 1.2 lPt *= (iJet->NeutralEmEnergy()/iJet->E() + iJet->NeutralHadronEnergy()/iJet->E());
96     lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
97 pharris 1.4 if(iSign > 0) iVec -= lVec;
98     if(iSign < 0) iVec += lVec;
99 pharris 1.2 iSumEt += lPt;
100 pharris 1.4 //=== Above was a bug in the training
101     //if(iSign > 0) iSumEt += lPt;
102     //if(iSign < 0) iSumEt -= lPt;
103 pharris 1.2 }
104    
105 pharris 1.1 //--------------------------------------------------------------------------------------------------
106     Met RecoilTools::NoPUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
107     const PileupEnergyDensityCol *iPileupEnergyDensity,
108 pharris 1.3 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
109 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
110    
111     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
112     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
113     const PFCandidate *pPF = iCands->At(i0);
114     const Track* pTrack = pPF->TrackerTrk();
115     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
116     if(pTrack == 0 ) continue;
117     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
118     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
119     lVec -= pPF->Mom();
120     lSumEt += pPF->Pt();
121     }
122 pharris 1.4 int lNPass = 0;
123 pharris 1.1 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
124     const PFJet *pJet = iJets->At(i0);
125 pharris 1.4 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
126 pharris 1.3 if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
127 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
128 pharris 1.4 lNPass++;
129 pharris 1.1 }
130     Met lMet(lVec.Px(),lVec.Py());
131 pharris 1.4 lMet.SetSumEt( lSumEt);
132 pharris 1.1 return lMet;
133     }
134     //--------------------------------------------------------------------------------------------------
135 pharris 1.2 //Corrected Jets
136 pharris 1.3 Met RecoilTools::NoPUMet( const PFJetCol *iJets,
137     const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
138 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
139    
140     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
141     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
142     const PFCandidate *pPF = iCands->At(i0);
143     const Track* pTrack = pPF->TrackerTrk();
144     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
145     if(pTrack == 0 ) continue;
146     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
147     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
148     lVec -= pPF->Mom();
149     lSumEt += pPF->Pt();
150     }
151     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
152     const PFJet *pJet = iJets->At(i0);
153 pharris 1.3 if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
154 pharris 1.2 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
155     addNeut(pJet,lVec,lSumEt);
156     }
157     Met lMet(lVec.Px(),lVec.Py());
158     lMet.SetSumEt(lSumEt);
159     return lMet;
160     }
161     //--------------------------------------------------------------------------------------------------
162 pharris 1.1 Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
163 pharris 1.3 const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
164 pharris 1.1 const PileupEnergyDensityCol *iPileupEnergyDensity,
165 pharris 1.3 const PFCandidateCol *iCands ,const Vertex *iVertex,
166     const VertexCol *iVertices,
167 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
168     Double_t iDZCut) {
169    
170 pharris 1.3 Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
171 pharris 1.1 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
172     lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
173     lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
174     return lNoPUMet;
175     }
176     //--------------------------------------------------------------------------------------------------
177 pharris 1.2 //Corrected Jets
178     Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
179 pharris 1.3 const PFJetCol *iJets,const PFCandidateCol *iCands,
180     const Vertex *iVertex,const VertexCol *iVertices,
181 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
182     Double_t iDZCut) {
183    
184 pharris 1.3 Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
185 pharris 1.2 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
186     lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
187     lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
188     return lNoPUMet;
189     }
190     //--------------------------------------------------------------------------------------------------
191 pharris 1.1 Met RecoilTools::PUCMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
192     const PileupEnergyDensityCol *iPileupEnergyDensity,
193 pharris 1.3 const PFCandidateCol *iCands,
194     const Vertex *iVertex,const VertexCol *iVertices,
195 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
196     Double_t iDZCut) {
197    
198     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
199     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
200     const PFCandidate *pPF = iCands->At(i0);
201     const Track* pTrack = pPF->TrackerTrk();
202     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
203     if(pTrack == 0 &&
204     (pPF->PFType() == PFCandidate::eGamma ||
205     pPF->PFType() == PFCandidate::eEGammaHF ||
206     pPF->PFType() == PFCandidate::eNeutralHadron ||
207     pPF->PFType() == PFCandidate::eHadronHF ))
208     {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
209     if(pTrack == 0 ) continue;
210     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
211     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
212     lVec -= pPF->Mom();
213     lSumEt += pPF->Pt();
214     }
215     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
216     const PFJet *pJet = iJets->At(i0);
217 pharris 1.3 if(!JetTools::passPFLooseId(pJet)) continue;
218     if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
219     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
220 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
221     }
222     Met lMet(lVec.Px(),lVec.Py());
223     lMet.SetSumEt(lSumEt);
224     return lMet;
225     }
226 pharris 1.2 //--------------------------------------------------------------------------------------------------
227     //Corrected jets
228 pharris 1.3 Met RecoilTools::PUCMet( const PFJetCol *iJets,const PFCandidateCol *iCands,
229     const Vertex *iVertex,const VertexCol *iVertices,
230 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
231     Double_t iDZCut) {
232    
233     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
234     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
235     const PFCandidate *pPF = iCands->At(i0);
236     const Track* pTrack = pPF->TrackerTrk();
237     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
238     if(pTrack == 0 &&
239     (pPF->PFType() == PFCandidate::eGamma ||
240     pPF->PFType() == PFCandidate::eEGammaHF ||
241     pPF->PFType() == PFCandidate::eNeutralHadron ||
242     pPF->PFType() == PFCandidate::eHadronHF ))
243     {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
244     if(pTrack == 0 ) continue;
245     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
246     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
247     lVec -= pPF->Mom();
248     lSumEt += pPF->Pt();
249     }
250     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
251     const PFJet *pJet = iJets->At(i0);
252     if(!JetTools::passPFLooseId(pJet)) continue;
253 pharris 1.3 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
254 pharris 1.2 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
255     addNeut(pJet,lVec,lSumEt,-1);
256     }
257     Met lMet(lVec.Px(),lVec.Py());
258     lMet.SetSumEt(lSumEt);
259     return lMet;
260     }
261 pharris 1.1 //----> This MET is a bug need to fix it
262     //--------------------------------------------------------------------------------------------------
263     Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
264     const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
265     const PileupEnergyDensityCol *iPileupEnergyDensity,
266     const PFCandidateCol *iCands,const Vertex *iVertex,
267 pharris 1.3 const VertexCol *iVertices,
268 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
269     Double_t iDZCut) {
270 pharris 1.3 Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
271 pharris 1.1 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
272     lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
273     lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
274     return lPUCMet;
275     }
276     //--------------------------------------------------------------------------------------------------
277 pharris 1.2 //Corrected Jets
278     Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
279     const PFJetCol *iJets,
280     const PFCandidateCol *iCands,const Vertex *iVertex,
281 pharris 1.3 const VertexCol *iVertices,
282 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
283     Double_t iDZCut) {
284 pharris 1.3 Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
285 pharris 1.2 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
286     lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
287     lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
288     return lPUCMet;
289     }
290     //--------------------------------------------------------------------------------------------------
291 pharris 1.1 Met RecoilTools::PUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
292     const PileupEnergyDensityCol *iPileupEnergyDensity,
293     const PFCandidateCol *iCands,const Vertex *iVertex,
294 pharris 1.3 const VertexCol *iVertices,
295 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
296     Double_t iDZCut) {
297    
298     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
299     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
300     const PFCandidate *pPF = iCands->At(i0);
301     const Track* pTrack = pPF->TrackerTrk();
302     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
303     if(pTrack == 0 ) continue;
304     if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
305     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
306     lVec -= pPF->Mom();
307     lSumEt += pPF->Pt();
308     }
309     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
310     const PFJet *pJet = iJets->At(i0);
311 pharris 1.3 if(!JetTools::passPFLooseId(pJet)) continue;
312     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
313     if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
314 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
315     }
316     Met lMet(lVec.Px(),lVec.Py());
317     lMet.SetSumEt(lSumEt);
318     return lMet;
319     }
320     //--------------------------------------------------------------------------------------------------
321 pharris 1.2 //Corrected Jets
322     Met RecoilTools::PUMet( const PFJetCol *iJets,
323 pharris 1.3 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
324 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
325     Double_t iDZCut) {
326    
327     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
328     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
329     const PFCandidate *pPF = iCands->At(i0);
330     const Track* pTrack = pPF->TrackerTrk();
331     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
332     if(pTrack == 0 ) continue;
333     if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
334     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
335     lVec -= pPF->Mom();
336     lSumEt += pPF->Pt();
337     }
338     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
339     const PFJet *pJet = iJets->At(i0);
340     if(!JetTools::passPFLooseId(pJet)) continue;
341     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
342 pharris 1.3 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
343 pharris 1.2 addNeut(pJet,lVec,lSumEt);
344     }
345     Met lMet(lVec.Px(),lVec.Py());
346     lMet.SetSumEt(lSumEt);
347     return lMet;
348     }
349     //--------------------------------------------------------------------------------------------------
350 pharris 1.1 Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
351     const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
352     const PileupEnergyDensityCol *iPileupEnergyDensity,
353     const PFCandidateCol *iCands,const Vertex *iVertex,
354 pharris 1.3 const VertexCol *iVertices,
355 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
356     Double_t iDZCut) {
357 pharris 1.3 Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
358 pharris 1.1 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
359     lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
360     lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
361     return lPUMet;
362     }
363 pharris 1.2 //--------------------------------------------------------------------------------------------------
364     //Corrected Jets
365     Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
366     const PFJetCol *iJets,
367 pharris 1.3 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
368 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
369     Double_t iDZCut) {
370 pharris 1.3 Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
371 pharris 1.2 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
372     lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
373     lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
374     return lPUMet;
375     }