00001
00002
00003 #ifndef StProtoJet_HH
00004 #define StProtoJet_HH
00005
00006 #include "AbstractFourVec.h"
00007
00008 #include <iostream>
00009 #include <vector>
00010 #include <cmath>
00011
00012
00020 class StProtoJet {
00021
00022 public:
00023
00024 typedef std::vector<const AbstractFourVec*> FourVecList;
00025
00026 StProtoJet();
00027 StProtoJet(const AbstractFourVec* particle);
00028 virtual ~StProtoJet();
00029
00030 unsigned int numberOfParticles() const {return _particleList.size();}
00031 unsigned int size() const {return _particleList.size();}
00032 const FourVecList& list() const {return _particleList;}
00033
00035 double d() const {return eT()*eT();}
00036
00037 void merge(const StProtoJet& protoJet);
00038
00039 void add(const StProtoJet& protoJet);
00040 void add(const AbstractFourVec& particle);
00041
00042 void update();
00043
00044 void clear();
00045
00046 friend std::ostream& operator<<(std::ostream& os, const StProtoJet& j);
00047
00048
00049 double pt() const { return ::sqrt(mPx*mPx + mPy*mPy); }
00050 double px() const { return mPx; }
00051 double py() const { return mPy; }
00052 double pz() const { return mPz; }
00053
00054
00055 double phi() const { return atan2(mPy, mPx); }
00056 double eta() const
00057 {
00058 double arg = tan(theta()/2.);
00059 return (arg > 0) ? -::log(arg) : -999;
00060 }
00061
00062
00063 double e() const { return fabs(mE); }
00064 double eT() const
00065 {
00066 if(p() == 0.0) return 0.0;
00067 return ::sqrt(e()*e()*pt()*pt()/(p()*p()));
00068 }
00069 double mass() const { return ::sqrt(fabs(mE*mE - p()*p() ) ); }
00070
00071
00072 double charge() const { return _charge; }
00073
00074 private:
00075
00076 double p() const { return ::sqrt(mPx*mPx + mPy*mPy + mPz*mPz); }
00077 double theta() const { return acos( mPz/p()); }
00078
00079 FourVecList _particleList;
00080
00081
00082 double mPx;
00083 double mPy;
00084 double mPz;
00085 double mE;
00086
00087 double _charge;
00088
00089 };
00090
00091
00092 inline std::ostream& operator<<(std::ostream& os, const StProtoJet& j)
00093 {
00094 os <<"et: "<<j.eT()<<"\tphi: "<<j.phi()<<"\teta: "<<j.eta()
00095 <<"\tmass: "<<j.mass()<<"\tcharge: "<<j.charge()<<"\tParticles"<< std::endl;
00096 for (StProtoJet::FourVecList::const_iterator it=j._particleList.begin(); it!=j._particleList.end(); ++it) {
00097 os << **it << std::endl;
00098 }
00099 return os;
00100 }
00101
00102 #endif
00103