/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 00015 #ifndef RADIATION_H 00016 #define RADIATION_H 00017 00018 #include "GaudiKernel/RndmGenerators.h" 00019 #include <string> 00020 #include <iostream> 00021 00022 namespace GenDecay { 00023 00024 enum RadiationType { 00025 Unknown = 0, 00026 Alpha, BetaMinus, BetaPlus, Gamma, EleCapture, 00027 }; 00028 00029 class Radiation { 00030 protected: 00031 00032 double m_energy; 00033 00034 public: 00035 00036 Radiation(double characteristic_energy); 00037 virtual ~Radiation(); 00038 00039 virtual double kineticEnergy() const; 00040 00041 00042 virtual std::string asString() const = 0; 00043 00044 virtual RadiationType type() const = 0; 00045 virtual int pid() const = 0; 00046 virtual double mass() const = 0; 00047 virtual std::string typeString() const = 0; 00048 00049 }; 00050 00051 00052 class AlphaRadiation : public Radiation 00053 { 00054 int m_parentA; 00055 00056 public: 00057 // For Alpha, energy is kinetic energy 00058 AlphaRadiation(double energy, int parentA); 00059 virtual ~AlphaRadiation(); 00060 00061 std::string asString() const; 00062 00063 double kineticEnergy() const; 00064 int pid() const; 00065 double mass() const; 00066 00067 RadiationType type() const { return Alpha; } 00068 std::string typeString() const { return "Alpha"; } 00069 }; 00070 00071 class BetaRadiation : public Radiation 00072 { 00073 int m_parentZ; 00074 int m_daughterZ; 00075 int m_betaSign; 00076 double m_endpoint; 00077 00078 double m_norm, m_maximum; 00079 mutable Rndm::Numbers m_rand; // not const correct.... 00080 00081 void normalize(); 00082 00083 public: 00084 // For beta, energy is endpoint energy, not corrected for electron loss (beta+) 00085 BetaRadiation(double energy, int parentZ); 00086 virtual ~BetaRadiation(); 00087 00088 RadiationType type() const { return (m_betaSign < 0 ? BetaMinus : BetaPlus); } 00089 std::string typeString() const { return (m_betaSign < 0 ? "BetaMinus" : "BetaPlus"); } 00090 00091 std::string asString() const; 00092 00093 int sign() const { return m_betaSign; } 00094 00095 double kineticEnergy() const; 00096 int pid() const; 00097 double mass() const; 00098 00099 double dnde(double kineticEnergy) const; 00100 double dnde_noff(double kineticEnergy) const; 00101 double fermi_function(double kineticEnergy) const; 00102 }; 00103 00104 class GammaRadiation : public Radiation 00105 { 00106 public: 00107 GammaRadiation(double energy); 00108 virtual ~GammaRadiation(); 00109 00110 int pid() const; 00111 double mass() const; 00112 00113 std::string asString() const; 00114 RadiationType type() const { return Gamma; } 00115 std::string typeString() const { return "Gamma"; } 00116 }; 00117 00118 class ElectronCapture: public Radiation 00119 { 00120 public: 00121 ElectronCapture(double characteristic_energy); 00122 virtual ~ElectronCapture(); 00123 00124 std::string asString() const; 00125 int pid() const; 00126 double mass() const; 00127 RadiationType type() const { return EleCapture; } 00128 std::string typeString() const { return "EleCapture"; } 00129 }; 00130 00131 } // namespace GenDecay 00132 00133 std::ostream& operator<<(std::ostream& o, const GenDecay::Radiation& r); 00134 00135 00136 #endif // RADIATION_H