Skip to content
Snippets Groups Projects
Commit 1d06a9be authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

Untie specular simulation from detector axis

parent 30295d46
No related branches found
No related tags found
No related merge requests found
...@@ -77,11 +77,8 @@ SimulationResult SpecularSimulation::result() const ...@@ -77,11 +77,8 @@ SimulationResult SpecularSimulation::result() const
{ {
const size_t i_layer = 0; // detector intensity is proportional to reflectivity from top layer const size_t i_layer = 0; // detector intensity is proportional to reflectivity from top layer
validityCheck(i_layer); validityCheck(i_layer);
const auto detector = SpecDetector(m_instrument); auto data = createIntensityData();
auto data = std::unique_ptr<OutputData<double>>( SpecularConverter converter(m_instrument.getBeam(), *m_coordinate_axis);
detector->createDetectorIntensity(m_sim_elements, m_instrument.getBeam()));
auto& axis = detector->getAxis(0);
SpecularConverter converter(m_instrument.getBeam(), axis);
return SimulationResult(*data, converter); return SimulationResult(*data, converter);
} }
...@@ -119,7 +116,7 @@ void SpecularSimulation::setBeamParameters(double lambda, const IAxis& alpha_axi ...@@ -119,7 +116,7 @@ void SpecularSimulation::setBeamParameters(double lambda, const IAxis& alpha_axi
void SpecularSimulation::setBeamParameters(double lambda, int nbins, double alpha_i_min, void SpecularSimulation::setBeamParameters(double lambda, int nbins, double alpha_i_min,
double alpha_i_max, const IFootprintFactor* beam_shape) 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); setBeamParameters(lambda, axis, beam_shape);
} }
...@@ -133,7 +130,7 @@ const IAxis* SpecularSimulation::getAlphaAxis() const ...@@ -133,7 +130,7 @@ const IAxis* SpecularSimulation::getAlphaAxis() const
void SpecularSimulation::initSimulationElementVector() void SpecularSimulation::initSimulationElementVector()
{ {
auto beam = m_instrument.getBeam(); const auto& beam = m_instrument.getBeam();
m_sim_elements = generateSimulationElements(beam); m_sim_elements = generateSimulationElements(beam);
if (!m_cache.empty()) if (!m_cache.empty())
...@@ -302,6 +299,18 @@ double SpecularSimulation::alpha_i(size_t index) const ...@@ -302,6 +299,18 @@ double SpecularSimulation::alpha_i(size_t index) const
return m_coordinate_axis->getBin(index).getMidPoint(); 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 namespace
{ {
const SpecularDetector1D* SpecDetector(const Instrument& instrument) const SpecularDetector1D* SpecDetector(const Instrument& instrument)
......
...@@ -103,6 +103,8 @@ private: ...@@ -103,6 +103,8 @@ private:
double alpha_i(size_t index) const; 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. //! Returns vector of reflection coefficients (\f$R\f$) for all alpha_i angles for given layer index.
//! Deprecated and will be removed. //! Deprecated and will be removed.
std::vector<complex_t> getScalarR(size_t i_layer) const; std::vector<complex_t> getScalarR(size_t i_layer) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment