ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/LeptonSelection/src/IsolationSelection.cc
(Generate patch)

Comparing UserCode/MitHzz4l/LeptonSelection/src/IsolationSelection.cc (file contents):
Revision 1.4 by khahn, Thu Apr 26 06:56:18 2012 UTC vs.
Revision 1.17 by khahn, Fri May 11 20:26:43 2012 UTC

# Line 16 | Line 16 | mithep::MuonTools       muT;
16   mithep::ElectronIDMVA * eleIsoMVA;
17   mithep::ElectronTools   eleT;
18  
19 + // global hack to sync
20 + double gChargedIso;
21 + double gGammaIso;
22 + double gNeutralIso;
23 +
24 +
25   //--------------------------------------------------------------------------------------------------
26   Float_t computePFMuonIso(const mithep::Muon *muon,
27                           const mithep::Vertex & vtx,
# Line 157 | Line 163 | bool pairwiseIsoSelection( ControlFlags
163  
164            float isoEcal_corr_j = lepvec[j].isoEcal - (effArea_ecal_j*rho);
165            float isoHcal_corr_j = lepvec[j].isoHcal - (effArea_hcal_j*rho);
166 <          float RIso_i = (lepvec[i].isoTrk+isoEcal_corr_i+isoHcal_corr_i)/lepvec[i].vec->Pt();
167 <          float RIso_j = (lepvec[j].isoTrk+isoEcal_corr_j+isoHcal_corr_j)/lepvec[j].vec->Pt();      
166 >          float RIso_i = (lepvec[i].isoTrk+isoEcal_corr_i+isoHcal_corr_i)/lepvec[i].vec.Pt();
167 >          float RIso_j = (lepvec[j].isoTrk+isoEcal_corr_j+isoHcal_corr_j)/lepvec[j].vec.Pt();      
168            float comboIso = RIso_i + RIso_j;
169            
170            if( comboIso > 0.35 ) {
# Line 257 | Line 263 | SelectionStatus muonIsoMVASelection(Cont
263   //--------------------------------------------------------------------------------------------------
264   {
265  
266 +  if( ctrl.debug ) {
267 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
268 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
269 +      const mithep::Muon * vmu = muonsToVeto[i];
270 +      cout << "\tpt: " << vmu->Pt()
271 +           << "\teta: " << vmu->Eta()
272 +           << "\tphi: " << vmu->Phi()
273 +           << endl;
274 +    }
275 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
276 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
277 +      const mithep::Electron * vel = electronsToVeto[i];
278 +      cout << "\tpt: " << vel->Pt()
279 +           << "\teta: " << vel->Eta()
280 +           << "\tphi: " << vel->Phi()
281 +           << endl;
282 +    }
283 +  }
284    bool failiso=false;
285  
286    //
287    // tmp iso rings
288    //
289 <  Double_t tmpChargedIso_DR0p0To0p05  = 0;
290 <  Double_t tmpChargedIso_DR0p05To0p1  = 0;
291 <  Double_t tmpChargedIso_DR0p1To0p15  = 0;
268 <  Double_t tmpChargedIso_DR0p15To0p2  = 0;
269 <  Double_t tmpChargedIso_DR0p2To0p25  = 0;
270 <  Double_t tmpChargedIso_DR0p25To0p3  = 0;
289 >  Double_t tmpChargedIso_DR0p0To0p1  = 0;
290 >  Double_t tmpChargedIso_DR0p1To0p2  = 0;
291 >  Double_t tmpChargedIso_DR0p2To0p3  = 0;
292    Double_t tmpChargedIso_DR0p3To0p4  = 0;
293    Double_t tmpChargedIso_DR0p4To0p5  = 0;
294 +  Double_t tmpChargedIso_DR0p5To0p7  = 0;
295  
296 <  Double_t tmpGammaIso_DR0p0To0p05  = 0;
297 <  Double_t tmpGammaIso_DR0p05To0p1  = 0;
298 <  Double_t tmpGammaIso_DR0p1To0p15  = 0;
277 <  Double_t tmpGammaIso_DR0p15To0p2  = 0;
278 <  Double_t tmpGammaIso_DR0p2To0p25  = 0;
279 <  Double_t tmpGammaIso_DR0p25To0p3  = 0;
296 >  Double_t tmpGammaIso_DR0p0To0p1  = 0;
297 >  Double_t tmpGammaIso_DR0p1To0p2  = 0;
298 >  Double_t tmpGammaIso_DR0p2To0p3  = 0;
299    Double_t tmpGammaIso_DR0p3To0p4  = 0;
300    Double_t tmpGammaIso_DR0p4To0p5  = 0;
301 +  Double_t tmpGammaIso_DR0p5To0p7  = 0;
302  
303 <  Double_t tmpNeutralHadronIso_DR0p0To0p05  = 0;
304 <  Double_t tmpNeutralHadronIso_DR0p05To0p1  = 0;
305 <  Double_t tmpNeutralHadronIso_DR0p1To0p15  = 0;
286 <  Double_t tmpNeutralHadronIso_DR0p15To0p2  = 0;
287 <  Double_t tmpNeutralHadronIso_DR0p2To0p25  = 0;
288 <  Double_t tmpNeutralHadronIso_DR0p25To0p3  = 0;
303 >  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
304 >  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
305 >  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
306    Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
307    Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
308 +  Double_t tmpNeutralHadronIso_DR0p5To0p7  = 0;
309 +
310          
292  Double_t tmp2ChargedIso_DR0p5To1p0  = 0;
311  
312    //
313    // final rings for the MVA
# Line 299 | Line 317 | SelectionStatus muonIsoMVASelection(Cont
317    Double_t fChargedIso_DR0p2To0p3;
318    Double_t fChargedIso_DR0p3To0p4;
319    Double_t fChargedIso_DR0p4To0p5;
320 +  Double_t fChargedIso_DR0p5To0p7;
321  
322    Double_t fGammaIso_DR0p0To0p1;
323    Double_t fGammaIso_DR0p1To0p2;
324    Double_t fGammaIso_DR0p2To0p3;
325    Double_t fGammaIso_DR0p3To0p4;
326    Double_t fGammaIso_DR0p4To0p5;
327 +  Double_t fGammaIso_DR0p5To0p7;
328  
329    Double_t fNeutralHadronIso_DR0p0To0p1;
330    Double_t fNeutralHadronIso_DR0p1To0p2;
331    Double_t fNeutralHadronIso_DR0p2To0p3;
332    Double_t fNeutralHadronIso_DR0p3To0p4;
333    Double_t fNeutralHadronIso_DR0p4To0p5;
334 +  Double_t fNeutralHadronIso_DR0p5To0p7;
335  
336  
337    //
# Line 324 | Line 345 | SelectionStatus muonIsoMVASelection(Cont
345      Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
346      if (dr > 1.0) continue;
347  
348 <    if (pf->PFType() == PFCandidate::eMuon && pf->TrackerTrk() == mu->TrackerTrk() ) continue;
348 >    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
349  
350      //
351      // Lepton Footprint Removal
# Line 337 | Line 358 | SelectionStatus muonIsoMVASelection(Cont
358        //
359        for (Int_t q=0; q < electronsToVeto.size(); ++q) {
360          const mithep::Electron *tmpele = electronsToVeto[q];
361 <        // PF electron
362 <        if( pf->PFType() == PFCandidate::eElectron && pf->TrackerTrk() == tmpele->TrackerTrk() )
363 <          IsLeptonFootprint = kTRUE;
361 >        // 4l electron
362 >        if( pf->HasTrackerTrk() ) {
363 >          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
364 >            IsLeptonFootprint = kTRUE;
365 >        }
366 >        if( pf->HasGsfTrk() ) {
367 >          if( pf->GsfTrk() == tmpele->GsfTrk() )
368 >            IsLeptonFootprint = kTRUE;
369 >        }
370          // PF charged
371          if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
372              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
373            IsLeptonFootprint = kTRUE;
374          // PF gamma
375 <        if (pf->PFType() == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
375 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
376              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
377            IsLeptonFootprint = kTRUE;
378        } // loop over electrons
379        
380 +      /* KH - commented for sync
381        //
382        // Check for muons
383        //
384        for (Int_t q=0; q < muonsToVeto.size(); ++q) {
385          const mithep::Muon *tmpmu = muonsToVeto[q];
386 <        // PF muons
387 <        if (pf->PFType() == PFCandidate::eMuon && pf->TrackerTrk() == tmpmu->TrackerTrk() )
388 <          IsLeptonFootprint = kTRUE;
386 >        // 4l muon
387 >        if( pf->HasTrackerTrk() ) {
388 >          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
389 >            IsLeptonFootprint = kTRUE;
390 >        }
391          // PF charged
392          if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
393            IsLeptonFootprint = kTRUE;
394        } // loop over muons
395 <
395 >      */
396  
397      if (IsLeptonFootprint)
398        continue;
# Line 370 | Line 400 | SelectionStatus muonIsoMVASelection(Cont
400      //
401      // Charged Iso Rings
402      //
403 <    if (pf->Charge() != 0 && pf->HasTrackerTrk() ) {
403 >    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
404  
405 <      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
406 <                
377 <      // Veto any PFmuon, or PFEle
378 <      if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) continue;
405 >      if( dr < 0.01 ) continue; // only for muon iso mva?
406 >      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
407  
408 <      // Footprint Veto
409 <      if (dr < 0.01) continue;
408 >      if( pf->HasTrackerTrk() ) {
409 >        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
410 >        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
411 >                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
412 >                              << dr << endl;
413 >      }
414 >      if( pf->HasGsfTrk() ) {
415 >        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
416 >        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
417 >                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
418 >                              << dr << endl;
419 >      }
420  
421 <      if (dr < 0.05)               tmpChargedIso_DR0p0To0p05 += pf->Pt();
422 <      if (dr >= 0.05 && dr < 0.10) tmpChargedIso_DR0p05To0p1 += pf->Pt();
423 <      if (dr >= 0.10 && dr < 0.15) tmpChargedIso_DR0p1To0p15 += pf->Pt();
424 <      if (dr >= 0.15 && dr < 0.20) tmpChargedIso_DR0p15To0p2 += pf->Pt();
425 <      if (dr >= 0.20 && dr < 0.25) tmpChargedIso_DR0p2To0p25 += pf->Pt();
426 <      if (dr >= 0.25 && dr < 0.3)  tmpChargedIso_DR0p25To0p3 += pf->Pt();
427 <      if (dr >= 0.3 && dr < 0.4)   tmpChargedIso_DR0p3To0p4  += pf->Pt();
390 <      if (dr >= 0.4 && dr < 0.5)   tmpChargedIso_DR0p4To0p5  += pf->Pt();
421 >      // Footprint Veto
422 >      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
423 >      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
424 >      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
425 >      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
426 >      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
427 >      if (dr >= 0.5 && dr < 0.7) tmpChargedIso_DR0p5To0p7 += pf->Pt();
428      }
429  
430      //
431      // Gamma Iso Rings
432      //
433 <    else if (pf->PFType() == PFCandidate::eGamma) {
434 <
435 <      if (dr < 0.05)               tmpGammaIso_DR0p0To0p05 += pf->Pt();
436 <      if (dr >= 0.05 && dr < 0.10) tmpGammaIso_DR0p05To0p1 += pf->Pt();
437 <      if (dr >= 0.10 && dr < 0.15) tmpGammaIso_DR0p1To0p15 += pf->Pt();
438 <      if (dr >= 0.15 && dr < 0.20) tmpGammaIso_DR0p15To0p2 += pf->Pt();
439 <      if (dr >= 0.20 && dr < 0.25) tmpGammaIso_DR0p2To0p25 += pf->Pt();
403 <      if (dr >= 0.25 && dr < 0.3)  tmpGammaIso_DR0p25To0p3 += pf->Pt();
404 <      if (dr >= 0.3 && dr < 0.4)   tmpGammaIso_DR0p3To0p4  += pf->Pt();
405 <      if (dr >= 0.4 && dr < 0.5)   tmpGammaIso_DR0p4To0p5  += pf->Pt();
433 >    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
434 >      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
435 >      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
436 >      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
437 >      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
438 >      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
439 >      if (dr >= 0.5 && dr < 0.7) tmpGammaIso_DR0p5To0p7 += pf->Pt();
440      }
441  
442      //
443      // Other Neutral Iso Rings
444      //
445      else {
446 <      if (dr < 0.05)               tmpNeutralHadronIso_DR0p0To0p05 += pf->Pt();
447 <      if (dr >= 0.05 && dr < 0.10) tmpNeutralHadronIso_DR0p05To0p1 += pf->Pt();
448 <      if (dr >= 0.10 && dr < 0.15) tmpNeutralHadronIso_DR0p1To0p15 += pf->Pt();
449 <      if (dr >= 0.15 && dr < 0.20) tmpNeutralHadronIso_DR0p15To0p2 += pf->Pt();
450 <      if (dr >= 0.20 && dr < 0.25) tmpNeutralHadronIso_DR0p2To0p25 += pf->Pt();
451 <      if (dr >= 0.25 && dr < 0.3)  tmpNeutralHadronIso_DR0p25To0p3 += pf->Pt();
418 <      if (dr >= 0.3 && dr < 0.4)   tmpNeutralHadronIso_DR0p3To0p4  += pf->Pt();
419 <      if (dr >= 0.4 && dr < 0.5)   tmpNeutralHadronIso_DR0p4To0p5  += pf->Pt();
446 >      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
447 >      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
448 >      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
449 >      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
450 >      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
451 >      if (dr >= 0.5 && dr < 0.7) tmpNeutralHadronIso_DR0p5To0p7 += pf->Pt();
452      }
453  
454      }
455  
456    }
457  
458 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p05 + tmpChargedIso_DR0p05To0p1 )/mu->Pt(), 2.5);
459 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p15 + tmpChargedIso_DR0p15To0p2)/mu->Pt(), 2.5);
460 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p25 + tmpChargedIso_DR0p25To0p3)/mu->Pt(), 2.5);
458 >  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
459 >  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
460 >  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
461    fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
462    fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
463  
464 +
465    double rho = 0;
466    if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
467      rho = fPUEnergyDensity->At(0)->Rho();
468    
469  
470 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p05 + tmpGammaIso_DR0p05To0p1
470 >  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
471                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p0To0p1,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
472                                   ,2.5)
473                               ,0.0);
474 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p15 + tmpGammaIso_DR0p15To0p2
474 >  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
475                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p1To0p2,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
476                                   ,2.5)
477                               ,0.0);
478 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p25 + tmpGammaIso_DR0p25To0p3
478 >  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
479                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p2To0p3,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
480                                   ,2.5)
481                               ,0.0);
# Line 456 | Line 489 | SelectionStatus muonIsoMVASelection(Cont
489                               ,0.0);
490  
491  
492 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p05 + tmpNeutralHadronIso_DR0p05To0p1
492 >
493 >  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
494                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p0To0p1,
495                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
496                                           , 2.5)
497                                       , 0.0);
498 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p15 + tmpNeutralHadronIso_DR0p15To0p2
498 >  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
499                                              -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p1To0p2,
500                                                                     mu->Eta(),EffectiveAreaVersion))/mu->Pt()
501                                             , 2.5)
502                                         , 0.0);
503 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p25 + tmpNeutralHadronIso_DR0p25To0p3
503 >  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
504                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p2To0p3,
505                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
506                                           , 2.5)
# Line 482 | Line 516 | SelectionStatus muonIsoMVASelection(Cont
516                                           , 2.5)
517                                       , 0.0);
518  
519 +
520    double mvaval = muIsoMVA->MVAValue_IsoRings( mu->Pt(),
521                                               mu->Eta(),
522                                               fChargedIso_DR0p0To0p1,
# Line 502 | Line 537 | SelectionStatus muonIsoMVASelection(Cont
537                                               ctrl.debug);
538  
539    SelectionStatus status;
540 <  bool pass = false;
540 >  bool pass;
541  
542 +  pass = false;
543    if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
544 <      && fabs(mu->Eta()) < 1.5 && mu->Pt() < 10 && mvaval >= MUON_ISOMVA_CUT_BIN0)  pass = true;
544 >      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN0)   pass = true;
545    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
546 <           && fabs(mu->Eta()) < 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_CUT_BIN1)  pass = true;
546 >           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN1)  pass = true;
547    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
548 <           && fabs(mu->Eta()) > 1.5 && mu->Pt() < 10 && mvaval >= MUON_ISOMVA_CUT_BIN2)  pass = true;
548 >           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN2)  pass = true;
549    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
550 <           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_CUT_BIN3)  pass = true;
551 <  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon()
552 <           && (mu->Quality().QualityMask().Mask() & mithep::MuonQuality::AllArbitrated) && mvaval >= MUON_ISOMVA_CUT_BIN4)
553 <    pass = true;
550 >           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN3)  pass = true;
551 >  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN4)  pass = true;
552 >  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN5)  pass = true;
553 >  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
554  
555 +  pass = false;
556 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
557 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN0)   pass = true;
558 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
559 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN1)  pass = true;
560 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
561 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN2)  pass = true;
562 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
563 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN3)  pass = true;
564 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN4)  pass = true;
565 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN5)  pass = true;
566 +  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
567 +
568 +  //  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
569  
520  if( pass ) {
521    status.orStatus(SelectionStatus::LOOSEISO);
522    status.orStatus(SelectionStatus::TIGHTISO);
523  }
570    if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
571    return status;
572  
# Line 543 | Line 589 | void initMuonIsoMVA() {
589   }
590  
591  
592 + //--------------------------------------------------------------------------------------------------
593 + double  muonPFIso04(ControlFlags &ctrl,
594 +                    const mithep::Muon * mu,
595 +                    const mithep::Vertex & vtx,
596 +                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
597 +                    const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
598 +                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
599 +                    vector<const mithep::Muon*> muonsToVeto,
600 +                    vector<const mithep::Electron*> electronsToVeto)
601 + //--------------------------------------------------------------------------------------------------
602 + {
603 +  
604 +  if( ctrl.debug ) {
605 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
606 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
607 +      const mithep::Muon * vmu = muonsToVeto[i];
608 +      cout << "\tpt: " << vmu->Pt()
609 +           << "\teta: " << vmu->Eta()
610 +           << "\tphi: " << vmu->Phi()
611 +           << endl;
612 +    }
613 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
614 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
615 +      const mithep::Electron * vel = electronsToVeto[i];
616 +      cout << "\tpt: " << vel->Pt()
617 +           << "\teta: " << vel->Eta()
618 +           << "\tphi: " << vel->Phi()
619 +           << endl;
620 +    }
621 +  }
622 +
623 +  //
624 +  // final iso
625 +  //
626 +  Double_t fChargedIso  = 0.0;
627 +  Double_t fGammaIso  = 0.0;
628 +  Double_t fNeutralHadronIso  = 0.0;
629 +
630 +  //
631 +  //Loop over PF Candidates
632 +  //
633 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
634 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
635 +
636 +    Double_t deta = (mu->Eta() - pf->Eta());
637 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
638 +    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
639 +    if (dr > 0.4) continue;
640 +
641 +    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
642 +
643 +    //
644 +    // Lepton Footprint Removal
645 +    //
646 +    Bool_t IsLeptonFootprint = kFALSE;
647 +    if (dr < 1.0) {
648 +
649 +      //
650 +      // Check for electrons
651 +      //
652 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
653 +        const mithep::Electron *tmpele = electronsToVeto[q];
654 +        // 4l electron
655 +        if( pf->HasTrackerTrk() ) {
656 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
657 +            IsLeptonFootprint = kTRUE;
658 +        }
659 +        if( pf->HasGsfTrk() ) {
660 +          if( pf->GsfTrk() == tmpele->GsfTrk() )
661 +            IsLeptonFootprint = kTRUE;
662 +        }
663 +        // PF charged
664 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
665 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
666 +          IsLeptonFootprint = kTRUE;
667 +        // PF gamma
668 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
669 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
670 +          IsLeptonFootprint = kTRUE;
671 +      } // loop over electrons
672 +
673 +      // KH, comment to sync
674 +      /*
675 +      //
676 +      // Check for muons
677 +      //
678 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
679 +        const mithep::Muon *tmpmu = muonsToVeto[q];
680 +        // 4l muon
681 +        if( pf->HasTrackerTrk() ) {
682 +          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
683 +            IsLeptonFootprint = kTRUE;
684 +        }
685 +        // PF charged
686 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
687 +          IsLeptonFootprint = kTRUE;
688 +      } // loop over muons
689 +      */
690 +
691 +    if (IsLeptonFootprint)
692 +      continue;
693 +
694 +    //
695 +    // Charged Iso
696 +    //
697 +    if (pf->Charge() != 0 ) {
698 +
699 +      //if( dr < 0.01 ) continue; // only for muon iso mva?
700 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
701 +
702 +      if( pf->HasTrackerTrk() ) {
703 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
704 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
705 +                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
706 +                              << dr << endl;
707 +      }
708 +      if( pf->HasGsfTrk() ) {
709 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
710 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
711 +                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
712 +                              << dr << endl;
713 +      }
714 +
715 +
716 +      fChargedIso += pf->Pt();
717 +    }
718 +
719 +    //
720 +    // Gamma Iso
721 +    //
722 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
723 +      // KH, add to sync
724 +      if( pf->Pt() > 0.5 )
725 +      fGammaIso += pf->Pt();
726 +    }
727 +
728 +    //
729 +    // Other Neutrals
730 +    //
731 +    else {
732 +      // KH, add to sync
733 +      if( pf->Pt() > 0.5 )
734 +        fNeutralHadronIso += pf->Pt();
735 +    }
736 +    
737 +    }
738 +    
739 +  }
740 +  
741 +  double rho = 0;
742 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
743 + //     rho = fPUEnergyDensity->At(0)->Rho();
744 +  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
745 +    rho = fPUEnergyDensity->At(0)->RhoLowEta();
746 +
747 +  // WARNING!!!!  
748 +  // hardcode for sync ...
749 +  EffectiveAreaVersion = muT.kMuEAData2011;
750 +  // WARNING!!!!  
751 +
752 +
753 +  double pfIso = fChargedIso + max(0.0,(fGammaIso + fNeutralHadronIso
754 +                                        -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
755 +                                                                   mu->Eta(),EffectiveAreaVersion)));
756 +
757 +  gChargedIso = fChargedIso;
758 +  gGammaIso = fGammaIso;
759 +  gNeutralIso = fNeutralHadronIso;  
760 +  return pfIso;
761 + }
762 +
763 +
764 + //--------------------------------------------------------------------------------------------------
765 + // hacked version
766 + double  muonPFIso04(ControlFlags &ctrl,
767 +                    const mithep::Muon * mu,
768 +                    const mithep::Vertex & vtx,
769 +                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
770 +                    float rho,
771 +                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
772 +                    vector<const mithep::Muon*> muonsToVeto,
773 +                    vector<const mithep::Electron*> electronsToVeto)
774 + //--------------------------------------------------------------------------------------------------
775 + {
776 +
777 +  extern double gChargedIso;  
778 +  extern double  gGammaIso;      
779 +  extern double  gNeutralIso;
780 +  
781 +  if( ctrl.debug ) {
782 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
783 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
784 +      const mithep::Muon * vmu = muonsToVeto[i];
785 +      cout << "\tpt: " << vmu->Pt()
786 +           << "\teta: " << vmu->Eta()
787 +           << "\tphi: " << vmu->Phi()
788 +           << endl;
789 +    }
790 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
791 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
792 +      const mithep::Electron * vel = electronsToVeto[i];
793 +      cout << "\tpt: " << vel->Pt()
794 +           << "\teta: " << vel->Eta()
795 +           << "\tphi: " << vel->Phi()
796 +           << endl;
797 +    }
798 +  }
799 +
800 +  //
801 +  // final iso
802 +  //
803 +  Double_t fChargedIso  = 0.0;
804 +  Double_t fGammaIso  = 0.0;
805 +  Double_t fNeutralHadronIso  = 0.0;
806 +
807 +  //
808 +  //Loop over PF Candidates
809 +  //
810 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
811 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
812 +
813 +    Double_t deta = (mu->Eta() - pf->Eta());
814 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
815 +    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
816 +    if (dr > 0.4) continue;
817 +
818 +    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
819 +
820 +    //
821 +    // Lepton Footprint Removal
822 +    //
823 +    Bool_t IsLeptonFootprint = kFALSE;
824 +    if (dr < 1.0) {
825 +
826 +      //
827 +      // Check for electrons
828 +      //
829 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
830 +        const mithep::Electron *tmpele = electronsToVeto[q];
831 +        // 4l electron
832 +        if( pf->HasTrackerTrk() ) {
833 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
834 +            IsLeptonFootprint = kTRUE;
835 +        }
836 +        if( pf->HasGsfTrk() ) {
837 +          if( pf->GsfTrk() == tmpele->GsfTrk() )
838 +            IsLeptonFootprint = kTRUE;
839 +        }
840 +        // PF charged
841 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
842 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
843 +          IsLeptonFootprint = kTRUE;
844 +        // PF gamma
845 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
846 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
847 +          IsLeptonFootprint = kTRUE;
848 +      } // loop over electrons
849 +
850 +      /* KH - comment for sync      
851 +      //
852 +      // Check for muons
853 +      //
854 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
855 +        const mithep::Muon *tmpmu = muonsToVeto[q];
856 +        // 4l muon
857 +        if( pf->HasTrackerTrk() ) {
858 +          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
859 +            IsLeptonFootprint = kTRUE;
860 +        }
861 +        // PF charged
862 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
863 +          IsLeptonFootprint = kTRUE;
864 +      } // loop over muons
865 +      */
866 +
867 +    if (IsLeptonFootprint)
868 +      continue;
869 +
870 +    //
871 +    // Charged Iso
872 +    //
873 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
874 +
875 +      if( dr < 0.01 ) continue; // only for muon iso mva?
876 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
877 +
878 +      if( pf->HasTrackerTrk() ) {
879 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
880 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
881 +                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
882 +                              << dr << endl;
883 +      }
884 +      if( pf->HasGsfTrk() ) {
885 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
886 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
887 +                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
888 +                              << dr << endl;
889 +      }
890 +
891 +
892 +      fChargedIso += pf->Pt();
893 +    }
894 +
895 +    //
896 +    // Gamma Iso
897 +    //
898 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
899 +      fGammaIso += pf->Pt();
900 +    }
901 +
902 +    //
903 +    // Other Neutrals
904 +    //
905 +    else {
906 +      // KH, add to sync
907 +      if( pf->Pt() > 0.5 )
908 +        fNeutralHadronIso += pf->Pt();
909 +    }
910 +    
911 +    }
912 +    
913 +  }
914 +  
915 + //   double rho = 0;
916 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
917 + //     rho = fPUEnergyDensity->At(0)->Rho();
918 +
919 +  // WARNING!!!!  
920 +  // hardcode for sync ...
921 +  EffectiveAreaVersion = muT.kMuEAData2011;
922 +  // WARNING!!!!  
923 +
924 +
925 +  double pfIso = fChargedIso + max(0.0,(fGammaIso + fNeutralHadronIso
926 +                                        -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
927 +                                                                   mu->Eta(),EffectiveAreaVersion)));
928 +  gChargedIso = fChargedIso;
929 +  gGammaIso   = fGammaIso;
930 +  gNeutralIso = fNeutralHadronIso;
931 +  
932 +  return pfIso;
933 + }
934 +
935 +
936 + //--------------------------------------------------------------------------------------------------
937 + SelectionStatus muonReferenceIsoSelection(ControlFlags &ctrl,
938 +                                          const mithep::Muon * mu,
939 +                                          const mithep::Vertex & vtx,
940 +                                          const mithep::Array<mithep::PFCandidate> * fPFCandidates,
941 +                                          const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
942 +                                          mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
943 +                                          vector<const mithep::Muon*> muonsToVeto,
944 +                                          vector<const mithep::Electron*> electronsToVeto)
945 + //--------------------------------------------------------------------------------------------------
946 + {
947 +  
948 +  SelectionStatus status;
949 +
950 +  double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, fPUEnergyDensity,
951 +                              EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
952 +  cout << "--------------> setting muon isoPF04 to" << pfIso << endl;
953 +  status.isoPF04 = pfIso;
954 +  status.chisoPF04 = gChargedIso;
955 +  status.gaisoPF04 = gGammaIso;
956 +  status.neisoPF04 = gNeutralIso;
957 +
958 +  bool pass = false;
959 +  if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
960 +  
961 +  if( pass ) {
962 +    status.orStatus(SelectionStatus::LOOSEISO);
963 +    status.orStatus(SelectionStatus::TIGHTISO);
964 +  }
965 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
966 +  return status;
967 +  
968 + }
969 +
970 +
971 + //--------------------------------------------------------------------------------------------------
972 + // hacked version
973 + SelectionStatus muonReferenceIsoSelection(ControlFlags &ctrl,
974 +                                          const mithep::Muon * mu,
975 +                                          const mithep::Vertex & vtx,
976 +                                          const mithep::Array<mithep::PFCandidate> * fPFCandidates,
977 +                                          float rho,
978 +                                          mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
979 +                                          vector<const mithep::Muon*> muonsToVeto,
980 +                                          vector<const mithep::Electron*> electronsToVeto)
981 + //--------------------------------------------------------------------------------------------------
982 + {
983 +  
984 +  SelectionStatus status;
985 +  
986 +  double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, rho,
987 +                              EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
988 +  bool pass = false;
989 +  if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
990 +  
991 +  if( pass ) {
992 +    status.orStatus(SelectionStatus::LOOSEISO);
993 +    status.orStatus(SelectionStatus::TIGHTISO);
994 +  }
995 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
996 +  return status;
997 +  
998 + }
999 +
1000 +
1001  
1002   //--------------------------------------------------------------------------------------------------
1003   SelectionStatus electronIsoMVASelection(ControlFlags &ctrl,
# Line 556 | Line 1011 | SelectionStatus electronIsoMVASelection(
1011   //--------------------------------------------------------------------------------------------------
1012   {
1013  
1014 +  if( ctrl.debug ) {
1015 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1016 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1017 +      const mithep::Muon * vmu = muonsToVeto[i];
1018 +      cout << "\tpt: " << vmu->Pt()
1019 +           << "\teta: " << vmu->Eta()
1020 +           << "\tphi: " << vmu->Phi()
1021 +           << endl;
1022 +    }
1023 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1024 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1025 +      const mithep::Electron * vel = electronsToVeto[i];
1026 +      cout << "\tpt: " << vel->Pt()
1027 +           << "\teta: " << vel->Eta()
1028 +           << "\tphi: " << vel->Phi()
1029 +           << "\ttrk: " << vel->TrackerTrk()
1030 +           << endl;
1031 +    }
1032 +  }
1033 +
1034    bool failiso=false;
1035  
1036    //
1037    // tmp iso rings
1038    //
1039 <  Double_t tmpChargedIso_DR0p0To0p05  = 0;
1040 <  Double_t tmpChargedIso_DR0p05To0p1  = 0;
1041 <  Double_t tmpChargedIso_DR0p1To0p15  = 0;
567 <  Double_t tmpChargedIso_DR0p15To0p2  = 0;
568 <  Double_t tmpChargedIso_DR0p2To0p25  = 0;
569 <  Double_t tmpChargedIso_DR0p25To0p3  = 0;
1039 >  Double_t tmpChargedIso_DR0p0To0p1  = 0;
1040 >  Double_t tmpChargedIso_DR0p1To0p2  = 0;
1041 >  Double_t tmpChargedIso_DR0p2To0p3  = 0;
1042    Double_t tmpChargedIso_DR0p3To0p4  = 0;
1043    Double_t tmpChargedIso_DR0p4To0p5  = 0;
1044 +  Double_t tmpChargedIso_DR0p5To0p7  = 0;
1045  
1046 <  Double_t tmpGammaIso_DR0p0To0p05  = 0;
1047 <  Double_t tmpGammaIso_DR0p05To0p1  = 0;
1048 <  Double_t tmpGammaIso_DR0p1To0p15  = 0;
576 <  Double_t tmpGammaIso_DR0p15To0p2  = 0;
577 <  Double_t tmpGammaIso_DR0p2To0p25  = 0;
578 <  Double_t tmpGammaIso_DR0p25To0p3  = 0;
1046 >  Double_t tmpGammaIso_DR0p0To0p1  = 0;
1047 >  Double_t tmpGammaIso_DR0p1To0p2  = 0;
1048 >  Double_t tmpGammaIso_DR0p2To0p3  = 0;
1049    Double_t tmpGammaIso_DR0p3To0p4  = 0;
1050    Double_t tmpGammaIso_DR0p4To0p5  = 0;
1051 +  Double_t tmpGammaIso_DR0p5To0p7  = 0;
1052  
1053 <  Double_t tmpNeutralHadronIso_DR0p0To0p05  = 0;
1054 <  Double_t tmpNeutralHadronIso_DR0p05To0p1  = 0;
1055 <  Double_t tmpNeutralHadronIso_DR0p1To0p15  = 0;
585 <  Double_t tmpNeutralHadronIso_DR0p15To0p2  = 0;
586 <  Double_t tmpNeutralHadronIso_DR0p2To0p25  = 0;
587 <  Double_t tmpNeutralHadronIso_DR0p25To0p3  = 0;
1053 >  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
1054 >  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
1055 >  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
1056    Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
1057    Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
1058 +  Double_t tmpNeutralHadronIso_DR0p5To0p7  = 0;
1059 +
1060          
591  Double_t tmp2ChargedIso_DR0p5To1p0  = 0;
1061  
1062    //
1063    // final rings for the MVA
# Line 617 | Line 1086 | SelectionStatus electronIsoMVASelection(
1086    //
1087    for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1088      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
620
1089      Double_t deta = (ele->Eta() - pf->Eta());
1090      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1091      Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1092 <    if (dr > 1.0) continue;
1092 >    if (dr >= 0.5) continue;
1093 >    if(ctrl.debug) {
1094 >      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1095 >      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1096 >      cout << endl;
1097 >    }
1098  
1099 <    if (pf->PFType() == PFCandidate::eElectron && pf->TrackerTrk() == ele->TrackerTrk() ) continue;
1099 >
1100 >    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1101 >         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1102 >    
1103  
1104      //
1105      // Lepton Footprint Removal
# Line 636 | Line 1112 | SelectionStatus electronIsoMVASelection(
1112        //
1113        for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1114          const mithep::Electron *tmpele = electronsToVeto[q];
1115 <        // PF electron
1116 <        if( pf->PFType() == PFCandidate::eElectron && pf->TrackerTrk() == tmpele->TrackerTrk() )
1117 <          IsLeptonFootprint = kTRUE;
1115 >        // 4l electron
1116 >        if( pf->HasTrackerTrk()  ) {
1117 >          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1118 >            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1119 >            IsLeptonFootprint = kTRUE;
1120 >          }
1121 >        }
1122 >        if( pf->HasGsfTrk()  ) {
1123 >          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1124 >            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1125 >            IsLeptonFootprint = kTRUE;
1126 >          }
1127 >        }
1128          // PF charged
1129          if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1130 <            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
1130 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1131 >          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1132            IsLeptonFootprint = kTRUE;
1133 +        }
1134          // PF gamma
1135 <        if (pf->PFType() == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1136 <            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
1135 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1136 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1137 >          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1138            IsLeptonFootprint = kTRUE;
1139 +        }
1140        } // loop over electrons
1141 <      
1141 >
1142 >      /* KH - comment for sync            
1143        //
1144        // Check for muons
1145        //
1146        for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1147          const mithep::Muon *tmpmu = muonsToVeto[q];
1148 <        // PF muons
1149 <        if (pf->PFType() == PFCandidate::eMuon && pf->TrackerTrk() == tmpmu->TrackerTrk() )
1150 <          IsLeptonFootprint = kTRUE;
1148 >        // 4l muon
1149 >        if( pf->HasTrackerTrk() ) {
1150 >          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1151 >            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1152 >            IsLeptonFootprint = kTRUE;
1153 >          }
1154 >        }
1155          // PF charged
1156 <        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
1156 >        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1157 >          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1158            IsLeptonFootprint = kTRUE;
1159 +        }
1160        } // loop over muons
1161 <
1161 >      */
1162  
1163      if (IsLeptonFootprint)
1164        continue;
# Line 669 | Line 1166 | SelectionStatus electronIsoMVASelection(
1166      //
1167      // Charged Iso Rings
1168      //
1169 <    if (pf->Charge() != 0 && pf->HasTrackerTrk() ) {
1169 >    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1170 >
1171 >      if( pf->HasTrackerTrk() )
1172 >        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1173 >      if( pf->HasGsfTrk() )
1174 >        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1175  
674      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
675                
1176        // Veto any PFmuon, or PFEle
1177 <      if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) continue;
1177 >      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1178  
1179        // Footprint Veto
1180 <      if (dr < 0.01) continue;
1180 >      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1181 >
1182 >      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1183 >                           << "\ttype: " << pf->PFType()
1184 >                           << "\ttrk: " << pf->TrackerTrk() << endl;
1185 >
1186 >      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
1187 >      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
1188 >      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
1189 >      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
1190 >      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
1191 >      if (dr >= 0.5 && dr < 0.7) tmpChargedIso_DR0p5To0p7 += pf->Pt();
1192  
682      if (dr < 0.05)               tmpChargedIso_DR0p0To0p05 += pf->Pt();
683      if (dr >= 0.05 && dr < 0.10) tmpChargedIso_DR0p05To0p1 += pf->Pt();
684      if (dr >= 0.10 && dr < 0.15) tmpChargedIso_DR0p1To0p15 += pf->Pt();
685      if (dr >= 0.15 && dr < 0.20) tmpChargedIso_DR0p15To0p2 += pf->Pt();
686      if (dr >= 0.20 && dr < 0.25) tmpChargedIso_DR0p2To0p25 += pf->Pt();
687      if (dr >= 0.25 && dr < 0.3)  tmpChargedIso_DR0p25To0p3 += pf->Pt();
688      if (dr >= 0.3 && dr < 0.4)   tmpChargedIso_DR0p3To0p4  += pf->Pt();
689      if (dr >= 0.4 && dr < 0.5)   tmpChargedIso_DR0p4To0p5  += pf->Pt();
1193      }
1194  
1195      //
1196      // Gamma Iso Rings
1197      //
1198 <    else if (pf->PFType() == PFCandidate::eGamma) {
1198 >    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1199 >
1200 >      if (fabs(ele->SCluster()->Eta()) > 1.479) {
1201 >        if (mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta()) < 0.08) continue;
1202 >      }
1203 >
1204 >      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1205 >                           << dr << endl;
1206 >
1207 >      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
1208 >      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
1209 >      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
1210 >      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
1211 >      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
1212 >      if (dr >= 0.5 && dr < 0.7) tmpGammaIso_DR0p5To0p7 += pf->Pt();
1213  
697      if (dr < 0.05)               tmpGammaIso_DR0p0To0p05 += pf->Pt();
698      if (dr >= 0.05 && dr < 0.10) tmpGammaIso_DR0p05To0p1 += pf->Pt();
699      if (dr >= 0.10 && dr < 0.15) tmpGammaIso_DR0p1To0p15 += pf->Pt();
700      if (dr >= 0.15 && dr < 0.20) tmpGammaIso_DR0p15To0p2 += pf->Pt();
701      if (dr >= 0.20 && dr < 0.25) tmpGammaIso_DR0p2To0p25 += pf->Pt();
702      if (dr >= 0.25 && dr < 0.3)  tmpGammaIso_DR0p25To0p3 += pf->Pt();
703      if (dr >= 0.3 && dr < 0.4)   tmpGammaIso_DR0p3To0p4  += pf->Pt();
704      if (dr >= 0.4 && dr < 0.5)   tmpGammaIso_DR0p4To0p5  += pf->Pt();
1214      }
1215  
1216      //
1217      // Other Neutral Iso Rings
1218      //
1219      else {
1220 <      if (dr < 0.05)               tmpNeutralHadronIso_DR0p0To0p05 += pf->Pt();
1221 <      if (dr >= 0.05 && dr < 0.10) tmpNeutralHadronIso_DR0p05To0p1 += pf->Pt();
1222 <      if (dr >= 0.10 && dr < 0.15) tmpNeutralHadronIso_DR0p1To0p15 += pf->Pt();
1223 <      if (dr >= 0.15 && dr < 0.20) tmpNeutralHadronIso_DR0p15To0p2 += pf->Pt();
1224 <      if (dr >= 0.20 && dr < 0.25) tmpNeutralHadronIso_DR0p2To0p25 += pf->Pt();
1225 <      if (dr >= 0.25 && dr < 0.3)  tmpNeutralHadronIso_DR0p25To0p3 += pf->Pt();
1226 <      if (dr >= 0.3 && dr < 0.4)   tmpNeutralHadronIso_DR0p3To0p4  += pf->Pt();
1227 <      if (dr >= 0.4 && dr < 0.5)   tmpNeutralHadronIso_DR0p4To0p5  += pf->Pt();
1220 >      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1221 >                           << dr << endl;
1222 >      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
1223 >      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
1224 >      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
1225 >      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
1226 >      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
1227 >      if (dr >= 0.5 && dr < 0.7) tmpNeutralHadronIso_DR0p5To0p7 += pf->Pt();
1228      }
1229  
1230      }
1231  
1232    }
1233  
1234 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p05 + tmpChargedIso_DR0p05To0p1 )/ele->Pt(), 2.5);
1235 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p15 + tmpChargedIso_DR0p15To0p2)/ele->Pt(), 2.5);
1236 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p25 + tmpChargedIso_DR0p25To0p3)/ele->Pt(), 2.5);
1234 >  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1235 >  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1236 >  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1237    fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1238    fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1239  
1240    double rho = 0;
1241    if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1242      rho = fPUEnergyDensity->At(0)->Rho();
1243 <  
1244 <
1245 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p05 + tmpGammaIso_DR0p05To0p1
1243 >
1244 >  if( ctrl.debug) {
1245 >    cout << "RHO: " << rho << endl;
1246 >    cout << "eta: " << ele->SCluster()->Eta() << endl;
1247 >    cout << "target: " << EffectiveAreaVersion << endl;
1248 >    cout << "effA 0-1: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
1249 >                                                       ele->SCluster()->Eta(),
1250 >                                                       EffectiveAreaVersion)
1251 >         << endl;
1252 >    cout << "effA 1-2: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
1253 >                                                       ele->SCluster()->Eta(),
1254 >                                                       EffectiveAreaVersion)
1255 >         << endl;
1256 >    cout << "effA 2-3: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
1257 >                                                       ele->SCluster()->Eta(),
1258 >                                                       EffectiveAreaVersion)
1259 >         << endl;
1260 >    cout << "effA 3-4: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
1261 >                                                       ele->SCluster()->Eta(),
1262 >                                                       EffectiveAreaVersion)
1263 >         << endl;
1264 >  }
1265 >
1266 >  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
1267                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p0To0p1,
1268 <                                                              ele->Eta(),
1268 >                                                              ele->SCluster()->Eta(),
1269                                                                EffectiveAreaVersion))/ele->Pt()
1270                                   ,2.5)
1271                               ,0.0);
1272 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p15 + tmpGammaIso_DR0p15To0p2
1272 >  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
1273                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p1To0p2,
1274 <                                                              ele->Eta(),
1274 >                                                              ele->SCluster()->Eta(),
1275                                                                EffectiveAreaVersion))/ele->Pt()
1276                                   ,2.5)
1277                               ,0.0);
1278 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p25 + tmpGammaIso_DR0p25To0p3
1278 >  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
1279                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p2To0p3,
1280 <                                                              ele->Eta()
1280 >                                                              ele->SCluster()->Eta()
1281                                                                ,EffectiveAreaVersion))/ele->Pt()
1282                                   ,2.5)
1283                               ,0.0);
1284    fGammaIso_DR0p3To0p4 = max(min((tmpGammaIso_DR0p3To0p4
1285                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p3To0p4,
1286 <                                                              ele->Eta(),
1286 >                                                              ele->SCluster()->Eta(),
1287                                                                EffectiveAreaVersion))/ele->Pt()
1288                                   ,2.5)
1289                               ,0.0);
1290    fGammaIso_DR0p4To0p5 = max(min((tmpGammaIso_DR0p4To0p5
1291                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p4To0p5,
1292 <                                                              ele->Eta(),
1292 >                                                              ele->SCluster()->Eta(),
1293                                                                EffectiveAreaVersion))/ele->Pt()
1294                                   ,2.5)
1295                               ,0.0);
1296  
1297  
1298 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p05 + tmpNeutralHadronIso_DR0p05To0p1
1298 >  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
1299                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
1300 <                                                                 ele->Eta(),EffectiveAreaVersion))/ele->Pt()
1300 >                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1301                                           , 2.5)
1302                                       , 0.0);
1303 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p15 + tmpNeutralHadronIso_DR0p15To0p2
1303 >  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
1304                                              -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
1305 <                                                                   ele->Eta(),EffectiveAreaVersion))/ele->Pt()
1305 >                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1306                                             , 2.5)
1307                                         , 0.0);
1308 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p25 + tmpNeutralHadronIso_DR0p25To0p3
1308 >  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
1309                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
1310 <                                                                 ele->Eta(),EffectiveAreaVersion))/ele->Pt()
1310 >                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1311                                           , 2.5)
1312                                       , 0.0);
1313    fNeutralHadronIso_DR0p3To0p4 = max(min((tmpNeutralHadronIso_DR0p3To0p4
1314                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
1315 <                                                                 ele->Eta(), EffectiveAreaVersion))/ele->Pt()
1315 >                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1316                                           , 2.5)
1317                                       , 0.0);
1318    fNeutralHadronIso_DR0p4To0p5 = max(min((tmpNeutralHadronIso_DR0p4To0p5
1319                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p4To0p5,
1320 <                                                                 ele->Eta(), EffectiveAreaVersion))/ele->Pt()
1320 >                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1321                                           , 2.5)
1322                                       , 0.0);
1323  
1324    double mvaval = eleIsoMVA->MVAValue_IsoRings( ele->Pt(),
1325 <                                             ele->Eta(),
1326 <                                             fChargedIso_DR0p0To0p1,
1327 <                                             fChargedIso_DR0p1To0p2,
1328 <                                             fChargedIso_DR0p2To0p3,
1329 <                                             fChargedIso_DR0p3To0p4,
1330 <                                             fChargedIso_DR0p4To0p5,
1331 <                                             fGammaIso_DR0p0To0p1,
1332 <                                             fGammaIso_DR0p1To0p2,
1333 <                                             fGammaIso_DR0p2To0p3,
1334 <                                             fGammaIso_DR0p3To0p4,
1335 <                                             fGammaIso_DR0p4To0p5,
1336 <                                             fNeutralHadronIso_DR0p0To0p1,
1337 <                                             fNeutralHadronIso_DR0p1To0p2,
1338 <                                             fNeutralHadronIso_DR0p2To0p3,
1339 <                                             fNeutralHadronIso_DR0p3To0p4,
1340 <                                             fNeutralHadronIso_DR0p4To0p5,
1341 <                                             ctrl.debug);
1325 >                                                ele->SCluster()->Eta(),
1326 >                                                fChargedIso_DR0p0To0p1,
1327 >                                                fChargedIso_DR0p1To0p2,
1328 >                                                fChargedIso_DR0p2To0p3,
1329 >                                                fChargedIso_DR0p3To0p4,
1330 >                                                fChargedIso_DR0p4To0p5,
1331 >                                                fGammaIso_DR0p0To0p1,
1332 >                                                fGammaIso_DR0p1To0p2,
1333 >                                                fGammaIso_DR0p2To0p3,
1334 >                                                fGammaIso_DR0p3To0p4,
1335 >                                                fGammaIso_DR0p4To0p5,
1336 >                                                fNeutralHadronIso_DR0p0To0p1,
1337 >                                                fNeutralHadronIso_DR0p1To0p2,
1338 >                                                fNeutralHadronIso_DR0p2To0p3,
1339 >                                                fNeutralHadronIso_DR0p3To0p4,
1340 >                                                fNeutralHadronIso_DR0p4To0p5,
1341 >                                                ctrl.debug);
1342  
1343    SelectionStatus status;
1344    bool pass = false;
# Line 827 | Line 1357 | SelectionStatus electronIsoMVASelection(
1357    if (subdet == 0 && ptBin == 1) MVABin = 3;
1358    if (subdet == 1 && ptBin == 1) MVABin = 4;
1359    if (subdet == 2 && ptBin == 1) MVABin = 5;
830
831  if( MVABin == 0 && mvaval > ELECTRON_ISOMVA_CUT_BIN0 ) pass = true;
832  if( MVABin == 1 && mvaval > ELECTRON_ISOMVA_CUT_BIN1 ) pass = true;
833  if( MVABin == 2 && mvaval > ELECTRON_ISOMVA_CUT_BIN2 ) pass = true;
834  if( MVABin == 3 && mvaval > ELECTRON_ISOMVA_CUT_BIN3 ) pass = true;
835  if( MVABin == 4 && mvaval > ELECTRON_ISOMVA_CUT_BIN4 ) pass = true;
836  if( MVABin == 5 && mvaval > ELECTRON_ISOMVA_CUT_BIN5 ) pass = true;
1360  
1361 <  if( pass ) {
1362 <    status.orStatus(SelectionStatus::LOOSEISO);
1363 <    status.orStatus(SelectionStatus::TIGHTISO);
1364 <  }
1361 >  pass = false;
1362 >  if( MVABin == 0 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN0 ) pass = true;
1363 >  if( MVABin == 1 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN1 ) pass = true;
1364 >  if( MVABin == 2 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN2 ) pass = true;
1365 >  if( MVABin == 3 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN3 ) pass = true;
1366 >  if( MVABin == 4 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN4 ) pass = true;
1367 >  if( MVABin == 5 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN5 ) pass = true;
1368 >  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
1369 >
1370 >  pass = false;
1371 >  if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
1372 >  if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
1373 >  if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
1374 >  if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
1375 >  if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
1376 >  if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
1377 >  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
1378 >
1379    if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1380    return status;
1381 <
1381 >  
1382   }
1383  
1384  
# Line 858 | Line 1395 | void initElectronIsoMVA() {
1395                          mithep::ElectronIDMVA::kIsoRingsV0,
1396                          kTRUE, weightFiles);
1397   }
1398 +
1399 +
1400 +
1401 + //--------------------------------------------------------------------------------------------------
1402 + float electronPFIso04(ControlFlags &ctrl,
1403 +                                const mithep::Electron * ele,
1404 +                                const mithep::Vertex & vtx,
1405 +                                const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1406 +                                const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1407 +                                mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1408 +                                vector<const mithep::Muon*> muonsToVeto,
1409 +                                vector<const mithep::Electron*> electronsToVeto)
1410 + //--------------------------------------------------------------------------------------------------
1411 + {
1412 +
1413 +  if( ctrl.debug ) {
1414 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1415 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1416 +      const mithep::Muon * vmu = muonsToVeto[i];
1417 +      cout << "\tpt: " << vmu->Pt()
1418 +           << "\teta: " << vmu->Eta()
1419 +           << "\tphi: " << vmu->Phi()
1420 +           << endl;
1421 +    }
1422 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1423 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1424 +      const mithep::Electron * vel = electronsToVeto[i];
1425 +      cout << "\tpt: " << vel->Pt()
1426 +           << "\teta: " << vel->Eta()
1427 +           << "\tphi: " << vel->Phi()
1428 +           << "\ttrk: " << vel->TrackerTrk()
1429 +           << endl;
1430 +    }
1431 +  }
1432 +
1433 +
1434 +  //
1435 +  // final iso
1436 +  //
1437 +  Double_t fChargedIso = 0.0;
1438 +  Double_t fGammaIso = 0.0;
1439 +  Double_t fNeutralHadronIso = 0.0;
1440 +
1441 +
1442 +  //
1443 +  //Loop over PF Candidates
1444 +  //
1445 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1446 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1447 +    Double_t deta = (ele->Eta() - pf->Eta());
1448 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1449 +    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1450 +    if (dr >= 0.4) continue;
1451 +    if(ctrl.debug) {
1452 +      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1453 +      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1454 +      cout << endl;
1455 +    }
1456 +
1457 +
1458 +    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1459 +         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1460 +    
1461 +
1462 +    //
1463 +    // Lepton Footprint Removal
1464 +    //
1465 +    Bool_t IsLeptonFootprint = kFALSE;
1466 +    if (dr < 1.0) {
1467 +
1468 +      //
1469 +      // Check for electrons
1470 +      //
1471 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1472 +        const mithep::Electron *tmpele = electronsToVeto[q];
1473 +        // 4l electron
1474 +        if( pf->HasTrackerTrk()  ) {
1475 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1476 +            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1477 +            IsLeptonFootprint = kTRUE;
1478 +          }
1479 +        }
1480 +        if( pf->HasGsfTrk()  ) {
1481 +          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1482 +            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1483 +            IsLeptonFootprint = kTRUE;
1484 +          }
1485 +        }
1486 +        // PF charged
1487 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1488 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1489 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1490 +          IsLeptonFootprint = kTRUE;
1491 +        }
1492 +        // PF gamma
1493 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1494 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1495 +          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1496 +          IsLeptonFootprint = kTRUE;
1497 +        }
1498 +      } // loop over electrons
1499 +
1500 +
1501 +      //
1502 +      // Check for muons
1503 +      //
1504 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1505 +        const mithep::Muon *tmpmu = muonsToVeto[q];
1506 +        // 4l muon
1507 +        if( pf->HasTrackerTrk() ) {
1508 +          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1509 +            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1510 +            IsLeptonFootprint = kTRUE;
1511 +          }
1512 +        }
1513 +        // PF charged
1514 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1515 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1516 +          IsLeptonFootprint = kTRUE;
1517 +        }
1518 +      } // loop over muons
1519 +
1520 +
1521 +    if (IsLeptonFootprint)
1522 +      continue;
1523 +
1524 +    //
1525 +    // Charged Iso
1526 +    //
1527 +    if (pf->Charge() != 0 ) {
1528 +
1529 +      if( pf->HasTrackerTrk() )
1530 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1531 +      if( pf->HasGsfTrk() )
1532 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1533 +
1534 +      // Veto any PFmuon, or PFEle
1535 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1536 +
1537 +      // Footprint Veto
1538 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1539 +
1540 +      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1541 +                           << "\ttype: " << pf->PFType()
1542 +                           << "\ttrk: " << pf->TrackerTrk() << endl;
1543 +
1544 +      fChargedIso += pf->Pt();
1545 +    }
1546 +
1547 +    //
1548 +    // Gamma Iso
1549 +    //
1550 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1551 +
1552 +      if (fabs(ele->SCluster()->Eta()) > 1.479) {
1553 +        if (mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta()) < 0.08) continue;
1554 +      }
1555 +      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1556 +                           << dr << endl;
1557 +      if( pf->Pt() > 0.5 )
1558 +        fGammaIso += pf->Pt();
1559 +    }
1560 +
1561 +    //
1562 +    // Neutral Iso
1563 +    //
1564 +    else {
1565 +      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1566 +                           << dr << endl;
1567 +      if( pf->Pt() > 0.5 )
1568 +        fNeutralHadronIso += pf->Pt();
1569 +    }
1570 +
1571 +    }
1572 +
1573 +  }
1574 +
1575 +  double rho = 0;
1576 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1577 + //     rho = fPUEnergyDensity->At(0)->Rho();
1578 +  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
1579 +    rho = fPUEnergyDensity->At(0)->RhoLowEta();
1580 +
1581 +  // WARNING!!!!  
1582 +  // hardcode for sync ...
1583 +  EffectiveAreaVersion = eleT.kEleEAData2011;
1584 +  // WARNING!!!!  
1585 +
1586 +
1587 +  double pfIso = fChargedIso +
1588 +    max(0.0,fGammaIso -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
1589 +                                                ele->Eta(),EffectiveAreaVersion)) +
1590 +    max(0.0,fNeutralHadronIso -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
1591 +                                                        ele->Eta(),EffectiveAreaVersion)) ;
1592 +
1593 +  gChargedIso = fChargedIso;
1594 +  gGammaIso = fGammaIso;
1595 +  gNeutralIso = fNeutralHadronIso;  
1596 +
1597 +  return pfIso;
1598 + }
1599 +
1600 + //--------------------------------------------------------------------------------------------------
1601 + // hacked version
1602 + float electronPFIso04(ControlFlags &ctrl,
1603 +                      const mithep::Electron * ele,
1604 +                      const mithep::Vertex & vtx,
1605 +                      const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1606 +                      float rho,
1607 +                      mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1608 +                      vector<const mithep::Muon*> muonsToVeto,
1609 +                      vector<const mithep::Electron*> electronsToVeto)
1610 + //--------------------------------------------------------------------------------------------------
1611 + {
1612 +
1613 +  if( ctrl.debug ) {
1614 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1615 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1616 +      const mithep::Muon * vmu = muonsToVeto[i];
1617 +      cout << "\tpt: " << vmu->Pt()
1618 +           << "\teta: " << vmu->Eta()
1619 +           << "\tphi: " << vmu->Phi()
1620 +           << endl;
1621 +    }
1622 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1623 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1624 +      const mithep::Electron * vel = electronsToVeto[i];
1625 +      cout << "\tpt: " << vel->Pt()
1626 +           << "\teta: " << vel->Eta()
1627 +           << "\tphi: " << vel->Phi()
1628 +           << "\ttrk: " << vel->TrackerTrk()
1629 +           << endl;
1630 +    }
1631 +  }
1632 +
1633 +
1634 +  //
1635 +  // final iso
1636 +  //
1637 +  Double_t fChargedIso = 0.0;
1638 +  Double_t fGammaIso = 0.0;
1639 +  Double_t fNeutralHadronIso = 0.0;
1640 +
1641 +
1642 +  //
1643 +  //Loop over PF Candidates
1644 +  //
1645 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1646 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1647 +    Double_t deta = (ele->Eta() - pf->Eta());
1648 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1649 +    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1650 +    if (dr >= 0.4) continue;
1651 +    if(ctrl.debug) {
1652 +      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1653 +      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1654 +      cout << endl;
1655 +    }
1656 +
1657 +
1658 +    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1659 +         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1660 +    
1661 +
1662 +    //
1663 +    // Lepton Footprint Removal
1664 +    //
1665 +    Bool_t IsLeptonFootprint = kFALSE;
1666 +    if (dr < 1.0) {
1667 +
1668 +      //
1669 +      // Check for electrons
1670 +      //
1671 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1672 +        const mithep::Electron *tmpele = electronsToVeto[q];
1673 +        // 4l electron
1674 +        if( pf->HasTrackerTrk()  ) {
1675 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1676 +            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1677 +            IsLeptonFootprint = kTRUE;
1678 +          }
1679 +        }
1680 +        if( pf->HasGsfTrk()  ) {
1681 +          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1682 +            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1683 +            IsLeptonFootprint = kTRUE;
1684 +          }
1685 +        }
1686 +        // PF charged
1687 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1688 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1689 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1690 +          IsLeptonFootprint = kTRUE;
1691 +        }
1692 +        // PF gamma
1693 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1694 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1695 +          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1696 +          IsLeptonFootprint = kTRUE;
1697 +        }
1698 +      } // loop over electrons
1699 +
1700 +      /* KH - comment for sync            
1701 +      //
1702 +      // Check for muons
1703 +      //
1704 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1705 +        const mithep::Muon *tmpmu = muonsToVeto[q];
1706 +        // 4l muon
1707 +        if( pf->HasTrackerTrk() ) {
1708 +          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1709 +            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1710 +            IsLeptonFootprint = kTRUE;
1711 +          }
1712 +        }
1713 +        // PF charged
1714 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1715 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1716 +          IsLeptonFootprint = kTRUE;
1717 +        }
1718 +      } // loop over muons
1719 +      */
1720 +
1721 +    if (IsLeptonFootprint)
1722 +      continue;
1723 +
1724 +    //
1725 +    // Charged Iso
1726 +    //
1727 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1728 +
1729 +      if( pf->HasTrackerTrk() )
1730 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1731 +      if( pf->HasGsfTrk() )
1732 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1733 +
1734 +      // Veto any PFmuon, or PFEle
1735 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1736 +
1737 +      // Footprint Veto
1738 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1739 +
1740 +      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1741 +                           << "\ttype: " << pf->PFType()
1742 +                           << "\ttrk: " << pf->TrackerTrk() << endl;
1743 +
1744 +      fChargedIso += pf->Pt();
1745 +    }
1746 +
1747 +    //
1748 +    // Gamma Iso
1749 +    //
1750 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1751 +
1752 +      if (fabs(ele->SCluster()->Eta()) > 1.479) {
1753 +        if (mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta()) < 0.08) continue;
1754 +      }
1755 +      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1756 +                           << dr << endl;
1757 +      fGammaIso += pf->Pt();
1758 +    }
1759 +
1760 +    //
1761 +    // Neutral Iso
1762 +    //
1763 +    else {
1764 +      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1765 +                           << dr << endl;
1766 +      // KH, add to sync
1767 +      if( pf->Pt() > 0.5 )
1768 +        fNeutralHadronIso += pf->Pt();
1769 +    }
1770 +
1771 +    }
1772 +
1773 +  }
1774 +
1775 + //   double rho = 0;
1776 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1777 + //     rho = fPUEnergyDensity->At(0)->Rho();
1778 +
1779 +  // WARNING!!!!  
1780 +  // hardcode for sync ...
1781 +  EffectiveAreaVersion = eleT.kEleEAData2011;
1782 +  // WARNING!!!!  
1783 +
1784 +
1785 +  double pfIso = fChargedIso +
1786 +    max(0.0,fGammaIso -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
1787 +                                                ele->Eta(),EffectiveAreaVersion)) +
1788 +    max(0.0,fNeutralHadronIso -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
1789 +                                                        ele->Eta(),EffectiveAreaVersion)) ;
1790 +  return pfIso;
1791 + }
1792 +
1793 +
1794 + //--------------------------------------------------------------------------------------------------
1795 + SelectionStatus electronReferenceIsoSelection(ControlFlags &ctrl,
1796 +                                              const mithep::Electron * ele,
1797 +                                              const mithep::Vertex & vtx,
1798 +                                              const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1799 +                                              const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1800 +                                              mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1801 +                                              vector<const mithep::Muon*> muonsToVeto,
1802 +                                              vector<const mithep::Electron*> electronsToVeto)
1803 + //--------------------------------------------------------------------------------------------------
1804 + {
1805 +
1806 +  SelectionStatus status;
1807 +
1808 +  double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, fPUEnergyDensity,
1809 +                                  EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1810 +  cout << "--------------> setting electron isoPF04 to " << pfIso << endl;
1811 +  status.isoPF04 = pfIso;
1812 +  status.chisoPF04 = gChargedIso;
1813 +  status.gaisoPF04 = gGammaIso;
1814 +  status.neisoPF04 = gNeutralIso;
1815 +
1816 +  bool pass = false;
1817 +  if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
1818 +
1819 +  if( pass ) {
1820 +    status.orStatus(SelectionStatus::LOOSEISO);
1821 +    status.orStatus(SelectionStatus::TIGHTISO);
1822 +  }
1823 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1824 +  return status;
1825 +
1826 + }
1827 +
1828 +
1829 + //--------------------------------------------------------------------------------------------------
1830 + // hacked version
1831 + SelectionStatus electronReferenceIsoSelection(ControlFlags &ctrl,
1832 +                                              const mithep::Electron * ele,
1833 +                                              const mithep::Vertex & vtx,
1834 +                                              const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1835 +                                              float rho,
1836 +                                              mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1837 +                                              vector<const mithep::Muon*> muonsToVeto,
1838 +                                              vector<const mithep::Electron*> electronsToVeto)
1839 + //--------------------------------------------------------------------------------------------------
1840 + {
1841 +
1842 +  SelectionStatus status;
1843 +
1844 +  double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, rho,
1845 +                                  EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1846 +  bool pass = false;
1847 +  if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
1848 +
1849 +  if( pass ) {
1850 +    status.orStatus(SelectionStatus::LOOSEISO);
1851 +    status.orStatus(SelectionStatus::TIGHTISO);
1852 +  }
1853 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1854 +  return status;
1855 +
1856 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines