65 #include "G4ParticleChangeForLoss.hh"    83     fParticleChange(nullptr),
    84     currentMaterial(nullptr),
   130        pname != 
"deuteron" && pname != 
"triton" &&
   131        pname != 
"alpha+"   && pname != 
"helium" &&
   132        pname != 
"hydrogen") { 
isIon = 
true; }
   186   if(cutEnergy < tmax) {
   190     G4double beta2   = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
   191     cross = (maxEnergy - cutEnergy)/(cutEnergy*maxEnergy) 
   192       - beta2*
G4Log(maxEnergy/cutEnergy)/tmax;
   194     if( 0.0 < 
spin ) { cross += 0.5*(maxEnergy - cutEnergy)/energy2; }
   214                                          (p,kineticEnergy,cutEnergy,maxEnergy);
   229                                          (p,kineticEnergy,cutEnergy,maxEnergy);
   248     dedx = 
DEDX(material, tkin); 
   251   if (cutEnergy < tmax) {
   265   if (dedx < 0.0) dedx = 0.0 ;
   289   if(e < 0.0) { e = preKinEnergy*0.5; }
   310   if(xmin >= xmax) { 
return; }
   315   G4double beta2   = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
   325     deltaKinEnergy = xmin*xmax/(xmin*(1.0 - rndm[0]) + xmax*rndm[0]);
   327     f = 1.0 - beta2*deltaKinEnergy/tmax;
   330         G4cout << 
"G4BraggIonModel::SampleSecondary Warning! "   331                << 
"Majorant " << grej << 
" < "   332                << f << 
" for e= " << deltaKinEnergy
   337   } 
while( grej*rndm[1] >= f );
   354     if(cost > 1.0) { cost = 1.0; }
   355     G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
   359     deltaDirection.
set(sint*cos(phi),sint*sin(phi), cost) ;
   367   vdp->push_back(delta);
   370   kineticEnergy -= deltaKinEnergy;
   372   finalP               = finalP.
unit();
   435        {9.43672, 0.54398, 84.341, 1.3705, 57.422},
   436        {67.1503, 0.41409, 404.512, 148.97, 20.99},
   437        {5.11203, 0.453,  36.718,  50.6,  28.058}, 
   438        {61.793, 0.48445, 361.537, 57.889, 50.674},
   439        {7.83464, 0.49804, 160.452, 3.192, 0.71922},
   440        {19.729, 0.52153, 162.341, 58.35, 25.668}, 
   441        {26.4648, 0.50112, 188.913, 30.079, 16.509},
   442        {7.8655, 0.5205, 63.96, 51.32, 67.775},
   443        {8.8965, 0.5148, 339.36, 1.7205, 0.70423},
   444        {2.959, 0.53255, 34.247, 60.655, 15.153}, 
   445        {3.80133, 0.41590, 12.9966, 117.83, 242.28} };   
   447     static const G4double atomicWeight[11] = {
   448        101.96128, 44.0098, 16.0426, 28.0536, 42.0804,
   449        104.1512, 44.665, 60.0843, 18.0152, 18.0152, 12.0};       
   456       G4double shigh = 
G4Log( 1.0 + a[i][3]*1000.0 + a[i][4]*0.001 )
   458       ionloss  = slow*shigh / (slow + shigh) ;
   459       ionloss *= sqrt(T*1000.0) ;
   464       G4double shigh = 
