354 for (
auto currentSystematic : *
m_config->systSgKeyMapElectrons()) {
380 bool passSelection(
false);
381 if (electronPtr->isAvailable<
char>(
"passPreORSelection")) {
382 if (electronPtr->auxdataConst<
char>(
"passPreORSelection") == 1) {
383 passSelection =
true;
386 if (electronPtr->isAvailable<
char>(
"passPreORSelectionLoose")) {
387 if (electronPtr->auxdataConst<
char>(
"passPreORSelectionLoose") == 1) {
388 passSelection =
true;
393 double Eff_Trigger(1.), Eff_TriggerLoose(1.);
394 double SF_Trigger(1.), SF_TriggerLoose(1.);
396 double SF_ID(1.), SF_IDLoose(1.);
397 double SF_Isol(1.), SF_IsolLoose(1.);
398 double SF_ChargeID(1.), SF_ChargeIDLoose(1.);
399 double SF_ChargeMisID(1.), SF_ChargeMisIDLoose(1.);
404 Eff_TriggerLoose),
"Failed to get SF");
409 SF_TriggerLoose),
"Failed to get SF");
432 SF_ChargeMisIDLoose),
"Failed to get SF");
451 if (currentSystematic.first ==
m_config->nominalHashValue()) {
452 double EFF_Trigger_UP(1.), EFF_TriggerLoose_UP(1.);
453 double SF_Trigger_UP(1.), SF_TriggerLoose_UP(1.);
454 double SF_Reco_UP(1.);
455 double SF_ID_UP(1.), SF_IDLoose_UP(1.);
456 double SF_Isol_UP(1.), SF_IsolLoose_UP(1.);
457 double SF_ChargeID_UP(1.), SF_ChargeIDLoose_UP(1.);
458 double SF_ChargeMisID_STAT_UP(1.), SF_ChargeMisIDLoose_STAT_UP(1.);
459 double SF_ChargeMisID_SYST_UP(1.), SF_ChargeMisIDLoose_SYST_UP(1.);
461 double EFF_Trigger_DOWN(1.), EFF_TriggerLoose_DOWN(1.);
462 double SF_Trigger_DOWN(1.), SF_TriggerLoose_DOWN(1.);
463 double SF_Reco_DOWN(1.);
464 double SF_ID_DOWN(1.), SF_IDLoose_DOWN(1.);
465 double SF_Isol_DOWN(1.), SF_IsolLoose_DOWN(1.);
466 double SF_ChargeID_DOWN(1.), SF_ChargeIDLoose_DOWN(1.);
467 double SF_ChargeMisID_STAT_DOWN(1.), SF_ChargeMisIDLoose_STAT_DOWN(1.);
468 double SF_ChargeMisID_SYST_DOWN(1.), SF_ChargeMisIDLoose_SYST_DOWN(1.);
478 SF_TriggerLoose_UP),
"Failed to get SF");
481 "Failed to set systematic");
485 EFF_TriggerLoose_UP),
"Failed to get SF");
489 "Failed to set systematic");
493 SF_Trigger_DOWN),
"Failed to get SF");
495 SF_TriggerLoose_DOWN),
"Failed to get SF");
500 EFF_Trigger_DOWN),
"Failed to get SF");
502 EFF_TriggerLoose_DOWN),
"Failed to get SF");
508 "Failed to set systematic");
537 SF_IDLoose_DOWN),
"Failed to get SF");
557 SF_IsolLoose_UP),
"Failed to get SF");
561 SF_IsolLoose_DOWN),
"Failed to get SF");
572 SF_ChargeID_UP),
"Failed to get SF");
577 SF_ChargeID_DOWN),
"Failed to get SF");
586 SF_ChargeIDLoose_UP),
592 SF_ChargeIDLoose_DOWN),
605 SF_ChargeMisID_STAT_UP),
611 SF_ChargeMisID_STAT_DOWN),
617 SF_ChargeMisID_SYST_UP),
623 SF_ChargeMisID_SYST_DOWN),
627 "Failed to set systematic");
634 SF_ChargeMisIDLoose_STAT_UP),
640 SF_ChargeMisIDLoose_STAT_DOWN),
646 SF_ChargeMisIDLoose_SYST_UP),
652 SF_ChargeMisIDLoose_SYST_DOWN),
664 electronPtr->auxdecor<
float>(
m_decor_recoSF +
"_UP") = SF_Reco_UP;
665 electronPtr->auxdecor<
float>(
m_decor_idSF +
"_UP") = SF_ID_UP;
667 electronPtr->auxdecor<
float>(
m_decor_isoSF +
"_UP") = SF_Isol_UP;
680 electronPtr->auxdecor<
float>(
m_decor_recoSF +
"_DOWN") = SF_Reco_DOWN;
681 electronPtr->auxdecor<
float>(
m_decor_idSF +
"_DOWN") = SF_ID_DOWN;
683 electronPtr->auxdecor<
float>(
m_decor_isoSF +
"_DOWN") = SF_Isol_DOWN;
699 ATH_MSG_DEBUG(
"Electron Trigger MediumLH SF = " << electronPtr->auxdataConst<
float>(
706 electronPtr->auxdataConst<
float>(
m_decor_recoSF +
"_UP") <<
" - " <<
711 electronPtr->auxdataConst<
float>(
m_decor_idSF +
"_UP") <<
" - " <<
712 electronPtr->auxdataConst<
float>(
m_decor_idSF +
"_DOWN")
720 ATH_MSG_DEBUG(
"Electron Charge Mis-ID SF = " << electronPtr->auxdataConst<
float>(
730 if ((
m_config->electronEfficiencySystematicModel() !=
"TOTAL") && (
m_config->electronEfficiencySystematicModel() !=
"COMBMCTOYS")){
731 std::vector<float> vec_Eff_Trigger_UP, vec_Eff_Trigger_DOWN, vec_Eff_TriggerLoose_UP,
732 vec_Eff_TriggerLoose_DOWN;
733 std::vector<float> vec_SF_Trigger_UP, vec_SF_Trigger_DOWN, vec_SF_TriggerLoose_UP,
734 vec_SF_TriggerLoose_DOWN;
735 std::vector<float> vec_SF_Reco_UP, vec_SF_Reco_DOWN;
736 std::vector<float> vec_SF_ID_UP, vec_SF_ID_DOWN, vec_SF_IDLoose_UP, vec_SF_IDLoose_DOWN;
737 std::vector<float> vec_SF_Isol_UP, vec_SF_Isol_DOWN, vec_SF_IsolLoose_UP, vec_SF_IsolLoose_DOWN;
738 std::vector<float> vec_SF_ChargeID_UP, vec_SF_ChargeID_DOWN, vec_SF_ChargeIDLoose_UP,
739 vec_SF_ChargeIDLoose_DOWN;
740 std::vector<float> vec_SF_ChargeMisID_UP, vec_SF_ChargeMisID_DOWN, vec_SF_ChargeMisIDLoose_UP,
741 vec_SF_ChargeMisIDLoose_DOWN;
743 double EFF_Trigger(1.), EFF_TriggerLoose(1.);
744 double SF_Trigger(1.), SF_TriggerLoose(1.);
746 double SF_ID(1.), SF_IDLoose(1.);
747 double SF_Isol(1.), SF_IsolLoose(1.);
758 "Failed to set systematic");
760 isyst),
"Failed to set systematic");
762 SF_Trigger),
"Failed to get SF");
768 isyst),
"Failed to set systematic");
770 EFF_Trigger),
"Failed to get SF");
776 if (
count % 2 == 1) {
777 vec_SF_Trigger_DOWN.emplace_back(SF_Trigger);
778 vec_SF_TriggerLoose_DOWN.emplace_back(SF_TriggerLoose);
779 vec_Eff_Trigger_DOWN.emplace_back(EFF_Trigger);
780 vec_Eff_TriggerLoose_DOWN.emplace_back(EFF_TriggerLoose);
782 vec_SF_Trigger_UP.emplace_back(SF_Trigger);
783 vec_SF_TriggerLoose_UP.emplace_back(SF_TriggerLoose);
784 vec_Eff_Trigger_UP.emplace_back(EFF_Trigger);
785 vec_Eff_TriggerLoose_UP.emplace_back(EFF_TriggerLoose);
792 if (vec_SF_Trigger_DOWN.size() != vec_SF_Trigger_UP.size()) {
793 throw std::runtime_error {
794 "ElectronScaleFactorCalculator::execute: Sizes of trigger SF for up and down are different"
797 if (vec_SF_TriggerLoose_DOWN.size() != vec_SF_TriggerLoose_UP.size()) {
798 throw std::runtime_error {
799 "ElectronScaleFactorCalculator::execute: Sizes of triggerLoose SF for up and down are different"
802 if (vec_Eff_Trigger_DOWN.size() != vec_Eff_Trigger_UP.size()) {
803 throw std::runtime_error {
804 "ElectronScaleFactorCalculator::execute: Sizes of trigger Eff for up and down are different"
807 if (vec_Eff_TriggerLoose_DOWN.size() != vec_Eff_TriggerLoose_UP.size()) {
808 throw std::runtime_error {
809 "ElectronScaleFactorCalculator::execute: Sizes of triggerLoose Eff for up and down are different"
833 SF_Reco),
"Failed to get SF");
835 if (
count % 2 == 1) {
836 vec_SF_Reco_DOWN.emplace_back(SF_Reco);
838 vec_SF_Reco_UP.emplace_back(SF_Reco);
842 if (vec_SF_Reco_DOWN.size() != vec_SF_Reco_UP.size()) {
843 throw std::runtime_error {
844 "ElectronScaleFactorCalculator::execute: Sizes of Reco SF for up and down are different"
862 "Failed to set systematic");
866 SF_IDLoose),
"Failed to get SF");
868 if (
count % 2 == 1) {
869 vec_SF_ID_DOWN.emplace_back(SF_ID);
870 vec_SF_IDLoose_DOWN.emplace_back(SF_IDLoose);
872 vec_SF_ID_UP.emplace_back(SF_ID);
873 vec_SF_IDLoose_UP.emplace_back(SF_IDLoose);
877 if (vec_SF_ID_DOWN.size() != vec_SF_ID_UP.size()) {
878 throw std::runtime_error {
879 "ElectronScaleFactorCalculator::execute: Sizes of ID SF for up and down are different"
882 if (vec_SF_IDLoose_DOWN.size() != vec_SF_IDLoose_UP.size()) {
883 throw std::runtime_error {
884 "ElectronScaleFactorCalculator::execute: Sizes of IDLoose SF for up and down are different"
890 "Failed to set systematic");
905 SF_Isol),
"Failed to get SF");
912 isyst),
"Failed to set systematic");
920 if (
count % 2 == 1) {
921 vec_SF_Isol_DOWN.emplace_back(SF_Isol);
922 vec_SF_IsolLoose_DOWN.emplace_back(SF_IsolLoose);
924 vec_SF_Isol_UP.emplace_back(SF_Isol);
925 vec_SF_IsolLoose_UP.emplace_back(SF_IsolLoose);
929 if (vec_SF_Isol_DOWN.size() != vec_SF_Isol_UP.size()) {
930 throw std::runtime_error {
931 "ElectronScaleFactorCalculator::execute: Sizes of Isol SF for up and down are different"
934 if (vec_SF_IsolLoose_DOWN.size() != vec_SF_IsolLoose_UP.size()) {
935 throw std::runtime_error {
936 "ElectronScaleFactorCalculator::execute: Sizes of IsolLoose SF for up and down are different"
943 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerEff +
"_CorrModel_UP") = vec_Eff_Trigger_UP;
945 "_CorrModel_UP") = vec_Eff_TriggerLoose_UP;
946 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerSF +
"_CorrModel_UP") = vec_SF_Trigger_UP;
948 "_CorrModel_UP") = vec_SF_TriggerLoose_UP;
949 electronPtr->auxdecor<std::vector<float> >(
m_decor_recoSF +
"_CorrModel_UP") = vec_SF_Reco_UP;
950 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF +
"_CorrModel_UP") = vec_SF_ID_UP;
951 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF_loose +
"_CorrModel_UP") = vec_SF_IDLoose_UP;
952 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF +
"_CorrModel_UP") = vec_SF_Isol_UP;
953 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF_loose +
"_CorrModel_UP") = vec_SF_IsolLoose_UP;
954 electronPtr->auxdecor<std::vector<float> >(
m_decor_chargeidSF +
"_CorrModel_UP") = vec_SF_ChargeID_UP;
956 "_CorrModel_UP") = vec_SF_ChargeIDLoose_UP;
958 "_CorrModel_UP") = vec_SF_ChargeMisID_UP;
960 "_CorrModel_UP") = vec_SF_ChargeMisIDLoose_UP;
962 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerEff +
"_CorrModel_DOWN") = vec_Eff_Trigger_DOWN;
964 "_CorrModel_DOWN") = vec_Eff_TriggerLoose_DOWN;
965 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerSF +
"_CorrModel_DOWN") = vec_SF_Trigger_DOWN;
967 "_CorrModel_DOWN") = vec_SF_TriggerLoose_DOWN;
968 electronPtr->auxdecor<std::vector<float> >(
m_decor_recoSF +
"_CorrModel_DOWN") = vec_SF_Reco_DOWN;
969 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF +
"_CorrModel_DOWN") = vec_SF_ID_DOWN;
970 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF_loose +
"_CorrModel_DOWN") = vec_SF_IDLoose_DOWN;
971 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF +
"_CorrModel_DOWN") = vec_SF_Isol_DOWN;
973 "_CorrModel_DOWN") = vec_SF_IsolLoose_DOWN;
974 electronPtr->auxdecor<std::vector<float> >(
m_decor_chargeidSF +
"_CorrModel_DOWN") = vec_SF_ChargeID_DOWN;
976 "_CorrModel_DOWN") = vec_SF_ChargeIDLoose_DOWN;
978 "_CorrModel_DOWN") = vec_SF_ChargeMisID_DOWN;
980 "_CorrModel_DOWN") = vec_SF_ChargeMisIDLoose_DOWN;
985 if (
m_config->electronEfficiencySystematicModel() ==
"COMBMCTOYS"){
986 std::vector<float> vec_Eff_Trigger_UP, vec_Eff_Trigger_DOWN, vec_Eff_TriggerLoose_UP,
987 vec_Eff_TriggerLoose_DOWN;
988 std::vector<float> vec_SF_Trigger_UP, vec_SF_Trigger_DOWN, vec_SF_TriggerLoose_UP,
989 vec_SF_TriggerLoose_DOWN;
990 std::vector<float> vec_SF_Reco_UP, vec_SF_Reco_DOWN;
991 std::vector<float> vec_SF_ID_UP, vec_SF_ID_DOWN, vec_SF_IDLoose_UP, vec_SF_IDLoose_DOWN;
992 std::vector<float> vec_SF_Isol_UP, vec_SF_Isol_DOWN, vec_SF_IsolLoose_UP, vec_SF_IsolLoose_DOWN;
993 std::vector<float> vec_SF_ChargeID_UP, vec_SF_ChargeID_DOWN, vec_SF_ChargeIDLoose_UP,
994 vec_SF_ChargeIDLoose_DOWN;
995 std::vector<float> vec_SF_ChargeMisID_UP, vec_SF_ChargeMisID_DOWN, vec_SF_ChargeMisIDLoose_UP,
996 vec_SF_ChargeMisIDLoose_DOWN;
998 double EFF_Trigger(1.), EFF_TriggerLoose(1.);
999 double SF_Trigger(1.), SF_TriggerLoose(1.);
1001 double SF_ID(1.), SF_IDLoose(1.);
1002 double SF_Isol(1.), SF_IsolLoose(1.);
1008 "Failed to set systematic");
1010 isyst),
"Failed to set systematic");
1012 SF_Trigger),
"Failed to get SF");
1015 "Failed to get SF");
1018 isyst),
"Failed to set systematic");
1020 EFF_Trigger),
"Failed to get SF");
1023 "Failed to get SF");
1025 vec_SF_Trigger_DOWN.emplace_back(SF_Trigger);
1026 vec_SF_TriggerLoose_DOWN.emplace_back(SF_TriggerLoose);
1027 vec_Eff_Trigger_DOWN.emplace_back(EFF_Trigger);
1028 vec_Eff_TriggerLoose_DOWN.emplace_back(EFF_TriggerLoose);
1029 vec_SF_Trigger_UP.emplace_back(SF_Trigger);
1030 vec_SF_TriggerLoose_UP.emplace_back(SF_TriggerLoose);
1031 vec_Eff_Trigger_UP.emplace_back(EFF_Trigger);
1032 vec_Eff_TriggerLoose_UP.emplace_back(EFF_TriggerLoose);
1036 if (vec_SF_Trigger_DOWN.size() != vec_SF_Trigger_UP.size()) {
1037 throw std::runtime_error {
1038 "ElectronScaleFactorCalculator::execute: Sizes of trigger SF for up and down are different"
1041 if (vec_SF_TriggerLoose_DOWN.size() != vec_SF_TriggerLoose_UP.size()) {
1042 throw std::runtime_error {
1043 "ElectronScaleFactorCalculator::execute: Sizes of triggerLoose SF for up and down are different"
1046 if (vec_Eff_Trigger_DOWN.size() != vec_Eff_Trigger_UP.size()) {
1047 throw std::runtime_error {
1048 "ElectronScaleFactorCalculator::execute: Sizes of trigger Eff for up and down are different"
1051 if (vec_Eff_TriggerLoose_DOWN.size() != vec_Eff_TriggerLoose_UP.size()) {
1052 throw std::runtime_error {
1053 "ElectronScaleFactorCalculator::execute: Sizes of triggerLoose Eff for up and down are different"
1072 SF_Reco),
"Failed to get SF");
1074 vec_SF_Reco_DOWN.emplace_back(SF_Reco);
1075 vec_SF_Reco_UP.emplace_back(SF_Reco);
1077 if (vec_SF_Reco_DOWN.size() != vec_SF_Reco_UP.size()) {
1078 throw std::runtime_error {
1079 "ElectronScaleFactorCalculator::execute: Sizes of Reco SF for up and down are different"
1092 "Failed to set systematic");
1094 "Failed to get SF");
1096 SF_IDLoose),
"Failed to get SF");
1098 vec_SF_ID_DOWN.emplace_back(SF_ID);
1099 vec_SF_IDLoose_DOWN.emplace_back(SF_IDLoose);
1100 vec_SF_ID_UP.emplace_back(SF_ID);
1101 vec_SF_IDLoose_UP.emplace_back(SF_IDLoose);
1103 if (vec_SF_ID_DOWN.size() != vec_SF_ID_UP.size()) {
1104 throw std::runtime_error {
1105 "ElectronScaleFactorCalculator::execute: Sizes of ID SF for up and down are different"
1108 if (vec_SF_IDLoose_DOWN.size() != vec_SF_IDLoose_UP.size()) {
1109 throw std::runtime_error {
1110 "ElectronScaleFactorCalculator::execute: Sizes of IDLoose SF for up and down are different"
1116 "Failed to set systematic");
1126 SF_Isol),
"Failed to get SF");
1133 isyst),
"Failed to set systematic");
1136 "Failed to get SF");
1141 vec_SF_Isol_DOWN.emplace_back(SF_Isol);
1142 vec_SF_IsolLoose_DOWN.emplace_back(SF_IsolLoose);
1143 vec_SF_Isol_UP.emplace_back(SF_Isol);
1144 vec_SF_IsolLoose_UP.emplace_back(SF_IsolLoose);
1146 if (vec_SF_Isol_DOWN.size() != vec_SF_Isol_UP.size()) {
1147 throw std::runtime_error {
1148 "ElectronScaleFactorCalculator::execute: Sizes of Isol SF for up and down are different"
1151 if (vec_SF_IsolLoose_DOWN.size() != vec_SF_IsolLoose_UP.size()) {
1152 throw std::runtime_error {
1153 "ElectronScaleFactorCalculator::execute: Sizes of IsolLoose SF for up and down are different"
1160 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerEff +
"_CorrModel_UP") = vec_Eff_Trigger_UP;
1162 "_CorrModel_UP") = vec_Eff_TriggerLoose_UP;
1163 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerSF +
"_CorrModel_UP") = vec_SF_Trigger_UP;
1165 "_CorrModel_UP") = vec_SF_TriggerLoose_UP;
1166 electronPtr->auxdecor<std::vector<float> >(
m_decor_recoSF +
"_CorrModel_UP") = vec_SF_Reco_UP;
1167 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF +
"_CorrModel_UP") = vec_SF_ID_UP;
1168 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF_loose +
"_CorrModel_UP") = vec_SF_IDLoose_UP;
1169 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF +
"_CorrModel_UP") = vec_SF_Isol_UP;
1170 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF_loose +
"_CorrModel_UP") = vec_SF_IsolLoose_UP;
1171 electronPtr->auxdecor<std::vector<float> >(
m_decor_chargeidSF +
"_CorrModel_UP") = vec_SF_ChargeID_UP;
1173 "_CorrModel_UP") = vec_SF_ChargeIDLoose_UP;
1175 "_CorrModel_UP") = vec_SF_ChargeMisID_UP;
1177 "_CorrModel_UP") = vec_SF_ChargeMisIDLoose_UP;
1179 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerEff +
"_CorrModel_DOWN") = vec_Eff_Trigger_DOWN;
1181 "_CorrModel_DOWN") = vec_Eff_TriggerLoose_DOWN;
1182 electronPtr->auxdecor<std::vector<float> >(
m_decor_triggerSF +
"_CorrModel_DOWN") = vec_SF_Trigger_DOWN;
1184 "_CorrModel_DOWN") = vec_SF_TriggerLoose_DOWN;
1185 electronPtr->auxdecor<std::vector<float> >(
m_decor_recoSF +
"_CorrModel_DOWN") = vec_SF_Reco_DOWN;
1186 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF +
"_CorrModel_DOWN") = vec_SF_ID_DOWN;
1187 electronPtr->auxdecor<std::vector<float> >(
m_decor_idSF_loose +
"_CorrModel_DOWN") = vec_SF_IDLoose_DOWN;
1188 electronPtr->auxdecor<std::vector<float> >(
m_decor_isoSF +
"_CorrModel_DOWN") = vec_SF_Isol_DOWN;
1190 "_CorrModel_DOWN") = vec_SF_IsolLoose_DOWN;
1191 electronPtr->auxdecor<std::vector<float> >(
m_decor_chargeidSF +
"_CorrModel_DOWN") = vec_SF_ChargeID_DOWN;
1193 "_CorrModel_DOWN") = vec_SF_ChargeIDLoose_DOWN;
1195 "_CorrModel_DOWN") = vec_SF_ChargeMisID_DOWN;
1197 "_CorrModel_DOWN") = vec_SF_ChargeMisIDLoose_DOWN;
1209 return StatusCode::SUCCESS;