Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:06:50

0001 // -*- C++ -*-
0002 #ifndef RIVET_Beams_HH
0003 #define RIVET_Beams_HH
0004 
0005 #include "Rivet/Particle.hh"
0006 #include "Rivet/Event.hh"
0007 #include "Rivet/Math/LorentzTrans.hh"
0008 
0009 namespace Rivet {
0010 
0011 
0012   /// @defgroup beam_functions Standalone beam kinematics functions
0013   /// @{
0014 
0015   /// Get beam particles from an event
0016   ParticlePair beams(const Event& e);
0017 
0018 
0019   /// Check if the given beam pair is valid
0020   bool validBeams(const ParticlePair& beams);
0021 
0022   /// Check if the event's beam pair is valid
0023   inline bool validBeams(const Event& e) {
0024     return validBeams(beams(e));
0025   }
0026 
0027 
0028   /// Get beam particle IDs from a pair of Particles
0029   inline PdgIdPair beamIDs(const ParticlePair& beams) { return pids(beams); }
0030 
0031   /// Get beam particle IDs from an event
0032   inline PdgIdPair beamIDs(const Event& e) { return beamIDs(beams(e)); }
0033 
0034 
0035   /// Get beam particle energies from a pair of Particles
0036   inline PdgIdPair beamEnergies(const ParticlePair& beams) { return energies(beams); }
0037 
0038   /// Get beam particle energies from an event
0039   inline PdgIdPair beamEnergies(const Event& e) { return beamEnergies(beams(e)); }
0040 
0041 
0042   /// @brief Get beam centre-of-mass energy from a pair of beam energies
0043   ///
0044   /// For want of more complete information, this function assumes massless
0045   /// particles colliding head-on.
0046   double sqrtS(double ea, double eb);
0047 
0048   /// @brief Get beam centre-of-mass energy from a pair of beam energies
0049   ///
0050   /// For want of more complete information, this function assumes massless
0051   /// particles colliding head-on.
0052   inline double sqrtS(const pair<double,double>& energies) { return sqrtS(energies.first, energies.second); }
0053 
0054   /// Get beam centre-of-mass energy from a pair of beam momenta
0055   double sqrtS(const FourMomentum& pa, const FourMomentum& pb);
0056 
0057   /// Get beam centre-of-mass energy from a pair of Particles
0058   inline double sqrtS(const ParticlePair& beams) {
0059     return sqrtS(beams.first.momentum(), beams.second.momentum());
0060   }
0061 
0062   /// Get beam centre-of-mass energy from an Event
0063   inline double sqrtS(const Event& e) { return sqrtS(beams(e)); }
0064 
0065 
0066   /// Get per-nucleon beam centre-of-mass energy from a pair of beam momenta
0067   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
0068   double asqrtS(const FourMomentum& pa, const FourMomentum& pb);
0069 
0070   /// Get per-nucleon beam centre-of-mass energy from a pair of Particles
0071   /// @note Uses the sum of nuclear mass numbers A for each beam
0072   double asqrtS(const ParticlePair& beams);
0073 
0074   /// Get per-nucleon beam centre-of-mass energy from an Event
0075   /// @note Uses the sum of nuclear mass numbers A for each beam
0076   inline double asqrtS(const Event& e) { return asqrtS(beams(e)); }
0077 
0078 
0079   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
0080   inline FourMomentum cmsBoostVec(const FourMomentum& pa, const FourMomentum& pb) {
0081     return pa + pb;
0082   }
0083 
0084   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
0085   inline FourMomentum cmsBoostVec(const ParticlePair& beams) {
0086     return cmsBoostVec(beams.first, beams.second);
0087   }
0088 
0089   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
0090   FourMomentum acmsBoostVec(const FourMomentum& pa, const FourMomentum& pb);
0091 
0092   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
0093   FourMomentum acmsBoostVec(const ParticlePair& beams);
0094 
0095 
0096   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
0097   Vector3 cmsBetaVec(const FourMomentum& pa, const FourMomentum& pb);
0098 
0099   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
0100   inline Vector3 cmsBetaVec(const ParticlePair& beams) {
0101     return cmsBetaVec(beams.first, beams.second);
0102   }
0103 
0104 
0105   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of beam momenta
0106   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
0107   Vector3 acmsBetaVec(const FourMomentum& pa, const FourMomentum& pb);
0108 
0109   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of Particles
0110   /// @note Uses the sum of nuclear mass numbers A for each beam
0111   Vector3 acmsBetaVec(const ParticlePair& beams);
0112 
0113 
0114   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of beam momenta
0115   Vector3 cmsGammaVec(const FourMomentum& pa, const FourMomentum& pb);
0116 
0117   /// Get the Lorentz boost to the beam centre-of-mass system (CMS) from a pair of Particles
0118   inline Vector3 cmsGammaVec(const ParticlePair& beams) {
0119     return cmsGammaVec(beams.first, beams.second);
0120   }
0121 
0122 
0123   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of beam momenta
0124   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
0125   Vector3 acmsGammaVec(const FourMomentum& pa, const FourMomentum& pb);
0126 
0127   /// Get the Lorentz boost to the per-nucleon beam centre-of-mass system (ACMS) from a pair of Particles
0128   /// @note Uses the sum of nuclear mass numbers A for each beam
0129   Vector3 acmsGammaVec(const ParticlePair& beams);
0130 
0131 
0132   /// Get the Lorentz transformation to the beam centre-of-mass system (CMS) from a pair of beam momenta
0133   LorentzTransform cmsTransform(const FourMomentum& pa, const FourMomentum& pb);
0134 
0135   /// Get the Lorentz transformation to the beam centre-of-mass system (CMS) from a pair of Particles
0136   inline LorentzTransform cmsTransform(const ParticlePair& beams) {
0137     return cmsTransform(beams.first, beams.second);
0138   }
0139 
0140 
0141   /// Get the Lorentz transformation to the per-nucleon beam centre-of-mass system (CMS) from a pair of beam momenta
0142   /// @note Uses a nominal nucleon mass of 0.939 GeV to convert masses to A
0143   LorentzTransform acmsTransform(const FourMomentum& pa, const FourMomentum& pb);
0144 
0145   /// Get the Lorentz transformation to the per-nucleon beam centre-of-mass system (CMS) from a pair of Particles
0146   /// @note Uses the sum of nuclear mass numbers A for each beam
0147   LorentzTransform acmsTransform(const ParticlePair& beams);
0148 
0149   /// @}
0150 
0151 
0152 }
0153 
0154 #endif