28 void ScaleRegionMap(std::map<
size_t, std::vector<HomogeneousRegion>>& region_map,
double factor);
32 double z_ref,
const IFresnelMap* p_fresnel_map,
bool polarized)
33 : mp_fresnel_map(p_fresnel_map), m_polarized(polarized)
38 mP_iff.reset(p_iff->clone());
48 mP_iff = std::move(other.mP_iff);
83 for (
auto p_particle : layout.
particles()) {
85 ff_coh.scaleRelativeAbundance(layout_abundance);
88 double weight = layout.
weight();
95 const std::vector<Slice>& slices,
100 auto region_map = sliced_ffs.regionMap();
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) {
109 P_ff_framework = std::make_unique<FormFactorDWBAPol>(*ff_pair.first);
111 P_ff_framework = std::make_unique<FormFactorDWBA>(*ff_pair.first);
114 P_ff_framework = std::make_unique<FormFactorBAPol>(*ff_pair.first);
116 P_ff_framework.reset(ff_pair.first->clone());
119 size_t slice_index = ff_pair.second;
120 const Material slice_material = slices[slice_index].material();
121 P_ff_framework->setAmbientMaterial(slice_material);
126 result.addCoherentPart(part);
132 const std::map<
size_t, std::vector<HomogeneousRegion>>& region_map)
134 for (
auto& entry : region_map) {
135 size_t layer_index = entry.first;
136 auto regions = entry.second;
144 void ScaleRegionMap(std::map<
size_t, std::vector<HomogeneousRegion>>& region_map,
double factor)
146 for (
auto& entry : region_map) {
147 for (
auto& region : entry.second) {
148 region.m_volume *= factor;
Defines and implements the interface class IInterferenceFunction.
Defines and implements interface class ILayout.
Defines interface IParticle.
Defines class ProcessedLayout.
Holds the necessary information to calculate the radiation wavefunction in every layer for different ...
Pure virtual base class of interference functions.
Pure virtual interface class to equip a sample layer with scattering properties.
virtual const IInterferenceFunction * interferenceFunction() const =0
Returns the interference function.
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.
Pure virtual base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
A wrapper for underlying material implementation.
Data structure that contains preprocessed data for a single layout.
ProcessedLayout(const ILayout &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 > mP_iff
void collectFormFactors(const ILayout &layout, const std::vector< Slice > &slices, double z_ref)
const std::vector< FormFactorCoherentSum > & formFactorList() const
FormFactorCoherentSum ProcessParticle(const IParticle &particle, const std::vector< Slice > &slices, double z_ref)
const IInterferenceFunction * interferenceFunction() const
const IFresnelMap * mp_fresnel_map
double surfaceDensity() const
void ScaleRegionMap(std::map< size_t, std::vector< HomogeneousRegion >> ®ion_map, double factor)