BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ParameterDistribution Class Reference

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

Inheritance diagram for ParameterDistribution:
[legend]
Collaboration diagram for ParameterDistribution:
[legend]

Public Member Functions

 ParameterDistribution (const ParameterDistribution &other)
 
 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)
 
virtual ~ParameterDistribution ()
 
virtual ParameterPoolcreateParameterTree () const
 Creates new parameter pool, with all local parameters and those of its children. More...
 
std::vector< ParameterSamplegenerateSamples () const
 generate list of sampled values with their weight More...
 
IDistribution1DgetDistribution ()
 
const IDistribution1DgetDistribution () const
 
RealLimits getLimits () const
 
std::vector< std::string > getLinkedParameterNames () const
 get list of linked parameter names More...
 
std::string getMainParameterName () const
 get the main parameter's name More...
 
double getMaxValue () const
 
double getMinValue () const
 
const std::string & getName () const
 
size_t getNbrSamples () const
 get number of samples for this distribution More...
 
double getSigmaFactor () const
 get the sigma factor More...
 
ParameterDistributionlinkParameter (std::string par_name)
 
virtual void onChange ()
 Action to be taken in inherited class when a parameter has changed. More...
 
ParameterDistributionoperator= (const ParameterDistribution &other)
 Overload assignment operator. More...
 
RealParameterparameter (const std::string &name) const
 Returns parameter with given 'name'. More...
 
ParameterPoolparameterPool () const
 Returns pointer to the parameter pool. More...
 
std::string parametersToString () const
 Returns multiline string representing available parameters. More...
 
RealParameterregisterParameter (const std::string &name, double *parpointer)
 
void registerVector (const std::string &base_name, kvector_t *p_vec, const std::string &units="nm")
 
void removeParameter (const std::string &name)
 
void removeVector (const std::string &base_name)
 
void setName (const std::string &name)
 
void setParameterValue (const std::string &name, double value)
 
void setVectorValue (const std::string &base_name, kvector_t value)
 

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::unique_ptr< IDistribution1Dm_distribution
 
RealLimits m_limits
 
std::vector< std::string > m_linked_par_names
 
std::string m_name
 
size_t m_nbr_samples
 
std::string m_parname
 
std::unique_ptr< ParameterPoolm_pool
 parameter pool (kind of pointer-to-implementation) More...
 
double m_sigma_factor
 
double m_xmax
 
double m_xmin
 

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 18 of file ParameterDistribution.cpp.

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

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

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 39 of file ParameterDistribution.cpp.

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

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

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  : IParametricComponent("ParameterDistribution")
63  , m_parname(other.m_parname)
67  , m_limits(other.m_limits)
68  , m_xmin(other.m_xmin)
69  , m_xmax(other.m_xmax)
70 {
71  m_distribution.reset(other.m_distribution->clone());
72 }
std::vector< std::string > m_linked_par_names

References m_distribution.

◆ ~ParameterDistribution()

ParameterDistribution::~ParameterDistribution ( )
virtualdefault

Member Function Documentation

◆ createParameterTree()

ParameterPool * IParametricComponent::createParameterTree ( ) const
virtualinherited

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

Reimplemented in INode.

Definition at line 36 of file IParametricComponent.cpp.

37 {
38  auto* result = new ParameterPool;
39  m_pool->copyToExternalPool("/" + getName() + "/", result);
40  return result;
41 }
const std::string & getName() const
std::unique_ptr< ParameterPool > m_pool
parameter pool (kind of pointer-to-implementation)
Container with parameters for IParametricComponent object.
Definition: ParameterPool.h:29

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

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

Here is the call graph for this function:

◆ generateSamples()

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

generate list of sampled values with their weight

Definition at line 104 of file ParameterDistribution.cpp.

