20     const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
 
   21     auto translateTokenList = [
this, &idHelper](
const std::vector<std::string>& chNames){
 
   23         std::set<Identifier> transcriptedIds{};
 
   24         for (
const std::string& token : chNames) { 
 
   25             if (token.size() != 6) {
 
   26                 ATH_MSG_WARNING(
"Wrong format given for "<<token<<
". Expecting 6 characters");
 
   30             const std::string statName = token.substr(0, 3);
 
   31             const unsigned statEta = 
std::atoi(token.substr(3, 1).c_str()) * (token[4] == 
'A' ? 1 : -1);
 
   32             const unsigned statPhi = 
std::atoi(token.substr(5, 1).c_str());
 
   39             transcriptedIds.insert(eleId);
 
   42                 transcriptedIds.insert(secMlId);
 
   45         return transcriptedIds;
 
   48     std::vector <std::string>& selectedSt = m_selectStat.value();
 
   49     const std::vector <std::string>& excludedSt = m_excludeStat.value();
 
   50     selectedSt.erase(std::remove_if(selectedSt.begin(), selectedSt.end(),
 
   51                      [&excludedSt](
const std::string& token){
 
   52                         return std::ranges::find(excludedSt, token) != excludedSt.end();
 
   53                      }), selectedSt.end());
 
   55     if (selectedSt.size()) {
 
   56         m_testStations = translateTokenList(selectedSt);
 
   57         std::stringstream sstr{};
 
   59             sstr<<
" *** "<<m_idHelperSvc->toString(
id)<<std::endl;
 
   61         ATH_MSG_INFO(
"Test only the following stations "<<std::endl<<sstr.str());
 
   63         const std::set<Identifier> excluded = translateTokenList(excludedSt);
 
   65         for(
auto itr = idHelper.detectorElement_begin();
 
   66                  itr!= idHelper.detectorElement_end();++itr){
 
   67             if (!excluded.count(*itr)) {
 
   68                m_testStations.insert(*itr);
 
   72         if (!excluded.empty()) {
 
   73             std::stringstream excluded_report{};
 
   75                 excluded_report << 
" *** " << m_idHelperSvc->toStringDetEl(
id) << std::endl;
 
   77             ATH_MSG_INFO(
"Test all station except the following excluded ones " << std::endl << excluded_report.str());
 
   81     return StatusCode::SUCCESS;
 
   85     return StatusCode::SUCCESS;
 
   88     const EventContext& ctx{Gaudi::Hive::currentContext()};
 
   95     for (
const Identifier& test_me : m_testStations) {
 
   96       ATH_MSG_DEBUG(
"Test retrieval of sTgc detector element "<<m_idHelperSvc->toStringDetEl(test_me));
 
  102       if (m_idHelperSvc->stgcIdHelper().elementID(reElement->
identify()) != m_idHelperSvc->stgcIdHelper().elementID(test_me)) {
 
  103          ATH_MSG_FATAL(
"Expected to retrieve "<<m_idHelperSvc->toString(test_me)
 
  104                       <<
". But got instead "<<m_idHelperSvc->toString(reElement->
identify()));
 
  105          return StatusCode::FAILURE;
 
  107       ATH_CHECK(dumpToTree(ctx,gctx,reElement));
 
  112       for (
Amg::Vector3D axis :{Amg::Vector3D::UnitX(),Amg::Vector3D::UnitY(),Amg::Vector3D::UnitZ()}) {
 
  113          const double closure_mag = std::abs( (transClosure*
axis).
dot(
axis) - 1.);
 
  117             return StatusCode::FAILURE;
 
  120       const sTgcIdHelper& id_helper{m_idHelperSvc->stgcIdHelper()};
 
  122         for (
int chType = sTgcIdHelper::sTgcChannelTypes::Pad; 
chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++
chType) {
 
  123             bool isValidLay{
false};
 
  130             const unsigned int numChannel = reElement->
numChannels(layID);
 
  133                 bool isValidCh{
false};
 
  142                 const IdentifierHash layHash = reElement->
layerHash(chID);
 
  144                                <<
" --> layerHash: "<<
static_cast<unsigned>(layHash));
 
  146                 if (backCnv != chID) {
 
  147                     ATH_MSG_FATAL(
"The back and forth conversion of "<<m_idHelperSvc->toString(chID)
 
  148                                     <<
" failed. Got "<<m_idHelperSvc->toString(backCnv));
 
  149                     return StatusCode::FAILURE;
 
  151                 if (layHash != reElement->
layerHash(measHash)) {
 
  152                     ATH_MSG_FATAL(
"Constructing the layer hash from the identifier "<<
 
  153                                 m_idHelperSvc->toString(chID)<<
" leads to different layer hashes "<<
 
  154                                 layHash<<
" vs. "<< reElement->
layerHash(measHash));
 
  155                     return StatusCode::FAILURE;
 
  157                 if (
chType == sTgcIdHelper::sTgcChannelTypes::Strip) {
 
  158                     ATH_MSG_VERBOSE(
"Channel "<<m_idHelperSvc->toString(chID)<<
" strip position " 
  161                 else if (
chType == sTgcIdHelper::sTgcChannelTypes::Wire) {
 
  162                     ATH_MSG_VERBOSE(
"Channel "<<m_idHelperSvc->toString(chID)<<
" wireGroup position " 
  165                 else if (
chType == sTgcIdHelper::sTgcChannelTypes::Pad) {
 
  166                     ATH_MSG_VERBOSE(
"Channel "<<m_idHelperSvc->toString(chID)<<
" Pad position " 
  174     return StatusCode::SUCCESS;
 
  177 StatusCode GeoModelsTgcTest::dumpToTree(
const EventContext& ctx,
 
  199    const sTgcIdHelper& id_helper{m_idHelperSvc->stgcIdHelper()};
 
  201         for (
int chType = sTgcIdHelper::sTgcChannelTypes::Pad; 
chType <= sTgcIdHelper::sTgcChannelTypes::Wire; ++
chType) {
 
  202             unsigned int numWireGroup = 0;
 
  204             bool isValidLay{
false};
 
  221                 case sTgcIdHelper::sTgcChannelTypes::Pad:
 
  222                     m_numPads.push_back(reElement->
numChannels(layID));
 
  223                     m_numPadEta.push_back(reElement->
numPadEta(layID));
 
  224                     m_numPadPhi.push_back(reElement->
numPadPhi(layID));
 
  225                     m_padPhiShift.push_back(reElement->
padPhiShift(layID));
 
  231                         for(
unsigned int etaIndex = 1; etaIndex <= reElement->
numPadEta(layID); ++etaIndex) {                       
 
  232                             bool isValidPad{
false};
 
  238                                         <<m_idHelperSvc->toStringDetEl(reElement->
identify())
 
  242                             if (etaIndex == 1 && 
phiIndex == 1) {
 
  243                                 m_firstPadHeight.push_back(reElement->
padHeight(padID));                    
 
  245                             else if (etaIndex == 2 && 
phiIndex == 1) {
 
  246                                 m_padHeight.push_back(reElement->
padHeight(padID));
 
  249                             std::array<Amg::Vector2D,4> localPadCorners{make_array<Amg::Vector2D, 4>(
Amg::Vector2D::Zero())};
 
  251                             std::array<Amg::Vector3D,4> globalPadCorners{make_array<Amg::Vector3D, 4>(
Amg::Vector3D::Zero())};
 
  256                             m_localPadPos.push_back(localPadPos);
 
  257                             m_localPadCornerBL.push_back(localPadCorners[0]);
 
  258                             m_localPadCornerBR.push_back(localPadCorners[1]);
 
  259                             m_localPadCornerTL.push_back(localPadCorners[2]);
 
  260                             m_localPadCornerTR.push_back(localPadCorners[3]);
 
  264                             m_hitPosition.push_back(hitPos);
 
  265                             m_padNumber.push_back(reElement->
padNumber(hitPos, padID));
 
  270                             m_globalPadPos.push_back(globalPadPos);
 
  271                             m_globalPadCornerBR.push_back(globalPadCorners[0]);
 
  272                             m_globalPadCornerBL.push_back(globalPadCorners[1]);
 
  273                             m_globalPadCornerTR.push_back(globalPadCorners[2]);
 
  274                             m_globalPadCornerTL.push_back(globalPadCorners[3]);
 
  276                             m_padEta.push_back(reElement->
padEta(padID));
 
  277                             m_padPhi.push_back(reElement->
padPhi(padID));
 
  278                             m_padGasGap.push_back(
layer);
 
  280                             if (!(etaIndex == 1 && 
phiIndex == 1)) 
continue;
 
  283                             m_padRot.push_back(locToGlob);
 
  284                             m_padRotGasGap.push_back(
layer);
 
  289                 case sTgcIdHelper::sTgcChannelTypes::Strip:{
 
  292                     m_stripPitch = design.stripPitch();
 
  293                     m_stripWidth = design.stripWidth(); 
 
  294                     for (
unsigned int strip = 1; strip <= reElement->
numChannels(layID); ++strip) {
 
  295                         bool isValidStrip{
false};
 
  301                                         <<m_idHelperSvc->toStringDetEl(reElement->
identify())
 
  302                                         <<
" layer: "<<
layer<<
" strip: "<<strip<<
" channelType: "<<
chType);
 
  307                         m_stripGasGap.push_back(
layer);
 
  308                         m_stripNum.push_back(strip);
 
  309                         m_stripLengths.push_back(reElement->
stripLength(stripID));
 
  311                         if (strip != 1) 
continue;
 
  314                         m_stripRot.push_back(locToGlob);
 
  315                         m_stripRotGasGap.push_back(
layer);
 
  319                 } 
case sTgcIdHelper::sTgcChannelTypes::Wire: {
 
  322                     numWireGroup = design.numStrips();                    
 
  323                     m_wirePitch = design.stripPitch();
 
  324                     m_wireWidth = design.stripWidth();
 
  325                     m_numWires.push_back(design.nAllWires());
 
  326                     m_firstWireGroupWidth.push_back(design.numWiresInGroup(1));
 
  327                     m_numWireGroups.push_back(numWireGroup);
 
  328                     m_wireCutout.push_back(design.wireCutout()); 
 
  329                     for (
unsigned int wireGroup = 1; wireGroup <= numWireGroup; ++wireGroup) {
 
  330                         bool isValidWire{
false};
 
  336                                         <<m_idHelperSvc->toStringDetEl(reElement->
identify())
 
  337                                         <<
" layer: "<<
layer<<
" wireGroup: "<<wireGroup<<
" channelType: "<<
chType);
 
  342                         m_wireGroupGasGap.push_back(
layer);
 
  343                         m_wireGroupNum.push_back(wireGroup);
 
  345                         if (wireGroup != 1) 
continue;
 
  348                         m_wireGroupRot.push_back(locToGlob);
 
  349                         m_wireGroupRotGasGap.push_back(
layer);
 
  356    return m_tree.fill(ctx) ? StatusCode::SUCCESS : StatusCode::FAILURE;