CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
VirtualJetProducerHelper.h
Go to the documentation of this file.
1 #ifndef RecoJets_JetProducers_interface_VirtualJetProducerHelper_h
2 #define RecoJets_JetProducers_interface_VirtualJetProducerHelper_h
3 
4 #include <cmath>
5 #include <algorithm>
6 
7 namespace reco {
8 
9  namespace helper {
10 
11  namespace VirtualJetProducerHelper {
12 
13 // Area of intersection of two unit-radius disks with centers separated by r12.
14 inline double intersection(double r12)
15 {
16  if (r12 == 0) return M_PI;
17  if (r12 >= 2) return 0;
18  return 2 * std::acos(0.5*r12) - 0.5*r12*sqrt(std::max(0.0 , 4 - r12*r12));
19 }
20 
21 // Area of intersection of three unit-radius disks with centers separated by r12, r23, r13.
22 inline double intersection(double r12, double r23, double r13)
23 {
24  if (r12 >= 2 || r23 >= 2 || r13 >= 2) return 0;
25  const double r12_2 = r12*r12;
26  const double r13_2 = r13*r13;
27  const double temp = (r12_2 + r13_2 - r23*r23);
28  const double T2 = std::max(0.0 , 4*r12_2*r13_2 - temp*temp);
29  const double common = 0.5*( intersection(r12) + intersection(r13) + intersection(r23) - M_PI + 0.5*sqrt(T2) );
30  return common;
31 }
32 inline double intersection(double r12, double r23, double r13, double a12, double a23, double a13)
33 {
34  if (r12 >= 2 || r23 >= 2 || r13 >= 2) return 0;
35  const double r12_2 = r12*r12;
36  const double r13_2 = r13*r13;
37  const double temp = (r12_2 + r13_2 - r23*r23);
38  const double T2 = std::max(0.0 , 4*r12_2*r13_2 - temp*temp);
39  const double common = 0.5*( a12 + a13 + a23 - M_PI + 0.5*sqrt(T2) );
40  return common;
41 }
42 
43  }
44  }
45 }
46 #endif
T sqrt(T t)
Definition: SSEVec.h:18
#define M_PI