108 if (fr1>border) { fr1 = border; }
109 if (fr2>border) { fr2 = border; }
110 if (fr3>border) { fr3 = border; }
118 G4double add= ((1.-fr1)*(1.-fr1) + (1.-fr2)*(1.-fr2))/(fr3s*aa);
120 G4double fres = -rho*(1./fr1s + 1./fr2s)
121 + (
ab/(2.*(fr1*fr2*aa)))*(
G4Log(2.*
gam*aa/(fr1*fr2)))
122 + (
ab/(2.*fr1*fr2*(1-fr3)))*
G4Log(2.*
gam*(1.-fr3)/(fr1*fr2)) - add;
143 if (fr1>border) { fr1 = border; }
144 if (fr2>border) { fr2 = border; }
145 if (fr3>border) { fr3 = border; }
153 G4double add= ((1.-fr1)*(1.-fr1) + (1.-fr2)*(1.-fr2))/(fr3s*aa);
155 G4double fres = -rho*(1./fr1s + 1./fr2s)
156 + (
ab/(2.*(fr1*fr2*aa)))*(
G4Log(2.*
gam*aa/(fr1*fr2)))
157 + (
ab/(2.*fr1*fr2*(1-fr3)))*
G4Log(2.*
gam*(1.-fr3)/(fr1*fr2)) - add;
248 if(posiKinEnergy < 500*
MeV) {
258 if(posiKinEnergy == 0.0) {
260 G4double sint = sqrt((1. - cost)*(1. + cost));
271 pol.
set(-sinphi, cosphi, 0.0);
287 x1 = 1/((1/xmin) - ((1/xmin)-(1/xmax))*rndmEngine->
flat());
288 dmax =
ComputeFS(posiKinEnergy, x1,1.-x1,border);
290 x2 = 1 - rndmEngine->
flat()*(1-x2min);
291 d1 = dmax*rndmEngine->
flat();
292 d0 =
ComputeFS(posiKinEnergy,x1,x2,2-x1-x2);
302 G4double psi13 = 2*asin(sqrt(std::abs((x1+x3-1)/(x1*x3))));
303 G4double psi12 = 2*asin(sqrt(std::abs((x1+x2-1)/(x1*x2))));
316 G4double phot1Energy = 0.5*x1*TotalAvailableEnergy;
317 G4double phot2Energy = 0.5*x2*TotalAvailableEnergy;
318 G4double phot3Energy = 0.5*x3*TotalAvailableEnergy;
330 phot1Direction.
rotateUz(posiDirection);
331 phot2Direction.
rotateUz(posiDirection);
332 phot3Direction.
rotateUz(posiDirection);
378 vdp->push_back(aGamma1);
379 vdp->push_back(aGamma2);
380 if(aGamma3 !=
nullptr) { vdp->push_back(aGamma3); }
G4double G4Log(G4double x)
static constexpr double twopi
static constexpr double eV
static constexpr double MeV
void set(double x, double y, double z)
Hep3Vector & rotateUz(const Hep3Vector &)
void SetPolarization(const G4ThreeVector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
void ProposeTrackStatus(G4TrackStatus status)
G4double ComputeF0(G4double fr1, G4double fr2, G4double fr3)
G4double ComputeCrossSectionPerElectron(G4double kinEnergy)
G4ParticleChangeForGamma * fParticleChange
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0., G4double maxEnergy=DBL_MAX) final
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin=0.0, G4double maxEnergy=DBL_MAX) final
G4double ComputeF(G4double fr1, G4double fr2, G4double fr3, G4double kinEnergy)
G4eplusTo3GammaOKVIModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="eplus3ggOKVI")
const G4ParticleDefinition * theGamma
void Initialise(const G4ParticleDefinition *, const G4DataVector &) final
G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX) final
G4double ComputeFS(G4double fr1, G4double fr2, G4double fr3, G4double kinEnergy)
~G4eplusTo3GammaOKVIModel() override
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments