ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.17
Committed: Fri May 25 14:10:22 2012 UTC (12 years, 11 months ago) by pharris
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_028a
Changes since 1.16: +5 -4 lines
Log Message:
Reverted to new change

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