36 std::ifstream binBoundariesFile(path+
"binBoundaries.json");
37 nlohmann::json json_binBoundaries;
38 binBoundariesFile >> json_binBoundaries;
41 auto fillBinValues = [](
auto && binBoundaries,
const nlohmann::json &json_binBoundaries,
const std::string &binName){
42 if (json_binBoundaries.contains(binName)){
43 for (
auto binBoundary : json_binBoundaries[binName]) binBoundaries.push_back(binBoundary);
49 bool filledBins =
false;
50 std::string energyBinBoundaries =
"energyBinBoundaries";
51 std::string etaBinBoundaries =
"etaBinBoundaries";
52 std::string firstIntBinBoundaries =
"firstIntBinBoundaries";
53 std::string caloLayerBinBoundaries =
"caloLayerBinBoundaries";
59 ATH_MSG_ERROR(
"Could not bin boundaries in json file: " << energyBinBoundaries);
60 return StatusCode::FAILURE;
83 ATH_MSG_ERROR(
"Could not bin boundaries in json file: " << etaBinBoundaries);
84 return StatusCode::FAILURE;
92 ATH_MSG_ERROR(
"Could not bin boundaries in json file: " << firstIntBinBoundaries);
93 return StatusCode::FAILURE;
95 filledBins = fillBinValues(
m_caloLayerBins, json_binBoundaries, caloLayerBinBoundaries);
97 ATH_MSG_ERROR(
"Could not bin boundaries in json file: " << caloLayerBinBoundaries);
98 return StatusCode::FAILURE;
106 return StatusCode::SUCCESS;
111 if (binnedParameters) {
115 std::vector<double> energyBinLowerBoundaries_GeV;
122 std::ifstream inputFile_eoverp(path+
"eOverP.json");
123 nlohmann::json json_eoverp;
124 inputFile_eoverp >> json_eoverp;
126 std::ifstream inputFile_cellOrdering(path+
"cellOrdering.json");
127 nlohmann::json json_cellOrdering;
128 inputFile_cellOrdering >> json_cellOrdering;
132 int energyBinCounter = -1;
135 std::stringstream currentEBinStream;
136 currentEBinStream << std::fixed << std::setprecision(0) << thisEBin;
137 std::string currentEBin = currentEBinStream.str();
138 int etaBinCounter = -1;
142 std::stringstream currentEtaBinStream;
143 currentEtaBinStream << std::fixed << std::setprecision(1) << thisEtaBin;
144 std::string currentEtaBin = currentEtaBinStream.str();
149 std::string currentFirstIntBin = std::to_string(thisFirstIntRegionBin_Int);
150 std::string eOverPBin =
"energyBinLowerBound_"+currentEBin+
"_etaBinLowerBound_"+currentEtaBin+
"_firstIntBinLowerBound_"+currentFirstIntBin;
151 if (json_eoverp.contains(eOverPBin+
"_mean")){
152 binnedParameters->
setFudgeMean(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,json_eoverp[eOverPBin+
"_mean"]);
153 ATH_MSG_DEBUG(
"Setting mean for bin " << eOverPBin <<
" to " << json_eoverp[eOverPBin+
"_mean"]);
157 if (json_eoverp.contains(eOverPBin+
"_sigma")){
158 binnedParameters->
setFudgeStdDev(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,json_eoverp[eOverPBin+
"_sigma"]);
159 ATH_MSG_DEBUG(
"Setting sigma for bin " << eOverPBin <<
" to " << json_eoverp[eOverPBin+
"_sigma"]);
165 std::string cellOrderingBin = eOverPBin +
"_caloLayer_"+std::to_string(thisLayerBin);
166 if (json_cellOrdering.contains(cellOrderingBin+
"_norm1")){
167 binnedParameters->
setShapeParam(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,thisLayerBinEnum,
NORM1,json_cellOrdering[cellOrderingBin+
"_norm1"]);
168 ATH_MSG_DEBUG(
"Setting norm1 for bin " << cellOrderingBin <<
" to " << json_cellOrdering[cellOrderingBin+
"_norm1"]);
170 else ATH_MSG_DEBUG(
"No norm1 found for bin " << cellOrderingBin);
171 if (json_cellOrdering.contains(cellOrderingBin+
"_sigma1")){
172 binnedParameters->
setShapeParam(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,thisLayerBinEnum,
WIDTH1,json_cellOrdering[cellOrderingBin+
"_sigma1"]);
173 ATH_MSG_DEBUG(
"Setting sigma1 for bin " << cellOrderingBin <<
" to " << json_cellOrdering[cellOrderingBin+
"_sigma1"]);
175 else ATH_MSG_DEBUG(
"No sigma1 found for bin " << cellOrderingBin);
176 if (json_cellOrdering.contains(cellOrderingBin+
"_norm2")){
177 binnedParameters->
setShapeParam(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,thisLayerBinEnum,
NORM2,json_cellOrdering[cellOrderingBin+
"_norm2"]);
178 ATH_MSG_DEBUG(
"Setting norm2 for bin " << cellOrderingBin <<
" to " << json_cellOrdering[cellOrderingBin+
"_norm2"]);
180 else ATH_MSG_DEBUG(
"No norm2 found for bin " << cellOrderingBin);
181 if (json_cellOrdering.contains(cellOrderingBin+
"_sigma2")){
182 binnedParameters->
setShapeParam(energyBinCounter,etaBinCounter,thisFirstIntRegionBin,thisLayerBinEnum,
WIDTH2,json_cellOrdering[cellOrderingBin+
"_sigma2"]);
183 ATH_MSG_DEBUG(
"Setting sigma2 for bin " << cellOrderingBin <<
" to " << json_cellOrdering[cellOrderingBin+
"_sigma2"]);
185 else ATH_MSG_DEBUG(
"No sigma2 found for bin " << cellOrderingBin);
192 return StatusCode::SUCCESS;