Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef SHRIMPS_Eikonals_Omega_ik_H
0002 #define SHRIMPS_Eikonals_Omega_ik_H
0003 
0004 #include "SHRiMPS/Eikonals/Form_Factors.H"
0005 #include "SHRiMPS/Eikonals/Eikonal_Contributor.H"
0006 #include "SHRiMPS/Eikonals/Analytic_Contributor.H"
0007 #include "SHRiMPS/Eikonals/Analytic_Eikonal.H"
0008 #include "SHRiMPS/Tools/Parameter_Structures.H"
0009 #include "ATOOLS/Math/Vector.H"
0010 #include "ATOOLS/Math/MathTools.H"
0011 
0012 namespace SHRIMPS {
0013   /*!
0014     \class Omega_ik
0015     \brief The single channel eikonal \f$\Omega_{ik}\f$ contributing to the
0016     various cross sections.  
0017 
0018     The single channel eikonal \f$\Omega_{ik}\f$ contributing to the
0019     various cross sections.  It is constructed from the individual terms
0020     \f$\Omega_{i(k)}\f$ and \f$\Omega_{k(i)}\f$ by integration over the
0021     relative impact parameters.  This is something that needs to be done,
0022     my feeling is that we should leave this to some external class
0023     SHRIMPS::Eikonal::Creator.
0024 
0025     Therefore, this class should know its two SHRIMPS::Eikonal_Contributors, 
0026     which represent the two terms \f$\Omega_{i(k)}\f$ and \f$\Omega_{k(i)}\f$.  
0027     It should also have access to the two form factors \f$F_{i,k}\f$ for the 
0028     actual simulation. For the cross sections, it needs an operator yielding
0029     \f$\Omega_{ik}(Y,\,y,\,B_\perp)\f$, I could imagine, however, that the 
0030     depedence on the parameter \f$Y\f$ can be made obsolete.  For checking 
0031     purposes, though, I guess a dependence on the rapidity point \f$y\f$ 
0032     would be good to maintain: in principle \f$\Omega_{ik}(Y,\,y,\,B_\perp)\f$ 
0033     should not depend on it.
0034   */
0035   class Omega_ik : public ATOOLS::Function_Base {
0036   private:
0037     Eikonal_Contributor * p_Omegaik, * p_Omegaki;
0038 
0039     double              m_bmax, m_Y;
0040     int                 m_Bsteps, m_Ysteps;
0041     double              m_prefactor, m_deltaB;
0042     std::vector<double> m_gridB, m_gridBmax, m_gridD;   
0043   public:
0044     Omega_ik(const Eikonal_Parameters & params);
0045     ~Omega_ik();
0046     
0047 
0048     double operator()(const double & B) const;
0049     ATOOLS::Vec4D SelectB1B2(double & b1,double & b2,const double & B);    
0050     double Maximum(const double & B) const;    
0051     void   PrepareQT(const double & b1,const double & b2);
0052     Eikonal_Contributor * GetSingleTerm(const int & i=0);
0053     
0054     inline void SetContributors(Eikonal_Contributor * Omegaik, Eikonal_Contributor * Omegaki) {
0055       p_Omegaik = Omegaik; p_Omegaki = Omegaki; 
0056     }
0057     inline void SetPrefactor(const double & prefactor) { m_prefactor = prefactor; }
0058     inline void SetDeltaB(const double & deltaB)       { m_deltaB = deltaB; }
0059 
0060     
0061     inline Form_Factor * FF(const size_t i) const { return i==0?p_Omegaik->FF1():p_Omegaki->FF2(); }
0062     inline Form_Factor * FF1()        const { return p_Omegaik->FF1(); }
0063     inline Form_Factor * FF2()        const { return p_Omegaki->FF2(); }
0064     inline const double & Prefactor() const { return m_prefactor; }
0065     inline const double & DeltaB()    const { return m_deltaB; }    
0066     inline std::vector<double> * GetImpactParameterGrid()        { return &m_gridB; }
0067     inline std::vector<double> * GetImpactParameterMaximumGrid() { return &m_gridBmax; }
0068     
0069     void TestIndividualGrids(Analytic_Contributor * ana12,
0070                  Analytic_Contributor * ana21,
0071                  const double & Ymax,
0072                  const std::string & dirname) const;
0073     void TestEikonal(Analytic_Eikonal * ana,const std::string & dirname) const;
0074   };
0075   
0076   struct eikcomp{
0077     bool operator() (const Omega_ik * eik1, const Omega_ik * eik2) const
0078     {
0079       if(eik1->FF1()->Number() < eik2->FF1()->Number()) return true;
0080       else if(eik1->FF1()->Number() > eik2->FF1()->Number()) return false;
0081       else {
0082     if (eik1->FF2()->Number() < eik2->FF2()->Number()) return true;
0083     else return false;
0084       }
0085     }
0086   };
0087 
0088 }
0089 
0090 #endif