G4Log( 1.0 + a[i][3]/T + a[i][4]*T ) * a[i][2]/T ;
   465       ionloss = slow*shigh / (slow + shigh) ;
   474     if ( ionloss < 0.0) ionloss = 0.0 ;
   507     {0.35485, 0.6456, 6.01525,  20.8933, 4.3515
   508    },{ 0.58,    0.59,   6.3,     130.0,   44.07
   509    },{ 1.42,    0.49,   12.25,    32.0,    9.161
   510    },{ 2.206,   0.51,   15.32,    0.25,    8.995 
   512    },{ 3.691,   0.4128, 18.48,    50.72,   9.0
   513    },{ 3.83523, 0.42993,12.6125,  227.41,  188.97
   514    },{ 1.9259,  0.5550, 27.15125, 26.0665, 6.2768
   515    },{ 2.81015, 0.4759, 50.0253,  10.556,  1.0382
   516    },{ 1.533,   0.531,  40.44,    18.41,   2.718
   517    },{ 2.303,   0.4861, 37.01,    37.96,   5.092
   519    },{ 9.894,   0.3081, 23.65,    0.384,   92.93
   520    },{ 4.3,     0.47,   34.3,     3.3,     12.74
   521    },{ 2.5,     0.625,  45.7,     0.1,     4.359
   522    },{ 2.1,     0.65,   49.34,    1.788,   4.133
   523    },{ 1.729,   0.6562, 53.41,    2.405,   3.845
   524    },{ 1.402,   0.6791, 58.98,    3.528,   3.211
   525    },{ 1.117,   0.7044, 69.69,    3.705,    2.156
   526    },{ 2.291,   0.6284, 73.88,    4.478,    2.066
   527    },{ 8.554,   0.3817, 83.61,    11.84,    1.875
   528    },{ 6.297,   0.4622, 65.39,    10.14,    5.036
   530    },{ 5.307,   0.4918, 61.74,    12.4,    6.665
   531    },{ 4.71,    0.5087, 65.28,    8.806,    5.948
   532    },{ 6.151,   0.4524, 83.0,    18.31,    2.71
   533    },{ 6.57,    0.4322, 84.76,    15.53,    2.779
   534    },{ 5.738,   0.4492, 84.6,    14.18,    3.101
   535    },{ 5.013,   0.4707, 85.8,    16.55,    3.211
   536    },{ 4.32,    0.4947, 76.14,    10.85,    5.441
   537    },{ 4.652,   0.4571, 80.73,    22.0,    4.952
   538    },{ 3.114,   0.5236, 76.67,    7.62,    6.385
   539    },{ 3.114,   0.5236, 76.67,    7.62,    7.502
   541    },{ 3.114,   0.5236, 76.67,    7.62,    8.514
   542    },{ 5.746,   0.4662, 79.24,    1.185,    7.993
   543    },{ 2.792,   0.6346, 106.1,    0.2986,   2.331
   544    },{ 4.667,   0.5095, 124.3,    2.102,    1.667
   545    },{ 2.44,    0.6346, 105.0,    0.83,    2.851
   546    },{ 1.413,   0.7377, 147.9,    1.466,    1.016
   547    },{ 11.72,   0.3826, 102.8,    9.231,    4.371
   548    },{ 7.126,   0.4804, 119.3,    5.784,    2.454
   549    },{ 11.61,   0.3955, 146.7,    7.031,    1.423
   550    },{ 10.99,   0.41,   163.9,   7.1,      1.052
   552    },{ 9.241,   0.4275, 163.1,    7.954,    1.102
   553    },{ 9.276,   0.418,  157.1,   8.038,    1.29
   554    },{ 3.999,   0.6152, 97.6,    1.297,    5.792
   555    },{ 4.306,   0.5658, 97.99,    5.514,    5.754
   556    },{ 3.615,   0.6197, 86.26,    0.333,    8.689
   557    },{ 5.8,     0.49,   147.2,   6.903,    1.289
   558    },{ 5.6,     0.49,   130.0,   10.0,     2.844
   559    },{ 3.55,    0.6068, 124.7,    1.112,    3.119
   560    },{ 3.6,     0.62,   105.8,   0.1692,   6.026
   561    },{ 5.4,     0.53,   103.1,   3.931,    7.767
   563    },{ 3.97,    0.6459, 131.8,    0.2233,   2.723
   564    },{ 3.65,    0.64,   126.8,   0.6834,   3.411
   565    },{ 3.118,   0.6519, 164.9,    1.208,    1.51
   566    },{ 3.949,   0.6209, 200.5,    1.878,    0.9126
   567    },{ 14.4,    0.3923, 152.5,    8.354,    2.597
   568    },{ 10.99,   0.4599, 138.4,    4.811,    3.726
   569    },{ 16.6,    0.3773, 224.1,    6.28,    0.9121
   570    },{ 10.54,   0.4533, 159.3,   4.832,    2.529
   571    },{ 10.33,   0.4502, 162.0,   5.132,    2.444
   572    },{ 10.15,   0.4471, 165.6,   5.378,    2.328
   574    },{ 9.976,   0.4439, 168.0,   5.721,    2.258
   575    },{ 9.804,   0.4408, 176.2,   5.675,    1.997
   576    },{ 14.22,   0.363,  228.4,   7.024,    1.016
   577    },{ 9.952,   0.4318, 233.5,   5.065,    0.9244
   578    },{ 9.272,   0.4345, 210.0,   4.911,    1.258
   579    },{ 10.13,   0.4146, 225.7,   5.525,    1.055
   580    },{ 8.949,   0.4304, 213.3,   5.071,    1.221
   581    },{ 11.94,   0.3783, 247.2,   6.655,    0.849
   582    },{ 8.472,   0.4405, 195.5,   4.051,    1.604
   583    },{ 8.301,   0.4399, 203.7,   3.667,    1.459
   585    },{ 6.567,   0.4858, 193.0,   2.65,     1.66
   586    },{ 5.951,   0.5016, 196.1,   2.662,    1.589
   587    },{ 7.495,   0.4523, 251.4,   3.433,    0.8619
   588    },{ 6.335,   0.4825, 255.1,   2.834,    0.8228
   589    },{ 4.314,   0.5558, 214.8,   2.354,    1.263
   590    },{ 4.02,    0.5681, 219.9,   2.402,    1.191
   591    },{ 3.836,   0.5765, 210.2,   2.742,    1.305
   592    },{ 4.68,    0.5247, 244.7,   2.749,    0.8962
   593    },{ 2.892,   0.6204, 208.6,   2.415,    1.416 
   595    },{ 2.892,   0.6204, 208.6,   2.415,    1.416
   597    },{ 4.728,   0.5522, 217.0,   3.091,    1.386
   598    },{ 6.18,    0.52,   170.0,   4.0,      3.224
   599    },{ 9.0,     0.47,   198.0,   3.8,      2.032
   600    },{ 2.324,   0.6997, 216.0,   1.599,    1.399
   601    },{ 1.961,   0.7286, 223.0,   1.621,    1.296
   602    },{ 1.75,    0.7427, 350.1,   0.9789,   0.5507
   603    },{ 10.31,   0.4613, 261.2,   4.738,    0.9899
   604    },{ 7.962,   0.519,  235.7,   4.347,    1.313
   605    },{ 6.227,   0.5645, 231.9,   3.961,    1.379
   606    },{ 5.246,   0.5947, 228.6,   4.027,    1.432
   608    },{ 5.408,   0.5811, 235.7,   3.961,    1.358
   609    },{ 5.218,   0.5828, 245.0,   3.838,    1.25}
   615     G4double shigh = 
