ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/RecoilTools.cc
Revision: 1.21
Committed: Thu Aug 2 23:48:08 2012 UTC (12 years, 9 months ago) by pharris
Content type: text/plain
Branch: MAIN
Changes since 1.20: +4 -5 lines
Log Message:
synch updates

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