ATLAS Offline Software
CompoundLayerMaterial.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CompoundLayerMaterial.cxx, (c) ATLAS Detector software
8 
10 
12 
15  m_materialProperties(),
16  m_binUtility(nullptr),
17  m_fullComposition(false),
18  m_elementTable(Trk::SharedObject<const Trk::ElementTable>(nullptr)) {}
19 
21  const Trk::BinUtility& binutility, const ValueStore& thicknessBins,
22  const ValueStore& x0Bins, const ValueStore& l0Bins, const ValueStore& aBins,
23  const ValueStore& zBins, const ValueStore& rhoBins,
24  const std::vector<std::vector<MaterialComposition> >& composition,
25  bool fComposition)
26  : m_binUtility(binutility.clone()),
27  m_thicknessBins(thicknessBins),
28  m_x0Bins(x0Bins),
29  m_l0Bins(l0Bins),
30  m_aBins(aBins),
31  m_zBins(zBins),
32  m_rhoBins(rhoBins),
33  m_composition(composition),
34  m_fullComposition(fComposition),
35  m_elementTable(Trk::SharedObject<const Trk::ElementTable>(nullptr))
36 {
38 }
39 
41  const Trk::CompoundLayerMaterial& clm)
43  m_binUtility(clm.m_binUtility->clone()),
44  m_thicknessBins(clm.m_thicknessBins),
45  m_x0Bins(clm.m_x0Bins),
46  m_l0Bins(clm.m_l0Bins),
47  m_aBins(clm.m_aBins),
48  m_zBins(clm.m_zBins),
49  m_rhoBins(clm.m_rhoBins),
50  m_composition(clm.m_composition),
51  m_fullComposition(clm.m_fullComposition),
52  m_elementTable(clm.m_elementTable)
53 {
55 }
56 
58  const Trk::CompoundLayerMaterial& clm) {
59  if (this != &clm) {
60  delete m_binUtility;
61  m_materialProperties.clear();
62 
63  m_binUtility = clm.m_binUtility->clone();
64  m_thicknessBins = clm.m_thicknessBins;
65  m_x0Bins = clm.m_x0Bins;
66  m_l0Bins = clm.m_l0Bins;
67  m_aBins = clm.m_aBins;
68  m_zBins = clm.m_zBins;
69  m_rhoBins = clm.m_rhoBins;
70  m_composition = clm.m_composition;
71  m_fullComposition = clm.m_fullComposition;
72  m_elementTable = clm.m_elementTable;
73 
74  resizeMaterialProperties();
75  }
76  return (*this);
77 }
78 
80  delete m_binUtility;
81 }
82 
84  return new Trk::CompoundLayerMaterial(*this);
85 }
86 
89  // scale the reference material
90  return (*this);
91 }
92 
94  const Amg::Vector3D& gp) const {
95  // first bin
96  size_t bin0 = m_binUtility->bin(gp, 0);
97  // second bin
98  size_t bin1 = (m_binUtility->max(1) == 0) ? 0 : m_binUtility->bin(gp, 1);
99  return material(bin0, bin1);
100 }
101 
103  size_t bin0, size_t bin1) const
104 {
105  const MaterialPropertiesCUP& p = m_materialProperties[bin1][bin0];
106  if (!p) {
107  // get the size
108  const double thickness = m_thicknessBins.value(bin0, bin1);
109  // no thickness or no x0 - return a null pointer
110  if (thickness == 0.) return nullptr;
111  double x0 = 0.;
112  double l0 = 0.;
113  double a = 0.;
114  double z = 0.;
115  double rho = 0.;
116  // the full composition calculation
117  if (m_fullComposition && m_elementTable.get()) {
119  for (const auto& eFraction : m_composition[bin1][bin0]) {
120  double fraction = eFraction.fraction();
121  const Trk::Material* material =
122  m_elementTable->element(eFraction.element());
123  if (material) {
124  x0 += material->X0 * fraction;
125  l0 += material->L0 * fraction;
126  a += material->A * fraction;
127  z += material->Z * fraction;
128  rho += material->rho * fraction;
129  }
130  }
131  } else {
132  x0 = m_x0Bins.value(bin0, bin1);
133  l0 = m_l0Bins.value(bin0, bin1);
134  a = m_aBins.value(bin0, bin1);
135  z = m_zBins.value(bin0, bin1);
136  rho = m_rhoBins.value(bin0, bin1);
137  }
138 
139  // check for 0 material
140  if (x0 == 0.) {
141  return nullptr;
142  }
143 
144  // record the material composition
145  Trk::MaterialComposition* mComposition =
146  new Trk::MaterialComposition(m_composition[bin1][bin0]);
147  p.set (std::make_unique<Trk::MaterialProperties>
148  (Trk::Material(x0, l0, a, z, rho, 0., mComposition), thickness));
149  }
150  return p.get();
151 }
152 
153 MsgStream& Trk::CompoundLayerMaterial::dump(MsgStream& sl) const {
154  sl << "Trk::CompoundLayerMaterial : \n";
155  sl << " - Number of Material bins (1/2) : " << m_binUtility->max(0) + 1
156  << " / " << m_binUtility->max(1) + 1 << "\n";
157  return sl;
158 }
159 
160 std::ostream& Trk::CompoundLayerMaterial::dump(std::ostream& sl) const {
161  sl << "Trk::CompoundLayerMaterial : " << std::endl;
162  sl << " - Number of Material bins (1/2) : " << m_binUtility->max(0) + 1
163  << " / " << m_binUtility->max(1) + 1 << std::endl;
164  return sl;
165 }
166 
167 
169 {
170  m_materialProperties.clear();
171  m_materialProperties.resize (m_thicknessBins.valueBinMatrix.size());
172  for (size_t i = 0; i < m_materialProperties.size(); i++) {
173  m_materialProperties[i].resize (m_thicknessBins.valueBinMatrix[i].size());
174  }
175 }
176 
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:168
Trk::CompoundLayerMaterial::clone
virtual CompoundLayerMaterial * clone() const override final
Pseudo-Constructor clone()
Definition: CompoundLayerMaterial.cxx:83
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Trk::CompoundLayerMaterial::CompoundLayerMaterial
CompoundLayerMaterial()
Default Constructor - needed by POOL.
Definition: CompoundLayerMaterial.cxx:13
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:63
Trk::Material::L0
float L0
Definition: Material.h:120
MaterialProperties.h
Trk::Material::Z
float Z
Definition: Material.h:122
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:562
Trk::MaterialComposition
Definition: Material.h:60
python.Utilities.clone
clone
Definition: Utilities.py:134
CompoundLayerMaterial.h
Trk::CompoundLayerMaterial::operator=
CompoundLayerMaterial & operator=(const CompoundLayerMaterial &lmp)
Assignment operator.
Definition: CompoundLayerMaterial.cxx:57
Trk::ValueStore
Definition: CompoundLayerMaterial.h:32
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::Material::A
float A
Definition: Material.h:121
Trk::CompoundLayerMaterial::m_fullComposition
bool m_fullComposition
full composition calculation
Definition: CompoundLayerMaterial.h:134
Trk::LayerMaterialProperties
Definition: LayerMaterialProperties.h:62
Trk::CompoundLayerMaterial::m_elementTable
SharedObject< const ElementTable > m_elementTable
Definition: CompoundLayerMaterial.h:136
MakeTH3DFromTH2Ds.zBins
list zBins
Definition: MakeTH3DFromTH2Ds.py:86
Trk::Material::X0
float X0
Definition: Material.h:119
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:123
Trk::CompoundLayerMaterial::dump
virtual MsgStream & dump(MsgStream &sl) const override final
Output Method for MsgStream, to be overloaded by child classes.
Definition: CompoundLayerMaterial.cxx:153
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
Trk::SharedObject
std::shared_ptr< T > SharedObject
Definition: SharedObject.h:24
dqt_zlumi_pandas.bin1
bin1
Definition: dqt_zlumi_pandas.py:329
Trk::ElementTable
Definition: ElementTable.h:24
Trk::CompoundLayerMaterial::~CompoundLayerMaterial
virtual ~CompoundLayerMaterial() override
Destructor.
Definition: CompoundLayerMaterial.cxx:79
Trk::BinUtility::clone
BinUtility * clone() const
Implizit Constructor.
Definition: BinUtility.h:130
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:116
Trk::CompoundLayerMaterial::material
virtual const MaterialProperties * material(size_t bin0, size_t bin1) const override final
Access the single bin.
Definition: CompoundLayerMaterial.cxx:102
Trk::CompoundLayerMaterial::operator*=
virtual CompoundLayerMaterial & operator*=(double scale) override final
Scale operator.
Definition: CompoundLayerMaterial.cxx:87
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:93
fitman.rho
rho
Definition: fitman.py:532