6 #include "GaudiKernel/MsgStream.h"
49 #include "GaudiKernel/SystemOfUnits.h"
50 #include "GeoModelKernel/GeoDefinitions.h"
60 #define useAssemblies false
63 const std::map<std::string, float> rpcYTrans = {
64 std::make_pair<std::string, float>(
"RPC26", -9.1),
65 std::make_pair<std::string, float>(
"RPC27", -9.1),
66 std::make_pair<std::string, float>(
"RPC28", -27.7),
67 std::make_pair<std::string, float>(
"RPC29", -8.8),
69 const std::map<std::string, float> rpcZTrans = {
70 std::make_pair<std::string, float>(
"RPC26", 3.22),
71 std::make_pair<std::string, float>(
"RPC27", 3.06),
72 std::make_pair<std::string, float>(
"RPC28", 3.11),
73 std::make_pair<std::string, float>(
"RPC29", 3.11),
84 std::map<std::string, GeoFullPhysVol*> * mapFPV,
85 std::map<std::string, GeoAlignableTransform *> *mapAXF) :
92 longWidth =
s->GetWidth2();
93 thickness =
s->GetThickness(mysql);
98 std::string stname(m_station->GetName(), 0, 3);
112 <<
" is assembly = " << isAssembly );
124 double totthick =
thickness + extratop + extrabottom;
133 if (zi < 0 && !is_mirrored && stName[0] ==
'B') {
135 amdbOrigine_along_length += halfpitch;
139 << amdbOrigine_along_length <<
" in the thickness direction = " << amdbOrigine_along_thickness);
142 ATH_MSG_DEBUG(
"Station " << stName <<
" at zi, fi " << zi <<
" " <<
fi + 1 <<
" will be described as Assembly" );
151 if (stName.compare(0, 3,
"BOG") == 0 && (
manager->IncludeCutoutsBogFlag() ||
manager->IncludeCutoutsFlag())) {
153 ATH_MSG_VERBOSE(
"amdb org: length= " << amdbOrigine_along_length <<
" thickness= " << amdbOrigine_along_thickness );
155 std::string statType = stName.substr(0, 3);
157 ATH_MSG_DEBUG(
"Station " << stName <<
" at zi, fi " << zi <<
" " <<
fi + 1 <<
" has components with cutouts " );
161 bool foundCutouts =
false;
172 if (std::abs(
cut->dx - 600.7) < 0.1) {
177 if (std::abs(
cut->dx + 600.7) < 0.1) {
182 if (std::abs(
cut->lengthY - 180.2) < 0.001) {
185 if (std::abs(
cut->dy - 1019.8) < 0.001) {
186 cut->dy = 1216.4185 -
cut->lengthY;
189 cut->setThickness(totthick * 1.01);
191 (
cut->ijob ==
c->index)) {
203 double ypos{0.}, zpos{0.}, xpos{0.}, irad{0.};
204 std::array<int, 2 > ndbz{0, 0};
207 int nDoubletR{0}, nRpc{0}, nTgc{0}, nCsc{0}, nMdt{0};
208 double previous_depth = 0.;
210 ATH_MSG_VERBOSE(
" Station Name = " << stName <<
" fi/zi " <<
fi <<
"/" << zi <<
" defining the n. of DoubletR to " );
215 std::string_view cn = std::string_view(
d->name).substr(0, 3);
222 if (!(stname.compare(0, 2,
"BI") == 0) && nDoubletR == 1 && nRpc > 1 &&
depth * previous_depth < 0)
225 previous_depth =
depth;
227 else if (cn ==
"CSC") {
230 else if (cn ==
"TGC") {
233 else if (cn ==
"MDT") {
237 ATH_MSG_DEBUG(
"nDoubletR: " << nDoubletR<<
" nMdt/Rpc/Tgc/Csc " << nMdt <<
"/" << nRpc <<
"/" << nTgc <<
"/" << nCsc );
242 double LBheight{0.}, LBwidth{0.};
243 std::array<double, 2> LBpos{-1, -1};
246 std::string_view cname = std::string_view(
c->name).substr(0, 2);
250 LBpos[numLB] =
c->posy +
c->dy / 2.;
251 LBheight =
lb->height;
260 std::string_view cname = std::string_view(
c->name).substr(0, 3);
261 if (cname ==
"CRO" || cname ==
"CMI" || cname ==
"CHV") {
271 std::string CMIcomponentNumber =
"";
274 std::string_view cn = std::string_view(
d->name).substr(0, 3);
276 CMIcomponentNumber = (
d->name).substr(3, 2);
283 std::string_view cn = std::string_view(
d->name).substr(0, 2);
289 ATH_MSG_ERROR(
"MuonChamberLite :: cannot associate a CMI subtype to the LB component " );
295 if (stName.compare(0, 1,
"B") == 0) {
296 mstat =
new MuonStation(stName.substr(0, 3),
width, totthick,
length,
longWidth, totthick,
length, zi,
fi + 1,
297 (zi < 0 && !is_mirrored));
299 mstat =
new MuonStation(stName.substr(0, 3),
width,
length, totthick,
longWidth,
length, totthick, zi,
fi + 1,
300 (zi < 0 && !is_mirrored));
303 manager->addMuonStation(std::unique_ptr<MuonStation>(mstat));
305 <<
" at zi, fi " << zi <<
" " <<
fi + 1 <<
" is_mirrored " << is_mirrored);
312 ATH_MSG_VERBOSE(
" Component index " <<
c->index <<
" in loop for " << stName <<
" " << stationType <<
" at zi, fi " << zi <<
" " <<
fi + 1 <<
" cName "
313 <<
c->name <<
" thickness " <<
c->GetThickness(mysql) <<
" length " <<
c->dy <<
" w, lw " <<
c->dx1 <<
" " <<
c->dx2 );
314 ATH_MSG_VERBOSE(
" Component local (amdb) coords " <<
c->posx <<
" " <<
c->posy <<
" " <<
c->posz );
316 ypos = -
thickness / 2. +
c->posz +
c->GetThickness(mysql) / 2.;
320 ypos = -
thickness / 2. + (
c->posz + amdbOrigine_along_thickness) +
c->GetThickness(mysql) / 2.;
321 zpos = -
length / 2. + amdbOrigine_along_length +
c->posy +
c->dy / 2.;
324 const std::string &techname =
c->name;
325 std::string_view
type = std::string_view(techname).substr(0, 3);
329 GeoFullPhysVol *lvm =
nullptr;
330 GeoFullPhysVol *lvr =
nullptr;
331 GeoFullPhysVol *lvt =
nullptr;
332 GeoFullPhysVol *lvc =
nullptr;
337 std::string statType = stName.substr(0, 3);
338 double cthickness =
c->GetThickness(mysql);
340 std::vector<Cutout *> vcutdef;
341 std::vector<std::unique_ptr<Cutout>> vcutdef_todel;
344 cut->setThickness(cthickness * 1.01);
348 double tempdx =
cut->dx;
349 double tempdy =
cut->dy;
350 double templengthY =
cut->lengthY;
354 if (stName.compare(0, 3,
"BOG") == 0) {
356 cut->lengthY = templengthY + 31.;
362 if (std::abs(
cut->dead1) > 1. && techname ==
"MDT03")
367 cut->lengthY = templengthY;
375 if (stName.compare(0, 3,
"BMS") == 0) {
377 if (std::abs(zi) == 1) {
380 if (
type ==
"RPC" ||
type ==
"DED") {
381 cut->widthXl += 2 * margin;
382 cut->widthXs += 2 * margin;
384 cut->lengthY += 2 * margin;
399 if (stName.compare(0, 3,
"BOS") == 0 && zi == -6 &&
type ==
"MDT") {
400 cut->dy =
c->dy -
cut->dy -
cut->lengthY - halfpitch;
402 if (techname ==
"MDT03")
411 if (
type ==
"MDT" && (is_mirrored || zi < 0) && stName.compare(0, 1,
"B") == 0) {
416 cutmirr->
dx = -cutmirr->
dx;
419 vcutdef.push_back(cutmirr);
420 vcutdef_todel.emplace_back(cutmirr);
421 ATH_MSG_VERBOSE(
"adding for application mirrored cut \n" << *cutmirr );
423 }
else if (
type ==
"RPC" ||
type ==
"DED") {
426 if (stName.compare(0, 3,
"BMS") == 0 && zi == 4 && (
c->index == 20 ||
c->index == 21 ||
c->index == 24 ||
c->index == 25)) {
427 cutRpcType->
dy = 1102.5;
430 if (stName.compare(0, 3,
"BOS") == 0 && zi == 6 &&
type ==
"DED")
431 cutRpcType->
dy = 706.;
433 cutRpcType->
dy = cutRpcType->
dy -
c->posy;
434 cutRpcType->
dx = cutRpcType->
dx -
c->posx;
438 if (
rp->iswap == -1) {
439 cutRpcType->
dy =
c->dy - (cutRpcType->
dy + cutRpcType->
lengthY);
443 ATH_MSG_VERBOSE(
" Rpc or ded cutout redefined as follows \n" << *cutRpcType );
444 vcutdef.push_back(cutRpcType);
445 vcutdef_todel.emplace_back(cutRpcType);
446 }
else if (
type ==
"TGC") {
451 tgccut->
dy -=
c->posy;
454 vcutdef.push_back(tgccut);
455 vcutdef_todel.emplace_back(tgccut);
457 vcutdef.push_back(
cut);
463 ATH_MSG_DEBUG(
c->name <<
" of station " << stName <<
" at fi/zi " <<
fi + 1 <<
"/" << zi <<
" has " << ncutouts <<
" cutouts " );
467 GeoAlignableTransform *xfaligncomponent{
nullptr};
471 if (stName.compare(0, 1,
"B") != 0 && is_mirrored)
479 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos) * GeoTrf::TranslateY3D(xpos);
481 if (zi < 0 && !is_mirrored && stName[0] ==
'B') {
484 htcomponent = htcomponent * GeoTrf::TranslateZ3D(halfpitch);
489 if (zi < 0 && stName.compare(0, 3,
"BOG") == 0 && is_mirrored) {
497 std::string
key =std::string( stName) + techname;
502 bool mdtCutoutFlag = ((stname ==
"BOS" && std::abs(zi) == 6) || stname ==
"BMG" || techname ==
"MDT14" || (stname ==
"BMS" && (std::abs(zi) == 1 &&
fi == 3)) ||
503 (stname ==
"EMS" && (std::abs(zi) == 1 || std::abs(zi) == 3)));
504 if (((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,
"BOG") == 0)) && zi >= 0) {
506 }
else if (((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,
"BOG")) == 0) && zi < 0) {
510 std::unique_ptr<Mdt>
r = std::make_unique<Mdt>(mysql,
c, stName + techname);
511 if ((
manager->IncludeCutoutsFlag() && mdtCutoutFlag) || (
manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,
"BOG") == 0)) {
512 if (!vcutdef.empty())
r->processCutouts(vcutdef);
518 }
else if (
type ==
"RPC") {
521 int ndivy =
rp->ndivy;
522 int ndivz =
rp->ndivz;
524 if (ndivz != 1 || ndivy != 1) {
525 ATH_MSG_ERROR(
" RPC segmentation z,y " << ndivz <<
" " << ndivy );
528 double xpos =
c->posx;
533 ATH_MSG_VERBOSE(
" In station " << stName <<
" with " << nDoubletR <<
" doubletR,"
534 <<
" RPC " << (
c->name).substr(3, 2) <<
" has swap flag = " <<
rp->iswap <<
" ypos, zpos " << ypos <<
" " << zpos <<
" " );
536 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateY3D(xpos) * GeoTrf::TranslateZ3D(zpos);
537 if (
rp->iswap == -1) {
543 bool rpcCutoutFlag = (stname ==
"BOS" && std::abs(zi) == 6) || (stname ==
"BMS" && (std::abs(zi) == 2 || std::abs(zi) == 4 || std::abs(zi) == 6)) ||
544 (stname ==
"BMS" && std::abs(zi) == 1 &&
fi == 3);
545 std::string
key = stName + techname;
546 if (((
manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (
manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,
"BOG") == 0)) && zi >= 0) {
549 }
else if (((
manager->IncludeCutoutsFlag() && rpcCutoutFlag) || (
manager->IncludeCutoutsBogFlag() && stName.compare(0, 3,
"BOG") == 0)) && zi < 0) {
555 }
else if (
type ==
"TGC") {
558 irad = tgInner->
posy;
560 double orad = tgOuter->
posy + tgOuter->
dy;
561 double start = -(orad - irad) / 2. + (tg->
posy - irad) + tg->
dy / 2;
563 htcomponent = GeoTrf::TranslateX3D(xstart + tg->
posz) * GeoTrf::TranslateZ3D(
start);
566 std::string
key = std::string(stName) + techname;
567 if (
manager->IncludeCutoutsFlag()) {
579 sprintf(chswidth,
"%i",
int(10 *
c->dx1));
585 }
else if (
type ==
"CSC") {
586 htcomponent = GeoTrf::TranslateX3D(ypos) * GeoTrf::TranslateZ3D(zpos);
588 std::string
key = std::string(stName) + techname;
589 if (
manager->IncludeCutoutsFlag() && zi >= 0) {
591 }
else if (
manager->IncludeCutoutsFlag() && zi < 0) {
605 if (lvm &&
manager->mdtIdHelper()) {
607 int stationPhi =
fi + 1;
616 std::unique_ptr<MdtReadoutElement>
det = std::make_unique<MdtReadoutElement>(lvm, stName,
manager);
619 det->setHasCutouts(ncutouts > 0);
620 det->setNMdtInStation(nMdt);
622 det->setIdentifier(
id);
623 det->setMultilayer(ml);
624 det->setParentStationPV(PVConstLink(ptrd));
625 det->setParentMuonStation(mstat);
633 if (
c->posy < b0.y())
637 int jobIndex =
c->index;
640 manager->addMdtReadoutElement(std::move(
det));
643 if (lvc &&
manager->cscIdHelper()) {
646 int stationPhi =
fi + 1;
647 int chamberLayer = 1;
651 std::unique_ptr<CscReadoutElement>
det = std::make_unique<CscReadoutElement>(lvc, stName,
manager);
656 det->setHasCutouts(ncutouts > 0);
657 Identifier id = csc_id->
channelID(stationType, stationEta, stationPhi, chamberLayer, 1, 0, 1);
658 det->setIdentifier(
id);
660 det->setChamberLayer(chamberLayer);
661 det->setParentStationPV(PVConstLink(ptrd));
662 det->setParentMuonStation(mstat);
664 int jobIndex =
c->index;
671 manager->addCscReadoutElement(std::move(
det));
674 if (lvt &&
manager->tgcIdHelper()) {
676 ATH_MSG_DEBUG(
" Adding a TGC chamber to the tree zi,fi, is_mirrored " << zi <<
" " <<
fi + 1 <<
" " << is_mirrored );
685 stationEta = tg->
index;
687 stationEta = -stationEta;
691 std::unique_ptr<TgcReadoutElement>
det = std::make_unique<TgcReadoutElement>(lvt, stName,
manager);
694 det->setHasCutouts(ncutouts > 0);
696 det->setIdentifier(
id);
697 det->setParentStationPV(PVConstLink(ptrd));
698 det->setParentMuonStation(mstat);
700 int jobIndex =
c->index;
704 manager->addTgcReadoutElement(std::move(
det));
708 int ndivy =
rp->ndivy;
709 int ndivz =
rp->ndivz;
711 if (ndivz != 1 || ndivy != 1) {
712 ATH_MSG_ERROR(
" RPC segmentation z,y " << ndivz <<
" " << ndivy );
715 double zpos = -
length / 2. +
c->posy +
c->dy / 2.;
716 double xpos =
c->posx;
725 int stationPhi =
fi + 1;
729 if (nRpc > 1 && nDoubletR == 2 && ypos > 0.)
734 if (stname.find(
"BI") != std::string::npos) {
735 if (stname.find(
"BIS") != std::string::npos) {
737 if (std::abs(stationEta)>= 7){
738 ATH_MSG_DEBUG(
"BIS78 station eta: "<<stationEta<<
" phi: "<<stationPhi<<
" dR: "<<
doubletR<<
" dZ:"<< doubletZ <<
" rp: "<<
rp->posz);
740 if (std::abs(stationEta) >= 7 &&
rp->posz > 80)
747 if (stname.find(
"BIL") != std::string::npos && std::abs(stationEta) < 7 && std::abs(stationEta) != 2 && std::abs(stationEta) != 5) {
754 if (zi <= 0 && !is_mirrored) {
782 if (zi < 0 && is_mirrored && doubletZ == 3) {
786 }
else if (zi < 0 && is_mirrored && doubletZ == 2 &&
doubletR == 1 && stName ==
"BMS6") {
796 int tag = doubletZ +
doubletR * 100 + dbphi * 1000;
809 std::unique_ptr<RpcReadoutElement>
det = std::make_unique<RpcReadoutElement>(lvr, stName, zi,
fi + 1, is_mirrored,
manager);
812 det->setHasCutouts(ncutouts > 0);
814 det->setIdentifier(
id);
816 det->setDoubletZ(doubletZ);
818 if (stName.find(
"BI") != std::string::npos)
819 det->setNumberOfLayers(3);
820 det->setParentStationPV(PVConstLink(ptrd));
821 det->setParentMuonStation(mstat);
823 int jobIndex =
c->index;
829 if (stName.find(
"BI") != std::string::npos) {
830 std::map<std::string, float>::const_iterator yItr = rpcYTrans.find(techname);
831 if (yItr != rpcYTrans.end())
832 det->setYTranslation(yItr->second);
833 std::map<std::string, float>::const_iterator zItr = rpcZTrans.find(techname);
834 if (zItr != rpcZTrans.end())
835 det->setZTranslation(zItr->second);
841 manager->addRpcReadoutElement(std::move(
det));
854 re->m_Ssize =
cc->dx1;
855 re->m_LongSsize =
cc->dx2;
856 re->m_Rsize =
cc->dy;
857 re->m_LongRsize =
cc->dy;
858 re->m_Zsize =
cc->GetThickness(mysql);
859 re->m_LongZsize =
cc->GetThickness(mysql);
860 re->m_RlengthUpToMaxWidth =
cc->maxwdy;
861 re->m_excent =
cc->excent;
864 std::string tname =
cc->name;
865 re->setTechnologyName(tname);
868 re->setStationS(
ip.shift);
870 throw std::runtime_error(
" MuonChamberLite::setCscReadoutGeom: position not found ");
883 re->m_Etastripwidth =
re->m_Etastrippitch;
884 re->m_Phistripwidth =
re->m_Phistrippitch;
889 re->m_Ssize =
cc->dx1;
890 re->m_LongSsize =
cc->dx2;
892 if (
re->m_inBarrel) {
893 re->m_Rsize =
cc->GetThickness(mysql);
894 re->m_LongRsize =
cc->GetThickness(mysql);
895 re->m_Zsize =
cc->dy;
896 re->m_LongZsize =
cc->dy;
898 re->m_Rsize =
cc->dy;
899 re->m_LongRsize =
cc->dy;
900 re->m_Zsize =
cc->GetThickness(mysql);
901 re->m_LongZsize =
cc->GetThickness(mysql);
904 re->m_cutoutShift =
cc->cutoutTubeXShift;
905 re->m_tubelenStepSize =
cc->tubelenStepSize;
908 re->setStationS(
ip.shift);
910 throw std::runtime_error(
" MuonChamberLite::setMdtReadoutGeom: position not found ");
913 std::string tname =
cc->name;
914 re->setTechnologyName(tname);
917 re->m_tubepitch = thism->
pitch;
918 re->m_tubelayerpitch = thism->
y[1] - thism->
y[0];
920 re->m_deadlength =
cc->deadx;
924 if (
re->m_inBarrel) {
925 re->m_ntubesperlayer =
int(
re->m_Zsize /
re->m_tubepitch);
927 re->m_ntubesinastep =
re->m_ntubesperlayer;
928 re->m_tubelength[0] =
re->m_Ssize;
930 re->m_ntubesperlayer =
int(
re->m_Rsize /
re->m_tubepitch);
931 re->m_nsteps =
int(
re->m_Rsize /
re->m_tubelenStepSize);
932 re->m_ntubesinastep =
int(
re->m_tubelenStepSize /
re->m_tubepitch);
933 re->m_tubelength[0] =
re->m_Ssize;
934 double diff = (
re->m_LongSsize -
re->m_Ssize) * (
re->m_LongRsize -
re->m_tubepitch / 2.) /
re->m_LongRsize;
935 for (
int is = 0; is <
re->m_nsteps; ++is) {
936 double len =
re->m_Ssize + is *
diff /
re->m_nsteps;
937 re->m_tubelength[is] = len;
941 for (
int tl = 0;
tl <
re->m_nlayers; ++
tl) {
942 re->m_firstwire_x[
tl] = thism->
x[
tl];
943 re->m_firstwire_y[
tl] = thism->
y[
tl];
952 re->m_Ssize =
cc->dx1;
953 re->m_LongSsize =
cc->dx2;
954 re->m_Rsize =
cc->GetThickness(mysql);
955 re->m_LongRsize =
cc->GetThickness(mysql);
956 re->m_Zsize =
cc->dy;
957 re->m_LongZsize =
cc->dy;
959 re->m_hasDEDontop =
true;
961 re->m_hasDEDontop =
false;
964 re->setStationS(
ip.shift);
966 ATH_MSG_ERROR(
" MuonChamber::setRpcReadoutGeom: position not found " );
970 std::string tname =
cc->name;
971 re->setTechnologyName(tname);
980 if (
re->getStationName().find(
"BI") != std::string::npos) {
981 re->setNumberOfLayers(3);
986 if (
re->numberOfLayers() == 3) {
987 constexpr
double rpc3GapLayerThickness = 11.8;
991 re->m_gasGap_xPos[
gasGap -1] = (
gasGap - 2) * rpc3GapLayerThickness - 0.74;
998 if (!
re->m_hasDEDontop) {
1005 re->m_nphistripsperpanel =
int((
re->m_Ssize /
re->m_nphistrippanels) /
re->m_phistrippitch);
1006 if (
re->getStationName().compare(0, 3,
"BME") != 0) {
1007 re->m_nphistripsperpanel-=(
re->m_nphistripsperpanel % 8) ;
1009 re->m_netastripsperpanel =
int((
re->m_Zsize) /
re->m_etastrippitch);
1010 re->m_netastripsperpanel -= (
re->m_netastripsperpanel % 8);
1012 re->m_phipaneldead =
re->m_Ssize /
re->m_nphistrippanels -
1013 re->m_nphistripsperpanel *
re->m_phistrippitch +
1015 re->m_phipaneldead =
re->m_phipaneldead / 2.;
1016 re->m_etapaneldead =
re->m_Zsize -
re->m_netastripsperpanel *
re->m_etastrippitch + genericRpc->
stripSeparation;
1017 re->m_etapaneldead =
re->m_etapaneldead / 2.;
1018 re->m_phistriplength =
re->m_LongZsize;
1019 re->m_etastriplength =
re->m_LongSsize /
re->m_nphistrippanels;
1021 re->m_first_phistrip_s[0] = -
re->m_Ssize / 2. +
re->m_phipaneldead +
re->m_phistripwidth / 2.;
1022 if (
re->m_nphistrippanels == 2) {
1023 re->m_first_phistrip_s[1] =
re->m_phipaneldead +
re->m_phistripwidth / 2.;
1027 re->m_phistrip_z = -
re->m_Zsize / 2. +
offset +
re->m_phistriplength / 2.;
1030 re->m_first_etastrip_z = -
re->m_Zsize / 2. +
re->m_etapaneldead +
re->m_etastripwidth / 2.;
1031 re->m_etastrip_s[0] = -
re->m_Ssize / 2. +
offset +
re->m_etastriplength / 2.;
1032 if (
re->m_nphistrippanels == 2) {
1033 re->m_etastrip_s[1] =
re->m_Ssize / 2. -
offset -
re->m_etastriplength / 2.;
1042 const std::string& stName) {
1044 re->setSsize(
cc->dx1);
1045 re->setLongSsize(
cc->dx2);
1046 re->setRsize(
cc->dy);
1047 re->setLongRsize(
cc->dy);
1048 re->setZsize(
cc->GetThickness(mysql));
1049 re->setLongZsize(
cc->GetThickness(mysql));
1053 re->setFrameThickness(genericTgc->
frame_h,
1057 const std::string &tname =
cc->name;
1059 re->setTechnologyName(tname);
1061 if (
ip.isAssigned) {
1062 re->setStationS(
ip.shift);
1064 throw std::runtime_error(
" MuonChamberLite::setTgcReadoutGeom position not found ");
1068 sprintf(
index,
"%i",
cc->index);
1070 re->setReadOutName(stName.substr(0, 4) +
'_' +
index);
1077 for (std::size_t
i = 0;
i < ncomp; ++
i) {
1078 double newpos = -
re->getZsize() / 2. + thist->
positions[
i] + thist->
tck[
i] / 2.;
1080 if ( thist->
materials[
i].find(
"TGCGas") != std::string::npos) {