Back to home page

EIC code displayed by LXR

 
 

    


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

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 EVTBTOXSGAMMAKAGAN_HH
0022 #define EVTBTOXSGAMMAKAGAN_HH
0023 
0024 #include "EvtGenModels/EvtBtoXsgammaAbsModel.hh"
0025 
0026 #include <vector>
0027 
0028 // Description:
0029 //       Implimentation of the Kagan-Neubert model for non-resonant
0030 //       B->Xs,gamma decays.
0031 // Description:
0032 //       Routine to perform two-body non-resonant B->Xs,gamma decays.
0033 //       The X_s mass spectrum generated is based on the Kagan-Neubert model.
0034 //       See hep-ph/9805303 for the model details and input parameters.
0035 //
0036 //       The input parameters are 1:fermi_model, 2:mB, 3:mb, 4:mu, 5:lam1,
0037 //       6:delta, 7:z, 8:nIntervalS, 9:nIntervalmH. Choosing fermi_model=1
0038 //       uses an exponential shape function, fermi_model=2 uses a gaussian
0039 //       shape function and fermi_model=3 a roman shape function. The complete mass
0040 //       spectrum for a given set of input parameters is calculated from
0041 //       scratch in bins of nIntervalmH. The s22, s27 and s28 coefficients are calculated
0042 //       in bins of nIntervalS. As the program includes lots of integration, the
0043 //       theoretical hadronic mass spectra is computed for the first time
0044 //       the init method is called. Then, all the other times (eg if we want to decay a B0
0045 //       as well as an anti-B0) the vector mass info stored the first time is used again.
0046 
0047 class EvtBtoXsgammaKagan : public EvtBtoXsgammaAbsModel {
0048   public:
0049     void init( int, double* ) override;
0050 
0051     void computeHadronicMass( int, double* );
0052 
0053     void getDefaultHadronicMass();
0054 
0055     double GetMass( int code ) override;
0056 
0057     double CalcAlphaS( double );
0058 
0059     void CalcWilsonCoeffs();
0060     void CalcDelta();
0061     double Fz( double );
0062 
0063   private:
0064     //Input parameters
0065     double _mb;
0066     double _mB;
0067     double _delta;
0068     double _nIntervalS;
0069     double _nIntervalmH;
0070     double _lambdabar;
0071     double _lam1;
0072     double _mHmin;
0073     double _mHmax;
0074     //Other parameters
0075     double _r7;
0076     double _gam77;
0077     double _gam27;
0078     double _gam87;
0079     double _beta0;
0080     double _beta1;
0081     double _alphasmZ;
0082     double _mZ;
0083     double _z;
0084     double _fz;
0085     double _lam2;
0086     double _kappabar;
0087     double _rer2;
0088     double _rer8;
0089     double _kSLemmu;
0090     double _mW;
0091     double _mt;
0092     double _ms;
0093     double _mu;
0094 
0095     double _c2mu;
0096     double _c70mu;
0097     double _c80mu;
0098     double _c71mu;
0099     double _c7emmu;
0100 
0101     double _cDeltatot;
0102 
0103     double _alpha;
0104     double _alphasmW;
0105     double _alphasmt;
0106     double _alphasmu;
0107     double _alphasmubar;
0108     double _etamu;
0109 
0110     std::vector<double> _mHVect;
0111 
0112     static double ReG( double );
0113     static double ImG( double );
0114     static double s77( double );
0115     static double s88( double, double, double );
0116     static double s78( double );
0117     static double s22Func( double var, const std::vector<double>& coeffs );
0118     static double s27Func( double var, const std::vector<double>& coeffs );
0119 
0120     static double Delta( double, double );
0121     static double DeltaFermiFunc( double, const std::vector<double>& coeffs1,
0122                                   const std::vector<double>& coeffs2,
0123                                   const std::vector<double>& coeffs3 );
0124     static double s77FermiFunc( double, const std::vector<double>& coeffs1,
0125                                 const std::vector<double>& coeffs2 );
0126     static double s88FermiFunc( double, const std::vector<double>& coeffs1,
0127                                 const std::vector<double>& coeffs2,
0128                                 const std::vector<double>& coeffs3 );
0129     static double s78FermiFunc( double, const std::vector<double>& coeffs1,
0130                                 const std::vector<double>& coeffs2 );
0131     static double s22FermiFunc( double, std::vector<double>& coeffs );
0132     static double s27FermiFunc( double, std::vector<double>& coeffs );
0133     static double s28FermiFunc( double, std::vector<double>& coeffs );
0134     static double GetArrayVal( double, double, double, double,
0135                                std::vector<double> );
0136     static double sFermiFunc( double, const std::vector<double>& coeffs1,
0137                               const std::vector<double>& coeffs2,
0138                               const std::vector<double>& coeffs3,
0139                               const std::vector<double>& coeffs4 );
0140     static double FermiFunc( double, const std::vector<double>& coeffs );
0141     static double diLogFunc( double );
0142     static double diLogMathematica( double );
0143     std::vector<double> massHad, brHad;
0144     static double intervalMH;
0145     static bool bbprod;
0146 };
0147 
0148 #endif