ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MetTools.cc
Revision: 1.5
Committed: Tue Apr 12 23:17:06 2011 UTC (14 years ago) by mzanetti
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_020d, TMit_020d, Mit_020c, Mit_021pre1, Mit_020b
Changes since 1.4: +7 -7 lines
Log Message:
bug fix

File Contents

# User Rev Content
1 mzanetti 1.5 // $Id: MetTools.cc,v 1.4 2011/04/12 07:30:29 mzanetti 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    
17     // muons Pt
18     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
19     trackNumeratorX -= fMuons->At(m)->Px();
20     trackNumeratorY -= fMuons->At(m)->Py();
21     }
22    
23     // PF candidates pT
24     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
25    
26     // charged
27 mzanetti 1.3 if (fPFCandidates->At(i)->HasTrackerTrk()){
28 mzanetti 1.1
29     bool isMuonTrack = false;
30     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
31     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
32     isMuonTrack = true;
33     break;
34     }
35     }
36     if (isMuonTrack) continue;
37    
38     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
39     trackNumeratorX -= fPFCandidates->At(i)->Px();
40     trackNumeratorY -= fPFCandidates->At(i)->Py();
41     }
42     }
43    
44     // neutral
45     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
46     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
47     neutralNumeratorX -= fPFCandidates->At(i)->Px();
48     neutralNumeratorY -= fPFCandidates->At(i)->Py();
49     }
50     }
51     }
52    
53 mzanetti 1.3 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
54     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
55 mzanetti 1.1 }
56    
57     MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const Vertex *fVertex,
58     float deltaZCut, float ptCut, float etaCut) {
59    
60     float trackNumeratorX =0, trackNumeratorY =0;
61     float neutralNumeratorX=0, neutralNumeratorY=0;
62    
63     // electrons Pt
64     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
65     trackNumeratorX -= fElectrons->At(m)->Px();
66     trackNumeratorY -= fElectrons->At(m)->Py();
67     }
68    
69     // PF candidates pT
70     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
71    
72     // charged
73 mzanetti 1.3 if (fPFCandidates->At(i)->HasTrackerTrk()){
74 mzanetti 1.1 bool isElectronTrack = false;
75     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
76 mzanetti 1.3 if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
77     (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
78 mzanetti 1.1 isElectronTrack = true;
79     break;
80     }
81     }
82     if (isElectronTrack) continue;
83    
84     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
85     trackNumeratorX -= fPFCandidates->At(i)->Px();
86     trackNumeratorY -= fPFCandidates->At(i)->Py();
87     }
88     }
89    
90     // neutral
91     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
92     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
93     neutralNumeratorX -= fPFCandidates->At(i)->Px();
94     neutralNumeratorY -= fPFCandidates->At(i)->Py();
95     }
96     }
97     }
98 mzanetti 1.3
99     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
100     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
101 ceballos 1.2 }
102    
103 mzanetti 1.4
104     //--------------------------------------------------------------------------------------------------
105     MetTools::MetTools(const MuonCol *fMuons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
106     float deltaZCut, float ptCut, float etaCut) {
107    
108     float trackNumeratorX =0, trackNumeratorY =0;
109     float neutralNumeratorX=0, neutralNumeratorY=0;
110    
111     // muons Pt
112     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
113     trackNumeratorX -= fMuons->At(m)->Px();
114     trackNumeratorY -= fMuons->At(m)->Py();
115     }
116    
117     // jets Pt
118     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
119     trackNumeratorX -= pfJets->At(j)->Px();
120     trackNumeratorY -= pfJets->At(j)->Py();
121     }
122    
123     // PF candidates pT
124     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
125    
126     // jets
127     bool inTheJet = false;
128     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
129 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
130     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
131 mzanetti 1.4 inTheJet=true;
132     break;
133     }
134     }
135     if (inTheJet) break;
136     }
137     if (inTheJet) continue;
138    
139     // charged
140     if (fPFCandidates->At(i)->HasTrackerTrk()){
141    
142     bool isMuonTrack = false;
143     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
144     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
145     isMuonTrack = true;
146     break;
147     }
148     }
149     if (isMuonTrack) continue;
150    
151     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
152     trackNumeratorX -= fPFCandidates->At(i)->Px();
153     trackNumeratorY -= fPFCandidates->At(i)->Py();
154     }
155     }
156    
157     // neutral
158     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
159     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
160     neutralNumeratorX -= fPFCandidates->At(i)->Px();
161     neutralNumeratorY -= fPFCandidates->At(i)->Py();
162     }
163     }
164     }
165    
166     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
167     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
168     }
169    
170    
171     MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
172     float deltaZCut, float ptCut, float etaCut) {
173    
174     float trackNumeratorX =0, trackNumeratorY =0;
175     float neutralNumeratorX=0, neutralNumeratorY=0;
176    
177     // electrons Pt
178     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
179     trackNumeratorX -= fElectrons->At(m)->Px();
180     trackNumeratorY -= fElectrons->At(m)->Py();
181     }
182    
183     // jets Pt
184     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
185     trackNumeratorX -= pfJets->At(j)->Px();
186     trackNumeratorY -= pfJets->At(j)->Py();
187     }
188    
189     // PF candidates pT
190     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
191    
192     // jets
193     bool inTheJet = false;
194     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
195 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
196     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
197 mzanetti 1.4 inTheJet=true;
198     break;
199     }
200     }
201     if (inTheJet) break;
202     }
203     if (inTheJet) continue;
204    
205     // charged
206     if (fPFCandidates->At(i)->HasTrackerTrk()){
207     bool isElectronTrack = false;
208     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
209     if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
210     (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
211     isElectronTrack = true;
212     break;
213     }
214     }
215     if (isElectronTrack) continue;
216    
217     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
218     trackNumeratorX -= fPFCandidates->At(i)->Px();
219     trackNumeratorY -= fPFCandidates->At(i)->Py();
220     }
221     }
222    
223     // neutral
224     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
225     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
226     neutralNumeratorX -= fPFCandidates->At(i)->Px();
227     neutralNumeratorY -= fPFCandidates->At(i)->Py();
228     }
229     }
230     }
231    
232     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
233     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
234     }
235    
236    
237 ceballos 1.2 MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
238     const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
239 mzanetti 1.1
240 ceballos 1.2 float trackNumeratorX =0, trackNumeratorY =0;
241     float neutralNumeratorX=0, neutralNumeratorY=0;
242    
243     // muons Pt
244     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
245     trackNumeratorX -= fMuons->At(m)->Px();
246     trackNumeratorY -= fMuons->At(m)->Py();
247     }
248    
249     // electrons Pt
250     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
251     trackNumeratorX -= fElectrons->At(m)->Px();
252     trackNumeratorY -= fElectrons->At(m)->Py();
253     }
254    
255     // PF candidates pT
256     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
257    
258     // charged
259 mzanetti 1.3 if (fPFCandidates->At(i)->HasTrackerTrk()){
260 ceballos 1.2 bool isMuonTrack = false;
261     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
262     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
263     isMuonTrack = true;
264     break;
265     }
266     }
267     if (isMuonTrack) continue;
268    
269     bool isElectronTrack = false;
270     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
271 mzanetti 1.3 if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
272     (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
273 ceballos 1.2 isElectronTrack = true;
274     break;
275     }
276     }
277     if (isElectronTrack) continue;
278 mzanetti 1.1
279 ceballos 1.2 if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
280     trackNumeratorX -= fPFCandidates->At(i)->Px();
281     trackNumeratorY -= fPFCandidates->At(i)->Py();
282     }
283     }
284 mzanetti 1.1
285 ceballos 1.2 // neutral
286     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
287     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
288     neutralNumeratorX -= fPFCandidates->At(i)->Px();
289     neutralNumeratorY -= fPFCandidates->At(i)->Py();
290     }
291     }
292     }
293 mzanetti 1.3 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
294     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
295 ceballos 1.2 }
296 mzanetti 1.1
297 mzanetti 1.4
298     MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
299     const PFJetCol *pfJets,
300     const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
301    
302     float trackNumeratorX =0, trackNumeratorY =0;
303     float neutralNumeratorX=0, neutralNumeratorY=0;
304    
305     // muons Pt
306     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
307     trackNumeratorX -= fMuons->At(m)->Px();
308     trackNumeratorY -= fMuons->At(m)->Py();
309     }
310    
311     // electrons Pt
312     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
313     trackNumeratorX -= fElectrons->At(m)->Px();
314     trackNumeratorY -= fElectrons->At(m)->Py();
315     }
316    
317     // jets Pt
318     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
319     trackNumeratorX -= pfJets->At(j)->Px();
320     trackNumeratorY -= pfJets->At(j)->Py();
321     }
322    
323     // PF candidates pT
324     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
325    
326     // jets
327     bool inTheJet = false;
328     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
329 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
330     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
331 mzanetti 1.4 inTheJet=true;
332     break;
333     }
334     }
335     if (inTheJet) break;
336     }
337     if (inTheJet) continue;
338    
339    
340     // charged
341     if (fPFCandidates->At(i)->HasTrackerTrk()){
342     bool isMuonTrack = false;
343     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
344     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
345     isMuonTrack = true;
346     break;
347     }
348     }
349     if (isMuonTrack) continue;
350    
351     bool isElectronTrack = false;
352     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
353     if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
354     (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
355     isElectronTrack = true;
356     break;
357     }
358     }
359     if (isElectronTrack) continue;
360    
361     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
362     trackNumeratorX -= fPFCandidates->At(i)->Px();
363     trackNumeratorY -= fPFCandidates->At(i)->Py();
364     }
365     }
366    
367     // neutral
368     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
369     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
370     neutralNumeratorX -= fPFCandidates->At(i)->Px();
371     neutralNumeratorY -= fPFCandidates->At(i)->Py();
372     }
373     }
374     }
375     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
376     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
377     }
378    
379    
380 mzanetti 1.3 Met MetTools::GetMinimumMet(const Met *UncorrectedMet) {
381 mzanetti 1.1
382     return (fCorrectedMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedMet : *UncorrectedMet;
383     }
384    
385 mzanetti 1.3 Met MetTools::GetMinimumTrackMet(const Met *UncorrectedMet) {
386 ceballos 1.2
387     return (fCorrectedTrackMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedTrackMet : *UncorrectedMet;
388     }
389 mzanetti 1.1