71 #include "G4ParticleChangeForLoss.hh"    89     protonMassAMU(1.007276),
   133        pname != 
"deuteron" && pname != 
"triton" &&
   134        pname != 
"alpha+"   && pname != 
"helium" &&
   135        pname != 
"hydrogen") { 
isIon = 
true; }
   176   if(cutEnergy < maxEnergy) {
   180     G4double beta2   = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
   181     cross = (maxEnergy - cutEnergy)/(cutEnergy*maxEnergy) 
   182       - beta2*
G4Log(maxEnergy/cutEnergy)/tmax;
   184     if( 0.0 < 
spin ) { cross += 0.5*(maxEnergy - cutEnergy)/energy2; }
   204                                          (p,kineticEnergy,cutEnergy,maxEnergy);
   219                                          (p,kineticEnergy,cutEnergy,maxEnergy);
   237     dedx = 
DEDX(material, tkin); 
   240   if (cutEnergy < tmax) {
   254   if (dedx < 0.0) { dedx = 0.0; }
   274   if(xmin >= xmax) { 
return; }
   279   G4double beta2   = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
   289     deltaKinEnergy = xmin*xmax/(xmin*(1.0 - rndm[0]) + xmax*rndm[0]);
   291     f = 1.0 - beta2*deltaKinEnergy/tmax;
   294         G4cout << 
"G4BraggModel::SampleSecondary Warning! "   295                << 
"Majorant " << grej << 
" < "   296                << f << 
" for e= " << deltaKinEnergy
   301   } 
while( grej*rndm[1] >= f );
   318     if(cost > 1.0) { cost = 1.0; }
   319     G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
   323     deltaDirection.
set(sint*cos(phi),sint*sin(phi), cost) ;
   332   kineticEnergy -= deltaKinEnergy;
   334   finalP               = finalP.
unit();
   339   vdp->push_back(delta);
   398    {1.187E+1, 1.343E+1, 1.069E+4, 7.723E+2, 2.153E-2},
   399    {7.802E+0, 8.814E+0, 8.303E+3, 7.446E+2, 7.966E-3}, 
   400    {7.294E+0, 8.284E+0, 5.010E+3, 4.544E+2, 8.153E-3}, 
   401    {8.646E+0, 9.800E+0, 7.066E+3, 4.581E+2, 9.383E-3}, 
   402    {1.286E+1, 1.462E+1, 5.625E+3, 2.621E+3, 3.512E-2}, 
   403    {3.229E+1, 3.696E+1, 8.918E+3, 3.244E+3, 1.273E-1}, 
   404    {1.604E+1, 1.825E+1, 6.967E+3, 2.307E+3, 3.775E-2}, 
   405    {8.049E+0, 9.099E+0, 9.257E+3, 3.846E+2, 1.007E-2},
   406    {4.015E+0, 4.542E+0, 3.955E+3, 4.847E+2, 7.904E-3}, 
   407    {4.571E+0, 5.173E+0, 4.346E+3, 4.779E+2, 8.572E-3},
   408    {2.631E+0, 2.601E+0, 1.701E+3, 1.279E+3, 1.638E-2} };
   410     static const G4double atomicWeight[11] = {
   411     101.96128, 44.0098, 16.0426, 28.0536, 42.0804,
   412     104.1512, 44.665, 60.0843, 18.0152, 18.0152, 12.0};       
   417     } 
