BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ParameterDistribution Class Reference
Inheritance diagram for ParameterDistribution:
Collaboration diagram for ParameterDistribution:

Public Member Functions

 ParameterDistribution (const std::string &par_name, const IDistribution1D &distribution, size_t nbr_samples, double sigma_factor=0.0, const RealLimits &limits=RealLimits())
 
 ParameterDistribution (const std::string &par_name, const IDistribution1D &distribution, size_t nbr_samples, double xmin, double xmax)
 
 ParameterDistribution (const ParameterDistribution &other)
 
virtual ~ParameterDistribution ()
 
ParameterDistributionoperator= (const ParameterDistribution &other)
 
ParameterDistributionlinkParameter (std::string par_name)
 
std::string getMainParameterName () const
 
size_t getNbrSamples () const
 
double getSigmaFactor () const
 
const IDistribution1DgetDistribution () const
 
IDistribution1DgetDistribution ()
 
std::vector< ParameterSamplegenerateSamples () const
 
std::vector< std::string > getLinkedParameterNames () const
 
RealLimits getLimits () const
 
double getMinValue () const
 
double getMaxValue () const
 
ParameterPoolparameterPool () const
 
virtual ParameterPoolcreateParameterTree () const
 
std::string parametersToString () const
 
RealParameterregisterParameter (const std::string &name, double *parpointer)
 
void registerVector (const std::string &base_name, kvector_t *p_vec, const std::string &units="nm")
 
void setParameterValue (const std::string &name, double value)
 
void setVectorValue (const std::string &base_name, kvector_t value)
 
RealParameterparameter (const std::string &name) const
 
virtual void onChange ()
 
void removeParameter (const std::string &name)
 
void removeVector (const std::string &base_name)
 
void setName (const std::string &name)
 
const std::string & getName () const
 

Static Public Member Functions

static std::string XComponentName (const std::string &base_name)
 
static std::string YComponentName (const std::string &base_name)
 
static std::string ZComponentName (const std::string &base_name)
 

Private Attributes

std::string m_name
 
std::unique_ptr< IDistribution1DmP_distribution
 
size_t m_nbr_samples
 
double m_sigma_factor
 
std::vector< std::string > m_linked_par_names
 
RealLimits m_limits
 
double m_xmin
 
double m_xmax
 
std::unique_ptr< ParameterPoolm_pool
 

Detailed Description

A parametric distribution function, for use with any model parameter.

Definition at line 28 of file ParameterDistribution.h.

Constructor & Destructor Documentation

◆ ParameterDistribution() [1/3]

ParameterDistribution::ParameterDistribution ( const std::string &  par_name,
const IDistribution1D distribution,
size_t  nbr_samples,
double  sigma_factor = 0.0,
const RealLimits limits = RealLimits() 
)

Definition at line 19 of file ParameterDistribution.cpp.

23  : IParameterized("ParameterDistribution"), m_name(par_name), m_nbr_samples(nbr_samples),
24  m_sigma_factor(sigma_factor), m_limits(limits), m_xmin(1.0), m_xmax(-1.0)
25 {
26  mP_distribution.reset(distribution.clone());
27  if (m_sigma_factor < 0.0)
29  "ParameterDistribution::ParameterDistribution() -> Error."
30  "sigma factor cannot be negative");
31  if (nbr_samples == 0)
33  "ParameterDistribution::ParameterDistribution() -> Error."
34  "Number of samples can't be zero.");
35 }
virtual IDistribution1D * clone() const =0
IParameterized(const std::string &name="")
std::unique_ptr< IDistribution1D > mP_distribution

References IDistribution1D::clone(), m_sigma_factor, and mP_distribution.

Here is the call graph for this function:

◆ ParameterDistribution() [2/3]

ParameterDistribution::ParameterDistribution ( const std::string &  par_name,
const IDistribution1D distribution,
size_t  nbr_samples,
double  xmin,
double  xmax 
)

Definition at line 37 of file ParameterDistribution.cpp.

40  : IParameterized("ParameterDistribution"), m_name(par_name), m_nbr_samples(nbr_samples),
41  m_sigma_factor(0.0), m_xmin(xmin), m_xmax(xmax)
42 {
43  mP_distribution.reset(distribution.clone());
44  if (m_sigma_factor < 0.0) {
46  "ParameterDistribution::ParameterDistribution() -> Error."
47  "sigma factor cannot be negative");
48  }
49  if (nbr_samples == 0) {
51  "ParameterDistribution::ParameterDistribution() -> Error."
52  "Number of samples can't be zero.");
53  }
54  if (xmin >= xmax) {
56  "ParameterDistribution::ParameterDistribution() -> Error."
57  "xmin>=xmax");
58  }
59 }