105 {
106  if (m_xmin < m_xmax)
107  return m_distribution->equidistantSamplesInRange(m_nbr_samples, m_xmin, m_xmax);
108  return m_distribution->equidistantSamples(m_nbr_samples, m_sigma_factor, m_limits);
109 }

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

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

◆ getDistribution() [1/2]

IDistribution1D * ParameterDistribution::getDistribution ( )

Definition at line 116 of file ParameterDistribution.cpp.

117 {
118  return m_distribution.get();
119 }

References m_distribution.

◆ getDistribution() [2/2]

◆ getLimits()

RealLimits ParameterDistribution::getLimits ( ) const
inline

Definition at line 63 of file ParameterDistribution.h.

63 { return m_limits; }

References m_limits.

Referenced by pyfmt2::printParameterDistribution().

◆ getLinkedParameterNames()

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

◆ getMainParameterName()

◆ getMaxValue()

double ParameterDistribution::getMaxValue ( ) const
inline

Definition at line 66 of file ParameterDistribution.h.

66 { return m_xmax; }

References m_xmax.

Referenced by TransformFromDomain::setItemFromSample().

◆ getMinValue()

double ParameterDistribution::getMinValue ( ) const
inline

Definition at line 65 of file ParameterDistribution.h.

65 { return m_xmin; }

References m_xmin.

Referenced by TransformFromDomain::setItemFromSample().

◆ getName()

◆ getNbrSamples()

size_t ParameterDistribution::getNbrSamples ( ) const

get number of samples for this distribution

Definition at line 97 of file ParameterDistribution.cpp.

98 {
99  if (m_distribution && m_distribution->isDelta())
100  return 1;
101  return m_nbr_samples;
102 }

References m_distribution, and m_nbr_samples.

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

◆ getSigmaFactor()

double ParameterDistribution::getSigmaFactor ( ) const
inline

get the sigma factor

Definition at line 52 of file ParameterDistribution.h.

52 { return m_sigma_factor; }

References m_sigma_factor.

Referenced by pyfmt2::printParameterDistribution().

◆ linkParameter()

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

◆ onChange()

◆ operator=()

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

Overload assignment operator.

Definition at line 76 of file ParameterDistribution.cpp.

77 {
78  if (this != &other) {
79  this->m_parname = other.m_parname;
82  m_distribution.reset(other.m_distribution->clone());
84  m_limits = other.m_limits;
85  m_xmin = other.m_xmin;
86  m_xmax = other.m_xmax;
87  }
88  return *this;
89 }

References m_distribution, m_limits, m_linked_par_names, m_nbr_samples, m_parname, m_sigma_factor, m_xmax, and m_xmin.

◆ parameter()

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

Returns parameter with given 'name'.

Definition at line 86 of file IParametricComponent.cpp.

87 {
88  return m_pool->parameter(name);
89 }
QString const & name(EShape k)
Definition: particles.cpp:21

References IParametricComponent::m_pool, and RealSpace::Particles::name().

Referenced by DepthProbeSimulation::initialize(), SpecularSimulation::initialize(), Lattice3D::initialize(), IParticle::registerAbundance(), ParticleLayout::registerParticleDensity(), IParticle::registerPosition(), Layer::registerThickness(), Lattice2D::setRotationEnabled(), and DistributionLogNormal::setUnits().

Here is the call graph for this function:

◆ parameterPool()

ParameterPool* IParametricComponent::parameterPool ( ) const
inlineinherited

Returns pointer to the parameter pool.

Definition at line 39 of file IParametricComponent.h.

39 { return m_pool.get(); } // has non-const usages!

References IParametricComponent::m_pool.

Referenced by INode::INode(), IParametricComponent::IParametricComponent(), pyfmt2::argumentList(), SampleBuilderNode::borrow_builder_parameters(), SampleBuilderNode::reset(), and IDistribution1D::setUnits().

◆ parametersToString()

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

Returns multiline string representing available parameters.

Definition at line 43 of file IParametricComponent.cpp.

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

