58   use_only_bragg = 
false; 
 
   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 ){ 
 
  172  G4double kinEnergyProjScaled = massRatio*kinEnergyProj;
 
  175  if (kinEnergyProj>Emin_proj && kinEnergyProj<=Emax_proj){ 
 
  183     if (kinEnergyProjScaled >2.*
MeV && !use_only_bragg) 
theDirectEMModel = theBetheBlochDirectEMModel; 
 
  187     dSigmadEprod=(sigma1-sigma2)/dE;
 
  193     if (dSigmadEprod>1.) {
 
  196         G4cout<<
"dsigma "<<kinEnergyProj/
MeV<<
'\t'<<kinEnergyProd/
MeV<<
'\t'<<dSigmadEprod<<
G4endl;
 
  213         G4double deltaKinEnergy = kinEnergyProd;
 
  226             G4double totEnergy     = kinEnergyProj + mass;
 
  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;
 
  240                     gg *= (1.0 + magMoment2*(x2 - f1/
f)/(1.0 + x2));
 
  243                     G4cout << 
"### G4BetheBlochModel in Adjoint Sim WARNING: gg= " << gg
 
  262   DefineProjectileProperty();
 
  279  G4double kinEnergyProjScaled = massRatio*projectileKinEnergy;
 
  281  if (kinEnergyProjScaled >2.*
MeV && !use_only_bragg) 
theDirectEMModel = theBetheBlochDirectEMModel; 
 
  286  if (UsedFwdCS >0)  new_weight*= CorrectFwdCS/UsedFwdCS;
 
  295   new_weight*=projectileKinEnergy/adjointPrimKinEnergy;
 
  305 void G4AdjointIonIonisationModel::DefineProjectileProperty()
 
  311     pname != 
"deuteron" && pname != 
"triton") {
 
  322     ratio2 = ratio*ratio;
 
  323     one_plus_ratio_2=(1+ratio)*(1+ratio);
 
  324     one_minus_ratio_2=(1-ratio)*(1-ratio);
 
  327     magMoment2 = magmom*magmom - 1.0;
 
  331       if(spin == 0.0 && mass < 
GeV) {x = 0.736*
GeV;}
 
  332       else if(mass > 
GeV) {
 
  337       tlimit   = 2.0/formfact;
 
  346   G4double Tmax=PrimAdjEnergy*one_plus_ratio_2/(one_minus_ratio_2-2.*ratio*PrimAdjEnergy/mass);
 
  352 { 
return PrimAdjEnergy+Tcut;
 
  362 {  
G4double Tmin= (2*PrimAdjEnergy-4*mass + std::sqrt(4.*PrimAdjEnergy*PrimAdjEnergy +16.*mass*mass + 8.*PrimAdjEnergy*mass*(1/ratio +ratio)))/4.;
 
G4double GetKineticEnergy() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
G4double GetPostStepWeightCorrection()
 
const G4DynamicParticle * GetDynamicParticle() const 
 
G4double SampleAdjSecEnergyFromCSMatrix(size_t MatrixIndex, G4double prim_energy, G4bool IsScatProjToProjCase)
 
G4ParticleDefinition * theDirectPrimaryPartDef
 
virtual G4double DiffCrossSectionPerAtomPrimToSecond(G4double kinEnergyProj, G4double kinEnergyProd, G4double Z, G4double A=0.)
 
virtual G4double GetSecondAdjEnergyMinForProdToProjCase(G4double PrimAdjEnergy)
 
void ProposeParentWeight(G4double finalWeight)
 
G4double GetZ13(G4double Z)
 
static G4AdjointElectron * AdjointElectron()
 
G4double CS_biasing_factor
 
virtual void CorrectPostStepWeight(G4ParticleChange *fParticleChange, G4double old_weight, G4double adjointPrimKinEnergy, G4double projectileKinEnergy, G4bool IsScatProjToProjCase)
 
G4Material * currentMaterial
 
G4ParticleDefinition * theAdjEquivOfDirectPrimPartDef
 
static G4NistManager * Instance()
 
const G4String & GetParticleName() const 
 
G4double GetTotalMomentum() const 
 
void SetSecondaryWeightByProcess(G4bool)
 
void SetParentWeightByProcess(G4bool)
 
G4VEmModel * theDirectEMModel
 
G4GLOB_DLL std::ostream G4cout
 
void SetIon(G4ParticleDefinition *adj_ion, G4ParticleDefinition *fwd_ion)
 
const G4ThreeVector & GetMomentumDirection() const 
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
const G4String & GetParticleType() const 
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4bool UseOnlyOneMatrixForAllElements
 
virtual G4double GetSecondAdjEnergyMinForScatProjToProjCase(G4double PrimAdjEnergy, G4double Tcut=0)
 
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
static G4GenericIon * GenericIon()
 
virtual void SampleSecondaries(const G4Track &aTrack, G4bool IsScatProjToProjCase, G4ParticleChange *fParticleChange)
 
virtual ~G4AdjointIonIonisationModel()
 
G4double GetPDGMass() const 
 
G4AdjointIonIonisationModel()
 
G4double mass_ratio_projectile
 
virtual G4double GetSecondAdjEnergyMaxForScatProjToProjCase(G4double PrimAdjEnergy)
 
void ProposeEnergy(G4double finalEnergy)
 
virtual G4double GetSecondAdjEnergyMaxForProdToProjCase(G4double PrimAdjEnergy)
 
void AddSecondary(G4Track *aSecondary)
 
G4double GetWeight() const 
 
G4double GetPDGSpin() const 
 
G4ParticleDefinition * theAdjEquivOfDirectSecondPartDef
 
G4double currentTcutForDirectSecond
 
G4bool UseMatrixPerElement
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
G4double GetPDGMagneticMoment() const 
 
void ProposeTrackStatus(G4TrackStatus status)
 
G4double GetPDGCharge() const 
 
static G4AdjointCSManager * GetAdjointCSManager()
 
G4int GetLeptonNumber() const 
 
G4bool second_part_of_same_type