75 asymmetry /= ((
k0 - 2.) *
k0 - 2.) *
sqr(k1) *
G4Log(k1) +
76 2. *
k0 * (
k0 * (
k0 + 1.) * (
k0 + 8.) + 2.);
81 ed <<
"ERROR in G4PolarizedComptonModel::ComputeAsymmetryPerAtom.\n"
82 <<
" asymmetry = " << asymmetry <<
"\n";
83 G4Exception(
"G4PolarizedComptonModel::ComputeAsymmetryPerAtom",
"pol035",
96 pd, kinEnergy,
Z,
A, cut,
emax);
101 xs *= (1. + polzz * asym);
123 G4cout <<
"G4PolarizedComptonModel::SampleSecondaries in "
144 if(targetIsPolarized)
165 G4double eps0 = 1. / (1. + 2. * E0_m);
186 PrintWarning(aDynamicGamma, nloop, greject, onecost, Phi,
187 "too many iterations");
194 if(alpha1 >
alpha2 * rndm[0])
200 epsilon = std::sqrt(epsilon0sq + (1. - epsilon0sq) * rndm[1]);
204 sint2 = onecost * (2. - onecost);
210 greject = gdist / gdiced;
214 PrintWarning(aDynamicGamma, nloop, greject, onecost, Phi,
215 "theta majoranta wrong");
218 }
while(greject < rndm[2]);
224 cosTeta = 1. - onecost;
225 sinTeta = std::sqrt(sint2);
234 Phi =
twopi * rndm[0];
237 PrintWarning(aDynamicGamma, nloop, greject, onecost, Phi,
238 "too many iterations");
261 greject = gdist / gdiced;
265 PrintWarning(aDynamicGamma, nloop, greject, onecost, Phi,
266 "phi majoranta wrong");
271 PrintWarning(aDynamicGamma, nloop, greject, onecost, Phi,
272 "phi loop ineffective");
279 }
while(greject < rndm[1]);
281 G4double dirx = sinTeta * std::cos(Phi);
282 G4double diry = sinTeta * std::sin(Phi);
287 gamDirection1.
rotateUz(gamDirection0);
311 G4cout <<
"========================================" <<
G4endl;
312 G4cout <<
" nInteractionFrame = " << nInteractionFrame <<
G4endl;
313 G4cout <<
" GammaDirection0 = " << gamDirection0 <<
G4endl;
323 G4cout <<
"----------------------------------------" <<
G4endl;
326 G4cout <<
"----------------------------------------" <<
G4endl;
349 ed <<
"ERROR in Polarizaed Compton Scattering !\n";
350 ed <<
"Polarization of final photon more than 100%.\n";
353 G4Exception(
"G4PolarizedComptonModel::SampleSecondaries",
"pol033",
361 G4cout <<
" GammaDirection1 = " << gamDirection1 <<
G4endl;
366 G4double eKinEnergy = gamEnergy0 - gamEnergy1;
371 gamEnergy0 * gamDirection0 - gamEnergy1 * gamDirection1;
372 eDirection = eDirection.
unit();
385 <<
G4endl <<
" ElecDirection = " << eDirection <<
G4endl;
395 ed <<
"ERROR in Polarized Compton Scattering !\n";
396 ed <<
"Polarization of final electron more than 100%.\n";
399 G4Exception(
"G4PolarizedComptonModel::SampleSecondaries",
"pol034",
405 fvect->push_back(aElectron);
425 ed <<
"Problem of scattering sampling: " <<
sss <<
"\n"
426 <<
"Niter= " << nloop <<
" grej= " << grej
427 <<
" cos(theta)= " << 1.0 - onecos <<
" phi= " << phi <<
"\n"
431 G4Exception(
"G4PolarizedComptonModel::SampleSecondaries",
"em0044",
static const char sss[MAX_N_PAR+2]
static const G4double emax
G4double epsilon(G4double density, G4double temperature)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
static constexpr double twopi
static constexpr double MeV
G4GLOB_DLL std::ostream G4cout
Hep3Vector & rotateUz(const Hep3Vector &)
virtual void flatArray(const int size, double *vect)=0
void SetPolarization(const G4ThreeVector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
const G4ThreeVector & GetPolarization() const
G4double lowestSecondaryEnergy
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) override
G4ParticleChangeForGamma * fParticleChange
G4ParticleDefinition * theElectron
const G4String & GetName() const
const G4Track * GetCurrentTrack() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposePolarization(const G4ThreeVector &dir)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
static G4ThreeVector GetFrame(const G4ThreeVector &, const G4ThreeVector &)
bool IsPolarized(G4LogicalVolume *lVol) const
const G4StokesVector GetVolumePolarization(G4LogicalVolume *lVol) const
static G4PolarizationManager * GetInstance()
void PrintWarning(const G4DynamicParticle *, G4int, G4double grej, G4double onecos, G4double phi, const G4String) const
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4double ComputeAsymmetryPerAtom(G4double gammaEnergy, G4double Z)
G4StokesVector fBeamPolarization
G4StokesVector finalElectronPolarization
G4PolarizedComptonModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="Polarized-Compton")
virtual ~G4PolarizedComptonModel() override
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) override
G4StokesVector fTargetPolarization
static constexpr G4int fLoopLim
G4StokesVector fFinalGammaPolarization
G4VPolarizedXS * fCrossSectionCalculator
static const G4StokesVector ZERO
void InvRotateAz(G4ThreeVector nInteractionFrame, G4ThreeVector particleDirection)
void RotateAz(G4ThreeVector nInteractionFrame, G4ThreeVector particleDirection)
G4VPhysicalVolume * GetVolume() const
G4double LowEnergyLimit() const
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4LogicalVolume * GetLogicalVolume() const
virtual void Initialize(G4double, G4double, G4double, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0)=0
virtual G4StokesVector GetPol2()
virtual G4StokesVector GetPol3()