Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:20:08

0001 
0002 /***********************************************************************
0003 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors       *
0004 *                                                                      *
0005 * This file is part of EvtGen.                                         *
0006 *                                                                      *
0007 * EvtGen is free software: you can redistribute it and/or modify       *
0008 * it under the terms of the GNU General Public License as published by *
0009 * the Free Software Foundation, either version 3 of the License, or    *
0010 * (at your option) any later version.                                  *
0011 *                                                                      *
0012 * EvtGen is distributed in the hope that it will be useful,            *
0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
0015 * GNU General Public License for more details.                         *
0016 *                                                                      *
0017 * You should have received a copy of the GNU General Public License    *
0018 * along with EvtGen.  If not, see <https://www.gnu.org/licenses/>.     *
0019 ***********************************************************************/
0020 
0021 #ifndef EVTWILSONCOEFICIENTS_HH
0022 #define EVTWILSONCOEFICIENTS_HH
0023 
0024 #include "EvtGenBase/EvtComplex.hh"
0025 
0026 // Wilson coeficients according to A.J.Buras and M.Munz, Phys.Rev. D52, 186. (1995)
0027 // Thanks to N. Nikitine for example code for Pythia
0028 // Coefficient C8eff and C2 correction to C7eff taken from:
0029 //   A.J.Buras, M.Misiak, M.Munz, S.Pokorski, Nucl.Phys. B424, 374 (1994)
0030 //
0031 // Used constants come from PDG 2004
0032 
0033 class EvtWilsonCoefficients {
0034   public:
0035     EvtWilsonCoefficients();
0036     //~EvtWilsonCoefficients() {};
0037 
0038     // calculate strong coupling constant for n_f flavours and scale mu
0039     double alphaS( double mu, int n_f, double Lambda );
0040     // calculate Lambda matching alphaS using simple iterative method
0041     double Lambda( double alpha, int n_f, double mu, double epsilon, int maxstep );
0042     // eta-function: ratio of strong coupling constants
0043     double eta( double mu, int n_f, double Lambda, double M_W );
0044 
0045     // Wilson coeficients C1-C6
0046     EvtComplex C1( double mu, int n_f, double Lambda, double M_W );
0047     EvtComplex C2( double mu, int n_f, double Lambda, double M_W );
0048     EvtComplex C3( double mu, int n_f, double Lambda, double M_W );
0049     EvtComplex C4( double mu, int n_f, double Lambda, double M_W );
0050     EvtComplex C5( double mu, int n_f, double Lambda, double M_W );
0051     EvtComplex C6( double mu, int n_f, double Lambda, double M_W );
0052     // Wilson coeficietns C7,C8 => C7eff
0053     EvtComplex C7( double M_t, double M_W );
0054     EvtComplex C8( double M_t, double M_W );
0055     EvtComplex C7eff0( double mu, int n_f, double Lambda, double M_t, double M_W );
0056     EvtComplex C8eff0( double mu, int n_f, double Lambda, double M_t, double M_W );
0057     // Wilson coeficient C10
0058     EvtComplex C10tilda( double sin2W, double M_t, double M_W );
0059     EvtComplex C10( double sin2W, double M_t, double M_W, double ialpha );
0060     // Wilson coeficient C9
0061     double PE( double mu, int n_f, double Lambda, double M_W );
0062     EvtComplex P0( int ksi, double mu, int n_f, double Lambda, double M_W );
0063     EvtComplex C9tilda( int ksi, double mu, int n_f, double Lambda,
0064                         double sin2W, double M_t, double M_W );
0065     EvtComplex C9( int ksi, double mu, int n_f, double Lambda, double sin2W,
0066                    double M_t, double M_W, double ialpha );
0067 
0068     // Intermediate functions A-F,Y,Z
0069     double A( double x );
0070     double B( double x );
0071     double C( double x );
0072     double D( double x );
0073     double E( double x );
0074     double F( double x );
0075     double Y( double x );
0076     double Z( double x );
0077 
0078     // Mode decay specific functions
0079     EvtComplex hzs( double z, double shat, double mu, double M_b );
0080     double fz( double z );
0081     double kappa( double z, double alpha_S );
0082     double etatilda( double shat, double alpha_S );
0083     double omega( double shat );
0084     EvtComplex C9efftilda( double z, double shat, double alpha_S, EvtComplex c1,
0085                            EvtComplex c2, EvtComplex c3, EvtComplex c4,
0086                            EvtComplex c5, EvtComplex c6, EvtComplex c9tilda,
0087                            int ksi );
0088     EvtComplex C7b2sg( double alpha_S, double et, EvtComplex c2, double M_t,
0089                        double M_W );
0090     EvtComplex Yld( double q2, double ki[], double Gi[], double Mi[], int ni,
0091                     EvtComplex c1, EvtComplex c2, EvtComplex c3, EvtComplex c4,
0092                     EvtComplex c5, EvtComplex c6, double ialpha );
0093 
0094     // User function
0095     void CalculateAllCoefficients();
0096     // Set parameters
0097     void SetLambda( double lambda ) { m_Lambda = lambda; }
0098     void CalculateLambda( double epsilon, int maxstep )
0099     {
0100         m_Lambda = Lambda( m_alphaMZ, m_n_f, m_mu, epsilon, maxstep );
0101     }
0102     void SetStrongCouplingAtZMass( double alphaMZ ) { m_alphaMZ = alphaMZ; }
0103     void SetScale( double mu ) { m_mu = mu; }
0104     void SetNumberOfFlavours( int n_f ) { m_n_f = n_f; }
0105     void SetZMass( double M_Z ) { m_M_Z = M_Z; }
0106     void SetWMass( double M_W ) { m_M_W = M_W; }
0107     void SetTopMass( double M_t ) { m_M_t = M_t; }
0108     void SetSin2WeinbergAngle( double sin2W ) { m_sin2W = sin2W; }
0109     void SetInvElMagCoupling( double ialpha ) { m_ialpha = ialpha; }
0110     void SetRenormalizationScheme( std::string scheme );
0111     // Get parameters
0112     double GetLambda() { return m_Lambda; }
0113     double GetStrongCouplingAtZMass() { return m_alphaMZ; }
0114     double GetStrongCouplingConst() { return m_alphaS; }
0115     double GetScale() { return m_mu; }
0116     int GetNumberOfFlavours() { return m_n_f; }
0117     int GetRenormSchemePar() { return m_ksi; }
0118     double GetZMass() { return m_M_Z; }
0119     double GetWMass() { return m_M_W; }
0120     double GetTopMass() { return m_M_t; }
0121     double GetSin2WeinbergAngle() { return m_sin2W; }
0122     double GetInvElMagCoupling() { return m_ialpha; }
0123     double GetEta() { return m_eta; }
0124     // Get results
0125     double GetA() { return m_A; }
0126     double GetB() { return m_B; }
0127     double GetC() { return m_C; }
0128     double GetD() { return m_D; }
0129     double GetE() { return m_E; }
0130     double GetF() { return m_F; }
0131     double GetY() { return m_Y; }
0132     double GetZ() { return m_Z; }
0133     EvtComplex GetC1() { return m_C1; }
0134     EvtComplex GetC2() { return m_C2; }
0135     EvtComplex GetC3() { return m_C3; }
0136     EvtComplex GetC4() { return m_C4; }
0137     EvtComplex GetC5() { return m_C5; }
0138     EvtComplex GetC6() { return m_C6; }
0139     EvtComplex GetC7() { return m_C7; }
0140     EvtComplex GetC8() { return m_C8; }
0141     EvtComplex GetC9() { return m_C9; }
0142     EvtComplex GetC10() { return m_C10; }
0143     EvtComplex GetC7eff0() { return m_C7eff0; }
0144     EvtComplex GetC8eff0() { return m_C8eff0; }
0145     EvtComplex GetC9tilda() { return m_C9tilda; }
0146     EvtComplex GetC10tilda() { return m_C10tilda; }
0147     EvtComplex GetP0() { return m_P0; }
0148     double GetPE() { return m_PE; }
0149 
0150   private:
0151     int m_n_f, m_ksi;
0152     double m_Lambda, m_alphaMZ, m_mu, m_M_Z, m_M_t, m_M_W, m_alphaS, m_eta,
0153         m_sin2W, m_ialpha;
0154     EvtComplex m_C1, m_C2, m_C3, m_C4, m_C5, m_C6, m_C7, m_C7eff0, m_C8,
0155         m_C8eff0, m_C9, m_C9tilda, m_C10, m_C10tilda, m_P0;
0156     double m_A, m_B, m_C, m_D, m_E, m_F, m_Y, m_Z, m_PE;
0157 
0158     double k[6][8], a[8], h[8], p[8], r[2][8], s[8], q[8], g[8];
0159 };
0160 
0161 #endif