File indexing completed on 2024-04-06 12:19:23
0001 #ifndef JETUTILMC_H
0002 #define JETUTILMC_H
0003
0004 #include <cmath>
0005 #include <TMath.h>
0006 namespace {
0007 class PtGreater {
0008 public:
0009 template <typename T>
0010 bool operator()(const T& i, const T& j) {
0011 return (i.pt() > j.pt());
0012 }
0013 };
0014
0015 inline double Phi_0_2pi(double x) {
0016 while (x >= 2 * M_PI)
0017 x -= 2 * M_PI;
0018 while (x < 0.)
0019 x += 2 * M_PI;
0020 return x;
0021 }
0022
0023 inline double Phi_mpi_pi(double x) {
0024 while (x >= M_PI)
0025 x -= 2 * M_PI;
0026 while (x < -M_PI)
0027 x += 2 * M_PI;
0028 return x;
0029 }
0030
0031 inline double dPhi(double phi1, double phi2) {
0032 phi1 = Phi_0_2pi(phi1);
0033 phi2 = Phi_0_2pi(phi2);
0034 return Phi_mpi_pi(phi1 - phi2);
0035 }
0036
0037 inline double radius(double eta1, double phi1, double eta2, double phi2) {
0038 const double TWOPI = 2.0 * M_PI;
0039
0040 phi1 = Phi_0_2pi(phi1);
0041 phi2 = Phi_0_2pi(phi2);
0042
0043 double dphi = Phi_0_2pi(phi1 - phi2);
0044 dphi = TMath::Min(dphi, TWOPI - dphi);
0045 double deta = eta1 - eta2;
0046
0047 return sqrt(deta * deta + dphi * dphi);
0048 }
0049
0050 template <typename T1, typename T2>
0051 double radius(const T1& t1, const T2& t2) {
0052 return radius(t1->eta(), t1->phi(), t2->eta(), t2->phi());
0053 }
0054 }
0055
0056 #endif