Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/dna/models/src/G4DNAQuinnPlasmonExcitationModel.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/dna/models/src/G4DNAQuinnPlasmonExcitationModel.cc (Version 11.3.0) and /processes/electromagnetic/dna/models/src/G4DNAQuinnPlasmonExcitationModel.cc (Version 11.2.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // Created on 2016/04/08                           26 // Created on 2016/04/08
 27 //                                                 27 //
 28 // Authors: D. Sakata, S. Incerti                  28 // Authors: D. Sakata, S. Incerti
 29 //                                                 29 //
 30 // This class perform transmission term of vol     30 // This class perform transmission term of volume plasmon excitation,
 31 // based on Quinn Model, see Phys. Rev. vol 12     31 // based on Quinn Model, see Phys. Rev. vol 126, number 4 (1962)
 32                                                    32 
 33 #include "G4DNAQuinnPlasmonExcitationModel.hh"     33 #include "G4DNAQuinnPlasmonExcitationModel.hh"
 34 #include "G4SystemOfUnits.hh"                      34 #include "G4SystemOfUnits.hh"
 35 #include "G4RandomDirection.hh"                    35 #include "G4RandomDirection.hh"
 36                                                    36 
 37 //....oooOO0OOooo........oooOO0OOooo........oo     37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 38                                                    38 
 39 using namespace std;                               39 using namespace std;
 40                                                    40 
 41 //....oooOO0OOooo........oooOO0OOooo........oo     41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 42                                                    42 
 43 G4DNAQuinnPlasmonExcitationModel::G4DNAQuinnPl     43 G4DNAQuinnPlasmonExcitationModel::G4DNAQuinnPlasmonExcitationModel
 44                         (const G4ParticleDefin     44                         (const G4ParticleDefinition*,
 45                          const G4String& nam):     45                          const G4String& nam):
 46 G4VEmModel(nam)                                    46 G4VEmModel(nam) 
 47 {                                                  47 {
 48   fpMaterialDensity       = nullptr;               48   fpMaterialDensity       = nullptr;
 49   fLowEnergyLimit         =  10  *  eV;            49   fLowEnergyLimit         =  10  *  eV;
 50   fHighEnergyLimit        =  1.0 * GeV;            50   fHighEnergyLimit        =  1.0 * GeV;
 51                                                    51 
 52   for(int & i : nValenceElectron) i=0;             52   for(int & i : nValenceElectron) i=0;
 53                                                    53 
 54   verboseLevel = 0;                                54   verboseLevel = 0;
 55                                                    55 
 56   if (verboseLevel > 0)                            56   if (verboseLevel > 0)
 57   {                                                57   {
 58     G4cout << "Quinn plasmon excitation model      58     G4cout << "Quinn plasmon excitation model is constructed " << G4endl;
 59   }                                                59   }
 60   fParticleChangeForGamma = nullptr;               60   fParticleChangeForGamma = nullptr;
 61   statCode                = false;                 61   statCode                = false;
 62 }                                                  62 }
 63                                                    63 
 64 //....oooOO0OOooo........oooOO0OOooo........oo     64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 65                                                    65 
 66 G4DNAQuinnPlasmonExcitationModel::~G4DNAQuinnP     66 G4DNAQuinnPlasmonExcitationModel::~G4DNAQuinnPlasmonExcitationModel()
 67 = default;                                         67 = default;
 68                                                    68 
 69 //....oooOO0OOooo........oooOO0OOooo........oo     69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 70                                                    70 
 71 void G4DNAQuinnPlasmonExcitationModel::Initial     71 void G4DNAQuinnPlasmonExcitationModel::Initialise
 72                         (const G4ParticleDefin     72                         (const G4ParticleDefinition* particle,
 73                          const G4DataVector& /     73                          const G4DataVector& /*cuts*/)
 74 {                                                  74 {
 75   for(int & i : nValenceElectron) i=0;             75   for(int & i : nValenceElectron) i=0;
 76                                                    76 
 77   if (verboseLevel > 3)                            77   if (verboseLevel > 3)
 78   {                                                78   {
 79     G4cout <<                                      79     G4cout << 
 80            "Calling G4DNAQuinnPlasmonExcitatio     80            "Calling G4DNAQuinnPlasmonExcitationModel::Initialise()" 
 81            << G4endl;                              81            << G4endl;
 82   }                                                82   }
 83                                                    83 
 84   if(particle == G4Electron::ElectronDefinitio     84   if(particle == G4Electron::ElectronDefinition())
 85   {                                                85   {
 86     fLowEnergyLimit           =  10  *  eV;        86     fLowEnergyLimit           =  10  *  eV;
 87     fHighEnergyLimit          =  1.0 * GeV;        87     fHighEnergyLimit          =  1.0 * GeV;
 88   }                                                88   }
 89   else                                             89   else
 90   {                                                90   { 
 91     G4Exception("G4DNAQuinnPlasmonExcitationMo     91     G4Exception("G4DNAQuinnPlasmonExcitationModel::Initialise","em0001",
 92     FatalException,"Not defined for other part     92     FatalException,"Not defined for other particles than electrons.");
 93    return;                                         93    return;
 94   }                                                94   }
 95                                                    95 
 96   // Get Number of valence electrons               96   // Get Number of valence electrons
 97   G4ProductionCutsTable* theCoupleTable =          97   G4ProductionCutsTable* theCoupleTable = 
 98       G4ProductionCutsTable::GetProductionCuts     98       G4ProductionCutsTable::GetProductionCutsTable();
 99                                                    99       
100   auto  numOfCouples = (G4int)theCoupleTable->    100   auto  numOfCouples = (G4int)theCoupleTable->GetTableSize();
101                                                   101   
102   for(G4int i=0;i<numOfCouples;i++){              102   for(G4int i=0;i<numOfCouples;i++){
103                                                   103     
104     const G4MaterialCutsCouple* couple =          104     const G4MaterialCutsCouple* couple = 
105           theCoupleTable->GetMaterialCutsCoupl    105           theCoupleTable->GetMaterialCutsCouple(i);
106                                                   106     
107     const G4Material* material = couple->GetMa    107     const G4Material* material = couple->GetMaterial();
108                                                   108     
109     const G4ElementVector* theElementVector =m    109     const G4ElementVector* theElementVector =material->GetElementVector();
110                                                   110     
111     std::size_t nelm = material->GetNumberOfEl    111     std::size_t nelm = material->GetNumberOfElements();
112     if (nelm==1) // Protection: only for singl    112     if (nelm==1) // Protection: only for single element
113     {                                             113     {
114       G4int z = G4lrint((*theElementVector)[0]    114       G4int z = G4lrint((*theElementVector)[0]->GetZ());
115       if(z<=100)                                  115       if(z<=100)
116       {                                           116       {
117         nValenceElectron[z]  = GetNValenceElec    117         nValenceElectron[z]  = GetNValenceElectron(z);
118       }                                           118       }
119       else                                        119       else
120       {                                           120       {
121         G4Exception("G4DNAQuinnPlasmonExcitati    121         G4Exception("G4DNAQuinnPlasmonExcitationModel::Initialise","em0002",
122           FatalException,"The model is not app    122           FatalException,"The model is not applied for z>100");
123       }                                           123       }
124     }                                             124     }
125     //for(G4int j=0;j<nelm;j++){                  125     //for(G4int j=0;j<nelm;j++){
126     //    G4int z=G4lrint((*theElementVector)[    126     //    G4int z=G4lrint((*theElementVector)[j]->GetZ());
127     //    if(z<=100){nValenceElectron[z]  = Ge    127     //    if(z<=100){nValenceElectron[z]  = GetNValenceElectron(z);}
128     //}                                           128     //}
129   }                                               129   }
130                                                   130 
131   if( verboseLevel>0 )                            131   if( verboseLevel>0 )
132   {                                               132   {
133     G4cout << "Quinn plasmon excitation model     133     G4cout << "Quinn plasmon excitation model is initialized " << G4endl
134     << "Energy range: "                           134     << "Energy range: "
135     << LowEnergyLimit() / eV << " eV - "          135     << LowEnergyLimit() / eV << " eV - "
136     << HighEnergyLimit() / keV << " keV for "     136     << HighEnergyLimit() / keV << " keV for "
137     << particle->GetParticleName()                137     << particle->GetParticleName()
138     << G4endl;                                    138     << G4endl;
139   }                                               139   }
140                                                   140 
141   if (isInitialised){return;}                     141   if (isInitialised){return;}
142   fParticleChangeForGamma = GetParticleChangeF    142   fParticleChangeForGamma = GetParticleChangeForGamma();
143   isInitialised = true;                           143   isInitialised = true;
144 }                                                 144 }
145                                                   145 
146 //....oooOO0OOooo........oooOO0OOooo........oo    146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
147                                                   147 
148 G4double G4DNAQuinnPlasmonExcitationModel::Cro    148 G4double G4DNAQuinnPlasmonExcitationModel::CrossSectionPerVolume
149                          (const G4Material* ma    149                          (const G4Material* material,
150                           const G4ParticleDefi    150                           const G4ParticleDefinition* particleDefinition,
151                           G4double ekin,          151                           G4double ekin,
152                           G4double,               152                           G4double,
153                           G4double)               153                           G4double)
154 {                                                 154 {
155   if (verboseLevel > 3)                           155   if (verboseLevel > 3)
156   {                                               156   {
157     G4cout <<                                     157     G4cout << 
158          "Calling CrossSectionPerVolume() of G    158          "Calling CrossSectionPerVolume() of G4DNAQuinnPlasmonExcitationModel"
159            << G4endl;                             159            << G4endl;
160   }                                               160   }
161                                                   161 
162   // Protection: only for single element          162   // Protection: only for single element
163   if(material->GetNumberOfElements()>1) return    163   if(material->GetNumberOfElements()>1) return 0.;
164   G4double z = material->GetZ();                  164   G4double z = material->GetZ();
165                                                   165 
166   // Protection: only for Gold                    166   // Protection: only for Gold
167   if (z!=79){return 0.;}                          167   if (z!=79){return 0.;}
168                                                   168   
169                                                   169 
170   G4double sigma           = 0;                   170   G4double sigma           = 0;
171   G4double atomicNDensity = material->GetAtomi    171   G4double atomicNDensity = material->GetAtomicNumDensityVector()[0];
172                                                   172 
173   if(atomicNDensity!= 0.0)                        173   if(atomicNDensity!= 0.0)
174   {                                               174   {
175     if (ekin >= fLowEnergyLimit && ekin < fHig    175     if (ekin >= fLowEnergyLimit && ekin < fHighEnergyLimit)
176     {                                             176     {
177       sigma = GetCrossSection(material,particl    177       sigma = GetCrossSection(material,particleDefinition,ekin);
178     }                                             178     }
179                                                   179 
180     if (verboseLevel > 2)                         180     if (verboseLevel > 2)
181     {                                             181     {
182       G4cout<<"_______________________________    182       G4cout<<"__________________________________" << G4endl;
183       G4cout<<"=== G4DNAQuinnPlasmonExcitation    183       G4cout<<"=== G4DNAQuinnPlasmonExcitationModel - XS INFO START"<<G4endl;
184       G4cout<<"=== Kinetic energy (eV)=" << ek    184       G4cout<<"=== Kinetic energy (eV)=" << ekin/eV << " particle : " 
185             <<particleDefinition->GetParticleN    185             <<particleDefinition->GetParticleName() << G4endl;
186       G4cout<<"=== Cross section per atom for     186       G4cout<<"=== Cross section per atom for Z="<<z<<" is (cm^2)" 
187             <<sigma/cm/cm << G4endl;              187             <<sigma/cm/cm << G4endl;
188       G4cout<<"=== Cross section per atom for     188       G4cout<<"=== Cross section per atom for Z="<<z<<" is (cm^-1)=" 
189             <<sigma*atomicNDensity/(1./cm) <<     189             <<sigma*atomicNDensity/(1./cm) << G4endl;
190       G4cout<<"=== G4DNAQuinnPlasmonExcitation    190       G4cout<<"=== G4DNAQuinnPlasmonExcitationModel - XS INFO END" << G4endl;
191     }                                             191     }
192   }                                               192   } 
193                                                   193 
194   return sigma*atomicNDensity;                    194   return sigma*atomicNDensity;
195 }                                                 195 }
196                                                   196 
197 //....oooOO0OOooo........oooOO0OOooo........oo    197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
198                                                   198 
199 void G4DNAQuinnPlasmonExcitationModel::SampleS    199 void G4DNAQuinnPlasmonExcitationModel::SampleSecondaries
200                          (std::vector<G4Dynami    200                          (std::vector<G4DynamicParticle*>* /*fvect*/,
201                           const G4MaterialCuts    201                           const G4MaterialCutsCouple* couple,
202                           const G4DynamicParti    202                           const G4DynamicParticle* aDynamicParticle,
203                           G4double,G4double)      203                           G4double,G4double)
204 {                                                 204 {
205                                                   205 
206   if (verboseLevel > 3)                           206   if (verboseLevel > 3)
207   {                                               207   {
208     G4cout <<                                     208     G4cout << 
209            "Calling SampleSecondaries() of G4D    209            "Calling SampleSecondaries() of G4DNAQuinnPlasmonExcitationModel"
210            << G4endl;                             210            << G4endl;
211   }                                               211   }
212                                                   212 
213   const G4Material *material = couple->GetMate    213   const G4Material *material = couple->GetMaterial();
214                                                   214 
215   G4ParticleDefinition* particle = aDynamicPar    215   G4ParticleDefinition* particle = aDynamicParticle->GetDefinition();
216                                                   216   
217   G4double k                     = aDynamicPar    217   G4double k                     = aDynamicParticle->GetKineticEnergy();
218                                                   218 
219   if(particle == G4Electron::ElectronDefinitio    219   if(particle == G4Electron::ElectronDefinition())
220   {                                               220   {
221     G4double  e      = 1.;                        221     G4double  e      = 1.;
222     G4int     z      = material->GetZ();          222     G4int     z      = material->GetZ();
223     G4int     Nve    = 0;                         223     G4int     Nve    = 0;
224                                                   224 
225     //TODO: have to be change to realistic!!      225     //TODO: have to be change to realistic!!
226     if(z<100) Nve    = nValenceElectron[z];       226     if(z<100) Nve    = nValenceElectron[z];
227                                                   227 
228     G4double  A      = material->GetA()/g/mole    228     G4double  A      = material->GetA()/g/mole;
229     G4double  Dens   = material->GetDensity()/    229     G4double  Dens   = material->GetDensity()/g*cm*cm*cm;
230     G4double  veDens = Dens*CLHEP::Avogadro*Nv    230     G4double  veDens = Dens*CLHEP::Avogadro*Nve/A;
231                                                   231 
232     G4double omega_p = std::sqrt(veDens*std::p    232     G4double omega_p = std::sqrt(veDens*std::pow(e,2)/
233                       (CLHEP::epsilon0/(1./cm)    233                       (CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2
234                       /(CLHEP::c_squared/cm/cm    234                       /(CLHEP::c_squared/cm/cm)));
235                                                   235     
236     G4double excitationEnergy   = CLHEP::hbar_    236     G4double excitationEnergy   = CLHEP::hbar_Planck*omega_p;
237     G4double newEnergy          = k - excitati    237     G4double newEnergy          = k - excitationEnergy;
238                                                   238 
239                                                   239 
240     if (newEnergy > 0)                            240     if (newEnergy > 0)
241     {                                             241     {
242       fParticleChangeForGamma->                   242       fParticleChangeForGamma->
243             ProposeMomentumDirection(aDynamicP    243             ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection());
244                                                   244       
245       fParticleChangeForGamma->ProposeLocalEne    245       fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy);
246                                                   246       
247       if(!statCode)                               247       if(!statCode)
248       {                                           248       {
249            fParticleChangeForGamma->SetPropose    249            fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy);
250       }                                           250       }
251       else                                        251       else
252       {                                           252       {
253            fParticleChangeForGamma->SetPropose    253            fParticleChangeForGamma->SetProposedKineticEnergy(k);
254                                                   254       
255       }                                           255       }
256     }                                             256     }
257   }                                               257   } 
258 }                                                 258 }
259                                                   259 
260 //....oooOO0OOooo........oooOO0OOooo........oo    260 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
261                                                   261 
262 G4double G4DNAQuinnPlasmonExcitationModel::Get    262 G4double G4DNAQuinnPlasmonExcitationModel::GetCrossSection
263                          (const G4Material* ma    263                          (const G4Material* material,
264                           const G4ParticleDefi    264                           const G4ParticleDefinition* particle,
265                           G4double kineticEner    265                           G4double kineticEnergy)
266 {                                                 266 {
267   G4double value=0;                               267   G4double value=0; 
268                                                   268 
269   if(particle == G4Electron::ElectronDefinitio    269   if(particle == G4Electron::ElectronDefinition())
270   {                                               270   {
271      G4double  e      = 1.;                       271      G4double  e      = 1.;
272      G4int     z      = material->GetZ();         272      G4int     z      = material->GetZ();
273      G4int     Nve    = 0;                        273      G4int     Nve    = 0;
274      if(z<100) Nve    = nValenceElectron[z];      274      if(z<100) Nve    = nValenceElectron[z];
275      G4double  A      = material->GetA()/g/mol    275      G4double  A      = material->GetA()/g/mole;
276      G4double  Dens   = material->GetDensity()    276      G4double  Dens   = material->GetDensity()/g*cm*cm*cm;
277      G4double  veDens = Dens*CLHEP::Avogadro*N    277      G4double  veDens = Dens*CLHEP::Avogadro*Nve/A;
278                                                   278 
279      G4double omega_p = std::sqrt(veDens*std::    279      G4double omega_p = std::sqrt(veDens*std::pow(e,2)
280                         /(CLHEP::epsilon0/(1./    280                         /(CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2/
281                         (CLHEP::c_squared/cm/c    281                         (CLHEP::c_squared/cm/cm)));
282                                                   282      
283      G4double fEnergy = std::pow(CLHEP::h_Plan    283      G4double fEnergy = std::pow(CLHEP::h_Planck,2)/(8*CLHEP::electron_mass_c2)*
284                         std::pow(3*veDens/CLHE    284                         std::pow(3*veDens/CLHEP::pi,2./3.)/e
285                         *(CLHEP::c_squared/cm/    285                         *(CLHEP::c_squared/cm/cm);
286                                                   286      
287      G4double p0      = sqrt(2*CLHEP::electron    287      G4double p0      = sqrt(2*CLHEP::electron_mass_c2
288                         /(CLHEP::c_squared/cm/    288                         /(CLHEP::c_squared/cm/cm)*fEnergy);
289                                                   289      
290      G4double p       = sqrt(2*CLHEP::electron    290      G4double p       = sqrt(2*CLHEP::electron_mass_c2
291                         /(CLHEP::c_squared/cm/    291                         /(CLHEP::c_squared/cm/cm)*kineticEnergy);
292                                                   292 
293      G4double mfp     = 2*CLHEP::Bohr_radius/c    293      G4double mfp     = 2*CLHEP::Bohr_radius/cm*kineticEnergy
294                         /(CLHEP::hbar_Planck*o    294                         /(CLHEP::hbar_Planck*omega_p)/
295                         (G4Log((std::pow(std::    295                         (G4Log((std::pow(std::pow(p0,2)
296                         +2*CLHEP::electron_mas    296                         +2*CLHEP::electron_mass_c2/
297                         (CLHEP::c_squared/cm/c    297                         (CLHEP::c_squared/cm/cm)*omega_p
298                         *CLHEP::hbar_Planck,1.    298                         *CLHEP::hbar_Planck,1./2.)-p0)
299                         /(p-std::pow(std::pow(    299                         /(p-std::pow(std::pow(p,2)-2*CLHEP::electron_mass_c2/
300                         (CLHEP::c_squared/cm/c    300                         (CLHEP::c_squared/cm/cm)*omega_p
301                         *CLHEP::hbar_Planck,1.    301                         *CLHEP::hbar_Planck,1./2.))));
302                                                   302 
303      G4double excitationEnergy   = CLHEP::hbar    303      G4double excitationEnergy   = CLHEP::hbar_Planck*omega_p;
304                                                   304      
305      if((0<mfp)&&(0<veDens)&&(excitationEnergy    305      if((0<mfp)&&(0<veDens)&&(excitationEnergy<kineticEnergy)){
306        value            = 1./(veDens*mfp);        306        value            = 1./(veDens*mfp);
307      }                                            307      }
308   }                                               308   }
309   return value*cm*cm;                             309   return value*cm*cm;
310 }                                                 310 }
311                                                   311 
312 //....oooOO0OOooo........oooOO0OOooo........oo    312 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
313                                                   313 
314 G4int G4DNAQuinnPlasmonExcitationModel::GetNVa    314 G4int G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron(G4int z)
315 {                                                 315 {
316                                                   316 
317   G4int Nve=0;                                    317   G4int Nve=0;
318                                                   318   
319   // Current limitation to gold                   319   // Current limitation to gold
320   if (z!=79){return 0.;}                          320   if (z!=79){return 0.;}
321                                                   321 
322   if (verboseLevel > 3)                           322   if (verboseLevel > 3)
323   {                                               323   {
324     G4cout <<                                     324     G4cout << 
325            "Calling GetNValenceElectron() of G    325            "Calling GetNValenceElectron() of G4DNAQuinnPlasmonExcitationModel"
326            << G4endl;                             326            << G4endl;
327   }                                               327   }
328                                                   328  
329   const char *datadir=nullptr;                    329   const char *datadir=nullptr;
330                                                   330   
331   if(datadir == nullptr)                          331   if(datadir == nullptr)
332   {                                               332   {
333      datadir = G4FindDataDir("G4LEDATA");         333      datadir = G4FindDataDir("G4LEDATA");
334      if(datadir == nullptr)                       334      if(datadir == nullptr)
335      {                                            335      {
336        G4Exception("G4DNAQuinnPlasmonExcitatio    336        G4Exception("G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()"
337                    ,"em0002",FatalException,      337                    ,"em0002",FatalException,
338                    "Enviroment variable G4LEDA    338                    "Enviroment variable G4LEDATA not defined");
339        return 0;                                  339        return 0;
340      }                                            340      }
341   }                                               341   }
342                                                   342 
343   std::ostringstream targetfile;                  343   std::ostringstream targetfile;
344   targetfile.str("");                             344   targetfile.str("");
345   targetfile.clear(stringstream::goodbit);        345   targetfile.clear(stringstream::goodbit);
346   targetfile << datadir <<"/dna/atomicstate_Z"    346   targetfile << datadir <<"/dna/atomicstate_Z"<< z <<".dat";
347   std::ifstream fin(targetfile.str().c_str());    347   std::ifstream fin(targetfile.str().c_str());
348                                                   348 
349   if(!fin)                                        349   if(!fin)
350   {                                               350   {
351     G4cout<< " Error : "<< targetfile.str() <<    351     G4cout<< " Error : "<< targetfile.str() <<" is not found "<<endl;
352     G4Exception("G4DNAQuinnPlasmonExcitationMo    352     G4Exception("G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()"
353                 ,"em0003",FatalException,         353                 ,"em0003",FatalException,
354                 "There is no target file");       354                 "There is no target file");
355     return 0;                                     355     return 0;
356   }                                               356   }
357                                                   357   
358   string buff0,buff1,buff2,buff3,buff4,buff5,b    358   string buff0,buff1,buff2,buff3,buff4,buff5,buff6;
359   fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>b    359   fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6;
360                                                   360   
361   while(true){                                    361   while(true){
362     fin >> buff0 >>buff1>>buff2>>buff3>>buff4>    362     fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6;
363     if(!fin.eof())                                363     if(!fin.eof())
364     {                                             364     {
365       Nve = stoi(buff3);                          365       Nve = stoi(buff3);
366     }                                             366     }
367     else                                          367     else
368     {                                             368     {
369       break;                                      369       break;
370     }                                             370     }
371   }                                               371   }
372   return Nve;                                     372   return Nve;
373 }                                                 373 }
374                                                   374 
375                                                   375