ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetDetDescr
SCT_GeoModel
src
SCT_InnerSide.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
//
6
// 13rd Mar 2005 D.Naito
7
// 28th Mar 2005 S.Mima
8
// Wed 15th Jun 2005 D.Naito modified.
9
//
10
#include "
SCT_InnerSide.h
"
11
12
#include "
SCT_MaterialManager.h
"
13
14
#include "
SCT_GeometryManager.h
"
15
#include "
SCT_BarrelModuleParameters.h
"
16
#include "
SCT_GeneralParameters.h
"
17
#include "
SCT_Identifier.h
"
18
19
// module parts.
20
#include "
SCT_Sensor.h
"
21
#include "
SCT_Hybrid.h
"
22
23
#include "
SCT_ReadoutGeometry/SCT_DetectorManager.h
"
24
25
#include "GeoModelRead/ReadGeoModel.h"
26
#include "GeoModelKernel/GeoBox.h"
27
#include "GeoModelKernel/GeoLogVol.h"
28
#include "GeoModelKernel/GeoPhysVol.h"
29
#include "GeoModelKernel/GeoFullPhysVol.h"
30
#include "GeoModelKernel/GeoNameTag.h"
31
#include "GeoModelKernel/GeoIdentifierTag.h"
32
#include "GeoModelKernel/GeoTransform.h"
33
#include "GeoModelKernel/GeoShape.h"
34
#include "GeoModelKernel/GeoShapeUnion.h"
35
#include "GeoModelKernel/GeoShapeShift.h"
36
#include "GeoModelKernel/GeoDefinitions.h"
37
#include "GaudiKernel/SystemOfUnits.h"
38
39
#include <cmath>
40
#include <utility>
41
42
SCT_InnerSide::SCT_InnerSide
(
const
std::string & name,
43
InDetDD::SCT_DetectorManager
* detectorManager,
44
SCT_GeometryManager
* geometryManager,
45
SCT_MaterialManager
* materials,
46
GeoModelIO::ReadGeoModel* sqliteReader,
47
std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
48
std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
49
:
SCT_UniqueComponentFactory
(name, detectorManager, geometryManager, materials, sqliteReader,
std
::move(mapFPV),
std
::move(mapAX))
50
{
51
getParameters
();
52
m_logVolume
=
SCT_InnerSide::preBuild
();
53
}
54
55
56
SCT_InnerSide::~SCT_InnerSide
() =
default
;
57
58
void
59
SCT_InnerSide::getParameters
()
60
{
61
const
SCT_BarrelModuleParameters
* parameters =
m_geometryManager
->barrelModuleParameters();
62
const
SCT_GeneralParameters
* generalParameters =
m_geometryManager
->generalParameters();
63
64
m_safety
= generalParameters->
safety
();
65
m_hybridOffsetZ
= parameters->hybridOffsetZ();
66
m_hybridOffsetX
= parameters->hybridOffsetX();
67
}
68
69
70
const
GeoLogVol *
71
SCT_InnerSide::preBuild
()
72
{
73
// Create child components
74
m_sensor
= std::make_unique<SCT_Sensor>(
"BRLSensor"
,
m_detectorManager
,
m_geometryManager
,
m_materials
,
m_sqliteReader
,
m_mapFPV
,
m_mapAX
);
75
76
if
(
m_sqliteReader
)
return
nullptr
;
77
78
m_hybrid
= std::make_unique<SCT_Hybrid>(
"Hybrid"
,
m_detectorManager
,
m_geometryManager
,
m_materials
);
79
80
//
81
// Define constants for convenience.
82
// t_XXX: thickness of XXX.
83
// w_XXX: width of XXX.
84
// l_XXX: length of XXX.
85
//
86
const
double
t_hybrid =
m_hybrid
->thickness();
87
const
double
w_hybrid =
m_hybrid
->width();
88
const
double
l_hybrid =
m_hybrid
->length();
89
90
const
double
t_sensor =
m_sensor
->thickness();
91
const
double
w_sensor =
m_sensor
->width();
92
const
double
l_sensor =
m_sensor
->length();
93
94
//
95
// Calculate a few things.
96
//
97
const
double
sensorPosX = 0.0;
98
const
double
sensorPosY = 0.0;
99
const
double
sensorPosZ = 0.0;
100
101
const
double
hybridPosX =
m_hybridOffsetX
;
102
const
double
hybridPosY = 0.0;
103
const
double
hybridPosZ =
m_hybridOffsetZ
;
104
105
//
106
// ise : InnerSideEnvelope
107
// Reference: sct_module_geometry.ps
108
//
109
const
double
w_ise1 = w_sensor +
m_safety
;
110
const
double
t_ise1 = t_sensor +
m_safety
;
111
const
double
l_ise1 = l_sensor +
m_safety
;
112
113
const
double
t_ise2 = t_hybrid +
m_safety
;
114
const
double
w_ise2 = w_hybrid +
m_safety
;
115
const
double
l_ise2 = l_hybrid +
m_safety
;
116
117
const
double
ise2PosX = hybridPosX;
118
const
double
ise2PosY = hybridPosY;
119
const
double
ise2PosZ = hybridPosZ;
120
121
m_env1RefPointVector
= std::make_unique<GeoTrf::Vector3D>(0.0, 0.0, 0.0);
122
m_env2RefPointVector
= std::make_unique<GeoTrf::Vector3D>(-ise2PosX, -ise2PosY, -ise2PosZ);
123
124
m_hybridPos
=
new
GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
125
126
// The depth axis goes from the backside to the implant side
127
// and so point away from the module center.
128
// The two sensor+hybrid combinations are built in a similar way.
129
//
130
// ^
131
// --- hybrid |
132
// ------- sensor | x-axis
133
//
134
// Shown is the outer side. The inner side is the same but with a rotation of 180 deg around the z-axis.
135
//
136
//Gaudi::Units::HepRotation rotSensor;
137
//rotSensor.rotateZ(180*Gaudi::Units::deg);
138
m_sensorPos
=
new
GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
139
140
//
141
// Make an envelope for the whole module.
142
//
143
const
GeoBox * ise1Shape =
new
GeoBox(0.5 * t_ise1,
144
0.5 * w_ise1,
145
0.5 * l_ise1);
146
const
GeoBox * ise2Shape =
new
GeoBox(0.5 * t_ise2,
147
0.5 * w_ise2,
148
0.5 * l_ise2);
149
150
const
GeoShape & InnerSideEnvelopeShape = (*ise1Shape).
151
add
(*ise2Shape << GeoTrf::Translate3D(ise2PosX, ise2PosY, ise2PosZ));
152
153
const
GeoLogVol * InnerSideEnvelopeLog =
new
GeoLogVol(
"InnerSideEnvelope"
,
154
&InnerSideEnvelopeShape,
155
m_materials
->gasMaterial());
156
m_thickness
= 0.5*t_ise1 + hybridPosX + 0.5*t_ise2;
157
m_width
= w_ise1;
158
m_length
= l_ise1;
159
160
return
InnerSideEnvelopeLog;
161
}
162
163
164
GeoVPhysVol *
165
SCT_InnerSide::build
(
SCT_Identifier
id
)
166
{
167
168
if
(
m_sqliteReader
){
169
170
m_sensor
->build(
id
);
171
return
nullptr
;
172
173
}
174
GeoFullPhysVol * innerSide =
new
GeoFullPhysVol(
m_logVolume
);
175
176
//
177
// Build the innerSide
178
//
179
// Add Sensor
180
innerSide->add(
new
GeoIdentifierTag(1000));
181
innerSide->add(
m_sensorPos
);
182
innerSide->add(
m_sensor
->build(
id
));
183
184
// Add Hybrid
185
innerSide->add(
m_hybridPos
);
186
innerSide->add(
m_hybrid
->getVolume());
187
188
return
innerSide;
189
}
SCT_BarrelModuleParameters.h
SCT_DetectorManager.h
SCT_GeneralParameters.h
SCT_GeometryManager.h
SCT_Hybrid.h
SCT_Identifier.h
SCT_InnerSide.h
SCT_MaterialManager.h
SCT_Sensor.h
InDetDD::SCT_DetectorManager
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated SCT in...
Definition
SCT_DetectorManager.h:50
SCT_BarrelModuleParameters
Definition
SCT_BarrelModuleParameters.h:12
SCT_ComponentFactory::m_detectorManager
InDetDD::SCT_DetectorManager * m_detectorManager
Definition
SCT_ComponentFactory.h:38
SCT_ComponentFactory::m_geometryManager
SCT_GeometryManager * m_geometryManager
Definition
SCT_ComponentFactory.h:39
SCT_ComponentFactory::m_materials
SCT_MaterialManager * m_materials
Definition
SCT_ComponentFactory.h:40
SCT_GeneralParameters
Definition
SCT_GeneralParameters.h:16
SCT_GeneralParameters::safety
double safety() const
Definition
SCT_GeneralParameters.cxx:48
SCT_GeometryManager
Definition
SCT_GeometryManager.h:25
SCT_Identifier
Definition
SCT_Identifier.h:12
SCT_InnerSide::m_width
double m_width
Definition
SCT_InnerSide.h:73
SCT_InnerSide::getParameters
void getParameters()
Definition
SCT_InnerSide.cxx:59
SCT_InnerSide::SCT_InnerSide
SCT_InnerSide(const std::string &name, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)
Definition
SCT_InnerSide.cxx:42
SCT_InnerSide::m_sensorPos
GeoIntrusivePtr< GeoTransform > m_sensorPos
Definition
SCT_InnerSide.h:84
SCT_InnerSide::m_length
double m_length
Definition
SCT_InnerSide.h:74
SCT_InnerSide::m_sensor
std::unique_ptr< SCT_Sensor > m_sensor
Definition
SCT_InnerSide.h:81
SCT_InnerSide::m_hybridPos
GeoIntrusivePtr< GeoTransform > m_hybridPos
Definition
SCT_InnerSide.h:83
SCT_InnerSide::m_thickness
double m_thickness
Definition
SCT_InnerSide.h:72
SCT_InnerSide::m_env1RefPointVector
std::unique_ptr< GeoTrf::Vector3D > m_env1RefPointVector
Definition
SCT_InnerSide.h:86
SCT_InnerSide::preBuild
virtual const GeoLogVol * preBuild()
Definition
SCT_InnerSide.cxx:71
SCT_InnerSide::m_hybrid
std::unique_ptr< SCT_Hybrid > m_hybrid
Definition
SCT_InnerSide.h:80
SCT_InnerSide::m_safety
double m_safety
Definition
SCT_InnerSide.h:78
SCT_InnerSide::~SCT_InnerSide
~SCT_InnerSide()
SCT_InnerSide::build
virtual GeoVPhysVol * build(SCT_Identifier id)
Definition
SCT_InnerSide.cxx:165
SCT_InnerSide::m_env2RefPointVector
std::unique_ptr< GeoTrf::Vector3D > m_env2RefPointVector
Definition
SCT_InnerSide.h:87
SCT_InnerSide::m_hybridOffsetZ
double m_hybridOffsetZ
Definition
SCT_InnerSide.h:77
SCT_InnerSide::m_hybridOffsetX
double m_hybridOffsetX
Definition
SCT_InnerSide.h:76
SCT_MaterialManager
Definition
SCT_MaterialManager.h:21
SCT_UniqueComponentFactory::SCT_UniqueComponentFactory
SCT_UniqueComponentFactory(const std::string &name, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials=nullptr, GeoModelIO::ReadGeoModel *sqliteReader=nullptr, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV=nullptr, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX=nullptr)
Definition
SCT_ComponentFactory.cxx:34
SCT_UniqueComponentFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition
SCT_ComponentFactory.h:91
SCT_UniqueComponentFactory::m_logVolume
const GeoLogVol * m_logVolume
Definition
SCT_ComponentFactory.h:86
SCT_UniqueComponentFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition
SCT_ComponentFactory.h:92
SCT_UniqueComponentFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition
SCT_ComponentFactory.h:87
add
bool add(const std::string &hname, TKey *tobj)
Definition
fastadd.cxx:55
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0