//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      Sim/Simulation/ParticleSimulation.h
//! @brief     Defines class ParticleSimulation.
//!
//! @homepage  http://www.bornagainproject.org
//! @license   GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2026
//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
//  ************************************************************************************************

#ifndef BORNAGAIN_SIM_SIMULATION_PARTICLESIMULATION_H
#define BORNAGAIN_SIM_SIMULATION_PARTICLESIMULATION_H

#include <memory>

class Beam;
class Datafield;
class Detector;
class IParticle;

//! Simulation of scattering from isolated particles (pure Born approximation).
//!
//! Computes |F(q)|² for each detector pixel, where F is the particle form factor
//! and q is the scattering vector determined by beam and detector geometry.
//!
//! This simulation does not involve any sample, layers, or DWBA corrections.
//! It is intended for computing and visualizing particle form factors.

class ParticleSimulation {
public:
    ParticleSimulation(const Beam& beam, const IParticle& particle, const Detector& detector);
    ~ParticleSimulation();

    Datafield simulate();

#ifndef SWIG
private:
    std::unique_ptr<Beam> m_beam;
    std::unique_ptr<IParticle> m_particle;
    std::unique_ptr<Detector> m_detector;
#endif // SWIG
};

#endif // BORNAGAIN_SIM_SIMULATION_PARTICLESIMULATION_H