References IDistribution1D::clone(), m_sigma_factor, and mP_distribution.

Here is the call graph for this function:

◆ ParameterDistribution() [3/3]

ParameterDistribution::ParameterDistribution ( const ParameterDistribution other)

Definition at line 61 of file ParameterDistribution.cpp.

62  : IParameterized("ParameterDistribution"), m_name(other.m_name),
65  m_xmax(other.m_xmax)
66 {
67  mP_distribution.reset(other.mP_distribution->clone());
68 }
std::vector< std::string > m_linked_par_names

References mP_distribution.

◆ ~ParameterDistribution()

ParameterDistribution::~ParameterDistribution ( )
virtualdefault

Member Function Documentation

◆ operator=()

ParameterDistribution & ParameterDistribution::operator= ( const ParameterDistribution other)

Overload assignment operator.

Definition at line 72 of file ParameterDistribution.cpp.

73 {
74  if (this != &other) {
75  this->m_name = other.m_name;
78  mP_distribution.reset(other.mP_distribution->clone());
80  m_limits = other.m_limits;
81  m_xmin = other.m_xmin;
82  m_xmax = other.m_xmax;
83  }
84  return *this;
85 }

References m_limits, m_linked_par_names, m_name, m_nbr_samples, m_sigma_factor, m_xmax, m_xmin, and mP_distribution.

◆ linkParameter()

ParameterDistribution & ParameterDistribution::linkParameter ( std::string  par_name)

Definition at line 87 of file ParameterDistribution.cpp.

88 {
89  m_linked_par_names.push_back(par_name);
90  return *this;
91 }

References m_linked_par_names.

Referenced by LinkedBoxDistributionBuilder::buildSample(), and CylindersInSSCABuilder::buildSample().

◆ getMainParameterName()

std::string ParameterDistribution::getMainParameterName ( ) const
inline

◆ getNbrSamples()

size_t ParameterDistribution::getNbrSamples ( ) const

get number of samples for this distribution

Definition at line 93 of file ParameterDistribution.cpp.

94 {
95  if (mP_distribution && mP_distribution->isDelta())
96  return 1;
97  return m_nbr_samples;
98 }

References m_nbr_samples, and mP_distribution.

Referenced by DistributionHandler::addParameterDistribution(), and pyfmt2::printParameterDistribution().

◆ getSigmaFactor()

double ParameterDistribution::getSigmaFactor ( ) const
inline

get the sigma factor

Definition at line 53 of file ParameterDistribution.h.

53 { return m_sigma_factor; }

References m_sigma_factor.

Referenced by pyfmt2::printParameterDistribution().

◆ getDistribution() [1/2]

◆ getDistribution() [2/2]

IDistribution1D * ParameterDistribution::getDistribution ( )

Definition at line 113 of file ParameterDistribution.cpp.

114 {
115  return mP_distribution.get();
116 }

References mP_distribution.

◆ generateSamples()

std::vector< ParameterSample > ParameterDistribution::generateSamples ( ) const

generate list of sampled values with their weight

Definition at line 100 of file ParameterDistribution.cpp.

101 {
102  if (m_xmin < m_xmax)
103  return mP_distribution->equidistantSamplesInRange(m_nbr_samples, m_xmin, m_xmax);
104  else
105  return mP_distribution->equidistantSamples(m_nbr_samples, m_sigma_factor, m_limits);
106 }

References m_limits, m_nbr_samples, m_sigma_factor, m_xmax, m_xmin, and mP_distribution.

Referenced by DistributionHandler::addParameterDistribution(), and ParticleDistribution::generateParticles().

◆ getLinkedParameterNames()

std::vector<std::string> ParameterDistribution::getLinkedParameterNames ( ) const
inline

get list of linked parameter names

Definition at line 62 of file ParameterDistribution.h.

62 { return m_linked_par_names; }

References m_linked_par_names.

Referenced by SampleToPython::defineParticleDistributions(), and ParticleDistribution::generateParticles().

◆ getLimits()

RealLimits ParameterDistribution::getLimits ( ) const
inline

Definition at line 64 of file ParameterDistribution.h.

64 { return m_limits; }

References m_limits.

Referenced by pyfmt2::printParameterDistribution().

◆ getMinValue()

double ParameterDistribution::getMinValue ( ) const
inline

Definition at line 66 of file ParameterDistribution.h.

66 { return m_xmin; }

