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

Public Member Functions

 InterferenceFunctionRadialParaCrystal (double peak_distance, double damping_length)
 
InterferenceFunctionRadialParaCrystalclone () const override final
 
void accept (INodeVisitor *visitor) const override final
 
void setKappa (double kappa)
 
double kappa () const
 
void setDomainSize (double size)
 
double domainSize () const
 
complex_t FTPDF (double qpar) const
 
void setProbabilityDistribution (const IFTDistribution1D &pdf)
 
double peakDistance () const
 
double dampingLength () const
 
std::vector< const INode * > getChildren () const override final
 
double randomSample () const
 
virtual double evaluate (const kvector_t q, double outer_iff=1.0) const
 
void setPositionVariance (double var)
 
double positionVariance () const
 
virtual double getParticleDensity () const
 
virtual bool supportsMultilayer () const
 
double DWfactor (kvector_t q) const
 
virtual const Materialmaterial () const
 
std::vector< const Material * > containedMaterials () const
 
virtual void transferToCPP ()
 
virtual std::string treeToString () const
 
void registerChild (INode *node)
 
virtual void setParent (const INode *newParent)
 
const INodeparent () const
 
INodeparent ()
 
int copyNumber (const INode *node) const
 
std::string displayName () const
 
ParameterPoolcreateParameterTree () const
 
ParameterPoolparameterPool () 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)
 

Protected Member Functions

double iff_no_inner (const kvector_t q, double outer_iff) const
 

Protected Attributes

double m_position_var
 
const size_t m_NP
 
std::vector< double > m_P
 

Private Member Functions

double iff_without_dw (const kvector_t q) const override final
 
void init_parameters ()
 

Private Attributes

double m_peak_distance
 
double m_damping_length
 
std::unique_ptr< IFTDistribution1DmP_pdf
 
bool m_use_damping_length
 
double m_kappa
 
double m_domain_size
 
const INodem_parent {nullptr}
 
std::string m_name
 
std::unique_ptr< ParameterPoolm_pool
 

Detailed Description

Interference function of radial paracrystal.

Definition at line 26 of file InterferenceFunctionRadialParaCrystal.h.

Constructor & Destructor Documentation

◆ InterferenceFunctionRadialParaCrystal()

InterferenceFunctionRadialParaCrystal::InterferenceFunctionRadialParaCrystal ( double  peak_distance,
double  damping_length 
)

Constructor of interference function of radial paracrystal.

Parameters
peak_distanceaverage distance to the next neighbor in nanometers
damping_lengththe damping (coherence) length of the paracrystal in nanometers

Definition at line 24 of file InterferenceFunctionRadialParaCrystal.cpp.

26  : IInterferenceFunction(0), m_peak_distance(peak_distance), m_damping_length(damping_length),
28 {
29  setName("InterferenceRadialParaCrystal");
30  if (m_damping_length == 0.0)
31  m_use_damping_length = false;
32  registerParameter("PeakDistance", &m_peak_distance).setUnit("nm").setNonnegative();
33  registerParameter("DampingLength", &m_damping_length).setUnit("nm").setNonnegative();
34  registerParameter("SizeSpaceCoupling", &m_kappa).setNonnegative();
35  registerParameter("DomainSize", &m_domain_size).setUnit("nm").setNonnegative();
36 }
IInterferenceFunction(const NodeMeta &meta, const std::vector< double > &PValues)
RealParameter & registerParameter(const std::string &name, double *parpointer)
void setName(const std::string &name)
double m_peak_distance
the distance to the first neighbor peak
RealParameter & setNonnegative()
RealParameter & setUnit(const std::string &name)

References m_damping_length, m_domain_size, m_kappa, m_peak_distance, m_use_damping_length, IParameterized::registerParameter(), IParameterized::setName(), RealParameter::setNonnegative(), and RealParameter::setUnit().

Referenced by clone().

Here is the call graph for this function:

Member Function Documentation

◆ clone()

InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone ( ) const
finaloverridevirtual

Returns a clone of this ISample object.

Implements IInterferenceFunction.

Definition at line 38 of file InterferenceFunctionRadialParaCrystal.cpp.

39 {
41  ret->setPositionVariance(m_position_var);
42  if (mP_pdf)
43  ret->setProbabilityDistribution(*mP_pdf);
44  ret->setKappa(m_kappa);
45  ret->setDomainSize(m_domain_size);
46  return ret;
47 }
InterferenceFunctionRadialParaCrystal(double peak_distance, double damping_length)
Constructor of interference function of radial paracrystal.
std::unique_ptr< IFTDistribution1D > mP_pdf
Fourier transformed probability distribution of the nearest particle.

