Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-27 09:14:59

0001 // lAger: General Purpose l/A-event Generator
0002 // Copyright (C) 2016-2021 Sylvester Joosten <sjoosten@anl.gov>
0003 //
0004 // This file is part of lAger.
0005 //
0006 // lAger is free software: you can redistribute it and/or modify
0007 // it under the terms of the GNU General Public License as published by
0008 // the Free Shoftware Foundation, either version 3 of the License, or
0009 // (at your option) any later version.
0010 //
0011 // lAger is distributed in the hope that it will be useful,
0012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 // GNU General Public License for more details.
0015 //
0016 // You should have received a copy of the GNU General Public License
0017 // along with lAger.  If not, see <https://www.gnu.org/licenses/>.
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 // VM Physics routines
0030 // =============================================================================
0031 
0032 namespace lager {
0033 namespace physics {
0034 
0035 // =============================================================================
0036 // R VM parameterization
0037 //
0038 // from
0039 //      Martynov, et. al., “Photoproduction of Vector Mesons in the Soft Dipole
0040 //      Pomeron Model.” PRD 67 (7), 2003. doi:10.1103/PhysRevD.67.074023.
0041 // eq. 31.
0042 //
0043 // J/psi parameters c(or a) and n
0044 //  * c: 2.164
0045 //  * n: 2.131
0046 // from eq. 18:
0047 //
0048 //      R. Fiore et al., "Exclusive Jpsi electroproduction in a dual model."
0049 //      PRD80:116001, 2009"
0050 //
0051 // Arguments:
0052 //  * Q2: -photon mass squared
0053 //  * Mv: VM mass
0054 //  * c: multiplicative parameter
0055 //  * n: power constant
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 // Dipole (multipole) form factor to relate real photo-production cross section
0065 // to sigma_T
0066 //
0067 // This form deviates from the classical VMD form (which has a fixed power of
0068 // 2), to better fit the world data for rho0 production.
0069 //
0070 // Cf.:
0071 //      A. Airapetian et al, "Exclusive Leptoproduction of rho0 Mesons on
0072 //      Hydrogen at Intermediate W Values", EPJ C 17 (2000) 389-398
0073 //
0074 //      Adams et al., "Diffractive production of ρ0 mesons in muon–proton
0075 //      interactions 470 GeV", ZPC74 (1997) 237-261.
0076 //
0077 // An optimized power of n=2.575 was taken from a fit result from
0078 //
0079 //      M Tytgat, "Diffractive production of ρ0 and ω vector mesons at HERMES",
0080 //      DESY-Thesis 2001-018 (2001)
0081 //
0082 // Arguments:
0083 //  * Q2: -photon mass squared
0084 //  * Mv: VM mass
0085 //  * n: power constant (2 for VMD; 2.575 from HERMES fit)
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 // t-channel photo-production cross section for heavy vector mesons
0098 // Values are in units of nb/GeV^2.
0099 //
0100 // Formulism from
0101 //      brodsky et. al., Phys.Lett.B498:23-28,2001
0102 //      (http://arxiv.org/abs/hep-ph/0010343)
0103 //
0104 // Both dsigma/dt and dsigma/d(exp_bt) are available. The latter is useful for a
0105 // more efficient MC implementation
0106 //
0107 // Parameter values from Eric's fit to the J/psi world data:
0108 //  * c2g: 6.499e3 [GeV^-2]
0109 //  * c3g: 2.894e3 [GeV^-2]
0110 //  * b: 1.13 [GeV^-2]
0111 //
0112 // Arguments:
0113 //  * s: photon-target system invariant mass squared
0114 //  * t: mandelstam t
0115 //  * Mt: target mass
0116 //  * Mv: VM mass
0117 //  * b: b-parameter of target form-factor
0118 //  * c2g: 2-gluon constant
0119 //  * c3g: 3-gluon constant
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   // form factor
0130   const double ff = exp(b * t);
0131   // phase space factor
0132   const double v = 1. / (16. * TMath::Pi());
0133   // 2 gluon term
0134   const double A2g = c2g * v * (1 - x) * (1 - x) / Mv2;
0135   // 3 gluon term
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   // form factor (absorbed by the jacobian for d(bt) -> d(exp_bt)
0147   const double ff = 1.;
0148   // phase space factor
0149   const double v = 1. / (16. * TMath::Pi());
0150   // 2 gluon term
0151   const double A2g = c2g * v * (1 - x) * (1 - x) / Mv2;
0152   // 3 gluon term
0153   const double A3g = c3g * v / (Mv2 * Mv2);
0154   // extra jacobian for dt -> d(bt)
0155   const double jacobian = 1 / b;
0156   return (A2g + A3g) * ff * jacobian;
0157 }
0158 
0159 // =============================================================================
0160 // Electroproduction of phi mesons according the formalism
0161 // of the CLAS12 exclusive phi meson electroproduction proposal
0162 // https://www.jlab.org/exp_prog/proposals/12/PR12-12-007.pdf
0163 //
0164 // This is the transverse part of the cross section, also valid for
0165 // photoproduction. Note that this is the integrated cross section, which needs
0166 // to be multiplied with a normalized form factor F(t)/F_int for a differential
0167 // cross section
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) { //, const double B0,
0173   // double alpha_prime) {
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 // General VM decay distributions in the VM helicity frame for the
0205 // cases of  (1) VM --> Scaler+scaler
0206 //       and (2) VM -> fermion+fermion
0207 // Note that case (1) corresponds equation 31 (for W0) in
0208 //     K. Schilling et al, Nucl.Phys.B 15 (1970) 397-412
0209 // while case (2) has the corresponding formula for decay in spin-1/2
0210 // particles
0211 //
0212 // Both expressions are a function of the decay angles in the VM helicity
0213 // frame
0214 //  cth: cosine of the polar angle
0215 //  phi: azimuthal angle with the VM production plane
0216 //  sdme_04_00:  r^04_00 (=rho^0_00 for photoproduction)
0217 //  sdme_04_10:  Re(r^04_10) (=Re(rho^0_10) for photoproduction)
0218 //  sdme_04_1m1: r^04_1-1 (=rho^0_1-1 for photoproduction)
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 } // namespace physics
0253 } // namespace lager
0254 
0255 #endif