42 bool barrelPresent =
m_gmt_mgr->partPresent(
"Barrel");
43 bool endcapAPresent =
m_gmt_mgr->partPresent(
"EndcapA");
44 bool endcapCPresent =
m_gmt_mgr->partPresent(
"EndcapC");
49 GeoFullPhysVol* pPixelEnvelopeVol=(*m_mapFPV)[
"Pixel_Envelope"];
53 m_DDmgr->numerology().addBarrel(0);
60 if (endcapAPresent || endcapCPresent) {
67 m_DDmgr->numerology().addEndcap(2);
74 m_DDmgr->numerology().addEndcap(-2);
82 xMat.
add(pPixelEnvelopeVol,
"Pixel");
95 m_DDmgr->numerology().setNumDisksDBM(0);
96 m_DDmgr->numerology().setNumBarrelDBM(0);
102 return pPixelEnvelopeVol;
114 const GeoShape * envelopeShape;
119 double halflength =
m_gmt_mgr->PixelHalfLength();
120 envelopeShape =
new GeoTube(rmin,rmax,halflength);
123 GeoPcon* envelopeShapeTmp =
new GeoPcon(0.,2*Gaudi::Units::pi);
125 int numPlanes =
m_gmt_mgr->PixelEnvelopeNumPlanes();
126 for (
int i = 0; i < numPlanes * 2; i++) {
127 int tableIndex = (i < numPlanes) ? numPlanes - 1 - i : i - numPlanes;
128 int sign = (i < numPlanes) ? -1 : 1;
130 double rmin =
m_gmt_mgr->PixelEnvelopeRMin(tableIndex);
131 double rmax =
m_gmt_mgr->PixelEnvelopeRMax(tableIndex);
132 envelopeShapeTmp->addPlane(
z, rmin, rmax);
134 envelopeShape = envelopeShapeTmp;
137 const GeoMaterial* air =
m_mat_mgr->getMaterial(
"std::Air");
138 const GeoLogVol* envelopeLog =
new GeoLogVol(
"Pixel",envelopeShape,air);
139 GeoFullPhysVol* envelopePhys =
new GeoFullPhysVol(envelopeLog);
151 m_DDmgr->numerology().addBarrel(0);
155 GeoTrf::Transform3D barrelTransform =
m_gmt_mgr->partTransform(
"Barrel");
159 GeoNameTag* tag =
new GeoNameTag(
"Barrel");
160 GeoVPhysVol* barrelPhys = brl.
Build() ;
161 envelopePhys->add(tag);
162 envelopePhys->add(
new GeoIdentifierTag(0));
163 envelopePhys->add(
new GeoTransform(barrelTransform));
164 envelopePhys->add(barrelPhys );
168 if (endcapAPresent || endcapCPresent) {
175 if (endcapAPresent) {
177 m_DDmgr->numerology().addEndcap(2);
179 GeoTrf::Transform3D endcapATransform =
m_gmt_mgr->partTransform(
"EndcapA");
182 GeoTransform* xform =
new GeoTransform(endcapATransform * GeoTrf::TranslateZ3D(zpos));
183 GeoNameTag* tag =
new GeoNameTag(
"EndCapA");
184 envelopePhys->add(tag);
185 envelopePhys->add(
new GeoIdentifierTag(2));
186 envelopePhys->add(xform);
187 envelopePhys->add(pec.
Build() );
191 if (endcapCPresent) {
193 m_DDmgr->numerology().addEndcap(-2);
195 GeoTrf::Transform3D endcapCTransform =
m_gmt_mgr->partTransform(
"EndcapC");
199 GeoTransform* xform =
new GeoTransform(endcapCTransform * GeoTrf::TranslateZ3D(-zpos) * GeoTrf::RotateY3D(180*Gaudi::Units::deg));
200 GeoNameTag* tag =
new GeoNameTag(
"EndCapC");
201 envelopePhys->add(tag);
202 envelopePhys->add(
new GeoIdentifierTag(-2));
203 envelopePhys->add(xform);
204 envelopePhys->add(pec.
Build() );
234 for(
int iSection=1; iSection<4; iSection++)
242 GeoNameTag * tagFlexA =
new GeoNameTag(
"PP0Flex_A");
245 envelopePhys->add(tagFlexA);
246 envelopePhys->add(xformFlexA);
247 envelopePhys->add(flexPhys_A);
249 GeoNameTag * tagFlexC =
new GeoNameTag(
"PP0Flex_C");
252 envelopePhys->add(tagFlexC);
253 envelopePhys->add(xformFlexC);
254 envelopePhys->add(flexPhys_C);
264 GeoNameTag * tagFwdSvcA =
new GeoNameTag(
"FwdSvc_A");
267 envelopePhys->add(tagFwdSvcA);
268 envelopePhys->add(xformFwdSvcA);
269 envelopePhys->add(svcPhys_A);
271 GeoNameTag * tagFwdSvcC =
new GeoNameTag(
"FwdSvc_C");
274 envelopePhys->add(tagFwdSvcC);
275 envelopePhys->add(xformFwdSvcC);
276 envelopePhys->add(svcPhys_C);
283 int numSections =
m_gmt_mgr->PixelFrameSections();
285 for (
int iSection = 0; iSection < numSections; iSection++) {
294 xMat.
add(envelopePhys,
"Pixel");
301 GeoTrf::Translate3D dbmTransform1( 0, 0, 887.002*Gaudi::Units::mm + (
m_gmt_mgr->DBMTelescopeZ() )/2.);
307 GeoNameTag* tag1 =
new GeoNameTag(
"DBMA");
308 GeoVPhysVol* dbmPhys1 = theDBM.
Build() ;
309 envelopePhys->add(tag1);
310 envelopePhys->add(
new GeoIdentifierTag(4));
311 envelopePhys->add(
new GeoTransform(dbmTransform1));
312 envelopePhys->add(dbmPhys1 );
316 GeoNameTag* tag2 =
new GeoNameTag(
"DBMC");
317 GeoTransform* dbmTransform2 =
new GeoTransform(GeoTrf::TranslateZ3D(-887.002*Gaudi::Units::mm - (
m_gmt_mgr->DBMTelescopeZ() )/2.) * GeoTrf::RotateY3D(180*Gaudi::Units::deg));
318 envelopePhys->add(tag2);
319 envelopePhys->add(
new GeoIdentifierTag(-4));
320 envelopePhys->add(dbmTransform2);
321 envelopePhys->add(theDBM.
Build());
323 m_DDmgr->numerology().setNumDisksDBM(0);
324 m_DDmgr->numerology().setNumBarrelDBM(0);
334 StatusCode
sc =
m_gmt_mgr->athenaComps()->bcm()->build(envelopePhys);
335 if (
sc.isFailure()) {
336 std::cout <<
"PixelGeoModel failed to build BCM." << std::endl;
343 StatusCode
sc =
m_gmt_mgr->athenaComps()->blm()->build(envelopePhys);
344 if (
sc.isFailure()) {
345 std::cout <<
"PixelGeoModel failed to build BLM." << std::endl;
349 if(pixServices)
delete pixServices;