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()};
98 const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
99 for (
const Identifier& test_me : m_testStations) {
101 const std::string detStr = m_idHelperSvc->toStringDetEl(test_me);
102 ATH_MSG_DEBUG(
"Test retrieval of Mdt detector element "<<detStr);
108 if (reElement->
identify() != test_me) {
109 ATH_MSG_FATAL(
"Expected to retrieve "<<detStr<<
". But got instead "<<m_idHelperSvc->toStringDetEl(reElement->
identify()));
110 return StatusCode::FAILURE;
112 ATH_CHECK(dumpToTree(ctx,gctx,reElement));
119 return StatusCode::FAILURE;
121 for (
unsigned int lay = 1 ; lay <= reElement->
numLayers() ; ++lay ) {
128 ATH_MSG_FATAL(
"Failed to convert "<<m_idHelperSvc->toString(
tube_id)<<
" back and forth "<<m_idHelperSvc->toString(cnv_tube_id));
129 return StatusCode::FAILURE;
134 dumpReadoutSideXML();
135 return StatusCode::SUCCESS;
137 void GeoModelMdtTest::dumpReadoutSideXML()
const {
138 if (m_swapRead.empty())
return;
139 std::ofstream swapReadXML{m_swapRead};
140 if (!swapReadXML.good()) {
144 std::set<Identifier> chamberIDs{};
145 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
146 swapReadXML<<
"<Table name=\"MdtTubeROSides\">"<<std::endl;
149 itr != idHelper.detectorElement_end();
153 if(!readoutEle)
continue;
154 if (!chamberIDs.insert(idHelper.elementID(
swap)).second)
continue;
156 swapReadXML<<
" <Row ";
157 swapReadXML<<
"MDTTUBEROSIDES_DATA_ID=\""<<
counter<<
"\" ";
158 swapReadXML<<
"stationName=\""<<m_idHelperSvc->stationNameString(
swap)<<
"\" ";
159 swapReadXML<<
"stationEta=\""<<m_idHelperSvc->stationEta(
swap)<<
"\" ";
160 swapReadXML<<
"stationPhi=\""<<m_idHelperSvc->stationPhi(
swap)<<
"\" ";
161 swapReadXML<<
"side=\""<<
side<<
"\" ";
162 swapReadXML<<
"/>"<<std::endl;
165 swapReadXML<<
"</Table>"<<std::endl;
168 StatusCode GeoModelMdtTest::dumpToTree(
const EventContext& ctx,
190 for (
unsigned int lay = 1; lay <= readoutEle->
numLayers(); ++lay) {
193 if (!readoutEle->
isValid(measHash))
continue;
195 m_tubeLay.push_back(lay);
196 m_tubeNum.push_back(
tube);
197 m_tubeTransform.push_back(tubeTransform);
199 readoutEle->
center(gctx, measHash));
200 m_roPos.push_back(readoutEle->
readOutPos(gctx, measHash));
201 m_tubeLength.push_back(readoutEle->
tubeLength(measHash));
203 m_wireLength.push_back(readoutEle->
wireLength(measHash));
207 return m_tree.fill(ctx) ? StatusCode::SUCCESS : StatusCode::FAILURE;