CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DataFormats/Math/interface/deltaR.h

Go to the documentation of this file.
00001 #ifndef DataFormats_Math_deltaR_h
00002 #define DataFormats_Math_deltaR_h
00003 /* functions to compute deltaR
00004  *
00005  * Ported from original code in RecoJets 
00006  * by Fedor Ratnikov, FNAL
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