//////////////////////////////////////////////////////////////////// /// \class RAT::FermiFunction /// /// \brief Returns the shape of the beta spectrum /// /// \author Joe Formaggio and Jason Detwiler -- not on SNO+ /// \author Logan Sibley -- contact person /// /// REVISION HISTORY:\n /// 11 Jan 2006 : WGS \n /// 28 May 2010 : Logan Sibley - change to the way the screening correction /// is calculated. Also, the screening potential is now /// calculated at Z of mother. \n /// 28 Sep 2010 : Logan Sibley - include additional shaping correction /// calculation using the last three columns of beta_decays.dat /// /// \details These constants and functions are copied from the original code /// from Joe Formaggio and Jason Detwiler, even though they duplicate /// some definitions that can be found in Geant4. As a precaution, /// I've put them in the RAT namespace. If one were being complete, /// one would revise constants like "ElectronMass" to be the Geant4 /// definitions. \n \n /// /// The screening correction is not treated in a typical fashion, and /// is by default turned off. See comments/citations in /// FermiFunction.cc. /// //////////////////////////////////////////////////////////////////// #ifndef __RAT_FermiFunction__ #define __RAT_FermiFunction__ #include namespace RAT { static const double ElectronMass = 0.510998918; static const double AlphaMass = 3727.42; static const double UnitMass = 931.502; // MeV double GetRandomNumber(double rmin = 0., double rmax = 1.); double Nucl_Beta(int Beta, double Z, double A, double W, double W0, int N, double vMass, float Corr[], bool screen); double Nucl_Wave(int Beta, double Z, double A, double W, int k, float Corr[], bool screen); double Coulomb_Corr(double Z, double W, double WPrime, int k, int Beta); double Nucl_Size(int Beta, double Z, double W, int k, float Corr[]); double Nucl_Radius(double A); double Nucl_Mass(double A, double Z); double Nucl_Wave_Phase(int Beta, double Z, double A, double W, int k, int sel); double Screening_Potential(double Z, double p, int Beta); std::complex < double >Hyper1F1Norm(std::complex < double >A, std::complex < double >B, std::complex < double >Z); double Factorial(int N); double HyperGeometric_PQF(double A[], int nA, double B[], int nB, double Z); double GammaLn(double xx); std::complex < double >GammaLn_Complex(std::complex < double >xx); } // namespace RAT #endif