52 theDirectStdBremModel = aModel;
55 isDirectModelInitialised =
false;
58 theEmModelManagerForFwdModels->
AddEmModel(1, theDirectStdBremModel, f, r);
61 highKinEnergy= 100.*
TeV;
62 lowKinEnergy = 1.0*
keV;
98 isDirectModelInitialised =
false;
101 theEmModelManagerForFwdModels->
AddEmModel(1, theDirectStdBremModel, f, r);
104 highKinEnergy= 1.*
GeV;
105 lowKinEnergy = 1.0*
keV;
116 {
if (theDirectStdBremModel)
delete theDirectStdBremModel;
117 if (theEmModelManagerForFwdModels)
delete theEmModelManagerForFwdModels;
123 G4bool IsScatProjToProjCase,
140 IsScatProjToProjCase);
145 adjointPrimKinEnergy,
147 IsScatProjToProjCase);
153 G4double projectileTotalEnergy = projectileM0+projectileKinEnergy;
154 G4double projectileP2 = projectileTotalEnergy*projectileTotalEnergy - projectileM0*projectileM0;
155 G4double projectileP = std::sqrt(projectileP2);
161 const G4double a1 = 0.625 , a2 = 3.*a1 ,
d = 27. ;
174 projectileMomentum=
G4ThreeVector(std::cos(phi)*sint,std::sin(phi)*sint,cost)*projectileP;
175 if (IsScatProjToProjCase) {
178 G4double cost1 = std::cos(dirProd.
angle(projectileMomentum));
179 G4double sint1 = std::sqrt(1.-cost1*cost1);
180 projectileMomentum=
G4ThreeVector(std::cos(phi)*sint1,std::sin(phi)*sint1,cost1)*projectileP;
188 if (!IsScatProjToProjCase ){
201 G4bool IsScatProjToProjCase,
219 if (!IsScatProjToProjCase){
220 gammaEnergy=adjointPrimKinEnergy;
223 if (Emin>=Emax)
return;
224 projectileKinEnergy=Emin*std::pow(Emax/Emin,
G4UniformRand());
225 diffCSUsed=lastCZ/projectileKinEnergy;
230 if (Emin>=Emax)
return;
232 G4double f2=(Emax-adjointPrimKinEnergy)/Emax/f1;
234 projectileKinEnergy=adjointPrimKinEnergy/(1.-f1*std::pow(f2,
G4UniformRand()));
235 gammaEnergy=projectileKinEnergy-adjointPrimKinEnergy;
236 diffCSUsed=lastCZ*adjointPrimKinEnergy/projectileKinEnergy/gammaEnergy;
253 w_corr*=diffCS/diffCSUsed;
263 G4double projectileTotalEnergy = projectileM0+projectileKinEnergy;
264 G4double projectileP2 = projectileTotalEnergy*projectileTotalEnergy - projectileM0*projectileM0;
265 G4double projectileP = std::sqrt(projectileP2);
271 const G4double a1 = 0.625 , a2 = 3.*a1 ,
d = 27. ;
284 projectileMomentum=
G4ThreeVector(std::cos(phi)*sint,std::sin(phi)*sint,cost)*projectileP;
285 if (IsScatProjToProjCase) {
288 G4double cost1 = std::cos(dirProd.
angle(projectileMomentum));
289 G4double sint1 = std::sqrt(1.-cost1*cost1);
290 projectileMomentum=
G4ThreeVector(std::cos(phi)*sint1,std::sin(phi)*sint1,cost1)*projectileP;
298 if (!IsScatProjToProjCase ){
314 {
if (!isDirectModelInitialised) {
316 isDirectModelInitialised =
true;
348 if (kinEnergyProj>Emin_proj && kinEnergyProj<=Emax_proj){
350 dCrossEprod=sigma/kinEnergyProd/std::log(kinEnergyProj/
keV);
372 G4double E1=kinEnergyProd,E2=kinEnergyProd*1.001;
377 dCrossEprod += theAtomNumDensityVector[i] * (C1-C2)/dE;
401 G4bool IsScatProjToProjCase)
402 {
if (!isDirectModelInitialised) {
404 isDirectModelInitialised =
true;
411 if (!IsScatProjToProjCase ){
419 if (Emax_proj>Emin_proj) Cross= lastCZ*std::log((Emax_proj-primEnergy)*Emin_proj/Emax_proj/(Emin_proj-primEnergy));
427 G4bool IsScatProjToProjCase)