ATLAS Offline Software
Loading...
Searching...
No Matches
BinnedMaterial.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6// Material.h, (c) ATLAS Detector software
8
9#ifndef TRKGEOMETRY_BINNEDMATERIAL_H
10#define TRKGEOMETRY_BINNEDMATERIAL_H
11
16
17#include <memory>
18#include <vector>
19
20
21namespace Trk {
22
23typedef std::pair<std::shared_ptr<Material>, int> IdentifiedMaterial;
24
25class BinUtility;
26
31class BinnedMaterial final: public Material {
32 public:
33 using binsPtr_t = std::unique_ptr<const CompactBinnedArray<const IdentifiedMaterial> >;
34
36 BinnedMaterial() = default;
39 virtual ~BinnedMaterial() = default;
40
41 //These can not be defaulted due to unique_ptr.
44
46 BinnedMaterial(const Material& mat, const BinUtility& bu,
47 const std::vector<size_t>& index,
48 const std::vector<IdentifiedMaterial>& detailedMat);
49
51 BinnedMaterial(const Material& mat, const BinUtility& bu,
52 const std::vector<Trk::BinUtility>& bVec,
53 const std::vector<std::vector<size_t> >& index,
54 const std::vector<IdentifiedMaterial>& detailedMat);
55
56
58 const Trk::BinUtility* layerBinUtility(const Amg::Vector3D& position) const;
59
61 size_t layerBin(const Amg::Vector3D& position) const;
62
64 const IdentifiedMaterial* material(const Amg::Vector3D& position) const;
66 const Amg::Vector3D& dir,
67 bool layOnly) const;
68
69 private:
70 //utility to return pointers to the elements of m_matVec
71 std::vector<const Trk::IdentifiedMaterial*> ptrs() const;
72
73 //The vector that actual owns the IdentifiedMaterial elements
74 std::vector<IdentifiedMaterial> m_matVec;
75 // Binned arrays of IdentifiedMaterial elements
77};
78} // namespace Trk
79
81 const Amg::Vector3D& position) const {
82 return m_matBins ? m_matBins->layerBinUtility(position) : nullptr;
83}
84
86 const Amg::Vector3D& position) const {
87 return m_matBins ? m_matBins->layerBin(position) : 0;
88}
89
90#endif
A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type...
Definition BinUtility.h:39
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
BinnedMaterial(BinnedMaterial &&)=default
size_t layerBin(const Amg::Vector3D &position) const
layer bin
virtual ~BinnedMaterial()=default
const Trk::BinUtility * layerBinUtility(const Amg::Vector3D &position) const
access to layer bin utility
Material()
Default Constructor needed for POOL.
Definition Material.h:130
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