コード例 #1
0
ファイル: dynamics.py プロジェクト: rrabadan/AmpliTF
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)
コード例 #2
0
ファイル: dynamics.py プロジェクト: rrabadan/AmpliTF
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
コード例 #3
0
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))
コード例 #4
0
    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)
コード例 #5
0
ファイル: dynamics.py プロジェクト: rrabadan/AmpliTF
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
コード例 #6
0
ファイル: dynamics.py プロジェクト: rrabadan/AmpliTF
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
コード例 #7
0
ファイル: dynamics.py プロジェクト: rrabadan/AmpliTF
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
コード例 #8
0
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)