#include <MyLiSource.hh>
Public Methods | |
MyLiSource (int newIsotope=ISOTOPE, double newRmaxgen=RMAXGEN) | |
MyLiSource constructor. More... | |
~MyLiSource () | |
MyLiSource destructor. | |
MyLiSource (const MyLiSource &LiSource) | |
MyLiSource copy constructor. | |
MyLiSource & | operator= (const MyLiSource &rhs) |
MyLiSource overloaded = operator. | |
double | GetLiNeutronEnergy () const |
Returns the energy of the neutrons produced by each Li decay. | |
double | GetLiBetaEnergy () const |
Returns the energy of the betas produced by each Li decay. | |
double | GetLiGammaEnergy () const |
Returns the energy of the photons produced by each Li decay. | |
double | GetLiWeight () const |
Returns the branching ratio weight for each Li decay. | |
double | GetLiDecayTime () const |
Returns the decay time for each Li decay. | |
Static Public Methods | |
float | BetaHighestQ (const float &x) |
float | BetaHighQ (const float &x) |
float | BetaMiddleQ (const float &x) |
float | BetaLowQ (const float &x) |
double | Fermi (const int &Z, const int &A, const float &x) |
The supported isotope is 9. The neutrons are generated by the Li9NeutronSpectrum function, which the probability density of the produced neutrons as a function of neutron energy.
Definition at line 18 of file MyLiSource.hh.
|
MyLiSource constructor. Called with the desired Li isotope: 9 and the maximum allowed radius for generating particles in the simulation, Rmaxgen (default = 200 cm). Definition at line 18 of file MyLiSource.cpp.
00019 { 00020 00021 Isotope = newIsotope; 00022 Rmaxgen = newRmaxgen; 00023 00024 //cout << "MyLiSource::MyLiSource(" << Isotope << "," << Rmaxgen 00025 // << ")" << endl; 00026 00027 // 9Li 00028 if(Isotope == 9){ 00029 00030 // setup the decay parameters (from Jon Link) 00031 // Nneutron is always 1 and Ngamma always 0 00032 Nneutron = 1; 00033 Ngamma = 0; 00034 00035 // branching fraction (the 1.0000 bin contains all decays 00036 // which do nothing: neutron E = 0, beta Q = 0) 00037 float static br[8] = {0.0238,0.3400,0.4400,0.4475, 00038 0.4550,0.4894,0.4950,1.0000}; 00039 00040 // Q-value for beta decay 00041 float static betaQ[8] = {11.176,11.176,10.826,5.666, 00042 5.666,2.323,2.323,0.000}; 00043 00044 // Q-value for the total decay chain 00045 float static totQ = 12.033; 00046 00047 // neutron energy 00048 float static neuE[8] = {0.764,0.856,1.115,3.235, 00049 5.473,8.816,6.578,0.000}; 00050 00051 // prepare the beta decay functions 00052 bool static first=1; 00053 float static fspace[7][200]; 00054 00055 if(first){ 00056 float xlo = 0.; 00057 funlxp_(BetaHighestQ,fspace[0],xlo,betaQ[0]); 00058 funlxp_(BetaHighestQ,fspace[1],xlo,betaQ[1]); 00059 funlxp_(BetaHighQ,fspace[2],xlo,betaQ[2]); 00060 funlxp_(BetaMiddleQ,fspace[3],xlo,betaQ[3]); 00061 funlxp_(BetaMiddleQ,fspace[4],xlo,betaQ[4]); 00062 funlxp_(BetaLowQ,fspace[5],xlo,betaQ[5]); 00063 funlxp_(BetaLowQ,fspace[6],xlo,betaQ[6]); 00064 00065 first = 0; 00066 } 00067 // 00068 // let the 9Li decay 00069 // 00070 int ntrial = 0; 00071 bool passed = false; 00072 while(!passed){ 00073 const int len=1; 00074 float rv[len]; 00075 ranlux_(rv,len); 00076 // 00077 for(int i=0;i<8; i++){ 00078 if(rv[0] < br[i] && !passed){ 00079 00080 // pick an energy for each neutron 00081 neutronE = neuE[i]; 00082 00083 if(neutronE){ 00084 00085 // get the energy of the beta 00086 int len2 = 1; 00087 funlux_(fspace[i],betaE,len2); 00088 passed = true; 00089 } 00090 } 00091 } 00092 ntrial++; 00093 } 00094 Weight = 1./float(ntrial); 00095 00096 //cout << " 9Li neutron energy = " << neutronE << " MeV" << endl; 00097 //cout << " 9Li beta energy = " << betaE << " MeV" << endl; 00098 //cout << " 9Li weight = " << Weight << endl; 00099 00100 // pick a decay time in ns 00101 double HalfLife = 1.8e8; 00102 00103 const int len=1; 00104 float rv[len]; 00105 ranlux_(rv,len); 00106 DecayTime = HalfLife*log(1/rv[0]); 00107 00108 } // done with 9Li 00109 } |