Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:16

0001 #ifndef SHRIMPS_Tools_Kernels_H
0002 #define SHRIMPS_Tools_Kernels_H
0003 
0004 #include "SHRiMPS/Eikonals/Eikonal_Contributor.H"
0005 #include "SHRiMPS/Tools/DEQ_Solver.H"
0006 #include "ATOOLS/Math/Gauss_Integrator.H"
0007 
0008 namespace SHRIMPS {
0009   /*!
0010     \class DEQ_Kernel_NoKT
0011     \brief The class for the \f$k_\perp\f$-independent realisation of 
0012     differential equations defining the single channel eikonals.  Due 
0013     to inheritance from SHRIMPS::DEQ_Kernel_Base, again, the main method 
0014     here is the operator,  
0015     DEQ_Kernel_NoKT::operator()(const std::vector<double> &input,const double param=0.).
0016   */
0017   class DEQ_Kernel_NoKT : public DEQ_Kernel_Base {
0018   private:
0019     double              m_lambda, m_Delta, m_expfactor;
0020     absorption::code    m_absorp;
0021     std::vector<double> m_output;
0022   public:
0023     DEQ_Kernel_NoKT(const double & lambda,const double & Delta,
0024             const absorption::code & absorp) :
0025       m_lambda(lambda), m_Delta(Delta), m_expfactor(1./2.),
0026       m_absorp(absorp)
0027     { 
0028       m_output = std::vector<double>(2,0.);
0029     }
0030     /*!
0031       \fn std::vector<double> & DEQ_Kernel_NoKT::operator()(const std::vector<double> &input,const double param=0.)
0032       \brief The representation of \f$\vec f(\vec x,\,y)\f$ for the case of 
0033       the \f$k_\perp\f$-independent definition of the single channel eikonal.
0034 
0035       The corresponding set of differential equations reads
0036       \f[
0037       \frac{\mbox{\rm d}\Omega_{i(k)}}{\mbox{\rm d}y} = 
0038       +\exp\left[-\lambda\cdot\frac{\Omega_{i(k)}+\Omega_{(i)k}}{2}\right]\cdot\Delta\cdot\Omega_{i(k)}
0039       \f]
0040       \f[
0041       \frac{\mbox{\rm d}\Omega_{(i)k}}{\mbox{\rm d}y} =
0042       -\exp\left[-\lambda\cdot\frac{\Omega_{i(k)}+\Omega_{(i)k}}{2}\right]\cdot\Delta\cdot\Omega_{(i)k}\,,
0043       \f]
0044       where the dependence of the \f$\Omega_{i(k)}\f$ and \f$\Omega_{i(k)}\f$ on impact parameters
0045       \f$\vec b_\perp^{(1,2)}\f$ and on the rapidity \f$y\f$ has been suppressed.  In the actual
0046       implementation, the following identification has been made:
0047       \f[
0048       \Omega_{i(k)} \to x_1\;,\;\;\;
0049       \Omega_{(i)k} \to x_2\;,\;\;\;\mbox{\rm and}\;\;\;
0050       y \to y\,.
0051       \f]
0052       Therefore
0053       \f[
0054       \left(\begin{array}{c}
0055       +\exp\left[-\lambda\cdot\frac{\Omega_{i(k)}+\Omega_{(i)k}}{2}\right]\cdot\Delta\\
0056       -\exp\left[-\lambda\cdot\frac{\Omega_{i(k)}+\Omega_{(i)k}}{2}\right]\cdot\Delta
0057       \end{array}\right) 
0058       \to \vec f(\vec x,\,y)\,.
0059       \f]
0060     */
0061     std::vector<double> & operator()(const std::vector<double> & input,
0062                      const double param=0.);
0063   };
0064 
0065 
0066   class Integration_Kernel_Theta : public ATOOLS::Function_Base {
0067   private:
0068     Eikonal_Contributor * p_Omega1, * p_Omega2;
0069     int                   m_test;
0070     double                m_errmax12, m_errmax21, m_maxvalue;
0071     double                m_b,m_b1,m_y;
0072   public:
0073     Integration_Kernel_Theta(Eikonal_Contributor * Omega1, 
0074                  Eikonal_Contributor * Omega2, 
0075                  const int & test=0); 
0076     inline void    SetYref(const double & y) { m_y  = y;  }
0077     inline void    SetB(const double & b)    { m_b  = b;  }
0078     inline void    Setb1(const double & b1)  { m_b1 = b1; }
0079     double         operator()(double theta1);
0080 
0081     inline void    ResetMax() { m_maxvalue = 0.; }
0082     const double & Max() const { return m_maxvalue; }
0083     void        PrintErrors();
0084   };
0085 
0086   class Integration_Kernel_B2 : public ATOOLS::Function_Base {
0087   private:
0088     Integration_Kernel_Theta m_kernel;
0089     ATOOLS::Gauss_Integrator m_integrator;
0090     double                   m_accu;
0091     int                      m_test;
0092     double                   m_b,m_y;
0093   public:
0094     Integration_Kernel_B2(Eikonal_Contributor * Omega1, 
0095               Eikonal_Contributor * Omega2, 
0096               const int & test=0);
0097 
0098     ~Integration_Kernel_B2() {}
0099 
0100     void SetYref(const double & y) { 
0101       m_y = y; 
0102       m_kernel.SetYref(m_y); 
0103     }
0104     void SetB(const double & b) { 
0105       m_b = b; 
0106       m_kernel.SetB(m_b); 
0107     }
0108     double operator()(double b1);
0109 
0110     inline void    ResetMax()  { m_kernel.ResetMax(); }
0111     const double & Max() const { return m_kernel.Max(); }
0112 
0113     void   PrintErrors() { m_kernel.PrintErrors(); }
0114   };
0115 }
0116 
0117 #endif
0118