00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef EVTVUBNLO_HH
00024 #define EVTVUBNLO_HH
00025
00026 #include <vector>
00027 #include "EvtGenBase/EvtDecayIncoherent.hh"
00028
00029 class EvtParticle;
00030 class RandGeneral;
00031
00032 class EvtVubNLO:public EvtDecayIncoherent {
00033
00034 public:
00035
00036 EvtVubNLO() {}
00037 virtual ~EvtVubNLO();
00038
00039 void getName(std::string& name);
00040
00041 EvtDecayBase* clone();
00042
00043 void initProbMax();
00044
00045 void init();
00046
00047 void decay(EvtParticle *p);
00048
00049
00050 private:
00051
00052
00053 double _lbar;
00054 double _mupi2;
00055
00056 double _mb;
00057 double _mB;
00058 double _lambdaSF;
00059 double _b;
00060 double _kpar;
00061 double _mui;
00062 double _SFNorm;
00063 double _dGMax;
00064 int _nbins;
00065 int _idSF;
00066 double * _masses;
00067 double * _weights;
00068
00069 double _gmax;
00070 int _ngood,_ntot;
00071
00072
00073 double tripleDiff(double pp, double pl, double pm);
00074 double SFNorm(const std::vector<double> &coeffs);
00075 static double integrand(double omega, const std::vector<double> &coeffs);
00076 double F10(const std::vector<double> &coeffs);
00077 static double F1Int(double omega,const std::vector<double> &coeffs);
00078 double F20(const std::vector<double> &coeffs);
00079 static double F2Int(double omega,const std::vector<double> &coeffs);
00080 double F30(const std::vector<double> &coeffs);
00081 static double F3Int(double omega,const std::vector<double> &coeffs);
00082 static double g1(double y, double z);
00083 static double g2(double y, double z);
00084 static double g3(double y, double z);
00085
00086 static double Gamma(double z);
00087 static double dgamma(double t, const std::vector<double> &c){ return pow(t,c[0]-1)*exp(-t);}
00088 static double Gamma(double z, double tmax);
00089
00090
00091 inline double mu_i(){return _mui;}
00092 inline double mu_bar(){return _mui;}
00093 inline double mu_h(){return _mb/sqrt(2.0);}
00094 inline double lambda1(){return -_mupi2;}
00095
00096
00097 static double beta0(int nf=4){return 11.-2./3.*nf;}
00098 static double beta1(int nf=4){return 34.*3.-38./3.*nf;}
00099 static double beta2(int nf=4){return 1428.5-5033./18.*nf+325./54.*nf*nf;}
00100 static double gamma0(){return 16./3.;}
00101 static double gamma1(int nf=4){return 4./3.*(49.85498-40./9.*nf);}
00102 static double gamma2(int nf=4){return 64./3.*(55.07242-8.58691*nf-nf*nf/27.);}
00103 static double gammap0(){return -20./3.;}
00104 static double gammap1(int nf=4){return -32./3.*(6.92653-0.9899*nf);}
00105
00106
00107
00108
00109 static double alphas(double mu) ;
00110 static double C_F(double mu){return (4.0/3.0)*alphas(mu)/4./EvtConst::pi;}
00111
00112
00113
00114 inline double lambda_SF(){ return _lambdaSF;}
00115 double lambda_bar(double omega0);
00116 inline double lambda2(){return 0.12;}
00117 double mu_pi2(double omega0);
00118 inline double lambda(double mu=0){ return _mB-_mb;}
00119
00120
00121 static double cGaus(double b){return pow(Gamma(1+b/2.)/Gamma((1+b)/2.),2);}
00122
00123 double M0(double mui,double omega0);
00124 static double shapeFunction(double omega, const std::vector<double> &coeffs);
00125 static double expShapeFunction(double omega, const std::vector<double> &coeffs);
00126 static double gausShapeFunction(double omega, const std::vector<double> &coeffs);
00127
00128 double subS(const std::vector<double> &coeffs );
00129 double subT(const std::vector<double> &coeffs);
00130 double subU(const std::vector<double> &coeffs);
00131 double subV(const std::vector<double> &coeffs);
00132
00133
00134
00135
00136 inline double S0(double a, double r){return -gamma0()/4/a/pow(beta0(),2)*(1/r-1+log(r));}
00137 inline double S1(double a, double r){return gamma0()/4./pow(beta0(),2)*(
00138 pow(log(r),2)*beta1()/2./beta0()+(gamma1()/gamma0()-beta1()/beta0())*(1.-r+log(r))
00139 );}
00140 inline double S2(double a, double r){return gamma0()*a/4./pow(beta0(),2)*(
00141 -0.5*pow((1-r),2)*(
00142 pow(beta1()/beta0(),2)-beta2()/beta0()-beta1()/beta0()*gamma1()/gamma0()+gamma2()/gamma0()
00143 )
00144 +(pow(beta1()/beta0(),2)-beta2()/beta0())*(1-r)*log(r)
00145 +(beta1()/beta0()*gamma1()/gamma0()-beta2()/beta0())*(1-r+r*log(r))
00146 );}
00147 inline double dSudakovdepsi(double mu1, double mu2){return S2(alphas(mu1)/(4*EvtConst::pi),alphas(mu2)/alphas(mu1));}
00148 inline double Sudakov(double mu1, double mu2, double epsi=0){double fp(4*EvtConst::pi);return S0(alphas(mu1)/fp,alphas(mu2)/alphas(mu1))+S1(alphas(mu1)/fp,alphas(mu2)/alphas(mu1))+epsi*dSudakovdepsi(mu1,mu2);}
00149
00150
00151 inline double dGdepsi(double mu1, double mu2){return 1./8./EvtConst::pi*(alphas(mu2)-alphas(mu1))*(gamma1()/beta0()-beta1()*gamma0()/pow(beta0(),2));}
00152 inline double aGamma(double mu1, double mu2, double epsi=0){return gamma0()/2/beta0()*log(alphas(mu2)/alphas(mu1))+epsi*dGdepsi( mu1, mu2);}
00153 inline double dgpdepsi(double mu1, double mu2){return 1./8./EvtConst::pi*(alphas(mu2)-alphas(mu1))*(gammap1()/beta0()-beta1()*gammap0()/pow(beta0(),2));}
00154 inline double agammap(double mu1, double mu2, double epsi=0){return gammap0()/2/beta0()*log(alphas(mu2)/alphas(mu1))+epsi*dgpdepsi( mu1, mu2);}
00155 inline double U1(double mu1, double mu2, double epsi=0){return exp(2*(Sudakov(mu1,mu2,epsi)-agammap(mu1,mu2,epsi)-aGamma(mu1,mu2,epsi)*log(_mb/mu1)));}
00156 inline double U1lo(double mu1, double mu2){return U1(mu1,mu2);}
00157 inline double U1nlo(double mu1, double mu2){return U1(mu1,mu2)*(1+2*(dSudakovdepsi(mu1,mu2)-dgpdepsi( mu1, mu2)-log(_mb/mu1)*dGdepsi( mu1, mu2)));}
00158 inline double alo(double mu1, double mu2){return -2*aGamma(mu1,mu2);}
00159 inline double anlo(double mu1, double mu2){return -2*dGdepsi(mu1,mu2);}
00160
00161 };
00162
00163 #endif
00164