17 #ifndef ROOT_Math_GenVector_eta
18 #define ROOT_Math_GenVector_eta 1
47 template<
typename Scalar>
48 inline Scalar Eta_FromRhoZ(Scalar rho, Scalar z) {
52 static const Scalar big_z_scaled = pow(std::numeric_limits<Scalar>::epsilon(), static_cast<Scalar>(-.25));
54 Scalar z_scaled = z/rho;
55 if (std::fabs(z_scaled) < big_z_scaled) {
56 return log(z_scaled + sqrt(z_scaled * z_scaled + 1.0));
59 return z > 0 ? log(2.0 * z_scaled + 0.5 / z_scaled) : -log(-2.0 * z_scaled);
67 return z + etaMax<Scalar>();
70 return z - etaMax<Scalar>();
80 template<
typename Scalar>
81 inline Scalar Eta_FromTheta(Scalar theta, Scalar r) {
82 Scalar tanThetaOver2 = tan(theta / 2.);
83 if (tanThetaOver2 == 0) {
84 return r + etaMax<Scalar>();
86 else if (tanThetaOver2 > std::numeric_limits<Scalar>::max()) {
87 return -r - etaMax<Scalar>();
90 return -log(tanThetaOver2);