BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution Class Reference
Inheritance diagram for anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution:
Collaboration diagram for anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution:

Public Member Functions

 ScanVectorRelativeResolution (const RangedDistribution &distr, const std::vector< double > &reldev)
 
 ~ScanVectorRelativeResolution () override=default
 
ScanResolutionclone () const override
 
DistrOutput generateSamples (double mean, size_t n_times) const override
 
DistrOutput generateSamples (const std::vector< double > &mean) const override
 
std::vector< double > stdDevs (double mean, size_t n_times) const override
 
std::vector< double > stdDevs (const std::vector< double > &mean) const override
 
const RangedDistributiondistribution () const
 
size_t nSamples () const
 
bool empty () const
 
std::string print () const
 
virtual void transferToCPP ()
 

Static Public Member Functions

static ScanResolutionscanRelativeResolution (const RangedDistribution &distr, double stddev)
 
static ScanResolutionscanRelativeResolution (const RangedDistribution &distr, const std::vector< double > &stddevs)
 
static ScanResolutionscanAbsoluteResolution (const RangedDistribution &distr, double stddev)
 
static ScanResolutionscanAbsoluteResolution (const RangedDistribution &distr, const std::vector< double > &stddevs)
 
static ScanResolutionscanEmptyResolution ()
 

Protected Types

using DistrOutput = std::vector< std::vector< ParameterSample > >
 

Protected Member Functions

std::string name () const override
 
std::string printStdDevs () const override
 

Private Attributes

std::vector< double > m_reldev
 
std::unique_ptr< RangedDistributionm_distr
 

Detailed Description

Definition at line 81 of file ScanResolution.cpp.

Member Typedef Documentation

◆ DistrOutput

using ScanResolution::DistrOutput = std::vector<std::vector<ParameterSample> >
protectedinherited

Definition at line 31 of file ScanResolution.h.

Constructor & Destructor Documentation

◆ ScanVectorRelativeResolution()

anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::ScanVectorRelativeResolution ( const RangedDistribution distr,
const std::vector< double > &  reldev 
)
inline

Definition at line 84 of file ScanResolution.cpp.

85  : ScanResolution(distr), m_reldev(reldev)
86  {
88  }
std::vector< double > m_reldev
deltas for computing resolutions
void checkIfEmpty(const std::vector< double > &input)

References anonymous_namespace{ScanResolution.cpp}::checkIfEmpty().

Here is the call graph for this function:

◆ ~ScanVectorRelativeResolution()

anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::~ScanVectorRelativeResolution ( )
overridedefault

Member Function Documentation

◆ clone()

ScanResolution* anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::clone ( ) const
inlineoverridevirtual

Implements ScanResolution.

Definition at line 91 of file ScanResolution.cpp.

92  {
94  }
const RangedDistribution * distribution() const
ScanVectorRelativeResolution(const RangedDistribution &distr, const std::vector< double > &reldev)

◆ generateSamples() [1/2]

ScanResolution::DistrOutput anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::generateSamples ( double  mean,
size_t  n_times 
) const
overridevirtual

Implements ScanResolution.

Definition at line 248 of file ScanResolution.cpp.

250 {
251  return generateSamples(std::vector<double>(n_times, mean));
252 }
DistrOutput generateSamples(double mean, size_t n_times) const override

◆ generateSamples() [2/2]

ScanResolution::DistrOutput anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::generateSamples ( const std::vector< double > &  mean) const
overridevirtual

Implements ScanResolution.

Definition at line 255 of file ScanResolution.cpp.

256 {
257  const std::vector<double> stddevs = stdDevs(mean);
258  return distribution()->generateSamples(mean, stddevs);
259 }
std::vector< ParameterSample > generateSamples(double mean, double stddev) const
std::vector< double > stdDevs(double mean, size_t n_times) const override

◆ stdDevs() [1/2]

std::vector< double > anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::stdDevs ( double  mean,
size_t  n_times 
) const
overridevirtual

Implements ScanResolution.

Definition at line 261 of file ScanResolution.cpp.

262 {
263  return stdDevs(std::vector<double>(n_times, mean));
264 }

◆ stdDevs() [2/2]

std::vector< double > anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::stdDevs ( const std::vector< double > &  mean) const
overridevirtual

Implements ScanResolution.

Definition at line 266 of file ScanResolution.cpp.

267 {
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");
273 
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];
277  return stddevs;
278 }

◆ name()

std::string anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::name ( ) const
inlineoverrideprotectedvirtual

◆ printStdDevs()