References IParametricComponent::createParameterTree().

Here is the call graph for this function:

◆ registerParameter()

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

Definition at line 51 of file IParametricComponent.cpp.

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

References IParametricComponent::getName(), IParametricComponent::m_pool, RealSpace::Particles::name(), and IParametricComponent::onChange().

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

Here is the call graph for this function:

◆ registerVector()

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

Definition at line 57 of file IParametricComponent.cpp.

59 {
60  registerParameter(XComponentName(base_name), &((*p_vec)[0])).setUnit(units);
61  registerParameter(YComponentName(base_name), &((*p_vec)[1])).setUnit(units);
62  registerParameter(ZComponentName(base_name), &((*p_vec)[2])).setUnit(units);
63 }
static std::string XComponentName(const std::string &base_name)
static std::string ZComponentName(const std::string &base_name)
RealParameter & registerParameter(const std::string &name, double *parpointer)
static std::string YComponentName(const std::string &base_name)
RealParameter & setUnit(const std::string &name)
MVVM_MODEL_EXPORT std::string base_name(const std::string &path)
Provide the filename of a file path.
Definition: fileutils.cpp:78

References ModelView::Utils::base_name(), IParametricComponent::registerParameter(), RealParameter::setUnit(), IParametricComponent::XComponentName(), IParametricComponent::YComponentName(), and IParametricComponent::ZComponentName().

Referenced by Beam::Beam(), DetectionProperties::DetectionProperties(), InterferenceFunctionTwin::InterferenceFunctionTwin(), MultiLayer::MultiLayer(), Lattice3D::initialize(), and IParticle::registerPosition().

Here is the call graph for this function:

◆ removeParameter()

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

Definition at line 91 of file IParametricComponent.cpp.

92 {
93  m_pool->removeParameter(name);
94 }

References IParametricComponent::m_pool, and RealSpace::Particles::name().

Referenced by IParticle::registerAbundance(), ParticleLayout::registerParticleDensity(), Layer::registerThickness(), IParametricComponent::removeVector(), and Lattice2D::setRotationEnabled().

Here is the call graph for this function:

◆ removeVector()

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

Definition at line 96 of file IParametricComponent.cpp.

References ModelView::Utils::base_name(), IParametricComponent::removeParameter(), IParametricComponent::XComponentName(), IParametricComponent::YComponentName(), and IParametricComponent::ZComponentName().

Referenced by IParticle::registerPosition().

Here is the call graph for this function:

◆ setName()

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

Definition at line 69 of file IParametricComponent.h.

69 { m_name = name; }

References IParametricComponent::m_name, and RealSpace::Particles::name().

Referenced by BasicLattice2D::BasicLattice2D(), Beam::Beam(), ConvolutionDetectorResolution::ConvolutionDetectorResolution(), Crystal::Crystal(), DetectionProperties::DetectionProperties(), DistributionHandler::DistributionHandler(), FormFactorCoreShell::FormFactorCoreShell(), FormFactorCrystal::FormFactorCrystal(), FormFactorDecoratorMaterial::FormFactorDecoratorMaterial(), FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor(), FormFactorDecoratorRotation::FormFactorDecoratorRotation(), FormFactorWeighted::FormFactorWeighted(), HexagonalLattice2D::HexagonalLattice2D(), IDetector::IDetector(), 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(), Lattice3D::Lattice3D(), Layer::Layer(), LayerInterface::LayerInterface(), LayerRoughness::LayerRoughness(), MultiLayer::MultiLayer(), ParticleCoreShell::ParticleCoreShell(), ParticleDistribution::ParticleDistribution(), ParticleLayout::ParticleLayout(), RectangularDetector::RectangularDetector(), ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(), SampleBuilderNode::SampleBuilderNode(), SphericalDetector::SphericalDetector(), SquareLattice2D::SquareLattice2D(), Layer::clone(), LayersWithAbsorptionBuilder::createSampleByIndex(), Basic2DParaCrystalBuilder::createSampleByIndex(), ParticleInVacuumBuilder::createSampleByIndex(), SimpleMagneticRotationBuilder::createSampleByIndex(), DepthProbeSimulation::initialize(), GISASSimulation::initialize(), OffSpecularSimulation::initialize(), SpecularSimulation::initialize(), SpecularDetector1D::initialize(), MesoCrystal::initialize(), Particle::initialize(), ParticleComposition::initialize(), Beam::operator=(), SampleBuilderNode::operator=(), SampleBuilderNode::reset(), and SampleBuilderNode::setSBN().

