Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:44

0001 #ifndef AMEGIC_Amplitude_Zfunctions_Basic_Sfuncs_H
0002 #define AMEGIC_Amplitude_Zfunctions_Basic_Sfuncs_H
0003 
0004 
0005 #include "ATOOLS/Phys/Flavour.H"
0006 #include "ATOOLS/Math/Vector.H"
0007 #include "ATOOLS/Phys/Spinor.H"
0008 #include "AMEGIC++/Main/Pol_Info.H"
0009 #include "AMEGIC++/Amplitude/Pfunc.H"
0010 #include <list>
0011 
0012 #define masslessskip 30
0013 #define massiveskip 60
0014  
0015 namespace AMEGIC {
0016 
0017   //!Container for explicit 4-vectors (momentums and polarization vectors)
0018   class Momfunc {
0019   public:
0020     //!Number of arguments
0021     int       argnum;
0022     /*!
0023       List of Arguments.
0024       For external momentums:
0025       - [0] index of the external particle
0026       
0027       For propagator momentums:
0028       - [0] index in AMEGIC::Basic_Sfuncs::Momlist
0029       - [1]..[argnum] list of external particle indices for calculation
0030 
0031       For polarization vectors
0032       - [0] index in AMEGIC::Basic_Sfuncs::Momlist
0033       - [1] index of the corresponding momentum
0034     */
0035     int*      arg;
0036     //!real part of the vector
0037     ATOOLS::Vec4D     mom;
0038     //!imaginary part of the vector
0039     ATOOLS::Vec4D     mom_img;
0040     //! polarization angle for external linear polarized vector bosons 
0041     double    angle;
0042     //! mass of the particle, described by the vector (polarizations only)
0043     double    mass;
0044     //! type of the vector
0045     mt::momtype type;
0046     //! kf code
0047     kf_code kfc;
0048     Momfunc() {arg = 0;argnum = 0;angle=0.;mass=0.;kfc=0;}
0049     Momfunc(const Momfunc& m) {
0050       arg = 0;
0051       argnum = 0;
0052       *this = m;
0053     }
0054 
0055     ~Momfunc() {if (arg) delete[] arg;}
0056       
0057 
0058     Momfunc& operator=(const Momfunc& m) {
0059       if (this!=&m) {
0060     argnum = m.argnum;
0061     if (arg) delete[] arg;
0062     if (argnum>0) {
0063       arg = new int[argnum];
0064       for (short int i=0;i<argnum;i++) arg[i] = m.arg[i];
0065     }
0066     mom     = m.mom;
0067     mom_img = m.mom_img;
0068     mass    = m.mass;
0069     angle   = m.angle;
0070     type    = m.type;
0071     kfc     = m.kfc;
0072       }
0073       return *this;
0074     }
0075   };
0076 
0077   class Basic_Sfuncs {
0078     std::vector<Momfunc> Momlist;
0079     int  momcount;
0080     ATOOLS::Flavour* fl;
0081     int  nmom,nvec;
0082     ATOOLS::Vec4D* p, m_k1, m_k2, m_k3;
0083     std::vector<ATOOLS::Vec4D>* p_epol;
0084     int* b;
0085     Complex* _eta;
0086     Complex* _mu;
0087     Complex** _S0;
0088     Complex** _S1;
0089     int** calc_st;
0090     int  k0_n;
0091     int  m_precalc;
0092     int  InitializeMomlist();
0093     void CalcMomlist();
0094     void CalcS(int i, int j);
0095     void PrecalcS();
0096     inline static int R1() { return ATOOLS::Spinor<double>::R1(); }
0097     inline static int R2() { return ATOOLS::Spinor<double>::R2(); }
0098     inline static int R3() { return ATOOLS::Spinor<double>::R3(); }
0099     inline ATOOLS::Vec4D K1() const { return m_k1; }
0100     inline ATOOLS::Vec4D K2() const { return m_k2; }
0101     inline ATOOLS::Vec4D K3() const { return m_k3; }
0102     inline double C1(const ATOOLS::Vec4D &p) const { return -m_k1*p; }
0103     inline double C2(const ATOOLS::Vec4D &p) const { return -m_k2*p; }
0104     inline double C3(const ATOOLS::Vec4D &p) const { return -m_k3*p; }
0105   public:
0106     Basic_Sfuncs(int,int, ATOOLS::Flavour*,int*);
0107     Basic_Sfuncs(int,int, ATOOLS::Flavour*,int*,std::string,std::string);
0108     ~Basic_Sfuncs();
0109     void Output(std::string name);
0110 
0111     int    BuildMomlist(Pfunc_List&); 
0112     int    BuildTensorPolarisations(int); 
0113     int    BuildPolarisations(int,char,double angle=0.);
0114     int    BuildPolarisations(int,ATOOLS::Flavour);
0115 
0116     void   PrintMomlist();
0117     int    GetMomNumber(Pfunc*);
0118     void   PropPolarisation(int,Pfunc_List&,std::vector<int>&);
0119     int    GetPolNumber(int,int,double,int check=0);
0120 
0121     void   Setk0(int);
0122     ATOOLS::Vec4D Getk0();
0123     ATOOLS::Vec4D Getk1();
0124     void   Initialize();
0125     int    CalcEtaMu(ATOOLS::Vec4D*);//setS
0126     void   InitGaugeTest(double);//ResetS_GT
0127     void   SetEPol(std::vector<ATOOLS::Vec4D>* epol) {p_epol=epol;}
0128 
0129     inline Complex Mu(int i)  { return (i>0) ? _mu[i] : -_mu[-i]; }
0130     inline Complex Eta(int i) { return _eta[ATOOLS::iabs(i)]; }
0131     inline Complex S0d(int i,int j) { return _S0[ATOOLS::iabs(i)][ATOOLS::iabs(j)]; }
0132     inline Complex S1d(int i,int j) { return _S1[ATOOLS::iabs(i)][ATOOLS::iabs(j)]; }
0133     inline Complex S0(int i,int j) {
0134       i=ATOOLS::iabs(i);j=ATOOLS::iabs(j);
0135       if (!calc_st[i][j] && !m_precalc) CalcS(i,j); 
0136       return _S0[i][j];
0137     }
0138     inline Complex S1(int i,int j) {
0139       i=ATOOLS::iabs(i);j=ATOOLS::iabs(j);
0140       if (!calc_st[i][j] && !m_precalc) CalcS(i,j); 
0141       return _S1[i][j];
0142     }
0143     Complex CalcS(ATOOLS::Vec4D& m, ATOOLS::Vec4D& m1);
0144     /*!
0145       Returns the results of both S-functions S+ and S- of the vectors v and the i-th
0146       vector in the momlist. S+ is stored in the first entry of the pair, S- is stored
0147       in the second entry.
0148     */
0149     std::pair<Complex, Complex> GetS(ATOOLS::Vec4D v, int i);
0150 
0151     double Norm(int,int);//N
0152 
0153     inline int  GetNmomenta() { return nmom; }
0154     inline int  MomlistSize() { return Momlist.size(); }
0155     inline int  Sign(int i)   { return b[ATOOLS::iabs(i)]; }
0156     inline ATOOLS::Flavour GetFlavour(int i)   { return fl[ATOOLS::iabs(i)]; }
0157     inline ATOOLS::Vec4D& Momentum(int i)     { return Momlist[i].mom; }
0158     inline ATOOLS::Vec4D& MomentumImg(int i) { return Momlist[i].mom_img; }
0159     inline bool IsComplex(const int i) {
0160       return ( Momlist[i].type==mt::p_p || Momlist[i].type==mt::p_m || 
0161            Momlist[i].type==mt::p_l || Momlist[i].type==mt::p_s || Momlist[i].type==mt::p_si);
0162     } 
0163     void StartPrecalc();
0164     bool IsMomSum(int,int,int);
0165   };
0166 
0167   std::ostream& operator<<(std::ostream& os, const Momfunc& mf);
0168   std::istream& operator>>(std::istream& is, Momfunc& mf);
0169 
0170 
0171   /*!
0172     \class Basic_Sfuncs
0173     \brief Calculation of S-functions.
0174 
0175     This class generates a list of all four-momentums and polarization vectors 
0176     and determines them from the given four-momentums of external particles.
0177     It also calculates and administrates the \f$\eta\f$- and \f$\mu\f$-functions
0178     as well as the basic spinor products \f$S(+;p_1,p_2)\f$ and \f$S(-;p_1,p_2)\f$.
0179   */
0180   /*!
0181     \var std::vector<Momfunc> Basic_Sfuncs::Momlist
0182     List of all momentums and polarization vectors.
0183   */
0184   /*!
0185     \var ATOOLS::Flavour* Basic_Sfuncs::fl
0186     Array of Flavours for external particles.
0187   */
0188   /*!
0189     \var int Basic_Sfuncs::nmom
0190     Number of external particles
0191   */
0192   /*!
0193     \var int Basic_Sfuncs::nvec
0194     Numbers of vectors for external particles (nmom + extra vectors for the old gauge boson treatment)
0195   */
0196   /*!
0197     \var ATOOLS::Vec4D* Basic_Sfuncs::p
0198     Array of momentums for external particles
0199   */
0200   /*!
0201     \var int* Basic_Sfuncs::b
0202     Signs for the external particles:
0203     - +1 for outgoing
0204     - -1 for incoming
0205   */
0206   /*!
0207     \var Complex* Basic_Sfuncs::_eta
0208     Array of \f$\eta\f$'s for each vector in Momlist. 
0209     It is calculated in Basic_Sfuncs::CalcEtaMu(ATOOLS::Vec4D*).
0210   */
0211   /*!
0212     \var Complex* Basic_Sfuncs::_mu
0213     Array of \f$\mu\f$'s for each vector in Momlist. 
0214     It is calculated in Basic_Sfuncs::CalcEtaMu(ATOOLS::Vec4D*).
0215   */
0216   /*!
0217     \var Complex** Basic_Sfuncs::_S0
0218     Array of \f$S(+,p_i,p_j)\f$, calculated in Basic_Sfuncs::CalcS(int i, int j) when first used.
0219   */
0220   /*!
0221     \var Complex** Basic_Sfuncs::_S1
0222     Array of \f$S(-,p_i,p_j)\f$, calculated in Basic_Sfuncs::CalcS(int i, int j) when first used.
0223    */
0224   /*!
0225     \var int** Basic_Sfuncs::calc_st
0226     Array to keep track over already calculated S-functions.
0227    */
0228   /*!
0229     \var int  Basic_Sfuncs::momcount
0230     Number of vectors in Basic_Sfuncs::Momlist.
0231    */
0232   /*!
0233     \var int  Basic_Sfuncs::k0_n
0234     Indicates what set of vectors \f$k_0\f$ and \f$k_1\f$ is used to define the spinor basis.
0235     See Basic_Sfuncs::Setk0(int) for details.
0236   */
0237 
0238   /*!
0239     \fn int Basic_Sfuncs::InitializeMomlist()
0240     Initializes momentums of external particles in Basic_Sfuncs::Momlist.
0241   */
0242   /*!
0243     \fn void Basic_Sfuncs::CalcMomlist()
0244     Calculates all vectors in Basic_Sfuncs::Momlist.
0245 
0246     <table border>
0247       <tr>
0248         <td> </td>
0249         <td> <B>type</B> (see class mt)</td>
0250     <td> </td>
0251       </tr>
0252      <tr>
0253         <td>Momentums and Popagators: </td>
0254         <td>mom</td>
0255         <td>\f$p_i\f$</td>
0256       </tr>
0257       <tr>
0258         <td> </td>
0259         <td>prop</td>
0260         <td>\f$\sum_i p_i\f$</td>
0261       </tr>
0262       <tr>
0263         <td> </td>
0264         <td>cmprop</td>
0265         <td>\f$p_0+p_1\f$</td>
0266       </tr>
0267       <tr>
0268         <td>Polarizations: </td>
0269         <td>p_m/p_p</td>
0270         <td>\f$\frac{1}{\sqrt{2}\sqrt{p_x^2+p_y^2}}\left(0,\frac{p_xp_z}{|\vec{p}|}\mp ip_y,
0271            \frac{p_yp_z}{|\vec{p}|}\pm ip_x,-\frac{p_x^2+p_y^2}{|\vec{p}|}\right)\f$</td>
0272       </tr>
0273       <tr>
0274         <td> </td>
0275         <td>p_lh</td>
0276         <td>\f$\frac{1}{\sqrt{p_x^2+p_y^2}}\left(0,\frac{p_xp_z}{|\vec{p}|},
0277            \frac{p_yp_z}{|\vec{p}|},-\frac{p_x^2+p_y^2}{|\vec{p}|}\right)\f$</td>
0278       </tr>
0279       <tr>
0280         <td> </td>
0281         <td>p_lv</td>
0282         <td>\f$\frac{1}{\sqrt{p_x^2+p_y^2}}\left(0,p_y,-p_x,0\right)\f$</td>
0283       </tr>
0284       <tr>
0285         <td> </td>
0286         <td>p_l</td>
0287         <td>\f$\frac{1}{\sqrt{p^2}}\left(|\vec{p}|,p_0\frac{\vec{p}}{\vec{p}|}\right)\f$</td>
0288       </tr>
0289       <tr>
0290         <td> </td>
0291         <td>p_s</td>
0292         <td>\f$\sqrt{\frac{p^2-(m^2+im\Gamma)}{p^2 (m^2+im\Gamma)}}p\f$</td>
0293       </tr>
0294        <tr>
0295         <td> </td>
0296         <td>p_si</td>
0297         <td>\f$\sqrt{-\frac{1}{p^2}}p\f$</td>
0298       </tr>
0299     </table>
0300   */
0301   /*!
0302     \fn void Basic_Sfuncs::CalcS(int i, int j)
0303     Calculates the basic spinor products \f$S(+,p_i,p_j)\f$ and \f$S(-,p_i,p_j)\f$. 
0304     i,j are indices of Basic_Sfuncs::Momlist. 
0305 
0306     S-Functions are defined as products of massless spinor:
0307     \f[
0308     S(+,p_1,p_2)=\bar{u}(p_1,+)u(p_2,-),
0309     \f] 
0310     \f[
0311     S(-,p_1,p_2)=\bar{u}(p_1,-)u(p_2,+).
0312     \f]
0313  
0314     We introduce a dimensionless chiral spinor basis 
0315     \f[
0316     w(k_0,\lambda)\bar w(k_0,\lambda) = \frac{1+\lambda\gamma_5}{2}k\!\!\!/_0
0317     \f] 
0318     and
0319     \f[
0320     w(k_0,\lambda) = \lambda k\!\!\!/_1 w(k_0,-\lambda)\,,
0321     \f] 
0322     where \f$k_1 k_1=-1\f$ and \f$k_0 k_1=0\f$.
0323     
0324     Now a (massless) spinor with an arbitrary momentum \f$p\f$ can be defined by
0325     \f[
0326     u(p,\lambda)=\frac{p\!\!\!/}{\sqrt{2pk_0}}w(k_0,-\lambda).
0327     \f]
0328 
0329     Using this the S-Function can be calculated:
0330     \f[
0331     S(+;p_1,p_2) = 
0332     2\frac{(p_1\cdot k_0)(p_2\cdot k_1)-
0333            (p_1\cdot k_1)(p_2\cdot k_0)+
0334            i\epsilon_{\mu\nu\rho\sigma}
0335            p_1^\mu p_2^\nu k_0^\rho k_1^\sigma}{\eta_1\eta_2}\,, 
0336     \f]
0337     \f[
0338     S(-;p_1,p_2) = -S(+;p_1,p_2)^*\,.
0339     \f]
0340 
0341     With the default choice of \f$k_0\f$ and \f$k_1\f$ (see Basic_Sfuncs::Setk0), that 
0342     expression can be simplified to
0343     \f$
0344     S(\pm,p_1,p_2)=\left(\pm p_1^y+\frac{i}{\sqrt{2}}(p_1^z-p_1^x)\right)
0345                    \frac{\eta_2}{\eta_1} - (1 \leftrightarrow 2)\,.
0346     \f$
0347   */
0348   /*!
0349     \fn void Basic_Sfuncs::PrecalcS()
0350     Precalculation of all used spinor products. 
0351     This method is used after calling Basic_Sfuncs::StartPrecalc().
0352   */
0353  
0354   /*!
0355     \fn int    Basic_Sfuncs::BuildMomlist(Pfunc_List&)
0356     Adds propagators and internal polarization vectors to Basic_Sfuncs::Momlist.
0357   */
0358   /*!
0359     \fn int    Basic_Sfuncs::BuildTensorPolarisations(int)
0360     Adds polarization vectors, neccessary to calculate polarization tensors f
0361     or external spin-2 particles to Basic_Sfuncs::Momlist.
0362   */
0363   /*!
0364     \fn int    Basic_Sfuncs::BuildPolarisations(int,char,double angle=0.)
0365     Initializes polarizations for external vector bosons in Basic_Sfuncs::Momlist.
0366   */
0367   /*!
0368     \fn int    Basic_Sfuncs::BuildPolarisations(int,ATOOLS::Flavour)
0369     Initializes polarizations for vector boson and spin-2 propagators in Basic_Sfuncs::Momlist.
0370   */
0371 
0372   /*!
0373     \fn void   Basic_Sfuncs::PrintMomlist()
0374     Prints Basic_Sfuncs::Momlist.
0375   */
0376   /*!
0377     \fn int    Basic_Sfuncs::GetMomNumber(Pfunc*)
0378     Checks Basic_Sfuncs::Momlist if a propagator already exists. 
0379     Returns the index or -1.
0380   */
0381   /*!
0382     \fn void   Basic_Sfuncs::PropPolarisation(int,Pfunc_List&,std::vector<int>&)
0383     In the last argument a list of corresponding polarizaton vector types (mt) for a 
0384     propagator is returned.
0385   */
0386   /*!
0387     \fn int    Basic_Sfuncs::GetPolNumber(int momindex,int sign, double mass,int check=0)
0388     Checks Basic_Sfuncs::Momlist if a polarization vector already exists.
0389     Polarizations are characterized a propagator or external momentum , a type (mt)
0390     and a mass of the corresponding boson if the calculation depends on it.
0391     Returns the index or -1.
0392   */
0393   /*!
0394     \fn void   Basic_Sfuncs::Setk0(int)
0395     Set the auxiliary vectors \f$k_0\f$ and \f$k_1\f$, defining the spinor basis.
0396 
0397     The following sets are available:
0398     - 0:  \f$k_0=(1,\sqrt(1/2),0,\sqrt(1/2))\;\;\;\;\;k_1=(0,0,1,0)\f$  (default)
0399     - 1:  \f$k_0=(1,0,\sqrt(1/2),\sqrt(1/2))\;\;\;\;\;k_1=(0,1,0,0)\f$
0400     - 2:  \f$k_0=(1,\sqrt(1/2),\sqrt(1/2),0)\;\;\;\;\;k_1=(0,0,0,1)\f$
0401 
0402     This function can be used for internal tests.
0403   */
0404   /*!
0405     \fn ATOOLS::Vec4D Basic_Sfuncs::Getk0()
0406     Returns the currently set k0 as a 4-vector.
0407   */
0408   /*!
0409     \fn void   Basic_Sfuncs::Initialize()
0410     Memory allocation for Basic_Sfuncs::_mu, Basic_Sfuncs::_eta, Basic_Sfuncs::_S0,
0411     Basic_Sfuncs::_S1 and Basic_Sfuncs::calc_st.
0412   */
0413   /*!
0414     \fn int    Basic_Sfuncs::CalcEtaMu(ATOOLS::Vec4D*)
0415     Calculation of \f$\eta\f$ and \f$\mu\f$ for every vector in Basic_Sfuncs::Momlist.
0416 
0417     \f$\eta_i=\sqrt{2p_ik_0}\f$ 
0418 
0419     \f$\mu_i=\pm\frac{m_i}{\eta_i}\f$ for external particles/antiparticles, and
0420     
0421     \f$\mu_i=\frac{\sqrt{p_i}}{\eta_i}\f$ for propagators and polarizations. 
0422 
0423     If Basic_Sfuncs::m_precalc is set, all basic spinor products, enabled in 
0424     Basic_Sfuncs::calc_st are calculated. 
0425   */
0426   /*!
0427     \fn void   Basic_Sfuncs::InitGaugeTest(double theta)
0428     Initializes the internal gauge test for external massless vector bosons (photons or gluons).
0429     The test can only performed for unpolarized beams with a circular polarization basis.
0430 
0431     External massless gauge bosons obey the completeness relation in the light-cone gauge
0432     \f[
0433     \sum_{\lambda=\pm}\epsilon_{\mu}(p,\lambda)\epsilon^{*}_{\nu}(p,\lambda) =
0434     -\eta_{\mu\nu} + \frac{p_\mu q_\nu+p_\nu q_\mu}{p\cdot q}
0435     \f]
0436     where \f$q\f$ is any four-vector not alligned with \f$p\f$ and \f$q^2=0\f$.
0437     
0438     By default \f$q\f$ is choosen to be \f$q=(p_0,-\vec{p})\f$, where
0439     \f[
0440     \epsilon(p,\pm) = \frac{1}{\sqrt{2}}\left(0,
0441     \cos\theta\cos\varphi \mp i\sin\varphi,\cos\theta\sin\varphi \pm i\cos\varphi,
0442     -\sin\theta \right)    
0443     \f]
0444     is a possible choice for the polarization vectors of a particle with momentum
0445     \f$p_{\mu} = \left(p_0,p_0\sin\theta\cos\varphi,
0446                p_0\sin\theta\sin\varphi,p_0\cos\theta\right)\f$.
0447 
0448     This function redefines the polarization vectors to yield a completeness relation, 
0449     where spacial part of \f$q\f$ has an arbitrary angle \f$\theta_0\f$ with respect to \f$-\vec{p}\f$.
0450     The circular polarization vectors are now
0451     \f[
0452     \epsilon(p,\pm)=\frac{1}{{\cal N}}\times
0453     \left[
0454     \left(
0455     \begin{array}{l}
0456     \cos{\frac{\theta_0}{2}}\cos{\frac{\theta}{2}}+\sin{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\cos\varphi
0457     \\
0458     \sin{\frac{\theta_0}{2}}\cos{\frac{\theta}{2}}+\cos{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\cos\varphi
0459     \\
0460     \cos{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\sin\varphi
0461     \\
0462     \cos{\frac{\theta_0}{2}}\cos{\frac{\theta}{2}}-\sin{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\cos\varphi
0463     \end{array}
0464     \right) 
0465     \mp i
0466     \left(
0467     \begin{array}{l}
0468     \sin{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\sin\varphi                                         
0469     \\
0470     \cos{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\sin\varphi
0471     \\
0472     \sin{\frac{\theta_0}{2}}\cos{\frac{\theta}{2}}-
0473     \cos{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\cos\varphi
0474     \\
0475     -\sin{\frac{\theta_0}{2}}\sin{\frac{\theta}{2}}\sin\varphi
0476     \end{array}
0477     \right)\right]
0478     \f]
0479     where
0480     \f[
0481     {\cal N} = \sqrt{1-\sin\theta\cos\varphi\sin{\theta_0}-\cos\theta\cos{\theta_0}}\,.
0482     \f]
0483   */
0484   /*!
0485     \fn inline Complex Basic_Sfuncs::Mu(int i) 
0486     Returns \f$\mu_i\f$.
0487   */
0488   /*!
0489     \fn inline Complex Basic_Sfuncs::Eta(int i) 
0490     Returns \f$\eta_i\f$.
0491   */
0492   /*!
0493     \fn inline Complex Basic_Sfuncs::S0(int i,int j) 
0494     Checks Basic_Sfuncs::calc_st if \f$S(+,p_i,p_j)\f$ is already calculated.
0495     If not Basic_Sfuncs::CalcS is started.
0496     Returns the complex value. 
0497   */
0498   /*!
0499     \fn inline Complex Basic_Sfuncs::S1(int i,int j) 
0500     Checks Basic_Sfuncs::calc_st if \f$S(-,p_i,p_j)\f$ is already calculated.
0501     If not Basic_Sfuncs::CalcS is started.
0502     Returns the complex value. 
0503   */
0504   /*!
0505     \fn inline Complex Basic_Sfuncs::S0d(int i,int j) 
0506     Returns \f$S(+,p_i,p_j)\f$. Basic_Sfuncs::StartPrecalc must be performed first.
0507   */
0508   /*!
0509     \fn inline Complex Basic_Sfuncs::S1d(int i,int j) 
0510     Returns \f$S(-,p_i,p_j)\f$. Basic_Sfuncs::StartPrecalc must be performed first.
0511   */
0512   /*!
0513     \fn double Basic_Sfuncs::Norm(int,int)
0514   */
0515 
0516   /*!
0517     \fn int  Basic_Sfuncs::GetNmomenta()
0518     Returns the number of external particles.
0519   */
0520   /*!
0521     \fn inline int  Basic_Sfuncs::Sign(int i)
0522     Returns a sign for external particles (see Basic_Sfuncs::b).
0523   */
0524   /*!
0525     \fn inline ATOOLS::Flavour  Basic_Sfuncs::GetFlavour(int i)
0526     Returns the flavour of an external particle.
0527   */
0528   /*!
0529     \fn inline ATOOLS::Vec4D  Basic_Sfuncs::Momentum(int i)
0530     Returns the real part of a momentum in Basic_Sfuncs::Momlist.
0531   */
0532   /*!
0533     \fn inline ATOOLS::Vec4D  Basic_Sfuncs::MomentumImg(int i) 
0534     Returns the imaginary part of a momentum in Basic_Sfuncs::Momlist.
0535   */
0536   /*!
0537     \fn inline bool Basic_Sfuncs::IsComplex(int i)
0538     Returns true, if the vector in Basic_Sfuncs::Momlist[i] may become complex.
0539     This is the case for mt::p_m, mt::p_p, mt::p_l, mt::p_s and mt::p_si.
0540   */
0541   /*!
0542     \fn void Basic_Sfuncs::StartPrecalc()
0543     Activates the precalculation modus for the basic spinor products.
0544     All used spinor products are now calculated in advance.
0545   */
0546 
0547   /*!
0548     \fn bool Basic_Sfuncs::IsMomSum(int x,int y,int z) 
0549     Checks if the momentum in Basic_Sfuncs::Momlist[x] is a sum of the other momentums
0550     or proportional to it.
0551     The method is used to check if some Basic_Xfunc are identical zero.
0552   */
0553 }
0554 #endif