ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MetTools.cc
Revision: 1.9
Committed: Wed Jul 6 18:49:35 2011 UTC (13 years, 10 months ago) by phedex
Content type: text/plain
Branch: MAIN
Changes since 1.8: +28 -1 lines
Log Message:
add feature to add a particular particle to Met

File Contents

# User Rev Content
1 phedex 1.9 // $Id: MetTools.cc,v 1.8 2011/06/29 21:56:34 sixie 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 ceballos 1.7
38 mzanetti 1.1 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 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
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 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
85     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
86 mzanetti 1.1 trackNumeratorX -= fPFCandidates->At(i)->Px();
87     trackNumeratorY -= fPFCandidates->At(i)->Py();
88     }
89     }
90    
91     // neutral
92     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
93     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
94     neutralNumeratorX -= fPFCandidates->At(i)->Px();
95     neutralNumeratorY -= fPFCandidates->At(i)->Py();
96     }
97     }
98     }
99 mzanetti 1.3
100     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
101     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
102 ceballos 1.2 }
103    
104 mzanetti 1.4
105     //--------------------------------------------------------------------------------------------------
106     MetTools::MetTools(const MuonCol *fMuons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
107     float deltaZCut, float ptCut, float etaCut) {
108    
109     float trackNumeratorX =0, trackNumeratorY =0;
110     float neutralNumeratorX=0, neutralNumeratorY=0;
111    
112     // muons Pt
113     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
114     trackNumeratorX -= fMuons->At(m)->Px();
115     trackNumeratorY -= fMuons->At(m)->Py();
116     }
117    
118     // jets Pt
119     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
120     trackNumeratorX -= pfJets->At(j)->Px();
121     trackNumeratorY -= pfJets->At(j)->Py();
122     }
123    
124     // PF candidates pT
125     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
126    
127     // jets
128     bool inTheJet = false;
129     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
130 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
131     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
132 mzanetti 1.4 inTheJet=true;
133     break;
134     }
135     }
136     if (inTheJet) break;
137     }
138     if (inTheJet) continue;
139    
140     // charged
141     if (fPFCandidates->At(i)->HasTrackerTrk()){
142    
143     bool isMuonTrack = false;
144     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
145     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
146     isMuonTrack = true;
147     break;
148     }
149     }
150     if (isMuonTrack) continue;
151    
152     if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
153     trackNumeratorX -= fPFCandidates->At(i)->Px();
154     trackNumeratorY -= fPFCandidates->At(i)->Py();
155     }
156     }
157    
158     // neutral
159     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
160     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
161     neutralNumeratorX -= fPFCandidates->At(i)->Px();
162     neutralNumeratorY -= fPFCandidates->At(i)->Py();
163     }
164     }
165     }
166    
167     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
168     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
169     }
170    
171    
172     MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const PFJetCol *pfJets, const Vertex *fVertex,
173     float deltaZCut, float ptCut, float etaCut) {
174    
175     float trackNumeratorX =0, trackNumeratorY =0;
176     float neutralNumeratorX=0, neutralNumeratorY=0;
177    
178     // electrons Pt
179     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
180     trackNumeratorX -= fElectrons->At(m)->Px();
181     trackNumeratorY -= fElectrons->At(m)->Py();
182     }
183    
184     // jets Pt
185     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
186     trackNumeratorX -= pfJets->At(j)->Px();
187     trackNumeratorY -= pfJets->At(j)->Py();
188     }
189    
190     // PF candidates pT
191     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
192    
193     // jets
194     bool inTheJet = false;
195     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
196 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
197     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
198 mzanetti 1.4 inTheJet=true;
199     break;
200     }
201     }
202     if (inTheJet) break;
203     }
204     if (inTheJet) continue;
205    
206     // charged
207 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
208 mzanetti 1.4 bool isElectronTrack = false;
209     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
210 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
211 mzanetti 1.4 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
212     isElectronTrack = true;
213     break;
214     }
215     }
216     if (isElectronTrack) continue;
217    
218 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
219     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
220 mzanetti 1.4 trackNumeratorX -= fPFCandidates->At(i)->Px();
221     trackNumeratorY -= fPFCandidates->At(i)->Py();
222     }
223     }
224    
225     // neutral
226     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
227     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
228     neutralNumeratorX -= fPFCandidates->At(i)->Px();
229     neutralNumeratorY -= fPFCandidates->At(i)->Py();
230     }
231     }
232     }
233    
234     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
235     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
236     }
237    
238    
239 phedex 1.9 void MetTools::AddToCorrectedTrackMet( const Particle *p) {
240     float MetX = fCorrectedTrackMet.Mex();
241     float MetY = fCorrectedTrackMet.Mey();
242    
243     MetX -= p->Px();
244     MetY -= p->Py();
245    
246     fCorrectedTrackMet.SetMex(MetX);
247     fCorrectedTrackMet.SetMey(MetY);
248    
249     return;
250     }
251    
252     void MetTools::AddToCorrectedMet( const Particle *p) {
253     float MetX=fCorrectedMet.Mex();
254     float MetY=fCorrectedMet.Mey();
255    
256     MetX -= p->Px();
257     MetY -= p->Py();
258    
259     fCorrectedMet.SetMex(MetX);
260     fCorrectedMet.SetMey(MetY);
261    
262     return;
263     }
264    
265    
266 ceballos 1.2 MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
267     const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
268 mzanetti 1.1
269 ceballos 1.2 float trackNumeratorX =0, trackNumeratorY =0;
270     float neutralNumeratorX=0, neutralNumeratorY=0;
271    
272     // muons Pt
273     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
274     trackNumeratorX -= fMuons->At(m)->Px();
275     trackNumeratorY -= fMuons->At(m)->Py();
276     }
277    
278     // electrons Pt
279     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
280     trackNumeratorX -= fElectrons->At(m)->Px();
281     trackNumeratorY -= fElectrons->At(m)->Py();
282     }
283    
284     // PF candidates pT
285     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
286    
287     // charged
288 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
289 ceballos 1.2 bool isMuonTrack = false;
290     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
291     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
292     isMuonTrack = true;
293     break;
294     }
295     }
296     if (isMuonTrack) continue;
297    
298     bool isElectronTrack = false;
299     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
300 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
301 mzanetti 1.3 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
302 ceballos 1.2 isElectronTrack = true;
303     break;
304     }
305     }
306     if (isElectronTrack) continue;
307 mzanetti 1.1
308 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
309     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
310 ceballos 1.2 trackNumeratorX -= fPFCandidates->At(i)->Px();
311     trackNumeratorY -= fPFCandidates->At(i)->Py();
312     }
313     }
314 mzanetti 1.1
315 ceballos 1.2 // neutral
316     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
317     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
318     neutralNumeratorX -= fPFCandidates->At(i)->Px();
319     neutralNumeratorY -= fPFCandidates->At(i)->Py();
320     }
321     }
322     }
323 mzanetti 1.3 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
324     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
325 ceballos 1.2 }
326 mzanetti 1.1
327 mzanetti 1.4
328     MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
329     const PFJetCol *pfJets,
330     const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
331    
332     float trackNumeratorX =0, trackNumeratorY =0;
333     float neutralNumeratorX=0, neutralNumeratorY=0;
334    
335     // muons Pt
336     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
337     trackNumeratorX -= fMuons->At(m)->Px();
338     trackNumeratorY -= fMuons->At(m)->Py();
339     }
340    
341     // electrons Pt
342     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
343     trackNumeratorX -= fElectrons->At(m)->Px();
344     trackNumeratorY -= fElectrons->At(m)->Py();
345     }
346    
347     // jets Pt
348     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
349     trackNumeratorX -= pfJets->At(j)->Px();
350     trackNumeratorY -= pfJets->At(j)->Py();
351     }
352    
353     // PF candidates pT
354     for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
355    
356     // jets
357     bool inTheJet = false;
358     for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
359 mzanetti 1.5 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
360     if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
361 mzanetti 1.4 inTheJet=true;
362     break;
363     }
364     }
365     if (inTheJet) break;
366     }
367     if (inTheJet) continue;
368    
369    
370     // charged
371 ceballos 1.6 if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
372 mzanetti 1.4 bool isMuonTrack = false;
373     for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
374     if (fMuons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) {
375     isMuonTrack = true;
376     break;
377     }
378     }
379     if (isMuonTrack) continue;
380    
381     bool isElectronTrack = false;
382     for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
383 sixie 1.8 if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
384 mzanetti 1.4 (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
385     isElectronTrack = true;
386     break;
387     }
388     }
389     if (isElectronTrack) continue;
390    
391 ceballos 1.6 if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
392     (fPFCandidates->At(i)->HasGsfTrk() && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex) ) < deltaZCut)) {
393 mzanetti 1.4 trackNumeratorX -= fPFCandidates->At(i)->Px();
394     trackNumeratorY -= fPFCandidates->At(i)->Py();
395     }
396     }
397    
398     // neutral
399     if (fPFCandidates->At(i)->PFType()== PFCandidate::eNeutralHadron || fPFCandidates->At(i)->PFType()== PFCandidate::eGamma) {
400     if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
401     neutralNumeratorX -= fPFCandidates->At(i)->Px();
402     neutralNumeratorY -= fPFCandidates->At(i)->Py();
403     }
404     }
405     }
406     fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
407     fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
408     }
409    
410    
411 mzanetti 1.3 Met MetTools::GetMinimumMet(const Met *UncorrectedMet) {
412 mzanetti 1.1
413     return (fCorrectedMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedMet : *UncorrectedMet;
414     }
415    
416 mzanetti 1.3 Met MetTools::GetMinimumTrackMet(const Met *UncorrectedMet) {
417 ceballos 1.2
418     return (fCorrectedTrackMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedTrackMet : *UncorrectedMet;
419     }
420 mzanetti 1.1