ATLAS Offline Software
Loading...
Searching...
No Matches
BinnedMaterial.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
9 const Trk::Material& mat, const Trk::BinUtility& bu,
10 const std::vector<size_t>& index,
11 const std::vector<Trk::IdentifiedMaterial>& detailedMat)
12 : Trk::Material(mat),
13 m_matVec(detailedMat),
15 {}
16
19 const Trk::Material& mat, const Trk::BinUtility& bu,
20 const std::vector<Trk::BinUtility>& bVec,
21 const std::vector<std::vector<size_t> >& index,
22 const std::vector<Trk::IdentifiedMaterial>& detailedMat)
23 : Trk::Material(mat),
24 m_matVec(detailedMat),
26 {}
27
28//copy
30 : Material(amc), m_matVec(amc.m_matVec) {
31 if (amc.m_matBins) {
32 if (!m_matVec.empty()) {
33 m_matBins = binsPtr_t(amc.m_matBins->clone(ptrs()));
34 } else {
35 m_matBins = binsPtr_t(amc.m_matBins->clone());
36 }
37 }
38}
39
42 if (this != &amc) {
44 m_matVec = amc.m_matVec;
45 m_matBins.reset();
46 if (amc.m_matBins) {
47 if (!m_matVec.empty()) {
48 m_matBins = binsPtr_t(amc.m_matBins->clone(ptrs()));
49 } else {
50 m_matBins = binsPtr_t(amc.m_matBins->clone());
51 }
52 }
53 }
54 return (*this);
55}
56
59 const Amg::Vector3D& position) const {
60 const Trk::IdentifiedMaterial* mat =
61 m_matBins ? m_matBins->object(position) : nullptr;
62 return mat;
63}
64
67 const Amg::Vector3D& position, const Amg::Vector3D& direction,
68 bool layOnly) const {
69 const Trk::IdentifiedMaterial* mat =
70 m_matBins ? m_matBins->nextObject(position, direction, layOnly) : nullptr;
71 return mat;
72}
73
74//utility to return pointers to the elements of m_matVec
75std::vector<const Trk::IdentifiedMaterial*> Trk::BinnedMaterial::ptrs() const {
76 std::vector<const Trk::IdentifiedMaterial*> p;
77 p.reserve(m_matVec.size());
78 for (const Trk::IdentifiedMaterial& m : m_matVec) {
79 p.push_back(&m);
80 }
81 return p;
82}
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
Definition BinUtility.h:39
for description of non-homogenous dense volumes
std::unique_ptr< const CompactBinnedArray< const IdentifiedMaterial > > binsPtr_t
const IdentifiedMaterial * materialNext(const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool layOnly) const
access to binned material
BinnedMaterial & operator=(BinnedMaterial &&)=default
BinnedMaterial()=default
Default Constructors.
std::vector< const Trk::IdentifiedMaterial * > ptrs() const
const IdentifiedMaterial * material(const Amg::Vector3D &position) const
access to material/id per bin
std::vector< IdentifiedMaterial > m_matVec
1-dimensional binned arry based on a sorting given by the BinUtitlity.
2-dimensional binned array
A common object to be contained by.
Definition Material.h:117
Material()
Default Constructor needed for POOL.
Definition Material.h:130
Material & operator=(const Material &amc)
Assignment operator.
Definition Material.h:189
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
std::pair< std::shared_ptr< Material >, int > IdentifiedMaterial
Definition index.py:1
STL namespace.