19 m_systNominal(
CP::SystematicSet()),
20 m_systTrigger_UP(
CP::SystematicSet()),
21 m_systTrigger_DOWN(
CP::SystematicSet()),
22 m_systReco_UP(
CP::SystematicSet()),
23 m_systReco_DOWN(
CP::SystematicSet()),
24 m_systID_UP(
CP::SystematicSet()),
25 m_systID_DOWN(
CP::SystematicSet()),
26 m_systIso_UP(
CP::SystematicSet()),
27 m_systIso_DOWN(
CP::SystematicSet()),
28 m_systChargeID_UP(
CP::SystematicSet()),
29 m_systChargeID_DOWN(
CP::SystematicSet()),
30 m_systChargeMisID_STAT_UP(
CP::SystematicSet()),
31 m_systChargeMisID_STAT_DOWN(
CP::SystematicSet()),
32 m_systChargeMisID_SYST_UP(
CP::SystematicSet()),
33 m_systChargeMisID_SYST_DOWN(
CP::SystematicSet()),
35 m_electronEffSFTrigger(
"AsgElectronEfficiencyCorrectionTool_TriggerSF"),
36 m_electronEffSFTriggerLoose(
"AsgElectronEfficiencyCorrectionTool_TriggerSFLoose"),
37 m_electronEffTrigger(
"AsgElectronEfficiencyCorrectionTool_Trigger"),
38 m_electronEffTriggerLoose(
"AsgElectronEfficiencyCorrectionTool_TriggerLoose"),
39 m_electronEffSFReco(
"AsgElectronEfficiencyCorrectionTool_Reco"),
40 m_electronEffSFID(
"AsgElectronEfficiencyCorrectionTool_ID"),
41 m_electronEffSFIDLoose(
"AsgElectronEfficiencyCorrectionTool_IDLoose"),
42 m_electronEffIso_exists(false),
43 m_electronEffIsoLoose_exists(false),
44 m_electronEffSFIso(
"AsgElectronEfficiencyCorrectionTool_Iso"),
45 m_electronEffSFIsoLoose(
"AsgElectronEfficiencyCorrectionTool_IsoLoose"),
46 m_electronEffChargeID_exists(false),
47 m_electronEffChargeIDLoose_exists(false),
48 m_electronEffChargeMisID_exists(false),
49 m_electronEffChargeMisIDLoose_exists(false),
50 m_electronEffSFChargeID(
"AsgElectronEfficiencyCorrectionTool_ChargeID"),
51 m_electronEffSFChargeIDLoose(
"AsgElectronEfficiencyCorrectionTool_ChargeIDLoose"),
52 m_electronEffSFChargeMisID(
"ElectronChargeEfficiencyCorrection"),
53 m_electronEffSFChargeMisIDLoose(
"ElectronChargeEfficiencyCorrectionLoose"),
55 m_electronEffSFTriggerCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_TriggerSF"),
56 m_electronEffSFTriggerLooseCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_TriggerSFLoose"),
57 m_electronEffTriggerCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_Trigger"),
58 m_electronEffTriggerLooseCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_TriggerLoose"),
59 m_electronEffSFRecoCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_Reco"),
60 m_electronEffSFIDCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_ID"),
61 m_electronEffSFIDLooseCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_IDLoose"),
62 m_electronEffSFIsoCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_Iso"),
63 m_electronEffSFIsoLooseCorrModel(
"AsgElectronEfficiencyCorrectionTool_CorrModel_IsoLoose"),
65 m_decor_triggerEff(
"SetMe"),
66 m_decor_triggerEff_loose(
"SetMe"),
67 m_decor_triggerSF(
"SetMe"),
68 m_decor_triggerSF_loose(
"SetMe"),
69 m_decor_recoSF(
"SetMe"),
70 m_decor_idSF(
"SetMe"),
71 m_decor_idSF_loose(
"SetMe"),
72 m_decor_isoSF(
"SetMe"),
73 m_decor_isoSF_loose(
"SetMe"),
74 m_decor_chargeidSF(
"SetMe"),
75 m_decor_chargeidSF_loose(
"SetMe"),
76 m_decor_chargemisidSF(
"SetMe"),
77 m_decor_chargemisidSF_loose(
"SetMe") {
82 ATH_MSG_INFO(
" top::ElectronScaleFactorCalculator initialize");
87 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL") {
89 "Failed to retrieve electron SF Tool for correlation model");
95 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL") {
99 if (asg::ToolStore::contains<IAsgElectronEfficiencyCorrectionTool> (
"AsgElectronEfficiencyCorrectionTool_Iso")) {
102 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL") {
106 if (asg::ToolStore::contains<IAsgElectronEfficiencyCorrectionTool> (
"AsgElectronEfficiencyCorrectionTool_IsoLoose"))
110 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL") {
113 "Failed to retrieve loose electron SF Tool for correlation model");
119 if (asg::ToolStore::contains<IAsgElectronEfficiencyCorrectionTool> (
"AsgElectronEfficiencyCorrectionTool_ChargeID"))
123 msgInfo <<
"------>Systematics:\n";
125 msgInfo <<
"---> " <<
sys <<
"\n";
127 if (asg::ToolStore::contains<IAsgElectronEfficiencyCorrectionTool> (
128 "AsgElectronEfficiencyCorrectionTool_ChargeIDLoose")) {
131 msgInfo <<
"------>Systematics:\n";
133 msgInfo <<
"---> " <<
sys <<
"\n";
135 if (asg::ToolStore::contains<CP::ElectronChargeEfficiencyCorrectionTool> (
"ElectronChargeEfficiencyCorrection") &&
139 msgInfo <<
"------>Systematics:\n";
141 msgInfo <<
"---> " <<
sys <<
"\n";
143 if (asg::ToolStore::contains<CP::ElectronChargeEfficiencyCorrectionTool> (
"ElectronChargeEfficiencyCorrectionLoose")
148 msgInfo <<
"------>Systematics:\n";
150 msgInfo <<
"---> " <<
sys <<
"\n";
157 if (
m_config->electronIsolationSF() !=
"None") {
159 " You can run with ElectronIsolationSF set to None if you don't need the SF.");
160 return StatusCode::FAILURE;
164 if (
m_config->electronIsolationSFLoose() !=
"None") {
166 " You can run with ElectronIsolationSFLoose set to None if you don't need the SF.");
167 return StatusCode::FAILURE;
174 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL") {
177 "Failed to retrieve electron SF Tool for correlation model");
197 if (
m_config->electronEfficiencySystematicModel() !=
"TOTAL" &&
m_config->electronEfficiencySystematicModel() !=
"COMBMCTOYS") {
212 "For electron RECO, ID, ISOLATION using the correlation model " <<
213 m_config->electronEfficiencySystematicModel());
214 int count = 0, count2 = 0;
217 if (
count % 2 == 1)
continue;
218 TString
name = isyst.name();
219 name.ReplaceAll(
"__1down",
"");
221 "--->electron RECO " <<
m_config->electronEfficiencySystematicModel() <<
" component " << (count2++) <<
" is " <<
225 m_config->electronEfficiencySystematicModelRecoSize(count2);
232 if (
count % 2 == 1)
continue;
233 TString
name = isyst.name();
234 name.ReplaceAll(
"__1down",
"");
236 "--->electron ID " <<
m_config->electronEfficiencySystematicModel() <<
" component " << (count2++) <<
" is " <<
240 m_config->electronEfficiencySystematicModelIdSize(count2);
248 if (
count % 2 == 1)
continue;
249 TString
name = isyst.name();
250 name.ReplaceAll(
"__1down",
"");
252 "--->electron ISO " <<
m_config->electronEfficiencySystematicModel() <<
" component " << (count2++) <<
" is " <<
256 m_config->electronEfficiencySystematicModelIsoSize(count2);
262 if (
m_config->electronEfficiencySystematicModel() ==
"COMBMCTOYS") {
280 recosysVecToys.
setToys(
m_config->electronEfficiencySystematicModelNToys() );
281 idsysVecToys.
setToys(
m_config->electronEfficiencySystematicModelNToys() );
282 isosysVecToys.
setToys(
m_config->electronEfficiencySystematicModelNToys() );
284 recosysVecToys.
calc(recoSet);
285 idsysVecToys.
calc(idSet);
286 isosysVecToys.
calc(isoSet);
295 "For electron RECO, ID, ISOLATION using the correlation model " <<
296 m_config->electronEfficiencySystematicModel());
299 TString
name = isyst.name();
301 "--->electron RECO " <<
m_config->electronEfficiencySystematicModel() <<
" component " <<
count <<
" is " <<
310 TString
name = isyst.name();
312 "--->electron ID " <<
m_config->electronEfficiencySystematicModel() <<
" component " <<
count <<
" is " <<
321 TString
name = isyst.name();
323 "--->electron ISO " <<
m_config->electronEfficiencySystematicModel() <<
" component " <<
count <<
" is " <<
349 return StatusCode::SUCCESS;
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;