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

ParisiTensor.hh

Go to the documentation of this file.
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 
00011 namespace Rivet {
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 
00042   public:
00043 
00044     /// Constructor. The provided FinalState projection must live throughout the run.
00045     inline ParisiTensor(FinalState& fsp)
00046       : _C(0), _D(0), _sphproj(Sphericity(fsp, 1.0))
00047     { 
00048       addProjection(_sphproj);
00049     }
00050 
00051   public:
00052     /// Return the name of the projection
00053     inline string getName() const {
00054       return "ParisiTensor";
00055     }
00056 
00057   protected:
00058 
00059     /// Perform the projection on the Event.
00060     void project(const Event& e);
00061 
00062     /// Compare with other projections.
00063     int compare(const Projection& p) const;
00064 
00065   public:
00066 
00067     /// @name Access the C and D params.
00068     ///@{
00069     inline const double C() const { return _C; }
00070     inline const double D() const { return _D; }
00071     ///@}
00072 
00073     /// @name Access the eigenvalues of \f$\theta\f$.
00074     ///@{
00075     inline const double lambda1() const { return _lambda[0]; }
00076     inline const double lambda2() const { return _lambda[1]; }
00077     inline const double lambda3() const { return _lambda[2]; }
00078     ///@}
00079         
00080   private:
00081     
00082     /// The Parisi event shape variables.
00083     double _C, _D;
00084 
00085     /// Eigenvalues.
00086     double _lambda[3];
00087 
00088     /// The Sphericity projection for which this projection is really just a wrapper.
00089     Sphericity _sphproj;
00090 
00091   };
00092 
00093 }
00094 
00095 
00096 #endif