diff --git a/Core/Export/SampleToPython.cpp b/Core/Export/SampleToPython.cpp index 7ac385260f4ab0a44206b8a0c15a93e6e1008a93..607b37c131b483d5579127858b2750e57f6ae0a6 100644 --- a/Core/Export/SampleToPython.cpp +++ b/Core/Export/SampleToPython.cpp @@ -556,17 +556,17 @@ std::string SampleToPython::defineMultiLayers() const if (numberOfLayers) { result << indent() << key << ".addLayer(" << m_objs->obj2key(s->layer(0)) << ")\n"; - size_t layerIndex = 1; - while (layerIndex != numberOfLayers) { - const LayerInterface* layerInterface = s->layerInterface(layerIndex - 1); + size_t iLayer = 1; + while (iLayer != numberOfLayers) { + const LayerInterface* layerInterface = s->layerInterface(iLayer - 1); if (const LayerRoughness* rough = layerInterface->getRoughness()) result << indent() << key << ".addLayerWithTopRoughness(" - << m_objs->obj2key(s->layer(layerIndex)) << ", " + << m_objs->obj2key(s->layer(iLayer)) << ", " << m_objs->obj2key(rough) << ")\n"; else result << indent() << key << ".addLayer(" - << m_objs->obj2key(s->layer(layerIndex)) << ")\n"; - layerIndex++; + << m_objs->obj2key(s->layer(iLayer)) << ")\n"; + iLayer++; } } result << "\n" << indent() << "return " << key << "\n"; diff --git a/GUI/Models/GUIDomainSampleVisitor.cpp b/GUI/Models/GUIDomainSampleVisitor.cpp index edaf34d5ce0a9ffc2e97670d72ae02355c4f7933..f01dd644c0e6e41b2de83cd3bad466acac7d987a 100644 --- a/GUI/Models/GUIDomainSampleVisitor.cpp +++ b/GUI/Models/GUIDomainSampleVisitor.cpp @@ -109,9 +109,9 @@ void GUIDomainSampleVisitor::visit(const Layer* sample) const auto* multilayer = dynamic_cast<const MultiLayer*>(m_itemToSample[parent]); ASSERT(multilayer); - size_t layer_index = SampleUtils::Multilayer::IndexOfLayer(*multilayer, sample); + size_t iLayer = SampleUtils::Multilayer::IndexOfLayer(*multilayer, sample); const LayerInterface* top_interface = - layer_index == 0 ? nullptr : multilayer->layerInterface(layer_index - 1); + iLayer == 0 ? nullptr : multilayer->layerInterface(iLayer - 1); LayerItem* layer_item = m_sampleModel->insertItem<LayerItem>(parent); layer_item->setMaterial(createMaterialFromDomain(sample->material())); diff --git a/Resample/Coherence/FFTerm.cpp b/Resample/Coherence/FFTerm.cpp index 8d447ccfacd2afd060b4d2dad00bab53573b1dbf..628a1f0bd19e5d426bc47fd4e0609e4be7f7dfdb 100644 --- a/Resample/Coherence/FFTerm.cpp +++ b/Resample/Coherence/FFTerm.cpp @@ -20,14 +20,13 @@ #include "Resample/Fresnel/IFresnelMap.h" #include "Sample/Material/WavevectorInfo.h" -CoherentFFTerm::CoherentFFTerm(IComputeFF* computer, size_t layer_index) - : m_computer(computer), m_layer_index(layer_index) +CoherentFFTerm::CoherentFFTerm(IComputeFF* computer) + : m_computer(computer) { } CoherentFFTerm::CoherentFFTerm(const CoherentFFTerm& other) : m_computer(std::unique_ptr<IComputeFF>(other.m_computer->clone())) - , m_layer_index(other.m_layer_index) { } @@ -37,8 +36,9 @@ complex_t CoherentFFTerm::coherentFF(const SimulationElement& ele) const { const IFresnelMap* const fresnel_map = ele.fresnelMap(); ASSERT(fresnel_map); - auto inFlux = fresnel_map->getInFlux(ele.getKi(), m_layer_index); - auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), m_layer_index); + const size_t iLayer = m_computer->iLayer(); + auto inFlux = fresnel_map->getInFlux(ele.getKi(), iLayer); + auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), iLayer); m_computer->setFlux(std::move(inFlux), std::move(outFlux)); return m_computer->computeFF({ele}); } @@ -47,8 +47,9 @@ Eigen::Matrix2cd CoherentFFTerm::coherentPolFF(const SimulationElement& ele) con { const IFresnelMap* const fresnel_map = ele.fresnelMap(); ASSERT(fresnel_map); - auto inFlux = fresnel_map->getInFlux(ele.getKi(), m_layer_index); - auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), m_layer_index); + const size_t iLayer = m_computer->iLayer(); + auto inFlux = fresnel_map->getInFlux(ele.getKi(), iLayer); + auto outFlux = fresnel_map->getOutFlux(ele.getMeanKf(), iLayer); m_computer->setFlux(std::move(inFlux), std::move(outFlux)); return m_computer->computePolFF({ele}); } diff --git a/Resample/Coherence/FFTerm.h b/Resample/Coherence/FFTerm.h index 75cbd34970b0a0aa5989dfb966db9b5bf2fb085c..7d6e3770eea4691ac82d58fff991589810f9f418 100644 --- a/Resample/Coherence/FFTerm.h +++ b/Resample/Coherence/FFTerm.h @@ -32,7 +32,7 @@ class SimulationElement; class CoherentFFTerm { public: - CoherentFFTerm(IComputeFF* computer, size_t layer_index); + CoherentFFTerm(IComputeFF* computer); CoherentFFTerm(const CoherentFFTerm& other); CoherentFFTerm& operator=(const CoherentFFTerm& other) = delete; ~CoherentFFTerm(); @@ -44,7 +44,6 @@ public: private: const std::unique_ptr<IComputeFF> m_computer; - const size_t m_layer_index; }; #endif // BORNAGAIN_RESAMPLE_COHERENCE_FFTERM_H diff --git a/Resample/FFCompute/ComputeBA.cpp b/Resample/FFCompute/ComputeBA.cpp index 507049659b4c21fbe4bd3a7c229af0a3e017ff24..028b556ebddbd4707e1f54eac922eec8f7c94e2d 100644 --- a/Resample/FFCompute/ComputeBA.cpp +++ b/Resample/FFCompute/ComputeBA.cpp @@ -16,13 +16,13 @@ #include "Sample/Material/WavevectorInfo.h" #include "Sample/Scattering/IFormFactor.h" -ComputeBA::ComputeBA(const IFormFactor& ff) : IComputeFF(ff) {} +ComputeBA::ComputeBA(const IFormFactor& ff, size_t iLayer) : IComputeFF(ff, iLayer) {} ComputeBA::~ComputeBA() = default; ComputeBA* ComputeBA::clone() const { - return new ComputeBA(*m_ff); + return new ComputeBA(*m_ff, m_iLayer); } complex_t ComputeBA::computeFF(const WavevectorInfo& wavevectors) const diff --git a/Resample/FFCompute/ComputeBA.h b/Resample/FFCompute/ComputeBA.h index ffd58c6c743091319be3717d9c7c88a4517f7009..7f8ccc572f3e907ad6a2a31c48e290f0da66851c 100644 --- a/Resample/FFCompute/ComputeBA.h +++ b/Resample/FFCompute/ComputeBA.h @@ -29,7 +29,7 @@ class ComputeBA : public IComputeFF { public: - ComputeBA(const IFormFactor& ff); + ComputeBA(const IFormFactor& ff, size_t iLayer); ~ComputeBA() override; ComputeBA* clone() const override; diff --git a/Resample/FFCompute/ComputeBAPol.cpp b/Resample/FFCompute/ComputeBAPol.cpp index 18459c67f3a396a894b4023b2d5ab918946fc597..13ccfa43e250bf672d1058a8022bbb26581327c2 100644 --- a/Resample/FFCompute/ComputeBAPol.cpp +++ b/Resample/FFCompute/ComputeBAPol.cpp @@ -16,13 +16,13 @@ #include "Sample/Material/WavevectorInfo.h" #include <stdexcept> -ComputeBAPol::ComputeBAPol(const IFormFactor& ff) : IComputeFF(ff) {} +ComputeBAPol::ComputeBAPol(const IFormFactor& ff, size_t iLayer) : IComputeFF(ff, iLayer) {} ComputeBAPol::~ComputeBAPol() = default; ComputeBAPol* ComputeBAPol::clone() const { - return new ComputeBAPol(*m_ff); + return new ComputeBAPol(*m_ff, m_iLayer); } complex_t ComputeBAPol::computeFF(const WavevectorInfo&) const diff --git a/Resample/FFCompute/ComputeBAPol.h b/Resample/FFCompute/ComputeBAPol.h index 9643a1175f1242f2fc23cec9250aeee631f08fa1..13b27e643060b953c837cd935dca2a1fee099dc8 100644 --- a/Resample/FFCompute/ComputeBAPol.h +++ b/Resample/FFCompute/ComputeBAPol.h @@ -30,7 +30,7 @@ class ComputeBAPol : public IComputeFF { public: - ComputeBAPol(const IFormFactor& ff); + ComputeBAPol(const IFormFactor& ff, size_t iLayer); ~ComputeBAPol() override; ComputeBAPol* clone() const override; diff --git a/Resample/FFCompute/ComputeDWBA.cpp b/Resample/FFCompute/ComputeDWBA.cpp index 2703478d773068b756fba7e2f030fbacceb8629c..83381a5a9801bad2dedeea6e0a4db551d4fb83ff 100644 --- a/Resample/FFCompute/ComputeDWBA.cpp +++ b/Resample/FFCompute/ComputeDWBA.cpp @@ -17,13 +17,13 @@ #include "Sample/Material/WavevectorInfo.h" #include "Sample/Scattering/IFormFactor.h" -ComputeDWBA::ComputeDWBA(const IFormFactor& ff) : IComputeFF(ff) {} +ComputeDWBA::ComputeDWBA(const IFormFactor& ff, size_t iLayer) : IComputeFF(ff, iLayer) {} ComputeDWBA::~ComputeDWBA() = default; ComputeDWBA* ComputeDWBA::clone() const { - ComputeDWBA* result = new ComputeDWBA(*m_ff); + ComputeDWBA* result = new ComputeDWBA(*m_ff, m_iLayer); auto in_coefs = std::unique_ptr<const IFlux>(m_inFlux ? m_inFlux->clone() : nullptr); auto out_coefs = std::unique_ptr<const IFlux>(m_outFlux ? m_outFlux->clone() : nullptr); result->setFlux(std::move(in_coefs), std::move(out_coefs)); diff --git a/Resample/FFCompute/ComputeDWBA.h b/Resample/FFCompute/ComputeDWBA.h index f57cb1e6e8cc4c254e4e460c7f20a826f147d2fe..bf6910ffb2e5daeff17c6f299402a9890cea549b 100644 --- a/Resample/FFCompute/ComputeDWBA.h +++ b/Resample/FFCompute/ComputeDWBA.h @@ -31,7 +31,7 @@ class IFlux; class ComputeDWBA : public IComputeFF { public: - ComputeDWBA(const IFormFactor& ff); + ComputeDWBA(const IFormFactor& ff, size_t iLayer); ~ComputeDWBA() override; ComputeDWBA* clone() const override; diff --git a/Resample/FFCompute/ComputeDWBAPol.cpp b/Resample/FFCompute/ComputeDWBAPol.cpp index b0f999e96279523703326b633bd9dcc9406f6431..9de9bc273d97f4d0ae318ab0a43fb4edac2258f4 100644 --- a/Resample/FFCompute/ComputeDWBAPol.cpp +++ b/Resample/FFCompute/ComputeDWBAPol.cpp @@ -18,20 +18,23 @@ #include "Sample/Scattering/IFormFactor.h" namespace { + complex_t VecMatVecProduct(const Eigen::Vector2cd& vec1, const Eigen::Matrix2cd& ff, const Eigen::Vector2cd& vec2) { return vec1.transpose() * ff * vec2; } + } // namespace -ComputeDWBAPol::ComputeDWBAPol(const IFormFactor& ff) : IComputeFF(ff) {} + +ComputeDWBAPol::ComputeDWBAPol(const IFormFactor& ff, size_t iLayer) : IComputeFF(ff, iLayer) {} ComputeDWBAPol::~ComputeDWBAPol() = default; ComputeDWBAPol* ComputeDWBAPol::clone() const { - ComputeDWBAPol* result = new ComputeDWBAPol(*m_ff); + ComputeDWBAPol* result = new ComputeDWBAPol(*m_ff, m_iLayer); std::unique_ptr<const IFlux> in_coefs = m_inFlux ? std::unique_ptr<const IFlux>(m_inFlux->clone()) : nullptr; std::unique_ptr<const IFlux> out_coefs = diff --git a/Resample/FFCompute/ComputeDWBAPol.h b/Resample/FFCompute/ComputeDWBAPol.h index f340059e431ad1e5c0cd2558434f459f53abde08..d8524d080d66fa9d6261adcbb788ba70d7fbd448 100644 --- a/Resample/FFCompute/ComputeDWBAPol.h +++ b/Resample/FFCompute/ComputeDWBAPol.h @@ -31,7 +31,7 @@ class IFlux; class ComputeDWBAPol : public IComputeFF { public: - ComputeDWBAPol(const IFormFactor& ff); + ComputeDWBAPol(const IFormFactor& ff, size_t iLayer); ~ComputeDWBAPol() override; ComputeDWBAPol* clone() const override; diff --git a/Resample/FFCompute/IComputeFF.cpp b/Resample/FFCompute/IComputeFF.cpp index a4185d1b4fb183ab404f6dfacff22518409c4a5f..3caf368c4c32f4cc6197937d17e40c53677321b5 100644 --- a/Resample/FFCompute/IComputeFF.cpp +++ b/Resample/FFCompute/IComputeFF.cpp @@ -17,7 +17,8 @@ #include "Sample/Scattering/IFormFactor.h" #include <stdexcept> -IComputeFF::IComputeFF(const IFormFactor& ff) : m_ff(ff.clone()) {} +IComputeFF::IComputeFF(const IFormFactor& ff, size_t iLayer) + : m_ff(ff.clone()), m_iLayer(iLayer) {} IComputeFF::~IComputeFF() = default; diff --git a/Resample/FFCompute/IComputeFF.h b/Resample/FFCompute/IComputeFF.h index 582b32f21de6b472c67bdfb42ec31fa483f5a131..ae36e0bd548593d42dd42ec3068e013387d859e9 100644 --- a/Resample/FFCompute/IComputeFF.h +++ b/Resample/FFCompute/IComputeFF.h @@ -43,6 +43,8 @@ public: virtual void setAmbientMaterial(const Material& material); + size_t iLayer() const { return m_iLayer; } + virtual double volume() const; virtual double radialExtension() const; virtual double bottomZ(const IRotation& rotation) const; @@ -54,9 +56,10 @@ public: virtual void setFlux(std::unique_ptr<const IFlux>, std::unique_ptr<const IFlux>); protected: - IComputeFF(const IFormFactor&); + IComputeFF(const IFormFactor& ff, size_t iLayer); std::unique_ptr<IFormFactor> m_ff; + const size_t m_iLayer; }; #endif // BORNAGAIN_RESAMPLE_FFCOMPUTE_ICOMPUTEFF_H diff --git a/Resample/Fresnel/IFresnelMap.h b/Resample/Fresnel/IFresnelMap.h index 483cb71b943050edea0210adfd920ab402bdfd92..4e6e26355f7e91b27b7a2a6fc9d458caab7c2ef3 100644 --- a/Resample/Fresnel/IFresnelMap.h +++ b/Resample/Fresnel/IFresnelMap.h @@ -41,11 +41,11 @@ public: //! Retrieves the amplitude coefficients for given wavevector and layer. virtual std::unique_ptr<const IFlux> getInFlux(const kvector_t& kvec, - size_t layer_index) const = 0; + size_t iLayer) const = 0; //! Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector. virtual std::unique_ptr<const IFlux> getOutFlux(const kvector_t& kvec, - size_t layer_index) const = 0; + size_t iLayer) const = 0; const SliceStack& slices() const; diff --git a/Resample/Fresnel/MatrixFresnelMap.cpp b/Resample/Fresnel/MatrixFresnelMap.cpp index 07a2a523193c5e33acc98791c6daa10b1b0b58b5..e6c8a5524a8ff334195a99304d223f265abd0e6a 100644 --- a/Resample/Fresnel/MatrixFresnelMap.cpp +++ b/Resample/Fresnel/MatrixFresnelMap.cpp @@ -39,30 +39,30 @@ size_t MatrixFresnelMap::HashKVector::operator()(const kvector_t& kvec) const no } std::unique_ptr<const IFlux> MatrixFresnelMap::getOutFlux(const kvector_t& kvec, - size_t layer_index) const + size_t iLayer) const { - return computeFlux(-kvec, layer_index, m_inverted_slices, m_hash_table_out); + return computeFlux(-kvec, iLayer, m_inverted_slices, m_hash_table_out); } std::unique_ptr<const IFlux> MatrixFresnelMap::getInFlux(const kvector_t& kvec, - size_t layer_index) const + size_t iLayer) const { - return computeFlux(kvec, layer_index, m_slices, m_hash_table_in); + return computeFlux(kvec, iLayer, m_slices, m_hash_table_in); } std::unique_ptr<const IFlux> MatrixFresnelMap::computeFlux(const kvector_t& kvec, - size_t layer_index, + size_t iLayer, const SliceStack& slices, CoefficientHash& hash_table) const { if (!m_use_cache) { const auto coeffs = m_strategy->Execute(slices, kvec); - return std::unique_ptr<const IFlux>(coeffs[layer_index]->clone()); + return std::unique_ptr<const IFlux>(coeffs[iLayer]->clone()); } // from cache auto it = hash_table.find(kvec); if (it == hash_table.end()) it = hash_table.emplace(kvec, m_strategy->Execute(slices, kvec)).first; const auto& coef_vector = it->second; - return std::unique_ptr<const IFlux>(coef_vector[layer_index]->clone()); + return std::unique_ptr<const IFlux>(coef_vector[iLayer]->clone()); } diff --git a/Resample/Fresnel/MatrixFresnelMap.h b/Resample/Fresnel/MatrixFresnelMap.h index 432275b88e790ac839e0267b40b74fc4c0f65b21..5985232c847b4431b65ba661762518934f36ca77 100644 --- a/Resample/Fresnel/MatrixFresnelMap.h +++ b/Resample/Fresnel/MatrixFresnelMap.h @@ -49,13 +49,13 @@ private: }; std::unique_ptr<const IFlux> getInFlux(const kvector_t& kvec, - size_t layer_index) const override; + size_t iLayer) const override; std::unique_ptr<const IFlux> getOutFlux(const kvector_t& kvec, - size_t layer_index) const override; + size_t iLayer) const override; using CoefficientHash = std::unordered_map<kvector_t, ISpecularStrategy::coeffs_t, HashKVector>; - std::unique_ptr<const IFlux> computeFlux(const kvector_t& kvec, size_t layer_index, + std::unique_ptr<const IFlux> computeFlux(const kvector_t& kvec, size_t iLayer, const SliceStack& slices, CoefficientHash& hash_table) const; SliceStack m_inverted_slices; diff --git a/Resample/Fresnel/ScalarFresnelMap.cpp b/Resample/Fresnel/ScalarFresnelMap.cpp index 29b12a9a157bc410852acb4e3fc3c885ce46d09a..c3cc474e02cdeff0e6fb10e7e4720af564022c57 100644 --- a/Resample/Fresnel/ScalarFresnelMap.cpp +++ b/Resample/Fresnel/ScalarFresnelMap.cpp @@ -32,17 +32,17 @@ ScalarFresnelMap::Hash2Doubles::operator()(const std::pair<double, double>& doub } std::unique_ptr<const IFlux> ScalarFresnelMap::getOutFlux(const kvector_t& kvec, - size_t layer_index) const + size_t iLayer) const { - return getInFlux(-kvec, layer_index); + return getInFlux(-kvec, iLayer); } std::unique_ptr<const IFlux> ScalarFresnelMap::getInFlux(const kvector_t& kvec, - size_t layer_index) const + size_t iLayer) const { if (!m_use_cache) { auto coeffs = m_strategy->Execute(m_slices, kvec); - return std::unique_ptr<const IFlux>(coeffs[layer_index]->clone()); + return std::unique_ptr<const IFlux>(coeffs[iLayer]->clone()); } // from cache std::pair<double, double> k2_theta(kvec.mag2(), kvec.theta()); @@ -50,5 +50,5 @@ std::unique_ptr<const IFlux> ScalarFresnelMap::getInFlux(const kvector_t& kvec, if (it == m_cache.end()) it = m_cache.emplace(k2_theta, m_strategy->Execute(m_slices, kvec)).first; const auto& coef_vector = it->second; - return std::unique_ptr<const IFlux>(coef_vector[layer_index]->clone()); + return std::unique_ptr<const IFlux>(coef_vector[iLayer]->clone()); } diff --git a/Resample/Fresnel/ScalarFresnelMap.h b/Resample/Fresnel/ScalarFresnelMap.h index acf3059209c22f3b576b76e25038580fc617b213..fb42c647f2b4f945cf8ab6e7d854c055e32efd60 100644 --- a/Resample/Fresnel/ScalarFresnelMap.h +++ b/Resample/Fresnel/ScalarFresnelMap.h @@ -49,9 +49,9 @@ private: }; std::unique_ptr<const IFlux> getInFlux(const kvector_t& kvec, - size_t layer_index) const override; + size_t iLayer) const override; std::unique_ptr<const IFlux> getOutFlux(const kvector_t& kvec, - size_t layer_index) const override; + size_t iLayer) const override; mutable std::unordered_map<std::pair<double, double>, ISpecularStrategy::coeffs_t, Hash2Doubles> m_cache; diff --git a/Resample/Processed/ParticleRegions.cpp b/Resample/Processed/ParticleRegions.cpp index d85e19bf56fc662f6399aef05d6925dff90236eb..1c91f80a2331b3d18267f0b3bf45601d629148dc 100644 --- a/Resample/Processed/ParticleRegions.cpp +++ b/Resample/Processed/ParticleRegions.cpp @@ -45,8 +45,8 @@ public: std::vector<ZLimits> layerZLimits() const; private: - size_t layerIndexTop(double top_z) const; - size_t layerIndexBottom(double bottom_z) const; + size_t iLayerTop(double top_z) const; + size_t iLayerBottom(double bottom_z) const; void updateLayerLimits(size_t i_layer, ZLimits limits); std::vector<double> m_layers_bottomz; std::vector<ZLimits> m_layer_fill_limits; @@ -99,8 +99,8 @@ void LayerFillLimits::update(ZLimits particle_limits, double offset) throw std::runtime_error("LayerFillLimits::update: lower_limit > upper_limit."); if (bottom == top) // zero-size particle return; - size_t top_index = layerIndexTop(top); - size_t bottom_index = layerIndexBottom(bottom); + size_t top_index = iLayerTop(top); + size_t bottom_index = iLayerBottom(bottom); for (size_t i_layer = top_index; i_layer < bottom_index + 1; ++i_layer) { ZLimits limits(bottom, top); updateLayerLimits(i_layer, limits); @@ -112,7 +112,7 @@ std::vector<ZLimits> LayerFillLimits::layerZLimits() const return m_layer_fill_limits; } -size_t LayerFillLimits::layerIndexTop(double top_z) const +size_t LayerFillLimits::iLayerTop(double top_z) const { if (m_layers_bottomz.empty()) return 0; @@ -122,7 +122,7 @@ size_t LayerFillLimits::layerIndexTop(double top_z) const return static_cast<size_t>(m_layers_bottomz.rend() - index_above); } -size_t LayerFillLimits::layerIndexBottom(double bottom_z) const +size_t LayerFillLimits::iLayerBottom(double bottom_z) const { if (m_layers_bottomz.empty()) return 0; diff --git a/Resample/Processed/ProcessedLayout.cpp b/Resample/Processed/ProcessedLayout.cpp index 3d11b99cf33dbab357af2125517877420f65c1dd..9fbbd0066059806075613797e1447ca437d3a9e2 100644 --- a/Resample/Processed/ProcessedLayout.cpp +++ b/Resample/Processed/ProcessedLayout.cpp @@ -96,34 +96,35 @@ CoherentFFSum ProcessedLayout::processParticle(const IParticle& particle, const for (auto& region : entry.second) region.m_volume *= abundance * intensity_factor; for (const auto& entry : region_map) { - const size_t layer_index = entry.first; + const size_t iLayer = entry.first; const auto& regions = entry.second; - m_region_map[layer_index].insert(m_region_map[layer_index].begin(), regions.begin(), + m_region_map[iLayer].insert(m_region_map[iLayer].begin(), regions.begin(), regions.end()); } std::vector<CoherentFFTerm> terms; for (size_t i = 0; i < sliced_ffs.size(); ++i) { // TODO provide slices_ffs.cbegin() etc - const auto ff_pair = sliced_ffs.getPair(i); + const auto pair = sliced_ffs.getPair(i); + const IFormFactor& ff = *pair.first; + const size_t iLayer = pair.second; std::unique_ptr<IComputeFF> computer; if (slices.size() > 1) { if (m_polarized) - computer = std::make_unique<ComputeDWBAPol>(*ff_pair.first); + computer = std::make_unique<ComputeDWBAPol>(ff, iLayer); else - computer = std::make_unique<ComputeDWBA>(*ff_pair.first); + computer = std::make_unique<ComputeDWBA>(ff, iLayer); } else { // no need for DWBA, use BA if (m_polarized) - computer = std::make_unique<ComputeBAPol>(*ff_pair.first); + computer = std::make_unique<ComputeBAPol>(ff, iLayer); else - computer = std::make_unique<ComputeBA>(*ff_pair.first); + computer = std::make_unique<ComputeBA>(ff, iLayer); } - const size_t slice_index = ff_pair.second; - const Material& slice_material = slices[slice_index].material(); + const Material& slice_material = slices[iLayer].material(); computer->setAmbientMaterial(slice_material); - terms.emplace_back(CoherentFFTerm(computer.release(), slice_index)); + terms.emplace_back(CoherentFFTerm(computer.release())); } return CoherentFFSum(abundance, terms); } diff --git a/Sample/Multilayer/MultiLayer.cpp b/Sample/Multilayer/MultiLayer.cpp index 5aeceba786f4a45edda3bd399eb6c469b6783315..fcd7d32fc2971c10d442316a1ea42c0f8efe4e3e 100644 --- a/Sample/Multilayer/MultiLayer.cpp +++ b/Sample/Multilayer/MultiLayer.cpp @@ -87,7 +87,7 @@ void MultiLayer::addLayerWithTopRoughness(const Layer& layer, const LayerRoughne const Layer* MultiLayer::layer(size_t i_layer) const { - return m_layers[check_layer_index(i_layer)]; + return m_layers[check_iLayer(i_layer)]; } const LayerInterface* MultiLayer::layerInterface(size_t i_interface) const @@ -139,7 +139,7 @@ void MultiLayer::addInterface(LayerInterface* child) registerChild(child); } -size_t MultiLayer::check_layer_index(size_t i_layer) const +size_t MultiLayer::check_iLayer(size_t i_layer) const { if (i_layer >= m_layers.size()) throw std::runtime_error("Layer index is out of bounds"); diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h index 596e28d70a697b809505669ffd83a2a8714d0af2..842b84924b87782b75b5bfd8d68876e7388b9b6c 100644 --- a/Sample/Multilayer/MultiLayer.h +++ b/Sample/Multilayer/MultiLayer.h @@ -79,7 +79,7 @@ private: void addInterface(LayerInterface* child); //! Checks index of layer w.r.t. vector length - size_t check_layer_index(size_t i_layer) const; + size_t check_iLayer(size_t i_layer) const; //! Checks index of interface w.r.t. vector length size_t check_interface_index(size_t i_interface) const; diff --git a/Tests/UnitTests/Core/Sample/FormFactorCoherentSumTest.cpp b/Tests/UnitTests/Core/Sample/FormFactorCoherentSumTest.cpp index e244d22e87182a583c17d31f8b3b59aeed5b8548..da133730a612403ebc9762103fdd60b76f59df49 100644 --- a/Tests/UnitTests/Core/Sample/FormFactorCoherentSumTest.cpp +++ b/Tests/UnitTests/Core/Sample/FormFactorCoherentSumTest.cpp @@ -10,7 +10,7 @@ TEST_F(CoherentFFSumTest, RelAbundance) { const double epsilon = 1e-12; FormFactorFullSphere ff(5.0); - CoherentFFTerm part(new ComputeBA(ff), 1.); + CoherentFFTerm part(new ComputeBA(ff, 0)); CoherentFFSum ffw(1.0, {part}); EXPECT_EQ(1.0, ffw.relativeAbundance()); EXPECT_EQ(5.0, ffw.radialExtension()); diff --git a/mvvm/tests/testviewmodel/TestToyLayerItem.cpp b/mvvm/tests/testviewmodel/TestToyLayerItem.cpp index 3888c808b244c811092b7bf672f05e77f69b48c9..59a8a758231a063c6265ee4a0941a5cd789c2d93 100644 --- a/mvvm/tests/testviewmodel/TestToyLayerItem.cpp +++ b/mvvm/tests/testviewmodel/TestToyLayerItem.cpp @@ -67,22 +67,22 @@ TEST_F(ToyLayerItemTest, inViewModel) EXPECT_EQ(viewModel.columnCount(), 2); // accessing to viewItem representing layerItem - QModelIndex layerIndex = viewModel.index(0, 0); - auto viewItem = dynamic_cast<ViewLabelItem*>(viewModel.itemFromIndex(layerIndex)); + QModelIndex iLayer = viewModel.index(0, 0); + auto viewItem = dynamic_cast<ViewLabelItem*>(viewModel.itemFromIndex(iLayer)); EXPECT_TRUE(viewItem != nullptr); EXPECT_EQ(viewItem->item(), layerItem); // it has two rows and two columns, corresponding to our "thickness" and "color" properties - EXPECT_EQ(viewModel.rowCount(layerIndex), 2); - EXPECT_EQ(viewModel.columnCount(layerIndex), 2); + EXPECT_EQ(viewModel.rowCount(iLayer), 2); + EXPECT_EQ(viewModel.columnCount(iLayer), 2); // accessing to views representing label and value of thickness property - QModelIndex thicknessLabelIndex = viewModel.index(0, 0, layerIndex); + QModelIndex thicknessLabelIndex = viewModel.index(0, 0, iLayer); auto thicknessLabelView = dynamic_cast<ViewLabelItem*>(viewModel.itemFromIndex(thicknessLabelIndex)); EXPECT_TRUE(thicknessLabelView != nullptr); - QModelIndex thicknessValueIndex = viewModel.index(0, 1, layerIndex); + QModelIndex thicknessValueIndex = viewModel.index(0, 1, iLayer); auto thicknessValueView = dynamic_cast<ViewDataItem*>(viewModel.itemFromIndex(thicknessValueIndex)); EXPECT_TRUE(thicknessValueView != nullptr); @@ -104,8 +104,8 @@ TEST_F(ToyLayerItemTest, layerItemDataChanged) // constructing viewModel from sample model DefaultViewModel viewModel(&model); - QModelIndex layerIndex = viewModel.index(0, 0); - QModelIndex thicknessIndex = viewModel.index(0, 1, layerIndex); + QModelIndex iLayer = viewModel.index(0, 0); + QModelIndex thicknessIndex = viewModel.index(0, 1, iLayer); QSignalSpy spyDataChanged(&viewModel, &DefaultViewModel::dataChanged); diff --git a/mvvm/tests/testviewmodel/topitemsviewmodel.test.cpp b/mvvm/tests/testviewmodel/topitemsviewmodel.test.cpp index 099849ece26bb6f8b9ce6f97871c0928dbdaa55e..03f327569f09208b6e31c2bc1e91b2ac4962b761 100644 --- a/mvvm/tests/testviewmodel/topitemsviewmodel.test.cpp +++ b/mvvm/tests/testviewmodel/topitemsviewmodel.test.cpp @@ -95,23 +95,23 @@ TEST_F(TopItemsViewModelTest, insertLayerInMultiLayerThenRemove) EXPECT_EQ(spyInsert.count(), 2); // checking their indices - auto multilayer_index = viewmodel.index(0, 0, QModelIndex()); - auto layer_index = viewmodel.index(0, 0, multilayer_index); - EXPECT_EQ(viewmodel.sessionItemFromIndex(multilayer_index), multilayer); - EXPECT_EQ(viewmodel.sessionItemFromIndex(layer_index), layer); + auto multiiLayer = viewmodel.index(0, 0, QModelIndex()); + auto iLayer = viewmodel.index(0, 0, multiiLayer); + EXPECT_EQ(viewmodel.sessionItemFromIndex(multiiLayer), multilayer); + EXPECT_EQ(viewmodel.sessionItemFromIndex(iLayer), layer); // checking row and columns - EXPECT_EQ(viewmodel.rowCount(multilayer_index), 1); - EXPECT_EQ(viewmodel.columnCount(multilayer_index), 2); - EXPECT_EQ(viewmodel.rowCount(layer_index), 0); - EXPECT_EQ(viewmodel.columnCount(layer_index), 0); + EXPECT_EQ(viewmodel.rowCount(multiiLayer), 1); + EXPECT_EQ(viewmodel.columnCount(multiiLayer), 2); + EXPECT_EQ(viewmodel.rowCount(iLayer), 0); + EXPECT_EQ(viewmodel.columnCount(iLayer), 0); // removing layer model.removeItem(multilayer, {"", 0}); EXPECT_EQ(spyRemove.count(), 1); EXPECT_EQ(spyInsert.count(), 2); - EXPECT_EQ(viewmodel.rowCount(multilayer_index), 0); - EXPECT_EQ(viewmodel.columnCount(multilayer_index), 0); + EXPECT_EQ(viewmodel.rowCount(multiiLayer), 0); + EXPECT_EQ(viewmodel.columnCount(multiiLayer), 0); } //! Insert LayerItem in MultiLayer while multilayer is root item. Then deleting multilayer.