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 f(self, k, a): r""" function of a form: .. math:: f_1(k) \, \frac{1}{1 + \mathrm{exp}(\frac{s - m^2}{a})} \; + \; f_2(k) \, \frac{\mathrm{exp}(\frac{s - m^2}{a})}{1 + \mathrm{exp}(\frac{s - m^2}{a})} Note that `m` is shifted according to meson mass shift. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` a : float width of the transition (a single parameter of the fit) Returns ------- float function value at `k` and with specified `a` """ numpy.seterr( all='ignore' ) # ignore the warning about overflow in exp and underflow in double_scalars e = 1. / (1. + exp((gg.k2s(k) - gg.shift_mass(self._m)**2) / a)) e1 = 1. - e numpy.seterr(all='warn') if e == 0 or e1 == 1: return self._f2(k) if e == 1 or e1 == 0: return self._f1(k) r = e * self._f1(k) + e1 * self._f2(k) return r
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 f(self, k, a): r""" function of a form: .. math:: f_1(k) \, \frac{1}{1 + \mathrm{exp}(\frac{s - m^2}{a})} \; + \; f_2(k) \, \frac{\mathrm{exp}(\frac{s - m^2}{a})}{1 + \mathrm{exp}(\frac{s - m^2}{a})} Note that `m` is shifted according to meson mass shift. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` a : float width of the transition (a single parameter of the fit) Returns ------- float function value at `k` and with specified `a` """ numpy.seterr(all='ignore') # ignore the warning about overflow in exp and underflow in double_scalars e = 1./(1. + exp((gg.k2s(k) - gg.shift_mass(self._m)**2)/a)) e1 = 1. - e numpy.seterr(all='warn') if e == 0 or e1 == 1: return self._f2(k) if e == 1 or e1 == 0: return self._f1(k) r = e * self._f1(k) + e1 * self._f2(k) return r
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 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_bounds(self): r""" get current bounds of the region. Here the lower bound is shifted according to :math:`\rho`-meson mass shift model for mesons. Returns ------- tuple (k_min, k_max) """ return gg.s2k(gg.shift_mass(self.k_min)**2), inf
def k_bounds(self): r""" get current bounds of the region. Here the lower bound is shifted as a pion mass and the upper bound is shifted according to :math:`\rho`-meson mass shift model for mesons. Returns ------- tuple (k_min, k_max) """ return map(gg.s2k, (4 * gg.M_pi**2, gg.shift_mass(self.k_max)**2))
def shift_W_gg(self, *p): r""" shift :math:`\Gamma_{\gamma\gamma}` *linearly* with the pion mass shift. Parameters ---------- p : args, optional `m` (physical :math:`m`), `W_tot` (physical :math:`\Gamma_{tot}`) and `W_gg` (physical :math:`\Gamma_{gg}`) Returns ------- float shifted :math:`\Gamma_{\gamma\gamma}` """ m, _, W_gg = self.full_p(p) return W_gg * gg.shift_mass(m) / m
def shift_W_gg(self, *p): r""" shift :math:`\Gamma_{\gamma\gamma}` *linearly* with the pion mass shift. Parameters ---------- p : args, optional `m` (physical :math:`m`), `W_tot` (physical :math:`\Gamma_{tot}`) and `W_gg` (physical :math:`\Gamma_{gg}`) Returns ------- float shifted :math:`\Gamma_{\gamma\gamma}` """ m, _, W_gg = self.full_p(p) return W_gg * gg.shift_mass(m)/m
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 breit_wigner(self, k, *p): r""" a function of a relativistic Breit-Wigner form (multiplied by some convinience factor): .. math:: \frac{1}{2} 16\pi \frac{\Gamma_{tot}}{(s - m^2)^2 + m^2\Gamma_{tot}^2} \;\; [\mu b / GeV] Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` p : args, optional explicitly specified list of fitting parameters: `m` (physical :math:`m`) and `W_tot` (physical :math:`\Gamma_{tot}`) Returns ------- float function value at specified `k`, in :math:`[\mu b / GeV]` """ m, w = self.full_p(p)[:2] m = gg.shift_mass(m) s = gg.k2s(k) return 10**4 * hc**2 * 8 * pi * w / ((s - m*m)**2 + w*w * m*m)
def breit_wigner(self, k, *p): r""" a function of a relativistic Breit-Wigner form (multiplied by some convinience factor): .. math:: \frac{1}{2} 16\pi \frac{\Gamma_{tot}}{(s - m^2)^2 + m^2\Gamma_{tot}^2} \;\; [\mu b / GeV] Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` p : args, optional explicitly specified list of fitting parameters: `m` (physical :math:`m`) and `W_tot` (physical :math:`\Gamma_{tot}`) Returns ------- float function value at specified `k`, in :math:`[\mu b / GeV]` """ m, w = self.full_p(p)[:2] m = gg.shift_mass(m) s = gg.k2s(k) return 10**4 * hc**2 * 8 * pi * w / ((s - m * m)**2 + w * w * m * m)
def fall_off(self, k, *p): r""" non-model empirical fall-off to 0 function of a form: .. math:: f(s) = 0 \;\;\;\;\;\; \mathrm{for} \;\; s \le 4M_{\pi}^2 \; , .. math:: f(s) = 1 - 2 \cdot exp\left(-\frac{\ln(2)}{\left(1 - \frac{2(s - 4M_{\pi}^2)}{m^2 - 4M_{\pi}^2}\right)}\right) \;\;\; \mathrm{for} \;\; 4M_{\pi}^2 < s < (m^2 + 4M_{\pi}^2)/2 \; , .. math:: f(s) = 1 \;\;\;\;\;\; \mathrm{for} \;\; s \ge (m^2 + 4M_{\pi}^2)/2 \; , To be multiplied by a Breit-Wigner resonance, so that it will be zero below 2-pion production threshold. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` p : args, optional explicitly specified list of fitting parameters: `m` (physical :math:`m`) and `W_tot` (physical :math:`\Gamma_{tot}`) Returns ------- float function value at specified `k`, in :math:`[\mu b / GeV]` """ m = gg.shift_mass(self.full_p(p)[0]) s = gg.k2s(k) s_0 = 4 * gg.M_pi**2 s_1 = (m**2 + s_0) * 0.5 if s <= s_0: return 0. elif s >= s_1: return 1. else: numpy.seterr( all='ignore') # ignore the warning about underflow in exp r = 1 - 2 * exp(-log(2) / abs(1 - (s - s_0) / (s_1 - s_0))) numpy.seterr(all='warn') return r
def fall_off(self, k, *p): r""" non-model empirical fall-off to 0 function of a form: .. math:: f(s) = 0 \;\;\;\;\;\; \mathrm{for} \;\; s \le 4M_{\pi}^2 \; , .. math:: f(s) = 1 - 2 \cdot exp\left(-\frac{\ln(2)}{\left(1 - \frac{2(s - 4M_{\pi}^2)}{m^2 - 4M_{\pi}^2}\right)}\right) \;\;\; \mathrm{for} \;\; 4M_{\pi}^2 < s < (m^2 + 4M_{\pi}^2)/2 \; , .. math:: f(s) = 1 \;\;\;\;\;\; \mathrm{for} \;\; s \ge (m^2 + 4M_{\pi}^2)/2 \; , To be multiplied by a Breit-Wigner resonance, so that it will be zero below 2-pion production threshold. Parameters ---------- k : float :math:`\sqrt{2 q_1 \cdot q_2}, \; [GeV]` p : args, optional explicitly specified list of fitting parameters: `m` (physical :math:`m`) and `W_tot` (physical :math:`\Gamma_{tot}`) Returns ------- float function value at specified `k`, in :math:`[\mu b / GeV]` """ m = gg.shift_mass(self.full_p(p)[0]) s = gg.k2s(k) s_0 = 4*gg.M_pi**2 s_1 = (m**2 + s_0)*0.5 if s <= s_0: return 0. elif s >= s_1: return 1. else: numpy.seterr(all='ignore') # ignore the warning about underflow in exp r = 1 - 2*exp(- log(2) / abs(1 - (s - s_0)/(s_1 - s_0))) numpy.seterr(all='warn') return r
def k_bounds(self): return map(gg.s2k, (4 * gg.M_pi**2, gg.shift_mass(self.k_max)**2))