62 if (!container.isValid()) {
63 ATH_MSG_ERROR(
"Could not find MdtDigitContainer called " << container.fullKey());
64 return StatusCode::SUCCESS;
66 ATH_MSG_DEBUG(
"Found MdtDigitContainer called " << container.fullKey());
72 return StatusCode::FAILURE;
79 return StatusCode::FAILURE;
83 std::vector<std::unique_ptr<MdtCsm>> csm_cache{};
87 const Identifier chid1 = mdtCollection->identify();
89 if (!condtionsPtr->
isGood(chid1))
continue;
92 if (!cabling_ptr->
convert(chid1, cabling_data)) {
94 return StatusCode::FAILURE;
98 for (
const MdtDigit* mdtDigit : *mdtCollection) {
99 const Identifier channelId = mdtDigit->identify();
101 if (!id_helper.
valid(channelId) || !cabling_ptr->
convert(channelId, cabling_data)) {
107 bool cabling = cabling_ptr->
getOnlineId(cabling_data, msgStream());
111 if (!bmgWarningPrinted) {
112 ATH_MSG_WARNING(
"Apparently BMG chambers are disconnected to the cabling. "
113 <<
"This has been checked to only appear in mc16a-like setups as the chambers were installed in "
114 "the end-of-the-year shutdown 2016. "
115 <<
"In any other case, be despaired in facing the villian and check what has gone wrong");
116 bmgWarningPrinted =
true;
120 ATH_MSG_ERROR(
"MDTcabling can't return an online ID for the channel : " << cabling_data);
121 return StatusCode::FAILURE;
125 auto amtHit = std::make_unique<MdtAmtHit>(cabling_data.tdcId, cabling_data.channelId, mdtDigit->isMasked());
127 int tdc_counts = mdtDigit->tdc();
129 uint16_t coarse = (tdc_counts >> 5) & 0xfff;
130 uint16_t fine = tdc_counts & 0x1f;
131 uint16_t
width = mdtDigit->adc();
133 amtHit->setValues(coarse, fine,
width);
136 ATH_MSG_DEBUG(
" Coarse time : " << coarse <<
" Fine time : " << fine <<
" Width : " <<
width);
142 if (!cabling_ptr->
getMultiLayerCode(cabling_data, csmId, csm_hash, msgStream())) {
143 ATH_MSG_ERROR(
"Hash generation failed for " << cabling_data);
144 return StatusCode::FAILURE;
148 std::unique_ptr<MdtCsm>& mdtCsm = csm_cache[csm_hash];
151 mdtCsm = std::make_unique<MdtCsm>(csmId, csm_hash, cabling_data.subdetectorId, cabling_data.mrod, cabling_data.csm);
154 if (cabling_data.csm != mdtCsm->CsmId() || cabling_data.subdetectorId != mdtCsm->SubDetId() || cabling_data.mrod != mdtCsm->MrodId()) {
156 wrongCsm.
csm = mdtCsm->CsmId();
157 wrongCsm.
mrod = mdtCsm->MrodId();
162 std::ignore = cabling_ptr->
getOfflineId(wrongCsm, msgStream());
164 cabling_ptr->
convert(wrongCsm,wrongId);
168 return StatusCode::FAILURE;
171 mdtCsm->push_back(std::move(amtHit));
175 for (
unsigned int hash= 0; hash < csm_cache.size(); ++hash) {
176 if (!csm_cache[hash])
continue;
177 ATH_CHECK(csmContainer->addCollection(csm_cache[hash].release(), hash));
179 return StatusCode::SUCCESS;
bool getMultiLayerCode(const CablingData &map_data, Identifier &multiLayer, IdentifierHash &mdtHashId, MsgStream &log) const
Transforms the identifier to an IdentifierHash corresponding to the multilayer In this case,...