79 adjointPrimKinEnergy, projectileKinEnergy,
105 G4double needed_diffCS = adjointPrimKinEnergy / projectileKinEnergy;
106 if(!IsScatProjToProj)
112 new_weight *= needed_diffCS / used_diffCS;
122 G4double projectileTotalEnergy = projectileM0 + projectileKinEnergy;
124 projectileTotalEnergy * projectileTotalEnergy - projectileM0 * projectileM0;
133 companionM0 + projectileKinEnergy - adjointPrimKinEnergy;
135 companionTotalEnergy * companionTotalEnergy - companionM0 * companionM0;
139 (adjointPrimP * adjointPrimP + projectileP2 - companionP2) /
141 G4double P_perp = std::sqrt(projectileP2 - P_parallel * P_parallel);
145 G4ThreeVector(P_perp * std::cos(phi), P_perp * std::sin(phi), P_parallel);
146 projectileMomentum.
rotateUz(dir_parallel);
148 if(!IsScatProjToProj)
173 if(kinEnergyProj > Emin_proj && kinEnergyProj <= Emax_proj)
185 G4double x = kinEnergyProd / kinEnergyProj;
188 G4double beta2 = 1.0 - 1.0 / gamma2;
194 fac * (1. - gg + ((1.0 - gg * x) / (x * x)) + ((1.0 - gg * y) / (y * y))) /
195 (beta2 * (
gam - 1.));
196 return dCS / kinEnergyProj;
static const G4double fac
static const G4double Emax
static const G4double Emin
static constexpr double twopi
CLHEP::Hep3Vector G4ThreeVector
Hep3Vector & rotateUz(const Hep3Vector &)
static G4AdjointElectron * AdjointElectron()
G4bool fWithRapidSampling
G4double DiffCrossSectionPerAtomPrimToSecond(G4double kinEnergyProj, G4double kinEnergyProd, G4double Z, G4double A=0.) override
~G4AdjointeIonisationModel() override
void SampleSecondaries(const G4Track &aTrack, G4bool isScatProjToProj, G4ParticleChange *fParticleChange) override
G4double DiffCrossSectionMoller(G4double kinEnergyProj, G4double kinEnergyProd)
G4AdjointeIonisationModel()
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
G4double GetTotalMomentum() const
static G4Electron * Electron()
void AddSecondary(G4Track *aSecondary)
void ProposeEnergy(G4double finalEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4double GetPDGMass() const
G4double GetWeight() const
const G4DynamicParticle * GetDynamicParticle() const
virtual G4double GetSecondAdjEnergyMaxForProdToProj(G4double primAdjEnergy)
G4double fLastAdjointCSForScatProjToProj
G4bool fSecondPartSameType
G4ParticleDefinition * fAdjEquivDirectSecondPart
virtual G4double DiffCrossSectionPerVolumePrimToScatPrim(const G4Material *aMaterial, G4double kinEnergyProj, G4double kinEnergyScatProj)
virtual G4double GetSecondAdjEnergyMinForScatProjToProj(G4double primAdjEnergy, G4double tcut=0.)
G4ParticleDefinition * fAdjEquivDirectPrimPart
virtual G4double GetSecondAdjEnergyMaxForScatProjToProj(G4double primAdjEnergy)
G4Material * fCurrentMaterial
virtual G4double DiffCrossSectionPerVolumePrimToSecond(const G4Material *aMaterial, G4double kinEnergyProj, G4double kinEnergyProd)
virtual void CorrectPostStepWeight(G4ParticleChange *fParticleChange, G4double old_weight, G4double adjointPrimKinEnergy, G4double projectileKinEnergy, G4bool isScatProjToProj)
G4double SampleAdjSecEnergyFromCSMatrix(size_t MatrixIndex, G4double prim_energy, G4bool isScatProjToProj)
G4bool fUseMatrixPerElement
virtual G4double GetSecondAdjEnergyMinForProdToProj(G4double primAdjEnergy)
G4ParticleDefinition * fDirectPrimaryPart
G4bool fOneMatrixForAllElements
G4double GetHighEnergyLimit()
G4double fLastAdjointCSForProdToProj
void ProposeTrackStatus(G4TrackStatus status)
void SetSecondaryWeightByProcess(G4bool)
void SetParentWeightByProcess(G4bool)
void ProposeParentWeight(G4double finalWeight)