85                                 G4bool IsScatProjToProjCase,
 
  106                               adjointPrimKinEnergy,
 
  108                               IsScatProjToProjCase); 
 
  117  G4double projectileTotalEnergy = projectileM0+projectileKinEnergy;
 
  118  G4double projectileP2 = projectileTotalEnergy*projectileTotalEnergy - projectileM0*projectileM0;       
 
  125  if (IsScatProjToProjCase) {
 
  128  G4double companionTotalEnergy =companionM0+ projectileKinEnergy-adjointPrimKinEnergy;
 
  129  G4double companionP2 = companionTotalEnergy*companionTotalEnergy - companionM0*companionM0;    
 
  134  G4double  P_parallel = (adjointPrimP*adjointPrimP +  projectileP2 - companionP2)/(2.*adjointPrimP);
 
  135  G4double  P_perp = std::sqrt( projectileP2 -  P_parallel*P_parallel);
 
  139  projectileMomentum.rotateUz(dir_parallel);
 
  143  if (!IsScatProjToProjCase ){ 
 
  161                        G4bool IsScatProjToProjCase,
 
  179  if (!IsScatProjToProjCase){
 
  181         eEnergy=adjointPrimKinEnergy;
 
  184         if (Emin>=Emax) 
return;
 
  187         newCS=newCS*(b-
a)/eEnergy;
 
  195         if (Emin>=Emax) 
return;
 
  196         G4double diff1=Emin-adjointPrimKinEnergy;
 
  197         G4double diff2=Emax-adjointPrimKinEnergy;
 
  199         G4double t1=adjointPrimKinEnergy*(1./diff1-1./diff2);
 
  205         newCS=newCS*sum_t/adjointPrimKinEnergy/adjointPrimKinEnergy;
 
  209                 projectileKinEnergy =adjointPrimKinEnergy +1./(1./diff1-q);
 
  214                 projectileKinEnergy =1./(1./Emin-q);
 
  217                 projectileKinEnergy=Emin*std::pow(Emax/Emin,
G4UniformRand());
 
  220         eEnergy=projectileKinEnergy-adjointPrimKinEnergy;
 
  227  G4double diffCS_perAtom_Used=twopi_mc2_rcl2*mass*adjointPrimKinEnergy/projectileKinEnergy/projectileKinEnergy/eEnergy/eEnergy; 
 
  243  w_corr*=diffCS/diffCS_perAtom_Used;
 
  260  G4double projectileTotalEnergy = projectileM0+projectileKinEnergy;
 
  261  G4double projectileP2 = projectileTotalEnergy*projectileTotalEnergy - projectileM0*projectileM0;       
 
  268  if (IsScatProjToProjCase) {
 
  271  G4double companionTotalEnergy =companionM0+ projectileKinEnergy-adjointPrimKinEnergy;
 
  272  G4double companionP2 = companionTotalEnergy*companionTotalEnergy - companionM0*companionM0;    
 
  277  G4double  P_parallel = (adjointPrimP*adjointPrimP +  projectileP2 - companionP2)/(2.*adjointPrimP);
 
  278  G4double  P_perp = std::sqrt( projectileP2 -  P_parallel*P_parallel);
 
  282  projectileMomentum.rotateUz(dir_parallel);
 
  286  if (!IsScatProjToProjCase ){ 
 
  320  if (kinEnergyProj>Emin_proj && kinEnergyProj<=Emax_proj){ 
 
  327         if (kinEnergyProj >2.*
MeV){
 
  337         dSigmadEprod=(sigma1-sigma2)/dE;
 
  338         if (dSigmadEprod>1.) {
 
  341                 G4cout<<
"dsigma "<<kinEnergyProj/
MeV<<
'\t'<<kinEnergyProd/
MeV<<
'\t'<<dSigmadEprod<<
G4endl;
 
  354          G4double deltaKinEnergy = kinEnergyProd;
 
  368                 G4double etot2         = totEnergy*totEnergy;
 
  369                 G4double beta2 = kinEnergyProj*(kinEnergyProj + 2.0*
mass)/etot2;
 
  372                 f = 1.0 - beta2*deltaKinEnergy/Tmax;
 
  374                         f1 = 0.5*deltaKinEnergy*deltaKinEnergy/etot2;
 
  380                         G4double x2 = 0.5*electron_mass_c2*deltaKinEnergy/(mass*
mass);
 
  381                         gg *= (1.0 + 
magMoment2*(x2 - f1/f)/(1.0 + x2));
 
  384                         G4cout << 
"### G4BetheBlochModel in Adjoint Sim WARNING: g= " << 
g 
  407         pname != 
"deuteron" && pname != 
"triton") {
 
  431       formfact = 2.0*electron_mass_c2/(x*x);
 
  440                                              G4bool IsScatProjToProjCase)
 
  448   if (!IsScatProjToProjCase ){
 
  452                 Cross*=(1./Emin_proj -1./Emax_proj)/primEnergy;
 
  465         G4double diff1=Emin_proj-primEnergy;
 
  466         G4double diff2=Emax_proj-primEnergy;
 
  467         G4double t1=(1./diff1+1./Emin_proj-1./diff2-1./Emax_proj)/primEnergy;
 
  469         G4double t2=2.*std::log(Emax_proj/Emin_proj)/primEnergy/primEnergy;
 
  487 { 
return PrimAdjEnergy+Tcut;
 
G4double one_minus_ratio_2
 
G4double GetKineticEnergy() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
G4double GetPostStepWeightCorrection()
 
const G4DynamicParticle * GetDynamicParticle() const 
 
G4double SampleAdjSecEnergyFromCSMatrix(size_t MatrixIndex, G4double prim_energy, G4bool IsScatProjToProjCase)
 
G4ParticleDefinition * theDirectPrimaryPartDef
 
void ProposeParentWeight(G4double finalWeight)
 
G4double GetZ13(G4double Z)
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const 
 
virtual G4double GetSecondAdjEnergyMaxForScatProjToProjCase(G4double PrimAdjEnergy)
 
void RapidSampleSecondaries(const G4Track &aTrack, G4bool IsScatProjToProjCase, G4ParticleChange *fParticleChange)
 
static G4AdjointElectron * AdjointElectron()
 
G4double CS_biasing_factor
 
G4Material * currentMaterial
 
G4ParticleDefinition * theAdjEquivOfDirectPrimPartDef
 
static G4NistManager * Instance()
 
const G4String & GetParticleName() const 
 
virtual G4double GetSecondAdjEnergyMinForScatProjToProjCase(G4double PrimAdjEnergy, G4double Tcut=0)
 
virtual ~G4AdjointhIonisationModel()
 
G4double GetTotalMomentum() const 
 
void DefineProjectileProperty()
 
void SetSecondaryWeightByProcess(G4bool)
 
void SetParentWeightByProcess(G4bool)
 
G4VEmModel * theDirectEMModel
 
G4GLOB_DLL std::ostream G4cout
 
G4double GetElectronDensity() const 
 
const G4ThreeVector & GetMomentumDirection() const 
 
static G4Proton * Proton()
 
const G4String & GetParticleType() const 
 
static const G4double A[nN]
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
void DefineCurrentMaterial(const G4MaterialCutsCouple *couple)
 
G4bool UseOnlyOneMatrixForAllElements
 
G4VEmModel * theBraggDirectEMModel
 
virtual G4double AdjointCrossSection(const G4MaterialCutsCouple *aCouple, G4double primEnergy, G4bool IsScatProjToProjCase)
 
G4double GetPDGMass() const 
 
G4double mass_ratio_projectile
 
static G4AdjointProton * AdjointProton()
 
virtual void SampleSecondaries(const G4Track &aTrack, G4bool IsScatProjToProjCase, G4ParticleChange *fParticleChange)
 
void ProposeEnergy(G4double finalEnergy)
 
G4double one_plus_ratio_2
 
void AddSecondary(G4Track *aSecondary)
 
virtual G4double AdjointCrossSection(const G4MaterialCutsCouple *aCouple, G4double primEnergy, G4bool IsScatProjToProjCase)
 
G4double GetWeight() const 
 
static const G4double Emin
 
G4double GetPDGSpin() const 
 
static const G4double Emax
 
G4ParticleDefinition * theAdjEquivOfDirectSecondPartDef
 
G4double currentTcutForDirectSecond
 
G4bool UseMatrixPerElement
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
G4double GetPDGMagneticMoment() const 
 
void ProposeTrackStatus(G4TrackStatus status)
 
virtual G4double GetSecondAdjEnergyMinForProdToProjCase(G4double PrimAdjEnergy)
 
static const double eplus
 
G4double GetPDGCharge() const 
 
static G4AdjointCSManager * GetAdjointCSManager()
 
G4int GetLeptonNumber() const 
 
virtual void CorrectPostStepWeight(G4ParticleChange *fParticleChange, G4double old_weight, G4double adjointPrimKinEnergy, G4double projectileKinEnergy, G4bool IsScatProjToProjCase)
 
virtual G4double DiffCrossSectionPerAtomPrimToSecond(G4double kinEnergyProj, G4double kinEnergyProd, G4double Z, G4double A=0.)
 
G4AdjointhIonisationModel(G4ParticleDefinition *projectileDefinition)
 
virtual G4double GetSecondAdjEnergyMaxForProdToProjCase(G4double PrimAdjEnergy)
 
G4bool second_part_of_same_type