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   /// @brief Calculate the Parisi event shape tensor (or linear momentum tensor).
00014   ///
00015   /// The Parisi event shape C and D variables are derived from the eigenvalues of
00016   /// the linear momentum tensor
00017   /// \f[
00018   /// \theta^{\alpha \beta} =
00019   /// \frac{\sum_i \frac{p_i^\alpha p_i^\beta}{|\mathbf{p}_i|}}
00020   ///      {\sum_i |\mathbf{p}_i|}
00021   /// \f]
00022   /// which is actually a linearized (and hence infra-red safe) version of the
00023   /// {@link Sphericity} tensor.
00024   ///
00025   /// Defining the three eigenvalues of \f$\theta\f$
00026   /// \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$,
00027   /// the C and D parameters are defined as
00028   /// \f[
00029   /// C = 3(\lambda_1\lambda_2 + \lambda_1\lambda_3 + \lambda_2\lambda_3)
00030   /// \f]
00031   /// and
00032   /// \f[
00033   /// D = 27 \lambda_1\lambda_2\lambda_3
00034   /// \f]
00035   ///
00036   /// Internally, this Projection uses the Sphericity projection with the generalising
00037   /// \f$r\f$ parameter set to 1.
00038   ///
00039   class ParisiTensor : public Projection {
00040   public:
00041 
00042     /// Constructor. The provided FinalState projection must live throughout the run.
00043     ParisiTensor(const FinalState& fsp)
00044     {
00045       setName("ParisiTensor");
00046       addProjection(fsp, "FS");
00047       addProjection(Sphericity(fsp, 1.0), "Sphericity");
00048       clear();
00049     }
00050 
00051     /// Clone on the heap.
00052     DEFAULT_RIVET_PROJ_CLONE(ParisiTensor);
00053 
00054 
00055   protected:
00056 
00057     /// Perform the projection on the Event.
00058     void project(const Event& e);
00059 
00060     /// Compare with other projections.
00061     int compare(const Projection& p) const;
00062 
00063 
00064   public:
00065 
00066     /// Clear the projection.
00067     void clear();
00068 
00069 
00070   public:
00071 
00072     /// @name Access the C and D params.
00073     ///@{
00074     double C() const { return _C; }
00075     double D() const { return _D; }
00076     ///@}
00077 
00078     /// @name Access the eigenvalues of \f$\theta\f$.
00079     ///@{
00080     double lambda1() const { return _lambda[0]; }
00081     double lambda2() const { return _lambda[1]; }
00082     double lambda3() const { return _lambda[2]; }
00083     ///@}
00084 
00085 
00086   private:
00087 
00088     /// The Parisi event shape variables.
00089     double _C, _D;
00090 
00091     /// Eigenvalues.
00092     double _lambda[3];
00093 
00094   };
00095 
00096 
00097 }
00098 
00099 
00100 #endif