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