#include <G4DNAEmfietzoglouExcitationModel.hh>
Inheritance diagram for G4DNAEmfietzoglouExcitationModel:
Public Member Functions | |
G4DNAEmfietzoglouExcitationModel (const G4ParticleDefinition *p=0, const G4String &nam="DNAEmfietzoglouExcitationModel") | |
virtual | ~G4DNAEmfietzoglouExcitationModel () |
virtual void | Initialise (const G4ParticleDefinition *, const G4DataVector &=*(new G4DataVector())) |
virtual G4double | CrossSectionPerVolume (const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) |
virtual void | SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) |
G4double | PartialCrossSection (G4double energy, G4int level) |
Protected Attributes | |
G4ParticleChangeForGamma * | fParticleChangeForGamma |
Definition at line 42 of file G4DNAEmfietzoglouExcitationModel.hh.
G4DNAEmfietzoglouExcitationModel::G4DNAEmfietzoglouExcitationModel | ( | const G4ParticleDefinition * | p = 0 , |
|
const G4String & | nam = "DNAEmfietzoglouExcitationModel" | |||
) |
Definition at line 41 of file G4DNAEmfietzoglouExcitationModel.cc.
References fParticleChangeForGamma, G4cout, G4endl, G4DNAWaterExcitationStructure::NumberOfLevels(), G4VEmModel::SetHighEnergyLimit(), and G4VEmModel::SetLowEnergyLimit().
00043 :G4VEmModel(nam),isInitialised(false) 00044 { 00045 // nistwater = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"); 00046 fpWaterDensity = 0; 00047 00048 lowEnergyLimit = 8.23 * eV; 00049 highEnergyLimit = 10 * MeV; 00050 SetLowEnergyLimit(lowEnergyLimit); 00051 SetHighEnergyLimit(highEnergyLimit); 00052 00053 nLevels = waterExcitation.NumberOfLevels(); 00054 00055 verboseLevel= 0; 00056 // Verbosity scale: 00057 // 0 = nothing 00058 // 1 = warning for energy non-conservation 00059 // 2 = details of energy budget 00060 // 3 = calculation of cross sections, file openings, sampling of atoms 00061 // 4 = entering in methods 00062 00063 if (verboseLevel > 3) 00064 if( verboseLevel>0 ) 00065 { 00066 G4cout << "Emfietzoglou Excitation model is constructed " << G4endl 00067 << "Energy range: " 00068 << lowEnergyLimit / eV << " eV - " 00069 << highEnergyLimit / MeV << " MeV" 00070 << G4endl; 00071 } 00072 fParticleChangeForGamma = 0; 00073 }
G4DNAEmfietzoglouExcitationModel::~G4DNAEmfietzoglouExcitationModel | ( | ) | [virtual] |
G4double G4DNAEmfietzoglouExcitationModel::CrossSectionPerVolume | ( | const G4Material * | material, | |
const G4ParticleDefinition * | p, | |||
G4double | ekin, | |||
G4double | emin, | |||
G4double | emax | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 126 of file G4DNAEmfietzoglouExcitationModel.cc.
References G4Electron::ElectronDefinition(), G4cout, G4endl, G4Material::GetAtomicNumDensityVector(), G4Material::GetIndex(), and G4ParticleDefinition::GetParticleName().
00131 { 00132 if (verboseLevel > 3) 00133 G4cout << "Calling CrossSectionPerVolume() of G4DNAEmfietzoglouExcitationModel" << G4endl; 00134 00135 // Calculate total cross section for model 00136 00137 G4double sigma=0; 00138 00139 G4double waterDensity = (*fpWaterDensity)[material->GetIndex()]; 00140 00141 if(waterDensity!= 0.0) 00142 // if (material == nistwater || material->GetBaseMaterial() == nistwater) 00143 { 00144 00145 if (particleDefinition == G4Electron::ElectronDefinition()) 00146 { 00147 if (ekin >= lowEnergyLimit && ekin < highEnergyLimit) 00148 { 00149 sigma = Sum(ekin); 00150 } 00151 } 00152 00153 if (verboseLevel > 2) 00154 { 00155 G4cout << "__________________________________" << G4endl; 00156 G4cout << "°°° G4DNAEmfietzoglouExcitationModel - XS INFO START" << G4endl; 00157 G4cout << "°°° Kinetic energy(eV)=" << ekin/eV << " particle : " << particleDefinition->GetParticleName() << G4endl; 00158 G4cout << "°°° Cross section per water molecule (cm^2)=" << sigma/cm/cm << G4endl; 00159 G4cout << "°°° Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) << G4endl; 00160 // G4cout << " - Cross section per water molecule (cm^-1)=" << sigma*material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl; 00161 G4cout << "°°° G4DNAEmfietzoglouExcitationModel - XS INFO END" << G4endl; 00162 } 00163 00164 } 00165 00166 return sigma*material->GetAtomicNumDensityVector()[1]; 00167 }
void G4DNAEmfietzoglouExcitationModel::Initialise | ( | const G4ParticleDefinition * | , | |
const G4DataVector & | = *(new G4DataVector()) | |||
) | [virtual] |
Implements G4VEmModel.
Definition at line 82 of file G4DNAEmfietzoglouExcitationModel.cc.
References fParticleChangeForGamma, G4cout, G4endl, G4Material::GetMaterial(), G4DNAMolecularMaterial::GetNumMolPerVolTableFor(), G4VEmModel::GetParticleChangeForGamma(), G4VEmModel::HighEnergyLimit(), G4DNAMolecularMaterial::Instance(), G4VEmModel::LowEnergyLimit(), G4VEmModel::SetHighEnergyLimit(), and G4VEmModel::SetLowEnergyLimit().
00084 { 00085 00086 if (verboseLevel > 3) 00087 G4cout << "Calling G4DNAEmfietzoglouExcitationModel::Initialise()" << G4endl; 00088 00089 // Energy limits 00090 00091 if (LowEnergyLimit() < lowEnergyLimit) 00092 { 00093 G4cout << "G4DNAEmfietzoglouExcitationModel: low energy limit increased from " << 00094 LowEnergyLimit()/eV << " eV to " << lowEnergyLimit/eV << " eV" << G4endl; 00095 SetLowEnergyLimit(lowEnergyLimit); 00096 } 00097 00098 if (HighEnergyLimit() > highEnergyLimit) 00099 { 00100 G4cout << "G4DNAEmfietzoglouExcitationModel: high energy limit decreased from " << 00101 HighEnergyLimit()/MeV << " MeV to " << highEnergyLimit/MeV << " MeV" << G4endl; 00102 SetHighEnergyLimit(highEnergyLimit); 00103 } 00104 00105 // 00106 if( verboseLevel>0 ) 00107 { 00108 G4cout << "Emfietzoglou Excitation model is initialized " << G4endl 00109 << "Energy range: " 00110 << LowEnergyLimit() / eV << " eV - " 00111 << HighEnergyLimit() / MeV << " MeV" 00112 << G4endl; 00113 } 00114 00115 // Initialize water density pointer 00116 fpWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); 00117 00118 if (isInitialised) { return; } 00119 fParticleChangeForGamma = GetParticleChangeForGamma(); 00120 isInitialised = true; 00121 00122 }
Definition at line 203 of file G4DNAEmfietzoglouExcitationModel.cc.
References G4DNAWaterExcitationStructure::ExcitationEnergy(), and G4INCL::Math::pi.
00204 { 00205 // Aj T 00206 // Sigma(T) = ------------- (Bj / T) ln(Cj ---) [1 - Bj / T]^Pj 00207 // 2 pi alpha0 R 00208 // 00209 // Sigma is the macroscopic cross section = N sigma, where N = number of target particles per unit volume 00210 // and sigma is the microscopic cross section 00211 // T is the incoming electron kinetic energy 00212 // alpha0 is the Bohr Radius (Bohr_radius) 00213 // Aj, Bj, Cj & Pj are parameters that can be found in Emfietzoglou's papers 00214 // 00215 // From Phys. Med. Biol. 48 (2003) 2355-2371, D.Emfietzoglou, 00216 // Monte Carlo Simulation of the energy loss of low energy electrons in liquid Water 00217 // 00218 // Scaling for macroscopic cross section: number of water moleculs per unit volume 00219 // const G4double sigma0 = (10. / 3.343e22) * cm2; 00220 00221 const G4double density = 3.34192e+19 * mm3; 00222 00223 const G4double aj[]={0.0205, 0.0209, 0.0130, 0.0026, 0.0025}; 00224 const G4double cj[]={4.9801, 3.3850, 2.8095, 1.9242, 3.4624}; 00225 const G4double pj[]={0.4757, 0.3483, 0.4443, 0.3429, 0.4379}; 00226 const G4double r = 13.6 * eV; 00227 00228 G4double sigma = 0.; 00229 00230 G4double exc = waterExcitation.ExcitationEnergy(level); 00231 00232 if (t >= exc) 00233 { 00234 G4double excitationSigma = ( aj[level] / (2.*pi*Bohr_radius)) 00235 * (exc / t) 00236 * std::log(cj[level]*(t/r)) 00237 * std::pow((1.- (exc/t)), pj[level]); 00238 sigma = excitationSigma / density; 00239 } 00240 00241 return sigma; 00242 }
void G4DNAEmfietzoglouExcitationModel::SampleSecondaries | ( | std::vector< G4DynamicParticle * > * | , | |
const G4MaterialCutsCouple * | , | |||
const G4DynamicParticle * | , | |||
G4double | tmin, | |||
G4double | maxEnergy | |||
) | [virtual] |
Implements G4VEmModel.
Definition at line 171 of file G4DNAEmfietzoglouExcitationModel.cc.
References G4DNAChemistryManager::CreateWaterMolecule(), eExcitedMolecule, G4DNAWaterExcitationStructure::ExcitationEnergy(), fParticleChangeForGamma, G4cout, G4endl, G4ParticleChangeForGamma::GetCurrentTrack(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentumDirection(), G4DNAChemistryManager::Instance(), G4VParticleChange::ProposeLocalEnergyDeposit(), G4ParticleChangeForGamma::ProposeMomentumDirection(), and G4ParticleChangeForGamma::SetProposedKineticEnergy().
00176 { 00177 00178 if (verboseLevel > 3) 00179 G4cout << "Calling SampleSecondaries() of G4DNAEmfietzoglouExcitationModel" << G4endl; 00180 00181 G4double electronEnergy0 = aDynamicElectron->GetKineticEnergy(); 00182 00183 G4int level = RandomSelect(electronEnergy0); 00184 00185 G4double excitationEnergy = waterExcitation.ExcitationEnergy(level); 00186 G4double newEnergy = electronEnergy0 - excitationEnergy; 00187 00188 if (electronEnergy0 < highEnergyLimit) 00189 { 00190 fParticleChangeForGamma->ProposeMomentumDirection(aDynamicElectron->GetMomentumDirection()); 00191 fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); 00192 fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); 00193 00194 const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); 00195 G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule, 00196 level, 00197 theIncomingTrack); 00198 } 00199 }
Definition at line 72 of file G4DNAEmfietzoglouExcitationModel.hh.
Referenced by G4DNAEmfietzoglouExcitationModel(), Initialise(), and SampleSecondaries().