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.7 by khahn, Mon Apr 30 21:42:16 2012 UTC vs.
Revision 1.11 by khahn, Sat May 5 21:43:54 2012 UTC

# Line 530 | Line 530 | SelectionStatus muonIsoMVASelection(Cont
530                                               ctrl.debug);
531  
532    SelectionStatus status;
533 <  bool pass = false;
533 >  bool pass;
534  
535 +  pass = false;
536    if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
537 <      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_CUT_BIN0)   pass = true;
537 >      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN0)   pass = true;
538    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
539 <           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_CUT_BIN1)  pass = true;
539 >           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN1)  pass = true;
540    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
541 <           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_CUT_BIN2)  pass = true;
541 >           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN2)  pass = true;
542    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
543 <           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_CUT_BIN3)  pass = true;
544 <  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon()
545 <            && mvaval >= MUON_ISOMVA_CUT_BIN4)
546 <    pass = true;
543 >           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN3)  pass = true;
544 >  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN4)  pass = true;
545 >  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_LOOSE_FORPFID_CUT_BIN5)  pass = true;
546 >  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
547  
548 +  pass = false;
549 +  if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
550 +      && fabs(mu->Eta()) <= 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN0)   pass = true;
551 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
552 +           && fabs(mu->Eta()) <= 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN1)  pass = true;
553 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
554 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN2)  pass = true;
555 +  else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
556 +           && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN3)  pass = true;
557 +  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN4)  pass = true;
558 +  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_ISOMVA_TIGHT_FORPFID_CUT_BIN5)  pass = true;
559 +  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
560  
561 <  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
561 >  //  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
562  
550  if( pass ) {
551    status.orStatus(SelectionStatus::LOOSEISO);
552    status.orStatus(SelectionStatus::TIGHTISO);
553  }
563    if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
564    return status;
565  
# Line 573 | Line 582 | void initMuonIsoMVA() {
582   }
583  
584  
585 + //--------------------------------------------------------------------------------------------------
586 + double  muonPFIso04(ControlFlags &ctrl,
587 +                    const mithep::Muon * mu,
588 +                    const mithep::Vertex & vtx,
589 +                    const mithep::Array<mithep::PFCandidate> * fPFCandidates,
590 +                    const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
591 +                    mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
592 +                    vector<const mithep::Muon*> muonsToVeto,
593 +                    vector<const mithep::Electron*> electronsToVeto)
594 + //--------------------------------------------------------------------------------------------------
595 + {
596 +  
597 +  if( ctrl.debug ) {
598 +    cout << "muonIsoMVASelection :: muons to veto " << endl;
599 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
600 +      const mithep::Muon * vmu = muonsToVeto[i];
601 +      cout << "\tpt: " << vmu->Pt()
602 +           << "\teta: " << vmu->Eta()
603 +           << "\tphi: " << vmu->Phi()
604 +           << endl;
605 +    }
606 +    cout << "muonIsoMVASelection :: electrson to veto " << endl;
607 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
608 +      const mithep::Electron * vel = electronsToVeto[i];
609 +      cout << "\tpt: " << vel->Pt()
610 +           << "\teta: " << vel->Eta()
611 +           << "\tphi: " << vel->Phi()
612 +           << endl;
613 +    }
614 +  }
615 +
616 +  //
617 +  // final iso
618 +  //
619 +  Double_t fChargedIso;
620 +  Double_t fGammaIso;
621 +  Double_t fNeutralHadronIso;
622 +
623 +  //
624 +  //Loop over PF Candidates
625 +  //
626 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
627 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
628 +
629 +    Double_t deta = (mu->Eta() - pf->Eta());
630 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(mu->Phi()),Double_t(pf->Phi()));
631 +    Double_t dr = mithep::MathUtils::DeltaR(mu->Phi(),mu->Eta(), pf->Phi(), pf->Eta());
632 +    if (dr > 0.4) continue;
633 +
634 +    if (pf->HasTrackerTrk() && (pf->TrackerTrk() == mu->TrackerTrk()) ) continue;
635 +
636 +    //
637 +    // Lepton Footprint Removal
638 +    //
639 +    Bool_t IsLeptonFootprint = kFALSE;
640 +    if (dr < 1.0) {
641 +
642 +      //
643 +      // Check for electrons
644 +      //
645 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
646 +        const mithep::Electron *tmpele = electronsToVeto[q];
647 +        // 4l electron
648 +        if( pf->HasTrackerTrk() ) {
649 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() )
650 +            IsLeptonFootprint = kTRUE;
651 +        }
652 +        if( pf->HasGsfTrk() ) {
653 +          if( pf->GsfTrk() == tmpele->GsfTrk() )
654 +            IsLeptonFootprint = kTRUE;
655 +        }
656 +        // PF charged
657 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
658 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015)
659 +          IsLeptonFootprint = kTRUE;
660 +        // PF gamma
661 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
662 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08)
663 +          IsLeptonFootprint = kTRUE;
664 +      } // loop over electrons
665 +      
666 +      //
667 +      // Check for muons
668 +      //
669 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
670 +        const mithep::Muon *tmpmu = muonsToVeto[q];
671 +        // 4l muon
672 +        if( pf->HasTrackerTrk() ) {
673 +          if( pf->TrackerTrk() == tmpmu->TrackerTrk() )
674 +            IsLeptonFootprint = kTRUE;
675 +        }
676 +        // PF charged
677 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01)
678 +          IsLeptonFootprint = kTRUE;
679 +      } // loop over muons
680 +
681 +
682 +    if (IsLeptonFootprint)
683 +      continue;
684 +
685 +    //
686 +    // Charged Iso Rings
687 +    //
688 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
689 +
690 +      if( dr < 0.01 ) continue; // only for muon iso mva?
691 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
692 +
693 +      if( pf->HasTrackerTrk() ) {
694 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
695 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
696 +                              << abs(pf->TrackerTrk()->DzCorrected(vtx)) << " "
697 +                              << dr << endl;
698 +      }
699 +      if( pf->HasGsfTrk() ) {
700 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
701 +        if( ctrl.debug ) cout << "charged:: " << pf->PFType() << " " << pf->Pt() << " "
702 +                              << abs(pf->GsfTrk()->DzCorrected(vtx)) << " "
703 +                              << dr << endl;
704 +      }
705 +
706 +
707 +      fChargedIso += pf->Pt();
708 +    }
709 +
710 +    //
711 +    // Gamma Iso
712 +    //
713 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
714 +      fGammaIso += pf->Pt();
715 +    }
716 +
717 +    //
718 +    // Other Neutral Iso Rings
719 +    //
720 +    else {
721 +      fNeutralHadronIso += pf->Pt();
722 +    }
723 +    
724 +    }
725 +    
726 +  }
727 +  
728 +  double rho = 0;
729 +  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
730 +    rho = fPUEnergyDensity->At(0)->Rho();
731 +
732 +  // WARNING!!!!  
733 +  // hardcode for sync ...
734 +  EffectiveAreaVersion = muT.kMuEAData2011;
735 +  // WARNING!!!!  
736 +
737 +
738 +  double pfIso = fChargedIso + max(0.0,(fGammaIso + fNeutralHadronIso
739 +                                        -rho*muT.MuonEffectiveArea(muT.kMuGammaAndNeutralHadronIso04,
740 +                                                                   mu->Eta(),EffectiveAreaVersion)));
741 +  
742 +  return pfIso;
743 + }
744 +
745 + //--------------------------------------------------------------------------------------------------
746 + SelectionStatus muonReferenceIsoSelection(ControlFlags &ctrl,
747 +                                          const mithep::Muon * mu,
748 +                                          const mithep::Vertex & vtx,
749 +                                          const mithep::Array<mithep::PFCandidate> * fPFCandidates,
750 +                                          const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
751 +                                          mithep::MuonTools::EMuonEffectiveAreaTarget EffectiveAreaVersion,
752 +                                          vector<const mithep::Muon*> muonsToVeto,
753 +                                          vector<const mithep::Electron*> electronsToVeto)
754 + //--------------------------------------------------------------------------------------------------
755 + {
756 +  
757 +  SelectionStatus status;
758 +  
759 +  double pfIso = muonPFIso04( ctrl, mu, vtx, fPFCandidates, fPUEnergyDensity,
760 +                              EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
761 +  bool pass = false;
762 +  if( (pfIso/mu->Pt()) < MUON_REFERENCE_PFISO_CUT ) pass = true;
763 +  
764 +  if( pass ) {
765 +    status.orStatus(SelectionStatus::LOOSEISO);
766 +    status.orStatus(SelectionStatus::TIGHTISO);
767 +  }
768 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
769 +  return status;
770 +  
771 + }
772 +
773 +
774  
775   //--------------------------------------------------------------------------------------------------
776   SelectionStatus electronIsoMVASelection(ControlFlags &ctrl,
# Line 931 | Line 1129 | SelectionStatus electronIsoMVASelection(
1129    if (subdet == 0 && ptBin == 1) MVABin = 3;
1130    if (subdet == 1 && ptBin == 1) MVABin = 4;
1131    if (subdet == 2 && ptBin == 1) MVABin = 5;
934
935  if( MVABin == 0 && mvaval > ELECTRON_ISOMVA_CUT_BIN0 ) pass = true;
936  if( MVABin == 1 && mvaval > ELECTRON_ISOMVA_CUT_BIN1 ) pass = true;
937  if( MVABin == 2 && mvaval > ELECTRON_ISOMVA_CUT_BIN2 ) pass = true;
938  if( MVABin == 3 && mvaval > ELECTRON_ISOMVA_CUT_BIN3 ) pass = true;
939  if( MVABin == 4 && mvaval > ELECTRON_ISOMVA_CUT_BIN4 ) pass = true;
940  if( MVABin == 5 && mvaval > ELECTRON_ISOMVA_CUT_BIN5 ) pass = true;
1132  
1133 <  // pre-selection iso ...
1134 <  pass &= (fChargedIso_DR0p0To0p1 + fChargedIso_DR0p1To0p2 + fChargedIso_DR0p2To0p3 < 0.7);
1133 >  pass = false;
1134 >  if( MVABin == 0 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN0 ) pass = true;
1135 >  if( MVABin == 1 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN1 ) pass = true;
1136 >  if( MVABin == 2 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN2 ) pass = true;
1137 >  if( MVABin == 3 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN3 ) pass = true;
1138 >  if( MVABin == 4 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN4 ) pass = true;
1139 >  if( MVABin == 5 && mvaval > ELECTRON_LOOSE_ISOMVA_CUT_BIN5 ) pass = true;
1140 >  if( pass ) status.orStatus(SelectionStatus::LOOSEISO);
1141 >
1142 >  pass = false;
1143 >  if( MVABin == 0 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN0 ) pass = true;
1144 >  if( MVABin == 1 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN1 ) pass = true;
1145 >  if( MVABin == 2 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN2 ) pass = true;
1146 >  if( MVABin == 3 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN3 ) pass = true;
1147 >  if( MVABin == 4 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN4 ) pass = true;
1148 >  if( MVABin == 5 && mvaval > ELECTRON_TIGHT_ISOMVA_CUT_BIN5 ) pass = true;
1149 >  if( pass ) status.orStatus(SelectionStatus::TIGHTISO);
1150  
945  if( pass ) {
946    status.orStatus(SelectionStatus::LOOSEISO);
947    status.orStatus(SelectionStatus::TIGHTISO);
948  }
1151    if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1152    return status;
1153 <
1153 >  
1154   }
1155  
1156  
# Line 965 | Line 1167 | void initElectronIsoMVA() {
1167                          mithep::ElectronIDMVA::kIsoRingsV0,
1168                          kTRUE, weightFiles);
1169   }
1170 +
1171 +
1172 +
1173 + //--------------------------------------------------------------------------------------------------
1174 + float electronPFIso04(ControlFlags &ctrl,
1175 +                                const mithep::Electron * ele,
1176 +                                const mithep::Vertex & vtx,
1177 +                                const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1178 +                                const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1179 +                                mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1180 +                                vector<const mithep::Muon*> muonsToVeto,
1181 +                                vector<const mithep::Electron*> electronsToVeto)
1182 + //--------------------------------------------------------------------------------------------------
1183 + {
1184 +
1185 +  if( ctrl.debug ) {
1186 +    cout << "electronIsoMVASelection :: muons to veto " << endl;
1187 +    for( int i=0; i<muonsToVeto.size(); i++ ) {
1188 +      const mithep::Muon * vmu = muonsToVeto[i];
1189 +      cout << "\tpt: " << vmu->Pt()
1190 +           << "\teta: " << vmu->Eta()
1191 +           << "\tphi: " << vmu->Phi()
1192 +           << endl;
1193 +    }
1194 +    cout << "electronIsoMVASelection :: electrson to veto " << endl;
1195 +    for( int i=0; i<electronsToVeto.size(); i++ ) {
1196 +      const mithep::Electron * vel = electronsToVeto[i];
1197 +      cout << "\tpt: " << vel->Pt()
1198 +           << "\teta: " << vel->Eta()
1199 +           << "\tphi: " << vel->Phi()
1200 +           << "\ttrk: " << vel->TrackerTrk()
1201 +           << endl;
1202 +    }
1203 +  }
1204 +
1205 +
1206 +  //
1207 +  // final iso
1208 +  //
1209 +  Double_t fChargedIso;
1210 +  Double_t fGammaIso;
1211 +  Double_t fNeutralHadronIso;
1212 +
1213 +
1214 +  //
1215 +  //Loop over PF Candidates
1216 +  //
1217 +  for(int k=0; k<fPFCandidates->GetEntries(); ++k) {
1218 +    const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*fPFCandidates)[k]);
1219 +    Double_t deta = (ele->Eta() - pf->Eta());
1220 +    Double_t dphi = mithep::MathUtils::DeltaPhi(Double_t(ele->Phi()),Double_t(pf->Phi()));
1221 +    Double_t dr = mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta());
1222 +    if (dr >= 0.4) continue;
1223 +    if(ctrl.debug) {
1224 +      cout << "pf :: type: " << pf->PFType() << "\tpt: " << pf->Pt();
1225 +      if( pf->HasTrackerTrk() ) cout << "\tdZ: " << pf->TrackerTrk()->DzCorrected(vtx);
1226 +      cout << endl;
1227 +    }
1228 +
1229 +
1230 +    if ( (pf->HasTrackerTrk() && (pf->TrackerTrk() == ele->TrackerTrk())) ||
1231 +         (pf->HasGsfTrk() && (pf->GsfTrk() == ele->GsfTrk()))) continue;
1232 +    
1233 +
1234 +    //
1235 +    // Lepton Footprint Removal
1236 +    //
1237 +    Bool_t IsLeptonFootprint = kFALSE;
1238 +    if (dr < 1.0) {
1239 +
1240 +      //
1241 +      // Check for electrons
1242 +      //
1243 +      for (Int_t q=0; q < electronsToVeto.size(); ++q) {
1244 +        const mithep::Electron *tmpele = electronsToVeto[q];
1245 +        // 4l electron
1246 +        if( pf->HasTrackerTrk()  ) {
1247 +          if( pf->TrackerTrk() == tmpele->TrackerTrk() ) {
1248 +            if( ctrl.debug) cout << "\tcharged tktrk, matches 4L ele ..." << endl;
1249 +            IsLeptonFootprint = kTRUE;
1250 +          }
1251 +        }
1252 +        if( pf->HasGsfTrk()  ) {
1253 +          if( pf->GsfTrk() == tmpele->GsfTrk() ) {
1254 +            if( ctrl.debug) cout << "\tcharged gsftrk, matches 4L ele ..." << endl;
1255 +            IsLeptonFootprint = kTRUE;
1256 +          }
1257 +        }
1258 +        // PF charged
1259 +        if (pf->Charge() != 0 && fabs(tmpele->SCluster()->Eta()) > 1.479
1260 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.015) {
1261 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L ele ..." << endl;
1262 +          IsLeptonFootprint = kTRUE;
1263 +        }
1264 +        // PF gamma
1265 +        if (abs(pf->PFType()) == PFCandidate::eGamma && fabs(tmpele->SCluster()->Eta()) > 1.479
1266 +            && mithep::MathUtils::DeltaR(tmpele->Phi(),tmpele->Eta(), pf->Phi(), pf->Eta()) < 0.08) {
1267 +          if( ctrl.debug) cout << "\tPF gamma, matches 4L ele ..." << endl;
1268 +          IsLeptonFootprint = kTRUE;
1269 +        }
1270 +      } // loop over electrons
1271 +      
1272 +      //
1273 +      // Check for muons
1274 +      //
1275 +      for (Int_t q=0; q < muonsToVeto.size(); ++q) {
1276 +        const mithep::Muon *tmpmu = muonsToVeto[q];
1277 +        // 4l muon
1278 +        if( pf->HasTrackerTrk() ) {
1279 +          if (pf->TrackerTrk() == tmpmu->TrackerTrk() ){
1280 +            if( ctrl.debug) cout << "\tmatches 4L mu ..." << endl;
1281 +            IsLeptonFootprint = kTRUE;
1282 +          }
1283 +        }
1284 +        // PF charged
1285 +        if (pf->Charge() != 0 && mithep::MathUtils::DeltaR(tmpmu->Phi(),tmpmu->Eta(), pf->Phi(), pf->Eta()) < 0.01) {
1286 +          if( ctrl.debug) cout << "\tcharged trk, dR matches 4L mu ..." << endl;
1287 +          IsLeptonFootprint = kTRUE;
1288 +        }
1289 +      } // loop over muons
1290 +
1291 +
1292 +    if (IsLeptonFootprint)
1293 +      continue;
1294 +
1295 +    //
1296 +    // Charged Iso Rings
1297 +    //
1298 +    if (pf->Charge() != 0 && (pf->HasTrackerTrk()||pf->HasGsfTrk()) ) {
1299 +
1300 +      if( pf->HasTrackerTrk() )
1301 +        if (abs(pf->TrackerTrk()->DzCorrected(vtx)) > 0.2) continue;
1302 +      if( pf->HasGsfTrk() )
1303 +        if (abs(pf->GsfTrk()->DzCorrected(vtx)) > 0.2) continue;
1304 +
1305 +      // Veto any PFmuon, or PFEle
1306 +      if (abs(pf->PFType()) == PFCandidate::eElectron || abs(pf->PFType()) == PFCandidate::eMuon) continue;
1307 +
1308 +      // Footprint Veto
1309 +      if (fabs(ele->SCluster()->Eta()) > 1.479 && dr < 0.015) continue;
1310 +
1311 +      if( ctrl.debug) cout << "charged:: pt: " << pf->Pt()
1312 +                           << "\ttype: " << pf->PFType()
1313 +                           << "\ttrk: " << pf->TrackerTrk() << endl;
1314 +
1315 +      fChargedIso += pf->Pt();
1316 +    }
1317 +
1318 +    //
1319 +    // Gamma Iso
1320 +    //
1321 +    else if (abs(pf->PFType()) == PFCandidate::eGamma) {
1322 +
1323 +      if (fabs(ele->SCluster()->Eta()) > 1.479) {
1324 +        if (mithep::MathUtils::DeltaR(ele->Phi(),ele->Eta(), pf->Phi(), pf->Eta()) < 0.08) continue;
1325 +      }
1326 +      if( ctrl.debug) cout << "gamma:: " << pf->Pt() << " "
1327 +                           << dr << endl;
1328 +      fGammaIso += pf->Pt();
1329 +    }
1330 +
1331 +    //
1332 +    // Neutral Iso
1333 +    //
1334 +    else {
1335 +      if( ctrl.debug) cout << "neutral:: " << pf->Pt() << " "
1336 +                           << dr << endl;
1337 +      fNeutralHadronIso += pf->Pt();
1338 +    }
1339 +
1340 +    }
1341 +
1342 +  }
1343 +
1344 +  double rho = 0;
1345 +  if (!(isnan(fPUEnergyDensity->At(0)->Rho()) || isinf(fPUEnergyDensity->At(0)->Rho())))
1346 +    rho = fPUEnergyDensity->At(0)->Rho();
1347 +
1348 +  // WARNING!!!!  
1349 +  // hardcode for sync ...
1350 +  EffectiveAreaVersion = eleT.kEleEAData2011;
1351 +  // WARNING!!!!  
1352 +
1353 +
1354 +  double pfIso = fChargedIso +
1355 +    max(0.0,fGammaIso -rho*eleT.ElectronEffectiveArea(eleT.kEleGammaIso04,
1356 +                                                ele->Eta(),EffectiveAreaVersion)) +
1357 +    max(0.0,fNeutralHadronIso -rho*eleT.ElectronEffectiveArea(eleT.kEleNeutralHadronIso04,
1358 +                                                        ele->Eta(),EffectiveAreaVersion)) ;
1359 +  return pfIso;
1360 + }
1361 +
1362 + //--------------------------------------------------------------------------------------------------
1363 + SelectionStatus electronReferenceIsoSelection(ControlFlags &ctrl,
1364 +                                              const mithep::Electron * ele,
1365 +                                              const mithep::Vertex & vtx,
1366 +                                              const mithep::Array<mithep::PFCandidate> * fPFCandidates,
1367 +                                              const mithep::Array<mithep::PileupEnergyDensity> * fPUEnergyDensity,
1368 +                                              mithep::ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaVersion,
1369 +                                              vector<const mithep::Muon*> muonsToVeto,
1370 +                                              vector<const mithep::Electron*> electronsToVeto)
1371 + //--------------------------------------------------------------------------------------------------
1372 + {
1373 +
1374 +  SelectionStatus status;
1375 +
1376 +  double pfIso = electronPFIso04( ctrl, ele, vtx, fPFCandidates, fPUEnergyDensity,
1377 +                                  EffectiveAreaVersion, muonsToVeto ,electronsToVeto );
1378 +  bool pass = false;
1379 +  if( (pfIso/ele->Pt()) < ELECTRON_REFERENCE_PFISO_CUT ) pass = true;
1380 +
1381 +  if( pass ) {
1382 +    status.orStatus(SelectionStatus::LOOSEISO);
1383 +    status.orStatus(SelectionStatus::TIGHTISO);
1384 +  }
1385 +  if(ctrl.debug) cout << "returning status : " << hex << status.getStatus() << dec << endl;
1386 +  return status;
1387 +
1388 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines