Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.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/lowenergy/src/G4hIonEffChargeSquare.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.cc (Version 10.3.p1)


  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 //                                                 26 //
 27 // -------------------------------------------     27 // -------------------------------------------------------------------
 28 //                                                 28 //
 29 // GEANT4 Class file                               29 // GEANT4 Class file
 30 //                                                 30 //
 31 //                                                 31 //
 32 // File name:     G4hIonEffChargeSquare            32 // File name:     G4hIonEffChargeSquare
 33 //                                                 33 //
 34 // Author:        V.Ivanchenko (Vladimir.Ivanc     34 // Author:        V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
 35 //                                                 35 //
 36 // Creation date: 20 July 2000                     36 // Creation date: 20 July 2000
 37 //                                                 37 //
 38 // Modifications:                                  38 // Modifications:
 39 // 20/07/2000  V.Ivanchenko First implementati     39 // 20/07/2000  V.Ivanchenko First implementation
 40 // 18/06/2001  V.Ivanchenko Continuation for e     40 // 18/06/2001  V.Ivanchenko Continuation for eff.charge (small change of y)
 41 // 08/10/2002  V.Ivanchenko The charge of the      41 // 08/10/2002  V.Ivanchenko The charge of the nucleus is used not charge of
 42 //                          DynamicParticle        42 //                          DynamicParticle
 43 //                                                 43 //
 44 // Class Description:                              44 // Class Description:
 45 //                                                 45 //
 46 // Ion effective charge model                      46 // Ion effective charge model
 47 // J.F.Ziegler and J.M.Manoyan, The stopping o     47 // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
 48 // Nucl. Inst. & Meth. in Phys. Res. B35 (1988     48 // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
 49 //                                                 49 //
 50 // Class Description: End                          50 // Class Description: End
 51 //                                                 51 //
 52 // -------------------------------------------     52 // -------------------------------------------------------------------
 53 //                                                 53 //
 54 //....oooOO0OOooo........oooOO0OOooo........oo     54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 55                                                    55 
 56 #include "G4hIonEffChargeSquare.hh"                56 #include "G4hIonEffChargeSquare.hh"
 57 #include "G4PhysicalConstants.hh"                  57 #include "G4PhysicalConstants.hh"
 58 #include "G4SystemOfUnits.hh"                      58 #include "G4SystemOfUnits.hh"
 59 #include "G4DynamicParticle.hh"                    59 #include "G4DynamicParticle.hh"
 60 #include "G4ParticleDefinition.hh"                 60 #include "G4ParticleDefinition.hh"
 61 #include "G4Material.hh"                           61 #include "G4Material.hh"
 62 #include "G4Element.hh"                            62 #include "G4Element.hh"
 63 #include "G4Exp.hh"                                63 #include "G4Exp.hh"
 64                                                    64 
 65 //....oooOO0OOooo........oooOO0OOooo........oo     65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 66                                                    66 
 67 G4hIonEffChargeSquare::G4hIonEffChargeSquare(c     67 G4hIonEffChargeSquare::G4hIonEffChargeSquare(const G4String& name)
 68   : G4VLowEnergyModel(name),                       68   : G4VLowEnergyModel(name),
 69     theHeMassAMU(4.0026)                           69     theHeMassAMU(4.0026)
 70 {;}                                                70 {;}
 71                                                    71 
 72 //....oooOO0OOooo........oooOO0OOooo........oo     72 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 73                                                    73 
 74 G4hIonEffChargeSquare::~G4hIonEffChargeSquare(     74 G4hIonEffChargeSquare::~G4hIonEffChargeSquare()
 75 {;}                                                75 {;}
 76                                                    76 
 77 //....oooOO0OOooo........oooOO0OOooo........oo     77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 78                                                    78 
 79 G4double G4hIonEffChargeSquare::TheValue(const     79 G4double G4hIonEffChargeSquare::TheValue(const G4DynamicParticle* particle,
 80                                    const G4Mat     80                                    const G4Material* material)
 81 {                                                  81 {
 82   G4double energy = particle->GetKineticEnergy     82   G4double energy = particle->GetKineticEnergy() ;
 83   G4double particleMass = particle->GetMass()      83   G4double particleMass = particle->GetMass() ;
 84   G4double charge = (particle->GetDefinition()     84   G4double charge = (particle->GetDefinition()->GetPDGCharge())/eplus ;
 85                                                    85 
 86   G4double q = IonEffChargeSquare(material,ene     86   G4double q = IonEffChargeSquare(material,energy,particleMass,charge) ;
 87                                                    87 
 88   return q ;                                       88   return q ;
 89 }                                                  89 }
 90                                                    90 
 91 //....oooOO0OOooo........oooOO0OOooo........oo     91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 92                                                    92 
 93 G4double G4hIonEffChargeSquare::TheValue(const     93 G4double G4hIonEffChargeSquare::TheValue(const G4ParticleDefinition* aParticle,
 94                                    const G4Mat     94                                    const G4Material* material,
 95            G4double kineticEnergy)                 95            G4double kineticEnergy)
 96 {                                                  96 {
 97   //  SetRateMass(aParticle) ;                     97   //  SetRateMass(aParticle) ;
 98   G4double particleMass = aParticle->GetPDGMas     98   G4double particleMass = aParticle->GetPDGMass() ;
 99   G4double charge = (aParticle->GetPDGCharge()     99   G4double charge = (aParticle->GetPDGCharge())/eplus ;
100                                                   100 
101   G4double q = IonEffChargeSquare(material,kin    101   G4double q = IonEffChargeSquare(material,kineticEnergy,particleMass,charge) ;
102                                                   102 
103   return q ;                                      103   return q ;
104 }                                                 104 }
105                                                   105 
106 //....oooOO0OOooo........oooOO0OOooo........oo    106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
107                                                   107 
108 G4double G4hIonEffChargeSquare::HighEnergyLimi    108 G4double G4hIonEffChargeSquare::HighEnergyLimit(
109             const G4ParticleDefinition* ,         109             const G4ParticleDefinition* ,
110             const G4Material* ) const             110             const G4Material* ) const
111 {                                                 111 {
112   return 1.0*TeV ;                                112   return 1.0*TeV ;
113 }                                                 113 }
114                                                   114 
115 //....oooOO0OOooo........oooOO0OOooo........oo    115 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
116                                                   116 
117 G4double G4hIonEffChargeSquare::LowEnergyLimit    117 G4double G4hIonEffChargeSquare::LowEnergyLimit(
118                  const G4ParticleDefinition* ,    118                  const G4ParticleDefinition* ,
119                  const G4Material* ) const        119                  const G4Material* ) const
120 {                                                 120 {
121   return 0.0 ;                                    121   return 0.0 ;
122 }                                                 122 }
123                                                   123 
124 //....oooOO0OOooo........oooOO0OOooo........oo    124 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
125                                                   125 
126 G4double G4hIonEffChargeSquare::HighEnergyLimi    126 G4double G4hIonEffChargeSquare::HighEnergyLimit(
127             const G4ParticleDefinition* ) cons    127             const G4ParticleDefinition* ) const
128 {                                                 128 {
129   return 1.0*TeV ;                                129   return 1.0*TeV ;
130 }                                                 130 }
131                                                   131 
132 //....oooOO0OOooo........oooOO0OOooo........oo    132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
133                                                   133 
134 G4double G4hIonEffChargeSquare::LowEnergyLimit    134 G4double G4hIonEffChargeSquare::LowEnergyLimit(
135                  const G4ParticleDefinition* )    135                  const G4ParticleDefinition* ) const
136 {                                                 136 {
137   return 0.0 ;                                    137   return 0.0 ;
138 }                                                 138 }
139                                                   139 
140 //....oooOO0OOooo........oooOO0OOooo........oo    140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
141                                                   141 
142 G4bool G4hIonEffChargeSquare::IsInCharge(const    142 G4bool G4hIonEffChargeSquare::IsInCharge(const G4DynamicParticle* ,
143                              const G4Material*    143                              const G4Material* ) const
144 {                                                 144 {
145   return true ;                                   145   return true ;
146 }                                                 146 }
147                                                   147 
148 //....oooOO0OOooo........oooOO0OOooo........oo    148 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
149                                                   149 
150 G4bool G4hIonEffChargeSquare::IsInCharge(const    150 G4bool G4hIonEffChargeSquare::IsInCharge(const G4ParticleDefinition* ,
151                                    const G4Mat    151                                    const G4Material* ) const
152 {                                                 152 {
153   return true ;                                   153   return true ;
154 }                                                 154 }
155                                                   155 
156 //....oooOO0OOooo........oooOO0OOooo........oo    156 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
157                                                   157 
158 G4double G4hIonEffChargeSquare::IonEffChargeSq    158 G4double G4hIonEffChargeSquare::IonEffChargeSquare(
159                const G4Material* material,        159                const G4Material* material,
160                G4double kineticEnergy,            160                G4double kineticEnergy,
161                G4double particleMass,             161                G4double particleMass,
162                G4double ionCharge) const          162                G4double ionCharge) const
163 {                                                 163 {
164   // The aproximation of ion effective charge     164   // The aproximation of ion effective charge from:
165   // J.F.Ziegler, J.P. Biersack, U. Littmark      165   // J.F.Ziegler, J.P. Biersack, U. Littmark
166   // The Stopping and Range of Ions in Matter,    166   // The Stopping and Range of Ions in Matter,
167   // Vol.1, Pergamon Press, 1985                  167   // Vol.1, Pergamon Press, 1985
168                                                   168 
169   // Fast ions or hadrons                         169   // Fast ions or hadrons
170   G4double reducedEnergy = kineticEnergy * pro    170   G4double reducedEnergy = kineticEnergy * proton_mass_c2/particleMass ;
171   if(reducedEnergy < 1.0*keV) reducedEnergy =     171   if(reducedEnergy < 1.0*keV) reducedEnergy = 1.0*keV;
172   if( (reducedEnergy > ionCharge * 10.0 * MeV)    172   if( (reducedEnergy > ionCharge * 10.0 * MeV) ||
173       (ionCharge < 1.5) ) return ionCharge*ion    173       (ionCharge < 1.5) ) return ionCharge*ionCharge ;
174                                                   174 
175   static const G4double vFermi[92] = {            175   static const G4double vFermi[92] = {
176     1.0309,  0.15976, 0.59782, 1.0781,  1.0486    176     1.0309,  0.15976, 0.59782, 1.0781,  1.0486,  1.0,     1.058,   0.93942, 0.74562, 0.3424,
177     0.45259, 0.71074, 0.90519, 0.97411, 0.9718    177     0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712,
178     0.81707, 0.9943,  1.1423,  1.2381,  1.1222    178     0.81707, 0.9943,  1.1423,  1.2381,  1.1222,  0.92705, 1.0047,  1.2,     1.0661,  0.97411,
179     0.84912, 0.95,    1.0903,  1.0429,  0.4971    179     0.84912, 0.95,    1.0903,  1.0429,  0.49715, 0.37755, 0.35211, 0.57801, 0.77773, 1.0207,
180     1.029,   1.2542,  1.122,   1.1241,  1.0882    180     1.029,   1.2542,  1.122,   1.1241,  1.0882,  1.2709,  1.2542,  0.90094, 0.74093, 0.86054,
181     0.93155, 1.0047,  0.55379, 0.43289, 0.3263    181     0.93155, 1.0047,  0.55379, 0.43289, 0.32636, 0.5131,  0.695,   0.72591, 0.71202, 0.67413,
182     0.71418, 0.71453, 0.5911,  0.70263, 0.6804    182     0.71418, 0.71453, 0.5911,  0.70263, 0.68049, 0.68203, 0.68121, 0.68532, 0.68715, 0.61884,
183     0.71801, 0.83048, 1.1222,  1.2381,  1.045,    183     0.71801, 0.83048, 1.1222,  1.2381,  1.045,   1.0733,  1.0953,  1.2381,  1.2879,  0.78654,
184     0.66401, 0.84912, 0.88433, 0.80746, 0.4335    184     0.66401, 0.84912, 0.88433, 0.80746, 0.43357, 0.41923, 0.43638, 0.51464, 0.73087, 0.81065,
185     1.9578,  1.0257} ;                            185     1.9578,  1.0257} ;
186                                                   186 
                                                   >> 187   static const G4double lFactor[92] = {
                                                   >> 188     1.0,  1.0,  1.1,  1.06, 1.01, 1.03, 1.04, 0.99, 0.95, 0.9,
                                                   >> 189     0.82, 0.81, 0.83, 0.88, 1.0,  0.95, 0.97, 0.99, 0.98, 0.97,
                                                   >> 190     0.98, 0.97, 0.96, 0.93, 0.91, 0.9,  0.88, 0.9,  0.9,  0.9,
                                                   >> 191     0.9,  0.85, 0.9,  0.9,  0.91, 0.92, 0.9,  0.9,  0.9,  0.9,
                                                   >> 192     0.9,  0.88, 0.9,  0.88, 0.88, 0.9,  0.9,  0.88, 0.9,  0.9,
                                                   >> 193     0.9,  0.9,  0.96, 1.2,  0.9,  0.88, 0.88, 0.85, 0.9,  0.9,
                                                   >> 194     0.92, 0.95, 0.99, 1.03, 1.05, 1.07, 1.08, 1.1,  1.08, 1.08,
                                                   >> 195     1.08, 1.08, 1.09, 1.09, 1.1,  1.11, 1.12, 1.13, 1.14, 1.15,
                                                   >> 196     1.17, 1.2,  1.18, 1.17, 1.17, 1.16, 1.16, 1.16, 1.16, 1.16,
                                                   >> 197     1.16, 1.16} ;
                                                   >> 198 
187   static const G4double c[6] = {0.2865,  0.126    199   static const G4double c[6] = {0.2865,  0.1266, -0.001429,
188                           0.02402,-0.01135, 0.    200                           0.02402,-0.01135, 0.001475} ;
189                                                   201 
190   // get elements in the actual material,         202   // get elements in the actual material,
191   const G4ElementVector* theElementVector = ma    203   const G4ElementVector* theElementVector = material->GetElementVector() ;
192   const G4double* theAtomicNumDensityVector =     204   const G4double* theAtomicNumDensityVector =
193                          material->GetAtomicNu    205                          material->GetAtomicNumDensityVector() ;
194   const G4int NumberOfElements = (G4int)materi << 206   const G4int NumberOfElements = material->GetNumberOfElements() ;
195                                                   207 
196   //  loop for the elements in the material       208   //  loop for the elements in the material
197   //  to find out average values Z, vF, lF        209   //  to find out average values Z, vF, lF
198   G4double z = 0.0, vF = 0.0, norm = 0.0 ;     << 210   G4double z = 0.0, vF = 0.0, lF = 0.0, norm = 0.0 ;
199                                                   211 
200   if( 1 == NumberOfElements ) {                   212   if( 1 == NumberOfElements ) {
201     z = material->GetZ() ;                        213     z = material->GetZ() ;
202     G4int iz = G4int(z) - 1 ;                     214     G4int iz = G4int(z) - 1 ;
203     if(iz < 0) iz = 0 ;                           215     if(iz < 0) iz = 0 ;
204     else if(iz > 91) iz = 91 ;                    216     else if(iz > 91) iz = 91 ;
205     vF   = vFermi[iz] ;                           217     vF   = vFermi[iz] ;
                                                   >> 218     lF   = lFactor[iz] ;
206                                                   219 
207   } else {                                        220   } else {
208     for (G4int iel=0; iel<NumberOfElements; ie    221     for (G4int iel=0; iel<NumberOfElements; iel++)
209       {                                           222       {
210         const G4Element* element = (*theElemen    223         const G4Element* element = (*theElementVector)[iel] ;
211         G4double z2 = element->GetZ() ;           224         G4double z2 = element->GetZ() ;
212         const G4double weight = theAtomicNumDe    225         const G4double weight = theAtomicNumDensityVector[iel] ;
213         norm += weight ;                          226         norm += weight ;
214         z    += z2 * weight ;                     227         z    += z2 * weight ;
215         G4int iz = G4int(z2) - 1 ;                228         G4int iz = G4int(z2) - 1 ;
216         if(iz < 0) iz = 0 ;                       229         if(iz < 0) iz = 0 ;
217         else if(iz > 91) iz =91 ;                 230         else if(iz > 91) iz =91 ;
218         vF   += vFermi[iz] * weight ;             231         vF   += vFermi[iz] * weight ;
                                                   >> 232         lF   += lFactor[iz] * weight ;
219       }                                           233       }
220     if (norm > 0.0) {                          << 234     z  /= norm ;
221       z  /= norm ;                             << 235     vF /= norm ;
222       vF /= norm ;                             << 236     lF /= norm ;
223     }                                          << 
224   }                                               237   }
225                                                   238 
226   // Helium ion case                              239   // Helium ion case
227   if( ionCharge < 2.5 ) {                         240   if( ionCharge < 2.5 ) {
228                                                   241 
229     G4double e = std::log(std::max(1.0, kineti    242     G4double e = std::log(std::max(1.0, kineticEnergy / (keV*theHeMassAMU) )) ;
230     G4double x = c[0] ;                           243     G4double x = c[0] ;
231     G4double y = 1.0 ;                            244     G4double y = 1.0 ;
232     for (G4int i=1; i<6; i++) {                   245     for (G4int i=1; i<6; i++) {
233       y *= e ;                                    246       y *= e ;
234       x += y * c[i] ;                             247       x += y * c[i] ;
235     }                                             248     }
236     G4double q = 7.6 -  e ;                       249     G4double q = 7.6 -  e ;
237     q = 1.0 + ( 0.007 + 0.00005 * z ) * G4Exp(    250     q = 1.0 + ( 0.007 + 0.00005 * z ) * G4Exp( -q*q ) ;
238     return  4.0 * q * q * (1.0 - G4Exp(-x)) ;     251     return  4.0 * q * q * (1.0 - G4Exp(-x)) ;
239                                                   252 
240     // Heavy ion case                             253     // Heavy ion case
241   } else {                                        254   } else {
242                                                   255 
243     // v1 is ion velocity in vF unit              256     // v1 is ion velocity in vF unit
244     G4double v1{0.0}, v2{0.0};                 << 257     G4double v1 = std::sqrt( reducedEnergy / (25.0 * keV) )/ vF ;
245     if (vF > 0.0) {                            << 
246       v1 = std::sqrt( reducedEnergy / (25.0 *  << 
247       v2 = 1.0/ (vF*vF);                       << 
248     }                                          << 
249     G4double y ;                                  258     G4double y ;
250     G4double z13 = std::pow(ionCharge, 0.3333)    259     G4double z13 = std::pow(ionCharge, 0.3333) ;
251                                                   260 
252     // Faster than Fermi velocity                 261     // Faster than Fermi velocity
253     if ( v1 > 1.0 ) {                             262     if ( v1 > 1.0 ) {
254       y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) /     263       y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) / (z13*z13) ;
255                                                   264 
256       // Slower than Fermi velocity               265       // Slower than Fermi velocity
257     } else {                                      266     } else {
258       y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 +    267       y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 + v1*v1*v1*v1/15.0) / (z13*z13) ;
259     }                                             268     }
260                                                   269 
261     G4double y3 = std::pow(y, 0.3) ;              270     G4double y3 = std::pow(y, 0.3) ;
262     G4double q = 1.0 - G4Exp( 0.803*y3 - 1.316    271     G4double q = 1.0 - G4Exp( 0.803*y3 - 1.3167*y3*y3 -
263                             0.38157*y - 0.0089    272                             0.38157*y - 0.008983*y*y ) ;
264     if( q < 0.0 ) q = 0.0 ;                       273     if( q < 0.0 ) q = 0.0 ;
265                                                   274 
266     G4double sLocal = 7.6 -  std::log(std::max    275     G4double sLocal = 7.6 -  std::log(std::max(1.0, reducedEnergy/keV)) ;
267     sLocal = 1.0 + ( 0.18 + 0.0015 * z ) * G4E    276     sLocal = 1.0 + ( 0.18 + 0.0015 * z ) * G4Exp( -sLocal*sLocal )/ (ionCharge*ionCharge) ;
268                                                   277 
269     // Screen length according to                 278     // Screen length according to
270     // J.F.Ziegler and J.M.Manoyan, The stoppi    279     // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
271     // Nucl. Inst. & Meth. in Phys. Res. B35 (    280     // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
272                                                   281 
273     G4double lambda = 10.0 * vF * std::pow(1.0    282     G4double lambda = 10.0 * vF * std::pow(1.0-q, 0.6667) / (z13 * (6.0 + q)) ;
274     G4double qeff   = ionCharge * sLocal *        283     G4double qeff   = ionCharge * sLocal *
275       ( q + 0.5*(1.0-q) * std::log(1.0 + lambd << 284       ( q + 0.5*(1.0-q) * std::log(1.0 + lambda*lambda) / (vF*vF) ) ;
276     if( 0.1 > qeff ) qeff = 0.1 ;                 285     if( 0.1 > qeff ) qeff = 0.1 ;
277     return qeff*qeff ;                            286     return qeff*qeff ;
278   }                                               287   }
279 }                                                 288 }
280                                                   289