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

Public Member Functions

 SlicedFormFactorList ()=default
 
 SlicedFormFactorList (SlicedFormFactorList &&other)=default
 
SlicedFormFactorListoperator= (SlicedFormFactorList &&other)=default
 
 ~SlicedFormFactorList ()=default
 
size_t size () const
 
std::pair< const IFormFactor *, size_t > operator[] (size_t index) const
 
std::map< size_t, std::vector< HomogeneousRegion > > regionMap () const
 

Static Public Member Functions

static SlicedFormFactorList createSlicedFormFactors (const IParticle &particle, const std::vector< Slice > &slices, double z_ref)
 

Private Member Functions

void addParticle (IParticle &particle, const std::vector< Slice > &slices, double z_ref)
 

Private Attributes

std::vector< std::pair< std::unique_ptr< IFormFactor >, size_t > > m_ff_list
 
std::map< size_t, std::vector< HomogeneousRegion > > m_region_map
 

Detailed Description

Class that contains and owns a list of form factors and the index of their containing layer.

This class also handles the slicing of form factors if they cross layer interfaces.

Definition at line 31 of file SlicedFormFactorList.h.

Constructor & Destructor Documentation

◆ SlicedFormFactorList() [1/2]

SlicedFormFactorList::SlicedFormFactorList ( )
default

◆ SlicedFormFactorList() [2/2]

SlicedFormFactorList::SlicedFormFactorList ( SlicedFormFactorList &&  other)
default

◆ ~SlicedFormFactorList()

SlicedFormFactorList::~SlicedFormFactorList ( )
default

Member Function Documentation

◆ operator=()

SlicedFormFactorList& SlicedFormFactorList::operator= ( SlicedFormFactorList &&  other)
default

◆ createSlicedFormFactors()

SlicedFormFactorList SlicedFormFactorList::createSlicedFormFactors ( const IParticle particle,
const std::vector< Slice > &  slices,
double  z_ref 
)
static

Definition at line 33 of file SlicedFormFactorList.cpp.

36 {
37  SlicedFormFactorList result;
38  auto particles = particle.decompose();
39  for (auto p_particle : particles) {
40  result.addParticle(*p_particle, slices, z_ref);
41  }
42  return result;
43 }
virtual SafePointerVector< IParticle > decompose() const
Decompose in constituent IParticle objects.
Definition: IParticle.cpp:87
Class that contains and owns a list of form factors and the index of their containing layer.
void addParticle(IParticle &particle, const std::vector< Slice > &slices, double z_ref)

References addParticle(), and IParticle::decompose().

Referenced by ProcessedLayout::ProcessParticle().

Here is the call graph for this function:

◆ size()

size_t SlicedFormFactorList::size ( ) const

Definition at line 67 of file SlicedFormFactorList.cpp.

68 {
69  return m_ff_list.size();
70 }
std::vector< std::pair< std::unique_ptr< IFormFactor >, size_t > > m_ff_list

References m_ff_list.

Referenced by operator[]().

◆ operator[]()

std::pair< const IFormFactor *, size_t > SlicedFormFactorList::operator[] ( size_t  index) const

Definition at line 72 of file SlicedFormFactorList.cpp.

73 {
74  if (index >= size())
75  throw std::out_of_range("SlicedFormFactorList::operator[] error: "
76  "index out of range");
77  return {m_ff_list[index].first.get(), m_ff_list[index].second};
78 }

References m_ff_list, and size().

Here is the call graph for this function:

◆ regionMap()

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

Definition at line 80 of file SlicedFormFactorList.cpp.

81 {
82  return m_region_map;
83 }
std::map< size_t, std::vector< HomogeneousRegion > > m_region_map

References m_region_map.

◆ addParticle()

void SlicedFormFactorList::addParticle ( IParticle particle,
const std::vector< Slice > &  slices,
double  z_ref 
)
private

Definition at line 45 of file SlicedFormFactorList.cpp.

47 {
48  auto slice_indices = SliceIndexSpan(particle, slices, z_ref);
49  bool single_layer = (slice_indices.first == slice_indices.second);
50  for (size_t i = slice_indices.first; i < slice_indices.second + 1; ++i) {
51  double z_top_i = SliceTopZ(i, slices);
52  kvector_t translation(0.0, 0.0, z_ref - z_top_i);
53  particle.translate(translation);
54  // if particle is contained in this layer, set limits to infinite:
55  ZLimits limits = single_layer ? ZLimits() : SlicesZLimits(slices, i);
56  auto sliced_particle = particle.createSlicedParticle(limits);
57  m_ff_list.emplace_back(std::move(sliced_particle.mP_slicedff), i);
58  double thickness = slices[i].thickness();
59  if (thickness > 0.0)
60  ScaleRegions(sliced_particle.m_regions, 1 / thickness);
61  m_region_map[i].insert(m_region_map[i].end(), sliced_particle.m_regions.begin(),
62  sliced_particle.m_regions.end());
63  z_ref = z_top_i; // particle now has coordinates relative to z_top_i
64  }
65 }
void translate(kvector_t translation) override final
Translates the particle.
Definition: IParticle.cpp:34
virtual SlicedParticle createSlicedParticle(ZLimits limits) const
Creates a sliced form factor for this particle.
Definition: IParticle.cpp:28
Class that contains upper and lower limits of the z-coordinate for the slicing of form factors.
Definition: ZLimits.h:41
ZLimits SlicesZLimits(const std::vector< Slice > &slices, size_t slice_index)
void ScaleRegions(std::vector< HomogeneousRegion > &regions, double factor)
double SliceTopZ(size_t i, const std::vector< Slice > &slices)
std::pair< size_t, size_t > SliceIndexSpan(const IParticle &particle, const std::vector< Slice > &slices, double z_ref)

References IParticle::createSlicedParticle(), m_ff_list, m_region_map, anonymous_namespace{SlicedFormFactorList.cpp}::ScaleRegions(), anonymous_namespace{SlicedFormFactorList.cpp}::SliceIndexSpan(), anonymous_namespace{SlicedFormFactorList.cpp}::SlicesZLimits(), anonymous_namespace{SlicedFormFactorList.cpp}::SliceTopZ(), and IParticle::translate().

Referenced by createSlicedFormFactors().

Here is the call graph for this function:

Member Data Documentation

◆ m_ff_list

std::vector<std::pair<std::unique_ptr<IFormFactor>, size_t> > SlicedFormFactorList::m_ff_list
private

Definition at line 51 of file SlicedFormFactorList.h.

Referenced by addParticle(), operator[](), and size().

◆ m_region_map

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

Definition at line 52 of file SlicedFormFactorList.h.

Referenced by addParticle(), and regionMap().


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