예제 #1
0
void EvolDF1nlep::Df1Evolnlep(double mu, double M, double nf, schemes scheme) {

  matrix<double> resLO(dim, 0.), resNLO(dim, 0.), resLO_ew(dim,0.), resNLO_ew(dim,0.);

    int L = 6 - (int) nf;
    double alsM = model.Als(M) / 4. / M_PI;
    double alsmu = model.Als(mu) / 4. / M_PI;
    double ale = model.getAle()/ 4. / M_PI ;
    
    double eta = alsM / alsmu;
    
    for (unsigned int k = 0; k < dim; k++) {
        double etap = pow(eta, a[L][k]);
        for (unsigned int i = 0; i < dim; i++) {
            for (unsigned int j = 0; j < dim; j++) {
                
                resLO(i,j) += b[L][i][j][k] * etap;
                
                resNLO(i,j) += c[L][i][j][k] * etap * alsmu;
                resNLO(i,j) += d[L][i][j][k] * etap * alsM;
                
                resLO_ew(i,j) +=  m[L][i][j][k] * etap * ale/alsmu;
                resLO_ew(i,j) +=  n[L][i][j][k] * etap * ale/alsM;
                
                resNLO_ew(i,j) += o[L][i][j][k] * etap * ale;
                resNLO_ew(i,j) += p[L][i][j][k] * etap * ale;
                resNLO_ew(i,j) += u[L][i][j][k] * etap * ale * log(eta);
                
                resNLO_ew(i,j) += q[L][i][j][k] * etap * ale;
                resNLO_ew(i,j) += r[L][i][j][k] * etap * ale;
                resNLO_ew(i,j) += s[L][i][j][k] * etap * ale / eta;
                resNLO_ew(i,j) += t[L][i][j][k] * etap * ale * eta;
            }
         }   
     }
 
    switch(order_ew) {
        case NLO_ew:
            *elem[NLO_ew] = (*elem[NLO]) * resLO_ew +
                            (*elem[NLO_ew]) * resLO + (*elem[LO]) *resNLO_ew;
        case LO_ew:
            *elem[LO_ew] =  (*elem[LO]) * resLO_ew;
            break;
        default:
            throw std::runtime_error("Error in EvolDF1nlep::Df1Evolnlep()");
    }   
   
    switch(order) {
        case NNLO:
            *elem[NNLO] = 0.;
        case NLO:
            *elem[NLO] = (*elem[LO]) * resNLO + (*elem[NLO]) * resLO;
        case LO:
            *elem[LO] = (*elem[LO]) * resLO;
            break;
        default:
            throw std::runtime_error("Error in EvolDF1nlep::Df1Evolnlep()");
    } 
}
예제 #2
0
void EvolDC1Buras::DC1EvolBuras(double mu, double M, double nf, schemes scheme) 
{

    gslpp::matrix<double> resLO(dim, 0.), resNLO(dim, 0.), resNNLO(dim, 0.);

    int L = 6 - (int) nf;
    double alsM = model.Als(M) / 4. / M_PI;
    double alsmu = model.Als(mu) / 4. / M_PI;
    
    double eta = alsM / alsmu;
    
    for (unsigned int k = 0; k < dim; k++) {
        double etap = pow(eta, a[L][k] / 2. / model.Beta0(nf));
        for (unsigned int i = 0; i < dim; i++){
            for (unsigned int j = 0; j < dim; j++) {
                resNNLO(i, j) += 0.;
                
                if(fabs(e(i).real() - e(j).real() + 2. * model.Beta0(nf))>0.000000000001)  {
                    resNLO(i, j) += c[L][i][j][k] * etap * alsmu;
                    resNLO(i, j) += d[L][i][j][k] * etap * alsM;
                }
                else{
                    resNLO(i, j) += - c[L][i][j][k] * etap * alsmu * log(eta);    
                }        
                resLO(i, j) += b[L][i][j][k] * etap;
            }
        }
    }
    switch(order) {
        case NNLO:
            *elem[NNLO] = 0.;
        case NLO:
            *elem[NLO] = (*elem[LO]) * resNLO + (*elem[NLO]) * resLO;
        case LO:
            *elem[LO] = (*elem[LO]) * resLO;
            break;
        case FULLNNLO:
        case FULLNLO:
        default:
            throw std::runtime_error("Error in EvolDC1Buras::DC1EvolBuras()");
    } 
    
  }