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

Public Member Functions

 ProcessedLayout (const ILayout &layout, const std::vector< Slice > &slices, double z_ref, const IFresnelMap *p_fresnel_map, bool polarized)
 
 ProcessedLayout (ProcessedLayout &&other)
 
 ~ProcessedLayout ()
 
size_t numberOfSlices () const
 
double surfaceDensity () const
 
const std::vector< FormFactorCoherentSum > & formFactorList () const
 
const IInterferenceFunctioninterferenceFunction () const
 
std::map< size_t, std::vector< HomogeneousRegion > > regionMap () const
 

Private Member Functions

void collectFormFactors (const ILayout &layout, const std::vector< Slice > &slices, double z_ref)
 
FormFactorCoherentSum ProcessParticle (const IParticle &particle, const std::vector< Slice > &slices, double z_ref)
 
void mergeRegionMap (const std::map< size_t, std::vector< HomogeneousRegion >> &region_map)
 

Private Attributes

const IFresnelMapmp_fresnel_map
 
bool m_polarized
 
size_t m_n_slices
 
double m_surface_density
 
std::vector< FormFactorCoherentSumm_formfactors
 
std::unique_ptr< IInterferenceFunctionmP_iff
 
std::map< size_t, std::vector< HomogeneousRegion > > m_region_map
 

Detailed Description

Data structure that contains preprocessed data for a single layout.

If particles in the layout crossed the limits of the layer slices, these particles will be sliced themselves.

Definition at line 37 of file ProcessedLayout.h.

Constructor & Destructor Documentation

◆ ProcessedLayout() [1/2]

ProcessedLayout::ProcessedLayout ( const ILayout layout,
const std::vector< Slice > &  slices,
double  z_ref,
const IFresnelMap p_fresnel_map,
bool  polarized 
)

Definition at line 31 of file ProcessedLayout.cpp.

33  : mp_fresnel_map(p_fresnel_map), m_polarized(polarized)
34 {
35  m_n_slices = slices.size();
36  collectFormFactors(layout, slices, z_ref);
37  if (auto p_iff = layout.interferenceFunction())
38  mP_iff.reset(p_iff->clone());
39 }
virtual const IInterferenceFunction * interferenceFunction() const =0
Returns the interference function.
std::unique_ptr< IInterferenceFunction > mP_iff
void collectFormFactors(const ILayout &layout, const std::vector< Slice > &slices, double z_ref)
const IFresnelMap * mp_fresnel_map

References collectFormFactors(), ILayout::interferenceFunction(), m_n_slices, and mP_iff.

Here is the call graph for this function:

◆ ProcessedLayout() [2/2]

ProcessedLayout::ProcessedLayout ( ProcessedLayout &&  other)

Definition at line 41 of file ProcessedLayout.cpp.

42 {
44  m_polarized = other.m_polarized;
45  m_n_slices = other.m_n_slices;
47  m_formfactors = std::move(other.m_formfactors);
48  mP_iff = std::move(other.mP_iff);
49  m_region_map = std::move(other.m_region_map);
50 }
std::map< size_t, std::vector< HomogeneousRegion > > m_region_map
std::vector< FormFactorCoherentSum > m_formfactors
double m_surface_density

References m_formfactors, m_n_slices, m_polarized, m_region_map, m_surface_density, mp_fresnel_map, and mP_iff.

◆ ~ProcessedLayout()

ProcessedLayout::~ProcessedLayout ( )
default

Member Function Documentation

◆ numberOfSlices()

size_t ProcessedLayout::numberOfSlices ( ) const

Definition at line 52 of file ProcessedLayout.cpp.

53 {
54  return m_n_slices;
55 }

References m_n_slices.

Referenced by ParticleLayoutComputation::compute(), and LayoutStrategyBuilder::createStrategy().

◆ surfaceDensity()

double ProcessedLayout::surfaceDensity ( ) const

Definition at line 57 of file ProcessedLayout.cpp.

58 {
59  return m_surface_density;
60 }

References m_surface_density.

Referenced by ParticleLayoutComputation::ParticleLayoutComputation().

◆ formFactorList()

const std::vector< FormFactorCoherentSum > & ProcessedLayout::formFactorList ( ) const

Definition at line 62 of file ProcessedLayout.cpp.

63 {
64  return m_formfactors;
65 }

References m_formfactors.

Referenced by LayoutStrategyBuilder::createStrategy().

◆ interferenceFunction()

const IInterferenceFunction * ProcessedLayout::interferenceFunction ( ) const

Definition at line 67 of file ProcessedLayout.cpp.

68 {
69  return mP_iff.get();
70 }

References mP_iff.

Referenced by LayoutStrategyBuilder::createStrategy().

◆ regionMap()

std::map< size_t, std::vector< HomogeneousRegion > > ProcessedLayout::regionMap ( ) const

Definition at line 72 of file ProcessedLayout.cpp.

73 {
74  return m_region_map;
75 }

References m_region_map.

Referenced by ParticleLayoutComputation::ParticleLayoutComputation().

◆ collectFormFactors()

void ProcessedLayout::collectFormFactors ( const ILayout layout,
const std::vector< Slice > &  slices,
double  z_ref 
)
private

Definition at line 79 of file ProcessedLayout.cpp.

