rivet is hosted by Hepforge, IPPP Durham
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 
00028     /// Cast operator for conversion to FourMomentum
00029     operator const FourMomentum& () const { return momentum(); }
00030 
00031     /// @todo Add a converter and cast operator to FJ3 PseudoJet
00032     // virtual PseudoJet pseudojet() const { ... }
00033     // operator PseudoJet () const { return pseudojet(); }
00034 
00035     //@}
00036 
00037 
00038     /// @name Convenience access to the effective 4-vector properties
00039     //@{
00040 
00041     /// Get the energy directly.
00042     double E() const { return momentum().E(); }
00043     /// Get the energy directly (alias).
00044     double energy() const { return momentum().E(); }
00045 
00046     /// Get the \f$ p_T \f$ directly.
00047     double pt() const { return momentum().pt(); }
00048     /// Get the \f$ p_T \f$ directly (alias).
00049     double pT() const { return pt(); }
00050     /// Get the \f$ p_T \f$ directly (alias).
00051     double perp() const { return pt(); }
00052 
00053     /// Get the \f$ E_T \f$ directly.
00054     double Et() const { return momentum().Et(); }
00055 
00056     /// Get the mass directly.
00057     double mass() const { return momentum().mass(); }
00058     /// Get the mass**2 directly.
00059     double mass2() const { return momentum().mass2(); }
00060 
00061     /// Get the \f$ \eta \f$ directly.
00062     double pseudorapidity() const { return momentum().eta(); }
00063     /// Get the \f$ \eta \f$ directly (alias).
00064     double eta() const { return momentum().eta(); }
00065     /// Get the \f$ |\eta| \f$ directly.
00066     double abspseudorapidity() const { return momentum().abspseudorapidity(); }
00067     /// Get the \f$ |\eta| \f$ directly (alias).
00068     double abseta() const { return momentum().abseta(); }
00069 
00070     /// Get the \f$ y \f$ directly.
00071     double rapidity() const { return momentum().rapidity(); }
00072     /// Get the \f$ y \f$ directly (alias).
00073     double rap() const { return momentum().rapidity(); }
00074     /// Get the \f$ |y| \f$ directly.
00075     double absrapidity() const { return momentum().absrapidity(); }
00076     /// Get the \f$ |y| \f$ directly (alias).
00077     double absrap() const { return momentum().absrap(); }
00078 
00079     /// Get the \f$ \phi \f$ directly.
00080     double phi() const { return momentum().phi(); }
00081 
00082     //@}
00083 
00084   };
00085 
00086 
00087   /// @name deltaR, deltaEta, deltaPhi functions specifically for Particle/Jet arguments
00088   //@{
00089 
00090   inline double deltaR(const ParticleBase& p1, const ParticleBase& p2,
00091                        RapScheme scheme = PSEUDORAPIDITY) {
00092     return deltaR(p1.momentum(), p2.momentum(), scheme);
00093   }
00094 
00095   inline double deltaR(const ParticleBase& p, const FourMomentum& v,
00096                        RapScheme scheme = PSEUDORAPIDITY) {
00097     return deltaR(p.momentum(), v, scheme);
00098   }
00099 
00100   inline double deltaR(const ParticleBase& p, const FourVector& v,
00101                        RapScheme scheme = PSEUDORAPIDITY) {
00102     return deltaR(p.momentum(), v, scheme);
00103   }
00104 
00105   inline double deltaR(const ParticleBase& p, const Vector3& v) {
00106     return deltaR(p.momentum(), v);
00107   }
00108 
00109   inline double deltaR(const ParticleBase& p, double eta, double phi) {
00110     return deltaR(p.momentum(), eta, phi);
00111   }
00112 
00113   inline double deltaR(const FourMomentum& v, const ParticleBase& p,
00114                        RapScheme scheme = PSEUDORAPIDITY) {
00115     return deltaR(v, p.momentum(), scheme);
00116   }
00117 
00118   inline double deltaR(const FourVector& v, const ParticleBase& p,
00119                        RapScheme scheme = PSEUDORAPIDITY) {
00120     return deltaR(v, p.momentum(), scheme);
00121   }
00122 
00123   inline double deltaR(const Vector3& v, const ParticleBase& p) {
00124     return deltaR(v, p.momentum());
00125   }
00126 
00127   inline double deltaR(double eta, double phi, const ParticleBase& p) {
00128     return deltaR(eta, phi, p.momentum());
00129   }
00130 
00131 
00132   inline double deltaPhi(const ParticleBase& p1, const ParticleBase& p2) {
00133     return deltaPhi(p1.momentum(), p2.momentum());
00134   }
00135 
00136   inline double deltaPhi(const ParticleBase& p, const FourMomentum& v) {
00137     return deltaPhi(p.momentum(), v);
00138   }
00139 
00140   inline double deltaPhi(const ParticleBase& p, const FourVector& v) {
00141     return deltaPhi(p.momentum(), v);
00142   }
00143 
00144   inline double deltaPhi(const ParticleBase& p, const Vector3& v) {
00145     return deltaPhi(p.momentum(), v);
00146   }
00147 
00148   inline double deltaPhi(const ParticleBase& p, double phi) {
00149     return deltaPhi(p.momentum(), phi);
00150   }
00151 
00152   inline double deltaPhi(const FourMomentum& v, const ParticleBase& p) {
00153     return deltaPhi(v, p.momentum());
00154   }
00155 
00156   inline double deltaPhi(const FourVector& v, const ParticleBase& p) {
00157     return deltaPhi(v, p.momentum());
00158   }
00159 
00160   inline double deltaPhi(const Vector3& v, const ParticleBase& p) {
00161     return deltaPhi(v, p.momentum());
00162   }
00163 
00164   inline double deltaPhi(double phi, const ParticleBase& p) {
00165     return deltaPhi(phi, p.momentum());
00166   }
00167 
00168 
00169   inline double deltaEta(const ParticleBase& p1, const ParticleBase& p2) {
00170     return deltaEta(p1.momentum(), p2.momentum());
00171   }
00172 
00173   inline double deltaEta(const ParticleBase& p, const FourMomentum& v) {
00174     return deltaEta(p.momentum(), v);
00175   }
00176 
00177   inline double deltaEta(const ParticleBase& p, const FourVector& v) {
00178     return deltaEta(p.momentum(), v);
00179   }
00180 
00181   inline double deltaEta(const ParticleBase& p, const Vector3& v) {
00182     return deltaEta(p.momentum(), v);
00183   }
00184 
00185   inline double deltaEta(const ParticleBase& p, double eta) {
00186     return deltaEta(p.momentum(), eta);
00187   }
00188 
00189   inline double deltaEta(const FourMomentum& v, const ParticleBase& p) {
00190     return deltaEta(v, p.momentum());
00191   }
00192 
00193   inline double deltaEta(const FourVector& v, const ParticleBase& p) {
00194     return deltaEta(v, p.momentum());
00195   }
00196 
00197   inline double deltaEta(const Vector3& v, const ParticleBase& p) {
00198     return deltaEta(v, p.momentum());
00199   }
00200 
00201   inline double deltaEta(double eta, const ParticleBase& p) {
00202     return deltaEta(eta, p.momentum());
00203   }
00204 
00205 
00206   inline double deltaRap(const ParticleBase& p1, const ParticleBase& p2) {
00207     return deltaRap(p1.momentum(), p2.momentum());
00208   }
00209 
00210   inline double deltaRap(const ParticleBase& p, const FourMomentum& v) {
00211     return deltaRap(p.momentum(), v);
00212   }
00213 
00214   inline double deltaRap(const ParticleBase& p, double y) {
00215     return deltaRap(p.momentum(), y);
00216   }
00217 
00218   inline double deltaRap(const FourMomentum& v, const ParticleBase& p) {
00219     return deltaRap(v, p.momentum());
00220   }
00221 
00222   inline double deltaRap(double y, const ParticleBase& p) {
00223     return deltaRap(y, p.momentum());
00224   }
00225 
00226   //@}
00227 
00228 
00229 }
00230 
00231 #endif