diff --git a/Core/Simulation/SpecularSimulation.cpp b/Core/Simulation/SpecularSimulation.cpp index 0622c97fe73bca06acc19f5679e89984bbe4fea9..54f814adec28b9e34aa9c2ed5bbde97cb711f143 100644 --- a/Core/Simulation/SpecularSimulation.cpp +++ b/Core/Simulation/SpecularSimulation.cpp @@ -77,11 +77,8 @@ SimulationResult SpecularSimulation::result() const { const size_t i_layer = 0; // detector intensity is proportional to reflectivity from top layer validityCheck(i_layer); - const auto detector = SpecDetector(m_instrument); - auto data = std::unique_ptr<OutputData<double>>( - detector->createDetectorIntensity(m_sim_elements, m_instrument.getBeam())); - auto& axis = detector->getAxis(0); - SpecularConverter converter(m_instrument.getBeam(), axis); + auto data = createIntensityData(); + SpecularConverter converter(m_instrument.getBeam(), *m_coordinate_axis); return SimulationResult(*data, converter); } @@ -119,7 +116,7 @@ void SpecularSimulation::setBeamParameters(double lambda, const IAxis& alpha_axi void SpecularSimulation::setBeamParameters(double lambda, int nbins, double alpha_i_min, double alpha_i_max, const IFootprintFactor* beam_shape) { - FixedBinAxis axis("alpha_i", nbins, alpha_i_min, alpha_i_max); + FixedBinAxis axis("alpha_i", static_cast<size_t>(nbins), alpha_i_min, alpha_i_max); setBeamParameters(lambda, axis, beam_shape); } @@ -133,7 +130,7 @@ const IAxis* SpecularSimulation::getAlphaAxis() const void SpecularSimulation::initSimulationElementVector() { - auto beam = m_instrument.getBeam(); + const auto& beam = m_instrument.getBeam(); m_sim_elements = generateSimulationElements(beam); if (!m_cache.empty()) @@ -302,6 +299,18 @@ double SpecularSimulation::alpha_i(size_t index) const return m_coordinate_axis->getBin(index).getMidPoint(); } +std::unique_ptr<OutputData<double>> SpecularSimulation::createIntensityData() const +{ + std::unique_ptr<OutputData<double>> result(new OutputData<double>); + result->addAxis(*m_coordinate_axis); + + size_t i = 0; + for (auto iter = m_sim_elements.begin(); iter != m_sim_elements.end(); ++iter, ++i) + result->operator[](i) = iter->getIntensity(); + + return result; +} + namespace { const SpecularDetector1D* SpecDetector(const Instrument& instrument) diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h index 231ecf0d2787ba125e9428001ae830ce507c1ed7..fcc4fc1d5438c435a06ee13b8cdd65e724f1a86e 100644 --- a/Core/Simulation/SpecularSimulation.h +++ b/Core/Simulation/SpecularSimulation.h @@ -103,6 +103,8 @@ private: double alpha_i(size_t index) const; + std::unique_ptr<OutputData<double>> createIntensityData() const; + //! Returns vector of reflection coefficients (\f$R\f$) for all alpha_i angles for given layer index. //! Deprecated and will be removed. std::vector<complex_t> getScalarR(size_t i_layer) const;