81 {
82  double layout_abundance = layout.getTotalAbundance();
83  for (auto p_particle : layout.particles()) {
84  auto ff_coh = ProcessParticle(*p_particle, slices, z_ref);
85  ff_coh.scaleRelativeAbundance(layout_abundance);
86  m_formfactors.push_back(std::move(ff_coh));
87  }
88  double weight = layout.weight();
90  double scale_factor = m_surface_density / layout_abundance;
91  ScaleRegionMap(m_region_map, scale_factor);
92 }
virtual double getTotalAbundance() const =0
Get total abundance of all particles.
virtual SafePointerVector< IParticle > particles() const =0
Returns information on all particles (type and abundance) and generates new particles if an IAbstract...
virtual double totalParticleSurfaceDensity() const =0
Returns surface density of all particles.
double weight() const
Returns the relative weight of this layout.
Definition: ILayout.h:57
FormFactorCoherentSum ProcessParticle(const IParticle &particle, const std::vector< Slice > &slices, double z_ref)
void ScaleRegionMap(std::map< size_t, std::vector< HomogeneousRegion >> &region_map, double factor)

References ILayout::getTotalAbundance(), m_formfactors, m_region_map, m_surface_density, ILayout::particles(), ProcessParticle(), anonymous_namespace{ProcessedLayout.cpp}::ScaleRegionMap(), ILayout::totalParticleSurfaceDensity(), and ILayout::weight().

Referenced by ProcessedLayout().

Here is the call graph for this function:

◆ ProcessParticle()

FormFactorCoherentSum ProcessedLayout::ProcessParticle ( const IParticle particle,
const std::vector< Slice > &  slices,
double  z_ref 
)
private

Definition at line 94 of file ProcessedLayout.cpp.

97 {
98  double abundance = particle.abundance();
99  auto sliced_ffs = SlicedFormFactorList::createSlicedFormFactors(particle, slices, z_ref);
100  auto region_map = sliced_ffs.regionMap();
101  ScaleRegionMap(region_map, abundance);
102  mergeRegionMap(region_map);
103  auto result = FormFactorCoherentSum(abundance);
104  for (size_t i = 0; i < sliced_ffs.size(); ++i) {
105  auto ff_pair = sliced_ffs[i];
106  std::unique_ptr<IFormFactor> P_ff_framework;
107  if (slices.size() > 1) {
108  if (m_polarized)
109  P_ff_framework = std::make_unique<FormFactorDWBAPol>(*ff_pair.first);
110  else
111  P_ff_framework = std::make_unique<FormFactorDWBA>(*ff_pair.first);
112  } else {
113  if (m_polarized)
114  P_ff_framework = std::make_unique<FormFactorBAPol>(*ff_pair.first);
115  else
116  P_ff_framework.reset(ff_pair.first->clone());
117  }
118 
119  size_t slice_index = ff_pair.second;
120  const Material slice_material = slices[slice_index].material();
121  P_ff_framework->setAmbientMaterial(slice_material);
122 
123  auto part = FormFactorCoherentPart(P_ff_framework.release());
124  part.setSpecularInfo(mp_fresnel_map, slice_index);
125 
126  result.addCoherentPart(part);
127  }
128  return result;
129 }
Information about single particle form factor and specular info of the embedding layer.
Information about particle form factor and abundance.
double abundance() const
A wrapper for underlying material implementation.
Definition: Material.h:29
void mergeRegionMap(const std::map< size_t, std::vector< HomogeneousRegion >> &region_map)
static SlicedFormFactorList createSlicedFormFactors(const IParticle &particle, const std::vector< Slice > &slices, double z_ref)

References IAbstractParticle::abundance(), SlicedFormFactorList::createSlicedFormFactors(), m_polarized, mergeRegionMap(), mp_fresnel_map, and anonymous_namespace{ProcessedLayout.cpp}::ScaleRegionMap().

Referenced by collectFormFactors().

Here is the call graph for this function:

◆ mergeRegionMap()

void ProcessedLayout::mergeRegionMap ( const std::map< size_t, std::vector< HomogeneousRegion >> &  region_map)
private

Definition at line 131 of file ProcessedLayout.cpp.

133 {
134  for (auto& entry : region_map) {
135  size_t layer_index = entry.first;
136  auto regions = entry.second;
137  m_region_map[layer_index].insert(m_region_map[layer_index].begin(), regions.begin(),
138  regions.end());
139  }
140 }

References m_region_map.

Referenced by ProcessParticle().

Member Data Documentation

◆ mp_fresnel_map

const IFresnelMap* ProcessedLayout::mp_fresnel_map
private

Definition at line 56 of file ProcessedLayout.h.

Referenced by ProcessedLayout(), and ProcessParticle().

◆ m_polarized

bool ProcessedLayout::m_polarized
private

Definition at line 57 of file ProcessedLayout.h.

Referenced by ProcessedLayout(), and ProcessParticle().

◆ m_n_slices

size_t ProcessedLayout::m_n_slices
private

Definition at line 58 of file ProcessedLayout.h.

Referenced by numberOfSlices(), and ProcessedLayout().

◆ m_surface_density

double ProcessedLayout::m_surface_density
private

Definition at line 59 of file ProcessedLayout.h.

Referenced by collectFormFactors(), ProcessedLayout(), and surfaceDensity().

◆ m_formfactors

std::vector<FormFactorCoherentSum> ProcessedLayout::m_formfactors
private

Definition at line 60 of file ProcessedLayout.h.

Referenced by collectFormFactors(), formFactorList(), and ProcessedLayout().

◆ mP_iff

std::unique_ptr<IInterferenceFunction> ProcessedLayout::mP_iff
private

Definition at line 61 of file ProcessedLayout.h.

Referenced by interferenceFunction(), and ProcessedLayout().

◆ m_region_map

std::map<size_t, std::vector<HomogeneousRegion> > ProcessedLayout::m_region_map
private

Definition at line 62 of file ProcessedLayout.h.

Referenced by collectFormFactors(), mergeRegionMap(), ProcessedLayout(), and regionMap().


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