References InterferenceFunctionRadialParaCrystal(), m_damping_length, m_domain_size, m_kappa, m_peak_distance, IInterferenceFunction::m_position_var, and mP_pdf.

Here is the call graph for this function:

◆ accept()

void InterferenceFunctionRadialParaCrystal::accept ( INodeVisitor visitor) const
inlinefinaloverridevirtual

Calls the INodeVisitor's visit method.

Implements INode.

Definition at line 32 of file InterferenceFunctionRadialParaCrystal.h.

32 { visitor->visit(this); }
virtual void visit(const BasicLattice *)
Definition: INodeVisitor.h:154

◆ setKappa()

void InterferenceFunctionRadialParaCrystal::setKappa ( double  kappa)

Sets size spacing coupling parameter of the Size Spacing Correlation Approximation.

Definition at line 50 of file InterferenceFunctionRadialParaCrystal.cpp.

References kappa(), and m_kappa.

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

Here is the call graph for this function:

◆ kappa()

double InterferenceFunctionRadialParaCrystal::kappa ( ) const

Definition at line 55 of file InterferenceFunctionRadialParaCrystal.cpp.

56 {
57  return m_kappa;
58 }

References m_kappa.

Referenced by LayoutStrategyBuilder::createStrategy(), and setKappa().

◆ setDomainSize()

void InterferenceFunctionRadialParaCrystal::setDomainSize ( double  size)

Sets domain size (finite size corrections).

Parameters
sizesize of coherence domain along the lattice main axis in nanometers

Definition at line 63 of file InterferenceFunctionRadialParaCrystal.cpp.

64 {
65  m_domain_size = size;
66 }

References m_domain_size.

◆ domainSize()

double InterferenceFunctionRadialParaCrystal::domainSize ( ) const
inline

Definition at line 38 of file InterferenceFunctionRadialParaCrystal.h.

38 { return m_domain_size; }

References m_domain_size.

◆ FTPDF()

complex_t InterferenceFunctionRadialParaCrystal::FTPDF ( double  qpar) const

Definition at line 68 of file InterferenceFunctionRadialParaCrystal.cpp.

69 {
70  complex_t phase = exp_I(qpar * m_peak_distance);
71  double amplitude = mP_pdf->evaluate(qpar);
72  complex_t result = phase * amplitude;
74  result *= std::exp(-m_peak_distance / m_damping_length);
75  return result;
76 }
std::complex< double > complex_t
Definition: Complex.h:20
complex_t exp_I(complex_t z)
Returns exp(I*z), where I is the imaginary unit.
Definition: Complex.h:30

References exp_I(), m_damping_length, m_peak_distance, m_use_damping_length, and mP_pdf.

Referenced by SSCAHelper::getCharacteristicDistribution(), and iff_without_dw().

Here is the call graph for this function:

◆ setProbabilityDistribution()

void InterferenceFunctionRadialParaCrystal::setProbabilityDistribution ( const IFTDistribution1D pdf)

Sets one-dimensional probability distribution.

Parameters
pdfprobability distribution (Fourier transform of probability density)

Definition at line 81 of file InterferenceFunctionRadialParaCrystal.cpp.

82 {
83  mP_pdf.reset(pdf.clone());
84  registerChild(mP_pdf.get());
85 }
virtual IFTDistribution1D * clone() const =0
void registerChild(INode *node)
Definition: INode.cpp:58

References IFTDistribution1D::clone(), mP_pdf, and INode::registerChild().

Referenced by RadialParaCrystalBuilder::buildSample(), CosineRippleBuilder::buildSample(), TriangularRippleBuilder::buildSample(), SizeDistributionDAModelBuilder::buildSample(), SizeDistributionLMAModelBuilder::buildSample(), SizeDistributionSSCAModelBuilder::buildSample(), and CylindersInSSCABuilder::buildSample().

Here is the call graph for this function:

◆ peakDistance()

double InterferenceFunctionRadialParaCrystal::peakDistance ( ) const
inline

Definition at line 44 of file InterferenceFunctionRadialParaCrystal.h.

44 { return m_peak_distance; }

References m_peak_distance.

◆ dampingLength()

double InterferenceFunctionRadialParaCrystal::dampingLength ( ) const
inline

