ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.19
Committed: Fri Jul 20 18:21:49 2012 UTC (12 years, 9 months ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.18: +1 -1 lines
Log Message:
Updated MVA Met

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