File indexing completed on 2026-09-27 09:14:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef LAGER_PHYSICS_VM_LOADED
0021 #define LAGER_PHYSICS_VM_LOADED
0022
0023 #include <TMath.h>
0024 #include <cmath>
0025
0026 #include <lager/physics/kinematics.hh>
0027
0028
0029
0030
0031
0032 namespace lager {
0033 namespace physics {
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 inline double R_vm_martynov(const double Q2, const double Mv, const double c,
0058 const double n) {
0059 const double Mv2 = Mv * Mv;
0060 return pow((c * Mv2 + Q2) / (c * Mv2), n) - 1.;
0061 }
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 inline double dipole_ff_vm(const double Q2, const double Mv, const double n) {
0088 const double Mv2 = Mv * Mv;
0089 return pow(Mv2 / (Mv2 + Q2), n);
0090 }
0091 inline double multipole_ff_vm(const double Q2, const double Mv,
0092 const double n) {
0093 return dipole_ff_vm(Q2, Mv, n);
0094 }
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 inline double dsigma_dt_vm_brodsky(const double s, const double t,
0123 const double Mt, const double Mv,
0124 const double b, const double c2g,
0125 const double c3g = 0) {
0126 const double Mt2 = Mt * Mt;
0127 const double Mv2 = Mv * Mv;
0128 const double x = (2. * Mt * Mv + Mv2) / (s - Mt2);
0129
0130 const double ff = exp(b * t);
0131
0132 const double v = 1. / (16. * TMath::Pi());
0133
0134 const double A2g = c2g * v * (1 - x) * (1 - x) / Mv2;
0135
0136 const double A3g = c3g * v / (Mv2 * Mv2);
0137 return (A2g + A3g) * ff;
0138 }
0139 inline double dsigma_dexp_bt_vm_brodsky(const double s, const double Mt,
0140 const double Mv, const double b,
0141 const double c2g,
0142 const double c3g = 0) {
0143 const double Mt2 = Mt * Mt;
0144 const double Mv2 = Mv * Mv;
0145 const double x = (2. * Mt * Mv + Mv2) / (s - Mt2);
0146
0147 const double ff = 1.;
0148
0149 const double v = 1. / (16. * TMath::Pi());
0150
0151 const double A2g = c2g * v * (1 - x) * (1 - x) / Mv2;
0152
0153 const double A3g = c3g * v / (Mv2 * Mv2);
0154
0155 const double jacobian = 1 / b;
0156 return (A2g + A3g) * ff * jacobian;
0157 }
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 inline double sigmaT_phi_clas(const double Q2, const double W, const double Mt,
0170 const double Mv, const double alpha_1,
0171 const double alpha_2, const double alpha_3,
0172 const double nu_T) {
0173
0174 const double Wth = Mt + Mv;
0175 const double cT =
0176 alpha_1 * pow((1 - Wth * Wth / (W * W)), alpha_2) * pow(W, alpha_3);
0177 const double sigmaT = cT * multipole_ff_vm(Q2, Mv, nu_T);
0178 return sigmaT;
0179 }
0180 inline double R_phi_clas(const double Q2, const double Mv, const double c_R) {
0181 const double Mv2 = Mv * Mv;
0182 return c_R * Q2 / Mv2;
0183 }
0184
0185 inline double exp_ff_normalized(const double Q2, const double W, const double t,
0186 const double Mt, const double Mv,
0187 const double B0, const double alphaP) {
0188 const double B = B0 + 4 * alphaP * std::log(W);
0189 const double F = exp(B * t);
0190 const double t_min = t_range(W * W, Q2, Mt, Mv, Mt).max;
0191 const double F_int = exp(B * t_min) / B;
0192 return F / F_int;
0193 }
0194 inline double dipole_ff_normalized(const double Q2, const double W,
0195 const double t, const double Mt,
0196 const double Mv, const double Mg2) {
0197 const double Mg8 = pow(Mg2, 4);
0198 const double F = Mg8 / pow(Mg2 - t, 4);
0199 const double t_min = t_range(W * W, Q2, Mt, Mv, Mt).max;
0200 const double F_int = Mg8 / (3 * pow(Mg2 - t_min, 3));
0201 return F / F_int;
0202 }
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220 inline double vm_decay_scalars(const double cth, const double phi,
0221 const double sdme_04_00, const double sdme_04_10,
0222 const double sdme_04_1m1) {
0223 const double theta = acos(cth);
0224 const double sth = sin(theta);
0225 const double factor = 3 / (4. * TMath::Pi());
0226 const double t1 = 0.5 * (1 - sdme_04_00);
0227 const double t2 = 0.5 * (3 * sdme_04_00 - 1) * cth * cth;
0228 const double t3 =
0229 -1 * TMath::Sqrt2() * sdme_04_10 * sin(2 * theta) * cos(phi);
0230 const double t4 = -1 * sdme_04_1m1 * sth * sth * cos(2 * phi);
0231 return t1 + t2 + t3 + t4;
0232 }
0233 inline double vm_decay_fermions(const double cth, const double phi,
0234 const double sdme_04_00,
0235 const double sdme_04_10,
0236 const double sdme_04_1m1) {
0237 const double theta = acos(cth);
0238 const double sth = sin(theta);
0239 const double factor = 3 / (4. * TMath::Pi());
0240 const double t1 = 0.5 * (1 + sdme_04_00);
0241 const double t2 = -0.5 * (3 * sdme_04_00 - 1) * cth * cth;
0242 const double t3 = 1 * TMath::Sqrt2() * sdme_04_10 * sin(2 * theta) * cos(phi);
0243 const double t4 = 1 * sdme_04_1m1 * sth * sth * cos(2 * phi);
0244 LOG_JUNK2("vm_decay_fermions",
0245 "cos(theta): " + std::to_string(cth) +
0246 ", theta: " + std::to_string(theta) +
0247 ", t1: " + std::to_string(t1) + ", t2: " + std::to_string(t2) +
0248 ", t3: " + std::to_string(t3) + ", t4: " + std::to_string(t4));
0249 return t1 + t2 + t3 + t4;
0250 }
0251
0252 }
0253 }
0254
0255 #endif