def integral_f(self, k): r""" integrate cross section to obtain forward amplitude: .. math:: Re(f(\nu)-f(0)) = \frac{4\nu^2}{\pi} \int_{\nu_{min}}^{\nu_{max}} \frac{\sqrt{X(\nu')}}{\nu'} \frac{d\nu'}{(\nu'^2-\nu^2)} \sigma_{TT}(\nu'), where :math:`\nu_{min}` and :math:`\nu_{max}` are bounds of the integration region. Note that :math:`\pi` and :math:`\eta'` :math:`\delta`-contributions are *not* included here. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` Returns ------- tuple value of Re(f(k)-f(0)), some error Notes ----- Divergency extraction is done here (when :math:`\nu` is close enough to threshold): .. math:: I = \frac{4\nu^2}{\pi} \left(\int_{\nu_{min}}^{\nu_{max}} \frac{(a(\nu') - a(\nu))}{(\nu'^2-\nu^2)} d\nu' \; + \; \frac{a(\nu)}{2\nu} \ln\left|\frac{\nu'-\nu}{\nu'+\nu}\right| \Big|_{\nu_{min}}^{\nu_{max}} \right), where .. math:: a(\nu) = \frac{\sqrt{X(\nu)}}{\nu}\sigma(\nu). """ nu = gg.k2nu(k) nu0, nu1 = map(gg.k2nu, self.k_bounds()) a = lambda x: self.cs(gg.nu2k(x)) * gg.nu2X(x)**0.5 / x if gg.nu2X(nu) <= 0: # temporar hack: separating integration region q1 = quad(lambda p: a(p) / (p**2 - nu**2), nu0, 4 * nu0)[:2] q2 = quad(lambda p: a(p) / (p**2 - nu**2), 4 * nu0, nu1)[:2] r, err = map(sum, zip(q1, q2)) else: a_nu = a(nu) singular = lambda p: 0. if p == inf else log( abs((p - nu) / (p + nu))) / (2 * nu) r, err = quad(lambda p: (a(p) - a_nu) / (p**2 - nu**2), nu0, nu1)[:2] r += a_nu * (singular(nu1) - singular(nu0)) prefactor = 4 * nu**2 / (pi * 10**4 * hc**2 ) # don't forget to convert units return prefactor * r, prefactor * err
def integral_f(self, k): r""" .. math:: 64\pi\frac{\nu^2\Gamma_{\gamma\gamma} X_0}{\nu_0(\nu_0^2-\nu^2)m^3} \left( <\sigma_0 \; \mathrm{fraction}> \cdot \frac{20X_0}{m^4} + <\sigma_2 \; \mathrm{fraction}> \cdot \frac{5\nu_0^2}{X_0} \right) Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` Returns ------- tuple value of Re(f(k)-f(0)), 0. """ m = gg.shift_mass(self.m) W_gg = self.W_gg * m / self.m nu0 = gg.s2nu(m**2) X0 = gg.nu2X(nu0) nu = gg.k2nu(k) FF = 1. / ((1 + gg.Q1 / self.mon_m**2) * (1 + gg.Q2 / self.mon_m**2)) h0 = self.h0_fraction h2 = 1 - h0 return 64 * pi * nu**2 * W_gg * X0 * ( h0 * 20 * X0 / m**4 + h2 * 5 * nu0**2 / X0) / (m**3 * nu0 * (nu0**2 - nu**2)) * FF**2, 0.
def integral_f(self, k): r""" .. math:: 32\pi\frac{\nu^2\Gamma_{\gamma\gamma} X_0}{\nu_0(\nu_0^2-\nu^2)m^3} \left| \frac{F_{Q_1Q_2}}{F_{00}} \right|^2 Note that the mass is shifted and :math:`\Gamma_{\gamma\gamma}` is assumed to be proportional to :math:`m^3`, while :math:`F_{00}` assumed to remain constant. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` Returns ------- tuple value of Re(f(k)-f(0)), 0. """ m = 0.95766 # physical mass mon_m = 0.859 # monopole mass parameter W_gg = 4.3 * 10**-6 # hardcoded physical value of gg-width nu0 = gg.s2nu(gg.shift_mass(m)**2) # note that there's no mistake in shifting the mass and width here X0 = gg.nu2X(nu0) nu = gg.k2nu(k) FF = 1. / ((1 + gg.Q1 / mon_m**2) * (1 + gg.Q2 / mon_m**2)) return 32 * pi * nu**2 * W_gg * X0 * FF**2 / (m**3 * nu0 * (nu0**2 - nu**2)), 0.
def f(self, k): r""" .. math:: \frac{1}{2} \alpha^2 \frac{\pi}{2} \frac{s^2\nu^3}{X^3} \left( \sqrt{a} \left(2 - a + \left(1 - \frac{2X}{s\nu}\right)^2\right) - (1-a)\left(3 - \frac{4X}{s\nu} + a\right)L \right) \left| \frac{F(Q_1, Q_2)}{F(0, 0)} \right|^2, .. math:: L = \ln\left(\frac{1+\sqrt{a}}{\sqrt{1-a}}\right), \;\;\;\;\;\;\; a = \frac{X}{\nu^2} \left(1 - \frac{4m^2}{s}\right), \;\;\;\;\;\;\; X = \nu^2 - Q_1^2 \cdot Q_2^2 """ Q1 = gg.Q1 Q2 = gg.Q2 nu = gg.k2nu(k) X = gg.nu2X(nu) s = gg.k2s(k) s2 = s*s m = gg.M_pi m2 = m*m if s <= 4*m2: return 0. else: a = X*(1 - 4*m2/s)/nu**2 L = log((1 + a**0.5)/(1 - a)**0.5) r = (a**0.5*(2 - a + (1 - 2*X/(s*nu))**2) - (1-a)*(3 + a - 4*X/(nu*s))*L) * s2*nu**3/X**3 return r * (10**4*hc**2*alpha**2*pi/4) * self.form_factor_fraction()**2
def f(self, k): r""" .. math:: \frac{1}{2} \alpha^2 \frac{\pi}{2} \frac{s^2\nu^3}{X^3} \left( \sqrt{a} \left(2 - a + \left(1 - \frac{2X}{s\nu}\right)^2\right) - (1-a)\left(3 - \frac{4X}{s\nu} + a\right)L \right) \left| \frac{F(Q_1, Q_2)}{F(0, 0)} \right|^2, .. math:: L = \ln\left(\frac{1+\sqrt{a}}{\sqrt{1-a}}\right), \;\;\;\;\;\;\; a = \frac{X}{\nu^2} \left(1 - \frac{4m^2}{s}\right), \;\;\;\;\;\;\; X = \nu^2 - Q_1^2 \cdot Q_2^2 """ Q1 = gg.Q1 Q2 = gg.Q2 nu = gg.k2nu(k) X = gg.nu2X(nu) s = gg.k2s(k) s2 = s * s m = gg.M_pi m2 = m * m if s <= 4 * m2: return 0. else: a = X * (1 - 4 * m2 / s) / nu**2 L = log((1 + a**0.5) / (1 - a)**0.5) r = (a**0.5 * (2 - a + (1 - 2 * X / (s * nu))**2) - (1 - a) * (3 + a - 4 * X / (nu * s)) * L) * s2 * nu**3 / X**3 return r * (10**4 * hc**2 * alpha**2 * pi / 4) * self.form_factor_fraction()**2
def k_factor(self, *p): r""" kinematical factor. .. math:: <\sigma_2 \; \mathrm{fraction}> \cdot \frac{2 \nu_0^2}{m^2 \sqrt{X_0}} \; + \; <\sigma_0 \; \mathrm{fraction}> \cdot \frac{8X_0\sqrt{X_0}}{m^6} Note that 2 factors coming from :math:`\sigma_0` and :math:`\sigma_2` are added here. Parameters ---------- p : args, optional `m` (physical :math:`m`) Returns ------- float kinematical factor """ m = gg.shift_mass(self.full_p(p)[0]) nu0 = gg.s2nu(m**2) X0 = gg.nu2X(nu0) h0 = self.h0_fraction h2 = 1. - h0 return h2 * 2*nu0**2/(m**2*X0**0.5) + h0 * 8*X0**1.5/m**6
def k_factor(self, *p): r""" kinematical factor. .. math:: <\sigma_2 \; \mathrm{fraction}> \cdot \frac{2 \nu_0^2}{m^2 \sqrt{X_0}} \; + \; <\sigma_0 \; \mathrm{fraction}> \cdot \frac{8X_0\sqrt{X_0}}{m^6} Note that 2 factors coming from :math:`\sigma_0` and :math:`\sigma_2` are added here. Parameters ---------- p : args, optional `m` (physical :math:`m`) Returns ------- float kinematical factor """ m = gg.shift_mass(self.full_p(p)[0]) nu0 = gg.s2nu(m**2) X0 = gg.nu2X(nu0) h0 = self.h0_fraction h2 = 1. - h0 return h2 * 2 * nu0**2 / (m**2 * X0**0.5) + h0 * 8 * X0**1.5 / m**6
def k_factor(self, *p): r""" kinematical factor. .. math:: \frac{(Q_1^2 - Q_2^2)^2}{m^4} \; \frac{2 \nu_0^2}{m^2 \sqrt{X_0}} Parameters ---------- p : args, optional `m` (physical :math:`m`) Returns ------- float kinematical factor """ m = gg.shift_mass(self.full_p(p)[0]) nu0 = gg.s2nu(m**2) X0 = gg.nu2X(nu0) return (gg.Q1 - gg.Q2)**2 * 2 * nu0**2 / (m**6 * X0**0.5)
def k_factor(self, *p): r""" default kinematical factor: .. math:: \frac{2 \nu_0^2}{m^2 \sqrt{X_0}} Parameters ---------- p : args, optional `m` (physical :math:`m`) Returns ------- float kinematical factor """ m = gg.shift_mass(self.full_p(p)[0]) nu0 = gg.s2nu(m**2) X0 = gg.nu2X(nu0) return 2 * nu0**2 / (m**2 * X0**0.5)
def integral_f(self, k): r""" .. math:: \frac{\alpha^2}{2\pi^2f_\pi^2}\; \frac{\nu^2 X_0}{\nu_0(\nu_0^2-\nu^2)}\; \left| \frac{F_{Q_1Q_2}}{F_{00}} \right|^2 Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` Returns ------- tuple value of Re(f(k)-f(0)), 0. """ mon_m = 0.776 # monopole mass parameter nu = gg.k2nu(k) FF = 1. / ((1 + gg.Q1 / mon_m**2) * (1 + gg.Q2 / mon_m**2)) nu0 = gg.s2nu(gg.M_pi**2) # note that we use same mass for pi+ and pi0 X0 = gg.nu2X(nu0) return 0.5 * (alpha * nu * FF / (pi * gg.f_pi))**2 * X0 / (nu0 * (nu0**2 - nu**2)), 0.