Definition at line 46 of file InterferenceFunctionRadialParaCrystal.h.

46 { return m_damping_length; }

References m_damping_length.

◆ getChildren()

std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren ( ) const
finaloverridevirtual

Returns a vector of children (const).

Reimplemented from INode.

Definition at line 87 of file InterferenceFunctionRadialParaCrystal.cpp.

88 {
89  return std::vector<const INode*>() << mP_pdf;
90 }

References mP_pdf.

◆ randomSample()

double InterferenceFunctionRadialParaCrystal::randomSample ( ) const
inline

Definition at line 50 of file InterferenceFunctionRadialParaCrystal.h.

50 { return mP_pdf->createSampler()->randomSample(); }

References mP_pdf.

◆ iff_without_dw()

double InterferenceFunctionRadialParaCrystal::iff_without_dw ( const kvector_t  q) const
finaloverrideprivatevirtual

Calculates the structure factor without Debye-Waller factor.

Implements IInterferenceFunction.

Definition at line 92 of file InterferenceFunctionRadialParaCrystal.cpp.

93 {
94  if (!mP_pdf)
95  throw Exceptions::NullPointerException("InterferenceFunctionRadialParaCrystal::"
96  "evaluate() -> Error! Probability distribution for "
97  "interference function not properly initialized");
98  double result = 0.0;
99  double qxr = q.x();
100  double qyr = q.y();
101  double qpar = std::sqrt(qxr * qxr + qyr * qyr);
102  int n = static_cast<int>(std::abs(m_domain_size / m_peak_distance));
103  double nd = static_cast<double>(n);
104  complex_t fp = FTPDF(qpar);
105  if (n < 1) {
106  if (std::abs(1.0 - fp) < 10. * std::numeric_limits<double>::epsilon()) {
107  result = mP_pdf->qSecondDerivative() / m_peak_distance / m_peak_distance;
108  } else {
109  result = ((1.0 + fp) / (1.0 - fp)).real();
110  }
111  } else {
112  if (std::norm(1.0 - fp) < 10. * std::numeric_limits<double>::epsilon()) {
113  result = nd;
114  }
115  // for (1-fp)*nd small, take the series expansion to second order in nd*(1-fp)
116  else if (std::abs(1.0 - fp) * nd < 2e-4) {
117  complex_t intermediate =
118  (nd - 1.0) / 2.0 + (nd * nd - 1.0) * (fp - 1.0) / 6.0
119  + (nd * nd * nd - 2.0 * nd * nd - nd + 2.0) * (fp - 1.0) * (fp - 1.0) / 24.0;
120  result = 1.0 + 2.0 * intermediate.real();
121  } else {
122  complex_t tmp;
123  if (std::abs(fp) == 0.0
124  || std::log(std::abs(fp)) * nd < std::log(std::numeric_limits<double>::min())) {
125  tmp = 0.0;
126  } else {
127  tmp = std::pow(fp, n);
128  }
129  complex_t intermediate =
130  fp / (1.0 - fp) - fp * (1.0 - tmp) / nd / (1.0 - fp) / (1.0 - fp);
131  result = 1.0 + 2.0 * intermediate.real();
132  }
133  }
134  return result;
135 }
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

References FTPDF(), m_domain_size, m_peak_distance, mP_pdf, BasicVector3D< T >::x(), and BasicVector3D< T >::y().

Here is the call graph for this function:

◆ init_parameters()

void InterferenceFunctionRadialParaCrystal::init_parameters ( )
private

◆ evaluate()

double IInterferenceFunction::evaluate ( const kvector_t  q,
double  outer_iff = 1.0 
) const
virtualinherited

Evaluates the interference function for a given wavevector transfer.

Reimplemented in InterferenceFunction2DSuperLattice.

Definition at line 35 of file IInterferenceFunction.cpp.

36 {
37  return iff_no_inner(q, outer_iff);
38 }
double iff_no_inner(const kvector_t q, double outer_iff) const
Calculates the structure factor in the absence of extra inner structure.

References IInterferenceFunction::iff_no_inner().

Here is the call graph for this function:

◆ setPositionVariance()

void IInterferenceFunction::setPositionVariance ( double  var)
inherited

Sets the variance of the position for the calculation of the DW factor It is defined as the variance in each relevant dimension.

Definition at line 40 of file IInterferenceFunction.cpp.

41 {
42  if (var < 0.0)
43  throw std::runtime_error("IInterferenceFunction::setPositionVariance: "
44  "variance should be positive.");
45  m_position_var = var;
46 }

