Пример #1
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.
Пример #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
Пример #3
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
Пример #4
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
Пример #5
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.
Пример #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
Пример #7
0
    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
Пример #8
0
    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))
Пример #9
0
    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
Пример #10
0
	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
Пример #11
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)
Пример #12
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)
Пример #13
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)
Пример #14
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)
Пример #15
0
	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)
Пример #16
0
    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)
Пример #17
0
    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
Пример #18
0
	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
Пример #19
0
 def k_bounds(self):
     return map(gg.s2k, (4 * gg.M_pi**2, gg.shift_mass(self.k_max)**2))