ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.13
Committed: Tue May 1 18:17:54 2012 UTC (13 years ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.12: +9 -9 lines
Log Message:
Fixed Rho bug

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