def flatte_lineshape(s, m, g1, g2, ma1, mb1, ma2, mb2): """ Flatte line shape s : squared inv. mass m : resonance mass g1 : coupling to ma1, mb1 g2 : coupling to ma2, mb2 """ mab = atfi.sqrt(s) pab1 = atfk.two_body_momentum(mab, ma1, mb1) rho1 = 2. * pab1 / mab pab2 = atfk.complex_two_body_momentum(mab, ma2, mb2) rho2 = 2. * pab2 / atfi.cast_complex(mab) gamma = (atfi.cast_complex(g1**2 * rho1) + atfi.cast_complex(g2**2) * rho2) / atfi.cast_complex(m) return relativistic_breit_wigner(s, m, gamma)
def nonresonant_lass_lineshape(m2ab, a, r, ma, mb): """ LASS line shape, nonresonant part """ m = atfi.sqrt(m2ab) q = atfk.two_body_momentum(m, ma, mb) cot_deltab = 1. / a / q + 1. / 2. * r * q ampl = atfi.cast_complex(m) / atfi.complex(q * cot_deltab, -q) return ampl
def wigner_capital_d(phi, theta, psi, j, m1, m2): """Calculate Wigner capital-D function. phi, theta, psi : Rotation angles j : spin (in units of 1/2, e.g. 1 for spin=1/2) m1 and m2 : spin projections (in units of 1/2, e.g. 1 for projection 1/2) :param phi: :param theta: :param psi: :param j2: :param m2_1: :param m2_2: """ i = atfi.complex(atfi.const(0), atfi.const(1)) return Exp(-i*atfi.cast_complex(m1/2.*phi)) * \ atfi.cast_complex(wigner_small_d(theta, j, m1, m2)) * \ Exp(-i * atfi.cast_complex(m2 / 2. * psi))
def _model(a1r, a1i, a2r, a2i, a3r, a3i, switches=4 * [1]): a1 = atfi.complex(a1r, a1i) a2 = atfi.complex(a2r, a2i) a3 = atfi.complex(a3r, a3i) ampl = atfi.cast_complex(atfi.ones(m2ab)) * atfi.complex( atfi.const(0.0), atfi.const(0.0)) if switches[0]: ampl += a1 * bw1 * hel_ab if switches[1]: ampl += a2 * bw2 * hel_bc if switches[2]: ampl += a3 * bw3 * hel_ac if switches[3]: ampl += atfi.cast_complex(atfi.ones(m2ab)) * atfi.complex( atfi.const(5.0), atfi.const(0.0)) return atfd.density(ampl)
def relativistic_breit_wigner(m2, mres, wres): """ Relativistic Breit-Wigner """ if wres.dtype is atfi.ctype(): return tf.math.reciprocal( atfi.cast_complex(mres * mres - m2) - atfi.complex(atfi.const(0.), mres) * wres) if wres.dtype is atfi.fptype(): return tf.math.reciprocal(atfi.complex(mres * mres - m2, -mres * wres)) return None
def resonant_lass_lineshape(m2ab, m0, gamma0, a, r, ma, mb): """ LASS line shape, resonant part """ m = atfi.sqrt(m2ab) q0 = atfk.two_body_momentum(m0, ma, mb) q = atfk.two_body_momentum(m, ma, mb) cot_deltab = 1. / a / q + 1. / 2. * r * q phase = atfi.atan(1. / cot_deltab) width = gamma0 * q / m * m0 / q0 ampl = relativistic_breit_wigner(m2ab, m0, width) * atfi.complex( atfi.cos(phase), atfi.sin(phase)) * atfi.cast_complex( m2ab * gamma0 / q0) return ampl
def dabba_lineshape(m2ab, b, alpha, beta, ma, mb): """ Dabba line shape """ mSum = ma + mb m2a = ma**2 m2b = mb**2 sAdler = max(m2a, m2b) - 0.5 * min(m2a, m2b) mSum2 = mSum * mSum mDiff = m2ab - mSum2 rho = atfi.sqrt(1. - mSum2 / m2ab) realPart = 1.0 - beta * mDiff imagPart = b * atfi.exp(-alpha * mDiff) * (m2ab - sAdler) * rho denomFactor = realPart * realPart + imagPart * imagPart ampl = atfi.complex(realPart, imagPart) / atfi.cast_complex(denomFactor) return ampl
def model(x, mrho, wrho, mkst, wkst, a1r, a1i, a2r, a2i, a3r, a3i, switches): a1 = atfi.complex(a1r, a1i) a2 = atfi.complex(a2r, a2i) a3 = atfi.complex(a3r, a3i) m2ab = phsp.m2ab(x) m2bc = phsp.m2bc(x) m2ac = phsp.m2ac(x) hel_ab = phsp.cos_helicity_ab(x) hel_bc = phsp.cos_helicity_bc(x) hel_ac = phsp.cos_helicity_ac(x) ampl = atfi.complex(atfi.const(0.0), atfi.const(0.0)) if switches[0]: ampl += ( a1 * atfd.breit_wigner_lineshape( m2ab, mkst, wkst, mpi, mk, mpi, md, rd, rr, 1, 1 ) * atfd.helicity_amplitude(hel_ab, 1) ) if switches[1]: ampl += ( a2 * atfd.breit_wigner_lineshape( m2bc, mkst, wkst, mpi, mk, mpi, md, rd, rr, 1, 1 ) * atfd.helicity_amplitude(hel_bc, 1) ) if switches[2]: ampl += ( a3 * atfd.breit_wigner_lineshape( m2ac, mrho, wrho, mpi, mpi, mk, md, rd, rr, 1, 1 ) * atfd.helicity_amplitude(hel_ac, 1) ) if switches[3]: ampl += atfi.cast_complex(atfi.ones(m2ab)) * atfi.complex( atfi.const(5.0), atfi.const(0.0) ) return atfd.density(ampl)