Class Acts::Experimental::AtlasBetheHeitlerApprox

template<int NComponents, int PolyDegree>
class AtlasBetheHeitlerApprox

This class approximates the Bethe-Heitler distribution as a gaussian mixture.

To enable an approximation for continuous input variables, the weights, means and variances are internally parametrized as a Nth order polynomial.

Public Types

using Data = std::array<PolyData, NComponents>

Public Functions

inline constexpr AtlasBetheHeitlerApprox(const Data &low_data, const Data &high_data, bool low_transform, bool high_transform)

Construct the Bethe-Heitler approximation description.

Additional to the coefficients of the polynomials, the information whether these values need to be transformed beforehand must be given (see ATLAS code).

  • low_data – data for the lower x/x0 range

  • high_data – data for the higher x/x0 range

  • low_transform – wether the low data need to be transformed

  • high_transform – wether the high data need to be transformed

inline auto mixture(ActsScalar x) const

Generates the mixture from the polynomials and reweights them, so that the sum of all weights is 1.


x – pathlength in terms of the radiation length

inline constexpr auto numComponents() const

Returns the number of components the returned mixture will have.

inline constexpr bool validXOverX0(ActsScalar x) const

Checks if an input is valid for the parameterization.


x – pathlength in terms of the radiation length

Public Static Functions

static inline auto loadFromFiles(const std::string &low_parameters_path, const std::string &high_parameters_path)

Loads a parameterization from a file according to the Atlas file description.

  • low_parameters_path – Path to the foo.par file that stores the parameterization for low x/x0

  • high_parameters_path – Path to the foo.par file that stores the parameterization for high x/x0

Public Static Attributes

static constexpr double higherLimit = 0.20
static constexpr double lowerLimit = 0.10
static constexpr double noChangeLimit = 0.0001
static constexpr double singleGaussianLimit = 0.002
struct PolyData

Public Members

std::array<ActsScalar, PolyDegree + 1> meanCoeffs
std::array<ActsScalar, PolyDegree + 1> varCoeffs
std::array<ActsScalar, PolyDegree + 1> weightCoeffs