![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
9 #include "GeoModelKernel/GeoBox.h"
10 #include "GeoModelKernel/GeoPhysVol.h"
11 #include "GeoModelKernel/GeoLogVol.h"
12 #include "GeoModelKernel/GeoNameTag.h"
13 #include "GeoModelKernel/GeoIdentifierTag.h"
14 #include "GeoModelKernel/GeoFullPhysVol.h"
15 #include "GeoModelKernel/GeoMaterial.h"
16 #include "GeoModelKernel/GeoTransform.h"
17 #include "GeoModelKernel/GeoShapeShift.h"
18 #include "GeoModelKernel/GeoShapeUnion.h"
19 #include "GaudiKernel/SystemOfUnits.h"
25 GeoModelIO::ReadGeoModel* sqliteReader,
26 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
27 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX,
30 , m_theSensor(theSensor)
58 const GeoBox* moduleBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
59 const GeoShape * moduleShape = moduleBox;
60 m_theModule =
new GeoLogVol(logName,moduleShape,air);
70 const GeoBox* moduleBox =
new GeoBox(thickness/2.,
width/2.,
length/2.);
71 const GeoShape & shiftedBox = (*moduleBox) << GeoTrf::TranslateX3D(shift);
72 const GeoShape * moduleShape = &shiftedBox;
75 m_theModule =
new GeoLogVol(logName,moduleShape,air);
78 const GeoShape * gblShape =
nullptr;
79 gblShape =
addShape(gblShape, moduleShape, GeoTrf::Transform3D::Identity() );
81 double svcWidth =
width*.6;
84 double yShift =
width*.5-svcWidth*.75;
86 gblShape =
addShape(gblShape, moduleSvcBox1, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
89 yShift =
width*.5-svcWidth*.25;
91 gblShape =
addShape(gblShape, moduleSvcBox2, (GeoTrf::TranslateX3D(-xShift)*GeoTrf::TranslateY3D(-yShift)) );
99 if(
type==svcType&&(
name==
"WingFlex"||offsetX<0)) {
104 const GeoBox* moduleSvcBox3 =
new GeoBox(thick_svc*.5+.01,width_svc*.5+.01,
length*.5+.01);
105 gblShape =
addShape(gblShape, moduleSvcBox3, (GeoTrf::TranslateX3D(xPos)*GeoTrf::TranslateY3D(offsetY)) );
125 GeoFullPhysVol* modulePhys =
new GeoFullPhysVol(
m_theModule);
132 GeoNameTag *
tag =
new GeoNameTag(sensorName);
133 modulePhys->add(
tag);
140 modulePhys->add(
new GeoIdentifierTag(idTag) );
144 modulePhys->add(theSi );
151 GeoTransform* xform =
new GeoTransform(GeoTrf::TranslateX3D(hybxpos));
152 modulePhys->add(xform);
153 modulePhys->add(ph.
Build() );
162 GeoTransform* xform =
new GeoTransform(GeoTrf::TranslateX3D(chipxpos)*GeoTrf::TranslateY3D(chipypos));
163 modulePhys->add(xform);
164 modulePhys->add(
pc.Build() );
186 const GeoBox* svcBox =
new GeoBox(thick*.5-0.01,
width*.5,
length*.5);
188 GeoLogVol* svcLogVol =
new GeoLogVol(
name, svcBox, svcMat);
189 GeoPhysVol* svcPhys =
new GeoPhysVol(svcLogVol);
192 double yPos = offsetY;
193 double zPos = offsetZ;
194 GeoTransform* xform =
new GeoTransform(GeoTrf::Translate3D(xPos,yPos,zPos));
195 modulePhys->add(xform);
196 modulePhys->add(svcPhys);
223 if(
type==svcType&&fullSize==1){
226 double tmp = offsetX+locThick;
231 return thick+thickSvc;
259 double tmp = offsetX+locThick;
265 return thick+thickSvc;
318 const GeoShape * shiftedShape = &(*nextShape << trans);
320 lastShape = &(lastShape->add(*shiftedShape));
322 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)