12#include "detray/definitions/algebra.hpp"
13#include "detray/definitions/detail/qualifiers.hpp"
14#include "detray/definitions/math.hpp"
15#include "detray/definitions/units.hpp"
18#include "detray/test/common/event_generator/random_numbers.hpp"
29template <concepts::scalar scalar_t>
93 const scalar_t low,
const scalar_t high) {
99 assert(min_phi <= max_phi);
106 template <
typename o_scalar_t>
109 phi_range(
static_cast<o_scalar_t
>(r[0]),
static_cast<o_scalar_t
>(r[1]));
120 assert(min_theta <= max_theta);
127 template <
typename o_scalar_t>
130 theta_range(
static_cast<o_scalar_t
>(r[0]),
static_cast<o_scalar_t
>(r[1]));
139 constexpr auto num_max{0.001f * std::numeric_limits<scalar_t>::max()};
140 auto min_eta{low > -num_max ? low : -num_max};
141 auto max_eta{high < num_max ? high : num_max};
143 assert(min_eta <= max_eta);
145 auto get_theta = [](
const scalar_t eta) {
146 return 2.f * math::atan(math::exp(-eta));
149 theta_range(get_theta(max_eta), get_theta(min_eta));
154 template <
typename o_scalar_t>
157 eta_range(
static_cast<o_scalar_t
>(r[0]),
static_cast<o_scalar_t
>(r[1]));
173 template <
typename o_scalar_t>
176 mom_range(
static_cast<o_scalar_t
>(r[0]),
static_cast<o_scalar_t
>(r[1]));
192 template <
typename o_scalar_t>
195 pT_range(
static_cast<o_scalar_t
>(r[0]),
static_cast<o_scalar_t
>(r[1]));
222 template <concepts::po
int3D po
int3_t>
224 const point3_t& ori) {
225 return origin(ori[0], ori[1], ori[2]);
232 const scalar_t x,
const scalar_t y,
const scalar_t z) {
239 template <concepts::po
int3D po
int3_t>
275 DETRAY_HOST_DEVICE
constexpr std::size_t
n_tracks()
const {
303 DETRAY_HOST_DEVICE
constexpr scalar_t
time()
const {
return m_time; }
315 const auto& ori = cfg.
origin();
321 out <<
"\nRandom track generator\n"
322 <<
"----------------------------\n"
323 <<
" Random seed : " << cfg.
seed() <<
"\n"
324 <<
" No. tracks : " << cfg.
n_tracks() <<
"\n"
327 <<
" Rand. charge : " << std::boolalpha
332 out <<
" Transverse mom. : [";
334 out <<
" Momentum : [";
341 <<
" Theta range : ["
347 <<
" Do vertex smearing : " << std::boolalpha
353 out <<
" Origin stddev : ["
Detray include(s).
Definition array_operators.hpp:18
std::array< value_t, kDIM > darray
Fixed-size array container.
Definition containers.hpp:30
static constexpr scalar_t pi
π
Definition units.hpp:136
static constexpr seed_type default_seed()
Get the default seed of the engine.
Definition random_numbers.hpp:102
Configuration for the random track generator.
Definition random_track_generator_config.hpp:30
constexpr const darray< scalar_t, 2 > & phi_range() const
Definition random_track_generator_config.hpp:279
random_track_generator_config & mom_range(scalar_t low, scalar_t high)
Definition random_track_generator_config.hpp:163
scalar_t m_charge
Track charge.
Definition random_track_generator_config.hpp:66
random_track_generator_config & charge(scalar_t q)
Definition random_track_generator_config.hpp:260
darray< scalar_t, 2 > m_theta_range
Polar angle range.
Definition random_track_generator_config.hpp:47
random_track_generator_config & p_tot(scalar_t p)
Definition random_track_generator_config.hpp:200
scalar_t m_time
Time parameter and charge of the track.
Definition random_track_generator_config.hpp:64
random_track_generator_config & p_T(scalar_t p)
Definition random_track_generator_config.hpp:206
random_track_generator_config & pT_range(scalar_t low, scalar_t high)
Definition random_track_generator_config.hpp:182
friend std::ostream & operator<<(std::ostream &out, const random_track_generator_config &cfg)
Print the random track generator configuration.
Definition random_track_generator_config.hpp:313
random_track_generator_config & eta_range(scalar_t low, scalar_t high)
Definition random_track_generator_config.hpp:136
random_track_generator_config & origin(const point3_t &ori)
Definition random_track_generator_config.hpp:223
constexpr seed_t seed() const
Getters.
Definition random_track_generator_config.hpp:269
random_track_generator_config & mom_range(darray< o_scalar_t, 2 > r)
Definition random_track_generator_config.hpp:174
darray< scalar_t, 3 > m_origin
Track origin.
Definition random_track_generator_config.hpp:56
random_track_generator_config & pT_range(darray< o_scalar_t, 2 > r)
Definition random_track_generator_config.hpp:193
random_track_generator_config & phi_range(const scalar_t low, const scalar_t high)
Definition random_track_generator_config.hpp:92
constexpr scalar_t time() const
Definition random_track_generator_config.hpp:303
bool m_randomize_charge
Randomly flip the charge sign?
Definition random_track_generator_config.hpp:61
random_track_generator_config & theta_range(darray< o_scalar_t, 2 > r)
Definition random_track_generator_config.hpp:128
random_track_generator_config & seed(const seed_t s)
Setters.
Definition random_track_generator_config.hpp:72
darray< scalar_t, 3 > m_origin_stddev
Vertex smearing standard deviations.
Definition random_track_generator_config.hpp:58
constexpr bool randomize_charge() const
Definition random_track_generator_config.hpp:299
random_track_generator_config & origin(const scalar_t x, const scalar_t y, const scalar_t z)
Definition random_track_generator_config.hpp:214
random_track_generator_config & randomize_charge(bool rc)
Definition random_track_generator_config.hpp:247
constexpr const darray< scalar_t, 2 > & mom_range() const
Definition random_track_generator_config.hpp:287
random_track_generator_config & origin_stddev(point3_t stddev)
Definition random_track_generator_config.hpp:240
constexpr const darray< scalar_t, 2 > & theta_range() const
Definition random_track_generator_config.hpp:283
constexpr const auto & origin() const
Definition random_track_generator_config.hpp:291
std::uint64_t seed_t
Random engine seed type.
Definition random_track_generator_config.hpp:32
darray< scalar_t, 2 > m_phi_range
Range for phi [-pi, pi) and theta [0, pi).
Definition random_track_generator_config.hpp:44
random_track_generator_config & do_vertex_smearing(bool b)
Definition random_track_generator_config.hpp:78
darray< scalar_t, 2 > m_mom_range
Momentum range.
Definition random_track_generator_config.hpp:50
seed_t m_seed
Monte-Carlo seed.
Definition random_track_generator_config.hpp:38
constexpr bool is_pT() const
Definition random_track_generator_config.hpp:297
constexpr std::size_t n_tracks() const
Definition random_track_generator_config.hpp:275
random_track_generator_config & origin_stddev(const scalar_t x, const scalar_t y, const scalar_t z)
Definition random_track_generator_config.hpp:231
random_track_generator_config & phi_range(darray< o_scalar_t, 2 > r)
Definition random_track_generator_config.hpp:107
constexpr bool do_vertex_smearing() const
Definition random_track_generator_config.hpp:271
random_track_generator_config & n_tracks(std::size_t n)
Definition random_track_generator_config.hpp:84
bool m_do_vtx_smearing
Gaussian vertex smearing.
Definition random_track_generator_config.hpp:35
bool m_is_pT
Whether to interpret the momentum m_mom_range as p_T.
Definition random_track_generator_config.hpp:53
random_track_generator_config & theta_range(scalar_t low, scalar_t high)
Definition random_track_generator_config.hpp:115
constexpr const auto & origin_stddev() const
Definition random_track_generator_config.hpp:293
constexpr scalar_t charge() const
Definition random_track_generator_config.hpp:305
random_track_generator_config & eta_range(darray< o_scalar_t, 2 > r)
Definition random_track_generator_config.hpp:155
random_track_generator_config & time(scalar_t t)
Definition random_track_generator_config.hpp:253
std::size_t m_n_tracks
How many tracks will be generated.
Definition random_track_generator_config.hpp:41
static constexpr scalar_t mm
Native length unit, the millimetre.
Definition units.hpp:27
static constexpr scalar_t GeV
Native energy unit, the gigaelectronvolt.
Definition units.hpp:81
static constexpr scalar_t e
Charge, native unit e (elementary charge).
Definition units.hpp:105
static constexpr scalar_t rad
Native angular unit, the radian.
Definition units.hpp:115
static constexpr scalar_t us
Microsecond expressed in the internal length-equivalent time unit.
Definition units.hpp:64