rivet is hosted by Hepforge, IPPP Durham
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 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