Sphericity.hh
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #ifndef RIVET_Sphericity_HH 00003 #define RIVET_Sphericity_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Projections/AxesDefinition.hh" 00007 #include "Rivet/Projections/FinalState.hh" 00008 #include "Rivet/Event.hh" 00009 00010 00011 namespace Rivet { 00012 00013 /** 00014 @brief Calculate the sphericity event shape. 00015 00016 The sphericity tensor (or quadratic momentum tensor) is defined as 00017 \f[ 00018 S^{\alpha \beta} = \frac{\sum_i p_i^\alpha p_i^\beta}{\sum_i |\mathbf{p}_i|^2} 00019 \f], 00020 where the Greek indices are spatial components and the Latin indices are used 00021 for sums over particles. From this, the sphericity, aplanarity and planarity can be 00022 calculated by combinations of eigenvalues. 00023 00024 Defining the three eigenvalues 00025 \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$, 00026 the sphericity is 00027 \f[ 00028 S = \frac{3}{2} (\lambda_2 + \lambda_3) 00029 \f] 00030 00031 The aplanarity is \f$ A = \frac{3}{2}\lambda_3 \f$ and the planarity 00032 is \f$ P = \frac{2}{3}(S-2A) = \lambda_2 - \lambda_3 \f$. The eigenvectors define a 00033 set of spatial axes comparable with the thrust axes, but more sensitive to 00034 high momentum particles due to the quadratic sensitivity of the tensor to 00035 the particle momenta. 00036 00037 Since the sphericity is quadratic in the particle momenta, it is not an 00038 infrared safe observable in perturbative QCD. This can be fixed by adding 00039 a regularizing power of \f$r\f$ to the definition: 00040 \f[ 00041 S^{\alpha \beta} = 00042 \frac{\sum_i |\mathbf{p}_i|^{r-2} p_i^\alpha p_i^\beta} 00043 {\sum_i |\mathbf{p}_i|^r} 00044 \f] 00045 00046 \f$r\f$ is available as a constructor argument on this class and will be 00047 taken into account by the Cmp<Projection> operation, so a single analysis 00048 can use several sphericity projections with different \f$r\f$ values without 00049 fear of a clash. 00050 */ 00051 class Sphericity : public AxesDefinition { 00052 00053 public: 00054 00055 /// @name Constructors etc. 00056 //@{ 00057 00058 /// Constructor 00059 Sphericity(double rparam=2.0): _regparam(rparam){} 00060 00061 Sphericity(const FinalState& fsp, double rparam=2.0); 00062 00063 /// Clone on the heap. 00064 virtual const Projection* clone() const { 00065 return new Sphericity(*this); 00066 } 00067 00068 //@} 00069 00070 00071 protected: 00072 00073 /// Perform the projection on the Event 00074 void project(const Event& e); 00075 00076 /// Compare with other projections 00077 int compare(const Projection& p) const; 00078 00079 public: 00080 00081 /// Reset the projection 00082 void clear(); 00083 00084 /// @name Access the event shapes by name 00085 /// @{ 00086 /// Sphericity 00087 double sphericity() const { return 3.0 / 2.0 * (lambda2() + lambda3()); } 00088 /// Transverse Sphericity 00089 double transSphericity() const { return 2.0 * lambda2() / ( lambda1() + lambda2() ); } 00090 /// Planarity 00091 double planarity() const { return 2 * (sphericity() - 2 * aplanarity()) / 3.0; } 00092 /// Aplanarity 00093 double aplanarity() const { return 3 / 2.0 * lambda3(); } 00094 /// @} 00095 00096 /// @name Access the sphericity basis vectors 00097 /// @{ 00098 /// Sphericity axis 00099 const Vector3& sphericityAxis() const { return _sphAxes[0]; } 00100 /// Sphericity major axis 00101 const Vector3& sphericityMajorAxis() const { return _sphAxes[1]; } 00102 /// Sphericity minor axis 00103 const Vector3& sphericityMinorAxis() const { return _sphAxes[2]; } 00104 /// @} 00105 00106 ///@{ AxesDefinition axis accessors. 00107 const Vector3& axis1() const { return sphericityAxis(); } 00108 const Vector3& axis2() const { return sphericityMajorAxis(); } 00109 const Vector3& axis3() const { return sphericityMinorAxis(); } 00110 ///@} 00111 00112 00113 /// @name Access the momentum tensor eigenvalues 00114 /// @{ 00115 double lambda1() const { return _lambdas[0]; } 00116 double lambda2() const { return _lambdas[1]; } 00117 double lambda3() const { return _lambdas[2]; } 00118 /// @} 00119 00120 00121 /// @name Direct methods 00122 /// Ways to do the calculation directly, without engaging the caching system 00123 //@{ 00124 00125 /// Manually calculate the sphericity, without engaging the caching system 00126 void calc(const FinalState& fs); 00127 00128 /// Manually calculate the sphericity, without engaging the caching system 00129 void calc(const vector<Particle>& fsparticles); 00130 00131 /// Manually calculate the sphericity, without engaging the caching system 00132 void calc(const vector<FourMomentum>& fsmomenta); 00133 00134 /// Manually calculate the sphericity, without engaging the caching system 00135 void calc(const vector<Vector3>& fsmomenta); 00136 00137 //@} 00138 00139 00140 00141 private: 00142 /// Eigenvalues. 00143 vector<double> _lambdas; 00144 00145 /// Sphericity axes. 00146 vector<Vector3> _sphAxes; 00147 00148 /// Regularizing parameter, used to force infra-red safety. 00149 const double _regparam; 00150 00151 private: 00152 00153 /// Actually do the calculation 00154 void _calcSphericity(const vector<Vector3>& fsmomenta); 00155 00156 }; 00157 00158 } 00159 00160 00161 #endif Generated on Thu Feb 6 2014 17:38:46 for The Rivet MC analysis system by 1.7.6.1 |