39 const size_t n_z = z_positions.
size();
41 size_t start_z_ind = n_z;
42 std::valarray<double> intensities(0.0, n_z);
44 double z_layer_bottom(0.0);
45 double z_layer_top(0.0);
46 for (
size_t i_layer = 0; i_layer < n_layers && start_z_ind != 0; ++i_layer) {
52 const complex_t R = p_coefficients->getScalarR();
53 const complex_t T = p_coefficients->getScalarT();
54 const complex_t kz_out = p_coefficients->getScalarKz();
58 size_t ip1_z = start_z_ind;
59 for (; ip1_z > 0; --ip1_z) {
60 const size_t i_z = ip1_z - 1;
61 if (i_layer + 1 != n_layers && z_positions[i_z] <= z_layer_bottom)
63 const double local_position = z_positions[i_z] - z_layer_top;
64 intensities[i_z] = std::norm(R *
exp_I(kz_out * local_position)
65 + T *
exp_I(kz_in * local_position));
std::complex< double > complex_t
complex_t exp_I(complex_t z)
Returns exp(I*z), where I is the imaginary unit.
Defines class DelayedProgressCounter.
Defines functor DepthProbeComputationTerm.
Defines class DepthProbeElement.
Defines class IFresnelMap.
Defines and implements class ILayerRTCoefficients.
Defines class ProcessedSample.
~DepthProbeComputationTerm()
DepthProbeComputationTerm(const ProcessedSample *p_sample)
void setProgressHandler(ProgressHandler *p_progress)
std::unique_ptr< DelayedProgressCounter > mP_progress_counter
void compute(DepthProbeElement &elem) const
const ProcessedSample * mp_sample
void setIntensities(T &&intensities)
const IAxis * getZPositions() const
bool isCalculated() const
Interface for one-dimensional axes.
virtual size_t size() const =0
retrieve the number of bins
std::unique_ptr< const ILayerRTCoefficients > getInCoefficients(const T &sim_element, size_t layer_index) const
Retrieves the amplitude coefficients for an incoming wavevector.
Data structure that contains all the necessary data for scattering calculations.
double sliceTopZ(size_t i) const
double sliceBottomZ(size_t i) const
const IFresnelMap * fresnelMap() const
size_t numberOfSlices() const
Maintains information about progress of a computation.