References IInterferenceFunction::m_position_var.

Referenced by FiniteSquareLatticeBuilder::buildSample(), and SuperLatticeBuilder::buildSample().

◆ positionVariance()

double IInterferenceFunction::positionVariance ( ) const
inlineinherited

Returns the position variance.

Definition at line 39 of file IInterferenceFunction.h.

39 { return m_position_var; }

References IInterferenceFunction::m_position_var.

Referenced by SampleToPython::defineInterferenceFunctions().

◆ getParticleDensity()

virtual double IInterferenceFunction::getParticleDensity ( ) const
inlinevirtualinherited

If defined by this interference function's parameters, returns the particle density (per area).

Otherwise, returns zero or a user-defined value

Reimplemented in InterferenceFunctionHardDisk, InterferenceFunctionFinite2DLattice, InterferenceFunction2DParaCrystal, and InterferenceFunction2DLattice.

Definition at line 43 of file IInterferenceFunction.h.

43 { return 0.0; }

◆ supportsMultilayer()

virtual bool IInterferenceFunction::supportsMultilayer ( ) const
inlinevirtualinherited

Indicates if this interference function can be used with a multilayer (DWBA mode)

Reimplemented in InterferenceFunctionFinite3DLattice, and InterferenceFunction3DLattice.

Definition at line 46 of file IInterferenceFunction.h.

46 { return true; }

Referenced by LayoutStrategyBuilder::createStrategy(), and IInterferenceFunction::DWfactor().

◆ DWfactor()

double IInterferenceFunction::DWfactor ( kvector_t  q) const
inherited

Evaluates the Debye-Waller factor for a given wavevector transfer.

Definition at line 48 of file IInterferenceFunction.cpp.

49 {
50  // remove z component for two dimensional interference functions:
51  if (supportsMultilayer())
52  q.setZ(0.0);
53  return std::exp(-q.mag2() * m_position_var);
54 }
double mag2() const
Returns magnitude squared of the vector.
void setZ(const T &a)
Sets z-component in cartesian coordinate system.
Definition: BasicVector3D.h:75
virtual bool supportsMultilayer() const
Indicates if this interference function can be used with a multilayer (DWBA mode)

References IInterferenceFunction::m_position_var, BasicVector3D< T >::mag2(), BasicVector3D< T >::setZ(), and IInterferenceFunction::supportsMultilayer().

Referenced by IInterferenceFunction::iff_no_inner().

Here is the call graph for this function:

◆ iff_no_inner()

double IInterferenceFunction::iff_no_inner ( const kvector_t  q,
double  outer_iff 
) const
protectedinherited

Calculates the structure factor in the absence of extra inner structure.

Definition at line 56 of file IInterferenceFunction.cpp.

57 {
58  return DWfactor(q) * (iff_without_dw(q) * outer_iff - 1.0) + 1.0;
59 }
double DWfactor(kvector_t q) const
Evaluates the Debye-Waller factor for a given wavevector transfer.
virtual double iff_without_dw(const kvector_t q) const =0
Calculates the structure factor without Debye-Waller factor.

References IInterferenceFunction::DWfactor(), and IInterferenceFunction::iff_without_dw().

Referenced by IInterferenceFunction::evaluate(), and InterferenceFunction2DSuperLattice::interferenceForXi().

Here is the call graph for this function:

◆ material()

◆ containedMaterials()

std::vector< const Material * > ISample::containedMaterials ( ) const
inherited

Returns set of unique materials contained in this ISample.

Definition at line 23 of file ISample.cpp.

24 {
25  std::vector<const Material*> result;
26  if (const Material* p_material = material())
27  result.push_back(p_material);
28  for (auto child : getChildren()) {
29  if (const ISample* sample = dynamic_cast<const ISample*>(child)) {
30  for (const Material* p_material : sample->containedMaterials())
31  result.push_back(p_material);
32  }
33  }
34  return result;
35 }
virtual std::vector< const INode * > getChildren() const
Returns a vector of children (const).
Definition: INode.cpp:64
Pure virtual base class for sample components and properties related to scattering.
Definition: ISample.h:28
virtual const Material * material() const
Returns nullptr, unless overwritten to return a specific material.
Definition: ISample.h:37
A wrapper for underlying material implementation.
Definition: Material.h:29

References INode::getChildren(), and ISample::material().

