Skip to content
Snippets Groups Projects
Commit 521059c2 authored by Van Herck, Walter's avatar Van Herck, Walter
Browse files

Use weight in computations

parent 8679ab51
No related branches found
No related tags found
No related merge requests found
...@@ -59,8 +59,8 @@ std::unique_ptr<MultiLayer> CreateAveragedMultilayer( ...@@ -59,8 +59,8 @@ std::unique_ptr<MultiLayer> CreateAveragedMultilayer(
return P_multilayer; return P_multilayer;
} }
std::unique_ptr<MultiLayer> CreateAveragedMultilayer( std::unique_ptr<MultiLayer> CreateAveragedMultilayer(const MultiLayer& multilayer,
const MultiLayer& multilayer, const SimulationOptions& sim_options) const SimulationOptions& sim_options)
{ {
return CreateAveragedMultilayer(multilayer, sim_options, GetRegionMap(multilayer)); return CreateAveragedMultilayer(multilayer, sim_options, GetRegionMap(multilayer));
} }
...@@ -73,7 +73,8 @@ std::map<size_t, std::vector<HomogeneousRegion>> GetRegionMap(const MultiLayer& ...@@ -73,7 +73,8 @@ std::map<size_t, std::vector<HomogeneousRegion>> GetRegionMap(const MultiLayer&
const Layer* layer = multilayer.layer(i); const Layer* layer = multilayer.layer(i);
for (auto p_layout : layer->layouts()) { for (auto p_layout : layer->layouts()) {
double layout_abundance = p_layout->getTotalAbundance(); double layout_abundance = p_layout->getTotalAbundance();
double scale_factor = p_layout->totalParticleSurfaceDensity()/layout_abundance; double weight = p_layout->weight();
double scale_factor = weight*p_layout->totalParticleSurfaceDensity()/layout_abundance;
for (const IParticle* particle: p_layout->particles()) { for (const IParticle* particle: p_layout->particles()) {
auto sliced_ffs = SlicedFormFactorList::CreateSlicedFormFactors( auto sliced_ffs = SlicedFormFactorList::CreateSlicedFormFactors(
*particle, multilayer, i); *particle, multilayer, i);
......
...@@ -23,16 +23,19 @@ ...@@ -23,16 +23,19 @@
#include "ProgressHandler.h" #include "ProgressHandler.h"
#include "SimulationElement.h" #include "SimulationElement.h"
ParticleLayoutComputation::ParticleLayoutComputation( ParticleLayoutComputation::ParticleLayoutComputation(const MultiLayer* p_multilayer,
const MultiLayer* p_multilayer, const IFresnelMap* p_fresnel_map, const ILayout* p_layout, const IFresnelMap* p_fresnel_map,
size_t layer_index, const SimulationOptions& options, bool polarized) const ILayout* p_layout, size_t layer_index,
const SimulationOptions& options,
bool polarized)
: m_multilayer_info(p_multilayer, p_fresnel_map) : m_multilayer_info(p_multilayer, p_fresnel_map)
{ {
LayoutStrategyBuilder builder(p_multilayer, p_layout, p_fresnel_map, LayoutStrategyBuilder builder(p_multilayer, p_layout, p_fresnel_map, polarized, options,
polarized, options, layer_index); layer_index);
mP_strategy.reset(builder.releaseStrategy()); mP_strategy.reset(builder.releaseStrategy());
m_region_map = builder.regionMap(); m_region_map = builder.regionMap();
m_surface_density = p_layout->totalParticleSurfaceDensity(); double weight = p_layout->weight();
m_surface_density = weight * p_layout->totalParticleSurfaceDensity();
} }
ParticleLayoutComputation::~ParticleLayoutComputation() =default; ParticleLayoutComputation::~ParticleLayoutComputation() =default;
......
...@@ -100,12 +100,13 @@ SafePointerVector<class FormFactorCoherentSum> LayoutStrategyBuilder::collectFor ...@@ -100,12 +100,13 @@ SafePointerVector<class FormFactorCoherentSum> LayoutStrategyBuilder::collectFor
{ {
SafePointerVector<class FormFactorCoherentSum> result; SafePointerVector<class FormFactorCoherentSum> result;
double layout_abundance = mp_layout->getTotalAbundance(); double layout_abundance = mp_layout->getTotalAbundance();
for (const IParticle* particle: mp_layout->particles()) { for (const IParticle* particle : mp_layout->particles()) {
auto p_ff_coh = createFormFactorCoherentSum(particle); auto p_ff_coh = createFormFactorCoherentSum(particle);
p_ff_coh->scaleRelativeAbundance(layout_abundance); p_ff_coh->scaleRelativeAbundance(layout_abundance);
result.push_back(p_ff_coh); result.push_back(p_ff_coh);
} }
double scale_factor = mp_layout->totalParticleSurfaceDensity()/layout_abundance; double weight = mp_layout->weight();
double scale_factor = weight * mp_layout->totalParticleSurfaceDensity() / layout_abundance;
ScaleRegionMap(m_region_map, scale_factor); ScaleRegionMap(m_region_map, scale_factor);
return result; return result;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment