19 m_systNominal(
CP::SystematicSet()),
20 m_systEffIDUp(
"PH_EFF_ID_Uncertainty__1up"),
21 m_systEffIDDown(
"PH_EFF_ID_Uncertainty__1down"),
22 m_systEffIsoUp(
"PH_EFF_ISO_Uncertainty__1up"),
23 m_systEffIsoDown(
"PH_EFF_ISO_Uncertainty__1down"),
24 m_photonEffSF(
"AsgPhotonEfficiencyCorrectionTool"),
27 m_photonIsoSF_exists(false),
28 m_photonLooseIsoSF_exists(false),
29 m_decor_isoSF(
"SetMe"),
30 m_decor_isoSF_loose(
"SetMe") {
35 ATH_MSG_INFO(
" top::PhotonScaleFactorCalculator initialize");
37 "Failed to retrieve photon efficiency SF calculator");
39 msgInfo <<
"------>Systematics:\n";
41 msgInfo <<
"---> " <<
sys <<
"\n";
45 std::string
s =
"FixedCut";
46 std::string isoName =
m_config->photonIsolation();
48 std::string::size_type
i = isoName.find(
s);
49 if (
i != std::string::npos) isoName.erase(
i,
s.length());
50 std::string photonIsoSFName =
"AsgPhotonEfficiencyCorrectionTool_IsoSF" + isoName;
52 if (asg::ToolStore::contains<IAsgPhotonEfficiencyCorrectionTool>(photonIsoSFName)) {
55 "Failed to retrieve photon isolation efficiency SF calculator");
56 msgInfo <<
"------>Systematics:\n";
58 msgInfo <<
"---> " <<
sys <<
"\n";
61 std::string isoNameLoose =
m_config->photonIsolationLoose();
63 i = isoNameLoose.find(
s);
64 if (
i != std::string::npos) isoNameLoose.erase(
i,
s.length());
65 std::string photonLooseIsoSFName =
"AsgPhotonEfficiencyCorrectionTool_IsoSF" + isoNameLoose;
67 if (asg::ToolStore::contains<IAsgPhotonEfficiencyCorrectionTool>(photonLooseIsoSFName)) {
70 "Failed to retrieve loose photon isolation efficiency SF calculator");
72 return StatusCode::SUCCESS;
77 for (
auto currentSystematic : *
m_config->systSgKeyMapPhotons()) {
81 "Failed to retrieve photons");
84 for (
auto photonPtr : *photons) {
86 bool passSelection(
false);
87 if (photonPtr->isAvailable<
char>(
"passPreORSelection")) {
88 if (photonPtr->auxdataConst<
char>(
"passPreORSelection") == 1) {
92 if (photonPtr->isAvailable<
char>(
"passPreORSelectionLoose")) {
93 if (photonPtr->auxdataConst<
char>(
"passPreORSelectionLoose") == 1) {
98 if (!passSelection)
continue;
101 "Failed to set photon efficiency SF tool to nominal");
105 "Failed to get nominal photon SF");
108 ph_effID_dec(*photonPtr) = effSF;
110 double isoSF(1.), isoLooseSF(1.);
113 "Failed to set photon efficiency SF tool to nominal");
115 "Failed to get nominal photon SF");
117 ph_isoID_dec(*photonPtr) = isoSF;
121 "Failed to set photon efficiency SF tool to nominal");
123 "Failed to get nominal photon SF");
125 ph_isoID_dec(*photonPtr) = isoLooseSF;
129 if (currentSystematic.first !=
m_config->nominalHashValue())
continue;
131 double effSF_up(1.), effSF_down(1.);
133 "Failed to set photon efficiency SF tool to"
134 " ID up systematic");
136 "Failed to get photon efficiency SF:"
137 " systematic up ID SF");
140 "Failed to set photon efficiency SF tool to"
141 " ID up systematic");
143 "Failed to get photon efficiency SF:"
144 " systematic down ID SF");
148 ph_effIDUp_dec(*photonPtr) = effSF_up;
149 ph_effIDDown_dec(*photonPtr) = effSF_down;
152 double effIsoSF_up(1.), effIsoSF_down(1.);
153 double effLooseIsoSF_up(1.), effLooseIsoSF_down(1.);
156 "Failed to set photon efficiency SF tool to"
157 " isolation up systematic");
159 "Failed to get photon efficiency SF:"
160 " up systematic isolation");
162 "Failed to set photon efficiency SF tool to"
163 " isolation down systematic");
165 "Failed to get photon efficiency SF:"
166 " down systematic isolation");
170 "Failed to set photon efficiency SF tool to"
171 " isolation up systematic");
173 "Failed to get photon efficiency SF:"
174 " up systematic isolation");
176 "Failed to set photon efficiency SF tool to"
177 " isolation down systematic");
179 "Failed to get photon efficiency SF:"
180 " down systematic isolation");
188 ph_effIsoUp_dec(*photonPtr) = effIsoSF_up;
189 ph_effIsoDown_dec(*photonPtr) = effIsoSF_down;
190 ph_effLooseIsoUp_dec(*photonPtr) = effLooseIsoSF_up;
191 ph_effLooseIsoDown_dec(*photonPtr) = effLooseIsoSF_down;
194 return StatusCode::SUCCESS;