FastJet  3.2.1
HepEntityI.h
1 #ifndef D0RunIconeJets_HepEntity_class
2 #define D0RunIconeJets_HepEntity_class
3 
4 #include "inline_maths.h"
5 #include <fastjet/internal/base.hh>
6 
7 FASTJET_BEGIN_NAMESPACE
8 
9 namespace d0runi{
10 
11 //Author: Lars Sonnenschein 15/Sep/2009
12 //This is an example class fulfilling the minimal requirements needed by the
13 //D0 RunI cone jet algorithm implementation, which is an inlined template class
14 
15 // This file is distributed with FastJet under the terms of the GNU
16 // General Public License (v2). Permission to do so has been granted
17 // by Lars Sonnenschein and the D0 collaboration (see COPYING for
18 // details)
19 //
20 // History of changes in FastJet compared tothe original version of
21 // HepEntity.h
22 //
23 // 2011-12-13 Gregory Soyez <soyez@fastjet.fr>
24 //
25 // * added license information
26 //
27 // 2011-11-14 Gregory Soyez <soyez@fastjet.fr>
28 //
29 // * removed some harmless warnings coming with the -Wshadow gcc option
30 //
31 // 2011-10-06 Gregory Soyez <soyez@fastjet.fr>
32 //
33 // * put the code in the fastjet::d0runi namespace
34 
35 class HepEntityI {
36 
37  public:
38 
39  HepEntityI() {
40  Et=0.;
41  eta=0.;
42  phi=0.;
43  index = -1;
44  return;
45  }
46 
47 
48  HepEntityI(double E_in, double px_in, double py_in, double pz_in,
49  int index_in = -1) : index(index_in) {
50  //Snowmass Et scheme
51  double pt = sqrt(px_in*px_in+py_in*py_in);
52  double p = sqrt(pt*pt+pz_in*pz_in);
53  phi = inline_maths::phi(px_in,py_in);
54  double theta = asin(pt/p);
55  eta = inline_maths::eta(theta);
56 
57  Et = E_in*sin(theta);
58 
59  return;
60  }
61 
62 
63 
64  HepEntityI(const HepEntityI& in) : Et(in.Et), eta(in.eta), phi(in.phi), index(in.index) {
65  return;
66  }
67 
68 
69 
70 
71  inline double pT() const {
72  return Et;
73  }
74 
75  inline double px() const {
76  return Et*cos(phi);
77  }
78 
79  inline double py() const {
80  return Et*sin(phi);
81  }
82 
83  inline double pz() const {
84  return Et*sinh(eta);
85  }
86 
87  inline double E() const {
88  return Et*cosh(eta);
89  }
90 
91 
92  inline void p4vec(float* p) const {
93  p[0] = Et*cos(phi);
94  p[1] = Et*sin(phi);
95  p[2] = Et*sinh(eta);
96  p[3] = Et*cosh(eta); //E
97  return;
98  }
99 
100 
101  inline void Add(const HepEntityI el) {
102  //assumes Et, eta and phi stored accurately
103  double w2 = el.Et;
104  Et += el.Et;
105  w2 /= Et;
106 
107  eta += w2*(el.eta - eta);
108  phi += w2*inline_maths::delta_phi(el.phi, phi);
109 
110  return;
111  }
112 
113 
114  inline void Fill(double E_in, double px_in, double py_in, double pz_in, int index_in) {
115  double pt = sqrt(px_in*px_in+py_in*py_in);
116  double p = sqrt(pt*pt+pz_in*pz_in);
117  phi = inline_maths::phi(px_in,py_in);
118  double theta = asin(pt/p);
119  eta = inline_maths::eta(theta);
120 
121  Et = E_in*sin(theta);
122 
123  index = index_in;
124 
125  return;
126  }
127 
128 
129  double Et;
130  double eta;
131  double phi;
132  int index;
133 
134  private:
135 
136 
137 
138 };
139 //end of class HepEntityI;
140 
141 } // end of namespace d0runi
142 
143 FASTJET_END_NAMESPACE
144 
145 #endif