56 ATH_MSG_DEBUG(
"CondHandle " << writeHandle.
fullKey() <<
" is already valid.. In theory this should not be called, but may happen if multiple concurrent events are being processed out of order.");
57 return StatusCode::SUCCESS;
62 if (not pixelDetEleHandle.
isValid() or elements==
nullptr) {
64 return StatusCode::FAILURE;
75 auto writeCdo = std::make_unique<PixelChargeCalibCondData>(
m_pixelID->wafer_hash_max());
77 const EventIDBase start{EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, 0, 0, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
78 const EventIDBase stop {EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
79 EventIDRange rangeW{start, stop};
80 unsigned int channel_warnings=0;
81 unsigned int max_channel_warnings=10;
82 unsigned int min_invalid_channel=std::numeric_limits<unsigned int>::max();
83 unsigned int max_invalid_channel=0;
87 if (readCdo==
nullptr) {
89 return StatusCode::FAILURE;
92 if (not readHandle.
range(rangeW)) {
94 return StatusCode::FAILURE;
96 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
99 std::unique_ptr<IChargeCalibrationParser> pParser{};
100 for (
const auto & attrList : *readCdo) {
104 if (payload.exists(
"data_array") and not payload[
"data_array"].isNull()) {
105 pParser = std::make_unique<Run3ChargeCalibParser>(configData, elements,
m_pixelID);
106 const nlohmann::json &jsonData = nlohmann::json::parse(payload[
"data_array"].
data<std::string>());
107 for (
const auto &[hash,
data] : jsonData.items()) {
108 const unsigned int moduleHash = std::stoul(hash);
112 return StatusCode::FAILURE;
114 writeCdo -> setAllFromBundle(moduleHash, b);
116 }
else if (payload.exists(
"data") and not payload[
"data"].isNull()) {
117 pParser = std::make_unique<Run2ChargeCalibParser>(configData, elements,
m_pixelID);
120 if (channelNumber >=
m_pixelID->wafer_hash_max()) {
121 min_invalid_channel = std::min(min_invalid_channel,channelNumber);
122 max_invalid_channel = std::max(max_invalid_channel,channelNumber);
123 if (channel_warnings++ < max_channel_warnings) {
124 ATH_MSG_WARNING(
"Invalid module hash (COOL channel number: " << channelNumber <<
" !< " <<
m_pixelID->wafer_hash_max() <<
")."
125 << (channel_warnings==max_channel_warnings ?
" Further such warnings will not be reported." :
""));
129 const unsigned int moduleHash = channelNumber;
130 std::string stringStatus = payload[
"data"].data<std::string>();
134 return StatusCode::FAILURE;
136 writeCdo -> setAllFromBundle(moduleHash, b);
138 ATH_MSG_ERROR(
"payload[\"data\"] does not exist for ChanNum " << channelNumber);
139 return StatusCode::FAILURE;
143 for (
unsigned int moduleHash{}; moduleHash <
m_pixelID->wafer_hash_max(); moduleHash++) {
150 const std::vector<Thresholds> allDefaultThresholds(numFE, defaultThreshold);
153 const std::vector<LegacyFitParameters> allDefaultFitParams(numFE, defaultParam);
156 const std::vector<LinearFitParameters> allDefaultLinearParams(numFE, defaultLinParam);
159 writeCdo -> setThresholds(
type, moduleHash, allDefaultThresholds);
160 writeCdo -> setLegacyFitParameters(
type, moduleHash, allDefaultFitParams);
161 writeCdo -> setLinearFitParameters(
type, moduleHash, allDefaultLinearParams);
163 writeCdo -> setTotResolutions(moduleHash, std::vector<Resolutions>(numFE, {0.f, 0.f}));
166 if (channel_warnings>max_channel_warnings) {
167 ATH_MSG_WARNING(
"Encountered " << channel_warnings <<
" invalid channel numbers (range " << min_invalid_channel <<
" .. "
168 << max_invalid_channel <<
" !< " <<
m_pixelID->wafer_hash_max() <<
")");
173 for (
unsigned int moduleHash{}; moduleHash <
m_pixelID->wafer_hash_max(); moduleHash++) {
182 writeCdo -> setThresholds(
type, moduleHash, std::vector<Thresholds>(numFE,
defaults));
187 if (writeHandle.
record(rangeW, std::move(writeCdo)).isFailure()) {
188 ATH_MSG_FATAL(
"Could not record PixelChargeCalibCondData " << writeHandle.
key() <<
" with EventRange " << rangeW <<
" into Conditions Store");
189 return StatusCode::FAILURE;
191 ATH_MSG_INFO(
"recorded new CDO " << writeHandle.
key() <<
" with range " << rangeW <<
" into Conditions Store");
193 return StatusCode::SUCCESS;