Referenced by MultiLayerUtils::ContainsCompatibleMaterials(), anonymous_namespace{ProcessedSample.cpp}::ContainsMagneticMaterial(), and SampleToPython::initLabels().

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.

◆ treeToString()

std::string INode::treeToString ( ) const
virtualinherited

Returns multiline string representing tree structure below the node.

Definition at line 53 of file INode.cpp.

54 {
55  return NodeUtils::nodeToString(*this);
56 }
std::string nodeToString(const INode &node)
Returns multiline string representing tree structure starting from given node.
Definition: NodeUtils.cpp:67

References NodeUtils::nodeToString().

Here is the call graph for this function:

◆ registerChild()

void INode::registerChild ( INode node)
inherited

Definition at line 58 of file INode.cpp.

59 {
60  ASSERT(node);
61  node->setParent(this);
62 }
#define ASSERT(condition)
Definition: Assert.h:26
virtual void setParent(const INode *newParent)
Definition: INode.cpp:69

References ASSERT, and INode::setParent().

Referenced by ParticleLayout::addAndRegisterAbstractParticle(), ParticleCoreShell::addAndRegisterCore(), MultiLayer::addAndRegisterInterface(), MultiLayer::addAndRegisterLayer(), ParticleCoreShell::addAndRegisterShell(), Layer::addLayout(), ParticleComposition::addParticlePointer(), Beam::Beam(), Crystal::Crystal(), IDetector::IDetector(), Simulation::initialize(), MesoCrystal::initialize(), Instrument::Instrument(), Beam::operator=(), Instrument::operator=(), Particle::Particle(), ParticleDistribution::ParticleDistribution(), IParticle::rotate(), ParticleLayout::setAndRegisterInterferenceFunction(), Simulation::setBackground(), InterferenceFunction1DLattice::setDecayFunction(), InterferenceFunction2DLattice::setDecayFunction(), Instrument::setDetector(), IDetector::setDetectorResolution(), Beam::setFootprintFactor(), Particle::setFormFactor(), InterferenceFunctionFinite3DLattice::setLattice(), InterferenceFunction2DLattice::setLattice(), InterferenceFunction2DParaCrystal::setLattice(), InterferenceFunction2DSuperLattice::setLattice(), InterferenceFunctionFinite2DLattice::setLattice(), setProbabilityDistribution(), InterferenceFunction2DParaCrystal::setProbabilityDistributions(), ConvolutionDetectorResolution::setResolutionFunction(), IParticle::setRotation(), LayerInterface::setRoughness(), and InterferenceFunction2DSuperLattice::setSubstructureIFF().

Here is the call graph for this function:

◆ setParent()

void INode::setParent ( const INode newParent)
virtualinherited

Reimplemented in SampleProvider.

Definition at line 69 of file INode.cpp.

70 {
71  m_parent = newParent;
72 }
const INode * m_parent
Definition: INode.h:81

References INode::m_parent.

Referenced by INode::registerChild(), SampleProvider::setBuilder(), and SampleProvider::setParent().

◆ parent() [1/2]

const INode * INode::parent ( ) const
inherited

◆ parent() [2/2]

INode * INode::parent ( )
inherited

Definition at line 79 of file INode.cpp.

80 {
81  return const_cast<INode*>(m_parent);
82 }
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49

References INode::m_parent.

◆ copyNumber()

int INode::copyNumber ( const INode node) const
inherited

Returns copyNumber of child, which takes into account existence of children with same name.

Definition at line 84 of file INode.cpp.

85 {
86  if (node->parent() != this)
87  return -1;
88 
89  int result(-1), count(0);
90  for (auto child : getChildren()) {
91 
92  if (child == nullptr)
93  throw std::runtime_error("INode::copyNumber() -> Error. Nullptr as child.");
94 
95  if (child == node)
96  result = count;
97 
98  if (child->getName() == node->getName())
99  ++count;
100  }
101 
102  return count > 1 ? result : -1;
103 }
const INode * parent() const
Definition: INode.cpp:74
const std::string & getName() const

References INode::getChildren(), IParameterized::getName(), and INode::parent().

Referenced by INode::displayName().

Here is the call graph for this function:

◆ displayName()

std::string INode::displayName ( ) const
inherited

Returns display name, composed from the name of node and it's copy number.

Definition at line 105 of file INode.cpp.

106 {
107  std::string result = getName();
108  if (m_parent) {
109  int index = m_parent->copyNumber(this);
110  if (index >= 0)
111  result = result + std::to_string(index);
112  }
113  return result;
114 }
int copyNumber(const INode *node) const
Returns copyNumber of child, which takes into account existence of children with same name.
Definition: INode.cpp:84

