ParticleBase.hh
Go to the documentation of this file.
00001 #ifndef RIVET_ParticleBase_HH 00002 #define RIVET_ParticleBase_HH 00003 00004 #include "Rivet/Config/RivetCommon.hh" 00005 #include "Rivet/Jet.fhh" 00006 #include "Rivet/Tools/Cuts.fhh" 00007 #include "Rivet/Math/Vectors.hh" 00008 00009 namespace Rivet { 00010 00011 00012 /// @brief Base class for particle-like things like Particle and Jet 00013 class ParticleBase { 00014 public: 00015 00016 /// Default constructor 00017 ParticleBase() { } 00018 00019 /// Virtual destructor 00020 virtual ~ParticleBase() { } 00021 00022 00023 /// @name Effective momentum accessors 00024 //@{ 00025 00026 /// Get equivalent single momentum four-vector (const). 00027 virtual const FourMomentum& momentum() const = 0; 00028 /// Get equivalent single momentum four-vector (const) (alias). 00029 const FourMomentum& mom() const { return momentum(); }; 00030 00031 /// Cast operator for conversion to FourMomentum 00032 operator const FourMomentum& () const { return momentum(); } 00033 00034 //@} 00035 00036 00037 /// @name Convenience access to the effective 4-vector properties 00038 //@{ 00039 00040 /// Get the energy directly. 00041 double E() const { return momentum().E(); } 00042 /// Get the energy directly (alias). 00043 double energy() const { return momentum().E(); } 00044 00045 /// Get the energy-squared. 00046 double E2() const { return momentum().E2(); } 00047 /// Get the energy-squared (alias). 00048 double energy2() const { return momentum().E2(); } 00049 00050 /// Get the \f$ p_T \f$ directly. 00051 double pt() const { return momentum().pt(); } 00052 /// Get the \f$ p_T \f$ directly (alias). 00053 double pT() const { return pt(); } 00054 /// Get the \f$ p_T \f$ directly (alias). 00055 double perp() const { return pt(); } 00056 00057 /// Get the \f$ p_T^2 \f$ directly. 00058 double pt2() const { return momentum().pt2(); } 00059 /// Get the \f$ p_T^2 \f$ directly (alias). 00060 double pT2() const { return pt2(); } 00061 /// Get the \f$ p_T^2 \f$ directly (alias). 00062 double perp2() const { return pt2(); } 00063 00064 /// Get the \f$ E_T \f$ directly. 00065 double Et() const { return momentum().Et(); } 00066 /// Get the \f$ E_T^2 \f$ directly. 00067 double Et2() const { return momentum().Et2(); } 00068 00069 /// Get the mass directly. 00070 double mass() const { return momentum().mass(); } 00071 /// Get the mass**2 directly. 00072 double mass2() const { return momentum().mass2(); } 00073 00074 /// Get the \f$ \eta \f$ directly. 00075 double pseudorapidity() const { return momentum().eta(); } 00076 /// Get the \f$ \eta \f$ directly (alias). 00077 double eta() const { return momentum().eta(); } 00078 /// Get the \f$ |\eta| \f$ directly. 00079 double abspseudorapidity() const { return momentum().abspseudorapidity(); } 00080 /// Get the \f$ |\eta| \f$ directly (alias). 00081 double abseta() const { return momentum().abseta(); } 00082 00083 /// Get the \f$ y \f$ directly. 00084 double rapidity() const { return momentum().rapidity(); } 00085 /// Get the \f$ y \f$ directly (alias). 00086 double rap() const { return momentum().rapidity(); } 00087 /// Get the \f$ |y| \f$ directly. 00088 double absrapidity() const { return momentum().absrapidity(); } 00089 /// Get the \f$ |y| \f$ directly (alias). 00090 double absrap() const { return momentum().absrap(); } 00091 00092 /// Azimuthal angle \f$ \phi \f$. 00093 double azimuthalAngle(const PhiMapping mapping=ZERO_2PI) const { return momentum().azimuthalAngle(mapping); } 00094 /// Get the \f$ \phi \f$ directly. 00095 double phi(const PhiMapping mapping=ZERO_2PI) const { return momentum().phi(mapping); } 00096 00097 00098 /// Get the 3-momentum directly. 00099 Vector3 p3() const { return momentum().vector3(); } 00100 /// Get the 3-momentum magnitude directly. 00101 double p() const { return momentum().p(); } 00102 /// Get the 3-momentum magnitude-squared directly. 00103 double p2() const { return momentum().p2(); } 00104 00105 /// x component of momentum. 00106 double px() const { return momentum().x(); } 00107 /// y component of momentum. 00108 double py() const { return momentum().y(); } 00109 /// z component of momentum. 00110 double pz() const { return momentum().z(); } 00111 00112 /// x component of momentum, squared. 00113 double px2() const { return momentum().x2(); } 00114 /// y component of momentum, squared. 00115 double py2() const { return momentum().y2(); } 00116 /// z component of momentum, squared. 00117 double pz2() const { return momentum().z2(); } 00118 00119 /// Angle subtended by the 3-vector and the z-axis. 00120 double polarAngle() const { return momentum().polarAngle(); } 00121 /// Synonym for polarAngle. 00122 double theta() const { return momentum().theta(); } 00123 00124 /// Angle between this vector and another 00125 double angle(const ParticleBase& v) const { return momentum().angle(v.momentum()); } 00126 /// Angle between this vector and another 00127 double angle(const FourVector& v) const { return momentum().angle(v); } 00128 /// Angle between this vector and another (3-vector) 00129 double angle(const Vector3& v3) const { return momentum().angle(v3); } 00130 00131 //@} 00132 00133 }; 00134 00135 00136 /// @name deltaR, deltaEta, deltaPhi functions specifically for Particle/Jet arguments 00137 //@{ 00138 00139 inline double deltaR(const ParticleBase& p1, const ParticleBase& p2, 00140 RapScheme scheme = PSEUDORAPIDITY) { 00141 return deltaR(p1.momentum(), p2.momentum(), scheme); 00142 } 00143 00144 inline double deltaR(const ParticleBase& p, const FourMomentum& v, 00145 RapScheme scheme = PSEUDORAPIDITY) { 00146 return deltaR(p.momentum(), v, scheme); 00147 } 00148 00149 inline double deltaR(const ParticleBase& p, const FourVector& v, 00150 RapScheme scheme = PSEUDORAPIDITY) { 00151 return deltaR(p.momentum(), v, scheme); 00152 } 00153 00154 inline double deltaR(const ParticleBase& p, const Vector3& v) { 00155 return deltaR(p.momentum(), v); 00156 } 00157 00158 inline double deltaR(const ParticleBase& p, double eta, double phi) { 00159 return deltaR(p.momentum(), eta, phi); 00160 } 00161 00162 inline double deltaR(const FourMomentum& v, const ParticleBase& p, 00163 RapScheme scheme = PSEUDORAPIDITY) { 00164 return deltaR(v, p.momentum(), scheme); 00165 } 00166 00167 inline double deltaR(const FourVector& v, const ParticleBase& p, 00168 RapScheme scheme = PSEUDORAPIDITY) { 00169 return deltaR(v, p.momentum(), scheme); 00170 } 00171 00172 inline double deltaR(const Vector3& v, const ParticleBase& p) { 00173 return deltaR(v, p.momentum()); 00174 } 00175 00176 inline double deltaR(double eta, double phi, const ParticleBase& p) { 00177 return deltaR(eta, phi, p.momentum()); 00178 } 00179 00180 00181 inline double deltaPhi(const ParticleBase& p1, const ParticleBase& p2) { 00182 return deltaPhi(p1.momentum(), p2.momentum()); 00183 } 00184 00185 inline double deltaPhi(const ParticleBase& p, const FourMomentum& v) { 00186 return deltaPhi(p.momentum(), v); 00187 } 00188 00189 inline double deltaPhi(const ParticleBase& p, const FourVector& v) { 00190 return deltaPhi(p.momentum(), v); 00191 } 00192 00193 inline double deltaPhi(const ParticleBase& p, const Vector3& v) { 00194 return deltaPhi(p.momentum(), v); 00195 } 00196 00197 inline double deltaPhi(const ParticleBase& p, double phi) { 00198 return deltaPhi(p.momentum(), phi); 00199 } 00200 00201 inline double deltaPhi(const FourMomentum& v, const ParticleBase& p) { 00202 return deltaPhi(v, p.momentum()); 00203 } 00204 00205 inline double deltaPhi(const FourVector& v, const ParticleBase& p) { 00206 return deltaPhi(v, p.momentum()); 00207 } 00208 00209 inline double deltaPhi(const Vector3& v, const ParticleBase& p) { 00210 return deltaPhi(v, p.momentum()); 00211 } 00212 00213 inline double deltaPhi(double phi, const ParticleBase& p) { 00214 return deltaPhi(phi, p.momentum()); 00215 } 00216 00217 00218 inline double deltaEta(const ParticleBase& p1, const ParticleBase& p2) { 00219 return deltaEta(p1.momentum(), p2.momentum()); 00220 } 00221 00222 inline double deltaEta(const ParticleBase& p, const FourMomentum& v) { 00223 return deltaEta(p.momentum(), v); 00224 } 00225 00226 inline double deltaEta(const ParticleBase& p, const FourVector& v) { 00227 return deltaEta(p.momentum(), v); 00228 } 00229 00230 inline double deltaEta(const ParticleBase& p, const Vector3& v) { 00231 return deltaEta(p.momentum(), v); 00232 } 00233 00234 inline double deltaEta(const ParticleBase& p, double eta) { 00235 return deltaEta(p.momentum(), eta); 00236 } 00237 00238 inline double deltaEta(const FourMomentum& v, const ParticleBase& p) { 00239 return deltaEta(v, p.momentum()); 00240 } 00241 00242 inline double deltaEta(const FourVector& v, const ParticleBase& p) { 00243 return deltaEta(v, p.momentum()); 00244 } 00245 00246 inline double deltaEta(const Vector3& v, const ParticleBase& p) { 00247 return deltaEta(v, p.momentum()); 00248 } 00249 00250 inline double deltaEta(double eta, const ParticleBase& p) { 00251 return deltaEta(eta, p.momentum()); 00252 } 00253 00254 00255 inline double deltaRap(const ParticleBase& p1, const ParticleBase& p2) { 00256 return deltaRap(p1.momentum(), p2.momentum()); 00257 } 00258 00259 inline double deltaRap(const ParticleBase& p, const FourMomentum& v) { 00260 return deltaRap(p.momentum(), v); 00261 } 00262 00263 inline double deltaRap(const ParticleBase& p, double y) { 00264 return deltaRap(p.momentum(), y); 00265 } 00266 00267 inline double deltaRap(const FourMomentum& v, const ParticleBase& p) { 00268 return deltaRap(v, p.momentum()); 00269 } 00270 00271 inline double deltaRap(double y, const ParticleBase& p) { 00272 return deltaRap(y, p.momentum()); 00273 } 00274 00275 //@} 00276 00277 00278 } 00279 00280 #endif Generated on Tue Dec 13 2016 16:32:39 for The Rivet MC analysis system by ![]() |