22 float coerceToFloatRange(
const double value) {
25 return static_cast<float>(std::clamp(
value,minfloat,maxfloat));
71 if (writeKeyData==
nullptr)
continue;
107 ATH_MSG_FATAL(
"IgnoreDefect != IgnoreDefectsParameters, check job options!");
108 return StatusCode::FAILURE;
111 return StatusCode::SUCCESS;
118 bool validWriteCondHandle{
true};
123 ATH_MSG_DEBUG(
"CondHandle " << writeHandleData[
i].fullKey() <<
" is already valid."
124 <<
". In theory this should not be called, but may happen"
125 <<
" if multiple concurrent events are being processed out of order.");
127 validWriteCondHandle =
false;
131 if (writeHandleInfo.isValid()) {
132 ATH_MSG_DEBUG(
"CondHandle " << writeHandleInfo.fullKey() <<
" is already valid."
133 <<
". In theory this should not be called, but may happen"
134 <<
" if multiple concurrent events are being processed out of order.");
136 validWriteCondHandle =
false;
138 if (validWriteCondHandle)
return StatusCode::SUCCESS;
144 if (readCdo[
i]==
nullptr) {
145 ATH_MSG_FATAL(
"Null pointer to the read conditions object " << readHandle[
i].
key());
146 return StatusCode::FAILURE;
149 writeHandleData[
i].addDependency(readHandle[
i]);
150 writeHandleInfo.addDependency(readHandle[
i]);
151 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandle[
i].fullKey() <<
" readCdo->size()= " << readCdo[
i]->
size());
158 if (elements==
nullptr) {
160 return StatusCode::FAILURE;
163 writeHandleData[
i].addDependency(sctDetEle);
165 writeHandleInfo.addDependency(sctDetEle);
168 std::unique_ptr<SCT_CalibDefectData> writeCdoData[
NFEATURES]{
nullptr,
nullptr};
170 writeCdoData[
i] = std::make_unique<SCT_CalibDefectData>();
172 std::unique_ptr<SCT_AllGoodStripInfo> writeCdoInfo{std::make_unique<SCT_AllGoodStripInfo>()};
176 (*writeCdoInfo)[
w][
s]=
true;
188 for (; itLoop!=itLoop_end; ++itLoop) {
195 IdentifierHash hashId1;
201 p_element = (elements->getDetectorElement(hashId1));
202 bool phiSwap1Present{p_element->swapPhiReadoutDirection()};
211 const std::string &gaindefectb{(anAttrList[
"defectBeginChannel"]).data<std::string>()};
212 const std::string &gaindefecte{(anAttrList[
"defectEndChannel"]).data<std::string>()};
213 const std::string &defectType{(anAttrList[
"defectType"]).data<std::string>()};
214 const std::string &parValue{(anAttrList[
"defectParameter"]).data<std::string>()};
217 std::vector<unsigned int> gaindefectbvec;
218 fillEmptyVectorFromString(gaindefectb, gaindefectbvec);
219 std::vector<unsigned int> gaindefectevec;
220 fillEmptyVectorFromString(gaindefecte, gaindefectevec);
221 std::vector<unsigned int> defectTypevec;
222 fillEmptyVectorFromString(defectType, defectTypevec);
223 std::vector<double> parValuevec;
224 fillEmptyVectorFromString(parValue, parValuevec);
227 long unsigned int gainvec_size{gaindefectbvec.size()};
228 for (
long unsigned int i{0};
i<gainvec_size; ++
i) {
231 ATH_MSG_DEBUG(
"Defect type " << defectTypevec[
i] <<
" is not defined! This defect is ignored.");
234 theseDefects.
begDefects.push_back(gaindefectbvec[
i]);
235 theseDefects.
endDefects.push_back(gaindefectevec[
i]);
236 theseDefects.
parValue.push_back(coerceToFloatRange(parValuevec[
i]));
241 for (
unsigned int i{0};
i<theseDefects.
begDefects.size(); ++
i) {
243 bool ignoreDefect{
false};
259 if (not ignoreDefect) {
264 const unsigned int waferId0{hashId0};
267 thisWaferIsGoodData0[side0StripNumber] =
false;
269 const unsigned int waferId1{hashId1};
272 thisWaferIsGoodData1[side1StripNumber] =
false;
285 if (not (writeCdoData[
i]->addModule(moduleId, theseDefects))) {
286 ATH_MSG_ERROR(
"Unable to add module " << moduleId <<
" to NPtGain defect map");
287 return StatusCode::RECOVERABLE;
289 ATH_MSG_DEBUG(
"Defects for module " << moduleId <<
" added to NPG defect map");
293 ATH_MSG_DEBUG(
"No NoiseOccupancy defects for module " << moduleId);
296 if (not (writeCdoData[
i]->addModule(moduleId, theseDefects))) {
297 ATH_MSG_ERROR(
"Unable to add module " << moduleId <<
" to NoiseOccupancy defect map");
298 return StatusCode::RECOVERABLE;
300 ATH_MSG_DEBUG(
"Defects for module " << moduleId <<
" added to NoiseOccupancy defect map");
307 ATH_MSG_DEBUG(
"There are " << writeCdoInfo->size() <<
" elements in " << writeHandleInfo.key());
308 if (writeHandleInfo.record(std::move(writeCdoInfo)).isFailure()) {
309 ATH_MSG_FATAL(
"Could not record SCT_AllGoodStripInfo " << writeHandleInfo.key()
310 <<
" with EventRange " << writeHandleInfo.getRange() <<
" into Conditions Store");
311 return StatusCode::FAILURE;
313 ATH_MSG_INFO(
"recorded new CDO " << writeHandleInfo.key() <<
" with range " << writeHandleInfo.getRange() <<
" into Conditions Store");
316 if (writeHandleData[
i].record(std::move(writeCdoData[
i])).isFailure()) {
317 ATH_MSG_FATAL(
"Could not record SCT_CalibDefectData " << writeHandleData[
i].
key()
318 <<
" with EventRange " << writeHandleData[
i].
getRange() <<
" into Conditions Store");
319 return StatusCode::FAILURE;
321 ATH_MSG_INFO(
"recorded new CDO " << writeHandleData[
i].
key() <<
" with range " << writeHandleData[
i].
getRange() <<
" into Conditions Store");
324 return StatusCode::SUCCESS;
329 return StatusCode::SUCCESS;