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
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
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