9#ifndef TRKGEOMETRY_MATERIAL_H
10#define TRKGEOMETRY_MATERIAL_H
34 :
std::
pair<unsigned char, unsigned char>(ef) {}
38 :
std::
pair<unsigned char, unsigned char>(iz, ifrac) {}
42 const std::pair<unsigned char, unsigned char>& ef) {
44 std::pair<unsigned char, unsigned char>::operator=(ef);
51 return static_cast<unsigned int>((*this).first);
73 const std::vector<unsigned char>& ifrac) {
75 for (std::size_t elvc = 0; elvc < iel.size() && !ifrac.empty(); ++elvc)
81 const std::vector<std::pair<unsigned char, unsigned char> >& efracs) {
82 reserve(efracs.size());
83 for (
auto& efracIt : efracs) push_back(efracIt);
93 std::vector<ElementFraction>::operator=(
mc);
100 const std::vector<std::pair<unsigned char, unsigned char> >& efracs) {
102 reserve(efracs.size());
103 for (
auto& efracIt : efracs) push_back(efracIt);
141 Material(
float iX0,
float iL0,
float iA,
float iZ,
float iRho,
155 zOaTr = iA > 0 ? iZ / iA * iRho : 0.;
180 amc.composition =
nullptr;
218 amc.composition =
nullptr;
223 std::unique_ptr<Material>
scale(
float sf)
const;
227 float x0()
const {
return (*this).X0; }
232 std::ostringstream sout;
233 sout << std::setiosflags(std::ios::fixed) << std::setprecision(4);
234 sout <<
"(" <<
X0 <<
" | " <<
L0 <<
" | " <<
A <<
" | " <<
Z <<
" | " <<
rho
245 return std::make_unique<Material>(
X0 / sf,
L0 / sf, sf *
A, sf *
Z, sf *
rho);
unsigned int element() const
Return in a nice format.
ElementFraction & operator=(const std::pair< unsigned char, unsigned char > &ef)
assignment operator from base class
double fraction() const
Return in a nice format.
ElementFraction(const std::pair< unsigned char, unsigned char > &ef)
Copy Constructor from base class.
ElementFraction()
Default Constructor.
ElementFraction(unsigned char iz, unsigned char ifrac)
Constructor from arguments.
MaterialComposition(const MaterialComposition &)=default
MaterialComposition(const std::vector< ElementFraction > &mc)
Copy constructor from base class.
MaterialComposition & operator=(const std::vector< std::pair< unsigned char, unsigned char > > &efracs)
assignment operator for persistency (2)
MaterialComposition & operator=(const MaterialComposition &)=default
MaterialComposition & operator=(const std::vector< ElementFraction > &mc)
assignment operator from base class
MaterialComposition(const std::vector< unsigned char > &iel, const std::vector< unsigned char > &ifrac)
constructor for persistency (1), size optimized
MaterialComposition()
default constructors
MaterialComposition(MaterialComposition &&)=default
MaterialComposition & operator=(MaterialComposition &&)=default
MaterialComposition(const std::vector< std::pair< unsigned char, unsigned char > > &efracs)
constructor for persistency (2), size optimized
Material(float iX0, float iL0, float iA, float iZ, float iRho, float idEdX=0., MaterialComposition *mc=nullptr)
Constructor with arguments.
std::unique_ptr< Material > scale(float sf) const
scaling method
std::string toString() const
spit out as a string
Material(const Material &amc)
Copy Constructor.
Material()
Default Constructor needed for POOL.
MaterialComposition * composition
Material & operator=(const Material &amc)
Assignment operator.
Material(Material &&amc)
Move Constructor.
virtual ~Material()
Destructor - delete the composition if there.
Material & operator=(Material &&amc)
Move Assignment operator.
float zOverAtimesRho() const
access to members
Ensure that the ATLAS eigen extensions are properly loaded.
static const double s_oneOverUcharMax
Tell the compiler to optimize assuming that FP may trap.
#define CXXUTILS_TRAPPING_FP