G4Log( 1.0 + a[i][3]*1000.0 + a[i][4]*0.001 )
   617     ionloss  = slow*shigh / (slow + shigh) ;
   618     ionloss *= sqrt(T*1000.0) ;
   623     G4double shigh = 
G4Log( 1.0 + a[i][3]/T + a[i][4]*T ) * a[i][2]/T ;
   624     ionloss = slow*shigh / (slow + shigh) ;
   633   if ( ionloss < 0.0) { ionloss = 0.0; }
   656   const G4double* theAtomicNumDensityVector =
   672   } 
else if(1 == numberOfElements) {
   684     for (
G4int i=0; i<numberOfElements; i++)
   686       const G4Element* element = (*theElementVector)[i] ;
   688                                    * theAtomicNumDensityVector[i];
   704   static const G4double c[6] = {0.2865,  0.1266, -0.001429,
   705                                 0.02402,-0.01135, 0.001475};
   710   for (
G4int i=1; i<6; ++i) {
   716   w = 1.0 + (0.007 + 0.00005*
z) * 
G4Exp( -w*w ) ;
   717   w = 4.0 * (1.0 - 
G4Exp(-x)) * w * w ;
 
void set(double x, double y, double z)
 
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
 
G4IonisParamMat * GetIonisation() const
 
static G4LossTableManager * Instance()
 
G4ParticleChangeForLoss * GetParticleChangeForLoss()
 
static G4ASTARStopping * fASTAR
 
std::vector< G4Element * > G4ElementVector
 
const G4Material * GetMaterial() const
 
G4double StoppingPower(const G4Material *material, G4double kineticEnergy)
 
G4bool HasMaterial(const G4Material *material)
 
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
 
G4double EffectiveChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double GetTotNbOfAtomsPerVolume() const
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
 
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()
 
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
 
G4double theZieglerFactor
 
const G4ParticleDefinition * particle
 
G4double ElectronicStoppingPower(G4double z, G4double kineticEnergy) const
 
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *couple)
 
G4double HeEffChargeSquare(G4double z, G4double kinEnergyInMeV) const
 
void SetHighEnergyLimit(G4double)
 
G4ParticleChangeForLoss * fParticleChange
 
G4double GetKineticEnergy() const
 
virtual G4double GetParticleCharge(const G4ParticleDefinition *p, const G4Material *mat, G4double kineticEnergy)
 
G4ThreeVector GetMomentum() const
 
const G4String & GetParticleName() const
 
const G4double * GetAtomicNumDensityVector() const
 
G4GLOB_DLL std::ostream G4cout
 
G4double GetMeanExcitationEnergy() const
 
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
 
G4EmCorrections * EmCorrections()
 
G4double DEDX(const G4Material *material, G4double kineticEnergy)
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
static const double twopi
 
G4double G4Log(G4double x)
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
G4BraggIonModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="BraggIon")
 
G4double GetElectronDensity() const
 
const G4ThreeVector & GetMomentumDirection() const
 
G4double GetPDGMass() const
 
void SetAngularDistribution(G4VEmAngularDistribution *)
 
size_t GetNumberOfElements() const
 
void SetParticle(const G4ParticleDefinition *p)
 
G4ParticleDefinition * theElectron
 
static G4Electron * Electron()
 
G4ParticleDefinition * GetDefinition() const
 
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy)
 
const G4ElementVector * GetElementVector() const
 
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
 
G4double GetTotNbOfElectPerVolume() const
 
void SetDeexcitationFlag(G4bool val)
 
virtual ~G4BraggIonModel()
 
const G4Material * currentMaterial
 
virtual void SetParticleAndCharge(const G4ParticleDefinition *, G4double q2)
 
virtual void flatArray(const int size, double *vect)=0
 
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
 
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kinEnergy)
 
G4int SelectRandomAtomNumber(const G4Material *)
 
G4double GetElectronicDEDX(G4int idx, G4double energy) const
 
G4int GetIndex(const G4Material *) const