1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Img3D/Build/PositionBuilders.h
//! @brief Declares interface IPositionBuilder and subclasses.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_IMG3D_BUILD_POSITIONBUILDERS_H
#define BORNAGAIN_IMG3D_BUILD_POSITIONBUILDERS_H
#include "Base/Type/Field2D.h"
#include <memory>
#include <vector>
class Interference1DLattice;
class Interference2DLattice;
class Interference2DParacrystal;
class InterferenceFinite2DLattice;
class InterferenceRadialParacrystal;
class IPositionBuilder {
public:
virtual ~IPositionBuilder();
double2d_t generatePositions(double layer_size, double density, int seed) const;
private:
virtual double2d_t generatePositionsImpl(double layer_size, double density, int seed) const = 0;
virtual double positionVariance() const = 0;
};
class RandomPositionBuilder : public IPositionBuilder {
public:
RandomPositionBuilder();
~RandomPositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
};
class Lattice1DPositionBuilder : public IPositionBuilder {
public:
Lattice1DPositionBuilder(const Interference1DLattice* p_iff);
~Lattice1DPositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
std::unique_ptr<Interference1DLattice> m_iff;
};
class Lattice2DPositionBuilder : public IPositionBuilder {
public:
Lattice2DPositionBuilder(const Interference2DLattice* p_iff);
~Lattice2DPositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
std::unique_ptr<Interference2DLattice> m_iff;
};
class Paracrystal2DPositionBuilder : public IPositionBuilder {
public:
Paracrystal2DPositionBuilder(const Interference2DParacrystal* p_iff);
~Paracrystal2DPositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
std::unique_ptr<Interference2DParacrystal> m_iff;
};
class Finite2DLatticePositionBuilder : public IPositionBuilder {
public:
Finite2DLatticePositionBuilder(const InterferenceFinite2DLattice* p_iff);
~Finite2DLatticePositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
std::unique_ptr<InterferenceFinite2DLattice> m_iff;
};
class RadialParacrystalPositionBuilder : public IPositionBuilder {
public:
RadialParacrystalPositionBuilder(const InterferenceRadialParacrystal* p_iff);
~RadialParacrystalPositionBuilder() override;
private:
double2d_t generatePositionsImpl(double layer_size, double density, int seed) const override;
double positionVariance() const override;
std::unique_ptr<InterferenceRadialParacrystal> m_iff;
};
#endif // BORNAGAIN_IMG3D_BUILD_POSITIONBUILDERS_H
|