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

# Content
1 // $Id: MetTools.cc,v 1.4 2011/04/12 07:30:29 mzanetti Exp $
2
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 if (fPFCandidates->At(i)->HasTrackerTrk()){
28
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 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
54 fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
55 }
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 if (fPFCandidates->At(i)->HasTrackerTrk()){
74 bool isElectronTrack = false;
75 for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
76 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 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
99 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
100 fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
101 }
102
103
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 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
130 if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
131 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 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
196 if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
197 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 MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
238 const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
239
240 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 if (fPFCandidates->At(i)->HasTrackerTrk()){
260 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 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 isElectronTrack = true;
274 break;
275 }
276 }
277 if (isElectronTrack) continue;
278
279 if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
280 trackNumeratorX -= fPFCandidates->At(i)->Px();
281 trackNumeratorY -= fPFCandidates->At(i)->Py();
282 }
283 }
284
285 // 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 fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
294 fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
295 }
296
297
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 for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
330 if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
331 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 Met MetTools::GetMinimumMet(const Met *UncorrectedMet) {
381
382 return (fCorrectedMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedMet : *UncorrectedMet;
383 }
384
385 Met MetTools::GetMinimumTrackMet(const Met *UncorrectedMet) {
386
387 return (fCorrectedTrackMet.Pt() < UncorrectedMet->Pt()) ? fCorrectedTrackMet : *UncorrectedMet;
388 }
389