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.10 by khahn, Sat May 5 13:09:05 2012 UTC vs.
Revision 1.20 by khahn, Mon May 14 18:01:02 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 + extern vector<bool> PFnoPUflag;
25 +
26   //--------------------------------------------------------------------------------------------------
27   Float_t computePFMuonIso(const mithep::Muon *muon,
28                           const mithep::Vertex & vtx,
# Line 157 | Line 164 | bool pairwiseIsoSelection( ControlFlags
164  
165            float isoEcal_corr_j = lepvec[j].isoEcal - (effArea_ecal_j*rho);
166            float isoHcal_corr_j = lepvec[j].isoHcal - (effArea_hcal_j*rho);
167 <          float RIso_i = (lepvec[i].isoTrk+isoEcal_corr_i+isoHcal_corr_i)/lepvec[i].vec->Pt();
168 <          float RIso_j = (lepvec[j].isoTrk+isoEcal_corr_j+isoHcal_corr_j)/lepvec[j].vec->Pt();      
167 >          float RIso_i = (lepvec[i].isoTrk+isoEcal_corr_i+isoHcal_corr_i)/lepvec[i].vec.Pt();
168 >          float RIso_j = (lepvec[j].isoTrk+isoEcal_corr_j+isoHcal_corr_j)/lepvec[j].vec.Pt();      
169            float comboIso = RIso_i + RIso_j;
170            
171            if( comboIso > 0.35 ) {
# Line 337 | Line 344 | SelectionStatus muonIsoMVASelection(Cont
344      Double_t deta = (mu->Eta() - pf->Eta());
345      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
346      Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
347 <    if (dr > 1.0) continue;
347 >    if (dr > 0.5) continue;
348 >    if (dr < 0.01) continue;
349  
350      if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
351  
# Line 362 | Line 370 | SelectionStatus muonIsoMVASelection(Cont
370              IsLeptonFootprint = kTRUE;
371          }
372          // PF charged
373 <        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
373 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
374              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
375            IsLeptonFootprint = kTRUE;
376          // PF gamma
377 <        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
377 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
378              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
379            IsLeptonFootprint = kTRUE;
380        } // loop over electrons
381        
382 +      /*
383        //
384        // Check for muons
385        //
# Line 385 | Line 394 | SelectionStatus muonIsoMVASelection(Cont
394          if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
395            IsLeptonFootprint = kTRUE;
396        } // loop over muons
397 <
397 >      */
398  
399      if (IsLeptonFootprint)
400        continue;
# Line 398 | Line 407 | SelectionStatus muonIsoMVASelection(Cont
407        if( dr < 0.01 ) continue; // only for muon iso mva?
408        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
409  
410 <      if( pf->HasTrackerTrk() ) {
411 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
412 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
413 <                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
414 <                              << dr << endl;
415 <      }
416 <      if( pf->HasGsfTrk() ) {
408 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
409 <        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
410 <                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
411 <                              << dr << endl;
412 <      }
410 > //       if( pf->HasTrackerTrk() ) {
411 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
412 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
413 > //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
414 > //                            << dr << endl;
415 > //       }
416 >
417  
418        // Footprint Veto
419        if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
# Line 448 | Line 452 | SelectionStatus muonIsoMVASelection(Cont
452  
453    }
454  
455 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
456 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
457 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
458 <  fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
459 <  fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
455 >  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
456 >  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
457 >  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
458 >  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
459 >  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
460  
461  
462    double rho = 0;
463 <  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
464 <    rho = fPUEnergyDensity->At(0)->Rho();
463 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
464 > //     rho = fPUEnergyDensity->At(0)->Rho();
465 >  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
466 >    rho = fPUEnergyDensity->At(0)->RhoLowEta();
467    
468 +  // WARNING!!!!  
469 +  // hardcode for sync ...
470 +  EffectiveAreaVersion = muT.kMuEAData2011;
471 +  // WARNING!!!!  
472 +
473  
474 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
474 >  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
475                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p0To0p1,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
476                                   ,2.5)
477                               ,0.0);
478 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
478 >  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
479                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p1To0p2,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
480                                   ,2.5)
481                               ,0.0);
482 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
482 >  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
483                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p2To0p3,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
484                                   ,2.5)
485                               ,0.0);
486 <  fGammaIso_DR0p3To0p4 = max(min((tmpGammaIso_DR0p3To0p4
486 >  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
487                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p3To0p4,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
488                                   ,2.5)
489                               ,0.0);
490 <  fGammaIso_DR0p4To0p5 = max(min((tmpGammaIso_DR0p4To0p5
490 >  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
491                                    -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p4To0p5,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
492                                   ,2.5)
493                               ,0.0);
494  
495  
496  
497 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
497 >  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
498                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p0To0p1,
499                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
500                                           , 2.5)
501                                       , 0.0);
502 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
502 >  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
503                                              -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p1To0p2,
504                                                                     mu->Eta(),EffectiveAreaVersion))/mu->Pt()
505                                             , 2.5)
506                                         , 0.0);
507 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
507 >  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
508                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p2To0p3,
509                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
510                                           , 2.5)
511                                       , 0.0);
512 <  fNeutralHadronIso_DR0p3To0p4 = max(min((tmpNeutralHadronIso_DR0p3To0p4
512 >  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
513                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p3To0p4,
514                                                                   mu->Eta(), EffectiveAreaVersion))/mu->Pt()
515                                           , 2.5)
516                                       , 0.0);
517 <  fNeutralHadronIso_DR0p4To0p5 = max(min((tmpNeutralHadronIso_DR0p4To0p5
517 >  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
518                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p4To0p5,
519                                                                   mu->Eta(), EffectiveAreaVersion))/mu->Pt()
520                                           , 2.5)
# Line 511 | Line 522 | SelectionStatus muonIsoMVASelection(Cont
522  
523  
524    double mvaval = muIsoMVA->MVAValue_IsoRings( mu->Pt(),
525 <                                             mu->Eta(),
526 <                                             fChargedIso_DR0p0To0p1,
527 <                                             fChargedIso_DR0p1To0p2,
528 <                                             fChargedIso_DR0p2To0p3,
529 <                                             fChargedIso_DR0p3To0p4,
530 <                                             fChargedIso_DR0p4To0p5,
531 <                                             fGammaIso_DR0p0To0p1,
532 <                                             fGammaIso_DR0p1To0p2,
533 <                                             fGammaIso_DR0p2To0p3,
534 <                                             fGammaIso_DR0p3To0p4,
535 <                                             fGammaIso_DR0p4To0p5,
536 <                                             fNeutralHadronIso_DR0p0To0p1,
537 <                                             fNeutralHadronIso_DR0p1To0p2,
538 <                                             fNeutralHadronIso_DR0p2To0p3,
539 <                                             fNeutralHadronIso_DR0p3To0p4,
540 <                                             fNeutralHadronIso_DR0p4To0p5,
541 <                                             ctrl.debug);
525 >                                               mu->Eta(),
526 >                                               mu->IsGlobalMuon(),
527 >                                               mu->IsTrackerMuon(),
528 >                                               fChargedIso_DR0p0To0p1,
529 >                                               fChargedIso_DR0p1To0p2,
530 >                                               fChargedIso_DR0p2To0p3,
531 >                                               fChargedIso_DR0p3To0p4,
532 >                                               fChargedIso_DR0p4To0p5,
533 >                                               fGammaIso_DR0p0To0p1,
534 >                                               fGammaIso_DR0p1To0p2,
535 >                                               fGammaIso_DR0p2To0p3,
536 >                                               fGammaIso_DR0p3To0p4,
537 >                                               fGammaIso_DR0p4To0p5,
538 >                                               fNeutralHadronIso_DR0p0To0p1,
539 >                                               fNeutralHadronIso_DR0p1To0p2,
540 >                                               fNeutralHadronIso_DR0p2To0p3,
541 >                                               fNeutralHadronIso_DR0p3To0p4,
542 >                                               fNeutralHadronIso_DR0p4To0p5,
543 >                                               ctrl.debug);
544  
545    SelectionStatus status;
546    bool pass;
# Line 565 | Line 578 | SelectionStatus muonIsoMVASelection(Cont
578  
579   }
580  
581 +
582 + //--------------------------------------------------------------------------------------------------
583 + SelectionStatus muonIsoMVASelection(ControlFlags &ctrl,
584 +                                    const mithep::Muon * mu,
585 +                                    const mithep::Vertex & vtx,
586 +                                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
587 +                                    float rho,
588 +                                    //const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
589 +                                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
590 +                                    vector<const mithep::Muon*> muonsToVeto,
591 +                                    vector<const mithep::Electron*> electronsToVeto)
592 + //--------------------------------------------------------------------------------------------------
593 + // hacked version
594 + {
595 +
596 +  if( ctrl.debug ) {
597 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
598 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
599 +      const mithep::Muon * vmu = muonsToVeto[i];
600 +      cout << "\tpt: " << vmu->Pt()
601 +           << "\teta: " << vmu->Eta()
602 +           << "\tphi: " << vmu->Phi()
603 +           << endl;
604 +    }
605 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
606 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
607 +      const mithep::Electron * vel = electronsToVeto[i];
608 +      cout << "\tpt: " << vel->Pt()
609 +           << "\teta: " << vel->Eta()
610 +           << "\tphi: " << vel->Phi()
611 +           << endl;
612 +    }
613 +  }
614 +  bool failiso=false;
615 +
616 +  //
617 +  // tmp iso rings
618 +  //
619 +  Double_t tmpChargedIso_DR0p0To0p1  = 0;
620 +  Double_t tmpChargedIso_DR0p1To0p2  = 0;
621 +  Double_t tmpChargedIso_DR0p2To0p3  = 0;
622 +  Double_t tmpChargedIso_DR0p3To0p4  = 0;
623 +  Double_t tmpChargedIso_DR0p4To0p5  = 0;
624 +  Double_t tmpChargedIso_DR0p5To0p7  = 0;
625 +
626 +  Double_t tmpGammaIso_DR0p0To0p1  = 0;
627 +  Double_t tmpGammaIso_DR0p1To0p2  = 0;
628 +  Double_t tmpGammaIso_DR0p2To0p3  = 0;
629 +  Double_t tmpGammaIso_DR0p3To0p4  = 0;
630 +  Double_t tmpGammaIso_DR0p4To0p5  = 0;
631 +  Double_t tmpGammaIso_DR0p5To0p7  = 0;
632 +
633 +  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
634 +  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
635 +  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
636 +  Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
637 +  Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
638 +  Double_t tmpNeutralHadronIso_DR0p5To0p7  = 0;
639 +
640 +        
641 +
642 +  //
643 +  // final rings for the MVA
644 +  //
645 +  Double_t fChargedIso_DR0p0To0p1;
646 +  Double_t fChargedIso_DR0p1To0p2;
647 +  Double_t fChargedIso_DR0p2To0p3;
648 +  Double_t fChargedIso_DR0p3To0p4;
649 +  Double_t fChargedIso_DR0p4To0p5;
650 +  Double_t fChargedIso_DR0p5To0p7;
651 +
652 +  Double_t fGammaIso_DR0p0To0p1;
653 +  Double_t fGammaIso_DR0p1To0p2;
654 +  Double_t fGammaIso_DR0p2To0p3;
655 +  Double_t fGammaIso_DR0p3To0p4;
656 +  Double_t fGammaIso_DR0p4To0p5;
657 +  Double_t fGammaIso_DR0p5To0p7;
658 +
659 +  Double_t fNeutralHadronIso_DR0p0To0p1;
660 +  Double_t fNeutralHadronIso_DR0p1To0p2;
661 +  Double_t fNeutralHadronIso_DR0p2To0p3;
662 +  Double_t fNeutralHadronIso_DR0p3To0p4;
663 +  Double_t fNeutralHadronIso_DR0p4To0p5;
664 +  Double_t fNeutralHadronIso_DR0p5To0p7;
665 +
666 +
667 +  //
668 +  //Loop over PF Candidates
669 +  //
670 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
671 +
672 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
673 +
674 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
675 +
676 +    Double_t deta = (mu->Eta() - pf->Eta());
677 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
678 +    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
679 +    if (dr > 1.0) continue;
680 +
681 +    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
682 +
683 +    //
684 +    // Lepton Footprint Removal
685 +    //
686 +    Bool_t IsLeptonFootprint = kFALSE;
687 +    if (dr < 1.0) {
688 +
689 +      //
690 +      // Check for electrons
691 +      //
692 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
693 +        const mithep::Electron *tmpele = electronsToVeto[q];
694 +        // 4l electron
695 +        if( pf->HasTrackerTrk() ) {
696 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
697 +            IsLeptonFootprint = kTRUE;
698 +        }
699 +        if( pf->HasGsfTrk() ) {
700 +          if( pf->GsfTrk() == tmpele->GsfTrk() )
701 +            IsLeptonFootprint = kTRUE;
702 +        }
703 +        // PF charged
704 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
705 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
706 +          IsLeptonFootprint = kTRUE;
707 +        // PF gamma
708 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
709 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
710 +          IsLeptonFootprint = kTRUE;
711 +      } // loop over electrons
712 +      
713 +      /* KH - commented for sync
714 +      //
715 +      // Check for muons
716 +      //
717 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
718 +        const mithep::Muon *tmpmu = muonsToVeto[q];
719 +        // 4l muon
720 +        if( pf->HasTrackerTrk() ) {
721 +          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
722 +            IsLeptonFootprint = kTRUE;
723 +        }
724 +        // PF charged
725 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
726 +          IsLeptonFootprint = kTRUE;
727 +      } // loop over muons
728 +      */
729 +
730 +    if (IsLeptonFootprint)
731 +      continue;
732 +
733 +    //
734 +    // Charged Iso Rings
735 +    //
736 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
737 +
738 +      if( dr < 0.01 ) continue; // only for muon iso mva?
739 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
740 +
741 + //       if( pf->HasTrackerTrk() ) {
742 + //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
743 + //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
744 + //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
745 + //                            << dr << endl;
746 + //       }
747 + //       if( pf->HasGsfTrk() ) {
748 + //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
749 + //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
750 + //                            << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
751 + //                            << dr << endl;
752 + //       }
753 +
754 +      // Footprint Veto
755 +      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
756 +      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
757 +      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
758 +      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
759 +      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
760 +      if (dr >= 0.5 && dr < 0.7) tmpChargedIso_DR0p5To0p7 += pf->Pt();
761 +    }
762 +
763 +    //
764 +    // Gamma Iso Rings
765 +    //
766 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
767 +      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
768 +      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
769 +      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
770 +      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
771 +      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
772 +      if (dr >= 0.5 && dr < 0.7) tmpGammaIso_DR0p5To0p7 += pf->Pt();
773 +    }
774 +
775 +    //
776 +    // Other Neutral Iso Rings
777 +    //
778 +    else {
779 +      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
780 +      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
781 +      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
782 +      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
783 +      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
784 +      if (dr >= 0.5 && dr < 0.7) tmpNeutralHadronIso_DR0p5To0p7 += pf->Pt();
785 +    }
786 +
787 +    }
788 +
789 +  }
790 +
791 +  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
792 +  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
793 +  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
794 +  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
795 +  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
796 +
797 +
798 + //   double rho = 0;
799 + //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
800 + //     rho = fPUEnergyDensity->At(0)->Rho();
801 + //   if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
802 + //     rho = fPUEnergyDensity->At(0)->RhoLowEta();
803 +  
804 +  // WARNING!!!!  
805 +  // hardcode for sync ...
806 +  EffectiveAreaVersion = muT.kMuEAData2011;
807 +  // WARNING!!!!  
808 +
809 +
810 +  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
811 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p0To0p1,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
812 +                                 ,2.5)
813 +                             ,0.0);
814 +  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
815 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p1To0p2,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
816 +                                 ,2.5)
817 +                             ,0.0);
818 +  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
819 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p2To0p3,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
820 +                                 ,2.5)
821 +                             ,0.0);
822 +  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
823 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p3To0p4,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
824 +                                 ,2.5)
825 +                             ,0.0);
826 +  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
827 +                                  -rho*muT.MuonEffectiveArea(muT.kMuGammaIsoDR0p4To0p5,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
828 +                                 ,2.5)
829 +                             ,0.0);
830 +
831 +
832 +
833 +  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
834 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p0To0p1,
835 +                                                                 mu->Eta(),EffectiveAreaVersion))/mu->Pt()
836 +                                         , 2.5)
837 +                                     , 0.0);
838 +  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
839 +                                            -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p1To0p2,
840 +                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
841 +                                           , 2.5)
842 +                                       , 0.0);
843 +  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
844 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p2To0p3,
845 +                                                                 mu->Eta(),EffectiveAreaVersion))/mu->Pt()
846 +                                         , 2.5)
847 +                                     , 0.0);
848 +  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
849 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p3To0p4,
850 +                                                                 mu->Eta(), EffectiveAreaVersion))/mu->Pt()
851 +                                         , 2.5)
852 +                                     , 0.0);
853 +  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
854 +                                          -rho*muT.MuonEffectiveArea(muT.kMuNeutralHadronIsoDR0p4To0p5,
855 +                                                                 mu->Eta(), EffectiveAreaVersion))/mu->Pt()
856 +                                         , 2.5)
857 +                                     , 0.0);
858 +
859 +
860 +  double mvaval = muIsoMVA->MVAValue_IsoRings( mu->Pt(),
861 +                                               mu->Eta(),
862 +                                               mu->IsGlobalMuon(),
863 +                                               mu->IsTrackerMuon(),
864 +                                               fChargedIso_DR0p0To0p1,
865 +                                               fChargedIso_DR0p1To0p2,
866 +                                               fChargedIso_DR0p2To0p3,
867 +                                               fChargedIso_DR0p3To0p4,
868 +                                               fChargedIso_DR0p4To0p5,
869 +                                               fGammaIso_DR0p0To0p1,
870 +                                               fGammaIso_DR0p1To0p2,
871 +                                               fGammaIso_DR0p2To0p3,
872 +                                               fGammaIso_DR0p3To0p4,
873 +                                               fGammaIso_DR0p4To0p5,
874 +                                               fNeutralHadronIso_DR0p0To0p1,
875 +                                               fNeutralHadronIso_DR0p1To0p2,
876 +                                               fNeutralHadronIso_DR0p2To0p3,
877 +                                               fNeutralHadronIso_DR0p3To0p4,
878 +                                               fNeutralHadronIso_DR0p4To0p5,
879 +                                               ctrl.debug);
880 +
881 +  SelectionStatus status;
882 +  bool pass;
883 +
884 +  pass = false;
885 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
886 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN0)   pass = true;
887 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
888 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN1)  pass = true;
889 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
890 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN2)  pass = true;
891 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
892 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN3)  pass = true;
893 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN4)  pass = true;
894 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN5)  pass = true;
895 +  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
896 +
897 +  /*
898 +  pass = false;
899 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
900 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN0)   pass = true;
901 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
902 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN1)  pass = true;
903 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
904 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN2)  pass = true;
905 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
906 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN3)  pass = true;
907 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN4)  pass = true;
908 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN5)  pass = true;
909 +  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
910 +  */
911 +
912 +  //  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
913 +
914 +  status.isoMVA = mvaval;
915 +
916 +  if(ctrl.debug)  {
917 +    cout << "returning status : " << hex << status.getStatus() << dec << endl;
918 +    cout << "MVAVAL : " << status.isoMVA << endl;
919 +  }
920 +  return status;
921 +
922 + }
923 +
924 +
925   //--------------------------------------------------------------------------------------------------
926   void initMuonIsoMVA() {
927   //--------------------------------------------------------------------------------------------------
# Line 612 | Line 969 | double  muonPFIso04(ControlFlags &ctrl,
969             << endl;
970      }
971    }
615  bool failiso=false;
616
617  //
618  // tmp iso
619  //
620  Double_t tmpChargedIso        = 0;
621  Double_t tmpGammaIso          = 0;
622  Double_t tmpNeutralHadronIso  = 0;
972  
973    //
974    // final iso
975    //
976 <  Double_t fChargedIso;
977 <  Double_t fGammaIso;
978 <  Double_t fNeutralHadronIso;
976 >  Double_t fChargedIso  = 0.0;
977 >  Double_t fGammaIso  = 0.0;
978 >  Double_t fNeutralHadronIso  = 0.0;
979  
980    //
981    //Loop over PF Candidates
# Line 670 | Line 1019 | double  muonPFIso04(ControlFlags &ctrl,
1019              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
1020            IsLeptonFootprint = kTRUE;
1021        } // loop over electrons
1022 <      
1022 >
1023 >      // KH, comment to sync
1024 >      /*
1025        //
1026        // Check for muons
1027        //
# Line 685 | Line 1036 | double  muonPFIso04(ControlFlags &ctrl,
1036          if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
1037            IsLeptonFootprint = kTRUE;
1038        } // loop over muons
1039 <
1039 >      */
1040  
1041      if (IsLeptonFootprint)
1042        continue;
1043  
1044      //
1045 <    // Charged Iso Rings
1045 >    // Charged Iso
1046      //
1047 <    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1047 >    if (pf->Charge() != 0 ) {
1048  
1049 <      if( dr < 0.01 ) continue; // only for muon iso mva?
1049 >      //if( dr < 0.01 ) continue; // only for muon iso mva?
1050        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1051  
1052        if( pf->HasTrackerTrk() ) {
# Line 712 | Line 1063 | double  muonPFIso04(ControlFlags &ctrl,
1063        }
1064  
1065  
1066 <      tmpChargedIso += pf->Pt();
1066 >      fChargedIso += pf->Pt();
1067      }
1068  
1069      //
1070      // Gamma Iso
1071      //
1072      else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1073 <      tmpGammaIso += pf->Pt();
1073 >      // KH, add to sync
1074 >      if( pf->Pt() > 0.5 )
1075 >      fGammaIso += pf->Pt();
1076      }
1077  
1078      //
1079 <    // Other Neutral Iso Rings
1079 >    // Other Neutrals
1080      //
1081      else {
1082 <      tmpNeutralHadronIso += pf->Pt();
1082 >      // KH, add to sync
1083 >      if( pf->Pt() > 0.5 )
1084 >        fNeutralHadronIso += pf->Pt();
1085      }
1086      
1087      }
1088      
1089    }
1090    
736  fChargedIso   = mu->Pt() * min((tmpChargedIso)/mu->Pt(), 2.5);
737  
738
1091    double rho = 0;
1092 <  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1093 <    rho = fPUEnergyDensity->At(0)->Rho();
1092 >  //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1093 >  //     rho = fPUEnergyDensity->At(0)->Rho();
1094 >  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
1095 >    rho = fPUEnergyDensity->At(0)->RhoLowEta();
1096 >
1097 >  // WARNING!!!!  
1098 >  // hardcode for sync ...
1099 >  EffectiveAreaVersion = muT.kMuEAData2011;
1100 >  // WARNING!!!!  
1101 >
1102 >
1103 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
1104 >                                        -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
1105 >                                                                   mu->Eta(),EffectiveAreaVersion)));
1106 >
1107 >  gChargedIso = fChargedIso;
1108 >  gGammaIso = fGammaIso;
1109 >  gNeutralIso = fNeutralHadronIso;  
1110 >  return pfIso;
1111 > }
1112 >
1113 >
1114 > //--------------------------------------------------------------------------------------------------
1115 > // hacked version
1116 > double  muonPFIso04(ControlFlags &ctrl,
1117 >                    const mithep::Muon * mu,
1118 >                    const mithep::Vertex & vtx,
1119 >                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1120 >                    float rho,
1121 >                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
1122 >                    vector<const mithep::Muon*> muonsToVeto,
1123 >                    vector<const mithep::Electron*> electronsToVeto)
1124 > //--------------------------------------------------------------------------------------------------
1125 > {
1126 >
1127 >  extern double gChargedIso;  
1128 >  extern double  gGammaIso;      
1129 >  extern double  gNeutralIso;
1130    
1131 <
1132 <  fGammaIso = mu->Pt()*max(min((tmpGammaIso
1133 <                                -rho*muT.MuonEffectiveArea(muT.kMuGammaIso04,mu->Eta(),EffectiveAreaVersion))/mu->Pt()
1134 <                               ,2.5)
1135 <                           ,0.0);
1136 <  fNeutralHadronIso = mu->Pt()*max(min((tmpNeutralHadronIso
1137 <                                        -rho*muT.MuonEffectiveArea(muT.kMuNeutralIso04,
1138 <                                                                   mu->Eta(),EffectiveAreaVersion))/mu->Pt()
1139 <                                       , 2.5)
1140 <                                   , 0.0);
1131 >  if( ctrl.debug ) {
1132 >    cout << "muonIsoMVASelection :: muons to veto " << endl;
1133 >    for( int i=0; i<muonsToVeto.size(); i++ ) {
1134 >      const mithep::Muon * vmu = muonsToVeto[i];
1135 >      cout << "\tpt: " << vmu->Pt()
1136 >           << "\teta: " << vmu->Eta()
1137 >           << "\tphi: " << vmu->Phi()
1138 >           << endl;
1139 >    }
1140 >    cout << "muonIsoMVASelection :: electrson to veto " << endl;
1141 >    for( int i=0; i<electronsToVeto.size(); i++ ) {
1142 >      const mithep::Electron * vel = electronsToVeto[i];
1143 >      cout << "\tpt: " << vel->Pt()
1144 >           << "\teta: " << vel->Eta()
1145 >           << "\tphi: " << vel->Phi()
1146 >           << endl;
1147 >    }
1148 >  }
1149 >
1150 >  //
1151 >  // final iso
1152 >  //
1153 >  Double_t fChargedIso  = 0.0;
1154 >  Double_t fGammaIso  = 0.0;
1155 >  Double_t fNeutralHadronIso  = 0.0;
1156 >
1157 >  //
1158 >  //Loop over PF Candidates
1159 >  //
1160 >  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1161 >
1162 >    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1163 >    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1164 >
1165 >    Double_t deta = (mu->Eta() - pf->Eta());
1166 >    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
1167 >    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
1168 >    if (dr > 0.4) continue;
1169 >
1170 >    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
1171 >
1172 >    //
1173 >    // Lepton Footprint Removal
1174 >    //
1175 >    Bool_t IsLeptonFootprint = kFALSE;
1176 >    if (dr < 1.0) {
1177 >
1178 >      //
1179 >      // Check for electrons
1180 >      //
1181 >      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1182 >        const mithep::Electron *tmpele = electronsToVeto[q];
1183 >        // 4l electron
1184 >        if( pf->HasTrackerTrk() ) {
1185 >          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
1186 >            IsLeptonFootprint = kTRUE;
1187 >        }
1188 >        if( pf->HasGsfTrk() ) {
1189 >          if( pf->GsfTrk() == tmpele->GsfTrk() )
1190 >            IsLeptonFootprint = kTRUE;
1191 >        }
1192 >        // PF charged
1193 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1194 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
1195 >          IsLeptonFootprint = kTRUE;
1196 >        // PF gamma
1197 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1198 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
1199 >          IsLeptonFootprint = kTRUE;
1200 >      } // loop over electrons
1201 >
1202 >      /* KH - comment for sync      
1203 >      //
1204 >      // Check for muons
1205 >      //
1206 >      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1207 >        const mithep::Muon *tmpmu = muonsToVeto[q];
1208 >        // 4l muon
1209 >        if( pf->HasTrackerTrk() ) {
1210 >          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
1211 >            IsLeptonFootprint = kTRUE;
1212 >        }
1213 >        // PF charged
1214 >        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
1215 >          IsLeptonFootprint = kTRUE;
1216 >      } // loop over muons
1217 >      */
1218 >
1219 >    if (IsLeptonFootprint)
1220 >      continue;
1221  
1222 <  double pfIso = fChargedIso + fGammaIso + fNeutralHadronIso;
1222 >    //
1223 >    // Charged Iso
1224 >    //
1225 >    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1226 >
1227 >      //if( dr < 0.01 ) continue; // only for muon iso mva?
1228 >      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1229 >
1230 >
1231 > //       if( pf->HasTrackerTrk() ) {
1232 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1233 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1234 > //                            << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
1235 > //                            << dr << endl;
1236 > //       }
1237 > //       if( pf->HasGsfTrk() ) {
1238 > //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1239 > //      if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
1240 > //                            << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
1241 > //                            << dr << endl;
1242 > //       }
1243 >
1244 >
1245 >      fChargedIso += pf->Pt();
1246 >    }
1247 >
1248 >    //
1249 >    // Gamma Iso
1250 >    //
1251 >    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1252 >      // KH, add to sync
1253 >      if( pf->Pt() > 0.5 )
1254 >      fGammaIso += pf->Pt();
1255 >    }
1256 >
1257 >    //
1258 >    // Other Neutrals
1259 >    //
1260 >    else {
1261 >      // KH, add to sync
1262 >      if( pf->Pt() > 0.5 )
1263 >        fNeutralHadronIso += pf->Pt();
1264 >    }
1265 >    
1266 >    }
1267 >    
1268 >  }
1269 >  
1270 > //   double rho = 0;
1271 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1272 > //     rho = fPUEnergyDensity->At(0)->Rho();
1273 >
1274 >  // WARNING!!!!  
1275 >  // hardcode for sync ...
1276 >  EffectiveAreaVersion = muT.kMuEAData2011;
1277 >  // WARNING!!!!  
1278 >
1279 >
1280 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
1281 >                                        -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
1282 >                                                                   mu->Eta(),EffectiveAreaVersion)));
1283 >  gChargedIso = fChargedIso;
1284 >  gGammaIso   = fGammaIso;
1285 >  gNeutralIso = fNeutralHadronIso;
1286    
1287    return pfIso;
1288   }
1289  
1290 +
1291   //--------------------------------------------------------------------------------------------------
1292 < SelectionStatus muonIsoReferenceSelection(ControlFlags &ctrl,
1292 > SelectionStatus muonReferenceIsoSelection(ControlFlags &ctrl,
1293                                            const mithep::Muon * mu,
1294                                            const mithep::Vertex & vtx,
1295                                            const mithep::Array<mithep::PFCandidate> * fPFCandidates,
# Line 769 | Line 1301 | SelectionStatus muonIsoReferenceSelectio
1301   {
1302    
1303    SelectionStatus status;
1304 <  
1304 >
1305    double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, fPUEnergyDensity,
1306                                EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1307 +  //  cout << "--------------> setting muon isoPF04 to" << pfIso << endl;
1308 +  status.isoPF04 = pfIso;
1309 +  status.chisoPF04 = gChargedIso;
1310 +  status.gaisoPF04 = gGammaIso;
1311 +  status.neisoPF04 = gNeutralIso;
1312 +
1313 +  bool pass = false;
1314 +  if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
1315 +  
1316 +  if( pass ) {
1317 +    status.orStatus(SelectionStatus::LOOSEISO);
1318 +    status.orStatus(SelectionStatus::TIGHTISO);
1319 +  }
1320 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1321 +  return status;
1322 +  
1323 + }
1324 +
1325 +
1326 + //--------------------------------------------------------------------------------------------------
1327 + // hacked version
1328 + SelectionStatus muonReferenceIsoSelection(ControlFlags &ctrl,
1329 +                                          const mithep::Muon * mu,
1330 +                                          const mithep::Vertex & vtx,
1331 +                                          const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1332 +                                          float rho,
1333 +                                          mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
1334 +                                          vector<const mithep::Muon*> muonsToVeto,
1335 +                                          vector<const mithep::Electron*> electronsToVeto)
1336 + //--------------------------------------------------------------------------------------------------
1337 + {
1338 +  
1339 +  SelectionStatus status;
1340 +  
1341 +  double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, rho,
1342 +                              EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1343 +
1344 +  status.isoPF04 = pfIso;
1345 +  status.chisoPF04 = gChargedIso;
1346 +  status.gaisoPF04 = gGammaIso;
1347 +  status.neisoPF04 = gNeutralIso;
1348 +
1349    bool pass = false;
1350    if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
1351    
# Line 872 | Line 1446 | SelectionStatus electronIsoMVASelection(
1446    //Loop over PF Candidates
1447    //
1448    for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1449 +
1450 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1451 +
1452      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1453      Double_t deta = (ele->Eta() - pf->Eta());
1454      Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1455      Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1456 <    if (dr >= 0.5) continue;
1456 >    if (dr > 0.5) continue;
1457      if(ctrl.debug) {
1458        cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1459        if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
# Line 913 | Line 1490 | SelectionStatus electronIsoMVASelection(
1490            }
1491          }
1492          // PF charged
1493 <        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1493 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479
1494              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1495            if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1496            IsLeptonFootprint = kTRUE;
1497          }
1498          // PF gamma
1499 <        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1499 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
1500              && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1501            if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1502            IsLeptonFootprint = kTRUE;
1503          }
1504        } // loop over electrons
1505 <      
1505 >
1506 >      /* KH - comment for sync            
1507        //
1508        // Check for muons
1509        //
# Line 944 | Line 1522 | SelectionStatus electronIsoMVASelection(
1522            IsLeptonFootprint = kTRUE;
1523          }
1524        } // loop over muons
1525 <
1525 >      */
1526  
1527      if (IsLeptonFootprint)
1528        continue;
# Line 954 | Line 1532 | SelectionStatus electronIsoMVASelection(
1532      //
1533      if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1534  
1535 <      if( pf->HasTrackerTrk() )
1536 <        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1537 <      if( pf->HasGsfTrk() )
1538 <        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1535 > //       if( pf->HasGsfTrk() ) {
1536 > //       if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1537 > //       } else if( pf->HasTrackerTrk() ){
1538 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1539 > //       }
1540  
1541        // Veto any PFmuon, or PFEle
1542        if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
# Line 1017 | Line 1596 | SelectionStatus electronIsoMVASelection(
1596  
1597    }
1598  
1599 <  fChargedIso_DR0p0To0p1   = min((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1600 <  fChargedIso_DR0p1To0p2   = min((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1601 <  fChargedIso_DR0p2To0p3   = min((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1602 <  fChargedIso_DR0p3To0p4   = min((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1603 <  fChargedIso_DR0p4To0p5   = min((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1599 >  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1600 >  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1601 >  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1602 >  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1603 >  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1604  
1605    double rho = 0;
1606 <  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1607 <    rho = fPUEnergyDensity->At(0)->Rho();
1606 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1607 > //     rho = fPUEnergyDensity->At(0)->Rho();
1608 >  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
1609 >    rho = fPUEnergyDensity->At(0)->RhoLowEta();
1610 >
1611 >  // WARNING!!!!  
1612 >  // hardcode for sync ...
1613 >  //  EffectiveAreaVersion = eleT.kEleEAData2011;
1614 >  EffectiveAreaVersion = eleT.kEleEAFall11MC;
1615 >  // WARNING!!!!  
1616  
1617    if( ctrl.debug) {
1618      cout << "RHO: " << rho << endl;
# Line 1049 | Line 1636 | SelectionStatus electronIsoMVASelection(
1636           << endl;
1637    }
1638  
1639 <  fGammaIso_DR0p0To0p1 = max(min((tmpGammaIso_DR0p0To0p1
1639 >  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
1640                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p0To0p1,
1641                                                                ele->SCluster()->Eta(),
1642                                                                EffectiveAreaVersion))/ele->Pt()
1643                                   ,2.5)
1644                               ,0.0);
1645 <  fGammaIso_DR0p1To0p2 = max(min((tmpGammaIso_DR0p1To0p2
1645 >  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
1646                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p1To0p2,
1647                                                                ele->SCluster()->Eta(),
1648                                                                EffectiveAreaVersion))/ele->Pt()
1649                                   ,2.5)
1650                               ,0.0);
1651 <  fGammaIso_DR0p2To0p3 = max(min((tmpGammaIso_DR0p2To0p3
1651 >  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
1652                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p2To0p3,
1653                                                                ele->SCluster()->Eta()
1654                                                                ,EffectiveAreaVersion))/ele->Pt()
1655                                   ,2.5)
1656                               ,0.0);
1657 <  fGammaIso_DR0p3To0p4 = max(min((tmpGammaIso_DR0p3To0p4
1657 >  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
1658                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p3To0p4,
1659                                                                ele->SCluster()->Eta(),
1660                                                                EffectiveAreaVersion))/ele->Pt()
1661                                   ,2.5)
1662                               ,0.0);
1663 <  fGammaIso_DR0p4To0p5 = max(min((tmpGammaIso_DR0p4To0p5
1663 >  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
1664                                    -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p4To0p5,
1665                                                                ele->SCluster()->Eta(),
1666                                                                EffectiveAreaVersion))/ele->Pt()
# Line 1081 | Line 1668 | SelectionStatus electronIsoMVASelection(
1668                               ,0.0);
1669  
1670  
1671 <  fNeutralHadronIso_DR0p0To0p1 = max(min((tmpNeutralHadronIso_DR0p0To0p1
1671 >  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
1672                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
1673                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1674                                           , 2.5)
1675                                       , 0.0);
1676 <  fNeutralHadronIso_DR0p1To0p2 = max(min((tmpNeutralHadronIso_DR0p1To0p2
1676 >  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
1677                                              -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
1678                                                                     ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1679                                             , 2.5)
1680                                         , 0.0);
1681 <  fNeutralHadronIso_DR0p2To0p3 = max(min((tmpNeutralHadronIso_DR0p2To0p3
1681 >  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
1682                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
1683                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1684                                           , 2.5)
1685                                       , 0.0);
1686 <  fNeutralHadronIso_DR0p3To0p4 = max(min((tmpNeutralHadronIso_DR0p3To0p4
1686 >  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
1687                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
1688                                                                   ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1689                                           , 2.5)
1690                                       , 0.0);
1691 <  fNeutralHadronIso_DR0p4To0p5 = max(min((tmpNeutralHadronIso_DR0p4To0p5
1691 >  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
1692                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p4To0p5,
1693                                                                   ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
1694                                           , 2.5)
# Line 1153 | Line 1740 | SelectionStatus electronIsoMVASelection(
1740    if( MVABin == 5 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN5 ) pass = true;
1741    if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
1742  
1743 + //   pass = false;
1744 + //   if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
1745 + //   if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
1746 + //   if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
1747 + //   if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
1748 + //   if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
1749 + //   if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
1750 + //   if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
1751 +
1752 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1753 +  return status;
1754 +  
1755 + }
1756 +
1757 +
1758 +
1759 + //--------------------------------------------------------------------------------------------------
1760 + SelectionStatus electronIsoMVASelection(ControlFlags &ctrl,
1761 +                                        const mithep::Electron * ele,
1762 +                                        const mithep::Vertex & vtx,
1763 +                                        const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1764 +                                        float rho,
1765 +                                        //const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1766 +                                        mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1767 +                                        vector<const mithep::Muon*> muonsToVeto,
1768 +                                        vector<const mithep::Electron*> electronsToVeto)
1769 + //--------------------------------------------------------------------------------------------------
1770 + // hacked version
1771 + {
1772 +  if( ctrl.debug ) {
1773 +    cout << "================> hacked ele Iso MVA <======================" << endl;
1774 +  }
1775 +
1776 +  if( ctrl.debug ) {
1777 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1778 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1779 +      const mithep::Muon * vmu = muonsToVeto[i];
1780 +      cout << "\tpt: " << vmu->Pt()
1781 +           << "\teta: " << vmu->Eta()
1782 +           << "\tphi: " << vmu->Phi()
1783 +           << endl;
1784 +    }
1785 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1786 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1787 +      const mithep::Electron * vel = electronsToVeto[i];
1788 +      cout << "\tpt: " << vel->Pt()
1789 +           << "\teta: " << vel->Eta()
1790 +           << "\tphi: " << vel->Phi()
1791 +           << "\ttrk: " << vel->TrackerTrk()
1792 +           << endl;
1793 +    }
1794 +  }
1795 +
1796 +  bool failiso=false;
1797 +
1798 +  //
1799 +  // tmp iso rings
1800 +  //
1801 +  Double_t tmpChargedIso_DR0p0To0p1  = 0;
1802 +  Double_t tmpChargedIso_DR0p1To0p2  = 0;
1803 +  Double_t tmpChargedIso_DR0p2To0p3  = 0;
1804 +  Double_t tmpChargedIso_DR0p3To0p4  = 0;
1805 +  Double_t tmpChargedIso_DR0p4To0p5  = 0;
1806 +
1807 +  Double_t tmpGammaIso_DR0p0To0p1  = 0;
1808 +  Double_t tmpGammaIso_DR0p1To0p2  = 0;
1809 +  Double_t tmpGammaIso_DR0p2To0p3  = 0;
1810 +  Double_t tmpGammaIso_DR0p3To0p4  = 0;
1811 +  Double_t tmpGammaIso_DR0p4To0p5  = 0;
1812 +
1813 +
1814 +  Double_t tmpNeutralHadronIso_DR0p0To0p1  = 0;
1815 +  Double_t tmpNeutralHadronIso_DR0p1To0p2  = 0;
1816 +  Double_t tmpNeutralHadronIso_DR0p2To0p3  = 0;
1817 +  Double_t tmpNeutralHadronIso_DR0p3To0p4  = 0;
1818 +  Double_t tmpNeutralHadronIso_DR0p4To0p5  = 0;
1819 +
1820 +        
1821 +
1822 +  //
1823 +  // final rings for the MVA
1824 +  //
1825 +  Double_t fChargedIso_DR0p0To0p1;
1826 +  Double_t fChargedIso_DR0p1To0p2;
1827 +  Double_t fChargedIso_DR0p2To0p3;
1828 +  Double_t fChargedIso_DR0p3To0p4;
1829 +  Double_t fChargedIso_DR0p4To0p5;
1830 +
1831 +  Double_t fGammaIso_DR0p0To0p1;
1832 +  Double_t fGammaIso_DR0p1To0p2;
1833 +  Double_t fGammaIso_DR0p2To0p3;
1834 +  Double_t fGammaIso_DR0p3To0p4;
1835 +  Double_t fGammaIso_DR0p4To0p5;
1836 +
1837 +  Double_t fNeutralHadronIso_DR0p0To0p1;
1838 +  Double_t fNeutralHadronIso_DR0p1To0p2;
1839 +  Double_t fNeutralHadronIso_DR0p2To0p3;
1840 +  Double_t fNeutralHadronIso_DR0p3To0p4;
1841 +  Double_t fNeutralHadronIso_DR0p4To0p5;
1842 +
1843 +
1844 +  //
1845 +  //Loop over PF Candidates
1846 +  //
1847 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1848 +
1849 +    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
1850 +
1851 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1852 +    Double_t deta = (ele->Eta() - pf->Eta());
1853 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1854 +    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1855 +    if (dr > 1.0) continue;
1856 +
1857 +    if(ctrl.debug) {
1858 +      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1859 +      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1860 +      cout << endl;
1861 +    }
1862 +
1863 +
1864 +    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1865 +         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1866 +    
1867 +
1868 +    //
1869 +    // Lepton Footprint Removal
1870 +    //
1871 +    Bool_t IsLeptonFootprint = kFALSE;
1872 +    if (dr < 1.0) {
1873 +
1874 +
1875 +      //
1876 +      // Check for electrons
1877 +      //
1878 +
1879 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1880 +        const mithep::Electron *tmpele = electronsToVeto[q];
1881 +        double tmpdr = mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta());
1882 +
1883 +        // 4l electron
1884 +        if( pf->HasTrackerTrk()  ) {
1885 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1886 +            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1887 +            IsLeptonFootprint = kTRUE;
1888 +          }
1889 +        }
1890 +        if( pf->HasGsfTrk()  ) {
1891 +          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1892 +            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1893 +            IsLeptonFootprint = kTRUE;
1894 +          }
1895 +        }
1896 +        // PF charged
1897 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) >= 1.479 && tmpdr < 0.015) {
1898 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1899 +          IsLeptonFootprint = kTRUE;
1900 +        }
1901 +        // PF gamma
1902 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) >= 1.479
1903 +            && tmpdr < 0.08) {
1904 +          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1905 +          IsLeptonFootprint = kTRUE;
1906 +        }
1907 +      } // loop over electrons
1908 +
1909 +
1910 +      /* KH - comment for sync            
1911 +      //
1912 +      // Check for muons
1913 +      //
1914 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1915 +        const mithep::Muon *tmpmu = muonsToVeto[q];
1916 +        // 4l muon
1917 +        if( pf->HasTrackerTrk() ) {
1918 +          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1919 +            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1920 +            IsLeptonFootprint = kTRUE;
1921 +          }
1922 +        }
1923 +        // PF charged
1924 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1925 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1926 +          IsLeptonFootprint = kTRUE;
1927 +        }
1928 +      } // loop over muons
1929 +      */
1930 +
1931 +    if (IsLeptonFootprint)
1932 +      continue;
1933 +
1934 +    //
1935 +    // Charged Iso Rings
1936 +    //
1937 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1938 +
1939 + //       if( pf->HasGsfTrk() ) {
1940 + //       if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1941 + //       } else if( pf->HasTrackerTrk() ){
1942 + //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1943 + //       }
1944 +
1945 +      // Veto any PFmuon, or PFEle
1946 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1947 +
1948 +      // Footprint Veto
1949 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1950 +
1951 +      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1952 +                           << "\ttype: " << pf->PFType()
1953 +                           << "\ttrk: " << pf->TrackerTrk() << endl;
1954 +
1955 +      if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
1956 +      if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
1957 +      if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
1958 +      if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
1959 +      if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
1960 +
1961 +    }
1962 +
1963 +    //
1964 +    // Gamma Iso Rings
1965 +    //
1966 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1967 +
1968 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.08) continue;
1969 +
1970 +      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1971 +                           << dr << endl;
1972 +
1973 +      if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
1974 +      if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
1975 +      if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
1976 +      if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
1977 +      if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
1978 +    }
1979 +
1980 +    //
1981 +    // Other Neutral Iso Rings
1982 +    //
1983 +    else {
1984 +      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1985 +                           << dr << endl;
1986 +      if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
1987 +      if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
1988 +      if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
1989 +      if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
1990 +      if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
1991 +    }
1992 +
1993 +    }
1994 +
1995 +  }
1996 +
1997 +  fChargedIso_DR0p0To0p1   = fmin((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1998 +  fChargedIso_DR0p1To0p2   = fmin((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1999 +  fChargedIso_DR0p2To0p3   = fmin((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
2000 +  fChargedIso_DR0p3To0p4   = fmin((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
2001 +  fChargedIso_DR0p4To0p5   = fmin((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
2002 +
2003 +  if(ctrl.debug) {
2004 +    cout << "fChargedIso_DR0p0To0p1 : " << fChargedIso_DR0p0To0p1  << endl;
2005 +    cout << "fChargedIso_DR0p1To0p2 : " << fChargedIso_DR0p1To0p2  << endl;
2006 +    cout << "fChargedIso_DR0p2To0p3 : " << fChargedIso_DR0p2To0p3  << endl;
2007 +    cout << "fChargedIso_DR0p3To0p4 : " << fChargedIso_DR0p3To0p4  << endl;
2008 +    cout << "fChargedIso_DR0p4To0p5 : " << fChargedIso_DR0p4To0p5  << endl;
2009 +  }
2010 +
2011 +
2012 +  //  rho=0;
2013 +  //  double rho = 0;
2014 +  //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
2015 +  //     rho = fPUEnergyDensity->At(0)->Rho();
2016 +  //   if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
2017 +  //     rho = fPUEnergyDensity->At(0)->RhoLowEta();
2018 +  
2019 +  // WARNING!!!!  
2020 +  // hardcode for sync ...
2021 +  EffectiveAreaVersion = eleT.kEleEAData2011;
2022 +  // WARNING!!!!  
2023 +
2024 +  if( ctrl.debug) {
2025 +    cout << "RHO: " << rho << endl;
2026 +    cout << "eta: " << ele->SCluster()->Eta() << endl;
2027 +    cout << "target: " << EffectiveAreaVersion << endl;
2028 +    cout << "effA 0-1: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
2029 +                                                       ele->SCluster()->Eta(),
2030 +                                                       EffectiveAreaVersion)
2031 +         << endl;
2032 +    cout << "effA 1-2: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
2033 +                                                       ele->SCluster()->Eta(),
2034 +                                                       EffectiveAreaVersion)
2035 +         << endl;
2036 +    cout << "effA 2-3: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
2037 +                                                       ele->SCluster()->Eta(),
2038 +                                                       EffectiveAreaVersion)
2039 +         << endl;
2040 +    cout << "effA 3-4: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
2041 +                                                       ele->SCluster()->Eta(),
2042 +                                                       EffectiveAreaVersion)
2043 +         << endl;
2044 +  }
2045 +
2046 +  fGammaIso_DR0p0To0p1 = fmax(fmin((tmpGammaIso_DR0p0To0p1
2047 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p0To0p1,
2048 +                                                              ele->SCluster()->Eta(),
2049 +                                                              EffectiveAreaVersion))/ele->Pt()
2050 +                                 ,2.5)
2051 +                             ,0.0);
2052 +  fGammaIso_DR0p1To0p2 = fmax(fmin((tmpGammaIso_DR0p1To0p2
2053 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p1To0p2,
2054 +                                                              ele->SCluster()->Eta(),
2055 +                                                              EffectiveAreaVersion))/ele->Pt()
2056 +                                 ,2.5)
2057 +                             ,0.0);
2058 +  fGammaIso_DR0p2To0p3 = fmax(fmin((tmpGammaIso_DR0p2To0p3
2059 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p2To0p3,
2060 +                                                              ele->SCluster()->Eta()
2061 +                                                              ,EffectiveAreaVersion))/ele->Pt()
2062 +                                 ,2.5)
2063 +                             ,0.0);
2064 +  fGammaIso_DR0p3To0p4 = fmax(fmin((tmpGammaIso_DR0p3To0p4
2065 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p3To0p4,
2066 +                                                              ele->SCluster()->Eta(),
2067 +                                                              EffectiveAreaVersion))/ele->Pt()
2068 +                                 ,2.5)
2069 +                             ,0.0);
2070 +  fGammaIso_DR0p4To0p5 = fmax(fmin((tmpGammaIso_DR0p4To0p5
2071 +                                  -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIsoDR0p4To0p5,
2072 +                                                              ele->SCluster()->Eta(),
2073 +                                                              EffectiveAreaVersion))/ele->Pt()
2074 +                                 ,2.5)
2075 +                             ,0.0);
2076 +
2077 +
2078 +  if( ctrl.debug) {
2079 +    cout << "fGammaIso_DR0p0To0p1: " << fGammaIso_DR0p0To0p1 << endl;
2080 +    cout << "fGammaIso_DR0p1To0p2: " << fGammaIso_DR0p1To0p2 << endl;
2081 +    cout << "fGammaIso_DR0p2To0p3: " << fGammaIso_DR0p2To0p3 << endl;
2082 +    cout << "fGammaIso_DR0p3To0p4: " << fGammaIso_DR0p3To0p4 << endl;
2083 +    cout << "fGammaIso_DR0p4To0p5: " << fGammaIso_DR0p4To0p5 << endl;
2084 +  }
2085 +
2086 +  fNeutralHadronIso_DR0p0To0p1 = fmax(fmin((tmpNeutralHadronIso_DR0p0To0p1
2087 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
2088 +                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2089 +                                         , 2.5)
2090 +                                     , 0.0);
2091 +  fNeutralHadronIso_DR0p1To0p2 = fmax(fmin((tmpNeutralHadronIso_DR0p1To0p2
2092 +                                            -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
2093 +                                                                   ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2094 +                                           , 2.5)
2095 +                                       , 0.0);
2096 +  fNeutralHadronIso_DR0p2To0p3 = fmax(fmin((tmpNeutralHadronIso_DR0p2To0p3
2097 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
2098 +                                                                 ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
2099 +                                         , 2.5)
2100 +                                     , 0.0);
2101 +  fNeutralHadronIso_DR0p3To0p4 = fmax(fmin((tmpNeutralHadronIso_DR0p3To0p4
2102 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
2103 +                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
2104 +                                         , 2.5)
2105 +                                     , 0.0);
2106 +  fNeutralHadronIso_DR0p4To0p5 = fmax(fmin((tmpNeutralHadronIso_DR0p4To0p5
2107 +                                          -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p4To0p5,
2108 +                                                                 ele->SCluster()->Eta(), EffectiveAreaVersion))/ele->Pt()
2109 +                                         , 2.5)
2110 +                                     , 0.0);
2111 +
2112 +  if( ctrl.debug) {
2113 +    cout << "fNeutralHadronIso_DR0p0To0p1: " << fNeutralHadronIso_DR0p0To0p1 << endl;
2114 +    cout << "fNeutralHadronIso_DR0p1To0p2: " << fNeutralHadronIso_DR0p1To0p2 << endl;
2115 +    cout << "fNeutralHadronIso_DR0p2To0p3: " << fNeutralHadronIso_DR0p2To0p3 << endl;
2116 +    cout << "fNeutralHadronIso_DR0p3To0p4: " << fNeutralHadronIso_DR0p3To0p4 << endl;
2117 +    cout << "fNeutralHadronIso_DR0p4To0p5: " << fNeutralHadronIso_DR0p4To0p5 << endl;
2118 +  }
2119 +
2120 +  double mvaval = eleIsoMVA->MVAValue_IsoRings( ele->Pt(),
2121 +                                                ele->SCluster()->Eta(),
2122 +                                                fChargedIso_DR0p0To0p1,
2123 +                                                fChargedIso_DR0p1To0p2,
2124 +                                                fChargedIso_DR0p2To0p3,
2125 +                                                fChargedIso_DR0p3To0p4,
2126 +                                                fChargedIso_DR0p4To0p5,
2127 +                                                fGammaIso_DR0p0To0p1,
2128 +                                                fGammaIso_DR0p1To0p2,
2129 +                                                fGammaIso_DR0p2To0p3,
2130 +                                                fGammaIso_DR0p3To0p4,
2131 +                                                fGammaIso_DR0p4To0p5,
2132 +                                                fNeutralHadronIso_DR0p0To0p1,
2133 +                                                fNeutralHadronIso_DR0p1To0p2,
2134 +                                                fNeutralHadronIso_DR0p2To0p3,
2135 +                                                fNeutralHadronIso_DR0p3To0p4,
2136 +                                                fNeutralHadronIso_DR0p4To0p5,
2137 +                                                ctrl.debug);
2138 +
2139 +  SelectionStatus status;
2140 +  status.isoMVA = mvaval;
2141 +  bool pass = false;
2142 +
2143 +  Int_t subdet = 0;
2144 +  if (fabs(ele->SCluster()->Eta()) < 0.8) subdet = 0;
2145 +  else if (fabs(ele->SCluster()->Eta()) < 1.479) subdet = 1;
2146 +  else subdet = 2;
2147 +
2148 +  Int_t ptBin = 0;
2149 +  if (ele->Pt() >= 10.0) ptBin = 1;
2150 +  
2151 +  Int_t MVABin = -1;
2152 +  if (subdet == 0 && ptBin == 0) MVABin = 0;
2153 +  if (subdet == 1 && ptBin == 0) MVABin = 1;
2154 +  if (subdet == 2 && ptBin == 0) MVABin = 2;
2155 +  if (subdet == 0 && ptBin == 1) MVABin = 3;
2156 +  if (subdet == 1 && ptBin == 1) MVABin = 4;
2157 +  if (subdet == 2 && ptBin == 1) MVABin = 5;
2158 +
2159    pass = false;
2160 <  if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
2161 <  if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
2162 <  if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
2163 <  if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
2164 <  if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
2165 <  if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
2166 <  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
2160 >  if( MVABin == 0 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN0 ) pass = true;
2161 >  if( MVABin == 1 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN1 ) pass = true;
2162 >  if( MVABin == 2 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN2 ) pass = true;
2163 >  if( MVABin == 3 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN3 ) pass = true;
2164 >  if( MVABin == 4 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN4 ) pass = true;
2165 >  if( MVABin == 5 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN5 ) pass = true;
2166 >  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
2167 >
2168 > //   pass = false;
2169 > //   if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
2170 > //   if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
2171 > //   if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
2172 > //   if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
2173 > //   if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
2174 > //   if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
2175 > //   if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
2176  
2177    if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
2178    return status;
# Line 1216 | Line 2228 | float electronPFIso04(ControlFlags &ctrl
2228      }
2229    }
2230  
1219  bool failiso=false;
1220
1221  //
1222  // tmp iso
1223  //
1224  Double_t tmpChargedIso        = 0;
1225  Double_t tmpGammaIso          = 0;
1226  Double_t tmpNeutralHadronIso  = 0;
2231  
2232    //
2233    // final iso
2234    //
2235 <  Double_t fChargedIso;
2236 <  Double_t fGammaIso;
2237 <  Double_t fNeutralHadronIso;
2235 >  Double_t fChargedIso = 0.0;
2236 >  Double_t fGammaIso = 0.0;
2237 >  Double_t fNeutralHadronIso = 0.0;
2238  
2239  
2240    //
# Line 1290 | Line 2294 | float electronPFIso04(ControlFlags &ctrl
2294            IsLeptonFootprint = kTRUE;
2295          }
2296        } // loop over electrons
2297 <      
2297 >
2298 >
2299        //
2300        // Check for muons
2301        //
# Line 1315 | Line 2320 | float electronPFIso04(ControlFlags &ctrl
2320        continue;
2321  
2322      //
2323 <    // Charged Iso Rings
2323 >    // Charged Iso
2324      //
2325 <    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
2325 >    if (pf->Charge() != 0 ) {
2326  
2327        if( pf->HasTrackerTrk() )
2328          if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
# Line 1334 | Line 2339 | float electronPFIso04(ControlFlags &ctrl
2339                             << "\ttype: " << pf->PFType()
2340                             << "\ttrk: " << pf->TrackerTrk() << endl;
2341  
2342 <      tmpChargedIso += pf->Pt();
2342 >      fChargedIso += pf->Pt();
2343      }
2344  
2345      //
# Line 1347 | Line 2352 | float electronPFIso04(ControlFlags &ctrl
2352        }
2353        if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
2354                             << dr << endl;
2355 <      tmpGammaIso += pf->Pt();
2355 >      // KH, add to sync
2356 >      //      if( pf->Pt() > 0.5 )
2357 >        fGammaIso += pf->Pt();
2358      }
2359  
2360      //
# Line 1356 | Line 2363 | float electronPFIso04(ControlFlags &ctrl
2363      else {
2364        if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
2365                             << dr << endl;
2366 <      tmpNeutralHadronIso += pf->Pt();
2366 >      // KH, add to sync
2367 >      //      if( pf->Pt() > 0.5 )
2368 >        fNeutralHadronIso += pf->Pt();
2369      }
2370  
2371      }
2372  
2373    }
2374  
1366  fChargedIso   = ele->Pt()*min((tmpChargedIso)/ele->Pt(), 2.5);
1367
2375    double rho = 0;
2376 <  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
2377 <    rho = fPUEnergyDensity->At(0)->Rho();
2376 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
2377 > //     rho = fPUEnergyDensity->At(0)->Rho();
2378 >  if (!(isnan(fPUEnergyDensity->At(0)->RhoLowEta()) || isinf(fPUEnergyDensity->At(0)->RhoLowEta())))
2379 >    rho = fPUEnergyDensity->At(0)->RhoLowEta();
2380 >
2381 >  // WARNING!!!!  
2382 >  // hardcode for sync ...
2383 >  EffectiveAreaVersion = eleT.kEleEAData2011;
2384 >  // WARNING!!!!  
2385 >
2386 >
2387 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
2388 >                                        -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaAndNeutralHadronIso04,
2389 >                                                                   ele->Eta(),EffectiveAreaVersion)));
2390 >
2391 >  gChargedIso = fChargedIso;
2392 >  gGammaIso = fGammaIso;
2393 >  gNeutralIso = fNeutralHadronIso;  
2394  
2395 <  if( ctrl.debug) {
2396 <    cout << "RHO: " << rho << endl;
2397 <    cout << "eta: " << ele->SCluster()->Eta() << endl;
2398 <    cout << "target: " << EffectiveAreaVersion << endl;
2399 <    cout << "effA 0-1: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p0To0p1,
2400 <                                                       ele->SCluster()->Eta(),
2401 <                                                       EffectiveAreaVersion)
2402 <         << endl;
2403 <    cout << "effA 1-2: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p1To0p2,
2404 <                                                       ele->SCluster()->Eta(),
2405 <                                                       EffectiveAreaVersion)
2406 <         << endl;
2407 <    cout << "effA 2-3: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p2To0p3,
2408 <                                                       ele->SCluster()->Eta(),
2409 <                                                       EffectiveAreaVersion)
2410 <         << endl;
2411 <    cout << "effA 3-4: " << eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIsoDR0p3To0p4,
2412 <                                                       ele->SCluster()->Eta(),
2413 <                                                       EffectiveAreaVersion)
2414 <         << endl;
2395 >  return pfIso;
2396 > }
2397 >
2398 > //--------------------------------------------------------------------------------------------------
2399 > // hacked version
2400 > float electronPFIso04(ControlFlags &ctrl,
2401 >                      const mithep::Electron * ele,
2402 >                      const mithep::Vertex & vtx,
2403 >                      const mithep::Array<mithep::PFCandidate> * fPFCandidates,
2404 >                      float rho,
2405 >                      mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
2406 >                      vector<const mithep::Muon*> muonsToVeto,
2407 >                      vector<const mithep::Electron*> electronsToVeto)
2408 > //--------------------------------------------------------------------------------------------------
2409 > {
2410 >
2411 >  if( ctrl.debug ) {
2412 >    cout << "electronIsoMVASelection :: muons to veto " << endl;
2413 >    for( int i=0; i<muonsToVeto.size(); i++ ) {
2414 >      const mithep::Muon * vmu = muonsToVeto[i];
2415 >      cout << "\tpt: " << vmu->Pt()
2416 >           << "\teta: " << vmu->Eta()
2417 >           << "\tphi: " << vmu->Phi()
2418 >           << endl;
2419 >    }
2420 >    cout << "electronIsoMVASelection :: electrons to veto " << endl;
2421 >    for( int i=0; i<electronsToVeto.size(); i++ ) {
2422 >      const mithep::Electron * vel = electronsToVeto[i];
2423 >      cout << "\tpt: " << vel->Pt()
2424 >           << "\teta: " << vel->Eta()
2425 >           << "\tphi: " << vel->Phi()
2426 >           << "\ttrk: " << vel->TrackerTrk()
2427 >           << endl;
2428 >    }
2429    }
2430  
1394  fGammaIso = ele->Pt()*max(min((tmpGammaIso
1395                       -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
1396                                                       ele->SCluster()->Eta(),
1397                                                       EffectiveAreaVersion))/ele->Pt()
1398                      ,2.5)
1399                  ,0.0);
1400  fNeutralHadronIso = ele->Pt()*max(min((tmpNeutralHadronIso
1401                               -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
1402                                                               ele->SCluster()->Eta(),EffectiveAreaVersion))/ele->Pt()
1403                              , 2.5)
1404                          , 0.0);
2431  
2432 <  double pfiso = fChargedIso + fGammaIso + fNeutralHadronIso;
2432 >  //
2433 >  // final iso
2434 >  //
2435 >  Double_t fChargedIso = 0.0;
2436 >  Double_t fGammaIso = 0.0;
2437 >  Double_t fNeutralHadronIso = 0.0;
2438 >
2439 >
2440 >  //
2441 >  //Loop over PF Candidates
2442 >  //
2443 >  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
2444 >
2445 >
2446 >    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
2447 >    Double_t deta = (ele->Eta() - pf->Eta());
2448 >    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
2449 >    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
2450 >
2451 >    if (dr > 0.4) continue;
2452 >    if( !(PFnoPUflag[k]) ) continue; // my PF no PU hack
2453 >
2454 >    if(ctrl.debug) {
2455 >      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt() << "\tdR: " << dr;
2456 >      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx)
2457 >                                     << "\ttrk: " << pf->HasTrackerTrk()
2458 >                                     << "\tgsf: " << pf->HasGsfTrk();
2459 >      
2460 >      cout << endl;
2461 >    }
2462 >
2463 >
2464 >    //
2465 >    // sync : I don't think theyre doing this ...
2466 >    //
2467 >    //     if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
2468 >    //   (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) {
2469 >    //       if( ctrl.debug ) cout << "\tskipping, matches to the electron ..."  << endl;
2470 >    //       continue;
2471 >    //     }
2472 >
2473 >
2474 >    //
2475 >    // Lepton Footprint Removal
2476 >    //
2477 >    Bool_t IsLeptonFootprint = kFALSE;
2478 >    if (dr < 1.0) {
2479 >
2480 >      //
2481 >      // Check for electrons
2482 >      //
2483 >      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
2484 >        const mithep::Electron *tmpele = electronsToVeto[q];
2485 >        /*
2486 >        // 4l electron
2487 >        if( pf->HasTrackerTrk()  ) {
2488 >          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
2489 >            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
2490 >            IsLeptonFootprint = kTRUE;
2491 >          }
2492 >        }
2493 >        if( pf->HasGsfTrk()  ) {
2494 >          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
2495 >            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
2496 >            IsLeptonFootprint = kTRUE;
2497 >          }
2498 >        }
2499 >        */
2500 >        // PF charged
2501 >        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
2502 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
2503 >          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
2504 >          IsLeptonFootprint = kTRUE;
2505 >        }
2506 >        // PF gamma
2507 >        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
2508 >            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
2509 >          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
2510 >          IsLeptonFootprint = kTRUE;
2511 >        }
2512 >      } // loop over electrons
2513 >
2514 >      /* KH - comment for sync            
2515 >      //
2516 >      // Check for muons
2517 >      //
2518 >      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
2519 >        const mithep::Muon *tmpmu = muonsToVeto[q];
2520 >        // 4l muon
2521 >        if( pf->HasTrackerTrk() ) {
2522 >          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
2523 >            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
2524 >            IsLeptonFootprint = kTRUE;
2525 >          }
2526 >        }
2527 >        // PF charged
2528 >        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
2529 >          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
2530 >          IsLeptonFootprint = kTRUE;
2531 >        }
2532 >      } // loop over muons
2533 >      */
2534 >
2535 >    if (IsLeptonFootprint)
2536 >      continue;
2537 >
2538 >    //
2539 >    // Charged Iso
2540 >    //
2541 >    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
2542 >
2543 > //       if( pf->HasTrackerTrk() )
2544 > //      if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
2545 > //       if( pf->HasGsfTrk() )
2546 > //      if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
2547 >
2548 >      // Veto any PFmuon, or PFEle
2549 >      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) {
2550 >         cout << "\t skipping, pf is and ele or mu .." <<endl;
2551 >        continue;
2552 >      }
2553  
2554 <  return pfiso;
2554 >      // Footprint Veto
2555 >      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
2556 >
2557 >      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
2558 >                           << "\ttype: " << pf->PFType()
2559 >                           << "\ttrk: " << pf->TrackerTrk() << endl;
2560 >
2561 >      fChargedIso += pf->Pt();
2562 >    }
2563 >
2564 >    //
2565 >    // Gamma Iso
2566 >    //
2567 >    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
2568 >
2569 >      if (fabs(ele->SCluster()->Eta()) > 1.479) {
2570 >        if (mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta()) < 0.08) continue;
2571 >      }
2572 >      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
2573 >                           << dr << endl;
2574 >      // KH, add to sync
2575 >      //      if( pf->Pt() > 0.5 )
2576 >        fGammaIso += pf->Pt();
2577 >    }
2578 >
2579 >    //
2580 >    // Neutral Iso
2581 >    //
2582 >    else {
2583 >      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
2584 >                           << dr << endl;
2585 >      // KH, add to sync
2586 >      //      if( pf->Pt() > 0.5 )
2587 >        fNeutralHadronIso += pf->Pt();
2588 >    }
2589 >
2590 >    }
2591 >
2592 >  }
2593 >
2594 > //   double rho = 0;
2595 > //   if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
2596 > //     rho = fPUEnergyDensity->At(0)->Rho();
2597 >
2598 >  // WARNING!!!!  
2599 >  // hardcode for sync ...
2600 >  EffectiveAreaVersion = eleT.kEleEAData2011;
2601 >  // WARNING!!!!  
2602 >
2603 >
2604 >  double pfIso = fChargedIso + fmax(0.0,(fGammaIso + fNeutralHadronIso
2605 >                                        -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaAndNeutralHadronIso04,
2606 >                                                                   ele->Eta(),EffectiveAreaVersion)));
2607 >
2608 >
2609 >  gChargedIso = fChargedIso;
2610 >  gGammaIso = fGammaIso;
2611 >  gNeutralIso = fNeutralHadronIso;  
2612 >  return pfIso;
2613   }
2614  
2615 +
2616   //--------------------------------------------------------------------------------------------------
2617 < SelectionStatus electronIsoReferenceSelection(ControlFlags &ctrl,
2617 > SelectionStatus electronReferenceIsoSelection(ControlFlags &ctrl,
2618                                                const mithep::Electron * ele,
2619                                                const mithep::Vertex & vtx,
2620                                                const mithep::Array<mithep::PFCandidate> * fPFCandidates,
# Line 1424 | Line 2629 | SelectionStatus electronIsoReferenceSele
2629  
2630    double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, fPUEnergyDensity,
2631                                    EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
2632 +  //  cout << "--------------> setting electron isoPF04 to " << pfIso << endl;
2633 +  status.isoPF04 = pfIso;
2634 +  status.chisoPF04 = gChargedIso;
2635 +  status.gaisoPF04 = gGammaIso;
2636 +  status.neisoPF04 = gNeutralIso;
2637 +
2638 +  bool pass = false;
2639 +  if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
2640 +
2641 +  if( pass ) {
2642 +    status.orStatus(SelectionStatus::LOOSEISO);
2643 +    status.orStatus(SelectionStatus::TIGHTISO);
2644 +  }
2645 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
2646 +  return status;
2647 +
2648 + }
2649 +
2650 +
2651 + //--------------------------------------------------------------------------------------------------
2652 + // hacked version
2653 + SelectionStatus electronReferenceIsoSelection(ControlFlags &ctrl,
2654 +                                              const mithep::Electron * ele,
2655 +                                              const mithep::Vertex & vtx,
2656 +                                              const mithep::Array<mithep::PFCandidate> * fPFCandidates,
2657 +                                              float rho,
2658 +                                              mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
2659 +                                              vector<const mithep::Muon*> muonsToVeto,
2660 +                                              vector<const mithep::Electron*> electronsToVeto)
2661 + //--------------------------------------------------------------------------------------------------
2662 + {
2663 +
2664 +  SelectionStatus status;
2665 +
2666 +  double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, rho,
2667 +                                  EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
2668 +  status.isoPF04 = pfIso;
2669 +  status.chisoPF04 = gChargedIso;
2670 +  status.gaisoPF04 = gGammaIso;
2671 +  status.neisoPF04 = gNeutralIso;
2672    bool pass = false;
2673    if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
2674  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines