ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonDetDescr
MuonGeoModel
src
MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
MuonGeoModel/Spacer.h
"
6
7
#include "
AthenaKernel/getMessageSvc.h
"
8
#include "GaudiKernel/MsgStream.h"
9
#include "GaudiKernel/SystemOfUnits.h"
10
#include "GeoModelKernel/GeoDefinitions.h"
11
#include "GeoModelKernel/GeoLogVol.h"
12
#include "GeoModelKernel/GeoMaterial.h"
13
#include "GeoModelKernel/GeoNameTag.h"
14
#include "GeoModelKernel/GeoPhysVol.h"
15
#include "GeoModelKernel/GeoSerialDenominator.h"
16
#include "GeoModelKernel/GeoSerialIdentifier.h"
17
#include "GeoModelKernel/GeoShapeShift.h"
18
#include "GeoModelKernel/GeoShapeUnion.h"
19
#include "GeoModelKernel/GeoTransform.h"
20
#include "GeoModelKernel/GeoTrd.h"
21
#include "GeoModelKernel/GeoTube.h"
22
#include "GeoModelKernel/GeoVPhysVol.h"
23
#include "
MuonGeoModel/MYSQL.h
"
24
#include "
MuonGeoModel/SpaComponent.h
"
25
#include "
MuonGeoModel/Station.h
"
26
#include "
MuonGeoModel/Technology.h
"
27
// for cutouts:
28
#include "GeoModelKernel/GeoShapeSubtraction.h"
29
30
#define skip_spacer false
31
32
namespace
MuonGM
{
33
34
Spacer::Spacer
(
const
MYSQL
& mysql,
Component
*
ss
) :
DetectorElement
(
ss
->
name
) {
35
SpaComponent
*s =
static_cast<
SpaComponent
*
>
(
ss
);
36
width
= s->dx1;
37
longWidth
= s->dx2;
38
thickness
= mysql.
GetTechnology
(s->name)->
thickness
;
39
length
= s->dy;
40
m_component
= *s;
41
}
42
43
GeoVPhysVol *
Spacer::build
(
StoredMaterialManager
& matManager) {
44
int
cutoutson = 0;
45
return
build
(matManager, cutoutson);
46
}
47
48
GeoVPhysVol *
Spacer::build
(
StoredMaterialManager
& matManager,
int
/*cutoutson*/
) {
49
if
(
name
==
"SPA06"
||
name
==
"SPA01"
) {
50
double
excent =
m_component
.excent;
51
double
maxwLength =
m_component
.maxwdy;
52
53
const
GeoShape *strd =
new
GeoTrd(
thickness
/ 2.,
thickness
/ 2.,
width
/ 2.,
longWidth
/ 2., maxwLength / 2.);
54
double
upWidth = 0.;
55
if
(excent >
length
)
56
upWidth =
longWidth
* (excent -
length
) / (excent - maxwLength);
57
58
if
(excent >
length
&& (
length
- maxwLength) > 0) {
59
// std::cout<<" Here is an exagonal SPA ***** named "<<name<<" excent = "
60
// <<excent<<" length = "<<length<<std::endl;
61
GeoTrd *upTrd =
new
GeoTrd(
thickness
/ 2.,
thickness
/ 2.,
longWidth
/ 2., upWidth / 2., (
length
- maxwLength) / 2.);
62
strd = &((strd->add((*upTrd) << GeoTrf::TranslateZ3D(
length
/ 2.))) << GeoTrf::TranslateZ3D((maxwLength -
length
) / 2.));
63
}
64
65
const
GeoMaterial *mtrd = matManager.
getMaterial
(
"std::Aluminium"
);
66
const
GeoLogVol *lspa =
new
GeoLogVol(
"CSCspacer"
, strd, mtrd);
67
GeoPhysVol *pspa =
new
GeoPhysVol(lspa);
68
return
pspa;
69
70
}
else
{
71
const
GeoShape *strd =
new
GeoTrd(
thickness
/ 2,
thickness
/ 2,
width
/ 2,
longWidth
/ 2,
length
/ 2);
72
const
GeoMaterial *mtrd = matManager.
getMaterial
(
"std::Air"
);
73
GeoLogVol *ltrd =
new
GeoLogVol(
"Spacer"
, strd, mtrd);
74
GeoPhysVol *ptrd =
new
GeoPhysVol(ltrd);
75
76
double
tckibeam =
thickness
/ 5.;
77
double
dx = tckibeam;
78
double
dy = 3. * tckibeam;
79
80
GeoVPhysVol *ptrdtemp =
nullptr
;
81
82
GeoTrd *strd1 =
new
GeoTrd(dx / 2, dx / 2, dy / 2, dy / 2,
length
/ 2);
83
const
GeoMaterial *mtrd1 = matManager.
getMaterial
(
"std::Aluminium"
);
84
GeoLogVol *ltrd1 =
new
GeoLogVol(
"ibeam1"
, strd1, mtrd1);
85
GeoPhysVol *ptrd1 =
new
GeoPhysVol(ltrd1);
86
87
GeoTrd *strd2 =
new
GeoTrd(dy / 2, dy / 2, dx / 2, dx / 2,
length
/ 2);
88
const
GeoMaterial *mtrd2 = matManager.
getMaterial
(
"std::Aluminium"
);
89
GeoLogVol *ltrd2 =
new
GeoLogVol(
"ibeam2"
, strd2, mtrd2);
90
GeoPhysVol *ptrd2 =
new
GeoPhysVol(ltrd2);
91
92
GeoSerialDenominator *sd =
new
GeoSerialDenominator(
name
+
" ibeam"
);
93
if
(!
skip_spacer
) {
94
ptrd->add(sd);
95
ptrd->add(
new
GeoSerialIdentifier(0));
96
}
97
98
double
newpos = -
thickness
/ 2.;
99
double
wherepos = newpos;
100
double
wherewidth = -
width
/ 2.;
101
for
(
int
j = 0; j < 3; j++) {
102
for
(
int
i = 0; i < 3; i++) {
103
ptrdtemp = ptrd1;
104
if
(i == 1) {
105
ptrdtemp = ptrd2;
106
tckibeam = dy;
107
}
108
GeoTransform *xf =
new
GeoTransform(GeoTrf::Translate3D(wherepos + tckibeam / 2, wherewidth + dy / 2, 0));
109
if
(!
skip_spacer
) {
110
ptrd->add(xf);
111
ptrd->add(ptrdtemp);
112
}
113
wherepos += tckibeam;
114
tckibeam = dx;
115
}
116
wherepos -=
thickness
;
117
wherewidth += (
width
/ 2. - dy / 2.);
118
}
119
120
double
vtubl = (
width
- 5 * tckibeam) / 2.;
121
122
GeoSerialDenominator *ntube =
new
GeoSerialDenominator(
name
+
" vbeam"
);
123
if
(!
skip_spacer
) {
124
ptrd->add(ntube);
125
ptrd->add(
new
GeoSerialIdentifier(0));
126
}
127
128
for
(
int
k1 = 0; k1 < 2; k1++) {
129
for
(
int
k = 0; k < 2; k++) {
130
GeoTransform *ttube =
new
GeoTransform(GeoTrf::RotateX3D(-90 * Gaudi::Units::deg) *
131
GeoTrf::Translate3D(0., -(vtubl + tckibeam) / 2. - (k - 1) * (vtubl + tckibeam), -
length
/ 4. - (k1 - 1) *
length
/ 2));
132
if
(!
skip_spacer
)
133
ptrd->add(ttube);
134
}
135
}
136
137
return
ptrd;
138
}
139
}
140
141
void
Spacer::print
()
const
{
142
MsgStream log(
Athena::getMessageSvc
(),
"MuGM:MuonChamber:Spacer"
);
143
log << MSG::INFO <<
"Spacer "
<<
name
<<
" :"
<<
endmsg
;
144
}
145
146
}
// namespace MuonGM
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
ss
static Double_t ss
Definition
LArPhysWaveHECTool.cxx:37
MYSQL.h
Spacer.h
skip_spacer
#define skip_spacer
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx:30
SpaComponent.h
Station.h
Technology.h
MuonGM::Component
Definition
Component.h:11
MuonGM::DetectorElement::name
std::string name
Definition
DetectorElement.h:17
MuonGM::DetectorElement::DetectorElement
DetectorElement(const std::string &n)
Definition
DetectorElement.h:20
MuonGM::MYSQL
Definition
MYSQL.h:43
MuonGM::MYSQL::GetTechnology
Technology * GetTechnology(const std::string &name)
Definition
MYSQL.cxx:105
MuonGM::SpaComponent
Definition
SpaComponent.h:12
MuonGM::Spacer::longWidth
double longWidth
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h:22
MuonGM::Spacer::thickness
double thickness
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h:21
MuonGM::Spacer::print
virtual void print() const override
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx:141
MuonGM::Spacer::Spacer
Spacer(const MYSQL &mysql, Component *s)
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx:34
MuonGM::Spacer::width
double width
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h:19
MuonGM::Spacer::m_component
SpaComponent m_component
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h:30
MuonGM::Spacer::length
double length
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h:20
MuonGM::Spacer::build
GeoVPhysVol * build(StoredMaterialManager &matManager)
Definition
MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx:43
MuonGM::Technology::thickness
double thickness
Definition
Technology.h:20
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition
StoredMaterialManager.h:30
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(std::string_view name)=0
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition
getMessageSvc.cxx:20
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition
GeoMuonHits.h:27
Generated on
for ATLAS Offline Software by
1.17.0