Here is the call graph for this function:

◆ setParameterValue()

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

Definition at line 65 of file IParametricComponent.cpp.

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

References IParametricComponent::createParameterTree(), IParametricComponent::m_pool, RealSpace::Particles::name(), and ParameterPool::setMatchedParametersValue().

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

Here is the call graph for this function:

◆ setVectorValue()

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

Definition at line 78 of file IParametricComponent.cpp.

79 {
83 }
T z() const
Returns z-component in cartesian coordinate system.
Definition: BasicVector3D.h:67
T y() const
Returns y-component in cartesian coordinate system.
Definition: BasicVector3D.h:65
T x() const
Returns x-component in cartesian coordinate system.
Definition: BasicVector3D.h:63
void setParameterValue(const std::string &name, double value)

References ModelView::Utils::base_name(), IParametricComponent::setParameterValue(), BasicVector3D< T >::x(), IParametricComponent::XComponentName(), BasicVector3D< T >::y(), IParametricComponent::YComponentName(), BasicVector3D< T >::z(), and IParametricComponent::ZComponentName().

Here is the call graph for this function:

◆ XComponentName()

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

Definition at line 103 of file IParametricComponent.cpp.

104 {
105  return base_name + "X";
106 }

References ModelView::Utils::base_name().

Referenced by Lattice3D::initialize(), IParticle::registerPosition(), IParametricComponent::registerVector(), IParametricComponent::removeVector(), IParametricComponent::setVectorValue(), and VectorParameterTranslator::translate().

Here is the call graph for this function:

◆ YComponentName()

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

Definition at line 108 of file IParametricComponent.cpp.

109 {
110  return base_name + "Y";
111 }

References ModelView::Utils::base_name().

Referenced by IParametricComponent::registerVector(), IParametricComponent::removeVector(), IParametricComponent::setVectorValue(), and VectorParameterTranslator::translate().

Here is the call graph for this function:

◆ ZComponentName()

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

Definition at line 113 of file IParametricComponent.cpp.

114 {
115  return base_name + "Z";
116 }

References ModelView::Utils::base_name().

Referenced by IParametricComponent::registerVector(), IParametricComponent::removeVector(), IParametricComponent::setVectorValue(), and VectorParameterTranslator::translate().

Here is the call graph for this function:

Member Data Documentation

◆ m_distribution

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

◆ m_limits

RealLimits ParameterDistribution::m_limits
private

Definition at line 74 of file ParameterDistribution.h.

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

◆ m_linked_par_names

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

Definition at line 73 of file ParameterDistribution.h.

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

◆ m_name

std::string IParametricComponent::m_name
privateinherited

◆ m_nbr_samples

size_t ParameterDistribution::m_nbr_samples
private

Definition at line 71 of file ParameterDistribution.h.

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

◆ m_parname

std::string ParameterDistribution::m_parname
private

Definition at line 69 of file ParameterDistribution.h.

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

◆ m_pool

◆ m_sigma_factor

double ParameterDistribution::m_sigma_factor
private

◆ m_xmax

double ParameterDistribution::m_xmax
private

Definition at line 76 of file ParameterDistribution.h.

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

◆ m_xmin

double ParameterDistribution::m_xmin
private

Definition at line 75 of file ParameterDistribution.h.

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


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