19 FormFactorDWBA::FormFactorDWBA(
const IFormFactor& form_factor) : mP_form_factor(form_factor.clone())
21 setName(
"FormFactorDWBA");
24 FormFactorDWBA::~FormFactorDWBA() =
default;
29 std::unique_ptr<const ILayerRTCoefficients> p_in_coefs =
30 mp_in_coeffs ? std::unique_ptr<const ILayerRTCoefficients>(mp_in_coeffs->clone()) :
nullptr;
31 std::unique_ptr<const ILayerRTCoefficients> p_out_coefs =
32 mp_out_coeffs ? std::unique_ptr<const ILayerRTCoefficients>(mp_out_coeffs->clone())
42 k_i_T.
setZ(-mp_in_coeffs->getScalarKz());
44 k_i_R.
setZ(-k_i_T.
z());
48 k_f_T.
setZ(mp_out_coeffs->getScalarKz());
50 k_f_R.
setZ(-k_f_T.
z());
53 double wavelength = wavevectors.getWavelength();
60 complex_t T_in = mp_in_coeffs->getScalarT();
61 complex_t R_in = mp_in_coeffs->getScalarR();
62 complex_t T_out = mp_out_coeffs->getScalarT();
63 complex_t R_out = mp_out_coeffs->getScalarR();
67 complex_t term_S = T_in * mP_form_factor->evaluate(k_TT) * T_out;
68 complex_t term_RS = R_in * mP_form_factor->evaluate(k_RT) * T_out;
69 complex_t term_SR = T_in * mP_form_factor->evaluate(k_TR) * R_out;
70 complex_t term_RSR = R_in * mP_form_factor->evaluate(k_RR) * R_out;
72 return term_S + term_RS + term_SR + term_RSR;
77 return mP_form_factor->bottomZ(rotation);
82 return mP_form_factor->topZ(rotation);
86 std::unique_ptr<const ILayerRTCoefficients> p_out_coeffs)
88 mp_in_coeffs = std::move(p_in_coeffs);
89 mp_out_coeffs = std::move(p_out_coeffs);
Defines and implements class ILayerRTCoefficients.
T z() const
Returns z-component in cartesian coordinate system.
void setZ(const T &a)
Sets z-component in cartesian coordinate system.
Pure virtual interface for rotations.
Holds all wavevector information relevant for calculating form factors.