Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

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/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