std::string anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::printStdDevs ( ) const
inlineoverrideprotectedvirtual

Implements ScanResolution.

Definition at line 103 of file ScanResolution.cpp.

103 { return printDeltas(m_reldev); }
std::string printDeltas(const std::vector< double > &deltas)

References anonymous_namespace{ScanResolution.cpp}::printDeltas().

Here is the call graph for this function:

◆ scanRelativeResolution() [1/2]

ScanResolution * ScanResolution::scanRelativeResolution ( const RangedDistribution distr,
double  stddev 
)
staticinherited

Definition at line 159 of file ScanResolution.cpp.

161 {
162  return new ScanSingleRelativeResolution(distr, stddev);
163 }

Referenced by AngularSpecScan::setRelativeAngularResolution(), QSpecScan::setRelativeQResolution(), and AngularSpecScan::setRelativeWavelengthResolution().

◆ scanRelativeResolution() [2/2]

ScanResolution * ScanResolution::scanRelativeResolution ( const RangedDistribution distr,
const std::vector< double > &  stddevs 
)
staticinherited

Definition at line 165 of file ScanResolution.cpp.

167 {
168  return new ScanVectorRelativeResolution(distr, stddevs);
169 }

◆ scanAbsoluteResolution() [1/2]

ScanResolution * ScanResolution::scanAbsoluteResolution ( const RangedDistribution distr,
double  stddev 
)
staticinherited

Definition at line 171 of file ScanResolution.cpp.

173 {
174  return new ScanSingleAbsoluteResolution(distr, stddev);
175 }

Referenced by AngularSpecScan::setAbsoluteAngularResolution(), QSpecScan::setAbsoluteQResolution(), AngularSpecScan::setAbsoluteWavelengthResolution(), and StandardSimulations::SpecularDivergentBeam().

◆ scanAbsoluteResolution() [2/2]

ScanResolution * ScanResolution::scanAbsoluteResolution ( const RangedDistribution distr,
const std::vector< double > &  stddevs 
)
staticinherited

Definition at line 177 of file ScanResolution.cpp.

179 {
180  return new ScanVectorAbsoluteResolution(distr, stddevs);
181 }

◆ scanEmptyResolution()

ScanResolution * ScanResolution::scanEmptyResolution ( )
staticinherited

Definition at line 183 of file ScanResolution.cpp.

184 {
185  return new ScanEmptyResolution();
186 }

◆ distribution()

const RangedDistribution* ScanResolution::distribution ( ) const
inlineinherited

Definition at line 45 of file ScanResolution.h.

45 { return m_distr.get(); }
std::unique_ptr< RangedDistribution > m_distr
basic distribution function

References ScanResolution::m_distr.

◆ nSamples()

size_t ScanResolution::nSamples ( ) const
inherited

Definition at line 188 of file ScanResolution.cpp.

189 {
190  if (m_distr)
191  return m_distr->nSamples();
192  return 1;
193 }

References ScanResolution::m_distr.

◆ empty()

bool ScanResolution::empty ( ) const
inlineinherited

Definition at line 52 of file ScanResolution.h.

52 { return !m_distr; }

References ScanResolution::m_distr.

◆ print()

std::string ScanResolution::print ( ) const
inherited

Prints object definition in python format.

Definition at line 195 of file ScanResolution.cpp.

196 {
197  std::stringstream result;
198  result << *m_distr << "\n";
199  result << pyfmt::indent() << "resolution = ";
200  result << "ba." << name();
201  result << "("
202  << "distribution"
203  << ", ";
204  result << printStdDevs();
205  result << ")";
206  return result.str();
207 }
virtual std::string printStdDevs() const =0
virtual std::string name() const =0
std::string indent(size_t width)
Returns a string of blanks with given width.
Definition: PyFmt.cpp:141

References pyfmt::indent(), ScanResolution::m_distr, ScanResolution::name(), and ScanResolution::printStdDevs().

Referenced by operator<<().

Here is the call graph for this function:

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 34 of file ICloneable.h.

Member Data Documentation

◆ m_reldev

std::vector<double> anonymous_namespace{ScanResolution.cpp}::ScanVectorRelativeResolution::m_reldev
private

deltas for computing resolutions

Definition at line 106 of file ScanResolution.cpp.

◆ m_distr

std::unique_ptr<RangedDistribution> ScanResolution::m_distr
privateinherited

basic distribution function

Definition at line 64 of file ScanResolution.h.

Referenced by ScanResolution::distribution(), ScanResolution::empty(), ScanResolution::nSamples(), and ScanResolution::print().


The documentation for this class was generated from the following file: