File indexing completed on 2025-07-12 07:52:21
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "ActsExamples/Framework/RandomNumbers.hpp"
0012
0013 #include <random>
0014
0015 namespace ActsExamples {
0016
0017
0018 struct MultiplicityGenerator {
0019
0020 virtual ~MultiplicityGenerator() = default;
0021
0022
0023
0024
0025 virtual std::size_t operator()(RandomEngine& rng) const = 0;
0026 };
0027
0028 struct FixedMultiplicityGenerator : public MultiplicityGenerator {
0029 std::size_t n = 1;
0030
0031 explicit FixedMultiplicityGenerator(std::size_t _n) : n{_n} {}
0032 FixedMultiplicityGenerator() = default;
0033
0034 std::size_t operator()(RandomEngine& ) const override { return n; }
0035 };
0036
0037 struct PoissonMultiplicityGenerator : public MultiplicityGenerator {
0038 double mean = 1;
0039 explicit PoissonMultiplicityGenerator(double _mean) : mean{_mean} {}
0040 PoissonMultiplicityGenerator() = default;
0041
0042 std::size_t operator()(RandomEngine& rng) const override {
0043 return (0 < mean) ? std::poisson_distribution<std::size_t>(mean)(rng) : 0;
0044 }
0045 };
0046
0047 }