ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MetTools.cc
(Generate patch)

Comparing UserCode/MitPhysics/Utils/src/MetTools.cc (file contents):
Revision 1.7 by ceballos, Fri May 13 08:27:16 2011 UTC vs.
Revision 1.13 by ceballos, Sat Jul 7 11:33:59 2012 UTC

# Line 13 | Line 13 | MetTools::MetTools(const MuonCol *fMuons
13  
14    float trackNumeratorX  =0, trackNumeratorY  =0;
15    float neutralNumeratorX=0, neutralNumeratorY=0;
16 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
17  
18    // muons Pt
19    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 23 | Line 24 | MetTools::MetTools(const MuonCol *fMuons
24    // PF candidates pT
25    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
26  
27 +    // 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      // charged
40      if (fPFCandidates->At(i)->HasTrackerTrk()){
41  
# Line 38 | Line 51 | MetTools::MetTools(const MuonCol *fMuons
51        if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
52          trackNumeratorX -= fPFCandidates->At(i)->Px();
53          trackNumeratorY -= fPFCandidates->At(i)->Py();
54 +        fRecoil += fPFCandidates->At(i)->Mom();
55 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
56        }
57      }
58  
# Line 46 | Line 61 | MetTools::MetTools(const MuonCol *fMuons
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 +        fRecoil += fPFCandidates->At(i)->Mom();
65        }
66      }
67    }
68  
69    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
70    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
71 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
72 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
73   }
74  
75   MetTools::MetTools(const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates, const Vertex *fVertex,
# Line 59 | Line 77 | MetTools::MetTools(const ElectronCol *fE
77  
78    float trackNumeratorX  =0, trackNumeratorY  =0;
79    float neutralNumeratorX=0, neutralNumeratorY=0;
80 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
81  
82    // electrons Pt
83    for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
# Line 69 | Line 88 | MetTools::MetTools(const ElectronCol *fE
88    // PF candidates pT
89    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
90  
91 +    // 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      // charged
104      if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
105        bool isElectronTrack = false;
# Line 85 | Line 116 | MetTools::MetTools(const ElectronCol *fE
116            (fPFCandidates->At(i)->HasGsfTrk()     && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex)    ) < deltaZCut)) {
117          trackNumeratorX -= fPFCandidates->At(i)->Px();
118          trackNumeratorY -= fPFCandidates->At(i)->Py();
119 +        fRecoil += fPFCandidates->At(i)->Mom();
120 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
121        }
122      }
123  
# Line 93 | Line 126 | MetTools::MetTools(const ElectronCol *fE
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 +        fRecoil += fPFCandidates->At(i)->Mom();
130        }
131      }
132    }
133  
134    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
135    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
136 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
137 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
138   }
139  
140  
# Line 108 | Line 144 | MetTools::MetTools(const MuonCol *fMuons
144  
145    float trackNumeratorX  =0, trackNumeratorY  =0;
146    float neutralNumeratorX=0, neutralNumeratorY=0;
147 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
148  
149    // muons Pt
150    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 124 | Line 161 | MetTools::MetTools(const MuonCol *fMuons
161    // PF candidates pT
162    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
163      
164 +    // 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      // jets
177      bool inTheJet = false;
178      for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
# Line 152 | Line 201 | MetTools::MetTools(const MuonCol *fMuons
201        if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
202          trackNumeratorX -= fPFCandidates->At(i)->Px();
203          trackNumeratorY -= fPFCandidates->At(i)->Py();
204 +        fRecoil += fPFCandidates->At(i)->Mom();
205 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
206        }
207      }
208  
# Line 160 | Line 211 | MetTools::MetTools(const MuonCol *fMuons
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 +        fRecoil += fPFCandidates->At(i)->Mom();
215        }
216      }
217    }
218  
219    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
220    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
221 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
222 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
223   }
224  
225  
# Line 174 | Line 228 | MetTools::MetTools(const ElectronCol *fE
228  
229    float trackNumeratorX  =0, trackNumeratorY  =0;
230    float neutralNumeratorX=0, neutralNumeratorY=0;
231 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
232  
233    // electrons Pt
234    for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
# Line 190 | Line 245 | MetTools::MetTools(const ElectronCol *fE
245    // PF candidates pT
246    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
247  
248 +    // 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      // jets
261      bool inTheJet = false;
262      for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
# Line 207 | Line 274 | MetTools::MetTools(const ElectronCol *fE
274      if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
275        bool isElectronTrack = false;
276        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
277 <        if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
277 >        if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
278               (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
279            isElectronTrack = true;
280            break;
# Line 219 | Line 286 | MetTools::MetTools(const ElectronCol *fE
286            (fPFCandidates->At(i)->HasGsfTrk()     && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex)    ) < deltaZCut)) {
287          trackNumeratorX -= fPFCandidates->At(i)->Px();
288          trackNumeratorY -= fPFCandidates->At(i)->Py();
289 +        fRecoil += fPFCandidates->At(i)->Mom();
290 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
291        }
292      }
293  
# Line 227 | Line 296 | MetTools::MetTools(const ElectronCol *fE
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 +        fRecoil += fPFCandidates->At(i)->Mom();
300        }
301      }
302    }
303  
304    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
305    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
306 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
307 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
308 + }
309 +
310 +
311 + void MetTools::AddToCorrectedTrackMet( const Particle *p, bool debug ) {
312 +  float MetX = fCorrectedTrackMet.Mex();
313 +  float MetY = fCorrectedTrackMet.Mey();
314 +
315 +  if (debug) std::cout << "AddToCorrectedTrackMet:\n";
316 +  if (debug) std::cout << "Before: " << MetX << " " << MetY << std::endl;
317 +
318 +  MetX -= p->Px();
319 +  MetY -= p->Py();
320 +
321 +  if (debug) std::cout << "Add : " << p->Px() << " " << p->Py() << std::endl;
322 +  if (debug) std::cout << "After : " << MetX << " " << MetY << std::endl;
323 +
324 +  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 + 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  
454   MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
455 <                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
455 >                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut, float intRadius,
456 >                   const GenericParticle *genP) {
457  
458    float trackNumeratorX  =0, trackNumeratorY  =0;
459    float neutralNumeratorX=0, neutralNumeratorY=0;
460 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
461 +
462 +  float trackNumeratorGenPX  =0, trackNumeratorGenPY  =0;
463 +  // added to the track quantities
464 +  if (genP) {
465 +    trackNumeratorGenPX -= genP->Px();
466 +    trackNumeratorGenPY -= genP->Py();
467 +  }
468  
469    // muons Pt
470    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 257 | Line 481 | MetTools::MetTools(const MuonCol *fMuons
481    // PF candidates pT
482    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
483  
484 +    // CHS computation
485 +    if (fPFCandidates->At(i)->HasTrk()){
486 +        CHSNumeratorX -= fPFCandidates->At(i)->Px();
487 +        CHSNumeratorY -= fPFCandidates->At(i)->Py();
488 +    }
489 +    // NHS computation
490 +    if (fPFCandidates->At(i)->HasTrk() ||
491 +       (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
492 +        NHSNumeratorX -= fPFCandidates->At(i)->Px();
493 +        NHSNumeratorY -= fPFCandidates->At(i)->Py();
494 +    }
495 +
496      // charged
497      if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
498        bool isMuonTrack = false;
# Line 265 | Line 501 | MetTools::MetTools(const MuonCol *fMuons
501            isMuonTrack = true;
502            break;
503          }
504 <      }      
504 >        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
505 >          isMuonTrack = true;
506 >          break;
507 >        }
508 >      }    
509        if (isMuonTrack) continue;
510        
511        bool isElectronTrack = false;
512        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
513 <        if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
513 >        if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
514               (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
515            isElectronTrack = true;
516            break;
517          }
518 <      }      
518 >        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
519 >          isElectronTrack = true;
520 >          break;
521 >        }
522 >      }
523        if (isElectronTrack) continue;
524  
525        if ((fPFCandidates->At(i)->HasTrackerTrk() && fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) ||
526            (fPFCandidates->At(i)->HasGsfTrk()     && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex)    ) < deltaZCut)) {
527          trackNumeratorX -= fPFCandidates->At(i)->Px();
528          trackNumeratorY -= fPFCandidates->At(i)->Py();
529 +        fRecoil += fPFCandidates->At(i)->Mom();
530 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
531        }
532      }
533  
# Line 290 | Line 536 | MetTools::MetTools(const MuonCol *fMuons
536        if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
537          neutralNumeratorX -= fPFCandidates->At(i)->Px();
538          neutralNumeratorY -= fPFCandidates->At(i)->Py();
539 +        fRecoil += fPFCandidates->At(i)->Mom();
540        }
541      }
542    }
543    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
544 <  fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
544 >  fCorrectedTrackMet = mithep::Met(trackNumeratorX+trackNumeratorGenPX, trackNumeratorY+trackNumeratorGenPY);
545 >  fCHSMet = mithep::Met(CHSNumeratorX+trackNumeratorGenPX, CHSNumeratorY+trackNumeratorGenPY);
546 >  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
547   }
548  
549  
550   MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
551                     const PFJetCol *pfJets,
552 <                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
552 >                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut, float intRadius,
553 >                   const GenericParticle *genP) {
554  
555    float trackNumeratorX  =0, trackNumeratorY  =0;
556    float neutralNumeratorX=0, neutralNumeratorY=0;
557 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
558 +
559 +  float trackNumeratorGenPX  =0, trackNumeratorGenPY  =0;
560 +  // added to the track quantities
561 +  if (genP) {
562 +    trackNumeratorGenPX -= genP->Px();
563 +    trackNumeratorGenPY -= genP->Py();
564 +  }
565  
566    // muons Pt
567    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 326 | Line 584 | MetTools::MetTools(const MuonCol *fMuons
584    // PF candidates pT
585    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
586  
587 +    // CHS computation
588 +    if (fPFCandidates->At(i)->HasTrk()){
589 +        CHSNumeratorX -= fPFCandidates->At(i)->Px();
590 +        CHSNumeratorY -= fPFCandidates->At(i)->Py();
591 +    }
592 +    // NHS computation
593 +    if (fPFCandidates->At(i)->HasTrk() ||
594 +       (fPFCandidates->At(i)->AbsEta() < 3.0 && fPFCandidates->At(i)->Pt() > 4.0)){
595 +        NHSNumeratorX -= fPFCandidates->At(i)->Px();
596 +        NHSNumeratorY -= fPFCandidates->At(i)->Py();
597 +    }
598 +
599      // jets
600      bool inTheJet = false;
601      for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
# Line 339 | Line 609 | MetTools::MetTools(const MuonCol *fMuons
609      }
610      if (inTheJet) continue;
611  
342
612      // charged
613      if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
614        bool isMuonTrack = false;
# Line 348 | Line 617 | MetTools::MetTools(const MuonCol *fMuons
617            isMuonTrack = true;
618            break;
619          }
620 +        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
621 +          isMuonTrack = true;
622 +          break;
623 +        }
624        }      
625        if (isMuonTrack) continue;
626        
627        bool isElectronTrack = false;
628        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
629 <        if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
629 >        if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
630               (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
631            isElectronTrack = true;
632            break;
633          }
634 +        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
635 +          isElectronTrack = true;
636 +          break;
637 +        }
638        }      
639        if (isElectronTrack) continue;
640  
# Line 365 | Line 642 | MetTools::MetTools(const MuonCol *fMuons
642            (fPFCandidates->At(i)->HasGsfTrk()     && fabs(fPFCandidates->At(i)->GsfTrk()->DzCorrected(*fVertex)    ) < deltaZCut)) {
643          trackNumeratorX -= fPFCandidates->At(i)->Px();
644          trackNumeratorY -= fPFCandidates->At(i)->Py();
645 +        fRecoil += fPFCandidates->At(i)->Mom();
646 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
647        }
648      }
649  
# Line 373 | Line 652 | MetTools::MetTools(const MuonCol *fMuons
652        if (fPFCandidates->At(i)->Pt() > ptCut and fabs(fPFCandidates->At(i)->Eta()) < etaCut ) {
653          neutralNumeratorX -= fPFCandidates->At(i)->Px();
654          neutralNumeratorY -= fPFCandidates->At(i)->Py();
655 +        fRecoil += fPFCandidates->At(i)->Mom();
656        }
657      }
658    }
659    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
660 <  fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
660 >  fCorrectedTrackMet = mithep::Met(trackNumeratorX+trackNumeratorGenPX, trackNumeratorY+trackNumeratorGenPY);
661 >  fCHSMet = mithep::Met(CHSNumeratorX+trackNumeratorGenPX, CHSNumeratorY+trackNumeratorGenPY);
662 >  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
663   }
664  
665  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines