ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArGeoModel
LArGeoEndcap
src
EndcapPresamplerConstruction.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
LArGeoEndcap/EndcapPresamplerConstruction.h
"
6
#include "GeoModelKernel/GeoElement.h"
7
#include "GeoModelKernel/GeoMaterial.h"
8
#include "GeoModelKernel/GeoFullPhysVol.h"
9
#include "GeoModelKernel/GeoPhysVol.h"
10
#include "GeoModelKernel/GeoVPhysVol.h"
11
#include "GeoModelKernel/GeoLogVol.h"
12
#include "GeoModelKernel/GeoTubs.h"
13
#include "GeoModelKernel/GeoNameTag.h"
14
#include "GeoModelKernel/GeoIdentifierTag.h"
15
#include "GeoModelKernel/GeoDefinitions.h"
16
#include "
GeoModelInterfaces/StoredMaterialManager.h
"
17
#include "GeoModelKernel/GeoShapeUnion.h"
18
#include "GeoModelKernel/GeoShapeShift.h"
19
20
#include "
StoreGate/StoreGateSvc.h
"
21
#include "GaudiKernel/MsgStream.h"
22
#include "GaudiKernel/Bootstrap.h"
23
#include "GaudiKernel/SystemOfUnits.h"
24
25
// For the database:
26
27
#include "
RDBAccessSvc/IRDBAccessSvc.h
"
28
#include "
RDBAccessSvc/IRDBRecord.h
"
29
#include "
RDBAccessSvc/IRDBRecordset.h
"
30
31
#include "
GeoModelInterfaces/IGeoModelSvc.h
"
32
33
#include <string>
34
#include <cmath>
35
36
37
// EndcapPresamplerConstruction
38
// Insert the LAr Endcap Presampler into a pre-defined mother volume
39
// i.e. into the front cold wall of endcap cryostat (cyl.#14)
40
// 14-Jan-2002 Mikhail Leltchouk
41
42
43
44
EndcapPresamplerConstruction::EndcapPresamplerConstruction
(
bool
imb ):
45
m_psPhysical
(nullptr)
46
{
47
m_isModule
= imb;
48
}
49
50
EndcapPresamplerConstruction::~EndcapPresamplerConstruction
() {;}
51
52
53
GeoIntrusivePtr<GeoFullPhysVol>
EndcapPresamplerConstruction::Envelope
()
54
{
55
if
(
m_psPhysical
)
return
m_psPhysical
->clone();
56
57
58
ISvcLocator *svcLocator = Gaudi::svcLocator();
59
SmartIF<StoreGateSvc> detStore{svcLocator->service(
"DetectorStore"
)};
60
if
(!detStore.isValid()) {
61
throw
std::runtime_error(
"Error in EndcapCryostatConstruction, cannot access DetectorStore"
);
62
}
63
64
StoredMaterialManager
* materialManager =
nullptr
;
65
if
(StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string(
"MATERIALS"
)))
return
nullptr
;
66
67
const
GeoMaterial *
LAr
= materialManager->
getMaterial
(
"std::LiquidArgon"
);
68
if
(!
LAr
) {
69
throw
std::runtime_error(
"Error in EndcapCryostatConstruction, std::LiquidArgon is not found."
);
70
}
71
72
73
//===>
74
SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(
"RDBAccessSvc"
)};
75
if
(!pAccessSvc.isValid()) {
76
throw
std::runtime_error (
"Cannot locate RDBAccessSvc!!"
);
77
}
78
79
SmartIF<IGeoModelSvc> geoModel{svcLocator->service(
"GeoModelSvc"
)};
80
if
(!geoModel.isValid()) {
81
throw
std::runtime_error (
"Cannot locate GeoModelSvc!!"
);
82
}
83
84
std::string AtlasVersion = geoModel->atlasVersion();
85
std::string LArVersion = geoModel->LAr_VersionOverride();
86
87
std::string detectorKey = LArVersion.empty() ? AtlasVersion : LArVersion;
88
std::string detectorNode = LArVersion.empty() ?
"ATLAS"
:
"LAr"
;
89
90
91
92
IRDBRecordset_ptr
presamplerPosition = pAccessSvc->getRecordsetPtr(
"PresamplerPosition"
,AtlasVersion,
"ATLAS"
);
93
94
//===>
95
96
98
// LAr Endcap Presampler GEOMETRY
100
double
Rmin = 1231.74*Gaudi::Units::mm;
101
double
Rmax = 1701.98*Gaudi::Units::mm;
102
double
HalfZ = ((*presamplerPosition)[0]->getDouble(
"TCK"
)/2.)*Gaudi::Units::cm;
103
104
105
std::string name =
"LAr::Endcap::Presampler::LiquidArgon"
;
106
107
double
phi_size = 360.*Gaudi::Units::deg;
108
double
start_phi = 0.;
109
110
if
(
m_isModule
){
111
phi_size =
M_PI
/ 4;
112
start_phi =
M_PI
/ 2 -
M_PI
/ 8;
113
}
114
115
GeoTubs* endcapPresamplerSolid =
new
GeoTubs(Rmin, Rmax, HalfZ, start_phi, phi_size);
116
117
const
GeoLogVol* endcapPresamplerLog =
new
GeoLogVol(name,endcapPresamplerSolid,
LAr
);
118
m_psPhysical
=
new
GeoFullPhysVol(endcapPresamplerLog);
119
120
return
m_psPhysical
;
121
}
122
123
/* G3 code for comparison: cryogeo.age
124
125
Fill CREE ! e. cold wall front flange
126
Section = 14 ! endcap element number
127
Material = 2 ! material type
128
Rmin = 22.1 ! minimal radius 23.2 > 22.1
129
Dr = 194.4 ! radial thickness 193.8 > 195.4 > 194.4cold
130
Zmin = 356.1 ! location in z (minimum) 357.0 > 356.1
131
Dz = 6.5 ! lenght in z 5.0 > 6.5
132
133
FILL PSAM ! CEPS parameters - ABSOLUTE nominal positions
134
zpos = 362.4 ! nominal positions
135
Tck = 0.4 ! thinkness
136
rmin = 123.174 ! minimal radius
137
rmax = 170.198 ! maximum radius
138
* ---------------------------------------------------------------------
139
Block CEPS is the EC presampler
140
Material Liquid_Argon
141
Medium sensitive isvol=1
142
Attribute CEPS seen=1 colo=3
143
Shape TUBE Rmin=psam_rmin Rmax=psam_rmax dz=psam_Tck/2
144
145
* eta limits are calculated based on geometry, taken into account Zshift:
146
147
eta1=asinh((psam_zpos+CRYM_Zshift)/psam_rmax)
148
eta2=asinh((psam_zpos+CRYM_Zshift)/psam_rmin)
149
nbin=nint((eta2-eta1)/chit_Detaps)
150
deta=(eta2-eta1)/nbin
151
HITS CEPS comp=1:1: eta:deta:(eta1,eta2),
152
phi:chit_Dphi:(0,2*M_PI),
153
Eloss:0:(0,chit_Emax)
154
endblock
155
* ---------------------------------------------------------------------
156
*/
M_PI
#define M_PI
Definition
ActiveFraction.h:14
EndcapPresamplerConstruction.h
Declaration of EndcapPresamplerConstruction class.
IGeoModelSvc.h
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition
IRDBAccessSvc.h:30
IRDBRecord.h
Definition of the abstract IRDBRecord interface.
IRDBRecordset.h
Definition of the abstract IRDBRecordset interface.
StoreGateSvc.h
StoredMaterialManager.h
EndcapPresamplerConstruction::EndcapPresamplerConstruction
EndcapPresamplerConstruction(bool imb=false)
Definition
EndcapPresamplerConstruction.cxx:44
EndcapPresamplerConstruction::m_isModule
bool m_isModule
Definition
EndcapPresamplerConstruction.h:49
EndcapPresamplerConstruction::m_psPhysical
GeoIntrusivePtr< GeoFullPhysVol > m_psPhysical
Definition
EndcapPresamplerConstruction.h:46
EndcapPresamplerConstruction::~EndcapPresamplerConstruction
virtual ~EndcapPresamplerConstruction()
Definition
EndcapPresamplerConstruction.cxx:50
EndcapPresamplerConstruction::Envelope
GeoIntrusivePtr< GeoFullPhysVol > Envelope()
Definition
EndcapPresamplerConstruction.cxx:53
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
LAr
Definition
LArVolumeBuilder.h:37
Generated on
for ATLAS Offline Software by
1.17.0