Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:25:33

0001 #ifndef NINJA_RAMBO_HH
0002 #define NINJA_RAMBO_HH
0003 
0004 #include <ninja/types.hh>
0005 #include <ninja/momentum.hh>
0006 
0007 namespace ninja {
0008 
0009   namespace detail {
0010     class RandomGenerator;    
0011     RandomGenerator * newRandomGenerator();
0012     void deleteRandomGenerator(RandomGenerator * gen);
0013   }
0014 
0015 
0016   class Rambo {
0017 
0018   public:
0019     enum {SUCCESS, NEWTON_METHOD_FAILED=1};
0020 
0021   public:
0022 
0023     Rambo()
0024       : m_(0), rnd_(detail::newRandomGenerator()), s_(0), n_(0), flag_(0) {}
0025 
0026     Rambo(Real energy, unsigned n, const Real masses[] = 0)
0027       : m_(masses), rnd_(detail::newRandomGenerator()),
0028         s_(energy), n_(n), flag_(SUCCESS)
0029     {}
0030 
0031     ~Rambo()
0032     {
0033       detail::deleteRandomGenerator(rnd_);
0034     }
0035 
0036     Rambo & setNParticles(unsigned n)
0037     {
0038       n_ = n;
0039       return *this;
0040     }
0041 
0042     Rambo & setEnergy(Real energy)
0043     {
0044       s_ = energy;
0045       return *this;
0046     }
0047 
0048 
0049     Rambo & setMasses(const Real * masses)
0050     {
0051       m_ = masses;
0052       return *this;
0053     }
0054 
0055     Rambo & setSeed(int seed);
0056 
0057     int getMomenta(RealMomentum vecs[], Real * weight = 0);
0058 
0059   private:
0060 
0061     void getIncomingMomenta_(RealMomentum vecs[]);
0062     Real rambo0_(RealMomentum u[], RealMomentum vecs[]);
0063     Real newton_(RealMomentum vecs[]);
0064 
0065   private:
0066     const Real * m_;
0067     detail::RandomGenerator * rnd_;
0068     Real s_;
0069     int n_, flag_;
0070   };
0071 
0072 }
0073 
0074 #endif // RAMBO_HH