Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/standard/src/G4ICRU73QOModel.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/standard/src/G4ICRU73QOModel.cc (Version 11.3.0) and /processes/electromagnetic/standard/src/G4ICRU73QOModel.cc (Version 5.1)


  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:   G4ICRU73QOModel                   
 33 //                                                
 34 // Author:        Alexander Bagulya               
 35 //                                                
 36 // Creation date: 21.05.2010                      
 37 //                                                
 38 // Modifications:                                 
 39 //                                                
 40 //                                                
 41 // -------------------------------------------    
 42 //                                                
 43 //....oooOO0OOooo........oooOO0OOooo........oo    
 44 //....oooOO0OOooo........oooOO0OOooo........oo    
 45                                                   
 46 #include "G4ICRU73QOModel.hh"                     
 47 #include "G4PhysicalConstants.hh"                 
 48 #include "G4SystemOfUnits.hh"                     
 49 #include "Randomize.hh"                           
 50 #include "G4Electron.hh"                          
 51 #include "G4ParticleChangeForLoss.hh"             
 52 #include "G4LossTableManager.hh"                  
 53 #include "G4AntiProton.hh"                        
 54 #include "G4DeltaAngle.hh"                        
 55 #include "G4Log.hh"                               
 56 #include "G4Exp.hh"                               
 57                                                   
 58 //....oooOO0OOooo........oooOO0OOooo........oo    
 59                                                   
 60 using namespace std;                              
 61                                                   
 62 //....oooOO0OOooo........oooOO0OOooo........oo    
 63                                                   
 64 G4ICRU73QOModel::G4ICRU73QOModel(const G4Parti    
 65   : G4VEmModel(nam),                              
 66     particle(nullptr),                            
 67     isInitialised(false)                          
 68 {                                                 
 69   mass = charge = chargeSquare = massRate = ra    
 70   if(p) { SetParticle(p); }                       
 71   SetHighEnergyLimit(10.0*MeV);                   
 72                                                   
 73   lowestKinEnergy  = 5.0*keV;                     
 74                                                   
 75   sizeL0 = 67;                                    
 76   sizeL1 = 22;                                    
 77   sizeL2 = 14;                                    
 78                                                   
 79   theElectron = G4Electron::Electron();           
 80                                                   
 81   for (G4int i = 0; i < 100; ++i)                 
 82     {                                             
 83       indexZ[i] = -1;                             
 84     }                                             
 85   for(G4int i = 0; i < NQOELEM; ++i)              
 86     {                                             
 87       if(ZElementAvailable[i] > 0) {              
 88         indexZ[ZElementAvailable[i]] = i;         
 89       }                                           
 90     }                                             
 91   fParticleChange = nullptr;                      
 92   denEffData = nullptr;                           
 93 }                                                 
 94                                                   
 95 //....oooOO0OOooo........oooOO0OOooo........oo    
 96                                                   
 97 void G4ICRU73QOModel::Initialise(const G4Parti    
 98                                  const G4DataV    
 99 {                                                 
100   if(p != particle) SetParticle(p);               
101                                                   
102   // always false before the run                  
103   SetDeexcitationFlag(false);                     
104                                                   
105   if(!isInitialised) {                            
106     isInitialised = true;                         
107                                                   
108     if(UseAngularGeneratorFlag() && !GetAngula    
109       SetAngularDistribution(new G4DeltaAngle(    
110     }                                             
111                                                   
112     G4String pname = particle->GetParticleName    
113     fParticleChange = GetParticleChangeForLoss    
114     const G4MaterialTable* mtab = G4Material::    
115     denEffData = (*mtab)[0]->GetIonisation()->    
116   }                                               
117 }                                                 
118                                                   
119 //....oooOO0OOooo........oooOO0OOooo........oo    
120                                                   
121 G4double G4ICRU73QOModel::ComputeCrossSectionP    
122                                            con    
123                                                   
124                                                   
125                                                   
126 {                                                 
127   G4double cross = 0.0;                           
128   const G4double tmax      = MaxSecondaryEnerg    
129   const G4double maxEnergy = std::min(tmax, ma    
130   const G4double cutEnergy = std::max(cut, low    
131   if(cutEnergy < maxEnergy) {                     
132                                                   
133     const G4double energy  = kineticEnergy + m    
134     const G4double energy2 = energy*energy;       
135     const G4double beta2   = kineticEnergy*(ki    
136     cross = (maxEnergy - cutEnergy)/(cutEnergy    
137       - beta2*G4Log(maxEnergy/cutEnergy)/tmax;    
138                                                   
139     cross *= CLHEP::twopi_mc2_rcl2*chargeSquar    
140   }                                               
141                                                   
142   return cross;                                   
143 }                                                 
144                                                   
145 //....oooOO0OOooo........oooOO0OOooo........oo    
146                                                   
147 G4double G4ICRU73QOModel::ComputeCrossSectionP    
148                                            con    
149                                                   
150                                                   
151                                                   
152                                                   
153 {                                                 
154   G4double cross = Z*ComputeCrossSectionPerEle    
155                                          (p,ki    
156   return cross;                                   
157 }                                                 
158                                                   
159 //....oooOO0OOooo........oooOO0OOooo........oo    
160                                                   
161 G4double G4ICRU73QOModel::CrossSectionPerVolum    
162                                            con    
163                                            con    
164                                                   
165                                                   
166                                                   
167 {                                                 
168   G4double eDensity = material->GetElectronDen    
169   G4double cross = eDensity*ComputeCrossSectio    
170                                          (p,ki    
171   return cross;                                   
172 }                                                 
173                                                   
174 //....oooOO0OOooo........oooOO0OOooo........oo    
175                                                   
176 G4double G4ICRU73QOModel::ComputeDEDXPerVolume    
177                                                   
178                                                   
179                                                   
180 {                                                 
181   SetParticle(p);                                 
182   const G4double tmax  = MaxSecondaryEnergy(p,    
183   const G4double tkin  = kineticEnergy/massRat    
184   const G4double cutEnergy = std::max(cut, low    
185   G4double dedx  = 0.0;                           
186   if(tkin > lowestKinEnergy) { dedx = DEDX(mat    
187   else { dedx = DEDX(material, lowestKinEnergy    
188                                                   
189   if (cutEnergy < tmax) {                         
190                                                   
191     const G4double tau = kineticEnergy/mass;      
192     const G4double x = cutEnergy/tmax;            
193     dedx += (G4Log(x)*(tau + 1.)*(tau + 1.)/(t    
194       CLHEP::twopi_mc2_rcl2 *chargeSquare * ma    
195   }                                               
196   dedx = std::max(dedx, 0.0);                     
197   return dedx;                                    
198 }                                                 
199                                                   
200 //....oooOO0OOooo........oooOO0OOooo........oo    
201                                                   
202 G4double G4ICRU73QOModel::DEDX(const G4Materia    
203                                G4double kineti    
204 {                                                 
205   G4double eloss = 0.0;                           
206   const std::size_t numberOfElements = materia    
207   const G4double* theAtomicNumDensityVector =     
208                                  material->Get    
209                                                   
210   // Bragg's rule calculation                     
211   const G4ElementVector* theElementVector =       
212                            material->GetElemen    
213                                                   
214   //  loop for the elements in the material       
215   for (std::size_t i=0; i<numberOfElements; ++    
216     {                                             
217       const G4Element* element = (*theElementV    
218       eloss += DEDXPerElement(element->GetZasI    
219         * theAtomicNumDensityVector[i] * eleme    
220     }                                             
221   return eloss;                                   
222 }                                                 
223                                                   
224 //....oooOO0OOooo........oooOO0OOooo........oo    
225                                                   
226 G4double G4ICRU73QOModel::DEDXPerElement(G4int    
227                                          G4dou    
228 {                                                 
229   G4int Z = std::min(AtomicNumber, 97);           
230   G4int nbOfShells = std::max(GetNumberOfShell    
231                                                   
232   G4double v = CLHEP::c_light * std::sqrt( 2.0    
233                                                   
234   G4double fBetheVelocity = CLHEP::fine_struct    
235                                                   
236   G4double tau   = kineticEnergy/proton_mass_c    
237   G4double gam   = tau + 1.0;                     
238   G4double bg2   = tau * (tau+2.0);               
239   G4double beta2 = bg2/(gam*gam);                 
240                                                   
241   G4double l0Term = 0, l1Term = 0, l2Term = 0;    
242                                                   
243   for (G4int nos = 0; nos < nbOfShells; ++nos)    
244                                                   
245     G4double NormalizedEnergy = (2.0*CLHEP::el    
246       GetShellEnergy(Z,nos);                      
247                                                   
248     G4double shStrength = GetShellStrength(Z,n    
249                                                   
250     G4double l0 = GetL0(NormalizedEnergy);        
251     l0Term += shStrength  * l0;                   
252                                                   
253     G4double l1 = GetL1(NormalizedEnergy);        
254     l1Term += shStrength * l1;                    
255                                                   
256     G4double l2 = GetL2(NormalizedEnergy);        
257     l2Term += shStrength * l2;                    
258                                                   
259   }                                               
260   G4double dedx  = 2*CLHEP::twopi_mc2_rcl2*cha    
261     (l0Term + charge*fBetheVelocity*l1Term        
262      + chargeSquare*fBetheVelocity*fBetheVeloc    
263   return dedx;                                    
264 }                                                 
265                                                   
266                                                   
267 //....oooOO0OOooo........oooOO0OOooo........oo    
268                                                   
269 G4double G4ICRU73QOModel::GetOscillatorEnergy(    
270                                                   
271 {                                                 
272   G4int idx = denEffData->GetElementIndex(Z, k    
273   if(idx == -1) { idx = denEffData->GetElement    
274   G4double PlasmaEnergy = denEffData->GetPlasm    
275                                                   
276   G4double PlasmaEnergy2 = PlasmaEnergy * Plas    
277                                                   
278   G4double plasmonTerm = 0.66667                  
279     * G4AtomicShells::GetNumberOfElectrons(Z,n    
280     * PlasmaEnergy2 / (Z*Z) ;                     
281                                                   
282   static const G4double exphalf = G4Exp(0.5);     
283   G4double ionTerm = exphalf *                    
284     (G4AtomicShells::GetBindingEnergy(Z,nbOfTh    
285   G4double ionTerm2 = ionTerm*ionTerm ;           
286                                                   
287   G4double oscShellEnergy = std::sqrt( ionTerm    
288                                                   
289   return  oscShellEnergy;                         
290 }                                                 
291                                                   
292 //....oooOO0OOooo........oooOO0OOooo........oo    
293                                                   
294 G4int G4ICRU73QOModel::GetNumberOfShells(G4int    
295 {                                                 
296   G4int nShell = 0;                               
297                                                   
298   if(indexZ[Z] >= 0) {                            
299     nShell = nbofShellsForElement[indexZ[Z]];     
300   } else {                                        
301     nShell = G4AtomicShells::GetNumberOfShells    
302   }                                               
303   return nShell;                                  
304 }                                                 
305                                                   
306 //....oooOO0OOooo........oooOO0OOooo........oo    
307                                                   
308 G4double G4ICRU73QOModel::GetShellEnergy(G4int    
309 {                                                 
310   G4double shellEnergy = 0.;                      
311                                                   
312   G4int idx = indexZ[Z];                          
313                                                   
314   if(idx >= 0) {                                  
315     shellEnergy = ShellEnergy[startElemIndex[i    
316   } else {                                        
317     shellEnergy = GetOscillatorEnergy(Z, nbOfT    
318   }                                               
319                                                   
320   return  shellEnergy;                            
321 }                                                 
322                                                   
323 //....oooOO0OOooo........oooOO0OOooo........oo    
324                                                   
325 G4double G4ICRU73QOModel::GetShellStrength(G4i    
326 {                                                 
327   G4double shellStrength = 0.;                    
328                                                   
329   G4int idx = indexZ[Z];                          
330                                                   
331   if(idx >= 0) {                                  
332     shellStrength = SubShellOccupation[startEl    
333   } else {                                        
334     shellStrength = G4double(G4AtomicShells::G    
335   }                                               
336                                                   
337   return shellStrength;                           
338 }                                                 
339                                                   
340 //....oooOO0OOooo........oooOO0OOooo........oo    
341                                                   
342 G4double G4ICRU73QOModel::GetL0(G4double normE    
343 {                                                 
344   G4int n;                                        
345                                                   
346   for(n = 0; n < sizeL0; n++) {                   
347     if( normEnergy < L0[n][0] ) break;            
348   }                                               
349   if(0 == n) { n = 1; }                           
350   if(n >= sizeL0) { n = sizeL0 - 1; }             
351                                                   
352   G4double l0    = L0[n][1];                      
353   G4double l0p   = L0[n-1][1];                    
354   G4double bethe = l0p + (l0 - l0p) * ( normEn    
355                   (L0[n][0] - L0[n-1][0]);        
356                                                   
357   return bethe ;                                  
358 }                                                 
359                                                   
360 //....oooOO0OOooo........oooOO0OOooo........oo    
361                                                   
362 G4double G4ICRU73QOModel::GetL1(G4double normE    
363 {                                                 
364   G4int n;                                        
365                                                   
366   for(n = 0; n < sizeL1; n++) {                   
367     if( normEnergy < L1[n][0] ) break;            
368   }                                               
369   if(0 == n) n = 1 ;                              
370   if(n >= sizeL1) n = sizeL1 - 1 ;                
371                                                   
372   G4double l1    = L1[n][1];                      
373   G4double l1p   = L1[n-1][1];                    
374   G4double barkas= l1p + (l1 - l1p) * ( normEn    
375                   (L1[n][0] - L1[n-1][0]);        
376                                                   
377   return barkas;                                  
378 }                                                 
379                                                   
380 //....oooOO0OOooo........oooOO0OOooo........oo    
381                                                   
382 G4double G4ICRU73QOModel::GetL2(G4double normE    
383 {                                                 
384   G4int n;                                        
385   for(n = 0; n < sizeL2; n++) {                   
386     if( normEnergy < L2[n][0] ) break;            
387   }                                               
388   if(0 == n) n = 1 ;                              
389   if(n >= sizeL2) n = sizeL2 - 1 ;                
390                                                   
391   G4double l2    = L2[n][1];                      
392   G4double l2p   = L2[n-1][1];                    
393   G4double bloch = l2p + (l2 - l2p) * ( normEn    
394                   (L2[n][0] - L2[n-1][0]);        
395                                                   
396   return bloch;                                   
397 }                                                 
398                                                   
399 //....oooOO0OOooo........oooOO0OOooo........oo    
400                                                   
401 void G4ICRU73QOModel::CorrectionsAlongStep(con    
402                                            con    
403                                            con    
404                                            G4d    
405 {}                                                
406                                                   
407 //....oooOO0OOooo........oooOO0OOooo........oo    
408                                                   
409 void G4ICRU73QOModel::SampleSecondaries(std::v    
410                                         const     
411                                         const     
412                                         G4doub    
413                                         G4doub    
414 {                                                 
415   const G4double tmax = MaxSecondaryKinEnergy(    
416   const G4double xmax = std::min(tmax, maxEner    
417   const G4double xmin = std::max(minEnergy, lo    
418   if(xmin >= xmax) { return; }                    
419                                                   
420   G4double kineticEnergy = dp->GetKineticEnerg    
421   const G4double energy  = kineticEnergy + mas    
422   const G4double energy2 = energy*energy;         
423   const G4double beta2   = kineticEnergy*(kine    
424   G4double grej    = 1.0;                         
425   G4double deltaKinEnergy, f;                     
426                                                   
427   G4ThreeVector direction = dp->GetMomentumDir    
428                                                   
429   // sampling follows ...                         
430   do {                                            
431     G4double x = G4UniformRand();                 
432     deltaKinEnergy = xmin*xmax/(xmin*(1.0 - x)    
433                                                   
434     f = 1.0 - beta2*deltaKinEnergy/tmax;          
435                                                   
436     if(f > grej) {                                
437         G4cout << "G4ICRU73QOModel::SampleSeco    
438                << "Majorant " << grej << " < "    
439                << f << " for e= " << deltaKinE    
440                << G4endl;                         
441     }                                             
442                                                   
443     // Loop checking, 03-Aug-2015, Vladimir Iv    
444   } while( grej*G4UniformRand() >= f );           
445                                                   
446   G4ThreeVector deltaDirection;                   
447                                                   
448   if(UseAngularGeneratorFlag()) {                 
449     const G4Material* mat =  couple->GetMateri    
450     G4int Z = SelectRandomAtomNumber(mat);        
451                                                   
452     deltaDirection =                              
453       GetAngularDistribution()->SampleDirectio    
454                                                   
455   } else {                                        
456                                                   
457     G4double deltaMomentum =                      
458            sqrt(deltaKinEnergy * (deltaKinEner    
459     G4double totMomentum = energy*sqrt(beta2);    
460     G4double cost = deltaKinEnergy * (energy +    
461                                    (deltaMomen    
462     if(cost > 1.0) { cost = 1.0; }                
463     G4double sint = sqrt((1.0 - cost)*(1.0 + c    
464                                                   
465     G4double phi = twopi * G4UniformRand() ;      
466                                                   
467     deltaDirection.set(sint*cos(phi),sint*sin(    
468     deltaDirection.rotateUz(direction);           
469   }                                               
470   // create G4DynamicParticle object for delta    
471   auto delta = new G4DynamicParticle(theElectr    
472                                                   
473   // Change kinematics of primary particle        
474   kineticEnergy -= deltaKinEnergy;                
475   G4ThreeVector finalP = dp->GetMomentum() - d    
476   finalP               = finalP.unit();           
477                                                   
478   fParticleChange->SetProposedKineticEnergy(ki    
479   fParticleChange->SetProposedMomentumDirectio    
480                                                   
481   vdp->push_back(delta);                          
482 }                                                 
483                                                   
484 //....oooOO0OOooo........oooOO0OOooo........oo    
485                                                   
486 G4double G4ICRU73QOModel::MaxSecondaryEnergy(c    
487                                              G    
488 {                                                 
489   if(pd != particle) { SetParticle(pd); }         
490   G4double tau  = kinEnergy/mass;                 
491   G4double tmax = 2.0*electron_mass_c2*tau*(ta    
492                   (1. + 2.0*(tau + 1.)*ratio +    
493   return tmax;                                    
494 }                                                 
495                                                   
496 //....oooOO0OOooo........oooOO0OOooo........oo    
497                                                   
498 const G4int G4ICRU73QOModel::ZElementAvailable    
499   {1,2,4,6,7,8,10,13,14,-18,                      
500    22,26,28,29,32,36,42,47,                       
501    50,54,73,74,78,79,82,92};                      
502                                                   
503 const G4int G4ICRU73QOModel::nbofShellsForElem    
504   {1,1,2,3,3,3,3,4,5,4,                           
505    5,5,5,5,6,4,6,6,                               
506    7,6,6,8,7,7,9,9};                              
507                                                   
508 const G4int G4ICRU73QOModel::startElemIndex[NQ    
509   {0,1,2,4,7,10,13,16,20,25,                      
510    29,34,39,44,49,55,59,65,                       
511    71,78,84,90,98,105,112,121};                   
512                                                   
513 //....oooOO0OOooo........oooOO0OOooo........oo    
514                                                   
515 // SubShellOccupation = Z * ShellStrength         
516 const G4double G4ICRU73QOModel::SubShellOccupa    
517   {                                               
518     1.000, // H 0                                 
519     2.000, // He 1                                
520     1.930, 2.070, // Be 2-3                       
521     1.992, 1.841, 2.167, // C 4-6                 
522     1.741, 1.680, 3.579, // N 7-9                 
523     1.802, 1.849, 4.349, // O 10-12               
524     1.788, 2.028, 6.184, // Ne 13-15              
525     1.623, 2.147, 6.259, 2.971, // Al 16-19       
526     1.631, 2.094, 6.588, 2.041, 1.646, // Si 2    
527     1.535, 8.655, 1.706, 6.104, // Ar 25-28       
528     1.581, 8.358, 8.183, 2.000, 1.878, // Ti 2    
529     1.516, 8.325, 8.461, 6.579, 1.119, // Fe 3    
530     1.422, 7.81, 8.385, 8.216, 2.167, // Ni 39    
531     1.458, 8.049, 8.79, 9.695, 1.008, // Cu 44    
532     1.442, 7.791, 7.837, 10.122, 2.463, 2.345,    
533     1.645, 7.765, 19.192, 7.398, // Kr 55-58      
534     1.313, 6.409, 19.229, 8.633, 5.036, 1.380,    
535     1.295, 6.219, 18.751, 8.748, 10.184, 1.803    
536     1.277, 6.099, 20.386, 8.011, 10.007, 2.272    
537     1.563, 6.312, 21.868, 5.762, 11.245, 7.250    
538     0.9198, 6.5408, 18.9727, 24.9149, 15.0161,    
539     1.202, 5.582, 19.527, 18.741, 8.411, 14.38    
540     1.159, 5.467, 18.802, 33.905, 8.300, 9.342    
541     1.124, 5.331, 18.078, 34.604, 8.127, 10.41    
542     2.000, 8.000, 18.000, 18.000, 14.000, 8.00    
543     2.000, 8.000, 18.000, 32.000, 18.000, 8.00    
544 };                                                
545                                                   
546 //....oooOO0OOooo........oooOO0OOooo........oo    
547                                                   
548 // ShellEnergy in eV                              
549 const G4double G4ICRU73QOModel::ShellEnergy[NQ    
550   {                                               
551     19.2, // H                                    
552     41.8, // He                                   
553     209.11, 21.68, // Be                          
554     486.2, 60.95, 23.43, // C                     
555     732.61, 100.646, 23.550, // N                 
556     965.1, 129.85, 31.60, // O                    
557     1525.9, 234.9, 56.18, // Ne                   
558     2701, 476.5, 150.42, 16.89, // Al             
559     3206.1, 586.4, 186.8, 23.52, 14.91, // Si     
560     5551.6, 472.43, 124.85, 22.332, // Ar         
561     8554.6, 850.58, 93.47, 39.19, 19.46, // Ti    
562     12254.7, 1279.29, 200.35, 49.19, 17.66, //    
563     14346.9, 1532.28, 262.71, 74.37, 23.03, //    
564     15438.5, 1667.96, 294.1, 70.69, 16.447, //    
565     19022.1, 2150.79, 455.79, 179.87, 57.89, 2    
566     24643, 2906.4, 366.85, 22.24, // Kr           
567     34394, 4365.3, 589.36, 129.42, 35.59, 18.4    
568     43664.3, 5824.91, 909.79, 175.47, 54.89, 1    
569     49948, 6818.2, 1036.1, 172.65, 70.89, 33.8    
570     58987, 8159, 1296.6, 356.75, 101.03, 16.52    
571     88926, 18012, 3210, 575, 108.7, 30.8, // T    
572     115025.9, 17827.44, 3214.36, 750.41, 305.2    
573     128342, 20254, 3601.8, 608.1, 115.0, 42.75    
574     131872, 20903, 3757.4, 682.1, 105.2, 44.89    
575     154449, 25067, 5105.0, 987.44, 247.59, 188    
576     167282, 27868, 6022.7, 1020.4, 244.81, 51.    
577 };                                                
578                                                   
579 //....oooOO0OOooo........oooOO0OOooo........oo    
580                                                   
581 // Data for L0 from: Sigmund P., Haagerup U. P    
582 const G4double G4ICRU73QOModel::L0[67][2] =       
583 {                                                 
584   {0.00,        0.000001},                        
585   {0.10,        0.000001},                        
586   {0.12,        0.00001},                         
587   {0.14,        0.00005},                         
588   {0.16,        0.00014},                         
589   {0.18,        0.00030},                         
590   {0.20,        0.00057},                         
591   {0.25,        0.00189},                         
592   {0.30,        0.00429},                         
593   {0.35,        0.00784},                         
594   {0.40,        0.01248},                         
595   {0.45,        0.01811},                         
596   {0.50,        0.02462},                         
597   {0.60,        0.03980},                         
598   {0.70,        0.05731},                         
599   {0.80,        0.07662},                         
600   {0.90,        0.09733},                         
601   {1.00,        0.11916},                         
602   {1.20,        0.16532},                         
603   {1.40,        0.21376},                         
604   {1.60,        0.26362},                         
605   {1.80,        0.31428},                         
606   {2.00,        0.36532},                         
607   {2.50,        0.49272},                         
608   {3.00,        0.61765},                         
609   {3.50,        0.73863},                         
610   {4.00,        0.85496},                         
611   {4.50,        0.96634},                         
612   {5.00,        1.07272},                         
613   {6.00,        1.27086},                         
614   {7.00,        1.45075},                         
615   {8.00,        1.61412},                         
616   {9.00,        1.76277},                         
617   {10.00,       1.89836},                         
618   {12.00,       2.13625},                         
619   {14.00,       2.33787},                         
620   {16.00,       2.51093},                         
621   {18.00,       2.66134},                         
622   {20.00,       2.79358},                         
623   {25.00,       3.06539},                         
624   {30.00,       3.27902},                         
625   {35.00,       3.45430},                         
626   {40.00,       3.60281},                         
627   {45.00,       3.73167},                         
628   {50.00,       3.84555},                         
629   {60.00,       4.04011},                         
630   {70.00,       4.20264},                         
631   {80.00,       4.34229},                         
632   {90.00,       4.46474},                         
633   {100.00,      4.57378},                         
634   {120.00,      4.76155},                         
635   {140.00,      4.91953},                         
636   {160.00,      5.05590},                         
637   {180.00,      5.17588},                         
638   {200.00,      5.28299},                         
639   {250.00,      5.50925},                         
640   {300.00,      5.69364},                         
641   {350.00,      5.84926},                         
642   {400.00,      5.98388},                         
643   {450.00,      6.10252},                         
644   {500.00,      6.20856},                         
645   {600.00,      6.39189},                         
646   {700.00,      6.54677},                         
647   {800.00,      6.68084},                         
648   {900.00,      6.79905},                         
649   {1000.00,     6.90474}                          
650 };                                                
651                                                   
652 //....oooOO0OOooo........oooOO0OOooo........oo    
653                                                   
654 // Data for L1 from: Mikkelsen H.H., Sigmund P    
655 const G4double G4ICRU73QOModel::L1[22][2] =       
656 {                                                 
657   {0.00,       -0.000001},                        
658   {0.10,       -0.00001},                         
659   {0.20,       -0.00049},                         
660   {0.30,       -0.00084},                         
661   {0.40,        0.00085},                         
662   {0.50,        0.00519},                         
663   {0.60,        0.01198},                         
664   {0.70,        0.02074},                         
665   {0.80,        0.03133},                         
666   {0.90,        0.04369},                         
667   {1.00,        0.06035},                         
668   {2.00,        0.24023},                         
669   {3.00,        0.44284},                         
670   {4.00,        0.62012},                         
671   {5.00,        0.77031},                         
672   {6.00,        0.90390},                         
673   {7.00,        1.02705},                         
674   {8.00,        1.10867},                         
675   {9.00,        1.17546},                         
676   {10.00,       1.21599},                         
677   {15.00,        1.24349},                        
678   {20.00,        1.16752}                         
679 };                                                
680                                                   
681 //....oooOO0OOooo........oooOO0OOooo........oo    
682                                                   
683 // Data for L2 from: Mikkelsen H.H. Nucl. Inst    
684 const G4double G4ICRU73QOModel::L2[14][2] =       
685 {                                                 
686   {0.00,        0.000001},                        
687   {0.10,        0.00001},                         
688   {0.20,        0.00000},                         
689   {0.40,       -0.00120},                         
690   {0.60,       -0.00036},                         
691   {0.80,        0.00372},                         
692   {1.00,        0.01298},                         
693   {2.00,        0.08296},                         
694   {4.00,        0.21953},                         
695   {6.00,        0.23903},                         
696   {8.00,        0.20893},                         
697   {10.00,       0.10879},                         
698   {20.00,      -0.88409},                         
699   {40.00,      -1.13902}                          
700 };                                                
701                                                   
702 //....oooOO0OOooo........oooOO0OOooo........oo    
703                                                   
704 // Correction obtained by V.Ivanchenko using G    
705 const G4double G4ICRU73QOModel::factorBethe[99    
706 0.9637, 0.9872, 0.9469, 0.9875, 0.91, 0.989, 0    
707 0.8357, 0.868, 0.9417, 0.9466, 0.8911, 0.905,     
708 0.9098, 0.976, 0.8425, 0.8099, 0.7858, 0.947,     
709 0.7223, 0.9784, 0.774, 0.7953, 0.829, 0.9405,     
710 0.8207, 0.9033, 0.8063, 0.7837, 0.7818, 0.744,    
711 0.8231, 0.8462, 0.853, 0.8736, 0.856, 0.8762,     
712 0.7533, 0.7273, 0.7093, 0.7157, 0.6823, 0.6612    
713 0.6497, 0.6746, 0.8568, 0.8541, 0.6958, 0.6962    
714 0.7454, 0.78, 0.7783, 0.7996, 0.8216, 0.8632,     
715 0.8321, 0.8272, 0.7999, 0.7934, 0.7787, 0.7851    
716