ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetDetDescr
SCT_GeoModel
src
SCT_InterLink.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
#include "
SCT_InterLink.h
"
6
7
#include "
SCT_MaterialManager.h
"
8
9
#include "
SCT_GeometryManager.h
"
10
#include "
SCT_BarrelParameters.h
"
11
12
#include "GeoModelKernel/GeoTube.h"
13
#include "GeoModelKernel/GeoTubs.h"
14
#include "GeoModelKernel/GeoLogVol.h"
15
#include "GeoModelKernel/GeoPhysVol.h"
16
#include "GeoModelKernel/GeoTransform.h"
17
#include "GaudiKernel/SystemOfUnits.h"
18
19
SCT_InterLink::SCT_InterLink
(
const
std::string & name,
20
InDetDD::SCT_DetectorManager
* detectorManager,
21
SCT_GeometryManager
* geometryManager,
22
SCT_MaterialManager
* materials)
23
:
SCT_SharedComponentFactory
(name, detectorManager, geometryManager, materials),
24
m_interLinkShape
(nullptr),
25
m_interLinkLog
(nullptr),
26
m_interLink
(nullptr),
27
m_interLinkSegShape
(nullptr),
28
m_interLinkSegLog
(nullptr),
29
m_interLinkSeg
(nullptr),
30
m_bearingShape
(nullptr),
31
m_bearingLog
(nullptr),
32
m_bearing
(nullptr),
33
m_FSIFlangeShape
(nullptr),
34
m_FSIFlangeLog
(nullptr),
35
m_FSIFlange
(nullptr)
36
{
37
getParameters
();
38
m_physVolume
=
SCT_InterLink::build
();
39
}
40
41
SCT_InterLink::~SCT_InterLink
() =
default
;
42
43
void
44
SCT_InterLink::getParameters
()
45
{
46
const
SCT_BarrelParameters
* parameters =
m_geometryManager
->barrelParameters();
47
48
// Interlink parameters
49
m_materialName
= parameters->interLinkMaterial();
50
m_length
= parameters->interLinkDeltaZ();
51
m_innerRadius
= parameters->interLinkInnerRadius();
52
m_outerRadius
= parameters->interLinkOuterRadius();
53
m_dPhi
= parameters->interLinkDeltaPhi();
54
m_phiPos
= parameters->interLinkPhiPos();
55
m_nRepeat
= parameters->interLinkNRepeat();
56
57
// FSIFlange parameters: only for non-uniform interlink
58
if
(
m_nRepeat
> 1) {
59
m_includeFSIFlange
= parameters->includeFSI();
60
}
61
else
{
62
m_includeFSIFlange
=
false
;
63
}
64
if
(
m_includeFSIFlange
) {
65
m_innerRadiusFSIFlange
= parameters->fsiFlangeInnerRadius();
66
m_outerRadiusFSIFlange
= parameters->fsiFlangeOuterRadius();
67
m_materialNameFSIFlange
= parameters->fsiFlangeMaterial();
68
}
69
70
// B6 bearing parameters: only for non-uniform interlink
71
if
(
m_nRepeat
> 1) {
72
m_materialNameBearing
= parameters->bearingMaterial();
73
m_lengthBearing
=
m_length
;
74
m_innerRadiusBearing
=
m_outerRadius
;
75
m_outerRadiusBearing
= parameters->thermalShieldBulkheadInnerRadius();
76
m_dPhiBearing
= parameters->bearingDeltaPhi();
77
m_phiPosBearing
= parameters->bearingPhiPos();
78
m_nRepeatBearing
= parameters->bearingNRepeat();
79
}
80
81
}
82
83
GeoVPhysVol *
84
SCT_InterLink::build
()
85
{
86
// Make the interlink.
87
if
(
m_nRepeat
== 1) {
88
// For old geometry interlink is a simple tube of material
89
m_interLinkShape
=
new
GeoTube(
m_innerRadius
,
m_outerRadius
, 0.5*
m_length
);
90
const
GeoMaterial* material =
m_materials
->getMaterialForVolume(
m_materialName
,
m_interLinkShape
->volume());
91
if
(!material) {material =
m_materials
->getMaterial(
m_materialName
);}
92
m_interLinkLog
=
new
GeoLogVol(
getName
(),
m_interLinkShape
, material);
93
m_interLink
=
new
GeoPhysVol(
m_interLinkLog
);
94
}
95
96
else
{
97
// In updated version we make air tube containing interlink segments and B6 bearings
98
// And also include FSI flange segments if defined
99
// Air tube:
100
m_interLinkShape
=
new
GeoTube(
m_innerRadius
,
m_outerRadiusBearing
, 0.5*
m_length
);
101
m_interLinkLog
=
new
GeoLogVol(
getName
(),
m_interLinkShape
,
m_materials
->gasMaterial());
102
m_interLink
=
new
GeoPhysVol(
m_interLinkLog
);
103
104
// Interlink segments:
105
m_interLinkSegShape
=
new
GeoTubs(
m_innerRadius
,
m_outerRadius
, 0.5*
m_length
, - 0.5*
m_dPhi
*Gaudi::Units::radian,
m_dPhi
*Gaudi::Units::radian);
106
m_interLinkSegLog
=
new
GeoLogVol(
"InterlinkSegment"
,
m_interLinkSegShape
,
m_materials
->getMaterialForVolume(
m_materialName
,
m_interLinkSegShape
->volume()));
107
m_interLinkSeg
=
new
GeoPhysVol(
m_interLinkSegLog
);
108
109
for
(
int
i=0; i<
m_nRepeat
; i++) {
110
double
interlinkAngle =
m_phiPos
+ (i * 360./
m_nRepeat
)*Gaudi::Units::deg;
111
GeoTransform* geoTransform =
new
GeoTransform(GeoTrf::RotateZ3D(interlinkAngle));
112
m_geoTransforms
.push_back(geoTransform);
113
m_interLink
->add(geoTransform);
114
m_interLink
->add(
m_interLinkSeg
);
115
}
116
117
// B6 bearings
118
m_bearingShape
=
new
GeoTubs(
m_innerRadiusBearing
,
m_outerRadiusBearing
, 0.5*
m_lengthBearing
, - 0.5*
m_dPhiBearing
*Gaudi::Units::radian,
m_dPhiBearing
*Gaudi::Units::radian);
119
m_bearingLog
=
new
GeoLogVol(
"Bearing"
,
m_bearingShape
,
m_materials
->getMaterialForVolume(
m_materialNameBearing
,
m_bearingShape
->volume()));
120
m_bearing
=
new
GeoPhysVol(
m_bearingLog
);
121
122
for
(
int
i=0; i<
m_nRepeatBearing
; i++) {
123
double
bearingAngle =
m_phiPosBearing
+ (i * 360./
m_nRepeatBearing
)*Gaudi::Units::deg;
124
GeoTransform* geoTransform =
new
GeoTransform(GeoTrf::RotateZ3D(bearingAngle));
125
m_geoTransforms
.push_back(geoTransform);
126
m_interLink
->add(geoTransform);
127
m_interLink
->add(
m_bearing
);
128
}
129
130
// FSI Flange segments:
131
// These exactly fill gaps between interlink segments, with smaller radial extent
132
if
(
m_includeFSIFlange
) {
133
double
dPhiFSI = (360./
m_nRepeat
)*Gaudi::Units::deg -
m_dPhi
;
134
m_FSIFlangeShape
=
new
GeoTubs(
m_innerRadiusFSIFlange
,
m_outerRadiusFSIFlange
, 0.5*
m_length
, - 0.5*dPhiFSI*Gaudi::Units::radian, dPhiFSI*Gaudi::Units::radian);
135
m_FSIFlangeLog
=
new
GeoLogVol(
"FSIFlangeSegment"
,
m_FSIFlangeShape
,
m_materials
->getMaterialForVolume(
m_materialNameFSIFlange
,
m_FSIFlangeShape
->volume()));
136
m_FSIFlange
=
new
GeoPhysVol(
m_FSIFlangeLog
);
137
138
for
(
int
i=0; i<
m_nRepeat
; i++) {
139
double
phiPosFSI =
m_phiPos
+ (180./
m_nRepeat
)*Gaudi::Units::deg;
140
double
FSIFlangeAngle = phiPosFSI + (i * 360./
m_nRepeat
)*Gaudi::Units::deg;
141
GeoTransform* geoTransform =
new
GeoTransform(GeoTrf::RotateZ3D(FSIFlangeAngle));
142
m_geoTransforms
.push_back(geoTransform);
143
m_interLink
->add(geoTransform);
144
m_interLink
->add(
m_FSIFlange
);
145
}
146
}
147
}
148
149
return
m_interLink
;
150
}
151
SCT_BarrelParameters.h
SCT_GeometryManager.h
SCT_InterLink.h
SCT_MaterialManager.h
InDetDD::SCT_DetectorManager
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated SCT in...
Definition
SCT_DetectorManager.h:50
SCT_BarrelParameters
Definition
SCT_BarrelParameters.h:12
SCT_ComponentFactory::getName
const std::string & getName() const
Definition
SCT_ComponentFactory.h:35
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_GeometryManager
Definition
SCT_GeometryManager.h:25
SCT_InterLink::build
virtual GeoVPhysVol * build()
Definition
SCT_InterLink.cxx:84
SCT_InterLink::getParameters
void getParameters()
Definition
SCT_InterLink.cxx:44
SCT_InterLink::m_geoTransforms
std::vector< GeoIntrusivePtr< GeoTransform > > m_geoTransforms
Definition
SCT_InterLink.h:76
SCT_InterLink::m_materialNameBearing
std::string m_materialNameBearing
Definition
SCT_InterLink.h:56
SCT_InterLink::m_FSIFlangeShape
GeoIntrusivePtr< const GeoTubs > m_FSIFlangeShape
Definition
SCT_InterLink.h:73
SCT_InterLink::m_lengthBearing
double m_lengthBearing
Definition
SCT_InterLink.h:59
SCT_InterLink::m_dPhi
double m_dPhi
Definition
SCT_InterLink.h:45
SCT_InterLink::m_FSIFlangeLog
GeoIntrusivePtr< const GeoLogVol > m_FSIFlangeLog
Definition
SCT_InterLink.h:74
SCT_InterLink::m_phiPos
double m_phiPos
Definition
SCT_InterLink.h:46
SCT_InterLink::m_interLinkShape
GeoIntrusivePtr< const GeoTube > m_interLinkShape
Definition
SCT_InterLink.h:64
SCT_InterLink::m_FSIFlange
GeoIntrusivePtr< GeoPhysVol > m_FSIFlange
Definition
SCT_InterLink.h:75
SCT_InterLink::m_outerRadius
double m_outerRadius
Definition
SCT_InterLink.h:43
SCT_InterLink::m_interLinkSegLog
GeoIntrusivePtr< const GeoLogVol > m_interLinkSegLog
Definition
SCT_InterLink.h:68
SCT_InterLink::SCT_InterLink
SCT_InterLink(const std::string &name, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials)
Definition
SCT_InterLink.cxx:19
SCT_InterLink::m_bearingLog
GeoIntrusivePtr< const GeoLogVol > m_bearingLog
Definition
SCT_InterLink.h:71
SCT_InterLink::m_nRepeatBearing
int m_nRepeatBearing
Definition
SCT_InterLink.h:62
SCT_InterLink::m_interLinkSegShape
GeoIntrusivePtr< const GeoTubs > m_interLinkSegShape
Definition
SCT_InterLink.h:67
SCT_InterLink::m_materialNameFSIFlange
std::string m_materialNameFSIFlange
Definition
SCT_InterLink.h:53
SCT_InterLink::m_innerRadiusFSIFlange
double m_innerRadiusFSIFlange
Definition
SCT_InterLink.h:51
SCT_InterLink::m_innerRadiusBearing
double m_innerRadiusBearing
Definition
SCT_InterLink.h:57
SCT_InterLink::m_bearingShape
GeoIntrusivePtr< const GeoTubs > m_bearingShape
Definition
SCT_InterLink.h:70
SCT_InterLink::m_outerRadiusBearing
double m_outerRadiusBearing
Definition
SCT_InterLink.h:58
SCT_InterLink::m_interLinkLog
GeoIntrusivePtr< const GeoLogVol > m_interLinkLog
Definition
SCT_InterLink.h:65
SCT_InterLink::~SCT_InterLink
~SCT_InterLink()
SCT_InterLink::m_outerRadiusFSIFlange
double m_outerRadiusFSIFlange
Definition
SCT_InterLink.h:52
SCT_InterLink::m_dPhiBearing
double m_dPhiBearing
Definition
SCT_InterLink.h:60
SCT_InterLink::m_interLinkSeg
GeoIntrusivePtr< GeoPhysVol > m_interLinkSeg
Definition
SCT_InterLink.h:69
SCT_InterLink::m_length
double m_length
Definition
SCT_InterLink.h:44
SCT_InterLink::m_bearing
GeoIntrusivePtr< GeoPhysVol > m_bearing
Definition
SCT_InterLink.h:72
SCT_InterLink::m_innerRadius
double m_innerRadius
Definition
SCT_InterLink.h:42
SCT_InterLink::m_phiPosBearing
double m_phiPosBearing
Definition
SCT_InterLink.h:61
SCT_InterLink::m_nRepeat
int m_nRepeat
Definition
SCT_InterLink.h:47
SCT_InterLink::m_interLink
GeoIntrusivePtr< GeoPhysVol > m_interLink
Definition
SCT_InterLink.h:66
SCT_InterLink::m_includeFSIFlange
bool m_includeFSIFlange
Definition
SCT_InterLink.h:50
SCT_InterLink::m_materialName
std::string m_materialName
Definition
SCT_InterLink.h:41
SCT_MaterialManager
Definition
SCT_MaterialManager.h:21
SCT_SharedComponentFactory::m_physVolume
GeoVPhysVol * m_physVolume
Definition
SCT_ComponentFactory.h:66
SCT_SharedComponentFactory::SCT_SharedComponentFactory
SCT_SharedComponentFactory(const std::string &name, InDetDD::SCT_DetectorManager *detectorManager, SCT_GeometryManager *geometryManager, SCT_MaterialManager *materials=nullptr)
Definition
SCT_ComponentFactory.h:56
Generated on
for ATLAS Offline Software by
1.17.0