28 void ScaleRegionMap(std::map<
size_t, std::vector<HomogeneousRegion>>& region_map,
double factor)
30 for (
auto& entry : region_map) {
31 for (
auto& region : entry.second) {
32 region.m_volume *= factor;
44 : m_fresnel_map(p_fresnel_map), m_polarized(
polarized)
49 m_iff.reset(iff->clone());
59 m_iff = std::move(other.m_iff);
91 const std::vector<Slice>& slices,
double z_ref)
94 for (
const auto* particle : layout.
particles()) {
99 double weight = layout.
weight();
106 const std::vector<Slice>& slices,
111 auto region_map = sliced_ffs.regionMap();
112 ScaleRegionMap(region_map, abundance);
115 for (
size_t i = 0; i < sliced_ffs.size(); ++i) {
116 const auto ff_pair = sliced_ffs[i];
117 std::unique_ptr<IComputeFF> ff_framework;
118 if (slices.size() > 1) {
120 ff_framework = std::make_unique<ComputeDWBAPol>(*ff_pair.first);
122 ff_framework = std::make_unique<ComputeDWBA>(*ff_pair.first);
125 ff_framework = std::make_unique<ComputeBAPol>(*ff_pair.first);
127 ff_framework = std::make_unique<ComputeBA>(*ff_pair.first);
130 size_t slice_index = ff_pair.second;
131 const Material slice_material = slices[slice_index].material();
132 ff_framework->setAmbientMaterial(slice_material);
137 result.addCoherentPart(part);
143 const std::map<
size_t, std::vector<HomogeneousRegion>>& region_map)
145 for (
const auto& entry : region_map) {
146 size_t layer_index = entry.first;
147 auto regions = entry.second;
Defines class ComputeBAPol.
Defines class ComputeDWBAPol.
Defines class ComputeDWBA.
Defines and implements the interface class IInterferenceFunction.
Defines interface IParticle.
Defines class ParticleLayout.
Defines class ProcessedLayout.
Holds the necessary information to calculate the radiation wavefunction in every layer for different ...
Abstract base class of interference functions.
Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
A wrapper for underlying material implementation.
Decorator class that adds particles to ISampleNode objects.
double weight() const
Returns the relative weight of this layout.
double getTotalAbundance() const
const IInterferenceFunction * interferenceFunction() const
SafePointerVector< IParticle > particles() const
Returns information on all particles (type and abundance) and generates new particles if an IAbstract...
double totalParticleSurfaceDensity() const
Data structure that contains preprocessed data for a single layout.
FormFactorCoherentSum processParticle(const IParticle &particle, const std::vector< Slice > &slices, double z_ref)
ProcessedLayout(const ParticleLayout &layout, const std::vector< Slice > &slices, double z_ref, const IFresnelMap *p_fresnel_map, bool polarized)
void mergeRegionMap(const std::map< size_t, std::vector< HomogeneousRegion >> ®ion_map)
std::map< size_t, std::vector< HomogeneousRegion > > m_region_map
size_t numberOfSlices() const
std::vector< FormFactorCoherentSum > m_formfactors
std::map< size_t, std::vector< HomogeneousRegion > > regionMap() const
std::unique_ptr< IInterferenceFunction > m_iff
const std::vector< FormFactorCoherentSum > & formFactorList() const
void collectFormFactors(const ParticleLayout &layout, const std::vector< Slice > &slices, double z_ref)
const IInterferenceFunction * interferenceFunction() const
double surfaceDensity() const
const IFresnelMap * m_fresnel_map