60 std::string railversion =
rdbAccessSvc()->
getChildTag(
"IDDetailedRail",indetVersionKey.tag(),indetVersionKey.node());
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;
122 if( tubeHelper.volData().maxRadius() > rminInt && tubeHelper.volData().phiDelta() > 359.9*
Gaudi::Units::degree)
125 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
128 std::string materialName = tubeHelper.materialName();
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);
142 tubeHelper.placeVolume(mother, 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") {
208 const GeoShape* ribSup1 =
new GeoTubs( tubeHelper.volData().rmin(), tubeHelper.volData().rmax(), 0.5*tubeHelper.volData().length(),
209 -phiWidSQ/2., phiWidSQ);
210 const GeoShape* ribSup2 =
new GeoTubs( tubeHelper.volData().rmin(), tubeHelper.volData().rmax(), 0.5*tubeHelper.volData().length(),
211 -phiWidSQ/2.+
M_PI, phiWidSQ);
212 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*ribSup1).subtract(*ribSup2);
213 }
else if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiDelta() > 359.9*
Gaudi::Units::degree) {
215 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
218 std::string materialName = tubeHelper.materialName();
222 const GeoLogVol* servLog =
new GeoLogVol(logName,serviceTube,material);
223 GeoVPhysVol* servPhys =
new GeoPhysVol(servLog);
225 tubeHelper.placeVolume(mother, servPhys);