00001 // -*- C++ -*- 00002 #ifndef RIVET_ParisiTensor_HH 00003 #define RIVET_ParisiTensor_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Projections/FinalState.hh" 00007 #include "Rivet/Projections/Sphericity.hh" 00008 #include "Rivet/Event.hh" 00009 00010 namespace Rivet { 00011 00012 00013 /** 00014 @brief Calculate the Parisi event shape tensor (or linear momentum tensor). 00015 00016 The Parisi event shape C and D variables are derived from the eigenvalues of 00017 the linear momentum tensor 00018 \f[ 00019 \theta^{\alpha \beta} = 00020 \frac{\sum_i \frac{p_i^\alpha p_i^\beta}{|\mathbf{p}_i|}} 00021 {\sum_i |\mathbf{p}_i|} 00022 \f] 00023 which is actually a linearized (and hence infra-red safe) version of the 00024 {@link Sphericity} tensor. 00025 00026 Defining the three eigenvalues of \f$\theta\f$ 00027 \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$, 00028 the C and D parameters are defined as 00029 \f[ 00030 C = 3(\lambda_1\lambda_2 + \lambda_1\lambda_3 + \lambda_2\lambda_3) 00031 \f] 00032 and 00033 \f[ 00034 D = 27 \lambda_1\lambda_2\lambda_3 00035 \f] 00036 00037 Internally, this Projection uses the Sphericity projection with the generalising 00038 \f$r\f$ parameter set to 1. 00039 */ 00040 class ParisiTensor : public Projection { 00041 public: 00042 00043 /// Constructor. The provided FinalState projection must live throughout the run. 00044 ParisiTensor(const FinalState& fsp) 00045 { 00046 setName("ParisiTensor"); 00047 addProjection(fsp, "FS"); 00048 addProjection(Sphericity(fsp, 1.0), "Sphericity"); 00049 clear(); 00050 } 00051 00052 /// Clone on the heap. 00053 virtual const Projection* clone() const { 00054 return new ParisiTensor(*this); 00055 } 00056 00057 00058 protected: 00059 00060 /// Perform the projection on the Event. 00061 void project(const Event& e); 00062 00063 /// Compare with other projections. 00064 int compare(const Projection& p) const; 00065 00066 00067 public: 00068 00069 /// Clear the projection. 00070 void clear(); 00071 00072 00073 public: 00074 00075 /// @name Access the C and D params. 00076 ///@{ 00077 double C() const { return _C; } 00078 double D() const { return _D; } 00079 ///@} 00080 00081 /// @name Access the eigenvalues of \f$\theta\f$. 00082 ///@{ 00083 double lambda1() const { return _lambda[0]; } 00084 double lambda2() const { return _lambda[1]; } 00085 double lambda3() const { return _lambda[2]; } 00086 ///@} 00087 00088 00089 private: 00090 00091 /// The Parisi event shape variables. 00092 double _C, _D; 00093 00094 /// Eigenvalues. 00095 double _lambda[3]; 00096 00097 }; 00098 00099 00100 } 00101 00102 00103 #endif