ATLAS Offline Software
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 
10 
12 
13 
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 {
32 }
33 
35  const Trk::CompoundLayerMaterial& 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 {
49 }
50 
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 
74  delete m_binUtility;
75 }
76 
78  return new Trk::CompoundLayerMaterial(*this);
79 }
80 
83  // scale the reference material
84  return (*this);
85 }
86 
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 
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 
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 
Trk::CompoundLayerMaterial::m_aBins
ValueStore m_aBins
A parameters (averaged)
Definition: CompoundLayerMaterial.h:129
Trk::CompoundLayerMaterial::m_x0Bins
ValueStore m_x0Bins
x0 parameter
Definition: CompoundLayerMaterial.h:127
Trk::CompoundLayerMaterial::resizeMaterialProperties
void resizeMaterialProperties()
Definition: CompoundLayerMaterial.cxx:162
Trk::CompoundLayerMaterial::clone
virtual CompoundLayerMaterial * clone() const override final
Pseudo-Constructor clone()
Definition: CompoundLayerMaterial.cxx:77
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:57
Trk::Material::L0
float L0
Definition: Material.h:121
MaterialProperties.h
Trk::Material::Z
float Z
Definition: Material.h:123
CxxUtils::CachedUniquePtrT
Cached pointer with atomic update.
Definition: CachedUniquePtr.h:54
Trk::CompoundLayerMaterial
Definition: CompoundLayerMaterial.h:60
Trk::CompoundLayerMaterial::m_l0Bins
ValueStore m_l0Bins
l0 parameter
Definition: CompoundLayerMaterial.h:128
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
Trk::MaterialComposition
Definition: Material.h:61
python.Utilities.clone
clone
Definition: Utilities.py:134
CompoundLayerMaterial.h
Trk::CompoundLayerMaterial::operator=
CompoundLayerMaterial & operator=(const CompoundLayerMaterial &lmp)
Assignment operator.
Definition: CompoundLayerMaterial.cxx:51
Trk::ValueStore
Definition: CompoundLayerMaterial.h:32
Trk::CompoundLayerMaterial::m_elementTable
std::shared_ptr< const ElementTable > m_elementTable
Definition: CompoundLayerMaterial.h:136
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
lumiFormat.i
int i
Definition: lumiFormat.py:85
Trk::Material::A
float A
Definition: Material.h:122
Trk::CompoundLayerMaterial::CompoundLayerMaterial
CompoundLayerMaterial()=default
Default Constructor - needed by POOL.
Trk::CompoundLayerMaterial::m_fullComposition
bool m_fullComposition
full composition calculation
Definition: CompoundLayerMaterial.h:134
Trk::LayerMaterialProperties
Definition: LayerMaterialProperties.h:62
MakeTH3DFromTH2Ds.zBins
list zBins
Definition: MakeTH3DFromTH2Ds.py:86
Trk::Material::X0
float X0
Definition: Material.h:120
Trk::BinUtility
Definition: BinUtility.h:39
Trk::CompoundLayerMaterial::m_binUtility
BinUtility * m_binUtility
the helper for the bin finding
Definition: CompoundLayerMaterial.h:125
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::Material::rho
float rho
Definition: Material.h:124
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::MaterialProperties
Definition: MaterialProperties.h:40
Trk::CompoundLayerMaterial::m_thicknessBins
ValueStore m_thicknessBins
thickness parameter
Definition: CompoundLayerMaterial.h:126
Trk::CompoundLayerMaterial::m_rhoBins
ValueStore m_rhoBins
rho parameter (averaged)
Definition: CompoundLayerMaterial.h:131
a
TList * a
Definition: liststreamerinfos.cxx:10
dqt_zlumi_pandas.bin1
bin1
Definition: dqt_zlumi_pandas.py:337
Trk::ElementTable
Definition: ElementTable.h:24
Trk::CompoundLayerMaterial::~CompoundLayerMaterial
virtual ~CompoundLayerMaterial() override
Destructor.
Definition: CompoundLayerMaterial.cxx:73
Trk::BinUtility::clone
BinUtility * clone() const
Implizit Constructor.
Definition: BinUtility.h:120
Trk::CompoundLayerMaterial::m_zBins
ValueStore m_zBins
Z parameter (averaged)
Definition: CompoundLayerMaterial.h:130
ReadCellNoiseFromCoolCompare.l0
l0
Definition: ReadCellNoiseFromCoolCompare.py:359
Trk::Material
Definition: Material.h:117
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::operator*=
virtual CompoundLayerMaterial & operator*=(double scale) override final
Scale operator.
Definition: CompoundLayerMaterial.cxx:81
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
fitman.rho
rho
Definition: fitman.py:532