#include <G4BEChargedChannel.hh>
Inheritance diagram for G4BEChargedChannel:
Public Member Functions | |
G4BEChargedChannel () | |
virtual | ~G4BEChargedChannel () |
virtual void | calculateProbability () |
virtual G4DynamicParticle * | emit ()=0 |
virtual G4double | coulombFactor ()=0 |
G4double | coulombFactorForProton () |
G4double | qmFactorForProton () |
G4double | qmFactorForAlpha () |
G4double | sampleKineticEnergy () |
Protected Attributes | |
G4double | A |
G4double | spin |
Definition at line 38 of file G4BEChargedChannel.hh.
G4BEChargedChannel::G4BEChargedChannel | ( | ) |
Definition at line 35 of file G4BEChargedChannel.cc.
References G4BertiniEvaporationChannel::verboseLevel.
00036 { 00037 verboseLevel = 0; 00038 }
G4BEChargedChannel::~G4BEChargedChannel | ( | ) | [virtual] |
void G4BEChargedChannel::calculateProbability | ( | ) | [virtual] |
Implements G4BertiniEvaporationChannel.
Definition at line 46 of file G4BEChargedChannel.cc.
References A, G4BertiniEvaporationChannel::correction, coulombFactor(), G4BertiniEvaporationChannel::emissionProbability, G4BertiniEvaporationChannel::excitationEnergy, G4cout, G4endl, G4BertiniEvaporationChannel::getLevelDensityParameter(), G4BertiniEvaporationChannel::getName(), G4BertiniEvaporationChannel::getThresh(), G4BertiniEvaporationChannel::nucleusA, G4BertiniEvaporationChannel::nucleusZ, G4BertiniEvaporationChannel::particleA, G4BertiniEvaporationChannel::particleZ, G4BertiniEvaporationChannel::qmFactor(), spin, and G4BertiniEvaporationChannel::verboseLevel.
00047 { 00048 G4int residualZ = nucleusZ - particleZ; 00049 G4int residualA = nucleusA - particleA; 00050 00051 // Check if nucleus is too small, if this evaporation channel 00052 // leads to an impossible residual nucleus or if there is no enough 00053 // energy. 00054 if ( nucleusA < 2.0 * particleA || 00055 nucleusZ < 2.0 * particleZ || 00056 residualA <= residualZ || 00057 excitationEnergy - getThresh() - correction < 0 ) 00058 { 00059 if ( verboseLevel >= 6 ) 00060 G4cout << "G4BEChargedChannel : calculateProbability for " << getName() << " = 0 " << G4endl; 00061 emissionProbability = 0; 00062 return; 00063 } 00064 00065 // In HETC88 s-s0 was used in std::exp( s ), in which s0 was either 50 or 00066 // max(s_i), where i goes over all channels. 00067 00068 G4double levelParam = getLevelDensityParameter(); 00069 G4double slevel = 2 * std::sqrt( levelParam * ( excitationEnergy - getThresh() - correction ) ); 00070 G4double constant = A / 2 * ( 2 * spin + 1 ) * ( 1 + coulombFactor() ); 00071 G4double eye1 = ( slevel*slevel - 3 * slevel + 3 ) / ( 4 * levelParam*levelParam ) * std::exp( slevel ); 00072 00073 emissionProbability = constant * std::pow( G4double(residualA), 0.6666666 ) * eye1; 00074 00075 if ( verboseLevel >= 6 ) 00076 G4cout << "G4BEChargedChannel : calculateProbability for " << getName() << G4endl 00077 << " res A = " << residualA << G4endl 00078 << " res Z = " << residualZ << G4endl 00079 << " c*(c_i+1) = "<< constant << G4endl 00080 << " qmfactor = "<< qmFactor() << G4endl 00081 << " coulombfactor = "<< coulombFactor() << G4endl 00082 << " E = " << excitationEnergy << G4endl 00083 << " correction = " << correction << G4endl 00084 << " eye1 = " << eye1 << G4endl 00085 << " levelParam = " << levelParam << G4endl 00086 << " thresh = " << getThresh() << G4endl 00087 << " s = " << s << G4endl 00088 << " probability = " << emissionProbability << G4endl; 00089 00090 return; 00091 }
virtual G4double G4BEChargedChannel::coulombFactor | ( | ) | [pure virtual] |
Implemented in G4BEDeuteronChannel, G4BEHe3Channel, G4BEHe4Channel, G4BEProtonChannel, and G4BETritonChannel.
Referenced by calculateProbability().
G4double G4BEChargedChannel::coulombFactorForProton | ( | ) |
Definition at line 128 of file G4BEChargedChannel.cc.
References CLHEP::detail::n, G4BertiniEvaporationChannel::nucleusZ, and G4BertiniEvaporationChannel::particleZ.
Referenced by G4BETritonChannel::coulombFactor(), G4BEProtonChannel::coulombFactor(), and G4BEDeuteronChannel::coulombFactor().
00129 { 00130 // Coefficient c_p:s for empirical cross section formula are 00131 // defined with the proton constant. See Dostrovsky, Phys. Rev., 00132 // vol. 116, 1959. 00133 G4double t[7] = { 0.08 , 0 , -0.06 , -0.1 , -0.1 , -0.1 , -0.1 }; 00134 G4int Z = nucleusZ - particleZ; 00135 00136 if ( Z >= 70.0 ) return t[6]; 00137 if ( Z <= 10.0 ) return t[0]; 00138 00139 // Linear interpolation 00140 G4int n = G4int( 0.1 * Z + 1.0 ); 00141 G4float x = ( 10 * n - Z ) * 0.1; 00142 G4double ret_val = x * t[n - 2] + ( 1.0 - x ) * t[n-1]; 00143 00144 return ret_val; 00145 }
virtual G4DynamicParticle* G4BEChargedChannel::emit | ( | ) | [pure virtual] |
Implements G4BertiniEvaporationChannel.
Implemented in G4BEDeuteronChannel, G4BEHe3Channel, G4BEHe4Channel, G4BEProtonChannel, and G4BETritonChannel.
G4double G4BEChargedChannel::qmFactorForAlpha | ( | ) |
Definition at line 166 of file G4BEChargedChannel.cc.
References CLHEP::detail::n, G4BertiniEvaporationChannel::nucleusZ, and G4BertiniEvaporationChannel::particleZ.
Referenced by G4BEHe4Channel::qmFactor(), and G4BEHe3Channel::qmFactor().
00167 { 00168 // Coefficient k_alpha for empirical cross section formula presented 00169 // in Dostrovsky, Phys. Rev., vol. 116, 1959 00170 00171 G4double t[7] = { 0.77, 0.81, 0.85, 0.89, 0.93, 0.97, 1.00 }; 00172 G4int Z = nucleusZ - particleZ; 00173 00174 if ( Z >= 70.0 ) return t[6]; 00175 if ( Z <= 10.0 ) return t[0]; 00176 00177 // Linear interpolation 00178 G4int n = G4int( 0.1 * Z + 1.0 ); 00179 G4float x = ( 10 * n - Z ) * 0.1; 00180 return x * t[n - 2] + ( 1.0 - x ) * t[n-1]; 00181 }
G4double G4BEChargedChannel::qmFactorForProton | ( | ) |
Definition at line 148 of file G4BEChargedChannel.cc.
References CLHEP::detail::n, G4BertiniEvaporationChannel::nucleusZ, and G4BertiniEvaporationChannel::particleZ.
Referenced by G4BETritonChannel::qmFactor(), G4BEProtonChannel::qmFactor(), and G4BEDeuteronChannel::qmFactor().
00149 { 00150 // Coefficient k_p for empirical cross section formula are defined 00151 // with the proton constant. See Dostrovsky, Phys. Rev., vol. 116, 00152 // 1959 00153 G4double t[7] = { 0.36, 0.51, 0.60, 0.66, 0.68, 0.69, 0.69 }; 00154 G4int Z = nucleusZ - particleZ; 00155 00156 if ( Z >= 70.0 ) return t[6]; 00157 if ( Z <= 10.0 ) return t[0]; 00158 00159 // Linear interpolation 00160 G4int n = G4int( 0.1 * Z + 1.0 ); 00161 G4float x = ( 10 * n - Z ) * 0.1; 00162 return x * t[n - 2] + ( 1.0 - x ) * t[n-1]; 00163 }
G4double G4BEChargedChannel::sampleKineticEnergy | ( | ) |
Definition at line 94 of file G4BEChargedChannel.cc.
References G4BertiniEvaporationChannel::correction, G4BertiniEvaporationChannel::excitationEnergy, G4cout, G4endl, G4UniformRand, G4BertiniEvaporationChannel::getCoulomb(), G4BertiniEvaporationChannel::getLevelDensityParameter(), G4BertiniEvaporationChannel::getThresh(), and G4BertiniEvaporationChannel::verboseLevel.
Referenced by G4BETritonChannel::emit(), G4BEProtonChannel::emit(), G4BEHe4Channel::emit(), G4BEHe3Channel::emit(), and G4BEDeuteronChannel::emit().
00095 { 00096 G4double levelParam; 00097 levelParam = getLevelDensityParameter(); 00098 00099 const G4double xMax = excitationEnergy - getThresh() - correction; // maximum number 00100 const G4double xProb = ( - 1 + std::sqrt ( 1 + 4 * levelParam * xMax ) ) / ( 2 * levelParam ); // most probable value 00101 const G4double maxProb = xProb * std::exp ( 2 * std::sqrt ( levelParam * ( xMax - xProb ) ) ); // maximum value of P(x) 00102 00103 // Sample x according to density function P(x) with rejection method 00104 G4double r1; 00105 G4double r2; 00106 G4int koe=0; 00107 do 00108 { 00109 r1 = G4UniformRand() * xMax; 00110 r2 = G4UniformRand() * maxProb; 00111 koe++; 00112 } 00113 while ( r1 * std::exp ( 2 * std::sqrt ( levelParam * ( xMax - r1 ) ) ) < r2 ); 00114 00115 // G4cout << "Q ch " << koe << G4endl; 00116 G4double kineticEnergy = r1 + getCoulomb(); // add coulomb potential; 00117 00118 if ( verboseLevel >= 10 ) 00119 G4cout << " G4BENeutronChannel : sampleKineticEnergy() " << G4endl 00120 << " kinetic n e = " << kineticEnergy << G4endl 00121 << " levelParam = " << levelParam << G4endl 00122 << " thresh= " << getThresh() << G4endl; 00123 00124 return kineticEnergy; 00125 }
G4double G4BEChargedChannel::A [protected] |
Definition at line 53 of file G4BEChargedChannel.hh.
Referenced by calculateProbability(), G4BEDeuteronChannel::G4BEDeuteronChannel(), G4BEHe3Channel::G4BEHe3Channel(), G4BEHe4Channel::G4BEHe4Channel(), G4BEProtonChannel::G4BEProtonChannel(), and G4BETritonChannel::G4BETritonChannel().
G4double G4BEChargedChannel::spin [protected] |
Reimplemented from G4BertiniEvaporationChannel.
Definition at line 54 of file G4BEChargedChannel.hh.
Referenced by calculateProbability(), G4BEDeuteronChannel::G4BEDeuteronChannel(), G4BEHe3Channel::G4BEHe3Channel(), G4BEHe4Channel::G4BEHe4Channel(), G4BEProtonChannel::G4BEProtonChannel(), and G4BETritonChannel::G4BETritonChannel().