![]() |
|
|||
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
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |