9 #include "GeoModelKernel/GeoDefinitions.h"
10 #include "GeoModelKernel/GeoPhysVol.h"
11 #include "GeoModelKernel/GeoLogVol.h"
12 #include "GeoModelKernel/GeoTube.h"
13 #include "GeoModelKernel/GeoTubs.h"
14 #include "GeoModelKernel/GeoPcon.h"
15 #include "GeoModelKernel/GeoCons.h"
16 #include "GeoModelKernel/GeoMaterial.h"
17 #include "GeoModelKernel/GeoTransform.h"
18 #include "GeoModelKernel/GeoShapeSubtraction.h"
29 #include "GaudiKernel/SystemOfUnits.h"
37 :
InDetDD::SubDetectorFactoryBase(athenaComps)
61 if(!railversion.empty()) {
90 if(commonParameters->size()==0)
93 double yWidthUSP1 = (*commonParameters)[0]->getDouble(
"YWIDTHUSP1");
94 double yRailSup = (*commonParameters)[0]->getDouble(
"YRAILSUP");
95 double yRailSupPart3 = (*commonParameters)[0]->getDouble(
"YRAILSUPPART3");
96 double gapOfRSF = (*commonParameters)[0]->getDouble(
"GAPOFRSF");
97 double yWidthTRSB = (*commonParameters)[0]->getDouble(
"YWIDTHTRSB");
99 double coordY = yWidthUSP1/2. - yRailSup + (yRailSupPart3 - gapOfRSF/2.);
101 double phiTop = asin((yWidthTRSB + coordY) / (rminInt));
102 double phiBot = asin((yWidthTRSB/2. - coordY) / (rminInt));
104 GeoIntrusivePtr<const GeoShape> railGap1{
new GeoTubs( rminInt, outROfIDet, endZOfIDet, -phiBot, phiBot + phiTop)};
105 GeoIntrusivePtr<const GeoShape> railGap2{
new GeoTubs( rminInt, outROfIDet, endZOfIDet,
M_PI - phiTop, phiBot + phiTop)};
108 for (
unsigned int ii =0; ii < trtGenServices->size(); ii++) {
111 const GeoShape * serviceTubeTmp = tubeHelper.
buildShape();
113 std::string logName = tubeHelper.
name();
114 if (logName.empty()) {
115 std::ostringstream o; o << ii;
116 logName =
"ServMat"+o.str();
118 logName =
"Trt" + logName;
120 const GeoShape* serviceTube = serviceTubeTmp;
125 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
132 const GeoLogVol* servLog =
new GeoLogVol(logName,serviceTube,material);
133 GeoVPhysVol* servPhys =
new GeoPhysVol(servLog);
135 if (tubeHelper.
name() ==
"FwdServ")
137 GeoTransform *xform1 =
new GeoTransform(GeoTrf::Translate3D(0, 0, tubeHelper.
volData().
zMid() ));
138 GeoTransform *xform2 =
new GeoTransform(GeoTrf::Translate3D(0, 0, -tubeHelper.
volData().
zMid() ));
139 mother->add(xform1); mother->add(servPhys); mother->add(xform2); mother->add(servPhys);
168 double minRofGap = 1050.0;
169 double phiWid=70./outROfIDet;
double safetyGap=1.;
170 GeoIntrusivePtr<const GeoShape> railGap1{
new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
172 GeoIntrusivePtr<const GeoShape> railGap2{
new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
173 -phiWid/2.+
M_PI,phiWid)};
182 double phiWidSQ=ribWid/(rminInt+ringThick+ringGap/2.);
190 for (
unsigned int ii =0; ii < trtGenServices->size(); ii++) {
193 const GeoShape * serviceTubeTmp = tubeHelper.
buildShape();
195 std::string logName = tubeHelper.
name();
196 if (logName.empty()) {
197 std::ostringstream o; o << ii;
198 logName =
"ServMat"+o.str();
200 logName =
"Trt" + logName;
204 const GeoShape* serviceTube = serviceTubeTmp;
207 if (tubeHelper.
name() ==
"FwdServ") {
209 -phiWidSQ/2., phiWidSQ);
211 -phiWidSQ/2.+
M_PI, phiWidSQ);
212 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*ribSup1).subtract(*ribSup2);
215 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
222 const GeoLogVol* servLog =
new GeoLogVol(logName,serviceTube,material);
223 GeoVPhysVol* servPhys =
new GeoPhysVol(servLog);