Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/utils/src/G4ionEffectiveCharge.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/utils/src/G4ionEffectiveCharge.cc (Version 11.3.0) and /processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc (Version 4.1.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 // -------------------------------------------    
 28 //                                                
 29 // GEANT4 Class file                              
 30 //                                                
 31 //                                                
 32 // File name:     G4ionEffectiveCharge            
 33 //                                                
 34 // Author:        Vladimir Ivanchenko             
 35 //                                                
 36 // Creation date: 07.05.2002                      
 37 //                                                
 38 // Modifications:                                 
 39 // 12.09.2004 Set low energy limit to 1 keV (V    
 40 // 25.01.2005 Add protection - min Charge 0.1     
 41 // 28.04.2006 Set upper energy limit to 50 MeV    
 42 // 23.05.2006 Set upper energy limit to Z*10 M    
 43 // 15.08.2006 Add protection for not defined m    
 44 // 27-09-2007 Use Fermi energy from material,     
 45 //                                                
 46                                                   
 47 // -------------------------------------------    
 48 //                                                
 49 //....oooOO0OOooo........oooOO0OOooo........oo    
 50 //....oooOO0OOooo........oooOO0OOooo........oo    
 51                                                   
 52 #include "G4ionEffectiveCharge.hh"                
 53 #include "G4PhysicalConstants.hh"                 
 54 #include "G4SystemOfUnits.hh"                     
 55 #include "G4UnitsTable.hh"                        
 56 #include "G4Material.hh"                          
 57 #include "G4NistManager.hh"                       
 58 #include "G4Log.hh"                               
 59 #include "G4Exp.hh"                               
 60 #include "G4Pow.hh"                               
 61                                                   
 62 //....oooOO0OOooo........oooOO0OOooo........oo    
 63                                                   
 64 G4ionEffectiveCharge::G4ionEffectiveCharge()      
 65 {                                                 
 66   chargeCorrection = 1.0;                         
 67   energyHighLimit  = 20.0*CLHEP::MeV;             
 68   energyLowLimit   = 1.0*CLHEP::keV;              
 69   energyBohr       = 25.*CLHEP::keV;              
 70   massFactor       = CLHEP::amu_c2/(CLHEP::pro    
 71   minCharge        = 1.0;                         
 72   lastKinEnergy    = 0.0;                         
 73   effCharge        = CLHEP::eplus;                
 74   inveplus         = 1.0/CLHEP::eplus;            
 75   g4calc = G4Pow::GetInstance();                  
 76 }                                                 
 77                                                   
 78 //....oooOO0OOooo........oooOO0OOooo........oo    
 79                                                   
 80 G4double G4ionEffectiveCharge::EffectiveCharge    
 81                                                   
 82                                                   
 83 {                                                 
 84   if(p == lastPart && material == lastMat && k    
 85     return effCharge;                             
 86                                                   
 87   lastPart      = p;                              
 88   lastMat       = material;                       
 89   lastKinEnergy = kineticEnergy;                  
 90                                                   
 91   G4double mass = p->GetPDGMass();                
 92   effCharge = p->GetPDGCharge();                  
 93   G4int Zi = G4lrint(effCharge*inveplus);         
 94   chargeCorrection = 1.0;                         
 95   if(Zi <= 1) { return effCharge; }               
 96                                                   
 97   // The aproximation of ion effective charge     
 98   // J.F.Ziegler, J.P. Biersack, U. Littmark      
 99   // The Stopping and Range of Ions in Matter,    
100   // Vol.1, Pergamon Press, 1985                  
101   // Fast ions or hadrons                         
102   G4double reducedEnergy = kineticEnergy * CLH    
103                                                   
104   //G4cout << "e= " << reducedEnergy << " Zi=     
105   //<< material->GetName() << G4endl;             
106                                                   
107   if(reducedEnergy > effCharge*energyHighLimit    
108     return effCharge;                             
109   }                                               
110   G4double z = material->GetIonisation()->GetZ    
111   reducedEnergy = std::max(reducedEnergy,energ    
112                                                   
113   // Helium ion case                              
114   if( Zi <= 2 ) {                                 
115                                                   
116     static const G4double c[6] =                  
117       {0.2865,0.1266,-0.001429,0.02402,-0.0113    
118                                                   
119     G4double Q = std::max(0.0,G4Log(reducedEne    
120     G4double x = c[0];                            
121     G4double y = 1.0;                             
122     for (G4int i=1; i<6; ++i) {                   
123       y *= Q;                                     
124       x += y * c[i] ;                             
125     }                                             
126     G4double ex = (x < 0.2) ? x * (1 - 0.5*x)     
127                                                   
128     G4double tq = 7.6 - Q;                        
129     G4double tq2= tq*tq;                          
130     G4double tt = ( 0.007 + 0.00005 * z );        
131     if(tq2 < 0.2) { tt *= (1.0 - tq2 + 0.5*tq2    
132     else          { tt *= G4Exp(-tq2); }          
133                                                   
134     effCharge *= (1.0 + tt) * std::sqrt(ex);      
135                                                   
136     // Heavy ion case                             
137   } else {                                        
138                                                   
139     G4double zi13 = g4calc->Z13(Zi);              
140     G4double zi23 = zi13*zi13;                    
141                                                   
142     // v1 is ion velocity in vF unit              
143     G4double eF   = material->GetIonisation()-    
144     G4double v1sq = reducedEnergy/eF;             
145     G4double vFsq = eF/energyBohr;                
146     G4double vF = std::sqrt(vFsq);                
147                                                   
148     G4double y = ( v1sq > 1.0 )                   
149       // Faster than Fermi velocity               
150       ? vF * std::sqrt(v1sq) * ( 1.0 + 0.2/v1s    
151       // Slower than Fermi velocity               
152       : 0.692308 * vF * (1.0 + 0.666666*v1sq +    
153                                                   
154     G4double y3 = G4Exp(0.3*G4Log(y));            
155     // G4cout<<"y= "<<y<<" y3= "<<y3<<" v1= "<    
156     G4double q = std::max(1.0 - G4Exp( 0.803*y    
157                                      - 0.00898    
158                                                   
159     // compute charge correction                  
160     G4double tq = 7.6 - G4Log(reducedEnergy/CL    
161     G4double tq2= tq*tq;                          
162     G4double sq = 1.0 + ( 0.18 + 0.0015 * z )*    
163     //    G4cout << "sq= " << sq << G4endl;       
164                                                   
165     // Screen length according to                 
166     // J.F.Ziegler and J.M.Manoyan, The stoppi    
167     // Nucl. Inst. & Meth. in Phys. Res. B35 (    
168                                                   
169     G4double lambda = 10.0 * vF *g4calc->A23(1    
170     G4double lambda2 = lambda*lambda;             
171     G4double xx = (0.5/q - 0.5)*G4Log(1.0 + la    
172                                                   
173     effCharge *= q;                               
174     chargeCorrection = sq * (1.0 + xx);           
175   }                                               
176   //  G4cout << "G4ionEffectiveCharge: charge=    
177   //         << " chargeCor= " << chargeCorrec    
178   //           << " e(MeV)= " << kineticEnergy    
179   return effCharge;                               
180 }                                                 
181                                                   
182 //....oooOO0OOooo........oooOO0OOooo........oo    
183