References m_xmin.

◆ getMaxValue()

double ParameterDistribution::getMaxValue ( ) const
inline

Definition at line 67 of file ParameterDistribution.h.

67 { return m_xmax; }

References m_xmax.

◆ parameterPool()

ParameterPool* IParameterized::parameterPool ( ) const
inlineinherited

Returns pointer to the parameter pool.

Definition at line 38 of file IParameterized.h.

38 { return m_pool.get(); } // has non-const usages!
std::unique_ptr< ParameterPool > m_pool
parameter pool (kind of pointer-to-implementation)

References IParameterized::m_pool.

Referenced by pyfmt2::argumentList(), SampleBuilderNode::borrow_builder_parameters(), INode::createParameterTree(), INode::INode(), IParameterized::IParameterized(), anonymous_namespace{NodeUtils.cpp}::poolToString(), SampleBuilderNode::reset(), and IDistribution1D::setUnits().

◆ createParameterTree()

ParameterPool * IParameterized::createParameterTree ( ) const
virtualinherited

Creates new parameter pool, with all local parameters and those of its children.

Reimplemented in INode.

Definition at line 33 of file IParameterized.cpp.

34 {
35  auto* result = new ParameterPool;
36  m_pool->copyToExternalPool("/" + getName() + "/", result);
37  return result;
38 }
const std::string & getName() const
Container with parameters for IParameterized object.
Definition: ParameterPool.h:30

References IParameterized::getName(), and IParameterized::m_pool.

Referenced by IParameterized::parametersToString(), ParameterUtils::poolParameterUnits(), and IParameterized::setParameterValue().

Here is the call graph for this function:

◆ parametersToString()

std::string IParameterized::parametersToString ( ) const
inherited

Returns multiline string representing available parameters.

Definition at line 40 of file IParameterized.cpp.

41 {
42  std::ostringstream result;
43  std::unique_ptr<ParameterPool> P_pool(createParameterTree());
44  result << *P_pool << "\n";
45  return result.str();
46 }
virtual ParameterPool * createParameterTree() const
Creates new parameter pool, with all local parameters and those of its children.

References IParameterized::createParameterTree().

Here is the call graph for this function:

◆ registerParameter()

RealParameter & IParameterized::registerParameter ( const std::string &  name,
double *  parpointer 
)
inherited

Definition at line 48 of file IParameterized.cpp.

49 {
50  return m_pool->addParameter(
51  new RealParameter(name, data, getName(), [&]() -> void { onChange(); }));
52 }
virtual void onChange()
Action to be taken in inherited class when a parameter has changed.
Wraps a parameter of type double.
Definition: RealParameter.h:32

References IParameterized::getName(), IParameterized::m_pool, and IParameterized::onChange().

Referenced by BasicLattice::BasicLattice(), Beam::Beam(), CylindersInBABuilder::CylindersInBABuilder(), DetectionProperties::DetectionProperties(), HexagonalLattice::HexagonalLattice(), IInterferenceFunction::IInterferenceFunction(), INode::INode(), InterferenceFunction1DLattice::InterferenceFunction1DLattice(), InterferenceFunction2DParaCrystal::InterferenceFunction2DParaCrystal(), InterferenceFunctionHardDisk::InterferenceFunctionHardDisk(), InterferenceFunctionRadialParaCrystal::InterferenceFunctionRadialParaCrystal(), InterferenceFunctionTwin::InterferenceFunctionTwin(), Lattice2D::Lattice2D(), LayerRoughness::LayerRoughness(), MultiLayer::MultiLayer(), ParticleDistribution::ParticleDistribution(), PlainMultiLayerBySLDBuilder::PlainMultiLayerBySLDBuilder(), IParticle::registerAbundance(), ParticleLayout::registerParticleDensity(), Layer::registerThickness(), IParameterized::registerVector(), ParticleLayout::registerWeight(), ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(), ResonatorBuilder::ResonatorBuilder(), Lattice2D::setRotationEnabled(), SquareLattice::SquareLattice(), and TriangularRippleBuilder::TriangularRippleBuilder().

Here is the call graph for this function:

◆ registerVector()

void IParameterized::registerVector ( const std::string &  base_name,
kvector_t p_vec,
const std::string &  units = "nm" 
)
inherited

Definition at line 54 of file IParameterized.cpp.

