File indexing completed on 2025-08-05 08:12:06
0001
0002
0003 double
0004 get_parametrization_F2(double x, double Q2)
0005 {
0006
0007 double a1 = -0.24997;
0008 double a2 = 2.3963;
0009 double a3 = 0.23643;
0010 double a4 = 0.08498;
0011 double a5 = 3.8608;
0012 double a6 = -7.4143;
0013 double a7 = 3.4342;
0014 double b1 = 0.11411;
0015 double b2 = -2.2356;
0016 double b3 = 0.03115;
0017 double b4 = 0.02135;
0018 double c1 = -1.4517;
0019 double c2 = 8.4745;
0020 double c3 = -34.379;
0021 double c4 = 45.888;
0022
0023 double A = pow(x, a1) * pow((1 - x), a2) * (a3 * pow((1 - x), 0) +
0024 a4 * pow((1 - x), 1) +
0025 a5 * pow((1 - x), 2) +
0026 a6 * pow((1 - x), 3) +
0027 a7 * pow((1 - x), 4));
0028 double B = b1 + b2 * x + (b3 / (x + b4));
0029 double C = ( c1 * pow(x, 1) +
0030 c2 * pow(x, 2) +
0031 c3 * pow(x, 3) +
0032 c4 * pow(x, 4) );
0033 double Q02 = 20;
0034 double lambda2 = 1;
0035
0036 double F2_fit = A * pow( ( log(Q2 / lambda2) / log(Q02 / lambda2) ), B) * (1 + (C / Q2));
0037
0038 return F2_fit;
0039 }
0040
0041
0042
0043 double
0044 get_parametrization_R(double x, double Q2)
0045 {
0046 double R_tmp = 1;
0047
0048 if ( x < 0.12 )
0049 {
0050 R_tmp = 1.509 * pow(x, -0.0458) * pow((1-x), -0.0084) / log((Q2 / 0.04)) - 0.203;
0051 }
0052 else
0053 {
0054
0055 R_tmp = 1.509 * pow(x, -0.0458) * pow((1-x), -0.0084) / log((Q2 / 0.04)) - 0.203;
0056 }
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 return R_tmp;
0068 }
0069
0070
0071
0072 double
0073 get_depolarization_factor(double x, double Q2, double y, double mlepton=0.000511)
0074 {
0075
0076 double M = 0.938;
0077 double ml = mlepton;
0078
0079 double gamma2 = pow(( 2 * M * x ), 2) / Q2;
0080
0081 double R = get_parametrization_R(x, Q2);
0082
0083
0084
0085
0086 double D_num = (
0087 y * ( 2 - y ) * ( 1 + gamma2 * y / 2. ) - 2 * pow(y, 3) * pow(ml, 2) / Q2
0088 );
0089 double D_denom = (
0090 pow(y, 2) * ( 1 + gamma2 ) * (1 - 2 * pow(ml, 2) / Q2 )
0091 + 2 * (1 - y - gamma2 * pow(y, 2) / 4 ) * (1 + R )
0092 );
0093 double D = D_num / D_denom;
0094
0095 return D;
0096 }
0097
0098
0099
0100 double
0101 get_beam_polarization()
0102 {
0103
0104 double pol_electron = 0.7;
0105 double pol_proton = 0.7;
0106 double pol_prod = pol_electron * pol_proton;
0107
0108 return pol_prod;
0109 }
0110
0111
0112
0113 double
0114 get_g1_value( double x_val, double Q2_val, double y_val, double mlepton=0.000511 )
0115 {
0116
0117 double F2 = get_parametrization_F2(x_val, Q2_val);
0118 double R = get_parametrization_R(x_val, Q2_val);
0119
0120
0121 double D = get_depolarization_factor( x_val, Q2_val, y_val, mlepton );
0122
0123
0124
0125
0126
0127
0128
0129
0130 double A1_Ernst = 0.033;
0131 double A_parallel = D * A1_Ernst;
0132
0133 double g1_val = 1. / (2 * x_val * (1 + R)) * F2 * A_parallel / D;
0134
0135
0136 return 0;
0137 }
0138
0139
0140
0141 double
0142 get_g1_sigma( double x_val, double Q2_val, double y_val, double N_val, double mlepton=0.000511 )
0143 {
0144
0145 double F2 = get_parametrization_F2(x_val, Q2_val);
0146 double R = get_parametrization_R(x_val, Q2_val);
0147
0148
0149 double D = get_depolarization_factor( x_val, Q2_val, y_val, mlepton );
0150
0151
0152 double pol_prod = get_beam_polarization();
0153
0154 double A_parallel_sig = (sqrt(N_val) / N_val) * (1. / pol_prod);
0155 double g1_sig = 1. / (2 * x_val * (1 + R)) * F2 * A_parallel_sig / D;
0156
0157 return g1_sig;
0158 }
0159
0160
0161
0162 double
0163 get_A1_sigma( double x_val, double Q2_val, double y_val, double N_val, double mlepton=0.000511 )
0164 {
0165
0166 double M = 0.938;
0167
0168 double gamma2 = pow(( 2 * M * x_val ), 2) / Q2_val;
0169
0170 double F2 = get_parametrization_F2(x_val, Q2_val);
0171 double R = get_parametrization_R(x_val, Q2_val);
0172
0173 double F1 = ( ( 1 + gamma2 ) / ( 2 * x_val * ( 1 + R ) ) ) * F2;
0174
0175
0176 double g1_sig = get_g1_sigma( x_val, Q2_val, y_val, N_val, mlepton );
0177 double A1_sig = g1_sig / F1;
0178
0179 return A1_sig;
0180 }
0181
0182
0183
0184 void
0185 calculate_g1( double x_val, double Q2_val, double y_val, double N_val, double mlepton=0.000511 )
0186 {
0187 double g1_val = get_g1_value(x_val, Q2_val, y_val, mlepton);
0188 double g1_sig = get_g1_sigma(x_val, Q2_val, y_val, N_val, mlepton);
0189 double F2 = get_parametrization_F2(x_val, Q2_val);
0190 double R = get_parametrization_R(x_val, Q2_val);
0191 double D = get_depolarization_factor( x_val, Q2_val, y_val, mlepton );
0192
0193
0194 cout << "-----------------------------------------------------------------------" << endl;
0195 cout << "x = " << x_val << " , Q2 = " << Q2_val << " , y = " << y_val << " , N = " << N_val << endl;
0196 cout << "F2 = " << F2 << ", R = " << R << ", D = " << D << endl;
0197 cout << "==> g1 = " << g1_val << " +/- " << g1_sig << endl;
0198 cout << "-----------------------------------------------------------------------" << endl;
0199
0200 return;
0201 }