22 IInterferenceFunctionStrategy::IInterferenceFunctionStrategy(
const SimulationOptions& sim_params,
24 : mP_iff(nullptr), m_options(sim_params), m_polarized(polarized),
30 IInterferenceFunctionStrategy::~IInterferenceFunctionStrategy() =
default;
33 const std::vector<FormFactorCoherentSum>& weighted_formfactors,
36 if (weighted_formfactors.empty())
38 "IInterferenceFunctionStrategy::init: strategy gets no form factors.");
39 m_formfactor_wrappers = weighted_formfactors;
41 mP_iff.reset(p_iff->
clone());
45 strategy_specific_post_init();
50 if (m_options.isIntegrate() && (sim_element.getSolidAngle() > 0.0))
51 return MCIntegratedEvaluate(sim_element);
52 return evaluateSinglePoint(sim_element);
56 IInterferenceFunctionStrategy::evaluateSinglePoint(
const SimulationElement& sim_element)
const
59 return scalarCalculation(sim_element);
61 return polarizedCalculation(sim_element);
66 IInterferenceFunctionStrategy::MCIntegratedEvaluate(
const SimulationElement& sim_element)
const
68 double min_array[] = {0.0, 0.0};
69 double max_array[] = {1.0, 1.0};
70 return mP_integrator->integrate(min_array, max_array, (
void*)&sim_element,
71 m_options.getMcPoints());
74 double IInterferenceFunctionStrategy::evaluate_for_fixed_angles(
double* fractions,
size_t,
77 double par0 = fractions[0];
78 double par1 = fractions[1];
83 return pars->getIntegrationFactor(par0, par1) * evaluateSinglePoint(sim_element);
86 void IInterferenceFunctionStrategy::strategy_specific_post_init() {}
Defines many exception classes in namespace Exceptionss.
Defines class IInterferenceFunctionStrategy.
Defines and implements template class IntegratorMCMiser.
Defines class InterferenceFunctionNone.
Defines class SimulationElement.
Base class of all interference function strategy classes.
double evaluate(const SimulationElement &sim_element) const
Calculates the intensity for scalar particles/interactions.
void init(const std::vector< FormFactorCoherentSum > &weighted_formfactors, const IInterferenceFunction *p_iff)
Initializes the object with form factors and an interference function.
Pure virtual base class of interference functions.
virtual IInterferenceFunction * clone() const =0
Returns a clone of this ISample object.
Default interference function (i.e.
Data stucture containing both input and output of a single detector cell.
Collect the different options for simulation.