Beispiel #1
0
    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
Beispiel #2
0
    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.
Beispiel #3
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.
Beispiel #4
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
Beispiel #5
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
Beispiel #6
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
Beispiel #7
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
Beispiel #8
0
	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)
Beispiel #9
0
	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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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.