27 GeoModelIO::ReadGeoModel* sqliteReader,
28 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
29 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX,
54 const GeoMaterial* air =
m_mat_mgr->getMaterial(
"std::Air");
57 std::string logName =
m_gmt_mgr->isBarrel() ?
"ModuleBrl" :
"ModuleEC";
60 const GeoBox* moduleBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
61 const GeoShape * moduleShape = moduleBox;
62 m_theModule =
new GeoLogVol(logName,moduleShape,air);
72 const GeoBox* moduleBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
73 const GeoShape & shiftedBox = (*moduleBox) << GeoTrf::TranslateX3D(shift);
74 const GeoShape * moduleShape = &shiftedBox;
77 m_theModule =
new GeoLogVol(logName,moduleShape,air);
80 const GeoShape * gblShape =
nullptr;
81 gblShape =
addShape(gblShape, moduleShape, GeoTrf::Transform3D::Identity() );
83 double svcWidth =
width*.6;
86 double yShift =
width*.5-svcWidth*.75;
88 gblShape =
addShape(gblShape, moduleSvcBox1, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
91 yShift =
width*.5-svcWidth*.25;
93 gblShape =
addShape(gblShape, moduleSvcBox2, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
98 std::string name =
m_gmt_mgr->PixelModuleServiceName(iSvc);
99 double offsetX =
m_gmt_mgr->PixelModuleServiceOffsetX(iSvc);
101 if(
type==svcType&&(name==
"WingFlex"||offsetX<0)) {
102 double width_svc =
m_gmt_mgr->PixelModuleServiceWidth(iSvc);
103 double thick_svc =
m_gmt_mgr->PixelModuleServiceThick(iSvc);
104 double offsetY =
m_gmt_mgr->PixelModuleServiceOffsetY(iSvc);
106 const GeoBox* moduleSvcBox3 =
new GeoBox(thick_svc*.5+.01,width_svc*.5+.01,
length*.5+.01);
107 gblShape =
addShape(gblShape, moduleSvcBox3, (GeoTrf::TranslateX3D(xPos)*GeoTrf::TranslateY3D(offsetY)) );
127 GeoFullPhysVol* modulePhys =
new GeoFullPhysVol(
m_theModule);
133 std::string sensorName =
m_gmt_mgr->isBarrel() ?
"SensorBrl" :
"SensorEC";
134 GeoNameTag *tag =
new GeoNameTag(sensorName);
135 modulePhys->add(tag);
142 modulePhys->add(
new GeoIdentifierTag(idTag) );
146 modulePhys->add(theSi );
153 GeoTransform* xform =
new GeoTransform(GeoTrf::TranslateX3D(hybxpos));
154 modulePhys->add(xform);
155 modulePhys->add(ph.
Build() );
164 GeoTransform* xform =
new GeoTransform(GeoTrf::TranslateX3D(chipxpos)*GeoTrf::TranslateY3D(chipypos));
165 modulePhys->add(xform);
166 modulePhys->add(pc.Build() );
181 double thick =
m_gmt_mgr->PixelModuleServiceThick(iSvc);
182 double offsetX =
m_gmt_mgr->PixelModuleServiceOffsetX(iSvc);
183 double offsetY =
m_gmt_mgr->PixelModuleServiceOffsetY(iSvc);
184 double offsetZ =
m_gmt_mgr->PixelModuleServiceOffsetZ(iSvc);
185 std::string name =
m_gmt_mgr->PixelModuleServiceName(iSvc);
186 std::string material =
m_gmt_mgr->PixelModuleServiceMaterial(iSvc);
188 const GeoBox* svcBox =
new GeoBox(thick*.5-0.01,
width*.5,
length*.5);
189 const GeoMaterial* svcMat =
m_mat_mgr->getMaterialForVolume(material,svcBox->volume());
190 GeoLogVol* svcLogVol =
new GeoLogVol(name, svcBox, svcMat);
191 GeoPhysVol* svcPhys =
new GeoPhysVol(svcLogVol);
194 double yPos = offsetY;
195 double zPos = offsetZ;
196 GeoTransform* xform =
new GeoTransform(GeoTrf::Translate3D(xPos,yPos,zPos));
197 modulePhys->add(xform);
198 modulePhys->add(svcPhys);
213 double safety = 0.01*Gaudi::Units::mm;
224 int fullSize =
m_gmt_mgr->PixelModuleServiceFullSize(iSvc);
225 if(
type==svcType&&fullSize==1){
226 double locThick =
m_gmt_mgr->PixelModuleServiceThick(iSvc);
227 double offsetX =
m_gmt_mgr->PixelModuleServiceOffsetX(iSvc);
228 double tmp = offsetX+locThick;
229 thickSvc = std::max(thickSvc,tmp);
233 return thick+thickSvc;
GeoPixelModule(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX, GeoPixelSiCrystal &theSensor)
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)