References INode::copyNumber(), IParameterized::getName(), and INode::m_parent.

Referenced by NodeUtils::nodePath(), and anonymous_namespace{NodeUtils.cpp}::nodeString().

Here is the call graph for this function:

◆ createParameterTree()

ParameterPool * INode::createParameterTree ( ) const
virtualinherited

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

Reimplemented from IParameterized.

Definition at line 116 of file INode.cpp.

117 {
118  std::unique_ptr<ParameterPool> result(new ParameterPool);
119 
121  it.first();
122  while (!it.isDone()) {
123  const INode* child = it.getCurrent();
124  const std::string path = NodeUtils::nodePath(*child, this->parent()) + "/";
125  child->parameterPool()->copyToExternalPool(path, result.get());
126  it.next();
127  }
128 
129  return result.release();
130 }
ParameterPool * parameterPool() const
Returns pointer to the parameter pool.
Iterator through INode tree of objects.
Definition: NodeIterator.h:90
Container with parameters for IParameterized object.
Definition: ParameterPool.h:30
void copyToExternalPool(const std::string &prefix, ParameterPool *other_pool) const
Copies parameters of given pool to other pool, prepeding prefix to the parameter names.
std::string nodePath(const INode &node, const INode *root=nullptr)
Returns path composed of node's displayName, with respect to root node.
Definition: NodeUtils.cpp:82

References ParameterPool::copyToExternalPool(), NodeIterator< Strategy >::first(), NodeIterator< Strategy >::getCurrent(), NodeIterator< Strategy >::isDone(), NodeIterator< Strategy >::next(), NodeUtils::nodePath(), IParameterized::parameterPool(), and INode::parent().

Referenced by ParticleDistribution::generateParticles(), Simulation::runSimulation(), DepthProbeSimulation::validateParametrization(), OffSpecSimulation::validateParametrization(), and SpecularSimulation::validateParametrization().

Here is the call graph for this function:

◆ 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().

◆ 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(), 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 }
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)

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
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(), 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_peak_distance

double InterferenceFunctionRadialParaCrystal::m_peak_distance
private

the distance to the first neighbor peak

Definition at line 56 of file InterferenceFunctionRadialParaCrystal.h.

Referenced by clone(), FTPDF(), iff_without_dw(), InterferenceFunctionRadialParaCrystal(), and peakDistance().

◆ m_damping_length

double InterferenceFunctionRadialParaCrystal::m_damping_length
private

damping length of paracrystal

Definition at line 57 of file InterferenceFunctionRadialParaCrystal.h.

Referenced by clone(), dampingLength(), FTPDF(), and InterferenceFunctionRadialParaCrystal().

◆ mP_pdf

std::unique_ptr<IFTDistribution1D> InterferenceFunctionRadialParaCrystal::mP_pdf
private

Fourier transformed probability distribution of the nearest particle.

Definition at line 59 of file InterferenceFunctionRadialParaCrystal.h.

Referenced by clone(), FTPDF(), getChildren(), iff_without_dw(), randomSample(), and setProbabilityDistribution().

◆ m_use_damping_length

bool InterferenceFunctionRadialParaCrystal::m_use_damping_length
private

◆ m_kappa

double InterferenceFunctionRadialParaCrystal::m_kappa
private

Size-spacing coupling parameter.

Definition at line 61 of file InterferenceFunctionRadialParaCrystal.h.

Referenced by clone(), InterferenceFunctionRadialParaCrystal(), kappa(), and setKappa().

◆ m_domain_size

double InterferenceFunctionRadialParaCrystal::m_domain_size
private

◆ m_position_var

◆ m_parent

const INode* INode::m_parent {nullptr}
privateinherited

Definition at line 81 of file INode.h.

Referenced by INode::displayName(), INode::parent(), and INode::setParent().

◆ m_NP

const size_t INode::m_NP
protectedinherited

Definition at line 86 of file INode.h.

Referenced by INode::INode().

◆ m_P

std::vector<double> INode::m_P
protectedinherited

Definition at line 87 of file INode.h.

Referenced by INode::INode(), and IFootprintFactor::setWidthRatio().

◆ m_name

std::string IParameterized::m_name
privateinherited

Definition at line 72 of file IParameterized.h.

Referenced by IParameterized::getName(), and IParameterized::setName().

◆ m_pool

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

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