00001 // -*- C++ -*- 00002 #ifndef RIVET_Sphericity_HH 00003 #define RIVET_Sphericity_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Projections/FinalState.hh" 00007 #include "Rivet/Event.hh" 00008 #include "Rivet/RivetCLHEP.hh" 00009 00010 namespace Rivet { 00011 00012 /** 00013 @brief Calculate the sphericity event shape. 00014 00015 The sphericity tensor (or quadratic momentum tensor) is defined as 00016 \f[ 00017 S^{\alpha \beta} = \frac{\sum_i p_i^\alpha p_i^\beta}{\sum_i |\mathbf{p}_i|^2} 00018 \f], 00019 where the Greek indices are spatial components and the Latin indices are used 00020 for sums over particles. From this, the sphericity, aplanarity and planarity can be 00021 calculated by combinations of eigenvalues. 00022 00023 Defining the three eigenvalues 00024 \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$, 00025 the sphericity is 00026 \f[ 00027 S = \frac{3}{2} (\lambda_2 + \lambda_3) 00028 \f] 00029 00030 The aplanarity is \f$ A = \frac{3}{2}\lambda_3 \f$ and the planarity 00031 is \f$ P = \frac{2}{3}(S-2A) = \lambda_2 - \lambda_3 \f$. The eigenvectors define a 00032 set of spatial axes comparable with the thrust axes, but more sensitive to 00033 high momentum particles due to the quadratic sensitivity of the tensor to 00034 the particle momenta. 00035 00036 Since the sphericity is quadratic in the particle momenta, it is not an 00037 infrared safe observable in perturbative QCD. This can be fixed by adding 00038 a regularizing power of \f$r\f$ to the definition: 00039 \f[ 00040 S^{\alpha \beta} = 00041 \frac{\sum_i |\mathbf{p}_i|^{r-2} p_i^\alpha p_i^\beta} 00042 {\sum_i |\mathbf{p}_i|^r} 00043 \f] 00044 00045 \f$r\f$ is available as a constructor argument on this class and will be 00046 taken into account by the Cmp<Projection> operation, so a single analysis 00047 can use several sphericity projections with different \f$r\f$ values without 00048 fear of a clash. 00049 */ 00050 class Sphericity : public Projection { 00051 00052 public: 00053 00054 /// Constructor. Supplied FinalState projection must live throughout the run. 00055 inline Sphericity(FinalState& fsp, double rparam=2.0) 00056 : _sphericity(0), _planarity(0), _aplanarity(0), _regparam(rparam), 00057 _fsproj(&fsp) 00058 { 00059 addProjection(fsp); 00060 } 00061 00062 public: 00063 /// Return the name of the projection 00064 inline string getName() const { 00065 return "Sphericity"; 00066 } 00067 00068 protected: 00069 00070 /// Perform the projection on the Event 00071 void project(const Event& e); 00072 00073 /// Compare with other projections 00074 int compare(const Projection& p) const; 00075 00076 public: 00077 00078 ///@{ Access the event shapes by name 00079 /// Sphericity 00080 inline const double sphericity() const { return _sphericity; } 00081 /// Planarity 00082 inline const double planarity() const { return _planarity; } 00083 /// Aplanarity 00084 inline const double aplanarity() const { return _aplanarity; } 00085 ///@} 00086 00087 ///@{ Access the sphericity basis vectors 00088 /// Sphericity axis 00089 /// @todo Implement something that isn't garbage! 00090 inline const Vector3 sphericityAxis() const { return Vector3(0,0,1); } 00091 /// Sphericity major axis 00092 /// @todo Implement something that isn't garbage! 00093 inline const Vector3 sphericityMajorAxis() const { return Vector3(1,0,0); } 00094 /// Sphericity minor axis 00095 /// @todo Implement something that isn't garbage! 00096 inline const Vector3 sphericityMinorAxis() const { return Vector3(0,1,0); } 00097 ///@} 00098 00099 ///@{ Access the momentum tensor eigenvalues 00100 inline const double lambda1() const { return _lambdas[0]; } 00101 inline const double lambda2() const { return _lambdas[1]; } 00102 inline const double lambda3() const { return _lambdas[2]; } 00103 ///@} 00104 00105 private: 00106 00107 /// Eigenvalues 00108 double _lambdas[3]; 00109 00110 /// The event shapes 00111 double _sphericity, _planarity, _aplanarity; 00112 00113 /// Regularizing parameter, used to force infra-red safety. 00114 const double _regparam; 00115 00116 /// The FinalState projection used by this projection. 00117 FinalState* _fsproj; 00118 00119 }; 00120 00121 } 00122 00123 00124 #endif