48 fpMaterialDensity = 0;
49 fLowEnergyLimit = 10 * eV;
50 fHighEnergyLimit = 1.0 * GeV;
52 for(
G4int i=0;i<100;i++) nValenceElectron[i]=0;
58 G4cout <<
"Quinn plasmon excitation model is constructed " <<
G4endl;
76 for(
G4int i=0;i<100;i++) nValenceElectron[i]=0;
81 "Calling G4DNAQuinnPlasmonExcitationModel::Initialise()"
87 fLowEnergyLimit = 10 * eV;
88 fHighEnergyLimit = 1.0 * GeV;
92 G4Exception(
"G4DNAQuinnPlasmonExcitationModel::Initialise",
"em0001",
103 for(
G4int i=0;i<numOfCouples;i++){
118 nValenceElectron[z] = GetNValenceElectron(z);
122 G4Exception(
"G4DNAQuinnPlasmonExcitationModel::Initialise",
"em0002",
134 G4cout <<
"Quinn plasmon excitation model is initialized " <<
G4endl
142 if (isInitialised){
return;}
144 isInitialised =
true;
156 if (verboseLevel > 3)
159 "Calling CrossSectionPerVolume() of G4DNAQuinnPlasmonExcitationModel"
168 if (z!=79){
return 0.;}
174 if(atomicNDensity!= 0.0)
176 if (ekin >= fLowEnergyLimit && ekin < fHighEnergyLimit)
181 if (verboseLevel > 2)
184 G4cout<<
"=== G4DNAQuinnPlasmonExcitationModel - XS INFO START"<<
G4endl;
185 G4cout<<
"=== Kinetic energy (eV)=" << ekin/eV <<
" particle : "
187 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^2)"
189 G4cout<<
"=== Cross section per atom for Z="<<z<<
" is (cm^-1)="
190 <<sigma*atomicNDensity/(1./cm) <<
G4endl;
191 G4cout<<
"=== G4DNAQuinnPlasmonExcitationModel - XS INFO END" <<
G4endl;
195 return sigma*atomicNDensity;
201 (std::vector<G4DynamicParticle*>* ,
207 if (verboseLevel > 3)
210 "Calling SampleSecondaries() of G4DNAQuinnPlasmonExcitationModel"
227 if(z<100) Nve = nValenceElectron[z];
231 G4double veDens = Dens*CLHEP::Avogadro*Nve/
A;
233 G4double omega_p = std::sqrt(veDens*std::pow(e,2)/
234 (CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2
235 /(CLHEP::c_squared/cm/cm)));
237 G4double excitationEnergy = CLHEP::hbar_Planck*omega_p;
238 G4double newEnergy = k - excitationEnergy;
275 if(z<100) Nve = nValenceElectron[z];
278 G4double veDens = Dens*CLHEP::Avogadro*Nve/
A;
280 G4double omega_p = std::sqrt(veDens*std::pow(e,2)
281 /(CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2/
282 (CLHEP::c_squared/cm/cm)));
284 G4double fEnergy = std::pow(CLHEP::h_Planck,2)/(8*CLHEP::electron_mass_c2)*
285 std::pow(3*veDens/CLHEP::pi,2./3.)/e
286 *(CLHEP::c_squared/cm/cm);
288 G4double p0 = sqrt(2*CLHEP::electron_mass_c2
289 /(CLHEP::c_squared/cm/cm)*fEnergy);
291 G4double p = sqrt(2*CLHEP::electron_mass_c2
292 /(CLHEP::c_squared/cm/cm)*kineticEnergy);
294 G4double mfp = 2*CLHEP::Bohr_radius/cm*kineticEnergy
295 /(CLHEP::hbar_Planck*omega_p)/
296 (
G4Log((std::pow(std::pow(p0,2)
297 +2*CLHEP::electron_mass_c2/
298 (CLHEP::c_squared/cm/cm)*omega_p
299 *CLHEP::hbar_Planck,1./2.)-p0)
300 /(p-std::pow(std::pow(p,2)-2*CLHEP::electron_mass_c2/
301 (CLHEP::c_squared/cm/cm)*omega_p
302 *CLHEP::hbar_Planck,1./2.))));
304 G4double excitationEnergy = CLHEP::hbar_Planck*omega_p;
306 if((0<mfp)&&(0<veDens)&&(excitationEnergy<kineticEnergy)){
307 value = 1./(veDens*mfp);
315G4int G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron(
G4int z)
321 if (z!=79){
return 0.;}
323 if (verboseLevel > 3)
326 "Calling GetNValenceElectron() of G4DNAQuinnPlasmonExcitationModel"
330 const char *datadir=0;
337 G4Exception(
"G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()"
339 "Enviroment variable G4LEDATA not defined");
344 std::ostringstream targetfile;
346 targetfile.clear(stringstream::goodbit);
347 targetfile << datadir <<
"/dna/atomicstate_Z"<< z <<
".dat";
348 std::ifstream fin(targetfile.str().c_str());
352 G4cout<<
" Error : "<< targetfile.str() <<
" is not found "<<endl;
353 G4Exception(
"G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()"
355 "There is no target file");
359 string buff0,buff1,buff2,buff3,buff4,buff5,buff6;
360 fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6;
363 fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6;
std::vector< const G4Element * > G4ElementVector
const char * G4FindDataDir(const char *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &= *(new G4DataVector()))
virtual G4double GetCrossSection(const G4Material *material, const G4ParticleDefinition *, G4double kineticEnergy)
G4ParticleChangeForGamma * fParticleChangeForGamma
G4DNAQuinnPlasmonExcitationModel(const G4ParticleDefinition *p=0, const G4String &nam="DNAQuinnPlasmonExcitationModel")
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
virtual ~G4DNAQuinnPlasmonExcitationModel()
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Electron * ElectronDefinition()
const G4Material * GetMaterial() const
G4double GetDensity() const
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
const G4String & GetParticleName() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
G4double HighEnergyLimit() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)