30     : m_qs(qs_nm.clone()), m_resolution(
ScanResolution::scanEmptyResolution())
 
   53 std::vector<SpecularSimulationElement>
 
   58     std::vector<SpecularSimulationElement> result;
 
   59     result.reserve(qz.size());
 
   60     for (
size_t i = 0, size = qz.size(); i < size; ++i)
 
   70         throw std::runtime_error(
"Error in QSpecScan::footprint: given index exceeds the " 
   71                                  "number of simulation elements");
 
   72     return std::vector<double>(n_elements, 1.0);
 
   84     const size_t axis_size = 
m_qs->size();
 
   85     std::vector<double> result(axis_size, 0.0);
 
   90     for (
size_t i = 0; i < axis_size; ++i) {
 
   91         double& current = result[i];
 
   92         for (
size_t j = 0, size = samples[i].size(); j < size; ++j) {
 
   93             current += sim_elements[elem_pos].intensity() * samples[i][j].weight;
 
  115                                        const std::vector<double>& rel_dev)
 
  130                                        const std::vector<double>& std_dev)
 
  139     std::vector<double> axis_values = 
m_qs->binCenters();
 
  140     if (!std::is_sorted(axis_values.begin(), axis_values.end()))
 
  141         throw std::runtime_error(
"Error in QSpecScan::checkInitialization: q-vector values shall " 
  142                                  "be sorted in ascending order.");
 
  144     if (axis_values.front() < 0)
 
  145         throw std::runtime_error(
"Error in QSpecScan::checkInitialization: q-vector values are out " 
  146                                  "of acceptable range.");
 
  153     std::vector<double> result;
 
  155     for (
size_t i = 0, size_out = samples.size(); i < size_out; ++i)
 
  156         for (
size_t j = 0, size_in = samples[i].size(); j < size_in; ++j)
 
  157             result.push_back(samples[i][j].value);
 
Defines class FixedBinAxis.
 
Defines class PointwiseAxis.
 
Declares QSpecScan class.
 
Defines classes representing ranged one-dimensional distributions.
 
Defines scan resolution class.
 
Declares the class SpecularSimulationElement.
 
Axis with fixed bin size.
 
Interface for one-dimensional axes.
 
Interface for one-dimensional ranged distributions.
 
Assembles beam, detector and their relative positions with respect to the sample.
 
Axis containing arbitrary (non-equidistant) coordinate values.
 
Scan type with z-components of scattering vector as coordinate values.
 
std::vector< SpecularSimulationElement > generateSimulationElements(const Instrument &instrument) const override
Generates simulation elements for specular simulations.
 
void setAbsoluteQResolution(const IRangedDistribution &distr, double std_dev)
 
size_t numberOfSimulationElements() const override
Returns the number of simulation elements.
 
QSpecScan * clone() const override
 
std::vector< double > footprint(size_t i, size_t n_elements) const override
Returns footprint correction factor for a range of simulation elements of size n_elements and startin...
 
std::vector< std::vector< ParameterSample > > m_q_res_cache
 
void setRelativeQResolution(const IRangedDistribution &distr, double rel_dev)
 
std::vector< double > createIntensities(const std::vector< SpecularSimulationElement > &sim_elements) const override
Returns intensity vector corresponding to convolution of given simulation elements.
 
QSpecScan(std::vector< double > qs_nm)
Accepts qz-value vector (in inverse nm)
 
std::unique_ptr< ScanResolution > m_resolution
 
void setQResolution(const ScanResolution &resolution)
Sets q resolution values via ScanResolution object.
 
void checkInitialization()
 
std::vector< double > generateQzVector() const
 
const ScanResolution * resolution() const
 
const std::unique_ptr< IAxis > m_qs
 
std::vector< std::vector< ParameterSample > > applyQResolution() const
 
Container for reflectivity resolution data.
 
static ScanResolution * scanAbsoluteResolution(const IRangedDistribution &distr, double stddev)
 
ScanResolution * clone() const override=0
 
static ScanResolution * scanRelativeResolution(const IRangedDistribution &distr, double stddev)
 
Data stucture containing both input and output of a single image pixel for specular simulation.