ATLAS Offline Software
Loading...
Searching...
No Matches
GeoPixelDetailedStaveSupport.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef PIXELGEOMODEL_GEOPIXELDETAILEDSTAVESUPPORT_H
6#define PIXELGEOMODEL_GEOPIXELDETAILEDSTAVESUPPORT_H
7
10#include "GeoModelKernel/GeoDefinitions.h"
11#include "GeoModelKernel/GeoPhysVol.h"
12
14
16
17public:
20 GeoModelIO::ReadGeoModel* sqliteReader,
21 std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
22 std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX);
23 virtual GeoVPhysVol* Build() override;
24 virtual GeoVPhysVol* getPhysVol() override {return m_physVol;}
25 virtual const GeoTrf::Transform3D & transform() const override {return m_transform;}
26 virtual double thicknessP() const override {return m_thicknessP;}
27 virtual double thicknessN() const override {return m_thicknessN;}
28 virtual GeoSimplePolygonBrep* computeStaveEnvelopShape( double safetyMargin) override;
29 virtual GeoPhysVol* getEndblockEnvelopShape( int ) override;
30 virtual GeoTransform* getEndblockEnvelopShapeTrf( int ) override;
31 virtual double getEndblockZpos() const override { return m_endblockZpos; };
32 virtual double getServiceZpos() const override { return m_serviceZpos; };
33 virtual double getEndblockLength() const override { return m_endblockLength+m_endblockSrvLength; };
34 virtual void computeStaveEnvelopTransformAndSize(double moduleThickN,double moduleThickP, double moduleWidth,
35 double moduleThickN3D,double moduleThickP3D, double moduleWidth3D) override;
36 virtual int PixelNModule() const override { return m_PlanarModuleNumber+m_3DModuleNumber; }
37 virtual int PixelNPlanarModule() const override{ return m_PlanarModuleNumber; }
38 virtual int PixelN3DModule() const override { return m_3DModuleNumber; }
39
40private:
44
45 GeoPhysVol* m_endblockAPhysVol = nullptr;
46 GeoPhysVol* m_endblockCPhysVol = nullptr;
47 double m_endblockZpos = 0.0, m_endblockLength = 0.0, m_serviceZpos = 0.0;
48 double m_endblockSrvLength = 0.0;
49 GeoPhysVol* m_endblockFlexPhysVol = nullptr;
51 GeoPhysVol* m_serviceCoolPipePhysVol = nullptr;
54
55 GeoTrf::Transform3D m_transform;
56 double m_thicknessP = 0.0;
57 double m_thicknessN = 0.0;
58 double m_thicknessN_svc = 0.0;
59 double m_width_svc = 0.0;
60 double m_SafetyMargin = 0.0;
61 bool m_bVerbose{};
62
63 void RemoveCoincidentAndColinearPointsFromShape(std::vector<double> &xPoint, std::vector<double>&yPoint);
64 void GetSurroundingConvexShape(std::vector<double> &xPoint, std::vector<double>&yPoint,
65 std::vector<int> iExcept = std::vector<int>());
66 void AddSurroundingXYMargin(double vMarginX, double vMarginY, std::vector<double> &xPoint, std::vector<double>&yPoint);
67
69
70 double m_StaveLength = 0.0;
71 double m_FoamEdgePointX = 0.0;
72 double m_FoamEdgePointY = 0.0;
73 double m_FoamMiddleThick = 0.0;
80
82 GeoTrf::Vector3D IntersectionPoint(double Ax,double Ay,double Bx,double By,double Cx,double Cy,double Dx,double Dy);
83 GeoTrf::Vector3D NormalizeDir(GeoTrf::Vector3D v);
84 GeoTrf::Vector3D NeighbourPoint_Rad(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta);
85 GeoTrf::Vector3D NeighbourPoint_Perp(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta, int iDir);
86 double ComputeAngle(double ux, double uy, double vx, double vy);
87 double ComputeDistance(GeoTrf::Vector3D p, GeoTrf::Vector3D q);
88
89 static constexpr double m_oneDegree = 180.0/M_PI;
90
91};
92
93#endif
94
#define M_PI
GeoIntrusivePtr< T > GeoNodePtr
Definition GeoNodePtr.h:12
GeoPixelDetailedStaveSupport(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)
virtual GeoVPhysVol * Build() override
GeoTrf::Vector3D NormalizeDir(GeoTrf::Vector3D v)
virtual int PixelN3DModule() const override
virtual double getEndblockZpos() const override
virtual const GeoTrf::Transform3D & transform() const override
GeoNodePtr< GeoTransform > m_serviceCoolPipeTrfC
void GetSurroundingConvexShape(std::vector< double > &xPoint, std::vector< double > &yPoint, std::vector< int > iExcept=std::vector< int >())
GeoNodePtr< GeoTransform > m_endblockFlexTrf
GeoNodePtr< GeoSimplePolygonBrep > m_basicStaveEnvelopShape
virtual double thicknessP() const override
virtual double getServiceZpos() const override
double ComputeDistance(GeoTrf::Vector3D p, GeoTrf::Vector3D q)
virtual void computeStaveEnvelopTransformAndSize(double moduleThickN, double moduleThickP, double moduleWidth, double moduleThickN3D, double moduleThickP3D, double moduleWidth3D) override
virtual GeoTransform * getEndblockEnvelopShapeTrf(int) override
GeoNodePtr< GeoTransform > m_serviceCoolPipeTrfA
GeoTrf::Vector3D IntersectionPoint(double Ax, double Ay, double Bx, double By, double Cx, double Cy, double Dx, double Dy)
double ComputeAngle(double ux, double uy, double vx, double vy)
void RemoveCoincidentAndColinearPointsFromShape(std::vector< double > &xPoint, std::vector< double > &yPoint)
virtual GeoPhysVol * getEndblockEnvelopShape(int) override
virtual int PixelNModule() const override
virtual GeoSimplePolygonBrep * computeStaveEnvelopShape(double safetyMargin) override
GeoNodePtr< GeoSimplePolygonBrep > m_staveEnvelopShape
GeoTrf::Vector3D NeighbourPoint_Rad(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta)
virtual double getEndblockLength() const override
GeoTrf::Vector3D NeighbourPoint_Perp(GeoTrf::Vector3D p, GeoTrf::Vector3D v, double delta, int iDir)
void AddSurroundingXYMargin(double vMarginX, double vMarginY, std::vector< double > &xPoint, std::vector< double > &yPoint)
virtual double thicknessN() const override
virtual int PixelNPlanarModule() const override
virtual GeoVPhysVol * getPhysVol() override
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel ...