|
ATLAS Offline Software
|
Go to the documentation of this file.
11 #include "GeoModelKernel/GeoBox.h"
12 #include "GeoModelKernel/GeoPhysVol.h"
13 #include "GeoModelKernel/GeoLogVol.h"
14 #include "GeoModelKernel/GeoNameTag.h"
15 #include "GeoModelKernel/GeoIdentifierTag.h"
16 #include "GeoModelKernel/GeoFullPhysVol.h"
17 #include "GeoModelKernel/GeoMaterial.h"
18 #include "GeoModelKernel/GeoTransform.h"
19 #include "GeoModelKernel/GeoShapeShift.h"
20 #include "GeoModelKernel/GeoShapeUnion.h"
21 #include "GaudiKernel/SystemOfUnits.h"
27 GeoModelIO::ReadGeoModel* sqliteReader,
28 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
29 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX,
32 , m_theSensor(theSensor)
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)) );
101 if(
type==svcType&&(
name==
"WingFlex"||offsetX<0)) {
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);
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() );
188 const GeoBox* svcBox =
new GeoBox(thick*.5-0.01,
width*.5,
length*.5);
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);
225 if(
type==svcType&&fullSize==1){
228 double tmp = offsetX+locThick;
233 return thick+thickSvc;
261 double tmp = offsetX+locThick;
267 return thick+thickSvc;
320 const GeoShape * shiftedShape = &(*nextShape << trans);
322 lastShape = &(lastShape->add(*shiftedShape));
324 lastShape = shiftedShape;
GeoIntrusivePtr< const GeoLogVol > m_theModule
virtual GeoVPhysVol * Build() override
virtual double PixelChipThickness(bool isModule3D=false)=0
const GeoShape * addShape(const GeoShape *lastShape, const GeoShape *nextShape, const GeoTrf::Transform3D &trans)
virtual double PixelChipWidth(bool isModule3D=false)=0
virtual int PixelModuleServiceModuleType(int svc)=0
virtual std::string PixelModuleServiceName(int svc)=0
virtual double PixelModuleServiceLength(int svc)=0
virtual double PixelModuleServiceOffsetZ(int svc)=0
virtual int PixelModuleServiceFullSize(int svc)=0
virtual GeoVPhysVol * Build() override
virtual double PixelHybridWidth(bool isModule3D=false)=0
virtual double PixelChipGap(bool isModule3D=false)=0
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
GeoModelIO::ReadGeoModel * m_sqliteReader
virtual double PixelHybridThickness(bool isModule3D=false)=0
double ThicknessN_noSvc()
InDetDD::PixelDetectorManager * m_DDmgr
PixelGeometryManager * m_gmt_mgr
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
virtual bool isBarrel()=0
virtual double PixelBoardThickness(bool isModule3D=false)=0
Eigen::Affine3d Transform3D
virtual double PixelChipOffset(bool isModule3D=false)=0
virtual int PixelModuleServiceNumber()=0
const GeoMaterial * getMaterialForVolume(const std::string &materialName, double volume, const std::string &newName="")
Create and get material with a density calculated to give weight in predefined weight table.
GeoPixelSiCrystal & m_theSensor
virtual bool isEndcap()=0
virtual double PixelChipLength(bool isModule3D=false)=0
virtual double PixelModuleServiceOffsetX(int svc)=0
virtual double PixelModuleServiceOffsetY(int svc)=0
double m_moduleSvcThickness
InDetMaterialManager * m_mat_mgr
virtual double PixelHybridLength(bool isModule3D=false)=0
virtual double PixelBoardLength(bool isModule3D=false)=0
virtual double PixelModuleServiceWidth(int svc)=0
This is the base class for all the pieces of the Pixel detector.
virtual std::string PixelModuleServiceMaterial(int svc)=0
virtual double PixelBoardWidth(bool isModule3D=false)=0
virtual double PixelModuleServiceThick(int svc)=0
virtual GeoVPhysVol * Build() override
const GeoMaterial * getMaterial(const std::string &materialName)
Get material. First looks for locally defined material and if not found looks in GeoModel material ma...
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)