File indexing completed on 2026-05-27 07:23:58
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011
0012 #include "detray/definitions/algebra.hpp"
0013
0014
0015 #include <cmath>
0016 #include <numbers>
0017
0018 namespace detray {
0019
0020
0021 template <concepts::scalar scalar_t>
0022 struct unit {
0023
0024
0025 static constexpr scalar_t um{static_cast<scalar_t>(1e-3)};
0026 static constexpr scalar_t mm{static_cast<scalar_t>(1.0)};
0027 static constexpr scalar_t cm{static_cast<scalar_t>(1e1)};
0028 static constexpr scalar_t m{static_cast<scalar_t>(1e3)};
0029
0030
0031
0032
0033
0034 static constexpr scalar_t mm2{static_cast<scalar_t>(1.0)};
0035
0036 static constexpr scalar_t cm2{static_cast<scalar_t>(1e2)};
0037
0038 static constexpr scalar_t m2{static_cast<scalar_t>(1e6)};
0039
0040
0041
0042
0043
0044 static constexpr scalar_t mm3{static_cast<scalar_t>(1.0)};
0045
0046 static constexpr scalar_t cm3{static_cast<scalar_t>(1e3)};
0047
0048 static constexpr scalar_t m3{static_cast<scalar_t>(1e9)};
0049
0050
0051
0052
0053 static constexpr scalar_t s{static_cast<scalar_t>(299792458000.0)};
0054 static constexpr scalar_t fs{static_cast<scalar_t>(1e-15 * 299792458000.0)};
0055 static constexpr scalar_t ps{static_cast<scalar_t>(1e-12 * 299792458000.0)};
0056 static constexpr scalar_t ns{static_cast<scalar_t>(1e-9 * 299792458000.0)};
0057 static constexpr scalar_t us{static_cast<scalar_t>(1e-6 * 299792458000.0)};
0058 static constexpr scalar_t ms{static_cast<scalar_t>(1e-3 * 299792458000.0)};
0059 static constexpr scalar_t min{static_cast<scalar_t>(60.0 * 299792458000.0)};
0060 static constexpr scalar_t h{static_cast<scalar_t>(3600.0 * 299792458000.0)};
0061
0062
0063
0064
0065 static constexpr scalar_t eV{static_cast<scalar_t>(1e-9)};
0066 static constexpr scalar_t keV{static_cast<scalar_t>(1e-6)};
0067 static constexpr scalar_t MeV{static_cast<scalar_t>(1e-3)};
0068 static constexpr scalar_t GeV{static_cast<scalar_t>(1.0)};
0069 static constexpr scalar_t TeV{static_cast<scalar_t>(1e3)};
0070
0071
0072
0073
0074 static constexpr scalar_t u{static_cast<scalar_t>(0.93149410242)};
0075
0076
0077
0078
0079
0080
0081
0082 static constexpr scalar_t g{static_cast<scalar_t>(1.0 / 1.782662e-24)};
0083 static constexpr scalar_t kg{static_cast<scalar_t>(1.0 / 1.782662e-27)};
0084
0085
0086
0087 static constexpr scalar_t mol{static_cast<scalar_t>(1.0)};
0088
0089
0090 static constexpr scalar_t e{static_cast<scalar_t>(1.0)};
0091
0092
0093 static constexpr scalar_t T{static_cast<scalar_t>(
0094 0.000299792458)};
0095
0096
0097 static constexpr scalar_t mrad{static_cast<scalar_t>(1e-3)};
0098 static constexpr scalar_t rad{static_cast<scalar_t>(1.0)};
0099 static constexpr scalar_t degree{
0100 static_cast<scalar_t>(0.017453292519943295)};
0101 };
0102
0103
0104 template <concepts::scalar scalar_t>
0105 struct constant {
0106
0107 static constexpr scalar_t e{static_cast<scalar_t>(std::numbers::e)};
0108
0109 static constexpr scalar_t log2e{static_cast<scalar_t>(std::numbers::log2e)};
0110
0111 static constexpr scalar_t log10e{static_cast<scalar_t>(std::numbers::log10e)};
0112
0113 static constexpr scalar_t ln2{static_cast<scalar_t>(std::numbers::ln2)};
0114
0115 static constexpr scalar_t ln10{static_cast<scalar_t>(std::numbers::ln10)};
0116
0117
0118 static constexpr scalar_t pi{static_cast<scalar_t>(std::numbers::pi)};
0119
0120 static constexpr scalar_t pi_2{static_cast<scalar_t>(std::numbers::pi / 2.)};
0121
0122 static constexpr scalar_t pi_4{static_cast<scalar_t>(std::numbers::pi / 4.)};
0123
0124 static constexpr scalar_t inv_pi{
0125 static_cast<scalar_t>(1. / std::numbers::pi)};
0126
0127 static constexpr scalar_t inv_2_pi{
0128 static_cast<scalar_t>(2. / std::numbers::pi)};
0129
0130
0131 static constexpr scalar_t sqrt2{static_cast<scalar_t>(std::numbers::sqrt2)};
0132
0133 static constexpr scalar_t inv_sqrt2{
0134 static_cast<scalar_t>(1. / std::numbers::sqrt2)};
0135
0136
0137 static constexpr scalar_t avogadro{
0138 static_cast<scalar_t>(6.02214076e23 / unit<scalar_t>::mol)};
0139
0140
0141
0142
0143 static constexpr scalar_t hbar{static_cast<scalar_t>(
0144 6.582119569509066e-25 * unit<scalar_t>::GeV * unit<scalar_t>::s)};
0145
0146
0147
0148
0149 static constexpr scalar_t m_e{
0150 static_cast<scalar_t>(0.51099895069 * unit<scalar_t>::MeV)};
0151 };
0152
0153 }