BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MultiLayerUtils Namespace Reference

Functions

double LayerThickness (const MultiLayer &multilayer, size_t i)
 
const LayerInterfaceLayerTopInterface (const MultiLayer &multilayer, size_t i)
 
const LayerInterfaceLayerBottomInterface (const MultiLayer &multilayer, size_t i)
 
const LayerRoughnessLayerTopRoughness (const MultiLayer &multilayer, size_t i)
 
size_t IndexOfLayer (const MultiLayer &multilayer, const Layer *p_layer)
 
bool ContainsCompatibleMaterials (const MultiLayer &multilayer)
 
std::vector< ZLimitsParticleRegions (const MultiLayer &multilayer, bool use_slicing)
 
bool hasRoughness (const MultiLayer &sample)
 

Function Documentation

◆ LayerThickness()

double MultiLayerUtils::LayerThickness ( const MultiLayer multilayer,
size_t  i 
)

Returns thickness of layer.

Definition at line 29 of file MultiLayerUtils.cpp.

30 {
31  return multilayer.layer(i)->thickness();
32 }
double thickness() const
Definition: Layer.h:39
const Layer * layer(size_t i_layer) const
Returns layer with given index.
Definition: MultiLayer.cpp:88

References MultiLayer::layer(), and Layer::thickness().

Referenced by anonymous_namespace{MultiLayerUtils.cpp}::BottomLayerCoordinates(), and ProcessedSample::initLayouts().

Here is the call graph for this function:

◆ LayerTopInterface()

const LayerInterface * MultiLayerUtils::LayerTopInterface ( const MultiLayer multilayer,
size_t  i 
)

Returns top interface of layer.

Definition at line 34 of file MultiLayerUtils.cpp.

35 {
36  if (i == 0)
37  return nullptr;
38  return multilayer.layerInterface(i - 1);
39 }
const LayerInterface * layerInterface(size_t i_interface) const
Returns interface with given index.
Definition: MultiLayer.cpp:93

References MultiLayer::layerInterface().

Here is the call graph for this function:

◆ LayerBottomInterface()

const LayerInterface * MultiLayerUtils::LayerBottomInterface ( const MultiLayer multilayer,
size_t  i 
)

Returns bottom interface of layer.

Definition at line 41 of file MultiLayerUtils.cpp.

42 {
43  if (i + 1 < multilayer.numberOfLayers())
44  return multilayer.layerInterface(i);
45  return nullptr;
46 }
size_t numberOfLayers() const
Definition: MultiLayer.h:53

References MultiLayer::layerInterface(), and MultiLayer::numberOfLayers().

Referenced by MultiLayer::getChildren().

Here is the call graph for this function:

◆ LayerTopRoughness()

const LayerRoughness * MultiLayerUtils::LayerTopRoughness ( const MultiLayer multilayer,
size_t  i 
)

Returns top roughness of layer.

Definition at line 48 of file MultiLayerUtils.cpp.

49 {
50  if (i == 0)
51  return nullptr;
52  return multilayer.layerInterface(i - 1)->getRoughness();
53 }
const LayerRoughness * getRoughness() const
Returns roughness of the interface.

References LayerInterface::getRoughness(), and MultiLayer::layerInterface().

Referenced by ProcessedSample::initSlices().

Here is the call graph for this function:

◆ IndexOfLayer()

size_t MultiLayerUtils::IndexOfLayer ( const MultiLayer multilayer,
const Layer p_layer 
)

Returns the index of the given layer.

Definition at line 55 of file MultiLayerUtils.cpp.

56 {
57  for (size_t i = 0; i < multilayer.numberOfLayers(); ++i)
58  if (p_layer == multilayer.layer(i))
59  return i;
60  throw std::out_of_range("MultiLayerUtils::IndexOfLayer: layer not found");
61 }

References MultiLayer::layer(), and MultiLayer::numberOfLayers().

Here is the call graph for this function:

◆ ContainsCompatibleMaterials()

bool MultiLayerUtils::ContainsCompatibleMaterials ( const MultiLayer multilayer)

Returns true if the multilayer contains non-default materials of one type only.

Definition at line 63 of file MultiLayerUtils.cpp.

64 {
67 }
std::vector< const Material * > containedMaterials() const
Returns set of unique materials contained in this ISample.
Definition: ISample.cpp:23
MATERIAL_TYPES checkMaterialTypes(const std::vector< const Material * > &materials)
Checks if all non-default materials in materials are of the same type and returns this type.

References MaterialUtils::checkMaterialTypes(), ISample::containedMaterials(), and InvalidMaterialType.

Referenced by Simulation::prepareSimulation().

Here is the call graph for this function:

◆ ParticleRegions()

std::vector< ZLimits > MultiLayerUtils::ParticleRegions ( const MultiLayer multilayer,
bool  use_slicing 
)

Calculate z-regions occupied by particles.

Definition at line 69 of file MultiLayerUtils.cpp.

71 {
72  auto bottom_coords = BottomLayerCoordinates(multilayer);
73  LayerFillLimits layer_fill_limits(bottom_coords);
74  if (use_slicing) {
75  for (size_t i = 0; i < multilayer.numberOfLayers(); ++i) {
76  auto p_layer = multilayer.layer(i);
77  double offset = (i == 0) ? 0 : bottom_coords[i - 1];
78  for (auto p_layout : p_layer->layouts()) {
79  for (auto p_particle : p_layout->particles())
80  layer_fill_limits.update(p_particle->bottomTopZ(), offset);
81  }
82  }
83  }
84  return layer_fill_limits.layerZLimits();
85 }
Helper class for the graded layer approximation.
std::vector< double > BottomLayerCoordinates(const MultiLayer &multilayer)

References anonymous_namespace{MultiLayerUtils.cpp}::BottomLayerCoordinates(), MultiLayer::layer(), LayerFillLimits::layerZLimits(), MultiLayer::numberOfLayers(), and LayerFillLimits::update().

Referenced by ProcessedSample::initSlices().

Here is the call graph for this function:

◆ hasRoughness()

bool MultiLayerUtils::hasRoughness ( const MultiLayer sample)

Definition at line 87 of file MultiLayerUtils.cpp.

88 {
89  for (size_t i = 0; i < sample.numberOfLayers() - 1; i++) {
90  if (sample.layerInterface(i)->getRoughness())
91  return true;
92  }
93  return false;
94 }

References LayerInterface::getRoughness(), MultiLayer::layerInterface(), and MultiLayer::numberOfLayers().

Here is the call graph for this function: