00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __SISCONE_PARTON_FOURVECTOR_H__
00027 #define __SISCONE_PARTON_FOURVECTOR_H__
00028
00029 #include <cmath>
00030
00036 class fourvector {
00037
00038
00039 public :
00040 fourvector(void);
00041 fourvector(double t, double x, double y, double z);
00042
00043
00044 public :
00045 fourvector & sum_up(const fourvector & v);
00046 fourvector & rescale(double c);
00047
00048 double transverse_momentum(void) const;
00049 double rapidity(void) const;
00050 double azimuthal_angle(void) const;
00051
00052 double spatial_norm(void) const;
00053 double spatial_scalar_product(const fourvector & q) const;
00054 double energy_component(void) const;
00055
00056
00057 protected :
00058 double t;
00059 double x;
00060 double y;
00061 double z;
00062 };
00063
00064
00065
00071 inline fourvector::fourvector(void) : t(0.0), x(0.0), y(0.0), z(0.0)
00072 {}
00073
00079 inline fourvector::fourvector(double tt, double xx, double yy, double zz) :
00080 t(tt), x(xx), y(yy), z(zz)
00081 {}
00082
00088 inline fourvector & fourvector::sum_up(const fourvector & v)
00089 {
00090 t += v.t;
00091 x += v.x;
00092 y += v.y;
00093 z += v.z;
00094
00095 return *this;
00096 }
00097
00103 inline fourvector & fourvector::rescale(double c)
00104 {
00105 t *= c;
00106 x *= c;
00107 y *= c;
00108 z *= c;
00109
00110 return *this;
00111 }
00112
00119 inline double fourvector::transverse_momentum(void) const
00120 {
00121
00122 double temp = x*x + y*y;
00123 if (temp>0) return sqrt(temp);
00124 return(0.0);
00125 }
00126
00133 inline double fourvector::rapidity(void) const
00134 {
00135
00136 return 0.5*log( (t+z)/(t-z) );
00137 }
00138
00144 inline double fourvector::azimuthal_angle(void) const
00145 {
00146
00147 return atan2(y,x);
00148 }
00149
00158 inline double fourvector::spatial_norm(void) const
00159 {
00160 return x*x + y*y + z*z;
00161 }
00162
00171 inline double fourvector::spatial_scalar_product(const fourvector & q) const
00172 {
00173 return x*q.x + y*q.y + z*q.z;
00174 }
00175
00181 inline double fourvector::energy_component(void) const
00182 {
00183 return t;
00184 }
00185
00186 #endif // ndef __SISCONE_PARTON_FOURVECTOR_H__
00187