Go to the documentation of this file.00001 #ifndef DataFormats_Math_deltaR_h
00002 #define DataFormats_Math_deltaR_h
00003
00004
00005
00006
00007
00008 #include "DataFormats/Math/interface/deltaPhi.h"
00009 #include <cmath>
00010
00011 namespace reco {
00012
00013 inline double deltaR2(double eta1, double phi1, double eta2, double phi2) {
00014 double deta = eta1 - eta2;
00015 double dphi = deltaPhi(phi1, phi2);
00016 return deta*deta + dphi*dphi;
00017 }
00018
00019 inline double deltaR(double eta1, double phi1, double eta2, double phi2) {
00020 return std::sqrt(deltaR2 (eta1, phi1, eta2, phi2));
00021 }
00022
00023 template<typename T1, typename T2>
00024 inline double deltaR2(const T1 & t1, const T2 & t2) {
00025 return deltaR2(t1.eta(), t1.phi(), t2.eta(), t2.phi());
00026 }
00027
00028 template<typename T1, typename T2>
00029 inline double deltaR(const T1 & t1, const T2 & t2) {
00030 return deltaR(t1.eta(), t1.phi(), t2.eta(), t2.phi());
00031 }
00032
00033 template <class T>
00034 T deltaR2 (T eta1, T phi1, T eta2, T phi2) {
00035 T deta = eta1 - eta2;
00036 T dphi = deltaPhi (phi1, phi2);
00037 return deta*deta + dphi*dphi;
00038 }
00039
00040 template <class T>
00041 T deltaR (T eta1, T phi1, T eta2, T phi2) {
00042 return std::sqrt (deltaR2 (eta1, phi1, eta2, phi2));
00043 }
00044
00045 }
00046
00047 using reco::deltaR2;
00048 using reco::deltaR;
00049
00050 template<typename T1, typename T2 = T1>
00051 struct DeltaR {
00052 double operator()( const T1 & t1, const T2 & t2 ) const {
00053 return reco::deltaR(t1, t2);
00054 }
00055
00056 };
00057 #endif