OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Material.h
Go to the documentation of this file.
1 #ifndef MATERIAL_H
2 #define MATERIAL_H
3 
4 #include <map>
5 #include <array>
6 #include <string>
7 #include <memory>
8 #include <cmath>
9 
10 namespace Physics {
11  class Material {
12  public:
13  enum FitCoeffs {
14  A2 = 0,
15  A3,
16  A4,
18  };
19 
20  Material(double atomicNumber,
21  double atomicMass,
22  double massDensity,
23  double radiationLength,
24  double meanExcitationEnergy,
25  std::array<double, 4> fitCoefficients):
26  atomicNumber_m(atomicNumber),
27  atomicMass_m(atomicMass),
28  massDensity_m(massDensity),
29  radiationLength_m(radiationLength / massDensity / 100),
30  meanExcitationEnergy_m(meanExcitationEnergy),
31  stoppingPowerFitCoefficients_m(fitCoefficients)
32  { }
33 
34  double getAtomicNumber() const; // [1]
35  double getAtomicMass() const; // [u]
36  double getMassDensity() const; // [g cm^-3]
37  double getRadiationLength() const; // [m]
38  double getMeanExcitationEnergy() const; // [eV]
40 
41  static std::shared_ptr<Material> getMaterial(const std::string &name);
42  static std::shared_ptr<Material> addMaterial(const std::string &name,
43  std::shared_ptr<Material> mat_ptr);
44  private:
45  static
46  std::map<std::string, std::shared_ptr<Material> > protoTable_sm;
47 
48  const double atomicNumber_m;
49  const double atomicMass_m;
50  const double massDensity_m;
51  const double radiationLength_m;
52  const double meanExcitationEnergy_m;
53  const std::array<double,4> stoppingPowerFitCoefficients_m;
54  };
55 
56  inline
57  double Material::getAtomicNumber() const {
58  return atomicNumber_m;
59  }
60 
61  inline
62  double Material::getAtomicMass() const {
63  return atomicMass_m;
64  }
65 
66  inline
67  double Material::getMassDensity() const {
68  return massDensity_m;
69  }
70 
71  inline
73  return radiationLength_m;
74  }
75 
76  inline
79  }
80 
81  inline
84  }
85 
86  // inline
87  // double Material::getMeanExcitationEnergy() const {
88  // double Z = getAtomicNumber();
89  // if (Z < 13.0)
90  // return 12 * Z + 7;
91 
92  // return 9.76 * Z + 58.8 * std::pow(Z, -.19);
93  // }
94 }
95 #endif
const double atomicMass_m
Definition: Material.h:49
double getRadiationLength() const
Definition: Material.h:72
double getStoppingPowerFitCoefficients(FitCoeffs n) const
Definition: Material.h:82
const std::array< double, 4 > stoppingPowerFitCoefficients_m
Definition: Material.h:53
static std::map< std::string, std::shared_ptr< Material > > protoTable_sm
Definition: Material.h:46
const double meanExcitationEnergy_m
Definition: Material.h:52
Material(double atomicNumber, double atomicMass, double massDensity, double radiationLength, double meanExcitationEnergy, std::array< double, 4 > fitCoefficients)
Definition: Material.h:20
static std::shared_ptr< Material > addMaterial(const std::string &name, std::shared_ptr< Material > mat_ptr)
Definition: Material.cpp:25
double getMeanExcitationEnergy() const
Definition: Material.h:77
const double massDensity_m
Definition: Material.h:50
const double atomicNumber_m
Definition: Material.h:48
double getAtomicMass() const
Definition: Material.h:62
const double radiationLength_m
Definition: Material.h:51
double getAtomicNumber() const
Definition: Material.h:57
static std::shared_ptr< Material > getMaterial(const std::string &name)
Definition: Material.cpp:36
const std::string name
double getMassDensity() const
Definition: Material.h:67