86 G4bool IsScatProjToProjCase,
105 adjointPrimKinEnergy,
107 IsScatProjToProjCase);
116 G4double projectileTotalEnergy = projectileM0+projectileKinEnergy;
117 G4double projectileP2 = projectileTotalEnergy*projectileTotalEnergy - projectileM0*projectileM0;
124 if (IsScatProjToProjCase) {
127 G4double companionTotalEnergy =companionM0+ projectileKinEnergy-adjointPrimKinEnergy;
128 G4double companionP2 = companionTotalEnergy*companionTotalEnergy - companionM0*companionM0;
133 G4double P_parallel = (adjointPrimP*adjointPrimP + projectileP2 - companionP2)/(2.*adjointPrimP);
134 G4double P_perp = std::sqrt( projectileP2 - P_parallel*P_parallel);
138 projectileMomentum.
rotateUz(dir_parallel);
142 if (!IsScatProjToProjCase ){
175 if (kinEnergyProj>Emin_proj && kinEnergyProj<=Emax_proj){
187 dSigmadEprod=(sigma1-sigma2)/dE;
193 if (dSigmadEprod>1.) {
196 G4cout<<
"dsigma "<<kinEnergyProj/
MeV<<
'\t'<<kinEnergyProd/
MeV<<
'\t'<<dSigmadEprod<<
G4endl;
213 G4double deltaKinEnergy = kinEnergyProd;
227 G4double etot2 = totEnergy*totEnergy;
228 G4double beta2 = kinEnergyProj*(kinEnergyProj + 2.0*
mass)/etot2;
231 f = 1.0 - beta2*deltaKinEnergy/Tmax;
233 f1 = 0.5*deltaKinEnergy*deltaKinEnergy/etot2;
243 G4cout <<
"### G4BetheBlochModel in Adjoint Sim WARNING: gg= " << gg
286 if (UsedFwdCS >0) new_weight*= CorrectFwdCS/UsedFwdCS;
295 new_weight*=projectileKinEnergy/adjointPrimKinEnergy;
311 pname !=
"deuteron" && pname !=
"triton") {
352 {
return PrimAdjEnergy+Tcut;
static G4GenericIon * GenericIon()
G4bool second_part_of_same_type
CLHEP::Hep3Vector G4ThreeVector
static constexpr double hbar_Planck
static constexpr double MeV
G4double CS_biasing_factor
G4VEmModel * theBraggIonDirectEMModel
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Float_t x1[n_points_granero]
G4Material * currentMaterial
const G4ThreeVector & GetMomentumDirection() const
G4AdjointIonIonisationModel()
virtual ~G4AdjointIonIonisationModel()
const G4String & GetParticleName() const
const G4String & GetParticleType() const
static G4AdjointElectron * AdjointElectron()
G4double GetPDGCharge() const
void SetSecondaryWeightByProcess(G4bool)
Hep3Vector & rotateUz(const Hep3Vector &)
G4bool UseOnlyOneMatrixForAllElements
virtual void CorrectPostStepWeight(G4ParticleChange *fParticleChange, G4double old_weight, G4double adjointPrimKinEnergy, G4double projectileKinEnergy, G4bool IsScatProjToProjCase)
G4double GetPDGMass() const
void AddSecondary(G4Track *aSecondary)
virtual G4double DiffCrossSectionPerAtomPrimToSecond(G4double kinEnergyProj, G4double kinEnergyProd, G4double Z, G4double A=0.)
G4double currentTcutForDirectSecond
G4double GetWeight() const
static constexpr double proton_mass_c2
G4ParticleDefinition * theAdjEquivOfDirectSecondPartDef
static constexpr double c_squared
G4double GetPDGSpin() const
G4ParticleDefinition * theAdjEquivOfDirectPrimPartDef
static constexpr double electron_mass_c2
G4double GetPostStepWeightCorrection()
double A(double temperature)
void ProposeEnergy(G4double finalEnergy)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual G4double GetSecondAdjEnergyMinForScatProjToProjCase(G4double PrimAdjEnergy, G4double Tcut=0)
G4double GetPDGMagneticMoment() const
static G4AdjointCSManager * GetAdjointCSManager()
virtual void SampleSecondaries(const G4Track &aTrack, G4bool IsScatProjToProjCase, G4ParticleChange *fParticleChange)
static constexpr double eplus
G4VEmModel * theDirectEMModel
void SetParentWeightByProcess(G4bool)
void ProposeParentWeight(G4double finalWeight)
virtual G4double GetSecondAdjEnergyMinForProdToProjCase(G4double PrimAdjEnergy)
virtual G4double GetSecondAdjEnergyMaxForProdToProjCase(G4double PrimAdjEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4int GetLeptonNumber() const
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
G4double GetZ13(G4double Z) const
void DefineProjectileProperty()
G4double SampleAdjSecEnergyFromCSMatrix(size_t MatrixIndex, G4double prim_energy, G4bool IsScatProjToProjCase)
void SetIon(G4ParticleDefinition *adj_ion, G4ParticleDefinition *fwd_ion)
virtual G4double GetSecondAdjEnergyMaxForScatProjToProjCase(G4double PrimAdjEnergy)
G4double GetTotalMomentum() const
G4double one_minus_ratio_2
G4ParticleDefinition * theDirectPrimaryPartDef
Float_t x2[n_points_geant4]
void ProposeTrackStatus(G4TrackStatus status)
static constexpr double GeV
G4double mass_ratio_projectile
const G4DynamicParticle * GetDynamicParticle() const
G4VEmModel * theBetheBlochDirectEMModel
static G4NistManager * Instance()
G4bool UseMatrixPerElement
G4double one_plus_ratio_2