56 {
57  registerParameter(XComponentName(base_name), &((*p_vec)[0])).setUnit(units);
58  registerParameter(YComponentName(base_name), &((*p_vec)[1])).setUnit(units);
59  registerParameter(ZComponentName(base_name), &((*p_vec)[2])).setUnit(units);
60 }
RealParameter & registerParameter(const std::string &name, double *parpointer)
static std::string XComponentName(const std::string &base_name)
static std::string YComponentName(const std::string &base_name)
static std::string ZComponentName(const std::string &base_name)
RealParameter & setUnit(const std::string &name)

References IParameterized::registerParameter(), RealParameter::setUnit(), IParameterized::XComponentName(), IParameterized::YComponentName(), and IParameterized::ZComponentName().

Referenced by Beam::Beam(), DetectionProperties::DetectionProperties(), InterferenceFunctionTwin::InterferenceFunctionTwin(), MultiLayer::MultiLayer(), Lattice::registerBasisVectors(), and IParticle::registerPosition().

Here is the call graph for this function:

◆ setParameterValue()

void IParameterized::setParameterValue ( const std::string &  name,
double  value 
)
inherited

Definition at line 62 of file IParameterized.cpp.

63 {
64  if (name.find('*') == std::string::npos && name.find('/') == std::string::npos) {
65  m_pool->setParameterValue(name, value);
66  } else {
67  std::unique_ptr<ParameterPool> P_pool{createParameterTree()};
68  if (name.find('*') != std::string::npos)
69  P_pool->setMatchedParametersValue(name, value);
70  else
71  P_pool->setParameterValue(name, value);
72  }
73 }
int setMatchedParametersValue(const std::string &wildcards, double value)
Sets value of the nonzero parameters that match pattern ('*' allowed), or throws.

References IParameterized::createParameterTree(), IParameterized::m_pool, and ParameterPool::setMatchedParametersValue().

Referenced by AsymRippleBuilder::buildSample(), and IParameterized::setVectorValue().

Here is the call graph for this function:

◆ setVectorValue()

void IParameterized::setVectorValue ( const std::string &  base_name,
kvector_t  value 
)
inherited

Definition at line 75 of file IParameterized.cpp.

76 {
77  setParameterValue(XComponentName(base_name), value.x());
78  setParameterValue(YComponentName(base_name), value.y());
79  setParameterValue(ZComponentName(base_name), value.z());
80 }
T z() const
Returns z-component in cartesian coordinate system.
Definition: BasicVector3D.h:68
T y() const
Returns y-component in cartesian coordinate system.
Definition: BasicVector3D.h:66
T x() const
Returns x-component in cartesian coordinate system.
Definition: BasicVector3D.h:64
void setParameterValue(const std::string &name, double value)

References IParameterized::setParameterValue(), BasicVector3D< T >::x(), IParameterized::XComponentName(), BasicVector3D< T >::y(), IParameterized::YComponentName(), BasicVector3D< T >::z(), and IParameterized::ZComponentName().

Here is the call graph for this function:

◆ parameter()

RealParameter * IParameterized::parameter ( const std::string &  name) const
inherited

◆ onChange()

◆ removeParameter()

void IParameterized::removeParameter ( const std::string &  name)
inherited

◆ removeVector()

void IParameterized::removeVector ( const std::string &  base_name)
inherited

Definition at line 93 of file IParameterized.cpp.

94 {
95  removeParameter(XComponentName(base_name));
96  removeParameter(YComponentName(base_name));
97  removeParameter(ZComponentName(base_name));
98 }
void removeParameter(const std::string &name)

References IParameterized::removeParameter(), IParameterized::XComponentName(), IParameterized::YComponentName(), and IParameterized::ZComponentName().

Referenced by IParticle::registerPosition().

Here is the call graph for this function:

◆ XComponentName()

std::string IParameterized::XComponentName ( const std::string &  base_name)
staticinherited

◆ YComponentName()

std::string IParameterized::YComponentName ( const std::string &  base_name)
staticinherited

Definition at line 105 of file IParameterized.cpp.

106 {
107  return base_name + "Y";
108 }

Referenced by IParameterized::registerVector(), IParameterized::removeVector(), and IParameterized::setVectorValue().

◆ ZComponentName()

std::string IParameterized::ZComponentName ( const std::string &  base_name)
staticinherited

Definition at line 110 of file IParameterized.cpp.

111 {
112  return base_name + "Z";
113 }

Referenced by IParameterized::registerVector(), IParameterized::removeVector(), and IParameterized::setVectorValue().

◆ setName()

void IParameterized::setName ( const std::string &  name)
inlineinherited

Definition at line 68 of file IParameterized.h.

68 { m_name = name; }
std::string m_name

References IParameterized::m_name.

