Spherocity.hh
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #ifndef RIVET_Spherocity_HH 00003 #define RIVET_Spherocity_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Projections/AxesDefinition.hh" 00007 #include "Rivet/Projections/FinalState.hh" 00008 #include "Rivet/Event.hh" 00009 00010 namespace Rivet { 00011 00012 00013 /** 00014 @brief Get the transverse spherocity scalars for hadron-colliders. 00015 00016 @author Holger Schulz 00017 00018 The scalar (maximum) transverse spherocity is defined as 00019 \f[ 00020 T = \mathrm{max}_{\vec{n_\perp}} \frac{\sum_i \left|\vec{p}_{\perp,i} \cdot \vec{n} \right|}{\sum_i |\vec{p}_{\perp,i}|} 00021 \f], 00022 with the direction of the unit vector \f$ \vec{n_\perp} \f$ which maximises \f$ T \f$ 00023 being identified as the spherocity axis. The unit vector which maximises the spherocity 00024 scalar in the plane perpendicular to \f$ \vec{n} \f$ is the "spherocity major" 00025 direction, and the vector perpendicular to both the spherocity and spherocity major directions 00026 is the spherocity minor. Both the major and minor directions have associated spherocity 00027 scalars. 00028 00029 Care must be taken in the case of Drell-Yan processes - there we should use the 00030 newly proposed observable \f$ a_T \f$. 00031 00032 */ 00033 class Spherocity : public AxesDefinition { 00034 public: 00035 00036 // Default Constructor 00037 Spherocity() {} 00038 00039 /// Constructor. 00040 Spherocity(const FinalState& fsp) 00041 : _calculatedSpherocity(false) 00042 { 00043 setName("Spherocity"); 00044 addProjection(fsp, "FS"); 00045 } 00046 00047 /// Clone on the heap. 00048 virtual const Projection* clone() const { 00049 return new Spherocity(*this); 00050 } 00051 00052 00053 protected: 00054 00055 /// Perform the projection on the Event 00056 void project(const Event& e) { 00057 const vector<Particle> ps 00058 = applyProjection<FinalState>(e, "FS").particles(); 00059 calc(ps); 00060 } 00061 00062 00063 /// Compare projections 00064 int compare(const Projection& p) const { 00065 return mkNamedPCmp(p, "FS"); 00066 } 00067 00068 00069 public: 00070 00071 ///@{ Spherocity scalar accessors 00072 /// The spherocity scalar, \f$ S \f$, (minimum spherocity). 00073 double spherocity() const { return _spherocities[0]; } 00074 ///@} 00075 00076 00077 ///@{ Spherocity axis accessors 00078 /// The spherocity axis. 00079 const Vector3& spherocityAxis() const { return _spherocityAxes[0]; } 00080 /// The spherocity major axis (axis of max spherocity perpendicular to spherocity axis). 00081 const Vector3& spherocityMajorAxis() const { return _spherocityAxes[1]; } 00082 /// The spherocity minor axis (axis perpendicular to spherocity and spherocity major). 00083 const Vector3& spherocityMinorAxis() const { return _spherocityAxes[2]; } 00084 ///@} 00085 00086 00087 ///@{ AxesDefinition axis accessors. 00088 const Vector3& axis1() const { return spherocityAxis(); } 00089 const Vector3& axis2() const { return spherocityMajorAxis(); } 00090 const Vector3& axis3() const { return spherocityMinorAxis(); } 00091 ///@} 00092 00093 00094 public: 00095 00096 /// @name Direct methods 00097 /// Ways to do the calculation directly, without engaging the caching system 00098 //@{ 00099 00100 /// Manually calculate the spherocity, without engaging the caching system 00101 void calc(const FinalState& fs); 00102 00103 /// Manually calculate the spherocity, without engaging the caching system 00104 void calc(const vector<Particle>& fsparticles); 00105 00106 /// Manually calculate the spherocity, without engaging the caching system 00107 void calc(const vector<FourMomentum>& fsmomenta); 00108 00109 /// Manually calculate the spherocity, without engaging the caching system 00110 void calc(const vector<Vector3>& threeMomenta); 00111 00112 //@} 00113 00114 00115 private: 00116 00117 /// The spherocity scalars. 00118 vector<double> _spherocities; 00119 00120 /// The spherocity axes. 00121 vector<Vector3> _spherocityAxes; 00122 00123 /// Caching flag to avoid costly recalculations. 00124 bool _calculatedSpherocity; 00125 00126 00127 private: 00128 00129 /// Explicitly calculate the spherocity values. 00130 void _calcSpherocity(const vector<Vector3>& fsmomenta); 00131 00132 }; 00133 00134 } 00135 00136 #endif Generated on Fri Oct 25 2013 12:41:48 for The Rivet MC analysis system by ![]() |