80 return 4*costheta2/(2*costheta2-klk2+2*std::sqrt(costheta2*(costheta2-klk2)));
82 return std::norm(2*std::sqrt(costheta2)/(std::sqrt(costheta2) + std::sqrt(std::complex<G4double>(costheta2 - klk2))));
93 (2*costhetas2+klks2+2*std::sqrt(costhetas2*(costhetas2+klks2)));
107 if ((std::fabs(thetai-thetao)<AngCut) && (std::fabs(phio)<AngCut))
113 G4double sinthetai=std::sin(thetai);
114 G4double sinthetao=std::sin(thetao);
116 (sinthetai*sinthetai+sinthetao*sinthetao-
117 2.*sinthetai*sinthetao*std::cos(phio));
122 return b2*w2/twopi*std::exp(-mu_squared*w2/2);
139 if ((std::fabs(thetarefract-thetaSo)<AngCut) && (std::fabs(phiSo)<AngCut))
143 G4double sinthetai=std::sin(thetai);
144 G4double sinthetaSo=std::sin(thetaSo);
147 mu_squared=k*k*sinthetai*sinthetai+kS*kS*sinthetaSo*sinthetaSo-
148 2.*k*kS*sinthetai*sinthetaSo*std::cos(phiSo);
153 return b2*w2/twopi*std::exp(-mu_squared*w2/2);
170 G4double a_max_theta_o, max_theta_o=theta_i, a_max_phi_o, max_phi_o=0.;
180 G4double ang_steptheta=90.*degree/(AngNoTheta-1);
181 G4double ang_stepphi=360.*degree/(AngNoPhi-1);
182 G4double costheta_i=std::cos(theta_i);
183 G4double costheta_i_squared=costheta_i*costheta_i;
186 G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/
187 hbarc_squared*fermipot*fermipot;
195 G4double k2=2*neutron_mass_c2*E/hbarc_squared;
201 for (theta_o=0.*degree; theta_o<=90.*degree+1e-6; theta_o+=ang_steptheta)
203 costheta_o_squared=std::cos(theta_o)*std::cos(theta_o);
207 for (phi_o=-180.*degree; phi_o<=180.*degree+1e-6; phi_o+=ang_stepphi)
211 Intens=kl4d4/costheta_i*
S2(costheta_i_squared,klk2)*
212 S2(costheta_o_squared,klk2)*
213 Fmu(k2,theta_i,theta_o,phi_o,b2,w2,AngCut)*std::sin(theta_o);
230 wkeit+=Intens*ang_steptheta*ang_stepphi;
243 while ((ang_stepphi>=AngCut*AngCut) || (ang_steptheta>=AngCut*AngCut))
245 a_max_theta_o=max_theta_o;
246 a_max_phi_o=max_phi_o;
254 for (theta_o=a_max_theta_o-ang_steptheta;
255 theta_o<=a_max_theta_o-ang_steptheta+1e-6;
256 theta_o+=ang_steptheta)
259 costheta_o_squared=std::cos(theta_o)*std::cos(theta_o);
260 for (phi_o=a_max_phi_o-ang_stepphi;
261 phi_o<=a_max_phi_o+ang_stepphi+1e-6;
265 Intens=kl4d4/costheta_i*
S2(costheta_i_squared, klk2)*
266 S2(costheta_o_squared,klk2)*
267 Fmu(k2,theta_i,theta_o,phi_o,b2,w2,AngCut)*std::sin(theta_o);
290 G4double a_max_thetas_o, max_thetas_o = theta_i;
291 G4double a_max_phis_o, max_phis_o = 0.;
295 G4double ang_steptheta=180.*degree/(AngNoTheta-1);
296 G4double ang_stepphi=180.*degree/(AngNoPhi-1);
297 G4double costheta_i=std::cos(theta_i);
298 G4double costheta_i_squared=costheta_i*costheta_i;
303 if (E < fermipot)
return wkeit;
306 G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/
307 hbarc_squared*fermipot*fermipot;
312 G4double klks2=fermipot/(E-fermipot);
315 G4double ksdk=std::sqrt((E-fermipot)/E);
320 G4double k=std::sqrt(2*neutron_mass_c2*E/hbarc_squared);
325 for (thetas_o=0.*degree; thetas_o<=90.*degree+1e-6; thetas_o+=ang_steptheta)
327 costhetas_o_squared=std::cos(thetas_o)*std::cos(thetas_o);
329 for (phis_o=-180.*degree; phis_o<=180.*degree+1e-6; phis_o+=ang_stepphi)
332 if (costhetas_o_squared>=-klks2) {
337 if (std::fabs(std::sin(theta_i)/ksdk) <= 1.)
338 thetarefract = std::asin(std::sin(theta_i)/ksdk);
340 IntensS = kl4d4/costheta_i*ksdk*
S2(costheta_i_squared, klk2)*
341 SS2(costhetas_o_squared,klks2)*
342 FmuS(k,kS,theta_i,thetas_o,phis_o,b2,w2,AngCut,thetarefract)*
353 wkeit+=IntensS*ang_steptheta*ang_stepphi;
364 while (ang_stepphi>=AngCut*AngCut || ang_steptheta>=AngCut*AngCut)
366 a_max_thetas_o=max_thetas_o;
367 a_max_phis_o=max_phis_o;
372 for (thetas_o=a_max_thetas_o-ang_steptheta;
373 thetas_o<=a_max_thetas_o-ang_steptheta+1e-6;
374 thetas_o+=ang_steptheta)
376 costhetas_o_squared=std::cos(thetas_o)*std::cos(thetas_o);
377 for (phis_o=a_max_phis_o-ang_stepphi;
378 phis_o<=a_max_phis_o+ang_stepphi+1e-6;
382 if (std::fabs(std::sin(theta_i)/ksdk) <= 1.)
383 thetarefract = std::asin(std::sin(theta_i)/ksdk);
385 IntensS=kl4d4/costheta_i*ksdk*
S2(costheta_i_squared, klk2)*
386 SS2(costhetas_o_squared,klks2)*
387 FmuS(k,kS,theta_i,thetas_o,phis_o,b2,w2,AngCut,thetarefract)*
392 max_thetas_o=thetas_o;
412 G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/
413 hbarc_squared*fermipot*fermipot;
418 G4double costheta_i=std::cos(theta_i);
419 G4double costheta_o=std::cos(theta_o);
423 return kl4d4/costheta_i*
S2(costheta_i*costheta_i, klk2)*
424 S2(costheta_o*costheta_o,klk2)*
425 Fmu(2*neutron_mass_c2*E/hbarc_squared,theta_i,theta_o,phi_o,b*b,w*w,AngCut)*
438 G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/
439 hbarc_squared*fermipot*fermipot;
444 G4double klks2=fermipot/(E-fermipot);
452 G4double ksdk=std::sqrt((E-fermipot)/E);
455 G4double k=std::sqrt(2*neutron_mass_c2*E/hbarc_squared);
460 G4double costheta_i=std::cos(theta_i);
461 G4double costhetas_o=std::cos(thetas_o);
466 if(std::fabs(std::sin(theta_i)/ksdk) <= 1.)thetarefract = std::asin(std::sin(theta_i)/ksdk);
468 return kl4d4/costheta_i*ksdk*
S2(costheta_i*costheta_i, klk2)*
469 SS2(costhetas_o*costhetas_o,klks2)*
470 FmuS(k,kS,theta_i,thetas_o,phis_o,b*b,w*w,AngCut,thetarefract)*
G4GLOB_DLL std::ostream G4cout
G4UCNMicroRoughnessHelper()
G4double ProbIplus(G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const
G4double FmuS(G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const
G4double IntIminus(G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double *, G4double) const
G4double S2(G4double, G4double) const
G4double SS2(G4double, G4double) const
static G4UCNMicroRoughnessHelper * GetInstance()
~G4UCNMicroRoughnessHelper()
G4double Fmu(G4double, G4double, G4double, G4double, G4double, G4double, G4double) const
G4double ProbIminus(G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const
G4double IntIplus(G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double *, G4double) const