1#ifndef D0RunIIconeJets_PROTOJET
2#define D0RunIIconeJets_PROTOJET
47#include "ConeJetInfo.hpp"
51#include "inline_maths.h"
53#include <fastjet/internal/base.hh>
55FASTJET_BEGIN_NAMESPACE
59using namespace inline_maths;
60using namespace D0RunIIconeJets_CONEJETINFO;
63inline float RD2(
float y1,
float phi1,
float y2,
float phi2)
65 float dphi= delta_phi(phi1,phi2);
66 return (y1-y2)*(y1-y2)+dphi*dphi;
69inline float RDelta(
float y1,
float phi1,
float y2,
float phi2)
71 float dphi= delta_phi(phi1,phi2);
72 return sqrt((y1-y2)*(y1-y2)+dphi*dphi);
75inline float P2y(
float* p4vec) {
76 return y(p4vec[3],p4vec[2]);
79inline float P2phi(
float* p4vec) {
80 return phi(p4vec[0],p4vec[1]);
89 ProtoJet(
float seedET);
90 ProtoJet(
float seedET,
float y,
float phi);
91 ProtoJet(
const ProtoJet<Item>& pj);
94 void addItem(
const Item* tw);
95 void setJet(
float y,
float phi,
float pT);
102 const ConeJetInfo & info()
const;
103 const std::list<const Item*>& LItems()
const;
105 void print(std::ostream &os)
const;
110 void splitted(){_info.splitted();};
112 void merged(){_info.merged();};
115 std::list<const Item*> _LItems;
124ProtoJet<Item>::ProtoJet(
float seedET) : _LItems(), _info(seedET) {
131ProtoJet<Item>::ProtoJet(
float seedET,
float y_in,
float phi_in) : _LItems(), _info(seedET) {
138ProtoJet<Item>::ProtoJet(
const ProtoJet<Item>& pj): _y(pj._y),
139 _phi(pj._phi), _pT(pj._pT),
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);
149void ProtoJet<Item>::addItem(
const Item* tw) {
150 _LItems.push_back(tw);
154void ProtoJet<Item>::setJet(
float y_in,
float phi_in,
float pT_in) {
161void ProtoJet<Item>::updateJet() {
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)
172 for (
int i = 0; i < 4 ; ++i) p[i] += pk[i];
176 _pT = sqrt(p[0]*p[0] + p[1]*p[1]);
177 if ( p[3] < 0. ) _pT = - _pT;
182void ProtoJet<Item>::erase() {
183 _LItems.erase(_LItems.begin(),_LItems.end());
192void ProtoJet<Item>::NowStable() {
193 _info.initialET(_pT);
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)
207inline float ProtoJet<Item>::y()
const{
212inline float ProtoJet<Item>::phi()
const{
217inline float ProtoJet<Item>::pT()
const{
221inline const ConeJetInfo & ProtoJet<Item>::info()
const{
226inline const std::list<const Item*>& ProtoJet<Item>::LItems()
const{