Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-05-12 09:05:03

0001 // -*- C++ -*-
0002 #ifndef RIVET_ParisiTensor_HH
0003 #define RIVET_ParisiTensor_HH
0004 
0005 #include "Rivet/Projection.hh"
0006 #include "Rivet/Projections/FinalState.hh"
0007 #include "Rivet/Projections/Sphericity.hh"
0008 #include "Rivet/Event.hh"
0009 
0010 namespace Rivet {
0011 
0012 
0013   /// @brief Calculate the Parisi event shape tensor (or linear momentum tensor).
0014   ///
0015   /// The Parisi event shape C and D variables are derived from the eigenvalues of
0016   /// the linear momentum tensor
0017   /// \f[
0018   /// \theta^{\alpha \beta} =
0019   /// \frac{\sum_i \frac{p_i^\alpha p_i^\beta}{|\mathbf{p}_i|}}
0020   ///      {\sum_i |\mathbf{p}_i|}
0021   /// \f]
0022   /// which is actually a linearized (and hence infra-red safe) version of the
0023   /// {@link Sphericity} tensor.
0024   ///
0025   /// Defining the three eigenvalues of \f$\theta\f$
0026   /// \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$,
0027   /// the C and D parameters are defined as
0028   /// \f[
0029   /// C = 3(\lambda_1\lambda_2 + \lambda_1\lambda_3 + \lambda_2\lambda_3)
0030   /// \f]
0031   /// and
0032   /// \f[
0033   /// D = 27 \lambda_1\lambda_2\lambda_3
0034   /// \f]
0035   ///
0036   /// Internally, this Projection uses the Sphericity projection with the generalising
0037   /// \f$r\f$ parameter set to 1.
0038   ///
0039   class ParisiTensor : public Projection {
0040   public:
0041 
0042     /// Constructor. The provided FinalState projection must live throughout the run.
0043     ParisiTensor(const FinalState& fsp)
0044     {
0045       setName("ParisiTensor");
0046       declare(fsp, "FS");
0047       declare(Sphericity(fsp, 1.0), "Sphericity");
0048       clear();
0049     }
0050 
0051     /// Clone on the heap.
0052     RIVET_DEFAULT_PROJ_CLONE(ParisiTensor);
0053 
0054     /// Import to avoid warnings about overload-hiding
0055     using Projection::operator =;
0056 
0057 
0058   protected:
0059 
0060     /// Perform the projection on the Event.
0061     void project(const Event& e);
0062 
0063     /// Compare with other projections.
0064     CmpState compare(const Projection& p) const;
0065 
0066 
0067   public:
0068 
0069     /// Clear the projection.
0070     void clear();
0071 
0072 
0073   public:
0074 
0075     /// @name Access the C and D params.
0076     /// @{
0077     double C() const { return _C; }
0078     double D() const { return _D; }
0079     /// @}
0080 
0081     /// @name Access the eigenvalues of \f$\theta\f$.
0082     /// @{
0083     double lambda1() const { return _lambda[0]; }
0084     double lambda2() const { return _lambda[1]; }
0085     double lambda3() const { return _lambda[2]; }
0086     /// @}
0087 
0088 
0089   protected:
0090 
0091     /// The Parisi event shape variables.
0092     double _C, _D;
0093 
0094     /// Eigenvalues.
0095     double _lambda[3];
0096 
0097   };
0098 
0099 
0100 }
0101 
0102 #endif