source: HiSusy/trunk/Delphes/Delphes-3.0.9/external/fastjet/plugins/D0RunIICone/ProtoJet.hpp @ 5

Last change on this file since 5 was 5, checked in by zerwas, 11 years ago

update to Delphes-3.0.9

File size: 5.7 KB
Line 
1#ifndef  D0RunIIconeJets_PROTOJET
2#define  D0RunIIconeJets_PROTOJET
3// ---------------------------------------------------------------------------
4// ProtoJet.hpp
5//
6// Created: 28-JUL-2000 Francois Touze (+ Laurent Duflot)
7//
8// Purpose: Implements a proto-jet object that is used as input by the
9//   Improved Legacy Cone Algorithm split/merge algo.
10//
11// Modified:
12//    9-Aug-2000  Laurent Duflot
13//     + save the initial stable cone ET before split/merge
14//    1-May-2007 Lars Sonnenschein
15//    extracted from D0 software framework and modified to remove subsequent dependencies
16//
17//
18// This file is distributed with FastJet under the terms of the GNU
19// General Public License (v2). Permission to do so has been granted
20// by Lars Sonnenschein and the D0 collaboration (see COPYING for
21// details)
22//
23// History of changes in FastJet compared tothe original version of
24// ProtoJet.hpp
25//
26// 2011-12-13  Gregory Soyez  <soyez@fastjet.fr>
27//
28//        * added license information
29//
30// 2011-11-14  Gregory Soyez  <soyez@fastjet.fr>
31//
32//        * changed the name of a few parameters to avoid a gcc
33//          -Wshadow warning
34//
35// 2009-01-17  Gregory Soyez  <soyez@fastjet.fr>
36//
37//        * put the code in the fastjet::d0 namespace
38//
39// 2007-12-14  Gavin Salam  <salam@lpthe.jussieu.fr>
40//
41//        * replaced make_pair by std::make_pair
42//
43// ---------------------------------------------------------------------------
44 
45//#include "kinem_util/AnglesUtil.hpp"
46//#include "energycluster/ConeJetInfo.hpp"
47#include "ConeJetInfo.hpp"
48#include <list>
49#include <cmath>
50
51#include "inline_maths.h" //ls
52
53#include <fastjet/internal/base.hh>
54
55FASTJET_BEGIN_NAMESPACE
56
57namespace d0{
58
59using namespace inline_maths;
60using namespace D0RunIIconeJets_CONEJETINFO;
61
62
63inline float RD2(float y1,float phi1,float y2,float phi2) 
64{
65  float dphi= delta_phi(phi1,phi2);
66  return (y1-y2)*(y1-y2)+dphi*dphi; 
67}
68
69inline float RDelta(float y1,float phi1,float y2,float phi2) 
70{
71  float dphi= delta_phi(phi1,phi2);
72  return sqrt((y1-y2)*(y1-y2)+dphi*dphi); 
73}
74
75inline float P2y(float* p4vec) {
76  return y(p4vec[3],p4vec[2]);
77}
78
79inline float P2phi(float* p4vec) {
80  return phi(p4vec[0],p4vec[1]);
81}
82
83///////////////////////////////////////////////////////////////////////////////
84template <class Item>
85class ProtoJet {
86
87public :
88
89  ProtoJet(float seedET);
90  ProtoJet(float seedET,float y,float phi);
91  ProtoJet(const ProtoJet<Item>& pj);
92  ~ProtoJet() {;}
93
94  void addItem(const Item* tw); 
95  void setJet(float y,float phi,float pT); 
96  void updateJet();
97  void erase();
98
99  float y() const; 
100  float phi() const;
101  float pT() const;
102  const ConeJetInfo & info() const;
103  const std::list<const Item*>& LItems() const;
104
105  void print(std::ostream &os) const;
106
107  // actions to be taken when the jet is a stable cone
108  void NowStable();
109  // declare the jet to have been splitted
110  void splitted(){_info.splitted();};
111  // declare the jet to have been merged
112  void merged(){_info.merged();};
113protected :
114
115  std::list<const Item*> _LItems;
116  float _y;
117  float _phi;
118  float _pT;
119  ConeJetInfo _info;
120
121};
122///////////////////////////////////////////////////////////////////////////////
123template<class Item>
124ProtoJet<Item>::ProtoJet(float seedET) : _LItems(), _info(seedET) {
125    _y  = 0.0;
126    _phi= 0.0;
127    _pT = 0.0;
128}
129
130template<class Item>
131ProtoJet<Item>::ProtoJet(float seedET,float y_in,float phi_in) :  _LItems(), _info(seedET) { 
132  _y  = y_in; 
133  _phi= phi_in;
134  _pT = 0.0;
135}
136
137template<class Item>
138ProtoJet<Item>::ProtoJet(const ProtoJet<Item>& pj): _y(pj._y), 
139                                                    _phi(pj._phi), _pT(pj._pT),
140                                                    _info(pj._info)
141{ 
142  typename std::list<const Item*>::const_iterator it;
143  for(it = pj._LItems.begin(); it != pj._LItems.end(); ++it) { 
144    _LItems.push_back(*it);
145  }
146}
147
148template<class Item>
149void ProtoJet<Item>::addItem(const Item* tw) {
150  _LItems.push_back(tw);
151}
152
153template<class Item>
154void ProtoJet<Item>::setJet(float y_in,float phi_in,float pT_in) {
155  _y  = y_in;
156  _phi= phi_in;
157  _pT = pT_in;
158}
159
160template<class Item>
161void ProtoJet<Item>::updateJet() { 
162  //float ETsum = 0.0;
163  //float ysum  = 0.0;
164  //float PHIsum= 0.0;
165  float p[4] = {0.,0.,0.,0.};
166  typename std::list<const Item*>::iterator it;
167  for(it = _LItems.begin(); it != _LItems.end(); ++it) 
168  {
169    float pk[4];
170    (*it)->p4vec(pk);
171    //cout << "updateJet: px=" << pk[0] << " py=" << pk[1] << " pz=" << pk[2] << " E=" << pk[3] << endl;
172    for ( int i = 0; i < 4 ; ++i) p[i] += pk[i];
173  }
174  _y = P2y(p);
175  _phi = P2phi(p);
176  _pT = sqrt(p[0]*p[0] + p[1]*p[1]);
177  if ( p[3] < 0. ) _pT = - _pT;
178
179}
180
181template<class Item>
182void ProtoJet<Item>::erase() {
183  _LItems.erase(_LItems.begin(),_LItems.end());
184  _y  = 0.0;
185  _phi= 0.0;
186  _pT = 0.0; 
187  // _info is not modified in order to keep split/merge history
188}
189
190// actions to be taken when the jet is a stable cone
191template<class Item>
192void ProtoJet<Item>::NowStable() {
193  _info.initialET(_pT);
194}
195
196template<class Item>
197void ProtoJet<Item>::print(std::ostream& os) const {
198  os<<"y phi Et = ("<<_y<<", "<<_phi<<", "<<this->_Et<<")"<<std::endl;
199  os<< " members= " << std::endl;
200  typename std::list<const Item*>::const_iterator i;
201  for(i = _LItems.begin(); i != _LItems.end(); ++i)
202    (*i)->print(os);
203  os << std::endl;
204}
205
206template<class Item>
207inline float ProtoJet<Item>::y() const{
208  return _y;
209}
210
211template<class Item>
212inline float ProtoJet<Item>::phi() const{
213  return _phi;
214}
215
216template<class Item>
217inline float ProtoJet<Item>::pT() const{
218  return _pT;
219}
220template<class Item>
221inline const ConeJetInfo & ProtoJet<Item>::info() const{
222  return _info;
223}
224
225template<class Item>   
226inline const std::list<const Item*>& ProtoJet<Item>::LItems() const{
227  return _LItems;
228}
229///////////////////////////////////////////////////////////////////////////////
230
231}  // namespace d0
232
233FASTJET_END_NAMESPACE
234
235#endif
Note: See TracBrowser for help on using the repository browser.