ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MetTools.cc
Revision: 1.12
Committed: Sat Apr 28 19:10:01 2012 UTC (13 years ago) by ceballos
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_028a, Mit_028, Mit_027, Mit_027a
Changes since 1.11: +91 -1 lines
Log Message:
adding radial pf muon isolation and chs/nhs met

File Contents

# User Rev Content
1 ceballos 1.12 // $Id: MetTools.cc,v 1.11 2011/09/17 13:55:23 ceballos Exp $
2 mzanetti 1.1
3     #include "MitPhysics/Utils/interface/MetTools.h"
4     #include <TFile.h>
5    
6     ClassImp(mithep::MetTools)
7    
8     using namespace mithep;
9    
10     //--------------------------------------------------------------------------------------------------
11     MetTools::MetTools(const MuonCol *fMuons, const PFCandidateCol *fPFCandidates, const Vertex *fVertex,
12     float deltaZCut, float ptCut, float etaCut) {
13    
14     float trackNumeratorX =0, trackNumeratorY =0;
15     float neutralNumeratorX=0, neutralNumeratorY=0;
16 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
17 mzanetti 1.1
18     // muons Pt
19     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
20     trackNumeratorX -= fMuons->At(m)->Px();
21     trackNumeratorY -= fMuons->At(m)->Py();
22     }
23    
24     // PF candidates pT
25     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
26    
27 ceballos 1.12 // CHS computation
28     if (fPFCandidates->At(i)->HasTrk()){
29     CHSNumeratorX -= fPFCandidates->At(i)->Px();
30     CHSNumeratorY -= fPFCandidates->At(i)->Py();
31     }
32     // NHS computation
33     if (fPFCandidates->At(i)->HasTrk() ||
34     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
35     NHSNumeratorX -= fPFCandidates->At(i)->Px();
36     NHSNumeratorY -= fPFCandidates->At(i)->Py();
37     }
38    
39 mzanetti 1.1 // charged
40 mzanetti 1.3 if (fPFCandidates->At(i)->HasTrackerTrk()){
41 mzanetti 1.1
42     bool isMuonTrack = false;
43     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
44     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
45     isMuonTrack = true;
46     break;
47     }
48     }
49     if (isMuonTrack) continue;
50 ceballos 1.7
51 mzanetti 1.1 if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
52     trackNumeratorX -= fPFCandidates->At(i)->Px();
53     trackNumeratorY -= fPFCandidates->At(i)->Py();
54 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
55     fChargedRecoil += fPFCandidates->At(i)->Mom();
56 mzanetti 1.1 }
57     }
58    
59     // neutral
60     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
61     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
62     neutralNumeratorX -= fPFCandidates->At(i)->Px();
63     neutralNumeratorY -= fPFCandidates->At(i)->Py();
64 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
65 mzanetti 1.1 }
66     }
67     }
68    
69 mzanetti 1.3 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
70     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
71 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
72     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
73 mzanetti 1.1 }
74    
75     MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const Vertex *fVertex,
76     float deltaZCut, float ptCut, float etaCut) {
77    
78     float trackNumeratorX =0, trackNumeratorY =0;
79     float neutralNumeratorX=0, neutralNumeratorY=0;
80 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
81 mzanetti 1.1
82     // electrons Pt
83     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
84     trackNumeratorX -= fElectrons->At(m)->Px();
85     trackNumeratorY -= fElectrons->At(m)->Py();
86     }
87    
88     // PF candidates pT
89     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
90    
91 ceballos 1.12 // CHS computation
92     if (fPFCandidates->At(i)->HasTrk()){
93     CHSNumeratorX -= fPFCandidates->At(i)->Px();
94     CHSNumeratorY -= fPFCandidates->At(i)->Py();
95     }
96     // NHS computation
97     if (fPFCandidates->At(i)->HasTrk() ||
98     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
99     NHSNumeratorX -= fPFCandidates->At(i)->Px();
100     NHSNumeratorY -= fPFCandidates->At(i)->Py();
101     }
102    
103 mzanetti 1.1 // charged
104 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
105 mzanetti 1.1 bool isElectronTrack = false;
106     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
107 mzanetti 1.3 if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
108     (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
109 mzanetti 1.1 isElectronTrack = true;
110     break;
111     }
112     }
113     if (isElectronTrack) continue;
114    
115 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
116     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
117 mzanetti 1.1 trackNumeratorX -= fPFCandidates->At(i)->Px();
118     trackNumeratorY -= fPFCandidates->At(i)->Py();
119 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
120     fChargedRecoil += fPFCandidates->At(i)->Mom();
121 mzanetti 1.1 }
122     }
123    
124     // neutral
125     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
126     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
127     neutralNumeratorX -= fPFCandidates->At(i)->Px();
128     neutralNumeratorY -= fPFCandidates->At(i)->Py();
129 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
130 mzanetti 1.1 }
131     }
132     }
133 mzanetti 1.3
134     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
135     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
136 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
137     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
138 ceballos 1.2 }
139    
140 mzanetti 1.4
141     //--------------------------------------------------------------------------------------------------
142     MetTools::MetTools(const MuonCol *fMuons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
143     float deltaZCut, float ptCut, float etaCut) {
144    
145     float trackNumeratorX =0, trackNumeratorY =0;
146     float neutralNumeratorX=0, neutralNumeratorY=0;
147 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
148 mzanetti 1.4
149     // muons Pt
150     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
151     trackNumeratorX -= fMuons->At(m)->Px();
152     trackNumeratorY -= fMuons->At(m)->Py();
153     }
154    
155     // jets Pt
156     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
157     trackNumeratorX -= pfJets->At(j)->Px();
158     trackNumeratorY -= pfJets->At(j)->Py();
159     }
160    
161     // PF candidates pT
162     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
163    
164 ceballos 1.12 // CHS computation
165     if (fPFCandidates->At(i)->HasTrk()){
166     CHSNumeratorX -= fPFCandidates->At(i)->Px();
167     CHSNumeratorY -= fPFCandidates->At(i)->Py();
168     }
169     // NHS computation
170     if (fPFCandidates->At(i)->HasTrk() ||
171     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
172     NHSNumeratorX -= fPFCandidates->At(i)->Px();
173     NHSNumeratorY -= fPFCandidates->At(i)->Py();
174     }
175    
176 mzanetti 1.4 // jets
177     bool inTheJet = false;
178     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
179 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
180     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
181 mzanetti 1.4 inTheJet=true;
182     break;
183     }
184     }
185     if (inTheJet) break;
186     }
187     if (inTheJet) continue;
188    
189     // charged
190     if (fPFCandidates->At(i)->HasTrackerTrk()){
191    
192     bool isMuonTrack = false;
193     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
194     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
195     isMuonTrack = true;
196     break;
197     }
198     }
199     if (isMuonTrack) continue;
200    
201     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
202     trackNumeratorX -= fPFCandidates->At(i)->Px();
203     trackNumeratorY -= fPFCandidates->At(i)->Py();
204 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
205     fChargedRecoil += fPFCandidates->At(i)->Mom();
206 mzanetti 1.4 }
207     }
208    
209     // neutral
210     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
211     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
212     neutralNumeratorX -= fPFCandidates->At(i)->Px();
213     neutralNumeratorY -= fPFCandidates->At(i)->Py();
214 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
215 mzanetti 1.4 }
216     }
217     }
218    
219     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
220     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
221 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
222     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
223 mzanetti 1.4 }
224    
225    
226     MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
227     float deltaZCut, float ptCut, float etaCut) {
228    
229     float trackNumeratorX =0, trackNumeratorY =0;
230     float neutralNumeratorX=0, neutralNumeratorY=0;
231 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
232 mzanetti 1.4
233     // electrons Pt
234     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
235     trackNumeratorX -= fElectrons->At(m)->Px();
236     trackNumeratorY -= fElectrons->At(m)->Py();
237     }
238    
239     // jets Pt
240     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
241     trackNumeratorX -= pfJets->At(j)->Px();
242     trackNumeratorY -= pfJets->At(j)->Py();
243     }
244    
245     // PF candidates pT
246     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
247    
248 ceballos 1.12 // CHS computation
249     if (fPFCandidates->At(i)->HasTrk()){
250     CHSNumeratorX -= fPFCandidates->At(i)->Px();
251     CHSNumeratorY -= fPFCandidates->At(i)->Py();
252     }
253     // NHS computation
254     if (fPFCandidates->At(i)->HasTrk() ||
255     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
256     NHSNumeratorX -= fPFCandidates->At(i)->Px();
257     NHSNumeratorY -= fPFCandidates->At(i)->Py();
258     }
259    
260 mzanetti 1.4 // jets
261     bool inTheJet = false;
262     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
263 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
264     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
265 mzanetti 1.4 inTheJet=true;
266     break;
267     }
268     }
269     if (inTheJet) break;
270     }
271     if (inTheJet) continue;
272    
273     // charged
274 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
275 mzanetti 1.4 bool isElectronTrack = false;
276     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
277 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
278 mzanetti 1.4 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
279     isElectronTrack = true;
280     break;
281     }
282     }
283     if (isElectronTrack) continue;
284    
285 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
286     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
287 mzanetti 1.4 trackNumeratorX -= fPFCandidates->At(i)->Px();
288     trackNumeratorY -= fPFCandidates->At(i)->Py();
289 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
290     fChargedRecoil += fPFCandidates->At(i)->Mom();
291 mzanetti 1.4 }
292     }
293    
294     // neutral
295     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
296     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
297     neutralNumeratorX -= fPFCandidates->At(i)->Px();
298     neutralNumeratorY -= fPFCandidates->At(i)->Py();
299 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
300 mzanetti 1.4 }
301     }
302     }
303    
304     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
305     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
306 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
307     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
308 mzanetti 1.4 }
309    
310    
311 sixie 1.10 void MetTools::AddToCorrectedTrackMet( const Particle *p, bool debug ) {
312 phedex 1.9 float MetX = fCorrectedTrackMet.Mex();
313     float MetY = fCorrectedTrackMet.Mey();
314 sixie 1.10
315     if (debug) std::cout << "AddToCorrectedTrackMet:\n";
316     if (debug) std::cout << "Before: " << MetX << " " << MetY << std::endl;
317    
318 phedex 1.9 MetX -= p->Px();
319     MetY -= p->Py();
320    
321 sixie 1.10 if (debug) std::cout << "Add : " << p->Px() << " " << p->Py() << std::endl;
322     if (debug) std::cout << "After : " << MetX << " " << MetY << std::endl;
323    
324 phedex 1.9 fCorrectedTrackMet.SetMex(MetX);
325     fCorrectedTrackMet.SetMey(MetY);
326    
327     return;
328     }
329    
330     void MetTools::AddToCorrectedMet( const Particle *p) {
331     float MetX=fCorrectedMet.Mex();
332     float MetY=fCorrectedMet.Mey();
333    
334     MetX -= p->Px();
335     MetY -= p->Py();
336    
337     fCorrectedMet.SetMex(MetX);
338     fCorrectedMet.SetMey(MetY);
339    
340     return;
341     }
342    
343 sixie 1.10 void MetTools::AddToRecoil( const Particle *p) {
344    
345     if (p->Charge() != 0) {
346     fChargedRecoil += p->Mom();
347     }
348     fRecoil += p->Mom();
349    
350     return;
351     }
352    
353    
354    
355     void MetTools::RemoveParticleInIsoConeFromTrackMet( const Particle *p, const PFCandidateCol *fPFCandidates, const Vertex *fVertex, float deltaZCut , float deltaR, bool debug ) {
356     float MetX = fCorrectedTrackMet.Mex();
357     float MetY = fCorrectedTrackMet.Mey();
358    
359     if (debug) std::cout << "RemoveParticleInIsoConeFromTrackMet:\n";
360     if (debug) std::cout << "Before: " << MetX << " " << MetY << std::endl;
361    
362     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
363     //charged
364     if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()) {
365     //passes dZ cut
366     if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
367     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
368     //inside cone
369     if (MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), p->Mom()) < deltaR ) {
370     MetX += fPFCandidates->At(i)->Px();
371     MetY += fPFCandidates->At(i)->Py();
372     if (debug) std::cout << "Subtract : " << fPFCandidates->At(i)->Px() << " " << fPFCandidates->At(i)->Py() << " : " << std::endl;
373     }
374     }
375     }
376     }
377    
378     if (debug) std::cout << "After : " << MetX << " " << MetY << std::endl;
379    
380     fCorrectedTrackMet.SetMex(MetX);
381     fCorrectedTrackMet.SetMey(MetY);
382    
383     return;
384     }
385    
386    
387     void MetTools::RemoveParticleInIsoConeFromCorrectedMet( const Particle *p, const PFCandidateCol *fPFCandidates, const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut , float deltaR) {
388     float MetX = fCorrectedMet.Mex();
389     float MetY = fCorrectedMet.Mey();
390    
391     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
392    
393     //inside cone
394     if (MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), p->Mom()) < deltaR ) {
395    
396     //charged
397     if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()) {
398     //passes dZ cut
399     if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
400     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
401     MetX += p->Px();
402     MetY += p->Py();
403     }
404     }
405    
406     //neutrals
407     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
408     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
409     MetX += fPFCandidates->At(i)->Px();
410     MetY += fPFCandidates->At(i)->Py();
411     }
412     }
413     }
414    
415     }
416    
417     fCorrectedMet.SetMex(MetX);
418     fCorrectedMet.SetMey(MetY);
419    
420     return;
421     }
422    
423    
424     void MetTools::RemoveParticleInIsoConeFromRecoil( const Particle *p, const PFCandidateCol *fPFCandidates, const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut , float deltaR) {
425    
426     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
427    
428     //inside cone
429     if (MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), p->Mom()) < deltaR ) {
430    
431     //charged
432     if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()) {
433     //passes dZ cut
434     if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
435     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
436     fChargedRecoil -= fPFCandidates->At(i)->Mom();
437     fRecoil -= fPFCandidates->At(i)->Mom();
438     }
439     }
440    
441     //neutrals
442     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
443     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
444     fRecoil -= fPFCandidates->At(i)->Mom();
445     }
446     }
447     }
448     }
449    
450     return;
451     }
452    
453 phedex 1.9
454 ceballos 1.2 MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
455 ceballos 1.11 const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut, float intRadius) {
456 mzanetti 1.1
457 ceballos 1.2 float trackNumeratorX =0, trackNumeratorY =0;
458     float neutralNumeratorX=0, neutralNumeratorY=0;
459 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
460 ceballos 1.2
461     // muons Pt
462     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
463     trackNumeratorX -= fMuons->At(m)->Px();
464     trackNumeratorY -= fMuons->At(m)->Py();
465     }
466    
467     // electrons Pt
468     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
469     trackNumeratorX -= fElectrons->At(m)->Px();
470     trackNumeratorY -= fElectrons->At(m)->Py();
471     }
472    
473     // PF candidates pT
474     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
475    
476 ceballos 1.12 // CHS computation
477     if (fPFCandidates->At(i)->HasTrk()){
478     CHSNumeratorX -= fPFCandidates->At(i)->Px();
479     CHSNumeratorY -= fPFCandidates->At(i)->Py();
480     }
481     // NHS computation
482     if (fPFCandidates->At(i)->HasTrk() ||
483     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
484     NHSNumeratorX -= fPFCandidates->At(i)->Px();
485     NHSNumeratorY -= fPFCandidates->At(i)->Py();
486     }
487    
488 ceballos 1.2 // charged
489 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
490 ceballos 1.2 bool isMuonTrack = false;
491     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
492     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
493     isMuonTrack = true;
494     break;
495     }
496 ceballos 1.11 if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
497     isMuonTrack = true;
498     break;
499     }
500     }
501 ceballos 1.2 if (isMuonTrack) continue;
502    
503     bool isElectronTrack = false;
504     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
505 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
506 mzanetti 1.3 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
507 ceballos 1.2 isElectronTrack = true;
508     break;
509     }
510 ceballos 1.11 if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
511     isElectronTrack = true;
512     break;
513     }
514     }
515 ceballos 1.2 if (isElectronTrack) continue;
516 mzanetti 1.1
517 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
518     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
519 ceballos 1.2 trackNumeratorX -= fPFCandidates->At(i)->Px();
520     trackNumeratorY -= fPFCandidates->At(i)->Py();
521 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
522     fChargedRecoil += fPFCandidates->At(i)->Mom();
523 ceballos 1.2 }
524     }
525 mzanetti 1.1
526 ceballos 1.2 // neutral
527     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
528     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
529     neutralNumeratorX -= fPFCandidates->At(i)->Px();
530     neutralNumeratorY -= fPFCandidates->At(i)->Py();
531 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
532 ceballos 1.2 }
533     }
534     }
535 mzanetti 1.3 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
536     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
537 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
538     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
539 ceballos 1.2 }
540 mzanetti 1.1
541 mzanetti 1.4
542     MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
543     const PFJetCol *pfJets,
544 ceballos 1.11 const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut, float intRadius) {
545 mzanetti 1.4
546     float trackNumeratorX =0, trackNumeratorY =0;
547     float neutralNumeratorX=0, neutralNumeratorY=0;
548 ceballos 1.12 float CHSNumeratorX =0, CHSNumeratorY =0, NHSNumeratorX =0, NHSNumeratorY =0;
549 mzanetti 1.4
550     // muons Pt
551     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
552     trackNumeratorX -= fMuons->At(m)->Px();
553     trackNumeratorY -= fMuons->At(m)->Py();
554     }
555    
556     // electrons Pt
557     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
558     trackNumeratorX -= fElectrons->At(m)->Px();
559     trackNumeratorY -= fElectrons->At(m)->Py();
560     }
561    
562     // jets Pt
563     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
564     trackNumeratorX -= pfJets->At(j)->Px();
565     trackNumeratorY -= pfJets->At(j)->Py();
566     }
567    
568     // PF candidates pT
569     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
570    
571 ceballos 1.12 // CHS computation
572     if (fPFCandidates->At(i)->HasTrk()){
573     CHSNumeratorX -= fPFCandidates->At(i)->Px();
574     CHSNumeratorY -= fPFCandidates->At(i)->Py();
575     }
576     // NHS computation
577     if (fPFCandidates->At(i)->HasTrk() ||
578     (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
579     NHSNumeratorX -= fPFCandidates->At(i)->Px();
580     NHSNumeratorY -= fPFCandidates->At(i)->Py();
581     }
582    
583 mzanetti 1.4 // jets
584     bool inTheJet = false;
585     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
586 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
587     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
588 mzanetti 1.4 inTheJet=true;
589     break;
590     }
591     }
592     if (inTheJet) break;
593     }
594     if (inTheJet) continue;
595    
596    
597     // charged
598 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
599 mzanetti 1.4 bool isMuonTrack = false;
600     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
601     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
602     isMuonTrack = true;
603     break;
604     }
605 ceballos 1.11 if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
606     isMuonTrack = true;
607     break;
608     }
609 mzanetti 1.4 }
610     if (isMuonTrack) continue;
611    
612     bool isElectronTrack = false;
613     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
614 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
615 mzanetti 1.4 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
616     isElectronTrack = true;
617     break;
618     }
619 ceballos 1.11 if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
620     isElectronTrack = true;
621     break;
622     }
623 mzanetti 1.4 }
624     if (isElectronTrack) continue;
625    
626 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
627     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
628 mzanetti 1.4 trackNumeratorX -= fPFCandidates->At(i)->Px();
629     trackNumeratorY -= fPFCandidates->At(i)->Py();
630 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
631     fChargedRecoil += fPFCandidates->At(i)->Mom();
632 mzanetti 1.4 }
633     }
634    
635     // neutral
636     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
637     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
638     neutralNumeratorX -= fPFCandidates->At(i)->Px();
639     neutralNumeratorY -= fPFCandidates->At(i)->Py();
640 sixie 1.10 fRecoil += fPFCandidates->At(i)->Mom();
641 mzanetti 1.4 }
642     }
643     }
644     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
645     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
646 ceballos 1.12 fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
647     fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
648 mzanetti 1.4 }
649    
650    
651 mzanetti 1.3 Met MetTools::GetMinimumMet(const Met *UncorrectedMet) {
652 mzanetti 1.1
653     return (fCorrectedMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedMet : *UncorrectedMet;
654     }
655    
656 mzanetti 1.3 Met MetTools::GetMinimumTrackMet(const Met *UncorrectedMet) {
657 ceballos 1.2
658     return (fCorrectedTrackMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedTrackMet : *UncorrectedMet;
659     }
660 mzanetti 1.1