bool Electron::PassUserID_FakeRateLooseID(bool verbose){ bool pass_ecalDriven = bool ( EcalSeed() == 1 ); bool pass_missingHits = bool ( MissingHits() <= 1 ); bool pass_dxy = false; bool pass_sigmaIEtaIEta = false; bool pass_hoe = false; bool is_barrel = false; bool is_endcap = false; if ( fabs(SCEta()) < 1.4442 ){ is_barrel = true; pass_dxy = bool ( fabs(LeadVtxDistXY()) < 0.02 ); pass_sigmaIEtaIEta = bool ( Full5x5SigmaIEtaIEta() < 0.013 ); pass_hoe = bool ( HoE() < 0.15 ); } else if ( fabs(SCEta()) > 1.566 && fabs(SCEta()) < 2.5 ){ is_endcap = true; pass_dxy = bool ( fabs(LeadVtxDistXY()) < 0.05 ); pass_sigmaIEtaIEta = bool ( Full5x5SigmaIEtaIEta() < 0.034 ); pass_hoe = bool ( HoE() < 0.10 ); } bool decision = ( pass_ecalDriven && pass_missingHits && pass_dxy && pass_sigmaIEtaIEta && pass_hoe ); if ( verbose ) { std::cout << std::endl; if ( !decision ){ if ( is_barrel ) std::cout << "\t\t\tElectron #" << m_raw_index << " (barrel) FAIL FakeRateLooseID" << std::endl; else if ( is_endcap ) std::cout << "\t\t\tElectron #" << m_raw_index << " (endcap) FAIL FakeRateLooseID" << std::endl; else std::cout << "\t\t\tElectron #" << m_raw_index << " (nonfid) FAIL FakeRateLooseID" << std::endl; if ( is_barrel || is_endcap ) { if ( !pass_ecalDriven ) std::cout << "\t\t\tfail ecalDriven :\t " << EcalSeed() << std::endl; if ( !pass_missingHits ) std::cout << "\t\t\tfail missingHits :\t " << MissingHits() << std::endl; if ( !pass_dxy ) std::cout << "\t\t\tfail dxy :\t " << LeadVtxDistXY() << std::endl; if ( !pass_sigmaIEtaIEta ) std::cout << "\t\t\tfail sigmaIEtaIEta :\t " << Full5x5SigmaIEtaIEta() << std::endl; if ( !pass_hoe ) std::cout << "\t\t\tfail hoe :\t " << HoE() << std::endl; } else std::cout << "\t\t\tfail eta(fiducial) :\t " << Eta() << std::endl; } else { if ( is_barrel ) std::cout << "\t\t\tElectron #" << m_raw_index << " (barrel) PASS FakeRateLooseID" << std::endl; else if ( is_endcap ) std::cout << "\t\t\tElectron #" << m_raw_index << " (endcap) PASS FakeRateLooseID" << std::endl; else std::cout << "\t\t\tElectron #" << m_raw_index << " (nonfid) PASS FakeRateLooseID" << std::endl; } } return decision; }
bool Electron::IsEEFiducial (){ return bool (( fabs(SCEta()) > 1.560 ) && ( fabs(SCEta()) < 2.500 ));}
bool Electron::IsEBFiducial (){ return bool ( fabs(SCEta()) < 1.442 );}
bool Electron::PassUserID_HEEPv6p1 (bool verbose){ // See: https://twiki.cern.ch/twiki/bin/viewauth/CMS/HEEPElectronIdentificationRun2 // apply cuts manually based on variables here // this is version 6.1 //---------------------------------------------------------------------- // Bools that are the same whether barrel or endcap //---------------------------------------------------------------------- bool pass_et = bool ( PtHeep() > 35.0 ); bool pass_ecalDriven = bool ( EcalSeed() == 1 ); bool pass_deltaPhi = bool ( fabs (DeltaPhi()) < 0.06 ); // dPhiSCTrkAtVtx bool pass_missingHits = bool ( MissingHits() <= 1 ); //---------------------------------------------------------------------- // Bools that depend on barrel vs. endcap //---------------------------------------------------------------------- bool pass_deltaEtaSeed = false; bool pass_sigmaIEtaIEta = false; bool pass_shape = false; bool pass_shape1 = false; bool pass_shape2 = false; bool pass_caloIsolation = false; bool pass_dxy = false; bool pass_hoe = false; bool pass_trkIsolation = false; double caloIsolation = EcalIsoDR03() + HcalIsoD1DR03(); //---------------------------------------------------------------------- // Barrel electrons //---------------------------------------------------------------------- if ( fabs(SCEta()) < 1.4442 ){ pass_deltaEtaSeed = bool ( fabs(DeltaEtaSeed() ) < 0.004 ); pass_hoe = bool ( HoE() < 1/SCEnergy() + 0.05 ); pass_sigmaIEtaIEta = true; pass_shape1 = bool ( Full5x5E1x5OverE5x5() > 0.83 ); pass_shape2 = bool ( Full5x5E2x5OverE5x5() > 0.94 ); pass_shape = bool ( pass_shape1 || pass_shape2 ); pass_caloIsolation = bool ( caloIsolation < ( 2.0 + ( 0.03 * PtHeep() ) + (0.28 * RhoForHEEP() ) ) ); pass_dxy = bool ( fabs(LeadVtxDistXY()) < 0.02 ); pass_trkIsolation = bool ( PtHeep() < 95 ? TrkIsoDR03() < 5 : TrkIsoDR03() < 5+1.5*RhoForHEEP()); } //---------------------------------------------------------------------- // Endcap electrons //---------------------------------------------------------------------- else if ( fabs(SCEta()) > 1.566 && fabs(SCEta()) < 2.5 ){ pass_deltaEtaSeed = bool ( fabs (DeltaEtaSeed()) < 0.006 ); pass_hoe = bool ( HoE() < 5/SCEnergy() + 0.05 ); pass_sigmaIEtaIEta = bool ( Full5x5SigmaIEtaIEta() < 0.03 ); pass_shape = true; if ( PtHeep() < 50 ) { pass_caloIsolation = bool ( caloIsolation < ( 2.5 + ( 0.28 * RhoForHEEP() ) ) ); } else { pass_caloIsolation = bool ( caloIsolation < ( 2.5 + ( 0.28 * RhoForHEEP() ) + ( 0.03 * (PtHeep() - 50.0 ) ) ) ); } pass_dxy = bool ( fabs(LeadVtxDistXY()) < 0.05 ); pass_trkIsolation = bool ( PtHeep() < 100 ? TrkIsoDR03() < 5 : TrkIsoDR03() < 5+0.5*RhoForHEEP()); } bool decision = (pass_et && pass_ecalDriven && pass_deltaEtaSeed && pass_deltaPhi && pass_hoe && pass_sigmaIEtaIEta && pass_shape && pass_dxy && pass_missingHits && pass_trkIsolation && pass_caloIsolation ); if ( verbose ) { if ( decision ) std::cout << "Electron #" << m_raw_index << " PASS HEEPID" << std::endl; else { std::cout << "Electron #" << m_raw_index << " FAIL HEEPID" << std::endl; if ( !pass_et ) std::cout << "\tfail et " << std::endl; if ( !pass_ecalDriven ) std::cout << "\tfail ecalDriven " << std::endl; if ( !pass_deltaEtaSeed ) std::cout << "\tfail deltaEtaSeed " << std::endl; if ( !pass_deltaPhi ) std::cout << "\tfail deltaPhi " << std::endl; if ( !pass_hoe ) std::cout << "\tfail hoe " << std::endl; if ( !pass_sigmaIEtaIEta ) std::cout << "\tfail sigmaIEtaIEta " << std::endl; if ( !pass_shape ) std::cout << "\tfail shape " << std::endl; if ( !pass_dxy ) std::cout << "\tfail dxy " << std::endl; if ( !pass_missingHits ) std::cout << "\tfail missingHits " << std::endl; if ( !pass_trkIsolation ) std::cout << "\tfail trkIsolation " << std::endl; if ( !pass_caloIsolation ) std::cout << "\tfail caloIsolation " << std::endl; } } return decision; }
bool Electron::PassUserID_EGamma ( ID id, bool verbose ){ //---------------------------------------------------------------------- // Barrel electron cut values //---------------------------------------------------------------------- // See: https://twiki.cern.ch/twiki/bin/viewauth/CMS/CutBasedElectronIdentificationRun2 double l_b_f5x5sieie [4] = {0.011100, 0.010557, 0.010399, 0.010181 }; double l_b_dEtaIn [4] = {0.016315, 0.012442, 0.007641, 0.006574 }; double l_b_dPhiIn [4] = {0.252044, 0.072624, 0.032643, 0.022868 }; double l_b_hoe [4] = {0.345843, 0.121476, 0.060662, 0.037553 }; double l_b_pfRelIso [4] = {0.164369, 0.120026, 0.097213, 0.074355 }; double l_b_ooemoop [4] = {0.248070, 0.221803, 0.153897, 0.131191 }; double l_b_d0 [4] = {0.060279, 0.022664, 0.011811, 0.009924 }; double l_b_dZ [4] = {0.800538, 0.173670, 0.070775, 0.015310 }; int l_b_missHits [4] = {2, 1, 1, 1}; //---------------------------------------------------------------------- // Endcap electron cut values //---------------------------------------------------------------------- double l_e_f5x5sieie [4] = {0.033987, 0.032602, 0.029524, 0.028766 }; double l_e_dEtaIn [4] = {0.010671, 0.010654, 0.009285, 0.005681 }; double l_e_dPhiIn [4] = {0.245263, 0.145129, 0.042447, 0.032046 }; double l_e_hoe [4] = {0.134691, 0.131862, 0.104263, 0.081902 }; double l_e_pfRelIso [4] = {0.212604, 0.162914, 0.116708, 0.090185 }; double l_e_ooemoop [4] = {0.157160, 0.142283, 0.137468, 0.106055 }; double l_e_d0 [4] = {0.273097, 0.097358, 0.051682, 0.027261 }; double l_e_dZ [4] = {0.885860, 0.198444, 0.180720, 0.147154 }; int l_e_missHits [4] = {3, 1, 1, 1}; //---------------------------------------------------------------------- // Bools that depend on barrel vs. endcap //---------------------------------------------------------------------- bool pass_full5x5SigmaIetaIeta = false; bool pass_deltaEta = false; bool pass_deltaPhi = false; bool pass_hoe = false; bool pass_pfIsoWBetaOverPt = false; bool pass_ooEmooP = false; bool pass_vtxDistXY = false; // aka d0 bool pass_vtxDistZ = false; bool pass_missingHits = false; bool pass_convVeto = false; //---------------------------------------------------------------------- // Define EGamma ep parameter //---------------------------------------------------------------------- const float ecal_energy_inverse = 1.0/EcalEnergy(); const float eSCoverP = ESuperClusterOverP(); const float ooEmooP = std::abs(1.0 - eSCoverP)*ecal_energy_inverse; //---------------------------------------------------------------------- // Define DeltaBeta PF Isolation //---------------------------------------------------------------------- double ptCutoff = 20.0; double deltaBetaConstant = 0.5; bool relativeIso = true; // const float chad = PFChargedHadronIso03(); const float nhad = PFNeutralHadronIso03(); const float pho = PFPhotonIso03(); const float puchad = PFPUIso03(); float iso = chad + std::max(0.0, nhad + pho - deltaBetaConstant*puchad); if(relativeIso) iso /= Pt(); //---------------------------------------------------------------------- // Barrel electron test //---------------------------------------------------------------------- if ( fabs(SCEta()) < 1.479 ){ pass_full5x5SigmaIetaIeta = bool ( Full5x5SigmaIEtaIEta() < l_b_f5x5sieie [ id ] ); pass_deltaEta = bool ( fabs(DeltaEta()) < l_b_dEtaIn [ id ] ); pass_deltaPhi = bool ( fabs(DeltaPhi()) < l_b_dPhiIn [ id ] ); pass_hoe = bool ( HoE() < l_b_hoe [ id ] ); pass_pfIsoWBetaOverPt = bool ( ooEmooP < l_b_ooemoop [ id ] ); pass_ooEmooP = bool ( iso < l_b_pfRelIso [ id ] ); pass_vtxDistXY = bool ( fabs(VtxDistXY()) < l_b_d0 [ id ] ); pass_vtxDistZ = bool ( fabs(VtxDistZ ()) < l_b_dZ [ id ] ); pass_missingHits = bool ( MissingHits() < l_b_missHits [ id ] ); pass_convVeto = ! HasMatchedConvPhot(); } //---------------------------------------------------------------------- // Endcap electron test //---------------------------------------------------------------------- else if ( fabs(SCEta()) > 1.479 && fabs(SCEta()) < 2.5 ){ pass_full5x5SigmaIetaIeta = bool ( Full5x5SigmaIEtaIEta() < l_e_f5x5sieie [ id ] ); pass_deltaEta = bool ( fabs(DeltaEta()) < l_e_dEtaIn [ id ] ); pass_deltaPhi = bool ( fabs(DeltaPhi()) < l_e_dPhiIn [ id ] ); pass_hoe = bool ( HoE() < l_e_hoe [ id ] ); pass_pfIsoWBetaOverPt = bool ( ooEmooP < l_e_ooemoop [ id ] ); pass_ooEmooP = bool ( iso < l_e_pfRelIso [ id ] ); pass_vtxDistXY = bool ( fabs(VtxDistXY()) < l_e_d0 [ id ] ); pass_vtxDistZ = bool ( fabs(VtxDistZ ()) < l_e_dZ [ id ] ); pass_missingHits = bool ( MissingHits() < l_e_missHits [ id ] ); pass_convVeto = ! HasMatchedConvPhot(); } bool decision = ( pass_full5x5SigmaIetaIeta && pass_deltaEta && pass_deltaPhi && pass_hoe && pass_pfIsoWBetaOverPt && pass_ooEmooP && pass_vtxDistXY && pass_vtxDistZ && pass_missingHits && pass_convVeto ); return decision; }