20 const double prefactor = std::sqrt(2.0 /
M_PI);
21 double TransitionTanh(
double x)
23 return (1.0 - std::tanh(prefactor * x)) / 2.0;
25 double Transition(
double x,
double sigma)
28 return x < 0.0 ? 1.0 : 0.0;
29 return TransitionTanh(x / sigma);
42 for (
size_t i = 0; i < N; ++i) {
47 m_sigmas.push_back(roughness->getSigma());
63 std::vector<complex_t> result(z_values.size(), top_value);
64 for (
size_t i = 0; i <
m_zlimits.size(); ++i) {
66 for (
size_t j = 0; j < z_values.size(); ++j) {
68 auto t = Transition(arg,
m_sigmas[i]);
69 result[j] += sld_diff * t;
80 double default_margin = interface_span > 0.0 ? interface_span / 20.0 : 10.0;
81 double top_margin =
m_sigmas.front() > 0.0 ? 5.0 *
m_sigmas.front() : default_margin;
82 double bottom_margin =
m_sigmas.back() > 0.0 ? 5.0 *
m_sigmas.back() : default_margin;
83 double z_min =
m_zlimits.back() - bottom_margin;
84 double z_max =
m_zlimits.front() + top_margin;
85 return {z_min, z_max};
std::complex< double > complex_t
Defines class LayerRoughness.
Defines class ProcessedSample.
Defines class ProfileHelper.
Data structure that contains all the necessary data for scattering calculations.
double sliceBottomZ(size_t i) const
size_t numberOfSlices() const
const std::vector< Slice > & averageSlices() const
const LayerRoughness * bottomRoughness(size_t i) const
std::vector< complex_t > m_materialdata
std::pair< double, double > defaultLimits() const
std::vector< complex_t > calculateProfile(const std::vector< double > &z_values) const
std::vector< double > m_sigmas
ProfileHelper(const ProcessedSample &sample)
std::vector< double > m_zlimits