Referenced by BasicLattice::BasicLattice(), Beam::Beam(), Layer::clone(), ConvolutionDetectorResolution::ConvolutionDetectorResolution(), LayersWithAbsorptionBuilder::createSampleByIndex(), Basic2DParaCrystalBuilder::createSampleByIndex(), ParticleInVacuumBuilder::createSampleByIndex(), SimpleMagneticRotationBuilder::createSampleByIndex(), Crystal::Crystal(), DetectionProperties::DetectionProperties(), DistributionHandler::DistributionHandler(), FormFactorBAPol::FormFactorBAPol(), FormFactorCoreShell::FormFactorCoreShell(), FormFactorCrystal::FormFactorCrystal(), FormFactorDecoratorMaterial::FormFactorDecoratorMaterial(), FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor(), FormFactorDecoratorRotation::FormFactorDecoratorRotation(), FormFactorDWBA::FormFactorDWBA(), FormFactorDWBAPol::FormFactorDWBAPol(), FormFactorWeighted::FormFactorWeighted(), HexagonalLattice::HexagonalLattice(), IDetector::IDetector(), DepthProbeSimulation::initialize(), GISASSimulation::initialize(), OffSpecSimulation::initialize(), SpecularSimulation::initialize(), SpecularDetector1D::initialize(), MesoCrystal::initialize(), Particle::initialize(), ParticleComposition::initialize(), INode::INode(), Instrument::Instrument(), InterferenceFunction1DLattice::InterferenceFunction1DLattice(), InterferenceFunction2DLattice::InterferenceFunction2DLattice(), InterferenceFunction2DParaCrystal::InterferenceFunction2DParaCrystal(), InterferenceFunction2DSuperLattice::InterferenceFunction2DSuperLattice(), InterferenceFunction3DLattice::InterferenceFunction3DLattice(), InterferenceFunctionFinite2DLattice::InterferenceFunctionFinite2DLattice(), InterferenceFunctionFinite3DLattice::InterferenceFunctionFinite3DLattice(), InterferenceFunctionHardDisk::InterferenceFunctionHardDisk(), InterferenceFunctionNone::InterferenceFunctionNone(), InterferenceFunctionRadialParaCrystal::InterferenceFunctionRadialParaCrystal(), InterferenceFunctionTwin::InterferenceFunctionTwin(), ISampleBuilder::ISampleBuilder(), IsGISAXSDetector::IsGISAXSDetector(), Lattice::Lattice(), Layer::Layer(), LayerInterface::LayerInterface(), LayerRoughness::LayerRoughness(), MultiLayer::MultiLayer(), Beam::operator=(), SampleBuilderNode::operator=(), ParticleCoreShell::ParticleCoreShell(), ParticleDistribution::ParticleDistribution(), ParticleLayout::ParticleLayout(), RectangularDetector::RectangularDetector(), SampleBuilderNode::reset(), ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(), SampleBuilderNode::SampleBuilderNode(), SampleBuilderNode::setSBN(), SphericalDetector::SphericalDetector(), and SquareLattice::SquareLattice().

◆ getName()

Member Data Documentation

◆ m_name

std::string ParameterDistribution::m_name
private

Definition at line 70 of file ParameterDistribution.h.

Referenced by getMainParameterName(), and operator=().

◆ mP_distribution

std::unique_ptr<IDistribution1D> ParameterDistribution::mP_distribution
private

◆ m_nbr_samples

size_t ParameterDistribution::m_nbr_samples
private

Definition at line 72 of file ParameterDistribution.h.

Referenced by generateSamples(), getNbrSamples(), and operator=().

◆ m_sigma_factor

double ParameterDistribution::m_sigma_factor
private

◆ m_linked_par_names

std::vector<std::string> ParameterDistribution::m_linked_par_names
private

Definition at line 74 of file ParameterDistribution.h.

Referenced by getLinkedParameterNames(), linkParameter(), and operator=().

◆ m_limits

RealLimits ParameterDistribution::m_limits
private

Definition at line 75 of file ParameterDistribution.h.

Referenced by generateSamples(), getLimits(), and operator=().

◆ m_xmin

double ParameterDistribution::m_xmin
private

Definition at line 76 of file ParameterDistribution.h.

Referenced by generateSamples(), getMinValue(), and operator=().

◆ m_xmax

double ParameterDistribution::m_xmax
private

Definition at line 77 of file ParameterDistribution.h.

Referenced by generateSamples(), getMaxValue(), and operator=().

◆ m_pool

std::unique_ptr<ParameterPool> IParameterized::m_pool
privateinherited

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