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.4 by mzanetti, Tue Apr 12 07:30:29 2011 UTC vs.
Revision 1.12 by ceballos, Sat Apr 28 19:10:01 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 34 | Line 47 | MetTools::MetTools(const MuonCol *fMuons
47          }
48        }      
49        if (isMuonTrack) continue;
50 <      
50 >
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()){
104 >    if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
105        bool isElectronTrack = false;
106        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
107          if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
# Line 81 | Line 112 | MetTools::MetTools(const ElectronCol *fE
112        }      
113        if (isElectronTrack) continue;
114  
115 <      if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
115 >      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          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 92 | 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 107 | 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 123 | 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) {
179 <      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();c++){
180 <        if (pfJets->At(j)->PFCand(j) == fPFCandidates->At(i)) {
179 >      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
180 >        if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
181            inTheJet=true;
182            break;
183          }
# Line 151 | 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 159 | 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 173 | 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 189 | 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) {
263 <      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();c++){
264 <        if (pfJets->At(j)->PFCand(j) == fPFCandidates->At(i)) {
263 >      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
264 >        if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
265            inTheJet=true;
266            break;
267          }
# Line 203 | Line 271 | MetTools::MetTools(const ElectronCol *fE
271      if (inTheJet) continue;
272  
273      // charged
274 <    if (fPFCandidates->At(i)->HasTrackerTrk()){
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 214 | Line 282 | MetTools::MetTools(const ElectronCol *fE
282        }      
283        if (isElectronTrack) continue;
284  
285 <      if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
285 >      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          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 225 | 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  
457    float trackNumeratorX  =0, trackNumeratorY  =0;
458    float neutralNumeratorX=0, neutralNumeratorY=0;
459 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
460  
461    // muons Pt
462    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 255 | Line 473 | MetTools::MetTools(const MuonCol *fMuons
473    // PF candidates pT
474    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
475  
476 +    // 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      // charged
489 <    if (fPFCandidates->At(i)->HasTrackerTrk()){
489 >    if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
490        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 <      }      
496 >        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
497 >          isMuonTrack = true;
498 >          break;
499 >        }
500 >      }    
501        if (isMuonTrack) continue;
502        
503        bool isElectronTrack = false;
504        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
505 <        if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
505 >        if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
506               (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
507            isElectronTrack = true;
508            break;
509          }
510 <      }      
510 >        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
511 >          isElectronTrack = true;
512 >          break;
513 >        }
514 >      }
515        if (isElectronTrack) continue;
516  
517 <      if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
517 >      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          trackNumeratorX -= fPFCandidates->At(i)->Px();
520          trackNumeratorY -= fPFCandidates->At(i)->Py();
521 +        fRecoil += fPFCandidates->At(i)->Mom();
522 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
523        }
524      }
525  
# Line 287 | Line 528 | MetTools::MetTools(const MuonCol *fMuons
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 +        fRecoil += fPFCandidates->At(i)->Mom();
532        }
533      }
534    }
535    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
536    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
537 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
538 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
539   }
540  
541  
542   MetTools::MetTools(const MuonCol *fMuons, const ElectronCol *fElectrons, const PFCandidateCol *fPFCandidates,
543                     const PFJetCol *pfJets,
544 <                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut) {
544 >                   const Vertex *fVertex, float deltaZCut, float ptCut, float etaCut, float intRadius) {
545  
546    float trackNumeratorX  =0, trackNumeratorY  =0;
547    float neutralNumeratorX=0, neutralNumeratorY=0;
548 +  float CHSNumeratorX  =0, CHSNumeratorY  =0, NHSNumeratorX  =0, NHSNumeratorY  =0;
549  
550    // muons Pt
551    for (UInt_t m = 0; m < fMuons->GetEntries(); ++m) {
# Line 323 | Line 568 | MetTools::MetTools(const MuonCol *fMuons
568    // PF candidates pT
569    for (UInt_t i=0; i<fPFCandidates->GetEntries(); ++i) {
570  
571 +    // 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      // jets
584      bool inTheJet = false;
585      for (UInt_t j = 0; j < pfJets->GetEntries(); ++j) {
586 <      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();c++){
587 <        if (pfJets->At(j)->PFCand(j) == fPFCandidates->At(i)) {
586 >      for (UInt_t c=0;c<pfJets->At(j)->NPFCands();++c){
587 >        if (pfJets->At(j)->PFCand(c) == fPFCandidates->At(i)) {
588            inTheJet=true;
589            break;
590          }
# Line 338 | Line 595 | MetTools::MetTools(const MuonCol *fMuons
595  
596  
597      // charged
598 <    if (fPFCandidates->At(i)->HasTrackerTrk()){
598 >    if (fPFCandidates->At(i)->HasTrackerTrk() || fPFCandidates->At(i)->HasGsfTrk()){
599        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 +        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fMuons->At(m)->Mom()) < intRadius) {
606 +          isMuonTrack = true;
607 +          break;
608 +        }
609        }      
610        if (isMuonTrack) continue;
611        
612        bool isElectronTrack = false;
613        for (UInt_t m = 0; m < fElectrons->GetEntries(); ++m) {
614 <        if ( (fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
614 >        if ( (fElectrons->At(m)->HasTrackerTrk() and fElectrons->At(m)->TrackerTrk() == fPFCandidates->At(i)->TrackerTrk()) or
615               (fElectrons->At(m)->HasGsfTrk() and fElectrons->At(m)->GsfTrk() == fPFCandidates->At(i)->GsfTrk()) ) {
616            isElectronTrack = true;
617            break;
618          }
619 +        if (intRadius > 0.0 && MathUtils::DeltaR(fPFCandidates->At(i)->Mom(), fElectrons->At(m)->Mom()) < intRadius) {
620 +          isElectronTrack = true;
621 +          break;
622 +        }
623        }      
624        if (isElectronTrack) continue;
625  
626 <      if (fabs(fPFCandidates->At(i)->TrackerTrk()->DzCorrected(*fVertex)) < deltaZCut) {
626 >      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          trackNumeratorX -= fPFCandidates->At(i)->Px();
629          trackNumeratorY -= fPFCandidates->At(i)->Py();
630 +        fRecoil += fPFCandidates->At(i)->Mom();
631 +        fChargedRecoil += fPFCandidates->At(i)->Mom();
632        }
633      }
634  
# Line 369 | Line 637 | MetTools::MetTools(const MuonCol *fMuons
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 +        fRecoil += fPFCandidates->At(i)->Mom();
641        }
642      }
643    }
644    fCorrectedMet = mithep::Met(trackNumeratorX+neutralNumeratorX, trackNumeratorY+neutralNumeratorY);
645    fCorrectedTrackMet = mithep::Met(trackNumeratorX, trackNumeratorY);
646 +  fCHSMet = mithep::Met(CHSNumeratorX, CHSNumeratorY);
647 +  fNHSMet = mithep::Met(NHSNumeratorX, NHSNumeratorY);
648   }
649  
650  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines