84 for (
G4int i = 0; i < 100; ++i)
118 denEffData = (*mtab)[0]->GetIonisation()->GetDensityEffectData();
133 if(cutEnergy < maxEnergy) {
137 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
138 cross = (maxEnergy - cutEnergy)/(cutEnergy*maxEnergy)
139 - beta2*
G4Log(maxEnergy/cutEnergy)/tmax;
157 (p,kineticEnergy,cutEnergy,maxEnergy);
172 (p,kineticEnergy,cutEnergy,maxEnergy);
190 if (cutEnergy < tmax) {
201 if(dedx < 0.0) { dedx = 0.0; }
212 const G4double* theAtomicNumDensityVector =
220 for (
G4int i=0; i<numberOfElements; ++i)
222 const G4Element* element = (*theElementVector)[i] ;
224 * theAtomicNumDensityVector[i] * element->
GetZ();
246 G4double l0Term = 0, l1Term = 0, l2Term = 0;
248 for (
G4int nos = 0; nos < nbOfShells; ++nos){
256 l0Term += shStrength * l0;
259 l1Term += shStrength * l1;
262 l2Term += shStrength * l2;
266 (l0Term +
charge*fBetheVelocity*l1Term
267 +
chargeSquare*fBetheVelocity*fBetheVelocity*l2Term)/beta2;
275 G4int nbOfTheShell)
const
281 G4double PlasmaEnergy2 = PlasmaEnergy * PlasmaEnergy;
285 * PlasmaEnergy2 / (Z*
Z) ;
290 G4double ionTerm2 = ionTerm*ionTerm ;
292 G4double oscShellEnergy = std::sqrt( ionTerm2 + plasmonTerm );
294 return oscShellEnergy;
342 return shellStrength;
351 for(n = 0; n <
sizeL0; n++) {
352 if( normEnergy <
L0[n][0] )
break;
354 if(0 == n) { n = 1; }
355 if(n >= sizeL0) { n = sizeL0 - 1; }
359 G4double bethe = l0p + (l0 - l0p) * ( normEnergy -
L0[n-1][0]) /
360 (
L0[
n][0] -
L0[n-1][0]);
371 for(n = 0; n <
sizeL1; n++) {
372 if( normEnergy <
L1[n][0] )
break;
375 if(n >= sizeL1) n = sizeL1 - 1 ;
379 G4double barkas= l1p + (l1 - l1p) * ( normEnergy -
L1[n-1][0]) /
380 (
L1[
n][0] -
L1[n-1][0]);
390 for(n = 0; n <
sizeL2; n++) {
391 if( normEnergy <
L2[n][0] )
break;
394 if(n >= sizeL2) n = sizeL2 - 1 ;
398 G4double bloch = l2p + (l2 - l2p) * ( normEnergy -
L2[n-1][0]) /
399 (
L2[
n][0] -
L2[n-1][0]);
423 if(xmin >= xmax) {
return; }
428 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*
mass)/energy2;
437 deltaKinEnergy = xmin*xmax/(xmin*(1.0 -
x) + xmax*x);
439 f = 1.0 - beta2*deltaKinEnergy/tmax;
442 G4cout <<
"G4ICRU73QOModel::SampleSecondary Warning! "
443 <<
"Majorant " << grej <<
" < "
444 << f <<
" for e= " << deltaKinEnergy
464 G4double totMomentum = energy*sqrt(beta2);
466 (deltaMomentum * totMomentum);
467 if(cost > 1.0) { cost = 1.0; }
468 G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
472 deltaDirection.
set(sint*cos(phi),sint*sin(phi), cost) ;
480 kineticEnergy -= deltaKinEnergy;
482 finalP = finalP.
unit();
487 vdp->push_back(delta);
505 {1,2,4,6,7,8,10,13,14,-18,
506 22,26,28,29,32,36,42,47,
507 50,54,73,74,78,79,82,92};
510 {1,1,2,3,3,3,3,4,5,4,
515 {0,1,2,4,7,10,13,16,20,25,
516 29,34,39,44,49,55,59,65,
517 71,78,84,90,98,105,112,121};
531 1.623, 2.147, 6.259, 2.971,
532 1.631, 2.094, 6.588, 2.041, 1.646,
533 1.535, 8.655, 1.706, 6.104,
534 1.581, 8.358, 8.183, 2.000, 1.878,
535 1.516, 8.325, 8.461, 6.579, 1.119,
536 1.422, 7.81, 8.385, 8.216, 2.167,
537 1.458, 8.049, 8.79, 9.695, 1.008,
538 1.442, 7.791, 7.837, 10.122, 2.463, 2.345,
539 1.645, 7.765, 19.192, 7.398,
540 1.313, 6.409, 19.229, 8.633, 5.036, 1.380,
541 1.295, 6.219, 18.751, 8.748, 10.184, 1.803,
542 1.277, 6.099, 20.386, 8.011, 10.007, 2.272, 1.948,
543 1.563, 6.312, 21.868, 5.762, 11.245, 7.250,
544 0.9198, 6.5408, 18.9727, 24.9149, 15.0161, 6.6284,
545 1.202, 5.582, 19.527, 18.741, 8.411, 14.387, 4.042, 2.108,
546 1.159, 5.467, 18.802, 33.905, 8.300, 9.342, 1.025,
547 1.124, 5.331, 18.078, 34.604, 8.127, 10.414, 1.322,
548 2.000, 8.000, 18.000, 18.000, 14.000, 8.000, 10.000, 2.000, 2.000,
549 2.000, 8.000, 18.000, 32.000, 18.000, 8.000, 2.000, 1.000, 3.000
561 732.61, 100.646, 23.550,
562 965.1, 129.85, 31.60,
563 1525.9, 234.9, 56.18,
564 2701, 476.5, 150.42, 16.89,
565 3206.1, 586.4, 186.8, 23.52, 14.91,
566 5551.6, 472.43, 124.85, 22.332,
567 8554.6, 850.58, 93.47, 39.19, 19.46,
568 12254.7, 1279.29, 200.35, 49.19, 17.66,
569 14346.9, 1532.28, 262.71, 74.37, 23.03,
570 15438.5, 1667.96, 294.1, 70.69, 16.447,
571 19022.1, 2150.79, 455.79, 179.87, 57.89, 20.95,
572 24643, 2906.4, 366.85, 22.24,
573 34394, 4365.3, 589.36, 129.42, 35.59, 18.42,
574 43664.3, 5824.91, 909.79, 175.47, 54.89, 19.63,
575 49948, 6818.2, 1036.1, 172.65, 70.89, 33.87, 14.54,
576 58987, 8159, 1296.6, 356.75, 101.03, 16.52,
577 88926, 18012, 3210, 575, 108.7, 30.8,
578 115025.9, 17827.44, 3214.36, 750.41, 305.21, 105.50, 38.09, 21.25,
579 128342, 20254, 3601.8, 608.1, 115.0, 42.75, 17.04,
580 131872, 20903, 3757.4, 682.1, 105.2, 44.89, 17.575,
581 154449, 25067, 5105.0, 987.44, 247.59, 188.1, 40.61, 19.2, 15.17,
582 167282, 27868, 6022.7, 1020.4, 244.81, 51.33, 13, 11.06, 14.43
712 0.9637, 0.9872, 0.9469, 0.9875, 0.91, 0.989, 0.9507, 0.9773, 0.8621, 0.979,
713 0.8357, 0.868, 0.9417, 0.9466, 0.8911, 0.905, 0.944, 0.9607, 0.928, 0.96,
714 0.9098, 0.976, 0.8425, 0.8099, 0.7858, 0.947, 0.7248, 0.9106, 0.9246, 0.6821,
715 0.7223, 0.9784, 0.774, 0.7953, 0.829, 0.9405, 0.8318, 0.8583, 0.8563, 0.8481,
716 0.8207, 0.9033, 0.8063, 0.7837, 0.7818, 0.744, 0.875, 0.7693, 0.7871, 0.8459,
717 0.8231, 0.8462, 0.853, 0.8736, 0.856, 0.8762, 0.8629, 0.8323, 0.8064, 0.7828,
718 0.7533, 0.7273, 0.7093, 0.7157, 0.6823, 0.6612, 0.6418, 0.6395, 0.6323, 0.6221,
719 0.6497, 0.6746, 0.8568, 0.8541, 0.6958, 0.6962, 0.7051, 0.863, 0.8588, 0.7226,
720 0.7454, 0.78, 0.7783, 0.7996, 0.8216, 0.8632, 0.8558, 0.8792, 0.8745, 0.8676,
721 0.8321, 0.8272, 0.7999, 0.7934, 0.7787, 0.7851, 0.7692, 0.7598};
G4double GetOscillatorEnergy(G4int Z, G4int nbOfTheShell) const
void set(double x, double y, double z)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double DEDXPerElement(G4int Z, G4double kineticEnergy)
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
G4int SelectRandomAtomNumber(const G4Material *)
G4ICRU73QOModel(const G4ParticleDefinition *p=0, const G4String &nam="ICRU73QO")
G4int GetNumberOfShells(G4int Z) const
G4double GetL2(G4double normEnergy) const
static constexpr double MeV
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double kinEnergy) final
static const G4double ShellEnergy[NQODATA]
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy) override
void SetHighEnergyLimit(G4double)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
static G4MaterialTable * GetMaterialTable()
static const G4double L1[22][2]
static constexpr double keV
G4double MaxSecondaryKinEnergy(const G4DynamicParticle *dynParticle)
static constexpr double twopi_mc2_rcl2
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy) override
const G4ThreeVector & GetMomentumDirection() const
const G4ElementVector * GetElementVector() const
const G4String & GetParticleName() const
Hep3Vector & rotateUz(const Hep3Vector &)
static const G4int ZElementAvailable[NQOELEM]
void SetProposedMomentumDirection(const G4ThreeVector &dir)
static const G4int NQOELEM
static const G4int startElemIndex[NQOELEM]
G4double G4Log(G4double x)
G4double GetShellStrength(G4int Z, G4int nbOfTheShell) const
G4double GetShellEnergy(G4int Z, G4int nbOfTheShell) const
static constexpr double proton_mass_c2
G4ParticleChangeForLoss * GetParticleChangeForLoss()
static const G4double SubShellOccupation[NQODATA]
void SetDeexcitationFlag(G4bool val)
static const G4double L2[14][2]
static constexpr double electron_mass_c2
virtual G4double ComputeCrossSectionPerElectron(const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy) final
static constexpr double twopi
static G4int GetNumberOfShells(G4int Z)
G4double DEDX(const G4Material *material, G4double kineticEnergy)
static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb)
static constexpr double eV
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length) override
void SetAngularDistribution(G4VEmAngularDistribution *)
G4DensityEffectData * denEffData
static const G4double factorBethe[99]
const G4ParticleDefinition * particle
static G4Electron * Electron()
static const G4double L0[67][2]
std::vector< G4Material * > G4MaterialTable
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4ThreeVector GetMomentum() const
std::vector< G4Element * > G4ElementVector
G4double GetPlasmaEnergy(G4int idx) const
static constexpr double c_light
G4int GetElementIndex(G4int Z, G4State mState) const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4bool UseAngularGeneratorFlag() const
static G4double GetBindingEnergy(G4int Z, G4int SubshellNb)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
G4VEmAngularDistribution * GetAngularDistribution()
const G4Material * GetMaterial() const
void SetParticle(const G4ParticleDefinition *p)
const G4double * GetAtomicNumDensityVector() const
static const G4int nbofShellsForElement[NQOELEM]
static constexpr double fine_structure_const
G4double GetL1(G4double normEnergy) const
G4double GetL0(G4double normEnergy) const
G4ParticleChangeForLoss * fParticleChange
G4ParticleDefinition * theElectron
G4double GetElectronDensity() const
size_t GetNumberOfElements() const
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double) override
T min(const T t1, const T t2)
brief Return the smallest of the two arguments