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