24 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
25 auto translateTokenList = [
this, &idHelper](
const std::vector<std::string>& chNames){
27 std::set<Identifier> transcriptedIds{};
28 for (
const std::string& token : chNames) {
29 if (token.size() != 6) {
30 ATH_MSG_WARNING(
"Wrong format given for "<<token<<
". Expecting 6 characters");
34 const std::string statName = token.substr(0, 3);
35 const unsigned statEta =
std::atoi(token.substr(3, 1).c_str()) * (token[4] ==
'A' ? 1 : -1);
36 const unsigned statPhi =
std::atoi(token.substr(5, 1).c_str());
43 transcriptedIds.insert(eleId);
46 transcriptedIds.insert(secMlId);
49 return transcriptedIds;
52 std::vector <std::string>& selectedSt = m_selectStat.value();
53 const std::vector <std::string>& excludedSt = m_excludeStat.value();
54 selectedSt.erase(std::remove_if(selectedSt.begin(), selectedSt.end(),
55 [&excludedSt](
const std::string& token){
56 return std::ranges::find(excludedSt, token) != excludedSt.end();
57 }), selectedSt.end());
59 if (selectedSt.size()) {
60 m_testStations = translateTokenList(selectedSt);
61 std::stringstream sstr{};
63 sstr<<
" *** "<<m_idHelperSvc->toString(
id)<<std::endl;
65 ATH_MSG_INFO(
"Test only the following stations "<<std::endl<<sstr.str());
67 const std::set<Identifier> excluded = translateTokenList(excludedSt);
69 for(
auto itr = idHelper.detectorElement_begin();
70 itr!= idHelper.detectorElement_end();++itr){
71 if (!excluded.count(*itr)) {
72 m_testStations.insert(*itr);
76 if (!excluded.empty()) {
77 std::stringstream excluded_report{};
79 excluded_report <<
" *** " << m_idHelperSvc->toStringDetEl(
id) << std::endl;
81 ATH_MSG_INFO(
"Test all station except the following excluded ones " << std::endl << excluded_report.str());
85 return StatusCode::SUCCESS;
89 return StatusCode::SUCCESS;
92 const EventContext& ctx{Gaudi::Hive::currentContext()};
99 const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
100 for (
const Identifier& test_me : m_testStations) {
102 const std::string detStr = m_idHelperSvc->toStringDetEl(test_me);
103 ATH_MSG_DEBUG(
"Test retrieval of Mdt detector element "<<detStr);
109 if (reElement->
identify() != test_me) {
110 ATH_MSG_FATAL(
"Expected to retrieve "<<detStr<<
". But got instead "<<m_idHelperSvc->toStringDetEl(reElement->
identify()));
111 return StatusCode::FAILURE;
113 ATH_CHECK(dumpToTree(ctx,gctx,reElement));
120 return StatusCode::FAILURE;
122 for (
unsigned int lay = 1 ; lay <= reElement->
numLayers() ; ++lay ) {
129 ATH_MSG_FATAL(
"Failed to convert "<<m_idHelperSvc->toString(
tube_id)<<
" back and forth "<<m_idHelperSvc->toString(cnv_tube_id));
130 return StatusCode::FAILURE;
135 dumpReadoutSideXML();
136 return StatusCode::SUCCESS;
138 void GeoModelMdtTest::dumpReadoutSideXML()
const {
139 if (m_swapRead.empty())
return;
140 std::ofstream swapReadXML{m_swapRead};
141 if (!swapReadXML.good()) {
145 std::set<Identifier> chamberIDs{};
146 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
147 swapReadXML<<
"<Table name=\"MdtTubeROSides\">"<<std::endl;
150 itr != idHelper.detectorElement_end();
154 if(!readoutEle)
continue;
155 if (!chamberIDs.insert(idHelper.elementID(
swap)).second)
continue;
157 swapReadXML<<
" <Row ";
158 swapReadXML<<
"MDTTUBEROSIDES_DATA_ID=\""<<
counter<<
"\" ";
159 swapReadXML<<
"stationName=\""<<m_idHelperSvc->stationNameString(
swap)<<
"\" ";
160 swapReadXML<<
"stationEta=\""<<m_idHelperSvc->stationEta(
swap)<<
"\" ";
161 swapReadXML<<
"stationPhi=\""<<m_idHelperSvc->stationPhi(
swap)<<
"\" ";
162 swapReadXML<<
"side=\""<<
side<<
"\" ";
163 swapReadXML<<
"/>"<<std::endl;
166 swapReadXML<<
"</Table>"<<std::endl;
169 StatusCode GeoModelMdtTest::dumpToTree(
const EventContext& ctx,
191 for (
unsigned int lay = 1; lay <= readoutEle->
numLayers(); ++lay) {
194 if (!readoutEle->
isValid(measHash))
continue;
196 m_tubeLay.push_back(lay);
197 m_tubeNum.push_back(
tube);
198 m_tubeTransform.push_back(tubeTransform);
200 readoutEle->
center(gctx, measHash));
201 m_roPos.push_back(readoutEle->
readOutPos(gctx, measHash));
202 m_tubeLength.push_back(readoutEle->
tubeLength(measHash));
204 m_wireLength.push_back(readoutEle->
wireLength(measHash));
208 return m_tree.fill(ctx) ? StatusCode::SUCCESS : StatusCode::FAILURE;