else if ( T < 10000.0 ) {
   421       ionloss = slow*shigh / (slow + shigh) ;     
   424     if ( ionloss < 0.0) ionloss = 0.0 ;
   429       else if (T < 700.0) {   
   432       else if (T < 10000.0) {    
   464    {1.254E+0, 1.440E+0, 2.426E+2, 1.200E+4, 1.159E-1},
   465    {1.229E+0, 1.397E+0, 4.845E+2, 5.873E+3, 5.225E-2},
   466    {1.411E+0, 1.600E+0, 7.256E+2, 3.013E+3, 4.578E-2},
   467    {2.248E+0, 2.590E+0, 9.660E+2, 1.538E+2, 3.475E-2},
   468    {2.474E+0, 2.815E+0, 1.206E+3, 1.060E+3, 2.855E-2},
   469    {2.631E+0, 2.601E+0, 1.701E+3, 1.279E+3, 1.638E-2},
   470    {2.954E+0, 3.350E+0, 1.683E+3, 1.900E+3, 2.513E-2},
   471    {2.652E+0, 3.000E+0, 1.920E+3, 2.000E+3, 2.230E-2},
   472    {2.085E+0, 2.352E+0, 2.157E+3, 2.634E+3, 1.816E-2},
   473    {1.951E+0, 2.199E+0, 2.393E+3, 2.699E+3, 1.568E-2},
   475    {2.542E+0, 2.869E+0, 2.628E+3, 1.854E+3, 1.472E-2},
   476    {3.791E+0, 4.293E+0, 2.862E+3, 1.009E+3, 1.397E-2},
   477    {4.154E+0, 4.739E+0, 2.766E+3, 1.645E+2, 2.023E-2},
   478    {4.914E+0, 5.598E+0, 3.193E+3, 2.327E+2, 1.419E-2},
   479    {3.232E+0, 3.647E+0, 3.561E+3, 1.560E+3, 1.267E-2},
   480    {3.447E+0, 3.891E+0, 3.792E+3, 1.219E+3, 1.211E-2},
   481    {5.301E+0, 6.008E+0, 3.969E+3, 6.451E+2, 1.183E-2},
   482    {5.731E+0, 6.500E+0, 4.253E+3, 5.300E+2, 1.123E-2},
   483    {5.152E+0, 5.833E+0, 4.482E+3, 5.457E+2, 1.129E-2},
   484    {5.521E+0, 6.252E+0, 4.710E+3, 5.533E+2, 1.112E-2},
   486    {5.201E+0, 5.884E+0, 4.938E+3, 5.609E+2, 9.995E-3},
   487    {4.858E+0, 5.489E+0, 5.260E+3, 6.511E+2, 8.930E-3},
   488    {4.479E+0, 5.055E+0, 5.391E+3, 9.523E+2, 9.117E-3},
   489    {3.983E+0, 4.489E+0, 5.616E+3, 1.336E+3, 8.413E-3},
   490    {3.469E+0, 3.907E+0, 5.725E+3, 1.461E+3, 8.829E-3},
   491    {3.519E+0, 3.963E+0, 6.065E+3, 1.243E+3, 7.782E-3},
   492    {3.140E+0, 3.535E+0, 6.288E+3, 1.372E+3, 7.361E-3},
   493    {3.553E+0, 4.004E+0, 6.205E+3, 5.551E+2, 8.763E-3},
   494    {3.696E+0, 4.194E+0, 4.649E+3, 8.113E+1, 2.242E-2},
   495    {4.210E+0, 4.750E+0, 6.953E+3, 2.952E+2, 6.809E-3},
   497    {5.041E+0, 5.697E+0, 7.173E+3, 2.026E+2, 6.725E-3},
   498    {5.554E+0, 6.300E+0, 6.496E+3, 1.100E+2, 9.689E-3},
   499    {5.323E+0, 6.012E+0, 7.611E+3, 2.925E+2, 6.447E-3},
   500    {5.874E+0, 6.656E+0, 7.395E+3, 1.175E+2, 7.684E-3},
   501    {6.658E+0, 7.536E+0, 7.694E+3, 2.223E+2, 6.509E-3},
   502    {6.413E+0, 7.240E+0, 1.185E+4, 1.537E+2, 2.880E-3},
   503    {5.694E+0, 6.429E+0, 8.478E+3, 2.929E+2, 6.087E-3},
   504    {6.339E+0, 7.159E+0, 8.693E+3, 3.303E+2, 6.003E-3},
   505    {6.407E+0, 7.234E+0, 8.907E+3, 3.678E+2, 5.889E-3},
   506    {6.734E+0, 7.603E+0, 9.120E+3, 4.052E+2, 5.765E-3},
   508    {6.901E+0, 7.791E+0, 9.333E+3, 4.427E+2, 5.587E-3},
   509    {6.424E+0, 7.248E+0, 9.545E+3, 4.802E+2, 5.376E-3},
   510    {6.799E+0, 7.671E+0, 9.756E+3, 5.176E+2, 5.315E-3},
   511    {6.109E+0, 6.887E+0, 9.966E+3, 5.551E+2, 5.151E-3},
   512    {5.924E+0, 6.677E+0, 1.018E+4, 5.925E+2, 4.919E-3},
   513    {5.238E+0, 5.900E+0, 1.038E+4, 6.300E+2, 4.758E-3},
   515    {5.345E+0, 6.038E+0, 6.790E+3, 3.978E+2, 1.676E-2}, 
   516    {5.814E+0, 6.554E+0, 1.080E+4, 3.555E+2, 4.626E-3},
   517    {6.229E+0, 7.024E+0, 1.101E+4, 3.709E+2, 4.540E-3},
   518    {6.409E+0, 7.227E+0, 1.121E+4, 3.864E+2, 4.474E-3},
   520    {7.500E+0, 8.480E+0, 8.608E+3, 3.480E+2, 9.074E-3},
   521    {6.979E+0, 7.871E+0, 1.162E+4, 3.924E+2, 4.402E-3},
   522    {7.725E+0, 8.716E+0, 1.183E+4, 3.948E+2, 4.376E-3},
   523    {8.337E+0, 9.425E+0, 1.051E+4, 2.696E+2, 6.206E-3},
   524    {7.287E+0, 8.218E+0, 1.223E+4, 3.997E+2, 4.447E-3},
   525    {7.899E+0, 8.911E+0, 1.243E+4, 4.021E+2, 4.511E-3},
   526    {8.041E+0, 9.071E+0, 1.263E+4, 4.045E+2, 4.540E-3},
   527    {7.488E+0, 8.444E+0, 1.283E+4, 4.069E+2, 4.420E-3},
   528    {7.291E+0, 8.219E+0, 1.303E+4, 4.093E+2, 4.298E-3},
   529    {7.098E+0, 8.000E+0, 1.323E+4, 4.118E+2, 4.182E-3},
   531    {6.909E+0, 7.786E+0, 1.343E+4, 4.142E+2, 4.058E-3},
   532    {6.728E+0, 7.580E+0, 1.362E+4, 4.166E+2, 3.976E-3},
   533    {6.551E+0, 7.380E+0, 1.382E+4, 4.190E+2, 3.877E-3},
   534    {6.739E+0, 7.592E+0, 1.402E+4, 4.214E+2, 3.863E-3},
   535    {6.212E+0, 6.996E+0, 1.421E+4, 4.239E+2, 3.725E-3},
   536    {5.517E+0, 6.210E+0, 1.440E+4, 4.263E+2, 3.632E-3},
   537    {5.220E+0, 5.874E+0, 1.460E+4, 4.287E+2, 3.498E-3},
   538    {5.071E+0, 5.706E+0, 1.479E+4, 4.330E+2, 3.405E-3},
   539    {4.926E+0, 5.542E+0, 1.498E+4, 4.335E+2, 3.342E-3},
   540    {4.788E+0, 5.386E+0, 1.517E+4, 4.359E+2, 3.292E-3},
   542    {4.893E+0, 5.505E+0, 1.536E+4, 4.384E+2, 3.243E-3},
   543    {5.028E+0, 5.657E+0, 1.555E+4, 4.408E+2, 3.195E-3},
   544    {4.738E+0, 5.329E+0, 1.574E+4, 4.432E+2, 3.186E-3},
   545    {4.587E+0, 5.160E+0, 1.541E+4, 4.153E+2, 3.406E-3},
   546    {5.201E+0, 5.851E+0, 1.612E+4, 4.416E+2, 3.122E-3},
   547    {5.071E+0, 5.704E+0, 1.630E+4, 4.409E+2, 3.082E-3},
   548    {4.946E+0, 5.563E+0, 1.649E+4, 4.401E+2, 2.965E-3},
   549    {4.477E+0, 5.034E+0, 1.667E+4, 4.393E+2, 2.871E-3},
   551    {4.844E+0, 5.458E+0, 7.852E+3, 9.758E+2, 2.077E-2}, 
   552    {4.307E+0, 4.843E+0, 1.704E+4, 4.878E+2, 2.882E-3},
   554    {4.723E+0, 5.311E+0, 1.722E+4, 5.370E+2, 2.913E-3},
   555    {5.319E+0, 5.982E+0, 1.740E+4, 5.863E+2, 2.871E-3},
   556    {5.956E+0, 6.700E+0, 1.780E+4, 6.770E+2, 2.660E-3},
   557    {6.158E+0, 6.928E+0, 1.777E+4, 5.863E+2, 2.812E-3},
   558    {6.203E+0, 6.979E+0, 1.795E+4, 5.863E+2, 2.776E-3},
   559    {6.181E+0, 6.954E+0, 1.812E+4, 5.863E+2, 2.748E-3},
   560    {6.949E+0, 7.820E+0, 1.830E+4, 5.863E+2, 2.737E-3},
   561    {7.506E+0, 8.448E+0, 1.848E+4, 5.863E+2, 2.727E-3},
   562    {7.648E+0, 8.609E+0, 1.866E+4, 5.863E+2, 2.697E-3},
   563    {7.711E+0, 8.679E+0, 1.883E+4, 5.863E+2, 2.641E-3},
   565    {7.407E+0, 8.336E+0, 1.901E+4, 5.863E+2, 2.603E-3},
   566    {7.290E+0, 8.204E+0, 1.918E+4, 5.863E+2, 2.673E-3}
   572   if ( T < 40.0 && 5 == i) {
   577   } 
else if ( T < 10.0 ) { 
   584   G4double shigh = 
G4Log( 1.0 + a[i][3]/T + a[i][4]*T ) * a[i][2]/T ;
   585   ionloss = slow*shigh*fac / (slow + shigh) ;     
   587   if ( ionloss < 0.0) { ionloss = 0.0; }
   611   const G4double* theAtomicNumDensityVector =
   624   } 
else if(1 == numberOfElements) {
   640     for (
G4int i=0; i<numberOfElements; i++) {
   641       const G4Element* element = (*theElementVector)[i] ;
   644                                     * theAtomicNumDensityVector[i] ;
   646                                     * theAtomicNumDensityVector[i] ;
   658     for (
G4int i=0; i<numberOfElements; i++)
   660       const G4Element* element = (*theElementVector)[i] ;
   662                                    * theAtomicNumDensityVector[i];
   678   if (myFormula == chFormula ) { 
return false; }
   688   if( theState == 
kStateGas && myFormula == chFormula) 
return false ;
   692   static const G4double HeEff = 2.8735 ;
   695   static const G4String nameOfMol[53] = {
   696     "H_2O",      
"C_2H_4O",    
"C_3H_6O",  
"C_2H_2",             
"C_H_3OH",
   697     "C_2H_5OH",  
"C_3H_7OH",   
"C_3H_4",   
"NH_3",               
"C_14H_10",
   698     "C_6H_6",    
"C_4H_10",    
"C_4H_6",   
"C_4H_8O",            
"CCl_4",
   699     "CF_4",      
"C_6H_8",     
"C_6H_12",  
"C_6H_10O",           
"C_6H_10",
   700     "C_8H_16",   
"C_5H_10",    
"C_5H_8",   
"C_3H_6-Cyclopropane",
"C_2H_4F_2",
   701     "C_2H_2F_2", 
"C_4H_8O_2",  
"C_2H_6",   
"C_2F_6",             
"C_2H_6O",
   702     "C_3H_6O",   
"C_4H_10O",   
"C_2H_4",   
"C_2H_4O",            
"C_2H_4S",
   703     "SH_2",      
"CH_4",       
"CCLF_3",   
"CCl_2F_2",           
"CHCl_2F",
   704     "(CH_3)_2S", 
"N_2O",       
"C_5H_10O", 
"C_8H_6",             
"(CH_2)_N",
   705     "(C_3H_6)_N",
"(C_8H_8)_N", 
"C_3H_8",   
"C_3H_6-Propylene",   
"C_3H_6O",
   706     "C_3H_6S",   
"C_4H_4S",    
"C_7H_8"   710      66.1,  190.4, 258.7,  42.2, 141.5,
   711     210.9,  279.6, 198.8,  31.0, 267.5,
   712     122.8,  311.4, 260.3, 328.9, 391.3,
   713     206.6,  374.0, 422.0, 432.0, 398.0,
   714     554.0,  353.0, 326.0,  74.6, 220.5,
   715     197.4,  362.0, 170.0, 330.5, 211.3,
   716     262.3,  349.6,  51.3, 187.0, 236.9,
   717     121.9,   35.8, 247.0, 292.6, 268.0,
   718     262.3,   49.0, 398.9, 444.0,  22.91,
   719      68.0,  155.0,  84.0,  74.2, 254.7,
   723   static const G4double expCharge[53] = {
   724     HeEff, HeEff, HeEff,   1.0, HeEff,
   725     HeEff, HeEff, HeEff,   1.0,   1.0,
   726       1.0, HeEff, HeEff, HeEff, HeEff,
   727     HeEff, HeEff, HeEff, HeEff, HeEff,
   728     HeEff, HeEff, HeEff,   1.0, HeEff,
   729     HeEff, HeEff, HeEff, HeEff, HeEff,
   730     HeEff, HeEff,   1.0, HeEff, HeEff,
   731     HeEff,   1.0, HeEff, HeEff, HeEff,
   732     HeEff,   1.0, HeEff, HeEff,   1.0,
   733       1.0,   1.0,   1.0,   1.0, HeEff,
   737   static const G4double numberOfAtomsPerMolecula[53] = {
   738     3.0,  7.0, 10.0,  4.0,  6.0,
   739     9.0, 12.0,  7.0,  4.0, 24.0,
   740     12.0, 14.0, 10.0, 13.0,  5.0,
   741     5.0, 14.0, 18.0, 17.0, 17.0,
   742     24.0, 15.0, 13.0,  9.0,  8.0,
   743     6.0, 14.0,  8.0,  8.0,  9.0,
   744     10.0, 15.0,  6.0,  7.0,  7.0,
   745     3.0,  5.0,  5.0,  5.0,  5.0,
   746     9.0,  3.0, 16.0, 14.0,  3.0,
   747     9.0, 16.0, 11.0,  9.0, 10.0,
   754       if(chFormula == nameOfMol[i]) {
   757                           (expCharge[i] * numberOfAtomsPerMolecula[i]) ;
   778   G4double beta     = sqrt(1.0 - 1.0/(gamma*gamma)) ;
   779   G4double beta25   = sqrt(1.0 - 1.0/(gamma25*gamma25)) ;
   780   G4double beta125  = sqrt(1.0 - 1.0/(gamma125*gamma125)) ;
   783                    (1.0 + 
G4Exp( 1.48 * ( beta125/beta25 - 7.0 ) ) ) /
   784                    (1.0 + 
G4Exp( 1.48 * ( beta/beta25    - 7.0 ) ) ) ;
 
void set(double x, double y, double z)
 
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
 
static G4LossTableManager * Instance()
 
G4ParticleChangeForLoss * GetParticleChangeForLoss()
 
std::vector< G4Element * > G4ElementVector
 
G4bool HasMaterial(const G4Material *material)
 
const G4Material * GetMaterial() const
 
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
 
void SetExpStopPower125(G4double value)
 
static const G4int numberOfMolecula
 
G4double EffectiveChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double GetTotNbOfAtomsPerVolume() const
 
G4bool UseAngularGeneratorFlag() const
 
G4VEmAngularDistribution * GetAngularDistribution()
 
G4double GetDensity() const
 
G4double GetTotalMomentum() const
 
G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double EffectiveChargeCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
const G4String & GetParticleType() const
 
G4VEmFluctuationModel * GetModelOfFluctuations()
 
static G4PSTARStopping * fPSTAR
 
G4ParticleChangeForLoss * fParticleChange
 
void SetHighEnergyLimit(G4double)
 
G4double ChemicalFactor(G4double kineticEnergy, G4double eloss125) const
 
const G4String & GetChemicalFormula() const
 
G4double GetKineticEnergy() const
 
G4ThreeVector GetMomentum() const
 
const G4String & GetParticleName() const
 
const G4double * GetAtomicNumDensityVector() const
 
G4GLOB_DLL std::ostream G4cout
 
G4ParticleDefinition * theElectron
 
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kinEnergy)
 
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
 
G4EmCorrections * EmCorrections()
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
static const double twopi
 
virtual G4double GetParticleCharge(const G4ParticleDefinition *p, const G4Material *mat, G4double kineticEnergy)
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy)
 
const G4Material * currentMaterial
 
G4double G4Log(G4double x)
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4double StoppingPower(const G4Material *material, G4double kineticEnergy)
 
const G4ParticleDefinition * particle
 
static const G4double factor
 
G4double GetChargeSquareRatio() const
 
G4double GetElectronDensity() const
 
const G4ThreeVector & GetMomentumDirection() const
 
static const G4double invLog10
 
G4double GetPDGMass() const
 
void SetAngularDistribution(G4VEmAngularDistribution *)
 
size_t GetNumberOfElements() const
 
void SetParticle(const G4ParticleDefinition *p)
 
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
 
G4double ElectronicStoppingPower(G4double z, G4double kineticEnergy) const
 
static G4Electron * Electron()
 
static const G4double fac
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
G4double theZieglerFactor
 
G4int GetIndex(const G4Material *) const
 
const G4ElementVector * GetElementVector() const
 
G4double GetElectronicDEDX(G4int idx, G4double energy) const
 
G4BraggModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="Bragg")
 
void SetDeexcitationFlag(G4bool val)
 
virtual void SetParticleAndCharge(const G4ParticleDefinition *, G4double q2)
 
virtual void flatArray(const int size, double *vect)=0
 
G4bool MolecIsInZiegler1988(const G4Material *material)
 
G4double DEDX(const G4Material *material, G4double kineticEnergy)
 
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
 
G4int SelectRandomAtomNumber(const G4Material *)