12 #include "CoralBase/Attribute.h"
13 #include "CoralBase/AttributeListSpecification.h"
19 #include <CoralBase/Blob.h>
30 const bool initCondKey =
m_mezzJSON.value().empty() &&
36 return StatusCode::SUCCESS;
43 if (writeHandle.isValid()) {
44 ATH_MSG_DEBUG(
"CondHandle " << writeHandle.fullKey() <<
" is already valid."
45 <<
". In theory this should not be called, but may happen"
46 <<
" if multiple concurrent events are being processed out of order.");
47 return StatusCode::SUCCESS;
51 std::unique_ptr<MuonMDT_CablingMap> writeCdo{std::make_unique<MuonMDT_CablingMap>()};
55 if (!writeCdo->finalize_init(msgStream()))
return StatusCode::FAILURE;
57 ATH_CHECK(writeHandle.record(std::move(writeCdo)));
58 ATH_MSG_INFO(
"recorded new " << writeHandle.key() <<
" with range " << writeHandle.getRange() <<
" into Conditions Store");
59 return StatusCode::SUCCESS;
64 itr != readHandle->
end(); ++itr) {
72 return StatusCode::FAILURE;
75 data = *(
static_cast<const std::string*
>((atr[
"data"]).addressOfData()));
79 return StatusCode::SUCCESS;
87 if (!in_json.good()) {
89 return StatusCode::FAILURE;
94 return StatusCode::SUCCESS;
97 if (!readHandleMap.isValid()) {
98 ATH_MSG_ERROR(
"Null pointer to the read conditions object "<<readHandleMap.fullKey());
99 return StatusCode::FAILURE;
103 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandleMap.fullKey()
104 <<
" readCdoMap->size()= " << readHandleMap->size());
106 ATH_MSG_VERBOSE(
"Collection CondAttrListCollection CLID " << readHandleMap->clID());
111 return StatusCode::SUCCESS;
115 for (itrMap = readHandleMap->begin(); itrMap != readHandleMap->end(); ++itrMap) {
121 constexpr std::string_view
delimiter{
","};
122 const std::string map = *(
static_cast<const std::string*
>((atr[
"Map"]).addressOfData()));
131 return StatusCode::FAILURE;
138 ATH_MSG_INFO(
"Found a round 3 setup. Will add the cabling for BIS78 manually");
139 const int BIS_stat =
m_idHelperSvc->mdtIdHelper().stationNameIndex(
"BIS");
141 for (
unsigned int sector = 1; sector <= 8; ++sector) {
142 int is_biy{0}, tdcId{0};
143 auto increment_tdc = [&is_biy, &tdcId]() {
145 constexpr
int tdcMax = 17;
146 if (tdcId > tdcMax) {
151 constexpr
int tubesPerCsm = 54;
152 bool added_tdc =
true;
155 for (
int ml = 1; ml <= 2; ++ml) {
157 const int tubes_per_layer =
m_idHelperSvc->mdtIdHelper().tubeMax(layer_id);
159 const int first_tube = 6 * (1 + tdcId / 2) + tubesPerCsm * is_biy;
160 const bool valid_tube = (first_tube <= tubes_per_layer);
161 added_tdc |= valid_tube;
169 bis78_data.stationIndex = BIS_stat;
171 bis78_data.phi = sector;
174 bis78_data.mrod = (is_biy ? -1 : 7) + sector;
175 bis78_data.csm = is_biy ? 5 : 0;
176 bis78_data.subdetectorId = 99;
178 bis78_data.mezzanine_type = sector != 6 ? 61 : 71;
179 const unsigned int tube_coding = first_tube + bis78_data.tubes_per_layer * (4 + bis78_data.layer_block * ml);
181 <<
m_idHelperSvc->mdtIdHelper().tubeMax(layer_id) <<
" tdcId: "
182 << tdcId <<
" is_Biy: " << is_biy <<
" first_tube: " << first_tube);
187 <<
m_idHelperSvc->mdtIdHelper().stationNameString(bis78_data.stationIndex) <<
" " << bis78_data);
189 ATH_MSG_ERROR(
"Failed to add mezzanine card " << bis78_data);
190 return StatusCode::FAILURE;
193 if (bis78_data.tube != first_tube) {
194 ATH_MSG_ERROR(
"BIS78 data tube encoding failed. Expected " << first_tube <<
" got " << bis78_data.tube <<
".");
195 return StatusCode::FAILURE;
196 }
else if (bis78_data.multilayer != ml) {
197 ATH_MSG_ERROR(
"BIS78 data ml encoding failed. Expected " << ml <<
" got " << bis78_data.multilayer <<
".");
198 return StatusCode::FAILURE;
205 return StatusCode::SUCCESS;
209 map_data.
eta = *(
static_cast<const int*
>((atr[
"Eta"]).addressOfData()));
210 map_data.
phi = *(
static_cast<const int*
>((atr[
"Phi"]).addressOfData()));
211 map_data.
mrod = *(
static_cast<const int*
>((atr[
"MROD"]).addressOfData()));
212 map_data.
csm = *(
static_cast<const int*
>((atr[
"CSM"]).addressOfData()));
213 map_data.
channelId = *(
static_cast<const int*
>((atr[
"Chan"]).addressOfData()));
214 map_data.
mezzanine_type = *(
static_cast<const int*
>((atr[
"Mezzanine_Type"]).addressOfData()));
216 const std::string
chamber_name = *(
static_cast<const std::string*
>((atr[
"Chamber_Name"]).addressOfData()));
217 const std::string subdetector_id = *(
static_cast<const std::string*
>((atr[
"SubDet_Id"]).addressOfData()));
220 std::string stationNameString =
chamber_name.substr(0, 3);
222 if (stationNameString ==
"BOE") { stationNameString =
"BOL"; }
224 if (stationNameString ==
"BIX" || stationNameString ==
"BIY") {
225 stationNameString =
"BIS";
226 static std::atomic<bool> sInfoPrinted{
false};
228 ATH_MSG_INFO(
"Found an entry concerning the new BIS78 chambers. Will increase the number of tube per layer to "
251 static std::atomic<bool> stWarningPrinted{
false};
252 if (!stWarningPrinted) {
254 <<
" which is not reasonable, maybe related to ATLASRECTS-5961, continuing...");
255 stWarningPrinted =
true;
264 constexpr
unsigned int coding_block_size = 3;
265 const unsigned int n = info_map.size() >= coding_block_size ? coding_block_size : info_map.size();
266 bool decoded_full_block{
false};
267 for (
unsigned int i = 0;
i <
n; ++
i) {
284 decoded_full_block =
true;
289 if (decoded_full_block) info_map.erase(info_map.begin(), info_map.begin() + coding_block_size);
290 return decoded_full_block;
297 if (!in_json.good()) {
299 return StatusCode::FAILURE;
304 return StatusCode::SUCCESS;
309 if (!readHandleMez.isValid()) {
311 return StatusCode::FAILURE;
315 ATH_MSG_INFO(
"Size of CondAttrListCollection " << readHandleMez.fullKey()
316 <<
" readCdoMez->size()= " << readHandleMez->size());
322 return StatusCode::SUCCESS;
325 for (itrMez = readHandleMez->begin(); itrMez != readHandleMez->end(); ++itrMez) {
327 int sequence{0},
layer{0}, mezzanine_type{0};
329 mezzanine_type = *(
static_cast<const int*
>((atr[
"Mezzanine_Type"]).addressOfData()));
330 layer = *(
static_cast<const int*
>((atr[
"Layer"]).addressOfData()));
331 sequence = *(
static_cast<const int*
>((atr[
"Sequence"]).addressOfData()));
332 ATH_MSG_VERBOSE(
"Sequence load is " << sequence <<
" for the mezzanine type = " << mezzanine_type
333 <<
" for the layer number = " <<
layer);
337 ATH_MSG_ERROR(
"Could not add the mezzanine sequence to the map ");
338 return StatusCode::FAILURE;
343 return StatusCode::SUCCESS;
347 for (
const auto &cabl_chan :
payload.items()) {
349 const uint8_t id = mezz_payload[
"mezzId"];
350 const uint8_t nLay = mezz_payload[
"nTubeLayer"];
351 const MezzMapping
mapping = mezz_payload[
"tdcToTubeMap"];
353 msgStream()))
return StatusCode::FAILURE;
355 return StatusCode::SUCCESS;
359 for (
const auto &db_channel :
payload.items()) {
363 ms_channel.eta = ms_payload[
"eta"];
364 ms_channel.phi = ms_payload[
"phi"];
365 ms_channel.multilayer = ms_payload[
"ml"];
367 ms_channel.subdetectorId = ms_payload[
"subDet"];
368 ms_channel.csm = ms_payload[
"csm"];
369 ms_channel.mrod = ms_payload[
"mrod"];
371 ms_channel.mezzanine_type = ms_payload[
"mezzId"];
372 ms_channel.tdcId = ms_payload[
"tdcId"];
373 ms_channel.tube = ms_payload[
"tubeZero"];
375 ms_channel.layer = 1;
377 ms_channel.channelId = hedgeHogCard ? (*std::min_element(
378 hedgeHogCard->tubeToTdcMap().begin(),
379 hedgeHogCard->tubeToTdcMap().end())) : 0;
382 return StatusCode::SUCCESS;