Skip to content
Snippets Groups Projects
Commit 55536c65 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

split off ISimulation::initDistributionHandler

parent ba3a62ad
No related branches found
No related tags found
1 merge request!923ISimulation no longer knows about beam and detector; DepthProbeSimulation now inherits from ISimulation2D
......@@ -193,27 +193,7 @@ SimulationResult ISimulation::simulate()
if (param_combinations == 1)
runSingleSimulation(re_sample, batch_start, batch_size, 1.);
else {
// init callbacks for setting the parameter values
for (const auto& distribution : m_distribution_handler.getDistributions()) {
const auto* dc = const_cast<ParameterDistribution*>(&distribution);
switch (dc->whichParameter()) {
case ParameterDistribution::BeamAzimuthalAngle:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setAzimuthalAngleGuarded(d); });
break;
case ParameterDistribution::BeamInclinationAngle:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setInclinationAngleGuarded(d); });
break;
case ParameterDistribution::BeamWavelength:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setWavelengthGuarded(d); });
break;
default:
throw std::runtime_error("ISimulation::simulate() missing implementation");
}
}
initDistributionHandler();
for (size_t index = 0; index < param_combinations; ++index) {
double weight = m_distribution_handler.setParameterValues(index);
runSingleSimulation(re_sample, batch_start, batch_size, weight);
......@@ -223,6 +203,31 @@ SimulationResult ISimulation::simulate()
return pack_result();
}
//! init callbacks for setting the parameter values
void ISimulation::initDistributionHandler()
{
for (const auto& distribution : m_distribution_handler.getDistributions()) {
const auto* dc = const_cast<ParameterDistribution*>(&distribution);
switch (dc->whichParameter()) {
case ParameterDistribution::BeamAzimuthalAngle:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setAzimuthalAngleGuarded(d); });
break;
case ParameterDistribution::BeamInclinationAngle:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setInclinationAngleGuarded(d); });
break;
case ParameterDistribution::BeamWavelength:
m_distribution_handler.defineCallbackForDistribution(
dc, [&](double d) { beam().setWavelengthGuarded(d); });
break;
default:
ASSERT(0);
}
}
}
const MultiLayer* ISimulation::sample() const
{
return m_sample.get();
......
......@@ -116,6 +116,8 @@ protected:
std::unique_ptr<Beam> m_beam;
std::unique_ptr<IDetector> m_detector;
void initDistributionHandler();
private:
void runSingleSimulation(const reSample& re_sample, size_t batch_start, size_t batch_size,
double weight = 1.0);
......
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