9 #include "GeoModelKernel/GeoDefinitions.h"
10 #include "GeoModelKernel/GeoPhysVol.h"
11 #include "GeoModelKernel/GeoLogVol.h"
12 #include "GeoModelKernel/GeoTube.h"
13 #include "GeoModelKernel/GeoPcon.h"
14 #include "GeoModelKernel/GeoBox.h"
15 #include "GeoModelKernel/GeoMaterial.h"
16 #include "GeoModelKernel/GeoTransform.h"
28 #include "GaudiKernel/SystemOfUnits.h"
34 :
InDetDD::SubDetectorFactoryBase(athenaComps, matManager)
80 GeoPcon* shellInt =
new GeoPcon(0.,2*
M_PI);
81 shellInt->addPlane(0. , rminInt, rminInt+thick2);
82 shellInt->addPlane(zleng , rminInt, rminInt+thick2);
83 shellInt->addPlane(zleng , rminInt, rmaxInt );
84 shellInt->addPlane(zleng+thickShell, rminInt, rmaxInt );
92 const GeoLogVol* shellLogInt =
new GeoLogVol(
"EPShellInt",shellInt,shellMat);
93 GeoVPhysVol* shellPhysInt =
new GeoPhysVol(shellLogInt);
95 GeoTrf::Translate3D servpos1(0.,0., zposEP);
97 GeoTransform* xform1 =
new GeoTransform(servpos1);
98 GeoTransform* xform2 =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,-
M_PI,0),servpos2));
100 mother->add(shellPhysInt);
102 mother->add(shellPhysInt);
110 double rmaxExt = maxRofEP;
116 const GeoTube* shellExt =
new GeoTube(rminExt,rmaxExt,thickShell/2.);
117 const GeoLogVol* shellLogExt =
new GeoLogVol(
"EPShellExt",shellExt,shellMat);
118 GeoVPhysVol* shellPhysExt =
new GeoPhysVol(shellLogExt);
120 GeoTrf::Translate3D servpos3(0.,0., zposEP+zleng+thickShell+zgap+thickShell/2.);
121 GeoTrf::Vector3D servpos4(0.,0.,-zposEP-zleng-thickShell-zgap-thickShell/2.);
122 GeoTransform *xform3 =
new GeoTransform(servpos3);
123 GeoTransform* xform4 =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,-
M_PI,0),servpos4));
126 mother->add(shellPhysExt);
128 mother->add(shellPhysExt);
148 GeoPcon* Insert =
new GeoPcon(0.,2*
M_PI);
149 Insert->addPlane(0. , rminins, rmaxins+rthick);
150 Insert->addPlane(zthick , rminins, rmaxins+rthick);
151 Insert->addPlane(zthick , rmaxins, rmaxins+rthick);
152 Insert->addPlane(zlengi , rmaxins, rmaxins+rthick);
157 const GeoLogVol* InsertLog =
new GeoLogVol(
"EPInsert",Insert,insertMat);
158 GeoVPhysVol* InsertPhys =
new GeoPhysVol(InsertLog);
160 GeoTrf::Translate3D servpos5(0.,0., zinsert);
162 GeoTransform *xform5 =
new GeoTransform(servpos5);
163 GeoTransform* xform6 =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(0,-
M_PI,0),servpos6));
166 mother->add(InsertPhys);
168 mother->add(InsertPhys);
177 double ribZ = zgap - safety;
182 ribZ = zgap - safety;
186 const GeoBox* ribShort =
new GeoBox(ribX/2., ribY/2., ribZ/2.);
192 const GeoLogVol* ribShortLog =
new GeoLogVol(
"ShortRib",ribShort,ribsMat);
193 GeoVPhysVol* ribShortPhys =
new GeoPhysVol(ribShortLog);
198 for (
int ip=1;
ip<12;
ip++){
199 if(
ip==3 ||
ip==6 ||
ip==9)
continue;
203 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_pos));
205 mother->add(ribShortPhys);
206 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_neg));
208 mother->add(ribShortPhys);
215 double ribZ1 = zgap - safety;
220 double ribZ2 = zgap - safety;
221 double ribX2 = maxRofEP - RibConnection;
222 double posX2 = RibConnection+ribX2/2.;
225 ribZ1 = zgap - safety;
226 ribX1 = RibConnection - (*ribs)[0]->getDouble(
"LONGLENG1")*
Gaudi::Units::mm;
230 ribZ2 = zgap - safety;
231 ribX2 = maxRofEP - RibConnection;
232 posX2 = RibConnection+ribX2/2.;
236 const GeoBox* ribLong1 =
new GeoBox(ribX1/2. , ribY1/2., ribZ1/2.);
237 const GeoBox* ribLong2 =
new GeoBox(ribX2/2.-safety, ribY2/2., ribZ2/2.);
239 const GeoLogVol* ribLong1Log =
new GeoLogVol(
"LongRib1",ribLong1,shellMat);
240 const GeoLogVol* ribLong2Log =
new GeoLogVol(
"LongRib2",ribLong2,shellMat);
241 GeoVPhysVol* ribLong1Phys =
new GeoPhysVol(ribLong1Log);
242 GeoVPhysVol* ribLong2Phys =
new GeoPhysVol(ribLong2Log);
245 for (
int ip=0;
ip<4;
ip++){
250 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_pos1));
252 mother->add(ribLong1Phys);
253 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_neg1));
255 mother->add(ribLong1Phys);
259 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_pos2));
261 mother->add(ribLong2Phys);
262 xrib =
new GeoTransform(GeoTrf::GeoTransformRT(GeoTrf::GeoRotation(angl,0,0),ribpos_neg2));
264 mother->add(ribLong2Phys);