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

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

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

Classes

struct  MaterialData
 

Public Member Functions

 PlainMultiLayerBySLDBuilder (int n_layers=10)
 
MultiLayerbuildSample () const override
 
virtual ParameterPoolcreateParameterTree () const
 Creates new parameter pool, with all local parameters and those of its children. More...
 
virtual MultiLayercreateSampleByIndex (size_t)
 
const std::string & getName () const
 
virtual void onChange ()
 Action to be taken in inherited class when a parameter has changed. 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)
 
virtual size_t size ()
 

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

MaterialData m_ni
 
int m_number_of_layers
 
MaterialData m_si
 
double m_thick_ni
 thickness of Ni layer More...
 
double m_thick_ti
 thickness of titanium layer More...
 
MaterialData m_ti
 

Private Attributes

std::string m_name
 
std::unique_ptr< ParameterPoolm_pool
 parameter pool (kind of pointer-to-implementation) More...
 

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 29 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)
23  , m_si{2.0704e-06, 2.3726e-11}
24  , m_ti{-1.9493e-06, 9.6013e-10}
25  , m_ni{9.4245e-06, 1.1423e-09}
26  , m_thick_ti(3.0)
27  , m_thick_ni(7.0)
28 {
29  registerParameter("ti_thickness", &m_thick_ti);
30 }
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 IParametricComponent::registerParameter().

Here is the call graph for this function:

Member Function Documentation

◆ buildSample()

MultiLayer * PlainMultiLayerBySLDBuilder::buildSample ( ) const
overridevirtual

Implements ISampleBuilder.

Definition at line 32 of file PlainMultiLayerBySLDBuilder.cpp.

33 {
34  Material vacuum_material = MaterialBySLD();
35  Material substrate_material = MaterialBySLD("Si_substrate", m_si.sld_real, m_si.sld_imag);
36  Material ni_material = MaterialBySLD("Ni", m_ni.sld_real, m_ni.sld_imag);
37  Material ti_material = MaterialBySLD("Ti", m_ti.sld_real, m_ti.sld_imag);
38 
39  Layer vacuum_layer(vacuum_material);
40  Layer ni_layer(ni_material, m_thick_ni);
41  Layer ti_layer(ti_material, m_thick_ti);
42  Layer substrate_layer(substrate_material);
43 
44  MultiLayer* multi_layer = new MultiLayer();
45  multi_layer->addLayer(vacuum_layer);
46  for (int i = 0; i < m_number_of_layers; ++i) {
47  multi_layer->addLayer(ti_layer);
48  multi_layer->addLayer(ni_layer);
49  }
50  multi_layer->addLayer(substrate_layer);
51  return multi_layer;
52 }
A layer in a MultiLayer sample.
Definition: Layer.h:27
A wrapper for underlying material implementation.
Definition: Material.h:29
Our sample model: a stack of layers one below the other.
Definition: MultiLayer.h:41
void addLayer(const Layer &layer)
Adds layer with default (zero) roughness.
Definition: MultiLayer.cpp:53
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:

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

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

◆ getName()

◆ onChange()

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

◆ size()

virtual size_t ISampleBuilder::size ( )
inlinevirtualinherited

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

std::string IParametricComponent::m_name
privateinherited

◆ m_ni

MaterialData PlainMultiLayerBySLDBuilder::m_ni
protected

Definition at line 42 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_number_of_layers

int PlainMultiLayerBySLDBuilder::m_number_of_layers
protected

Definition at line 39 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_pool

◆ m_si

MaterialData PlainMultiLayerBySLDBuilder::m_si
protected

Definition at line 40 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_thick_ni

double PlainMultiLayerBySLDBuilder::m_thick_ni
protected

thickness of Ni layer

Definition at line 44 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().

◆ m_thick_ti

double PlainMultiLayerBySLDBuilder::m_thick_ti
protected

thickness of titanium layer

Definition at line 43 of file PlainMultiLayerBySLDBuilder.h.

Referenced by PlainMultiLayerBySLDBuilder(), and buildSample().

◆ m_ti

MaterialData PlainMultiLayerBySLDBuilder::m_ti
protected

Definition at line 41 of file PlainMultiLayerBySLDBuilder.h.

Referenced by buildSample().


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