21 ATH_CHECK(m_cablingKey.initialize(!m_cablingKey.empty()));
25 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
26 auto translateTokenList = [
this, &idHelper](
const std::vector<std::string>& chNames){
28 std::set<Identifier> transcriptedIds{};
29 for (
const std::string& token : chNames) {
30 if (token.size() != 6) {
31 ATH_MSG_WARNING(
"Wrong format given for "<<token<<
". Expecting 6 characters");
35 const std::string statName = token.substr(0, 3);
36 const unsigned statEta =
std::atoi(token.substr(3, 1).c_str()) * (token[4] ==
'A' ? 1 : -1);
37 const unsigned statPhi =
std::atoi(token.substr(5, 1).c_str());
44 transcriptedIds.insert(eleId);
47 transcriptedIds.insert(secMlId);
50 return transcriptedIds;
53 std::vector <std::string>& selectedSt = m_selectStat.value();
54 const std::vector <std::string>& excludedSt = m_excludeStat.value();
55 selectedSt.erase(std::remove_if(selectedSt.begin(), selectedSt.end(),
56 [&excludedSt](
const std::string& token){
57 return std::ranges::find(excludedSt, token) != excludedSt.end();
58 }), selectedSt.end());
60 if (selectedSt.size()) {
61 m_testStations = translateTokenList(selectedSt);
62 std::stringstream sstr{};
64 sstr<<
" *** "<<m_idHelperSvc->toString(
id)<<std::endl;
66 ATH_MSG_INFO(
"Test only the following stations "<<std::endl<<sstr.str());
68 const std::set<Identifier> excluded = translateTokenList(excludedSt);
70 for(
auto itr = idHelper.detectorElement_begin();
71 itr!= idHelper.detectorElement_end();++itr){
72 if (!excluded.count(*itr)) {
73 m_testStations.insert(*itr);
77 if (!excluded.empty()) {
78 std::stringstream excluded_report{};
80 excluded_report <<
" *** " << m_idHelperSvc->toStringDetEl(
id) << std::endl;
82 ATH_MSG_INFO(
"Test all station except the following excluded ones " << std::endl << excluded_report.str());
86 return StatusCode::SUCCESS;
90 return StatusCode::SUCCESS;
93 const EventContext& ctx{Gaudi::Hive::currentContext()};
100 const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
101 for (
const Identifier& test_me : m_testStations) {
103 const std::string detStr = m_idHelperSvc->toStringDetEl(test_me);
104 ATH_MSG_DEBUG(
"Test retrieval of Mdt detector element "<<detStr);
110 if (reElement->
identify() != test_me) {
111 ATH_MSG_FATAL(
"Expected to retrieve "<<detStr<<
". But got instead "<<m_idHelperSvc->toStringDetEl(reElement->
identify()));
112 return StatusCode::FAILURE;
114 ATH_CHECK(dumpToTree(ctx,gctx,reElement));
121 return StatusCode::FAILURE;
123 for (
unsigned int lay = 1 ; lay <= reElement->
numLayers() ; ++lay ) {
130 ATH_MSG_FATAL(
"Failed to convert "<<m_idHelperSvc->toString(
tube_id)<<
" back and forth "<<m_idHelperSvc->toString(cnv_tube_id));
131 return StatusCode::FAILURE;
136 dumpReadoutSideXML();
137 return StatusCode::SUCCESS;
139 void GeoModelMdtTest::dumpReadoutSideXML()
const {
140 if (m_swapRead.empty())
return;
141 std::ofstream swapReadXML{m_swapRead};
142 if (!swapReadXML.good()) {
146 std::set<Identifier> chamberIDs{};
147 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
148 swapReadXML<<
"<Table name=\"MdtTubeROSides\">"<<std::endl;
151 itr != idHelper.detectorElement_end();
155 if(!readoutEle)
continue;
156 if (!chamberIDs.insert(idHelper.elementID(
swap)).second)
continue;
158 swapReadXML<<
" <Row ";
159 swapReadXML<<
"MDTTUBEROSIDES_DATA_ID=\""<<
counter<<
"\" ";
160 swapReadXML<<
"stationName=\""<<m_idHelperSvc->stationNameString(
swap)<<
"\" ";
161 swapReadXML<<
"stationEta=\""<<m_idHelperSvc->stationEta(
swap)<<
"\" ";
162 swapReadXML<<
"stationPhi=\""<<m_idHelperSvc->stationPhi(
swap)<<
"\" ";
163 swapReadXML<<
"side=\""<<
side<<
"\" ";
164 swapReadXML<<
"/>"<<std::endl;
167 swapReadXML<<
"</Table>"<<std::endl;
170 StatusCode GeoModelMdtTest::dumpToTree(
const EventContext& ctx,
195 for (
unsigned int lay = 1; lay <= readoutEle->
numLayers(); ++lay) {
198 if (!readoutEle->
isValid(measHash))
continue;
200 m_tubeLay.push_back(lay);
201 m_tubeNum.push_back(
tube);
202 m_tubeTransform.push_back(tubeTransform);
204 readoutEle->
center(gctx, measHash));
205 m_roPos.push_back(readoutEle->
readOutPos(gctx, measHash));
206 m_tubeLength.push_back(readoutEle->
tubeLength(measHash));
208 m_wireLength.push_back(readoutEle->
wireLength(measHash));
212 !
cabling->getOnlineId(translation, msgStream())){
214 return StatusCode::FAILURE;
216 m_cablingCSM.push_back(translation.csm);
217 m_cablingMROD.push_back(translation.mrod);
218 m_cablingTdcId.push_back(translation.tdcId);
219 m_cablingTdcCh.push_back(translation.channelId);
224 return m_tree.fill(ctx) ? StatusCode::SUCCESS : StatusCode::FAILURE;