Skip to content

File EnergyDistribution.h

File List > Beamline > EnergyDistribution.h

Go to the documentation of this file

#pragma once

#include <variant>

#include "Core.h"
#include "DatFile.h"

namespace rayx {

enum class SpreadType { HardEdge, SoftEdge, SeparateEnergies };    // default WhiteBand
enum class EnergyDistributionType { File, Values, Total, Param };  // default ET_VALUES

struct RAYX_API HardEdge {
    double m_centerEnergy;
    double m_energySpread;

    HardEdge(double centerEnergy, double energySpread) : m_centerEnergy(centerEnergy), m_energySpread(energySpread) {}
};

struct RAYX_API SoftEdge {
    double m_centerEnergy;
    double m_sigma;

    SoftEdge(double centerEnergy, double sigma) : m_centerEnergy(centerEnergy), m_sigma(sigma) {}
};



struct RAYX_API SeparateEnergies {
    double m_centerEnergy;
    double m_energySpread;
    int m_numberOfEnergies;

    SeparateEnergies(double centerEnergy, double energySpread, int numberOfEnergies)
        : m_centerEnergy(centerEnergy), m_energySpread(energySpread), m_numberOfEnergies(numberOfEnergies) {}
};

using EnergyDistributionVariant = std::variant<DatFile, HardEdge, SoftEdge, SeparateEnergies>;

}  // namespace rayx