Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:56

0001 #ifndef ATOOLS_Phys_Momenta_Stretcher_H
0002 #define ATOOLS_Phys_Momenta_Stretcher_H
0003 
0004 #include <vector>
0005 #include <string>
0006 #include "ATOOLS/Phys/Blob.H"
0007 #include "ATOOLS/Math/Vector.H"
0008 
0009 namespace ATOOLS {
0010   
0011   class Momenta_Stretcher {
0012     std::string m_module;
0013     static unsigned long int s_fails;
0014   public:
0015     Momenta_Stretcher(const std::string module=std::string("")) : m_module(module) {}
0016     ~Momenta_Stretcher();
0017     bool MassThem(const int, const int, Vec4D *, const double *,const double=-1.e-14);
0018     bool MassThem(const int n0, std::vector<Vec4D>& moms, std::vector<double> masses,const double=-1.e-14);
0019     bool ZeroThem(const int, const int, Vec4D *,const double=-1.e-14);
0020     bool ZeroThem(const int n0, std::vector<Vec4D>& moms,const double=1.e-14);
0021     bool StretchBlob(Blob* blob);
0022     bool StretchMomenta( const Particle_Vector& outparts, std::vector<Vec4D>& moms);
0023     bool StretchMomenta( const Particle_Vector& outparts, std::vector<double>& masses);
0024     bool StretchMomenta( std::vector<Vec4D>& moms, std::vector<double>& masses);
0025 
0026     //inline void Reset() { s_fails = 0; }
0027   };
0028 }
0029   ////////////////////////////////////////////////////////////////////////////////////////////////////
0030   // Description of member methods for Momenta_Stretcher.
0031   ////////////////////////////////////////////////////////////////////////////////////////////////////
0032   /*!
0033     \fn bool ATOOLS::Momenta_Stretcher::MassThem(const int,const int,Vec4D *,const double *,const double=-1.e-14)
0034     \brief Puts the momenta on new mass-shells, respecting four-momentum
0035     conservation of the overall ensemble and the original directions as far as
0036     possible.
0037 
0038     If this succeeds, "true" is returned; if, in contrast, the sum of all new
0039     masses is larger than the overall energy available, such a transformation
0040     cannot work out and the method yields "false". Momenta have to be Zero'd
0041     first!
0042 
0043     <var>n0</var> specifies the first array/vector index to stretch, all
0044     momenta below that index will be ignored when stretching.
0045 
0046     In general the momenta set need to be in its overall c.m. frame for this method to work.
0047     Then the corresponding algorithm of Rambo is employed. It shifts the masses and uses
0048     scale transformations in an iterative procedure until convergence is reached. 
0049     
0050     For two momenta, the system does not need to be in its c.m. frame. There, the system is boosted 
0051     into its c.m. frame, the overall energy is calculated and the three-momenta are adjusted, 
0052     respecting the original directions. Finally, the systemv is boosted back.
0053   */
0054   /*!
0055     \fn bool ATOOLS::Momenta_Stretcher::ZeroThem(const int,const int,ATOOLS::Vec4D *,const double)
0056     \brief Puts the momenta on zero mass, respecting four-momentum conservation of the overall
0057     ensemble and the original directions as far as possible. Momenta have to be in CMS!
0058 
0059     For two momenta this is straight-forwardly done after going to the two vectors c.m. system
0060     and calculating the total energy. For an arbitrary number of momenta, the inverse of the
0061     Rambo algorithm used in Momenta_Stretcher::MassThem(const int,ATOOLS::Vec4D *,const double *) is
0062     employed.
0063   */
0064   /*!
0065     \fn bool Momenta_Stretcher::StretchBlob(Blob*)
0066     \brief Puts the momenta of the outgoing particles on new mass shells
0067            given by their FinalMass()es
0068 
0069     Uses ZeroThem and MassThem to accomplish the stretching, and also cares for
0070     boosting the momenta into CMS in the beginning and back afterwards.
0071   */
0072   /*!
0073     \fn bool ATOOLS::Momenta_Stretcher::StretchMomenta(
0074              const Particle_Vector&,std::vector<Vec4D>& )
0075     \brief Puts the given momenta on new mass shells given by the FinalMasses
0076            of the Particle_Vector.
0077 
0078     Uses ZeroThem and MassThem to accomplish the stretching, and also cares for
0079     boosting the momenta into CMS in the beginning and back afterwards.
0080   */
0081 
0082 #endif