6 #include "GaudiKernel/MsgStream.h"
49 #include "GaudiKernel/SystemOfUnits.h"
50 #include "GeoModelKernel/GeoDefinitions.h"
61 #define useAssemblies false
64 const std::map<std::string, float> rpcYTrans = {
65 std::make_pair<std::string, float>(
"RPC26", -9.1),
66 std::make_pair<std::string, float>(
"RPC27", -9.1),
67 std::make_pair<std::string, float>(
"RPC28", -27.7),
68 std::make_pair<std::string, float>(
"RPC29", -8.8),
70 const std::map<std::string, float> rpcZTrans = {
71 std::make_pair<std::string, float>(
"RPC26", 3.22),
72 std::make_pair<std::string, float>(
"RPC27", 3.06),
73 std::make_pair<std::string, float>(
"RPC28", 3.11),
74 std::make_pair<std::string, float>(
"RPC29", 3.11),
85 std::map<std::string, GeoFullPhysVol*> * mapFPV,
86 std::map<std::string, GeoAlignableTransform *> *mapAXF) :
93 longWidth =
s->GetWidth2();
94 thickness =
s->GetThickness(mysql);
99 std::string stname(m_station->GetName(), 0, 3);
112 ATH_MSG_VERBOSE(
" Building a MuonChamberLite for m_station " <<
m_station->
GetName() <<
" at zi, fi " << zi <<
" " << fi + 1 <<
" is_mirrored " << is_mirrored
113 <<
" is assembly = " << isAssembly );
125 double totthick =
thickness + extratop + extrabottom;
134 if (zi < 0 && !is_mirrored &&
stName[0] ==
'B') {
136 amdbOrigine_along_length += halfpitch;
140 << amdbOrigine_along_length <<
" in the thickness direction = " << amdbOrigine_along_thickness);
143 ATH_MSG_DEBUG(
"Station " <<
stName <<
" at zi, fi " << zi <<
" " << fi + 1 <<
" will be described as Assembly" );
152 if (
stName.compare(0, 3,
"BOG") == 0 && (
manager->IncludeCutoutsBogFlag() ||
manager->IncludeCutoutsFlag())) {
154 ATH_MSG_VERBOSE(
"amdb org: length= " << amdbOrigine_along_length <<
" thickness= " << amdbOrigine_along_thickness );
156 std::string statType =
stName.substr(0, 3);
158 ATH_MSG_DEBUG(
"Station " <<
stName <<
" at zi, fi " << zi <<
" " << fi + 1 <<
" has components with cutouts " );
162 bool foundCutouts =
false;
173 if (std::abs(
cut->dx - 600.7) < 0.1) {
178 if (std::abs(
cut->dx + 600.7) < 0.1) {
183 if (std::abs(
cut->lengthY - 180.2) < 0.001) {
186 if (std::abs(
cut->dy - 1019.8) < 0.001) {
187 cut->dy = 1216.4185 -
cut->lengthY;
190 cut->setThickness(totthick * 1.01);
192 (
cut->ijob ==
c->index)) {
204 double ypos{0.}, zpos{0.}, xpos{0.}, irad{0.};
205 std::array<int, 2 > ndbz{0, 0};
208 int nDoubletR{0}, nRpc{0}, nTgc{0}, nCsc{0}, nMdt{0};
209 double previous_depth = 0.;
211 ATH_MSG_VERBOSE(
" Station Name = " <<
stName <<
" fi/zi " << fi <<
"/" << zi <<
" defining the n. of DoubletR to " );
216 std::string_view cn = std::string_view(
d->name).substr(0, 3);
223 if (!(stname.compare(0, 2,
"BI") == 0) && nDoubletR == 1 && nRpc > 1 &&
depth * previous_depth < 0)
226 previous_depth =
depth;
228 else if (cn ==
"CSC") {
231 else if (cn ==
"TGC") {
234 else if (cn ==
"MDT") {
238 ATH_MSG_DEBUG(
"nDoubletR: " << nDoubletR<<
" nMdt/Rpc/Tgc/Csc " << nMdt <<
"/" << nRpc <<
"/" << nTgc <<
"/" << nCsc );
243 double LBheight{0.}, LBwidth{0.};
244 std::array<double, 2> LBpos{-1, -1};
247 std::string_view cname = std::string_view(
c->name).substr(0, 2);
251 LBpos[numLB] =
c->posy +
c->dy / 2.;
252 LBheight =
lb->height;
261 std::string_view cname = std::string_view(
c->name).substr(0, 3);
262 if (cname ==
"CRO" || cname ==
"CMI" || cname ==
"CHV") {
272 std::string CMIcomponentNumber =
"";
275 std::string_view cn = std::string_view(
d->name).substr(0, 3);
277 CMIcomponentNumber = (
d->name).substr(3, 2);
284 std::string_view cn = std::string_view(
d->name).substr(0, 2);
290 ATH_MSG_ERROR(
"MuonChamberLite :: cannot associate a CMI subtype to the LB component " );
296 if (
stName.compare(0, 1,
"B") == 0) {
297 mstat =
new MuonStation(
stName.substr(0, 3),
width, totthick,
length,
longWidth, totthick,
length, zi, fi + 1,
298 (zi < 0 && !is_mirrored));
300 mstat =
new MuonStation(
stName.substr(0, 3),
width,
length, totthick,
longWidth,
length, totthick, zi, fi + 1,
301 (zi < 0 && !is_mirrored));
304 manager->addMuonStation(std::unique_ptr<MuonStation>(mstat));
306 <<
" at zi, fi " << zi <<
" " << fi + 1 <<
" is_mirrored " << is_mirrored);
313 ATH_MSG_VERBOSE(
" Component index " <<
c->index <<
" in loop for " <<
stName <<
" " << stationType <<
" at zi, fi " << zi <<
" " << fi + 1 <<
" cName "
314 <<
c->name <<
" thickness " <<
c->GetThickness(mysql) <<
" length " <<
c->dy <<
" w, lw " <<
c->dx1 <<
" " <<
c->dx2 );
315 ATH_MSG_VERBOSE(
" Component local (amdb) coords " <<
c->posx <<
" " <<
c->posy <<
" " <<
c->posz );
317 ypos = -
thickness / 2. +
c->posz +
c->GetThickness(mysql) / 2.;
321 ypos = -
thickness / 2. + (
c->posz + amdbOrigine_along_thickness) +
c->GetThickness(mysql) / 2.;
322 zpos = -
length / 2. + amdbOrigine_along_length +
c->posy +
c->dy / 2.;
325 const std::string &techname =
c->name;
326 std::string_view
type = std::string_view(techname).substr(0, 3);
330 GeoIntrusivePtr<GeoFullPhysVol> lvm{}, lvr{}, lvt{}, lvc{};
335 std::string statType =
stName.substr(0, 3);
336 double cthickness =
c->GetThickness(mysql);
338 std::vector<Cutout *> vcutdef;
339 std::vector<std::unique_ptr<Cutout>> vcutdef_todel;
342 cut->setThickness(cthickness * 1.01);
346 double tempdx =
cut->dx;
347 double tempdy =
cut->dy;
348 double templengthY =
cut->lengthY;
352 if (
stName.compare(0, 3,
"BOG") == 0) {
354 cut->lengthY = templengthY + 31.;
360 if (std::abs(
cut->dead1) > 1. && techname ==
"MDT03")
365 cut->lengthY = templengthY;
373 if (
stName.compare(0, 3,
"BMS") == 0) {
375 if (std::abs(zi) == 1) {
378 if (
type ==
"RPC" ||
type ==
"DED") {
379 cut->widthXl += 2 * margin;
380 cut->widthXs += 2 * margin;
382 cut->lengthY += 2 * margin;
397 if (
stName.compare(0, 3,
"BOS") == 0 && zi == -6 &&
type ==
"MDT") {
398 cut->dy =
c->dy -
cut->dy -
cut->lengthY - halfpitch;
400 if (techname ==
"MDT03")
409 if (
type ==
"MDT" && (is_mirrored || zi < 0) &&
stName.compare(0, 1,
"B") == 0) {
414 cutmirr->
dx = -cutmirr->
dx;
417 vcutdef.push_back(cutmirr);
418 vcutdef_todel.emplace_back(cutmirr);
419 ATH_MSG_VERBOSE(
"adding for application mirrored cut \n" << *cutmirr );
421 }
else if (
type ==
"RPC" ||
type ==
"DED") {
424 if (
stName.compare(0, 3,
"BMS") == 0 && zi == 4 && (
c->index == 20 ||
c->index == 21 ||
c->index == 24 ||
c->index == 25)) {
425 cutRpcType->
dy = 1102.5;
428 if (
stName.compare(0, 3,
"BOS") == 0 && zi == 6 &&
type ==
"DED")
429 cutRpcType->
dy = 706.;
431 cutRpcType->
dy = cutRpcType->
dy -
c->posy;
432 cutRpcType->
dx = cutRpcType->
dx -
c->posx;
436 if (
rp->iswap == -1) {
437 cutRpcType->
dy =
c->dy - (cutRpcType->
dy + cutRpcType->
lengthY);
441 ATH_MSG_VERBOSE(
" Rpc or ded cutout redefined as follows \n" << *cutRpcType );
442 vcutdef.push_back(cutRpcType);
443 vcutdef_todel.emplace_back(cutRpcType);
444 }
else if (
type ==
"TGC") {
449 tgccut->
dy -=
c->posy;
452 vcutdef.push_back(tgccut);
453 vcutdef_todel.emplace_back(tgccut);
455 vcutdef.push_back(
cut);
461 ATH_MSG_DEBUG(
c->name <<
" of station " <<
stName <<
" at fi/zi " << fi + 1 <<
"/" << zi <<
" has " << ncutouts <<
" cutouts " );
465 GeoAlignableTransform *xfaligncomponent{
nullptr};
469 if (
stName.compare(0, 1,
"B") != 0 && is_mirrored)
477 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos) * GeoTrf::TranslateY3D(xpos);
479 if (zi < 0 && !is_mirrored &&
stName[0] ==
'B') {
482 htcomponent = htcomponent * GeoTrf::TranslateZ3D(halfpitch);
487 if (zi < 0 &&
stName.compare(0, 3,
"BOG") == 0 && is_mirrored) {
495 std::string
key =std::string(
stName) + techname;
500 bool mdtCutoutFlag = ((stname ==
"BOS" && std::abs(zi) == 6) || stname ==
"BMG" || techname ==
"MDT14" || (stname ==
"BMS" && (std::abs(zi) == 1 && fi == 3)) ||
501 (stname ==
"EMS" && (std::abs(zi) == 1 || std::abs(zi) == 3)));
502 if (((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() &&
stName.compare(0, 3,
"BOG") == 0)) && zi >= 0) {
504 }
else if (((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() &&
stName.compare(0, 3,
"BOG")) == 0) && zi < 0) {
508 std::unique_ptr<Mdt>
r = std::make_unique<Mdt>(mysql,
c,
stName + techname);
509 if ((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() &&
stName.compare(0, 3,
"BOG") == 0)) {
510 if (!vcutdef.empty())
r->processCutouts(vcutdef);
516 }
else if (
type ==
"RPC") {
519 int ndivy =
rp->ndivy;
520 int ndivz =
rp->ndivz;
522 if (ndivz != 1 || ndivy != 1) {
523 ATH_MSG_ERROR(
" RPC segmentation z,y " << ndivz <<
" " << ndivy );
526 double xpos =
c->posx;
532 <<
" RPC " << (
c->name).substr(3, 2) <<
" has swap flag = " <<
rp->iswap <<
" ypos, zpos " << ypos <<
" " << zpos <<
" " );
534 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateY3D(xpos) * GeoTrf::TranslateZ3D(zpos);
535 if (
rp->iswap == -1) {
541 bool rpcCutoutFlag = (stname ==
"BOS" && std::abs(zi) == 6) || (stname ==
"BMS" && (std::abs(zi) == 2 || std::abs(zi) == 4 || std::abs(zi) == 6)) ||
542 (stname ==
"BMS" && std::abs(zi) == 1 && fi == 3);
544 if (((
manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (
manager->IncludeCutoutsBogFlag() &&
stName.compare(0, 3,
"BOG") == 0)) && zi >= 0) {
547 }
else if (((
manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (
manager->IncludeCutoutsBogFlag() &&
stName.compare(0, 3,
"BOG") == 0)) && zi < 0) {
553 }
else if (
type ==
"TGC") {
556 irad = tgInner->
posy;
558 double orad = tgOuter->
posy + tgOuter->
dy;
559 double start = -(orad - irad) / 2. + (tg->
posy - irad) + tg->
dy / 2;
561 htcomponent = GeoTrf::TranslateX3D(xstart + tg->
posz) * GeoTrf::TranslateZ3D(
start);
564 std::string
key = std::string(
stName) + techname;
565 if (
manager->IncludeCutoutsFlag()) {
581 }
else if (
type ==
"CSC") {
582 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos);
584 std::string
key = std::string(
stName) + techname;
585 if (
manager->IncludeCutoutsFlag() && zi >= 0) {
587 }
else if (
manager->IncludeCutoutsFlag() && zi < 0) {
601 if (lvm &&
manager->mdtIdHelper()) {
603 int stationPhi = fi + 1;
612 std::unique_ptr<MdtReadoutElement>
det = std::make_unique<MdtReadoutElement>(lvm,
stName,
manager);
615 det->setHasCutouts(ncutouts > 0);
616 det->setNMdtInStation(nMdt);
618 det->setIdentifier(
id);
619 det->setMultilayer(ml);
620 det->setParentStationPV(PVConstLink(ptrd));
621 det->setParentMuonStation(mstat);
629 if (
c->posy < b0.y())
633 int jobIndex =
c->index;
636 manager->addMdtReadoutElement(std::move(
det));
639 if (lvc &&
manager->cscIdHelper()) {
642 int stationPhi = fi + 1;
643 int chamberLayer = 1;
647 std::unique_ptr<CscReadoutElement>
det = std::make_unique<CscReadoutElement>(lvc,
stName,
manager);
652 det->setHasCutouts(ncutouts > 0);
653 Identifier id = csc_id->
channelID(stationType, stationEta, stationPhi, chamberLayer, 1, 0, 1);
654 det->setIdentifier(
id);
656 det->setChamberLayer(chamberLayer);
657 det->setParentStationPV(PVConstLink(ptrd));
658 det->setParentMuonStation(mstat);
660 int jobIndex =
c->index;
667 manager->addCscReadoutElement(std::move(
det));
670 if (lvt &&
manager->tgcIdHelper()) {
672 ATH_MSG_DEBUG(
" Adding a TGC chamber to the tree zi,fi, is_mirrored " << zi <<
" " << fi + 1 <<
" " << is_mirrored );
681 stationEta = tg->
index;
683 stationEta = -stationEta;
687 std::unique_ptr<TgcReadoutElement>
det = std::make_unique<TgcReadoutElement>(lvt,
stName,
manager);
690 det->setHasCutouts(ncutouts > 0);
692 det->setIdentifier(
id);
693 det->setParentStationPV(PVConstLink(ptrd));
694 det->setParentMuonStation(mstat);
696 int jobIndex =
c->index;
700 manager->addTgcReadoutElement(std::move(
det));
704 int ndivy =
rp->ndivy;
705 int ndivz =
rp->ndivz;
707 if (ndivz != 1 || ndivy != 1) {
708 ATH_MSG_ERROR(
" RPC segmentation z,y " << ndivz <<
" " << ndivy );
711 double zpos = -
length / 2. +
c->posy +
c->dy / 2.;
712 double xpos =
c->posx;
721 int stationPhi = fi + 1;
725 if (nRpc > 1 && nDoubletR == 2 && ypos > 0.)
730 if (stname.find(
"BI") != std::string::npos) {
731 if (stname.find(
"BIS") != std::string::npos) {
733 if (std::abs(stationEta)>= 7){
734 ATH_MSG_DEBUG(
"BIS78 station eta: "<<stationEta<<
" phi: "<<stationPhi<<
" dR: "<<
doubletR<<
" dZ:"<< doubletZ <<
" rp: "<<
rp->posz);
736 if (std::abs(stationEta) >= 7 &&
rp->posz > 80)
743 if (stname.find(
"BIL") != std::string::npos && std::abs(stationEta) < 7 && std::abs(stationEta) != 2 && std::abs(stationEta) != 5) {
750 if (zi <= 0 && !is_mirrored) {
778 if (zi < 0 && is_mirrored && doubletZ == 3) {
782 }
else if (zi < 0 && is_mirrored && doubletZ == 2 &&
doubletR == 1 &&
stName ==
"BMS6") {
792 int tag = doubletZ +
doubletR * 100 + dbphi * 1000;
805 std::unique_ptr<RpcReadoutElement>
det = std::make_unique<RpcReadoutElement>(lvr,
stName, zi, fi + 1, is_mirrored,
manager);
808 det->setHasCutouts(ncutouts > 0);
810 det->setIdentifier(
id);
812 det->setDoubletZ(doubletZ);
814 if (
stName.find(
"BI") != std::string::npos)
815 det->setNumberOfLayers(3);
816 det->setParentStationPV(PVConstLink(ptrd));
817 det->setParentMuonStation(mstat);
819 int jobIndex =
c->index;
825 if (
stName.find(
"BI") != std::string::npos) {
826 std::map<std::string, float>::const_iterator yItr = rpcYTrans.find(techname);
827 if (yItr != rpcYTrans.end())
828 det->setYTranslation(yItr->second);
829 std::map<std::string, float>::const_iterator zItr = rpcZTrans.find(techname);
830 if (zItr != rpcZTrans.end())
831 det->setZTranslation(zItr->second);
837 manager->addRpcReadoutElement(std::move(
det));
850 re->m_Ssize =
cc->dx1;
851 re->m_LongSsize =
cc->dx2;
852 re->m_Rsize =
cc->dy;
853 re->m_LongRsize =
cc->dy;
854 re->m_Zsize =
cc->GetThickness(mysql);
855 re->m_LongZsize =
cc->GetThickness(mysql);
856 re->m_RlengthUpToMaxWidth =
cc->maxwdy;
857 re->m_excent =
cc->excent;
860 std::string tname =
cc->name;
861 re->setTechnologyName(tname);
864 re->setStationS(
ip.shift);
866 throw std::runtime_error(
" MuonChamberLite::setCscReadoutGeom: position not found ");
879 re->m_Etastripwidth =
re->m_Etastrippitch;
880 re->m_Phistripwidth =
re->m_Phistrippitch;
885 re->m_Ssize =
cc->dx1;
886 re->m_LongSsize =
cc->dx2;
888 if (
re->m_inBarrel) {
889 re->m_Rsize =
cc->GetThickness(mysql);
890 re->m_LongRsize =
cc->GetThickness(mysql);
891 re->m_Zsize =
cc->dy;
892 re->m_LongZsize =
cc->dy;
894 re->m_Rsize =
cc->dy;
895 re->m_LongRsize =
cc->dy;
896 re->m_Zsize =
cc->GetThickness(mysql);
897 re->m_LongZsize =
cc->GetThickness(mysql);
900 re->m_cutoutShift =
cc->cutoutTubeXShift;
901 re->m_tubelenStepSize =
cc->tubelenStepSize;
904 re->setStationS(
ip.shift);
906 throw std::runtime_error(
" MuonChamberLite::setMdtReadoutGeom: position not found ");
909 std::string tname =
cc->name;
910 re->setTechnologyName(tname);
913 re->m_tubepitch = thism->
pitch;
914 re->m_tubelayerpitch = thism->
y[1] - thism->
y[0];
916 re->m_deadlength =
cc->deadx;
920 if (
re->m_inBarrel) {
921 re->m_ntubesperlayer =
int(
re->m_Zsize /
re->m_tubepitch);
923 re->m_ntubesinastep =
re->m_ntubesperlayer;
924 re->m_tubelength[0] =
re->m_Ssize;
926 re->m_ntubesperlayer =
int(
re->m_Rsize /
re->m_tubepitch);
927 re->m_nsteps =
int(
re->m_Rsize /
re->m_tubelenStepSize);
928 re->m_ntubesinastep =
int(
re->m_tubelenStepSize /
re->m_tubepitch);
929 re->m_tubelength[0] =
re->m_Ssize;
930 double diff = (
re->m_LongSsize -
re->m_Ssize) * (
re->m_LongRsize -
re->m_tubepitch / 2.) /
re->m_LongRsize;
931 for (
int is = 0; is <
re->m_nsteps; ++is) {
932 double len =
re->m_Ssize + is *
diff /
re->m_nsteps;
933 re->m_tubelength[is] = len;
937 for (
int tl = 0;
tl <
re->m_nlayers; ++
tl) {
938 re->m_firstwire_x[
tl] = thism->
x[
tl];
939 re->m_firstwire_y[
tl] = thism->
y[
tl];
948 re->m_Ssize =
cc->dx1;
949 re->m_LongSsize =
cc->dx2;
950 re->m_Rsize =
cc->GetThickness(mysql);
951 re->m_LongRsize =
cc->GetThickness(mysql);
952 re->m_Zsize =
cc->dy;
953 re->m_LongZsize =
cc->dy;
955 re->m_hasDEDontop =
true;
957 re->m_hasDEDontop =
false;
960 re->setStationS(
ip.shift);
962 ATH_MSG_ERROR(
" MuonChamber::setRpcReadoutGeom: position not found " );
966 std::string tname =
cc->name;
967 re->setTechnologyName(tname);
976 if (
re->getStationName().find(
"BI") != std::string::npos) {
977 re->setNumberOfLayers(3);
982 if (
re->numberOfLayers() == 3) {
983 constexpr
double rpc3GapLayerThickness = 11.8;
987 re->m_gasGap_xPos[
gasGap -1] = (
gasGap - 2) * rpc3GapLayerThickness - 0.74;
994 if (!
re->m_hasDEDontop) {
1001 re->m_nphistripsperpanel =
int((
re->m_Ssize /
re->m_nphistrippanels) /
re->m_phistrippitch);
1002 if (
re->getStationName().compare(0, 3,
"BME") != 0) {
1003 re->m_nphistripsperpanel-=(
re->m_nphistripsperpanel % 8) ;
1005 re->m_netastripsperpanel =
int((
re->m_Zsize) /
re->m_etastrippitch);
1006 re->m_netastripsperpanel -= (
re->m_netastripsperpanel % 8);
1008 re->m_phipaneldead =
re->m_Ssize /
re->m_nphistrippanels -
1009 re->m_nphistripsperpanel *
re->m_phistrippitch +
1011 re->m_phipaneldead =
re->m_phipaneldead / 2.;
1012 re->m_etapaneldead =
re->m_Zsize -
re->m_netastripsperpanel *
re->m_etastrippitch + genericRpc->
stripSeparation;
1013 re->m_etapaneldead =
re->m_etapaneldead / 2.;
1014 re->m_phistriplength =
re->m_LongZsize;
1015 re->m_etastriplength =
re->m_LongSsize /
re->m_nphistrippanels;
1017 re->m_first_phistrip_s[0] = -
re->m_Ssize / 2. +
re->m_phipaneldead +
re->m_phistripwidth / 2.;
1018 if (
re->m_nphistrippanels == 2) {
1019 re->m_first_phistrip_s[1] =
re->m_phipaneldead +
re->m_phistripwidth / 2.;
1023 re->m_phistrip_z = -
re->m_Zsize / 2. +
offset +
re->m_phistriplength / 2.;
1026 re->m_first_etastrip_z = -
re->m_Zsize / 2. +
re->m_etapaneldead +
re->m_etastripwidth / 2.;
1027 re->m_etastrip_s[0] = -
re->m_Ssize / 2. +
offset +
re->m_etastriplength / 2.;
1028 if (
re->m_nphistrippanels == 2) {
1029 re->m_etastrip_s[1] =
re->m_Ssize / 2. -
offset -
re->m_etastriplength / 2.;
1038 const std::string&
stName) {
1040 re->setSsize(
cc->dx1);
1041 re->setLongSsize(
cc->dx2);
1042 re->setRsize(
cc->dy);
1043 re->setLongRsize(
cc->dy);
1044 re->setZsize(
cc->GetThickness(mysql));
1045 re->setLongZsize(
cc->GetThickness(mysql));
1049 re->setFrameThickness(genericTgc->
frame_h,
1053 const std::string &tname =
cc->name;
1055 re->setTechnologyName(tname);
1057 if (
ip.isAssigned) {
1058 re->setStationS(
ip.shift);
1060 throw std::runtime_error(
" MuonChamberLite::setTgcReadoutGeom position not found ");
1070 for (std::size_t
i = 0;
i < ncomp; ++
i) {
1071 double newpos = -
re->getZsize() / 2. + thist->
positions[
i] + thist->
tck[
i] / 2.;
1073 if ( thist->
materials[
i].find(
"TGCGas") != std::string::npos) {