66 prob.resize(nprob,0.0);
86 G4int idx = fShellIdx;
89 if(idx < 0 || idx >= nShells) {
92 prob.resize(nprob,0.0);
95 for(idx=0; idx<nShells; ++idx) {
101 for(idx=0; idx<nShells; ++idx) {
102 if(sum <= prob[idx]) {
break; }
114 static const G4int nmax = 100;
119 G4double eKinEnergy = bindingEnergy*x;
120 G4double ePotEnergy = bindingEnergy*(1.0 + x);
121 G4double e = kinEnergyFinal + ePotEnergy + electron_mass_c2;
122 G4double p = sqrt((e + electron_mass_c2)*(e - electron_mass_c2));
127 totEnergy += ePotEnergy;
128 totMomentum = sqrt((totEnergy + electron_mass_c2)
129 *(totEnergy - electron_mass_c2));
132 G4double eTotEnergy = eKinEnergy + electron_mass_c2;
133 G4double eTotMomentum = sqrt(eKinEnergy*(eTotEnergy + electron_mass_c2));
135 G4double sintet = sqrt((1 - costet)*(1 + costet));
150 if(0.0 == bindingEnergy) { isOK =
true; }
154 G4double x0 = p*(totMomentum + eTotMomentum*costet);
162 G4double x1 = p*eTotMomentum*sintet;
163 G4double x2 = totEnergy*(eTotEnergy - e) - e*eTotEnergy
164 - totMomentum*eTotMomentum*costet + electron_mass_c2*electron_mass_c2;
166 if(std::abs(y) <= 1.0) {
167 cost = -(x2 + x1*sqrt(1. - y*y))/x0;
168 if(std::abs(cost) <= 1.0) { isOK =
true; }
185 G4double sint = sqrt((1 - cost)*(1 + cost));
G4double G4Log(G4double x)
void set(double x, double y, double z)
Hep3Vector & rotateUz(const Hep3Vector &)
static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb)
static G4double GetBindingEnergy(G4int Z, G4int SubshellNb)
static G4int GetNumberOfShells(G4int Z)
G4DeltaAngle(const G4String &name="")
G4ThreeVector & SampleDirectionForShell(const G4DynamicParticle *dp, G4double kinEnergyFinal, G4int Z, G4int shellIdx, const G4Material *mat=nullptr) final
G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double kinEnergyFinal, G4int Z, const G4Material *mat=nullptr) final
const G4ThreeVector & GetMomentumDirection() const
const G4ParticleDefinition * GetParticleDefinition() const
G4double GetTotalEnergy() const
G4double GetTotalMomentum() const
static G4Electron * Electron()
G4ThreeVector fLocalDirection