ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.16
Committed: Fri May 18 17:02:14 2012 UTC (12 years, 11 months ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.15: +155 -3 lines
Log Message:
updated regression MET for Tau

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 pharris 1.16 //--------------------------------------------------------------------------------------------------
30     bool RecoilTools::filter(const PFCandidate *iCand,Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2) {
31     double pDEta1 = iCand->Eta() - iEta1;
32     double pDPhi1 = fabs(iCand->Phi() - iPhi1); if(pDPhi1 > 2.*TMath::Pi()-pDPhi1) pDPhi1 = 2.*TMath::Pi()-pDPhi1;
33     double pDR1 = sqrt(pDEta1*pDEta1 + pDPhi1*pDPhi1);
34     if(pDR1 < 0.3) return false;
35     double pDEta2 = iCand->Eta() - iEta2;
36     double pDPhi2 = fabs(iCand->Phi() - iPhi2); if(pDPhi2 > 2.*TMath::Pi()-pDPhi2) pDPhi2 = 2.*TMath::Pi()-pDPhi2;
37     double pDR2 = sqrt(pDEta2*pDEta2 + pDPhi2*pDPhi2);
38     if(pDR2 < 0.3) return false;
39     return true;
40     }
41 pharris 1.1 //--------------------------------------------------------------------------------------------------
42     Met RecoilTools::pfRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
43 pharris 1.9 const PFCandidateCol *iCands) {
44     double lSumEt = 0;
45     FourVectorM lVec(0,0,0,0);
46 pharris 1.16 for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
47     lVec -= iCands->At(i0)->Mom();
48     lSumEt += iCands->At(i0)->Et();
49     }
50 pharris 1.9 Met lPFMet(lVec.Px(),lVec.Py());
51     lPFMet.SetSumEt(lSumEt);
52 pharris 1.1 lPFMet.SetMex (lPFMet.Mex()+iVisPt*cos(iVisPhi));
53     lPFMet.SetMey (lPFMet.Mey()+iVisPt*sin(iVisPhi));
54     lPFMet.SetSumEt(lPFMet.SumEt()-iVisSumEt);
55     return lPFMet;
56     }
57     //--------------------------------------------------------------------------------------------------
58 pharris 1.16 Met RecoilTools::pfRecoil(double iPhi1,double iEta1,double iPhi2,double iEta2,
59     const PFCandidateCol *iCands) {
60     double lSumEt = 0;
61     FourVectorM lVec(0,0,0,0);
62     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
63     if(!filter(iCands->At(i0),iPhi1,iEta1,iPhi2,iEta2)) continue;
64     lVec -= iCands->At(i0)->Mom();
65     lSumEt += iCands->At(i0)->Et();
66     }
67     Met lPFMet(lVec.Px(),lVec.Py());
68     lPFMet.SetSumEt(lSumEt);
69     return lPFMet;
70     }
71     //--------------------------------------------------------------------------------------------------
72 pharris 1.1 Met RecoilTools::trackMet(const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
73     double trkMetx = 0;
74     double trkMety = 0;
75     double trkSumEt = 0;
76 pharris 1.9 for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
77     const PFCandidate *pfcand = iCands->At(i0);
78 pharris 1.8 if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
79     (pfcand->HasGsfTrk() && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex)) < iDZCut)) ) {
80 pharris 1.1 trkMetx -= pfcand->Px();
81     trkMety -= pfcand->Py();
82     trkSumEt += pfcand->Pt();
83     }
84     }
85     Met lMet(trkMetx,trkMety);
86     lMet.SetSumEt(trkSumEt);
87     return lMet;
88     }
89 pharris 1.16 //--------------------------------------------------------------------------------------------------
90     Met RecoilTools::trackRecoil(double iPhi1,double iEta1,double iPhi2,double iEta2,const PFCandidateCol *iCands,const Vertex *iVertex,Double_t iDZCut) {
91     double trkMetx = 0;
92     double trkMety = 0;
93     double trkSumEt = 0;
94     for(UInt_t i0=0; i0<iCands->GetEntries(); i0++) {
95     const PFCandidate *pfcand = iCands->At(i0);
96     if(!filter(pfcand,iPhi1,iEta1,iPhi2,iEta2)) continue;
97     if( (pfcand->HasTrackerTrk() && (fabs(pfcand->TrackerTrk()->DzCorrected(*iVertex))< iDZCut)) ||
98     (pfcand->HasGsfTrk() && (fabs(pfcand->GsfTrk()->DzCorrected(*iVertex)) < iDZCut)) ) {
99     trkMetx -= pfcand->Px();
100     trkMety -= pfcand->Py();
101     trkSumEt += pfcand->Pt();
102     }
103     }
104     Met lMet(trkMetx,trkMety);
105     lMet.SetSumEt(trkSumEt);
106     return lMet;
107     }
108 pharris 1.1 //--------------------------------------------------------------------------------------------------
109     //Compute the recoil => here this requires the vector sum of the visible components
110     //VisPt => Vector sum pT of the visible non-recoiling components
111     //VisPhi => Vector sum Phi of the visible non-recoiling components
112     //visSumEt => Vector sum Et =f the visible non-recoiling components
113     Met RecoilTools::trackRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
114     const PFCandidateCol *iCands,const Vertex *iVertex,double iDZCut) {
115     Met lTrkMet = trackMet(iCands,iVertex,iDZCut);
116     lTrkMet.SetMex (lTrkMet.Mex()+iVisPt*cos(iVisPhi));
117     lTrkMet.SetMey (lTrkMet.Mey()+iVisPt*sin(iVisPhi));
118     lTrkMet.SetSumEt(lTrkMet.SumEt()-iVisSumEt);
119     return lTrkMet;
120     }
121     //--------------------------------------------------------------------------------------------------
122     void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,
123     FactorizedJetCorrector *iJetCorrector,const PileupEnergyDensityCol *iPUEnergyDensity,
124     int iSign) {
125     FourVectorM lVec(0,0,0,0);
126     double lPt = fJetIDMVA->correctedPt(iJet,iJetCorrector,iPUEnergyDensity);
127 pharris 1.15 //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iPUEnergyDensity->At(0)->Rho(),0.);
128 pharris 1.12 lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
129 pharris 1.1 lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
130     if(iSign > 0) iVec -= lVec;
131     if(iSign < 0) iVec += lVec;
132 pharris 1.15 //iSumEt += lPt;
133 pharris 1.4 //=== Above was a bug in the training
134 pharris 1.15 if(iSign > 0) iSumEt += lPt;
135     if(iSign < 0) iSumEt -= lPt;
136 pharris 1.1 }
137 pharris 1.2
138     //--------------------------------------------------------------------------------------------------
139     //Corrected Jets
140 pharris 1.9 void RecoilTools::addNeut(const PFJet *iJet,FourVectorM &iVec,Double_t &iSumEt,double iRho,int iSign) {
141 pharris 1.2 FourVectorM lVec(0,0,0,0);
142     double lPt = iJet->Pt();
143 pharris 1.15 //if(iJet->RawMom().Pt() < 10) lPt = TMath::Max(iJet->RawMom().Pt()-iJet->JetArea()*iRho,0.);//to be fixed
144 pharris 1.9 //if(iJet->RawMom().Pt() < 10) lPt = iJet->RawMom().Pt()*iJet->L1OffsetCorrectionScale();
145 pharris 1.12 lPt *= (iJet->NeutralEmEnergy()/iJet->RawMom().E() + iJet->NeutralHadronEnergy()/iJet->RawMom().E());
146 pharris 1.2 lVec.SetPt(lPt); lVec.SetEta(iJet->Eta()); lVec.SetPhi(iJet->Phi()); lVec.SetM(iJet->Mass());
147 pharris 1.4 if(iSign > 0) iVec -= lVec;
148     if(iSign < 0) iVec += lVec;
149 pharris 1.15 //iSumEt += lPt;
150 pharris 1.4 //=== Above was a bug in the training
151 pharris 1.15 if(iSign > 0) iSumEt += lPt;
152     if(iSign < 0) iSumEt -= lPt;
153 pharris 1.2 }
154    
155 pharris 1.1 //--------------------------------------------------------------------------------------------------
156     Met RecoilTools::NoPUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
157     const PileupEnergyDensityCol *iPileupEnergyDensity,
158 pharris 1.3 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,
159 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
160    
161     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
162     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
163     const PFCandidate *pPF = iCands->At(i0);
164     const Track* pTrack = pPF->TrackerTrk();
165     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
166     if(pTrack == 0 ) continue;
167 pharris 1.15 if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
168 pharris 1.1 (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
169 pharris 1.15 lSumEt += pPF->Pt();
170 pharris 1.1 lVec -= pPF->Mom();
171     }
172 pharris 1.4 int lNPass = 0;
173 pharris 1.1 for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
174     const PFJet *pJet = iJets->At(i0);
175 pharris 1.15 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue;
176 pharris 1.3 if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
177 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
178 pharris 1.4 lNPass++;
179 pharris 1.1 }
180     Met lMet(lVec.Px(),lVec.Py());
181 pharris 1.4 lMet.SetSumEt( lSumEt);
182 pharris 1.1 return lMet;
183     }
184     //--------------------------------------------------------------------------------------------------
185 pharris 1.2 //Corrected Jets
186 pharris 1.3 Met RecoilTools::NoPUMet( const PFJetCol *iJets,
187 pharris 1.9 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
188 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,Double_t iDZCut) {
189    
190     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
191     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
192     const PFCandidate *pPF = iCands->At(i0);
193     const Track* pTrack = pPF->TrackerTrk();
194     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
195     if(pTrack == 0 ) continue;
196     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
197     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
198     lVec -= pPF->Mom();
199 pharris 1.15 lSumEt += pPF->Pt();
200 pharris 1.2 }
201     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
202     const PFJet *pJet = iJets->At(i0);
203 pharris 1.15 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue;
204 pharris 1.3 if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
205 pharris 1.9 addNeut(pJet,lVec,lSumEt,iRho);
206 pharris 1.2 }
207     Met lMet(lVec.Px(),lVec.Py());
208     lMet.SetSumEt(lSumEt);
209     return lMet;
210     }
211     //--------------------------------------------------------------------------------------------------
212 pharris 1.16 Met RecoilTools::NoPURecoil(Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
213     const PFJetCol *iJets,
214     const PFCandidateCol *iCands ,
215     const Vertex *iVertex,const VertexCol *iVertices,
216     FactorizedJetCorrector *iJetCorrector,
217     const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
218    
219     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
220     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
221     const PFCandidate *pPF = iCands->At(i0);
222     if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;
223     const Track* pTrack = pPF->TrackerTrk();
224     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
225     if(pTrack == 0 ) continue;
226     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
227     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
228     lSumEt += pPF->Pt();
229     lVec -= pPF->Mom();
230     }
231     int lNPass = 0;
232     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
233     const PFJet *pJet = iJets->At(i0);
234     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue;
235     if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
236     if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(!fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
237     if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
238     if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1.);
239     lNPass++;
240     }
241     Met lMet(lVec.Px(),lVec.Py());
242     lMet.SetSumEt( lSumEt);
243     return lMet;
244     }
245    
246     //--------------------------------------------------------------------------------------------------
247 pharris 1.1 Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
248 pharris 1.3 const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
249 pharris 1.1 const PileupEnergyDensityCol *iPileupEnergyDensity,
250 pharris 1.3 const PFCandidateCol *iCands ,const Vertex *iVertex,
251     const VertexCol *iVertices,
252 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
253     Double_t iDZCut) {
254    
255 pharris 1.3 Met lNoPUMet = NoPUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
256 pharris 1.1 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
257     lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
258     lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
259     return lNoPUMet;
260     }
261     //--------------------------------------------------------------------------------------------------
262 pharris 1.2 //Corrected Jets
263     Met RecoilTools::NoPURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
264 pharris 1.3 const PFJetCol *iJets,const PFCandidateCol *iCands,
265 pharris 1.9 const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
266 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
267     Double_t iDZCut) {
268    
269 pharris 1.9 Met lNoPUMet = NoPUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
270 pharris 1.2 lNoPUMet.SetMex (lNoPUMet.Mex()+iVisPt*cos(iVisPhi));
271     lNoPUMet.SetMey (lNoPUMet.Mey()+iVisPt*sin(iVisPhi));
272     lNoPUMet.SetSumEt(lNoPUMet.SumEt()-iVisSumEt);
273     return lNoPUMet;
274     }
275     //--------------------------------------------------------------------------------------------------
276 pharris 1.1 Met RecoilTools::PUCMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
277     const PileupEnergyDensityCol *iPileupEnergyDensity,
278 pharris 1.3 const PFCandidateCol *iCands,
279     const Vertex *iVertex,const VertexCol *iVertices,
280 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
281     Double_t iDZCut) {
282    
283     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
284     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
285     const PFCandidate *pPF = iCands->At(i0);
286     const Track* pTrack = pPF->TrackerTrk();
287     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
288     if(pTrack == 0 &&
289     (pPF->PFType() == PFCandidate::eGamma ||
290     pPF->PFType() == PFCandidate::eEGammaHF ||
291     pPF->PFType() == PFCandidate::eNeutralHadron ||
292     pPF->PFType() == PFCandidate::eHadronHF ))
293     {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
294     if(pTrack == 0 ) continue;
295     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
296     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
297     lVec -= pPF->Mom();
298     lSumEt += pPF->Pt();
299     }
300     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
301     const PFJet *pJet = iJets->At(i0);
302 pharris 1.3 if(!JetTools::passPFLooseId(pJet)) continue;
303     if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
304     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
305 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
306     }
307     Met lMet(lVec.Px(),lVec.Py());
308     lMet.SetSumEt(lSumEt);
309     return lMet;
310     }
311 pharris 1.2 //--------------------------------------------------------------------------------------------------
312     //Corrected jets
313 pharris 1.3 Met RecoilTools::PUCMet( const PFJetCol *iJets,const PFCandidateCol *iCands,
314 pharris 1.9 const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
315 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
316     Double_t iDZCut) {
317    
318     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
319     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
320     const PFCandidate *pPF = iCands->At(i0);
321     const Track* pTrack = pPF->TrackerTrk();
322     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
323     if(pTrack == 0 &&
324     (pPF->PFType() == PFCandidate::eGamma ||
325     pPF->PFType() == PFCandidate::eEGammaHF ||
326     pPF->PFType() == PFCandidate::eNeutralHadron ||
327     pPF->PFType() == PFCandidate::eHadronHF ))
328     {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
329     if(pTrack == 0 ) continue;
330     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
331     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
332     lVec -= pPF->Mom();
333     lSumEt += pPF->Pt();
334     }
335     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
336     const PFJet *pJet = iJets->At(i0);
337     if(!JetTools::passPFLooseId(pJet)) continue;
338 pharris 1.3 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
339 pharris 1.2 if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
340 pharris 1.9 addNeut(pJet,lVec,lSumEt,iRho,-1);
341 pharris 1.2 }
342     Met lMet(lVec.Px(),lVec.Py());
343     lMet.SetSumEt(lSumEt);
344     return lMet;
345     }
346 pharris 1.16 //--------------------------------------------------------------------------------------------------
347     Met RecoilTools::PUCRecoil( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
348     const PFJetCol *iJets,
349     const PFCandidateCol *iCands ,
350     const Vertex *iVertex,const VertexCol *iVertices,
351     FactorizedJetCorrector *iJetCorrector,
352     const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
353    
354    
355     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
356     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
357     const PFCandidate *pPF = iCands->At(i0);
358     if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;
359     const Track* pTrack = pPF->TrackerTrk();
360     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
361     if(pTrack == 0 &&
362     (pPF->PFType() == PFCandidate::eGamma ||
363     pPF->PFType() == PFCandidate::eEGammaHF ||
364     pPF->PFType() == PFCandidate::eNeutralHadron ||
365     pPF->PFType() == PFCandidate::eHadronHF ))
366     {lVec -= pPF->Mom(); lSumEt += pPF->Pt();}
367     if(pTrack == 0 ) continue;
368     if( !((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
369     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
370     lVec -= pPF->Mom();
371     lSumEt += pPF->Pt();
372     }
373     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
374     const PFJet *pJet = iJets->At(i0);
375     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning==> if not done already
376     if(!JetTools::passPFLooseId(pJet)) continue;
377     if(iJetCorrector != 0 && iPileupEnergyDensity != 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
378     if(iJetCorrector == 0 || iPileupEnergyDensity == 0) if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
379     if(iJetCorrector != 0 && iPileupEnergyDensity != 0) addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity,-1);
380     if(iJetCorrector == 0 || iPileupEnergyDensity == 0) addNeut(pJet,lVec,lSumEt,1,-1);
381     }
382     Met lMet(lVec.Px(),lVec.Py());
383     lMet.SetSumEt(lSumEt);
384     return lMet;
385     }
386 pharris 1.1 //----> This MET is a bug need to fix it
387     //--------------------------------------------------------------------------------------------------
388     Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
389     const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
390     const PileupEnergyDensityCol *iPileupEnergyDensity,
391     const PFCandidateCol *iCands,const Vertex *iVertex,
392 pharris 1.3 const VertexCol *iVertices,
393 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
394     Double_t iDZCut) {
395 pharris 1.3 Met lPUCMet = PUCMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
396 pharris 1.1 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
397     lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
398     lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
399     return lPUCMet;
400     }
401     //--------------------------------------------------------------------------------------------------
402 pharris 1.2 //Corrected Jets
403     Met RecoilTools::PUCRecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
404     const PFJetCol *iJets,
405     const PFCandidateCol *iCands,const Vertex *iVertex,
406 pharris 1.9 const VertexCol *iVertices,Double_t iRho,
407 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
408     Double_t iDZCut) {
409 pharris 1.9 Met lPUCMet = PUCMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
410 pharris 1.2 lPUCMet.SetMex (lPUCMet.Mex()+iVisPt*cos(iVisPhi));
411     lPUCMet.SetMey (lPUCMet.Mey()+iVisPt*sin(iVisPhi));
412     lPUCMet.SetSumEt(lPUCMet.SumEt()-iVisSumEt);
413     return lPUCMet;
414     }
415     //--------------------------------------------------------------------------------------------------
416 pharris 1.1 Met RecoilTools::PUMet( const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
417     const PileupEnergyDensityCol *iPileupEnergyDensity,
418     const PFCandidateCol *iCands,const Vertex *iVertex,
419 pharris 1.3 const VertexCol *iVertices,
420 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
421     Double_t iDZCut) {
422    
423     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
424     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
425     const PFCandidate *pPF = iCands->At(i0);
426     const Track* pTrack = pPF->TrackerTrk();
427     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
428     if(pTrack == 0 ) continue;
429     if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
430     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
431     lVec -= pPF->Mom();
432     lSumEt += pPF->Pt();
433     }
434     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
435     const PFJet *pJet = iJets->At(i0);
436 pharris 1.3 if(!JetTools::passPFLooseId(pJet)) continue;
437     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
438     if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
439 pharris 1.1 addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
440     }
441     Met lMet(lVec.Px(),lVec.Py());
442     lMet.SetSumEt(lSumEt);
443     return lMet;
444     }
445     //--------------------------------------------------------------------------------------------------
446 pharris 1.2 //Corrected Jets
447     Met RecoilTools::PUMet( const PFJetCol *iJets,
448 pharris 1.9 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
449 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
450     Double_t iDZCut) {
451    
452     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
453     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
454     const PFCandidate *pPF = iCands->At(i0);
455     const Track* pTrack = pPF->TrackerTrk();
456     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
457     if(pTrack == 0 ) continue;
458     if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
459     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
460     lVec -= pPF->Mom();
461     lSumEt += pPF->Pt();
462     }
463     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
464     const PFJet *pJet = iJets->At(i0);
465     if(!JetTools::passPFLooseId(pJet)) continue;
466     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
467 pharris 1.3 if(fJetIDMVA->pass(pJet,iVertex,iVertices)) continue;
468 pharris 1.9 addNeut(pJet,lVec,lSumEt,iRho);
469 pharris 1.2 }
470     Met lMet(lVec.Px(),lVec.Py());
471     lMet.SetSumEt(lSumEt);
472     return lMet;
473     }
474     //--------------------------------------------------------------------------------------------------
475 pharris 1.16 Met RecoilTools::PUMet( Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
476     const PFJetCol *iJets,
477     const PFCandidateCol *iCands ,
478     const Vertex *iVertex,const VertexCol *iVertices,
479     FactorizedJetCorrector *iJetCorrector,
480     const PileupEnergyDensityCol *iPileupEnergyDensity,Double_t iDZCut) {
481    
482     FourVectorM lVec (0,0,0,0); double lSumEt = 0;
483     for(UInt_t i0 = 0; i0 < iCands->GetEntries(); i0++) {
484     const PFCandidate *pPF = iCands->At(i0);
485     if(!filter(pPF,iPhi1,iEta1,iPhi2,iEta2)) continue;
486     const Track* pTrack = pPF->TrackerTrk();
487     if(pPF->GsfTrk()) pTrack = pPF->GsfTrk();
488     if(pTrack == 0 ) continue;
489     if( ((pPF->HasTrackerTrk() && (fabs(pPF->TrackerTrk()->DzCorrected(*iVertex))<iDZCut)) ||
490     (pPF->HasGsfTrk() && (fabs(pPF->GsfTrk()->DzCorrected(*iVertex)) <iDZCut)))) continue;
491     lVec -= pPF->Mom();
492     lSumEt += pPF->Pt();
493     }
494     for(UInt_t i0 = 0; i0 < iJets->GetEntries(); i0++) {
495     const PFJet *pJet = iJets->At(i0);
496     if(!JetTools::passPFLooseId(pJet)) continue;
497     if(!filter(pJet,iPhi1,iEta1,iPhi2,iEta2)) continue; //Quick cleaning
498     if(fJetIDMVA->pass(pJet,iVertex,iVertices,iJetCorrector,iPileupEnergyDensity)) continue;
499     addNeut(pJet,lVec,lSumEt,iJetCorrector,iPileupEnergyDensity);
500     }
501     Met lMet(lVec.Px(),lVec.Py());
502     lMet.SetSumEt(lSumEt);
503     return lMet;
504     }
505     //--------------------------------------------------------------------------------------------------
506 pharris 1.1 Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
507     const PFJetCol *iJets,FactorizedJetCorrector *iJetCorrector,
508     const PileupEnergyDensityCol *iPileupEnergyDensity,
509     const PFCandidateCol *iCands,const Vertex *iVertex,
510 pharris 1.3 const VertexCol *iVertices,
511 pharris 1.1 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
512     Double_t iDZCut) {
513 pharris 1.3 Met lPUMet = PUMet(iJets,iJetCorrector,iPileupEnergyDensity,iCands,iVertex,iVertices,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
514 pharris 1.1 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
515     lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
516     lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
517     return lPUMet;
518     }
519 pharris 1.2 //--------------------------------------------------------------------------------------------------
520     //Corrected Jets
521     Met RecoilTools::PURecoil(Double_t iVisPt,Double_t iVisPhi,Double_t iVisSumEt,
522     const PFJetCol *iJets,
523 pharris 1.9 const PFCandidateCol *iCands,const Vertex *iVertex,const VertexCol *iVertices,Double_t iRho,
524 pharris 1.2 Double_t iPhi1,Double_t iEta1,Double_t iPhi2,Double_t iEta2,
525     Double_t iDZCut) {
526 pharris 1.9 Met lPUMet = PUMet(iJets,iCands,iVertex,iVertices,iRho,iPhi1,iEta1,iPhi2,iEta2,iDZCut);
527 pharris 1.2 lPUMet.SetMex (lPUMet.Mex()+iVisPt*cos(iVisPhi));
528     lPUMet.SetMey (lPUMet.Mey()+iVisPt*sin(iVisPhi));
529     lPUMet.SetSumEt(lPUMet.SumEt()-iVisSumEt);
530     return lPUMet;
531     }