38 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.");
39 return StatusCode::SUCCESS;
43 std::unique_ptr<PixelDCSTempData> writeCdo(std::make_unique<PixelDCSTempData>());
46 const EventIDBase start{EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, 0, 0, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
47 const EventIDBase stop {EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM-1, EventIDBase::UNDEFNUM, EventIDBase::UNDEFNUM};
49 EventIDRange rangeW{start, stop};
51 std::vector<int> channelsOutOfRange{};
52 std::vector<int> channelsWithNoMeasurement{};
58 if (readCdo==
nullptr) {
60 return StatusCode::FAILURE;
63 if (not readHandle.
range(rangeW)) {
65 return StatusCode::FAILURE;
67 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandle.
fullKey() <<
" readCdo->size()= " << readCdo->
size());
71 auto outsideValidRange = [] (
const float t){
72 return ( (t > 100.0f) or ( t< -80.f) ) ;
75 countChannels=readCdo->
size();
76 for (
const auto & attrList : *readCdo) {
77 const auto channelNumber{attrList.first};
78 const auto & payload{attrList.second};
79 if (payload.exists(parameterName) and not payload[parameterName].isNull()) {
80 float val = payload[parameterName].data<
float>();
81 if (outsideValidRange(val)) {
82 channelsOutOfRange.push_back(channelNumber);
83 val = defaultTemperature;
85 writeCdo->setTemperature((
int)channelNumber, val);
87 channelsWithNoMeasurement.push_back(channelNumber);
88 writeCdo->setTemperature((
int)channelNumber, defaultTemperature);
92 for (
int i=0; i<(int)
m_pixelID->wafer_hash_max(); i++) {
93 writeCdo->setTemperature(i, defaultTemperature);
96 if (
const int nInvalid = channelsWithNoMeasurement.size(); nInvalid>0){
97 ATH_MSG_INFO(
"Out of "<<countChannels<<
", "<<nInvalid<<
" channels have no temperature measurement, and were set to "<<defaultTemperature);
98 if ( msgLevel( MSG::DEBUG )){
99 std::string dbgMsg{
"Enumerating the channel numbers:\n"};
100 for (
auto i:channelsWithNoMeasurement){
101 dbgMsg += std::to_string(i) +
" ";
107 if (
const int nOutOfRange = channelsOutOfRange.size(); nOutOfRange>0){
108 ATH_MSG_INFO(
"Out of "<<countChannels<<
", "<<nOutOfRange<<
" channels have temperatures outside the range -80 to 100, and were set to "<<defaultTemperature);
109 if ( msgLevel( MSG::DEBUG )){
110 std::string dbgMsg{
"Enumerating the channel numbers:\n"};
111 for (
auto i:channelsOutOfRange){
112 dbgMsg += std::to_string(i) +
" ";
119 if (writeHandle.
record(rangeW, std::move(writeCdo)).isFailure()) {
120 ATH_MSG_FATAL(
"Could not record PixelDCSTempData " << writeHandle.
key() <<
" with EventRange "
121 << writeHandle.
getRange() <<
" into Conditions Store");
122 return StatusCode::FAILURE;
124 ATH_MSG_INFO(
"recorded new CDO " << writeHandle.
key() <<
" with range "
125 << writeHandle.
getRange() <<
" into Conditions Store");
127 return StatusCode::SUCCESS;