/* This file contains the functions that specify the nucleon vector and axial vector form factors. */ /**************************************************************************/ /* */ /* IMPORTANT : all dimensional quantities in this program */ /* are in units GeV */ /* */ /**************************************************************************/ #include /* The function gamma_NN_vertex() gives the gamma_NN electromagnetic vertex */ spinor_mat gamma_NN_vertex(int iso, int mu, fvec q) { int nu1, nu2; double Q_sqr, ff_F1, ff_F2; spinor_mat dirac, pauli, pauli_incr; pauli = zero_spinor_mat(); Q_sqr = - V4mul(q, q).re; ff_F1 = form_factor_F1(iso, Q_sqr); ff_F2 = form_factor_F2(iso, Q_sqr); dirac = SMCmul(dirac_gamma(mu), Complex(ff_F1, 0.0)); for(nu1 = 0; nu1 <= 3; nu1++) { for(nu2 = 0; nu2 <= 3; nu2++) { if (metric(nu1, nu2) == 0.0) pauli_incr = zero_spinor_mat(); else { pauli_incr = SMCmul(dirac_sigma(mu, nu1), Cmul(q.fv[nu2], Complex(0.0, metric(nu1, nu2) * ff_F2 /(2. * NU_M) ) ) ); } pauli = SMadd(pauli, pauli_incr); } } return SMadd(dirac, pauli); } /* The function form_factor_F1() returns the Dirac form factor of a nucleon (iso = 1 : proton; iso = 2 : neutron) as function of Q_sqr(in GeV^2). */ double form_factor_F1(int iso, double Q_sqr) { return ( Q_sqr / pow(2. * NU_M, 2.) * G_M(iso,Q_sqr) + G_E(iso,Q_sqr) ) / ( 1. + Q_sqr / pow(2. * NU_M, 2.) ); } /* The function form_factor_F2() returns the Pauli form factor of a nucleon (iso = 1 : proton; iso = 2 : neutron) as function of Q_sqr(in GeV^2). */ double form_factor_F2(int iso, double Q_sqr) { return ( G_M(iso,Q_sqr) - G_E(iso,Q_sqr) ) / ( 1. + Q_sqr / pow(2. * NU_M, 2.) ); } /* The function G_E() returns the electric form factor of a nucleon (iso = 1 : proton; iso = 2 : neutron) as function of Q_sqr(in GeV^2). */ double G_E(int iso, double Q_sqr) { switch(iso) { case 1 : /* proton */ { int choice; choice = 1; switch(choice) { case 1: /* dipole form factor */ { double M_V, corr; M_V = 0.843; corr = 1. - 0.13 * pow(Q_sqr,2.) + 0.028 * pow(Q_sqr,3.); return 1. / pow( 1. + Q_sqr / pow(M_V, 2.) , 2.); break; } case 2: /* The following option returns the proton electric form factor as function of Q_sqr(in GeV^2) fitted to experimental data, P.E. Bosted, PRC 51, 409 (1995). */ { double Q_sqrt; if(Q_sqr<0) Q_sqr = 0.0; Q_sqrt = sqrt(Q_sqr); return 1. / ( 1. + 0.62 * Q_sqrt + 0.68 * Q_sqr + 2.80 * pow(Q_sqrt,3.) + 0.83 * pow(Q_sqr,2.) ); break; } case 3: /* The following option returns the proton electric form factor as function of Q_sqr(in GeV^2) using the parametrization of Hoehler */ { double Q; if(Q_sqr < 0.) Q_sqr = 0.0; /* Probleme d'arrondi pour les photons reels */ Q = Q_sqr * 25.767; /* factor 1/(0.197)^2 to convert from GeV^2 to fm^-2 */ return 0.312/(1+Q/6.) + 1.312/(1+Q/15.02) - 0.709/(1+Q/44.08) + 0.085/(1+Q/154.2); break; } } break; } case 2 : /* neutron */ { int choice; choice = 1; switch(choice) { case 1: /* dipole form factor */ { double M_V, a, b, tau; M_V = 0.843; a = 1.25; b = 18.3; tau = Q_sqr / pow(2. * NU_M, 2.); return - a * N_MAGN * tau / (1. + b * tau) * 1. / pow( 1. + Q_sqr / pow(M_V, 2.) , 2.); break; } case 2: { return 0.; break; } } break; } } } /* The function G_M() returns the magnetic form factor of a nucleon (iso = 1 : proton; iso = 2 : neutron) as function of Q_sqr(in GeV^2). */ double G_M(int iso, double Q_sqr) { switch(iso) { case 1: /* proton */ { int choice; choice = 1; switch(choice) { case 1: /* dipole form factor */ { double M_V = 0.843; return P_MAGN / pow( 1. + Q_sqr / pow(M_V, 2.) , 2.); break; } case 2: /* The following option returns the proton magnetic form factor as function of Q_sqr(in GeV^2) fitted to experimental data, P.E. Bosted, PRC 51, 409 (1995). */ { double Q_sqrt; if(Q_sqr<0) Q_sqr = 0.0; Q_sqrt = sqrt(Q_sqr); return P_MAGN / ( 1. + 0.35 * Q_sqrt + 2.44 * Q_sqr + 0.50 * pow(Q_sqrt,3.) + 1.04 * pow(Q_sqr,2.) + 0.34 * pow(Q_sqrt,5.) ); break; } case 3: /* The following option returns the proton magnetic form factor as function of Q_sqr(in GeV^2) using the parametrization of Hoehler */ { double Q; if(Q_sqr < 0.) Q_sqr = 0.0; /* Probleme d'arrondi pour les photons reels */ Q = Q_sqr * 25.767; /* factor 1/(0.197)^2 to convert from GeV^2 to fm^-2 */ return P_MAGN * ( 0.694/(1+Q/8.5) + 0.719/(1+Q/15.02) - 0.418/(1+Q/44.08) + 0.005/(1+Q/355.2) ); break; } } break; } case 2 : /* neutron */ { int choice; choice = 1; switch(choice) { case 1: /* dipole form factor */ { double M_V = 0.843; return N_MAGN / pow( 1. + Q_sqr / pow(M_V, 2.) , 2.); break; } case 2: /* The following option returns the neutron magnetic form factor as function of Q_sqr(in GeV^2) fitted to experimental data, P.E. Bosted, PRC 51, 409 (1995). */ { double Q_sqrt; if(Q_sqr<0) Q_sqr = 0.0; Q_sqrt = sqrt(Q_sqr); return N_MAGN / ( 1. - 1.74 * Q_sqrt + 9.29 * Q_sqr - 7.63 * pow(Q_sqrt,3.) + 4.63 * pow(Q_sqr,2.) ); break; } } break; } } } /**************************************************************************/ /**************************************************************************/ /* The function form_factor_G_A() returns the isovector axial form factor of a nucleon as function of Q_sqr(in GeV^2). For parametrization, see PRD35 (1987) 785. */ double form_factor_G_A(double Q_sqr) { double M_A = 1.03; return g_AXIAL / pow( 1. + Q_sqr / pow(M_A, 2.) , 2.); } /**************************************************************************/ /* The function form_factor_G_P() returns the isovector induced pseudoscalar form factor of a nucleon as function of t (in GeV^2). Pion pole parametrization */ double form_factor_G_P(double t) { double M_pion = 0.13498; return g_AXIAL * pow(2. * NU_M,2.) / (-t + pow(M_pion,2.)); } /**************************************************************************/ /**************************************************************************/ /* The function form_factor_F1_strange() returns the Dirac strange form factor of a nucleon as function of Q_sqr(in GeV^2) according to the parametrization of Hammer, Meissner and Drechsel, Phys.Lett. B367 (1996) 323. */ double form_factor_F1_strange(double Q_sqr) { double eps, kg1, eta1, A1s; double pole_phi, pole_omega, pole_sp; eps = 0.055; kg1 = 5.36; eta1 = 0.38; pole_phi = sin(eps + eta1) * cos(eps) / (- Q_sqr - pow(M_PHI_POLE,2.)) * Linv_pqcd(pow(M_PHI_POLE,2.)); pole_omega = - cos(eps + eta1) * sin(eps) / (- Q_sqr - pow(M_OMEGA_POLE,2.)) * Linv_pqcd(pow(M_OMEGA_POLE,2.)); A1s = - kg1 * ( sin(eps + eta1) * cos(eps) * Linv_pqcd(pow(M_PHI_POLE,2.)) - cos(eps + eta1) * sin(eps) * Linv_pqcd(pow(M_OMEGA_POLE,2.)) ) / Linv_pqcd(pow(M_Sp_POLE,2.)); pole_sp = Q_sqr * A1s / (- Q_sqr - pow(M_Sp_POLE,2.)) * Linv_pqcd(pow(M_Sp_POLE,2.)); return ( Q_sqr * kg1 * (pole_phi + pole_omega) + pole_sp) / Linv_pqcd(Q_sqr); } /* The function form_factor_F2_strange() returns the Pauli strange form factor of a nucleon as function of Q_sqr(in GeV^2) according to the parametrization of Hammer, Meissner and Drechsel, Phys.Lett. B367 (1996) 323. */ double form_factor_F2_strange(double Q_sqr) { double eps, kg2, eta2, A2s; double pole_phi, pole_omega, pole_sp; eps = 0.055; kg2 = -0.93; eta2 = 0.50; pole_phi = sin(eps + eta2) * cos(eps) * pow(M_PHI_POLE,2.) / (- Q_sqr - pow(M_PHI_POLE,2.)) * Linv_pqcd(pow(M_PHI_POLE,2.)); pole_omega = - cos(eps + eta2) * sin(eps) * pow(M_OMEGA_POLE,2.) / (- Q_sqr - pow(M_OMEGA_POLE,2.)) * Linv_pqcd(pow(M_OMEGA_POLE,2.)); A2s = - kg2 * ( sin(eps + eta2) * cos(eps) * pow(M_PHI_POLE,2.) * Linv_pqcd(pow(M_PHI_POLE,2.)) - cos(eps + eta2) * sin(eps) * pow(M_OMEGA_POLE,2.) * Linv_pqcd(pow(M_OMEGA_POLE,2.)) ) / pow(M_Sp_POLE,2.) / Linv_pqcd(pow(M_Sp_POLE,2.)); pole_sp = - pow(M_Sp_POLE,2.) * A2s / (- Q_sqr - pow(M_Sp_POLE,2.)) * Linv_pqcd(pow(M_Sp_POLE,2.)); return ( - kg2 * (pole_phi + pole_omega) + pole_sp) / Linv_pqcd(Q_sqr); } double Linv_pqcd(double Q_sqr) { return pow(log((LAMBDA_SQR + Q_sqr)/ Q0_SQR), ANOM_DIM); }