57 double safety = 0.01*Gaudi::Units::mm;
58 double maxRofEP = 1075.0*Gaudi::Units::mm - safety;
59 double RibConnection = 550.0*Gaudi::Units::mm;
61 maxRofEP = (*shell)[0]->getDouble(
"EPMAXR")*Gaudi::Units::mm - safety;
62 RibConnection = (*ribs)[0]->getDouble(
"RIBCONNECTION")*Gaudi::Units::mm;
66 double rminInt = 425.*Gaudi::Units::mm;
67 double rmaxInt = 1040.*Gaudi::Units::mm;
68 double thickShell = 3.*Gaudi::Units::mm;
69 double thick2 = 10.*Gaudi::Units::mm;
70 double zposEP = 3370.*Gaudi::Units::mm;
71 double zleng = 42.*Gaudi::Units::mm;
72 rminInt = (*shell)[0]->getDouble(
"RMININT")*Gaudi::Units::mm;
73 rmaxInt = (*shell)[0]->getDouble(
"RMAXINT")*Gaudi::Units::mm;
74 thickShell = (*shell)[0]->getDouble(
"THICKSHELL")*Gaudi::Units::mm;
75 thick2 = (*shell)[0]->getDouble(
"THICKADD")*Gaudi::Units::mm;
76 zposEP = (*shell)[0]->getDouble(
"ZSTART")*Gaudi::Units::mm;
77 zleng = (*shell)[0]->getDouble(
"ZSHIFT")*Gaudi::Units::mm;
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);
96 GeoTrf::Vector3D servpos2(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);
108 double zgap = 50.*Gaudi::Units::mm;
109 double rminExt = 250.*Gaudi::Units::mm;
110 double rmaxExt = maxRofEP;
112 zgap = (*shell)[0]->getDouble(
"ZGAP")*Gaudi::Units::mm;
113 rminExt = (*shell)[0]->getDouble(
"RMINEXT")*Gaudi::Units::mm;
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);
134 double zthick = 16.0*Gaudi::Units::mm;
135 double zinsert = 3018.*Gaudi::Units::mm-zthick;
136 double rminins = 252.*Gaudi::Units::mm;
137 double rmaxins = 435.*Gaudi::Units::mm;
138 double rthick = 5.*Gaudi::Units::mm;
139 double zlengi = 410.*Gaudi::Units::mm;
141 zthick = (*insert)[0]->getDouble(
"ZTHICK")*Gaudi::Units::mm;
142 zinsert = (*insert)[0]->getDouble(
"ZINSERT")*Gaudi::Units::mm;
143 rminins = (*insert)[0]->getDouble(
"RMININS")*Gaudi::Units::mm;
144 rmaxins = (*insert)[0]->getDouble(
"RMAXINS")*Gaudi::Units::mm;
145 rthick = (*insert)[0]->getDouble(
"RTHICK")*Gaudi::Units::mm;
146 zlengi = (*insert)[0]->getDouble(
"ZLENGINS")*Gaudi::Units::mm;
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);
161 GeoTrf::Vector3D servpos6(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);
176 double ribY = 12.0*Gaudi::Units::mm;
177 double ribZ = zgap - safety;
178 double ribX = 380.0*Gaudi::Units::mm;
179 double posX = 550.0*Gaudi::Units::mm+ribX/2.;
181 ribY = (*ribs)[0]->getDouble(
"SHORTWID")*Gaudi::Units::mm;
182 ribZ = zgap - safety;
183 ribX = (*ribs)[0]->getDouble(
"SHORTLENG")*Gaudi::Units::mm;
184 posX = (*ribs)[0]->getDouble(
"SHORTRSTART")*Gaudi::Units::mm + ribX/2.;
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;
200 double angl= ip*
M_PI/6.;
201 GeoTrf::Vector3D ribpos_pos( posX*cos(angl), posX*sin(angl), zposEP+zleng+thickShell+zgap/2.);
202 GeoTrf::Vector3D ribpos_neg( posX*cos(angl), posX*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
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);
214 double ribY1 = 20.0*Gaudi::Units::mm;
215 double ribZ1 = zgap - safety;
216 double ribX1 = RibConnection-250.*Gaudi::Units::mm;
217 double posX1 = 250.*Gaudi::Units::mm+ribX1/2.;
219 double ribY2 = 30.0*Gaudi::Units::mm;
220 double ribZ2 = zgap - safety;
221 double ribX2 = maxRofEP - RibConnection;
222 double posX2 = RibConnection+ribX2/2.;
224 ribY1 = (*ribs)[0]->getDouble(
"LONGWID1")*Gaudi::Units::mm;
225 ribZ1 = zgap - safety;
226 ribX1 = RibConnection - (*ribs)[0]->getDouble(
"LONGLENG1")*Gaudi::Units::mm;
227 posX1 = (*ribs)[0]->getDouble(
"LONGLENG1")*Gaudi::Units::mm + ribX1/2.;
229 ribY2 = (*ribs)[0]->getDouble(
"LONGWID2")*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++){
246 double angl= ip*
M_PI/2.;
248 GeoTrf::Vector3D ribpos_pos1( posX1*cos(angl), posX1*sin(angl), zposEP+zleng+thickShell+zgap/2.);
249 GeoTrf::Vector3D ribpos_neg1( posX1*cos(angl), posX1*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
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);
257 GeoTrf::Vector3D ribpos_pos2( posX2*cos(angl), posX2*sin(angl), zposEP+zleng+thickShell+zgap/2.);
258 GeoTrf::Vector3D ribpos_neg2( posX2*cos(angl), posX2*sin(angl),-zposEP-zleng-thickShell-zgap/2.);
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);