22 std::string
printDeltas(
const std::vector<double>& deltas);
41 DistrOutput generateSamples(
double mean,
size_t n_times)
const override;
42 DistrOutput generateSamples(
const std::vector<double>& mean)
const override;
43 std::vector<double> stdDevs(
double mean,
size_t n_times)
const override;
44 std::vector<double> stdDevs(
const std::vector<double>& mean)
const override;
68 DistrOutput generateSamples(
double mean,
size_t n_times)
const override;
69 DistrOutput generateSamples(
const std::vector<double>& mean)
const override;
70 std::vector<double> stdDevs(
double mean,
size_t n_times)
const override;
71 std::vector<double> stdDevs(
const std::vector<double>& mean)
const override;
96 DistrOutput generateSamples(
double mean,
size_t n_times)
const override;
97 DistrOutput generateSamples(
const std::vector<double>& mean)
const override;
98 std::vector<double> stdDevs(
double mean,
size_t n_times)
const override;
99 std::vector<double> stdDevs(
const std::vector<double>& mean)
const override;
124 DistrOutput generateSamples(
double mean,
size_t n_times)
const override;
125 DistrOutput generateSamples(
const std::vector<double>& mean)
const override;
126 std::vector<double> stdDevs(
double mean,
size_t n_times)
const override;
127 std::vector<double> stdDevs(
const std::vector<double>& mean)
const override;
146 DistrOutput generateSamples(
double mean,
size_t n_times)
const override;
147 DistrOutput generateSamples(
const std::vector<double>& mean)
const override;
148 std::vector<double> stdDevs(
double mean,
size_t n_times)
const override;
149 std::vector<double> stdDevs(
const std::vector<double>& mean)
const override;
152 std::string name()
const override;
153 std::string printStdDevs()
const override;
162 return new ScanSingleRelativeResolution(distr, stddev);
166 const std::vector<double>& stddevs)
168 return new ScanVectorRelativeResolution(distr, stddevs);
174 return new ScanSingleAbsoluteResolution(distr, stddev);
178 const std::vector<double>& stddevs)
180 return new ScanVectorAbsoluteResolution(distr, stddevs);
185 return new ScanEmptyResolution();
197 std::stringstream result;
200 result <<
"ba." <<
name();
216 size_t n_times)
const
218 const double stddev = mean * m_reldev;
219 return DistrOutput(n_times, distribution()->generateSamples(mean, stddev));
223 ScanSingleRelativeResolution::generateSamples(
const std::vector<double>& mean)
const
227 result.reserve(mean.size());
228 for (
size_t i = 0, size = mean.size(); i < size; ++i)
229 result.push_back(distribution()->generateSamples(mean[i], mean[i] * m_reldev));
233 std::vector<double> ScanSingleRelativeResolution::stdDevs(
double mean,
size_t n_times)
const
235 return std::vector<double>(n_times, mean * m_reldev);
238 std::vector<double> ScanSingleRelativeResolution::stdDevs(
const std::vector<double>& mean)
const
241 std::vector<double> result;
242 result.reserve(mean.size());
243 for (
size_t i = 0, size = mean.size(); i < size; ++i)
244 result.push_back(mean[i] * m_reldev);
249 size_t n_times)
const
251 return generateSamples(std::vector<double>(n_times, mean));
255 ScanVectorRelativeResolution::generateSamples(
const std::vector<double>& mean)
const
257 const std::vector<double> stddevs = stdDevs(mean);
258 return distribution()->generateSamples(mean, stddevs);
261 std::vector<double> ScanVectorRelativeResolution::stdDevs(
double mean,
size_t n_times)
const
263 return stdDevs(std::vector<double>(n_times, mean));
266 std::vector<double> ScanVectorRelativeResolution::stdDevs(
const std::vector<double>& mean)
const
268 const size_t result_size = mean.size();
269 if (result_size != m_reldev.size())
270 throw std::runtime_error(
271 "Error in ScanVectorRelativeResolution::stdDevs: passed mean values vector "
272 "size shall be of the same size with relative deviations vector");
274 std::vector<double> stddevs(result_size);
275 for (
size_t i = 0; i < result_size; ++i)
276 stddevs[i] = m_reldev[i] * mean[i];
281 size_t n_times)
const
283 return DistrOutput(n_times, distribution()->generateSamples(mean, m_stddev));
287 ScanSingleAbsoluteResolution::generateSamples(
const std::vector<double>& mean)
const
291 result.reserve(mean.size());
292 for (
size_t i = 0, size = mean.size(); i < size; ++i)
293 result.push_back(distribution()->generateSamples(mean[i], m_stddev));
297 std::vector<double> ScanSingleAbsoluteResolution::stdDevs(
double,
size_t n_times)
const
299 return std::vector<double>(n_times, m_stddev);
302 std::vector<double> ScanSingleAbsoluteResolution::stdDevs(
const std::vector<double>& mean)
const
305 return std::vector<double>(mean.size(), m_stddev);
309 size_t n_times)
const
311 return generateSamples(std::vector<double>(n_times, mean));
315 ScanVectorAbsoluteResolution::generateSamples(
const std::vector<double>& mean)
const
317 const size_t result_size = mean.size();
318 if (result_size != m_stddev.size())
319 throw std::runtime_error(
320 "Error in ScanVectorAbsoluteResolution::generateSamples: passed mean values vector "
321 "size shall be of the same size with standard deviations vector");
322 return distribution()->generateSamples(mean, m_stddev);
325 std::vector<double> ScanVectorAbsoluteResolution::stdDevs(
double mean,
size_t n_times)
const
327 return stdDevs(std::vector<double>(n_times, mean));
330 std::vector<double> ScanVectorAbsoluteResolution::stdDevs(
const std::vector<double>& mean)
const
332 const size_t result_size = mean.size();
333 if (result_size != m_stddev.size())
334 throw std::runtime_error(
335 "Error in ScanVectorAbsoluteResolution::generateSamples: passed mean values vector "
336 "size shall be of the same size with standard deviations vector");
341 size_t n_times)
const
347 ScanEmptyResolution::generateSamples(
const std::vector<double>& mean)
const
350 result.reserve(mean.size());
351 for (
size_t i = 0, size = mean.size(); i < size; ++i)
356 std::vector<double> ScanEmptyResolution::stdDevs(
double,
size_t n_times)
const
358 return std::vector<double>(n_times, 0.0);
361 std::vector<double> ScanEmptyResolution::stdDevs(
const std::vector<double>& mean)
const
363 return std::vector<double>(mean.size(), 0.0);
366 std::string ScanEmptyResolution::name()
const
368 throw std::runtime_error(
369 "Error in ScanEmptyResolution::name: attempt to get a name of an empty resolution object.");
372 std::string ScanEmptyResolution::printStdDevs()
const
374 throw std::runtime_error(
"Error in ScanEmptyResolution::printStdDevs: attempt to print data "
375 "from empty resolution object.");
380 throw std::runtime_error(
"Error in printDeltas: function is not implemented");
386 throw std::runtime_error(
"Error in ScanResolution: passed vector is empty");
Defines functions in namespace pyfmt.
Defines classes representing ranged one-dimensional distributions.
Defines scan resolution class.
A parameter value with a weight, as obtained when sampling from a distribution.
Interface for one-dimensional ranged distributions.
Container for reflectivity resolution data.
std::vector< std::vector< ParameterSample > > DistrOutput
virtual std::string printStdDevs() const =0
static ScanResolution * scanRelativeResolution(const RangedDistribution &distr, double stddev)
~ScanResolution() override
static ScanResolution * scanEmptyResolution()
static ScanResolution * scanAbsoluteResolution(const RangedDistribution &distr, double stddev)
virtual std::string name() const =0
std::unique_ptr< RangedDistribution > m_distr
basic distribution function
std::string print() const
Prints object definition in python format.
~ScanEmptyResolution() override=default
ScanResolution * clone() const override
ScanSingleAbsoluteResolution(const RangedDistribution &distr, double stddev)
double m_stddev
deltas for computing resolutions
std::string name() const override
ScanResolution * clone() const override
std::string printStdDevs() const override
~ScanSingleAbsoluteResolution() override=default
~ScanSingleRelativeResolution() override=default
std::string name() const override
ScanResolution * clone() const override
std::string printStdDevs() const override
double m_reldev
deltas for computing resolutions
ScanSingleRelativeResolution(const RangedDistribution &distr, double reldev)
ScanResolution * clone() const override
~ScanVectorAbsoluteResolution() override=default
ScanVectorAbsoluteResolution(const RangedDistribution &distr, const std::vector< double > &stddev)
std::string name() const override
std::vector< double > m_stddev
deltas for computing resolutions
std::string printStdDevs() const override
std::string name() const override
ScanVectorRelativeResolution(const RangedDistribution &distr, const std::vector< double > &reldev)
std::string printStdDevs() const override
~ScanVectorRelativeResolution() override=default
std::vector< double > m_reldev
deltas for computing resolutions
ScanResolution * clone() const override
std::string printDeltas(const std::vector< double > &deltas)
void checkIfEmpty(const std::vector< double > &input)
const std::string absolute_resolution
const std::string relative_resolution
std::string printDouble(double input)
std::string indent(size_t width)
Returns a string of blanks with given width.