ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkDetDescr
TrkGeometry
src
CompoundLayerMaterial.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// CompoundLayerMaterial.cxx, (c) ATLAS Detector software
8
9
#include "
TrkGeometry/CompoundLayerMaterial.h
"
10
11
#include "
TrkGeometry/MaterialProperties.h
"
12
13
14
Trk::CompoundLayerMaterial::CompoundLayerMaterial
(
15
const
Trk::BinUtility
& binutility,
const
ValueStore
& thicknessBins,
16
const
ValueStore
& x0Bins,
const
ValueStore
& l0Bins,
const
ValueStore
& aBins,
17
const
ValueStore
& zBins,
const
ValueStore
& rhoBins,
18
const
std::vector<std::vector<MaterialComposition> >& composition,
19
bool
fComposition)
20
:
m_binUtility
(binutility.
clone
()),
21
m_thicknessBins
(thicknessBins),
22
m_x0Bins
(x0Bins),
23
m_l0Bins
(l0Bins),
24
m_aBins
(aBins),
25
m_zBins
(zBins),
26
m_rhoBins
(rhoBins),
27
m_composition
(composition),
28
m_fullComposition
(fComposition),
29
m_elementTable
(
std
::shared_ptr<
const
Trk
::
ElementTable
>(nullptr))
30
{
31
resizeMaterialProperties
();
32
}
33
34
Trk::CompoundLayerMaterial::CompoundLayerMaterial
(
35
const
Trk::CompoundLayerMaterial
& clm)
36
:
Trk
::
LayerMaterialProperties
(clm),
37
m_binUtility
(clm.
m_binUtility
->
clone
()),
38
m_thicknessBins
(clm.
m_thicknessBins
),
39
m_x0Bins
(clm.
m_x0Bins
),
40
m_l0Bins
(clm.
m_l0Bins
),
41
m_aBins
(clm.
m_aBins
),
42
m_zBins
(clm.
m_zBins
),
43
m_rhoBins
(clm.
m_rhoBins
),
44
m_composition
(clm.
m_composition
),
45
m_fullComposition
(clm.
m_fullComposition
),
46
m_elementTable
(clm.
m_elementTable
)
47
{
48
resizeMaterialProperties
();
49
}
50
51
Trk::CompoundLayerMaterial
&
Trk::CompoundLayerMaterial::operator=
(
52
const
Trk::CompoundLayerMaterial
& clm) {
53
if
(
this
!= &clm) {
54
delete
m_binUtility
;
55
m_materialProperties
.clear();
56
57
m_binUtility
= clm.
m_binUtility
->
clone
();
58
m_thicknessBins
= clm.
m_thicknessBins
;
59
m_x0Bins
= clm.
m_x0Bins
;
60
m_l0Bins
= clm.
m_l0Bins
;
61
m_aBins
= clm.
m_aBins
;
62
m_zBins
= clm.
m_zBins
;
63
m_rhoBins
= clm.
m_rhoBins
;
64
m_composition
= clm.
m_composition
;
65
m_fullComposition
= clm.
m_fullComposition
;
66
m_elementTable
= clm.
m_elementTable
;
67
68
resizeMaterialProperties
();
69
}
70
return
(*
this
);
71
}
72
73
Trk::CompoundLayerMaterial::~CompoundLayerMaterial
() {
74
delete
m_binUtility
;
75
}
76
77
Trk::CompoundLayerMaterial
*
Trk::CompoundLayerMaterial::clone
()
const
{
78
return
new
Trk::CompoundLayerMaterial
(*
this
);
79
}
80
81
Trk::CompoundLayerMaterial
&
Trk::CompoundLayerMaterial::operator*=
(
double
) {
83
// scale the reference material
84
return
(*
this
);
85
}
86
87
const
Trk::MaterialProperties
*
Trk::CompoundLayerMaterial::fullMaterial
(
88
const
Amg::Vector3D
& gp)
const
{
89
// first bin
90
size_t
bin0 =
m_binUtility
->bin(gp, 0);
91
// second bin
92
size_t
bin1 = (
m_binUtility
->max(1) == 0) ? 0 :
m_binUtility
->bin(gp, 1);
93
return
material
(bin0, bin1);
94
}
95
96
const
Trk::MaterialProperties
*
Trk::CompoundLayerMaterial::material
(
97
size_t
bin0,
size_t
bin1)
const
98
{
99
const
MaterialPropertiesCUP
& p =
m_materialProperties
[bin1][bin0];
100
if
(!p) {
101
// get the size
102
const
double
thickness =
m_thicknessBins
.value(bin0, bin1);
103
// no thickness or no x0 - return a null pointer
104
if
(thickness == 0.)
return
nullptr
;
105
double
x0 = 0.;
106
double
l0 = 0.;
107
double
a
= 0.;
108
double
z
= 0.;
109
double
rho = 0.;
110
// the full composition calculation
111
if
(
m_fullComposition
&&
m_elementTable
.get()) {
113
for
(
const
auto
& eFraction :
m_composition
[bin1][bin0]) {
114
double
fraction = eFraction.fraction();
115
const
Trk::Material
*
material
=
116
m_elementTable
->element(eFraction.element());
117
if
(
material
) {
118
x0 +=
material
->X0 * fraction;
119
l0 +=
material
->L0 * fraction;
120
a
+=
material
->A * fraction;
121
z
+=
material
->Z * fraction;
122
rho +=
material
->rho * fraction;
123
}
124
}
125
}
else
{
126
x0 =
m_x0Bins
.value(bin0, bin1);
127
l0 =
m_l0Bins
.value(bin0, bin1);
128
a
=
m_aBins
.value(bin0, bin1);
129
z
=
m_zBins
.value(bin0, bin1);
130
rho =
m_rhoBins
.value(bin0, bin1);
131
}
132
133
// check for 0 material
134
if
(x0 == 0.) {
135
return
nullptr
;
136
}
137
138
// record the material composition
139
Trk::MaterialComposition
* mComposition =
140
new
Trk::MaterialComposition
(
m_composition
[bin1][bin0]);
141
p.set (std::make_unique<Trk::MaterialProperties>
142
(
Trk::Material
(x0, l0,
a
,
z
, rho, 0., mComposition), thickness));
143
}
144
return
p.get();
145
}
146
147
MsgStream&
Trk::CompoundLayerMaterial::dump
(MsgStream& sl)
const
{
148
sl <<
"Trk::CompoundLayerMaterial : \n"
;
149
sl <<
" - Number of Material bins (1/2) : "
<<
m_binUtility
->max(0) + 1
150
<<
" / "
<<
m_binUtility
->max(1) + 1 <<
"\n"
;
151
return
sl;
152
}
153
154
std::ostream&
Trk::CompoundLayerMaterial::dump
(std::ostream& sl)
const
{
155
sl <<
"Trk::CompoundLayerMaterial : "
<< std::endl;
156
sl <<
" - Number of Material bins (1/2) : "
<<
m_binUtility
->max(0) + 1
157
<<
" / "
<<
m_binUtility
->max(1) + 1 << std::endl;
158
return
sl;
159
}
160
161
162
void
Trk::CompoundLayerMaterial::resizeMaterialProperties
()
163
{
164
m_materialProperties
.clear();
165
m_materialProperties
.resize (
m_thicknessBins
.valueBinMatrix.size());
166
for
(
size_t
i = 0; i <
m_materialProperties
.size(); i++) {
167
m_materialProperties
[i].resize (
m_thicknessBins
.valueBinMatrix[i].size());
168
}
169
}
170
CompoundLayerMaterial.h
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
MaterialProperties.h
Trk::BinUtility
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
Definition
BinUtility.h:39
Trk::BinUtility::clone
BinUtility * clone() const
Implicit Constructor.
Definition
BinUtility.h:120
Trk::CompoundLayerMaterial
It extends the LayerMaterialProperties base class, and has a intrinsic accuracy of about 0....
Definition
CompoundLayerMaterial.h:60
Trk::CompoundLayerMaterial::CompoundLayerMaterial
CompoundLayerMaterial()=default
Default Constructor - needed by POOL.
Trk::CompoundLayerMaterial::m_rhoBins
ValueStore m_rhoBins
rho parameter (averaged)
Definition
CompoundLayerMaterial.h:131
Trk::CompoundLayerMaterial::m_materialProperties
std::vector< std::vector< MaterialPropertiesCUP > > m_materialProperties
the ones you return
Definition
CompoundLayerMaterial.h:123
Trk::CompoundLayerMaterial::~CompoundLayerMaterial
virtual ~CompoundLayerMaterial() override
Destructor.
Definition
CompoundLayerMaterial.cxx:73
Trk::CompoundLayerMaterial::m_fullComposition
bool m_fullComposition
full composition calculation
Definition
CompoundLayerMaterial.h:134
Trk::CompoundLayerMaterial::fullMaterial
virtual const MaterialProperties * fullMaterial(const Amg::Vector3D &gp) const override final
Return method for full material description of the Layer.
Definition
CompoundLayerMaterial.cxx:87
Trk::CompoundLayerMaterial::m_elementTable
std::shared_ptr< const ElementTable > m_elementTable
Definition
CompoundLayerMaterial.h:136
Trk::CompoundLayerMaterial::operator*=
virtual CompoundLayerMaterial & operator*=(double scale) override final
Scale operator.
Definition
CompoundLayerMaterial.cxx:81
Trk::CompoundLayerMaterial::m_thicknessBins
ValueStore m_thicknessBins
thickness parameter
Definition
CompoundLayerMaterial.h:126
Trk::CompoundLayerMaterial::m_x0Bins
ValueStore m_x0Bins
x0 parameter
Definition
CompoundLayerMaterial.h:127
Trk::CompoundLayerMaterial::resizeMaterialProperties
void resizeMaterialProperties()
Definition
CompoundLayerMaterial.cxx:162
Trk::CompoundLayerMaterial::MaterialPropertiesCUP
CxxUtils::CachedUniquePtr< MaterialProperties > MaterialPropertiesCUP
Definition
CompoundLayerMaterial.h:121
Trk::CompoundLayerMaterial::m_aBins
ValueStore m_aBins
A parameters (averaged).
Definition
CompoundLayerMaterial.h:129
Trk::CompoundLayerMaterial::operator=
CompoundLayerMaterial & operator=(const CompoundLayerMaterial &lmp)
Assignment operator.
Definition
CompoundLayerMaterial.cxx:51
Trk::CompoundLayerMaterial::m_zBins
ValueStore m_zBins
Z parameter (averaged).
Definition
CompoundLayerMaterial.h:130
Trk::CompoundLayerMaterial::material
virtual const MaterialProperties * material(size_t bin0, size_t bin1) const override final
Access the single bin.
Definition
CompoundLayerMaterial.cxx:96
Trk::CompoundLayerMaterial::dump
virtual MsgStream & dump(MsgStream &sl) const override final
Output Method for MsgStream, to be overloaded by child classes.
Definition
CompoundLayerMaterial.cxx:147
Trk::CompoundLayerMaterial::m_composition
std::vector< std::vector< MaterialComposition > > m_composition
composition matrix
Definition
CompoundLayerMaterial.h:133
Trk::CompoundLayerMaterial::clone
virtual CompoundLayerMaterial * clone() const override final
Pseudo-Constructor clone().
Definition
CompoundLayerMaterial.cxx:77
Trk::CompoundLayerMaterial::m_binUtility
BinUtility * m_binUtility
the helper for the bin finding
Definition
CompoundLayerMaterial.h:125
Trk::CompoundLayerMaterial::m_l0Bins
ValueStore m_l0Bins
l0 parameter
Definition
CompoundLayerMaterial.h:128
Trk::ElementTable
Definition
ElementTable.h:24
Trk::LayerMaterialProperties::LayerMaterialProperties
LayerMaterialProperties()=default
Constructor.
Trk::MaterialComposition
Definition
Material.h:61
Trk::MaterialProperties
Material with information about thickness of material.
Definition
MaterialProperties.h:40
Trk::Material
A common object to be contained by.
Definition
Material.h:117
const
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition
FakeTrackBuilder.h:9
Trk::z
@ z
global position (cartesian)
Definition
ParamDefs.h:57
std
STL namespace.
Trk::ValueStore
Definition
CompoundLayerMaterial.h:32
Generated on
for ATLAS Offline Software by
1.17.0