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

Classes

struct  MaterialData
 

Public Member Functions

 PlainMultiLayerBySLDBuilder (int n_layers=10)
 
MultiLayerbuildSample () const override
 
virtual MultiLayercreateSampleByIndex (size_t)
 
virtual size_t size ()
 
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)
 

Protected Attributes

int m_number_of_layers
 
MaterialData m_si
 
MaterialData m_ti
 
MaterialData m_ni
 
double m_thick_ti
 
double m_thick_ni
 

Private Attributes

std::string m_name
 
std::unique_ptr< ParameterPoolm_pool
 

Detailed Description

Builds a sample with 10 interchanging homogeneous layers of Ti and Ni on silicone substrate.

Ti is 70 angstroms thick, Ni is 30 angstroms thick.

Definition at line 24 of file PlainMultiLayerBySLDBuilder.h.

Constructor & Destructor Documentation

◆ PlainMultiLayerBySLDBuilder()

PlainMultiLayerBySLDBuilder::PlainMultiLayerBySLDBuilder ( int  n_layers = 10)

Definition at line 21 of file PlainMultiLayerBySLDBuilder.cpp.

22  : m_number_of_layers(n_layers), m_si{2.0704e-06, 2.3726e-11}, m_ti{-1.9493e-06, 9.6013e-10},
23  m_ni{9.4245e-06, 1.1423e-09}, m_thick_ti(3.0), m_thick_ni(7.0)
24 {
25  registerParameter("ti_thickness", &m_thick_ti);
26 }
RealParameter & registerParameter(const std::string &name, double *parpointer)
double m_thick_ni
thickness of Ni layer
double m_thick_ti
thickness of titanium layer

References m_thick_ti, and IParameterized::registerParameter().

Here is the call graph for this function:

Member Function Documentation

◆ buildSample()

MultiLayer * PlainMultiLayerBySLDBuilder::buildSample ( ) const
overridevirtual

Implements ISampleBuilder.

Definition at line 28 of file PlainMultiLayerBySLDBuilder.cpp.

29 {
30  Material vacuum_material = MaterialBySLD();
31  Material substrate_material = MaterialBySLD("Si_substrate", m_si.sld_real, m_si.sld_imag);
32  Material ni_material = MaterialBySLD("Ni", m_ni.sld_real, m_ni.sld_imag);
33  Material ti_material = MaterialBySLD("Ti", m_ti.sld_real, m_ti.sld_imag);
34 
35  Layer vacuum_layer(vacuum_material);
36  Layer ni_layer(ni_material, m_thick_ni);
37  Layer ti_layer(ti_material, m_thick_ti);
38  Layer substrate_layer(substrate_material);
39 
40  MultiLayer* multi_layer = new MultiLayer();
41  multi_layer->addLayer(vacuum_layer);
42  for (int i = 0; i < m_number_of_layers; ++i) {
43  multi_layer->addLayer(ti_layer);
44  multi_layer->addLayer(ni_layer);
45  }
46  multi_layer->addLayer(substrate_layer);
47  return multi_layer;
48 }
A layer, with thickness (in nanometer) and material.
Definition: Layer.h:28
A wrapper for underlying material implementation.
Definition: Material.h:29
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:42
void addLayer(const Layer &layer)
Adds object to multilayer.
Definition: MultiLayer.cpp:54
double sld_imag
imaginary part of sld in AA^{-2}

References MultiLayer::addLayer(), m_ni, m_number_of_layers, m_si, m_thick_ni, m_thick_ti, m_ti, MaterialBySLD, PlainMultiLayerBySLDBuilder::MaterialData::sld_imag, and PlainMultiLayerBySLDBuilder::MaterialData::sld_real.

Here is the call graph for this function:

◆ createSampleByIndex()

virtual MultiLayer* ISampleBuilder::createSampleByIndex ( size_t  )
inlinevirtualinherited

Reimplemented in SimpleMagneticRotationBuilder, ParticleInVacuumBuilder, Basic2DParaCrystalBuilder, and LayersWithAbsorptionBuilder.

Definition at line 33 of file ISampleBuilder.h.

33 { return buildSample(); }
virtual MultiLayer * buildSample() const =0

References ISampleBuilder::buildSample().

Here is the call graph for this function:

◆ size()

virtual size_t ISampleBuilder::size ( )
inlinevirtualinherited

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

int PlainMultiLayerBySLDBuilder::m_number_of_layers
protected

Definition at line 35 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_si

MaterialData PlainMultiLayerBySLDBuilder::m_si
protected

Definition at line 36 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_ti

MaterialData PlainMultiLayerBySLDBuilder::m_ti
protected

Definition at line 37 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_ni

MaterialData PlainMultiLayerBySLDBuilder::m_ni
protected

Definition at line 38 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_thick_ti

double PlainMultiLayerBySLDBuilder::m_thick_ti
protected

thickness of titanium layer

Definition at line 39 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample(), and PlainMultiLayerBySLDBuilder().

◆ m_thick_ni

double PlainMultiLayerBySLDBuilder::m_thick_ni
protected

thickness of Ni layer

Definition at line 40 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ 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: