Example #1
0
def findm66(accelerator, closed_orbit = None):
    """Calculate accumulatep_in = _trackcpp.DoublePos()
        p_in.rx,p_in.px,p_in.ry,p_in.py,p_in.dl,p_in.de = pos[:,i]
    matrices -- array of matrices along accelerator elements

    Raises TrackingException
    """
    if closed_orbit is None:
        closed_orbit = _trackcpp.CppDoublePosVector()
        r = _trackcpp.track_findorbit6(accelerator._accelerator, closed_orbit)
        if r > 0:
            raise TrackingException(_trackcpp.string_error_messages[r])
    else:
        if closed_orbit.shape[1] != len(accelerator):
            closed_orbit = _trackcpp.CppDoublePosVector()

    m66 = _trackcpp.CppDoubleMatrixVector()
    r = _trackcpp.track_findm66(accelerator._accelerator, closed_orbit, m66)
    if r > 0:
        raise TrackingException(_trackcpp.string_error_messages[r])

    m66_out = []
    for i in range(len(m66)):
        m = _numpy.zeros((6,6))
        for r in range(6):
            for c in range(6):
                m[r,c] = m66[i][r][c]
        m66_out.append(m)

    return m66_out
Example #2
0
def find_m44(accelerator, indices=None, energy_offset = 0.0, closed_orbit=None):
    """Calculate 4D transfer matrices of elements in an accelerator.

    Keyword arguments:
    accelerator
    indices
    energy_offset
    closed_orbit

    Return values:
    m44
    cumul_trans_matrices -- values at the start of each lattice element
    """
    if indices is None:
        indices = list(range(len(accelerator)))

    if closed_orbit is None:
        # calcs closed orbit if it was not passed.
        fixed_point_guess = _trackcpp.CppDoublePos()
        fixed_point_guess.de = energy_offset
        _closed_orbit = _trackcpp.CppDoublePosVector()
        r = _trackcpp.track_findorbit4(accelerator._accelerator, _closed_orbit, fixed_point_guess)
        if r > 0:
            raise TrackingException(_trackcpp.string_error_messages[r])
    else:
        _closed_orbit = _4Numpy2CppDoublePosVector(closed_orbit,de=energy_offset)

    _cumul_trans_matrices = _trackcpp.CppMatrixVector()
    _m44 = _trackcpp.Matrix()
    _v0 = _trackcpp.CppDoublePos()
    r = _trackcpp.track_findm66(
        accelerator._accelerator,
        _closed_orbit,
        _cumul_trans_matrices,
        _m44,
        _v0
    )
    if r > 0:
        raise TrackingException(_trackcpp.string_error_messages[r])

    m44 = _CppMatrix24Numpy(_m44)
    if indices == 'm44':
        return m44

    cumul_trans_matrices = []
    for i in range(len(_cumul_trans_matrices)):
        cumul_trans_matrices.append(_CppMatrix24Numpy(_cumul_trans_matrices[i]))

    return m44, cumul_trans_matrices
Example #3
0
def find_m44(accelerator, indices=None, energy_offset=0.0, closed_orbit=None):
    """Calculate 4D transfer matrices of elements in an accelerator.

    Keyword arguments:
    accelerator
    indices
    energy_offset
    closed_orbit

    Return values:
    m44
    cumul_trans_matrices -- values at the start of each lattice element
    """
    if indices is None:
        indices = list(range(len(accelerator)))

    if closed_orbit is None:
        # calcs closed orbit if it was not passed.
        fixed_point_guess = _trackcpp.CppDoublePos()
        fixed_point_guess.de = energy_offset
        _closed_orbit = _trackcpp.CppDoublePosVector()
        r = _trackcpp.track_findorbit4(accelerator._accelerator, _closed_orbit,
                                       fixed_point_guess)
        if r > 0:
            raise TrackingException(_trackcpp.string_error_messages[r])
    else:
        _closed_orbit = _4Numpy2CppDoublePosVector(closed_orbit,
                                                   de=energy_offset)

    _cumul_trans_matrices = _trackcpp.CppMatrixVector()
    _m44 = _trackcpp.Matrix()
    _v0 = _trackcpp.CppDoublePos()
    r = _trackcpp.track_findm66(accelerator._accelerator, _closed_orbit,
                                _cumul_trans_matrices, _m44, _v0)
    if r > 0:
        raise TrackingException(_trackcpp.string_error_messages[r])

    m44 = _CppMatrix24Numpy(_m44)
    if indices == 'm44':
        return m44

    cumul_trans_matrices = []
    for i in range(len(_cumul_trans_matrices)):
        cumul_trans_matrices.append(_CppMatrix24Numpy(
            _cumul_trans_matrices[i]))

    return m44, cumul_trans_matrices
Example #4
0
def findm66(accelerator, indices=None, closed_orbit=None):
    """Calculate 6D transfer matrices of elements in an accelerator.

    Keyword arguments:
    accelerator
    indices
    closed_orbit

    Return values:
    m66
    cumul_trans_matrices -- values at the start of each lattice element
    """
    if indices is None:
        indices = list(range(len(accelerator)))

    if closed_orbit is None:
        # Closed orbit is calculated by trackcpp
        _closed_orbit = _trackcpp.CppDoublePosVector()
    else:
        _closed_orbit = _Numpy2CppDoublePosVector(closed_orbit)

    _cumul_trans_matrices = _trackcpp.CppMatrixVector()
    _m66 = _trackcpp.Matrix()
    _v0 = _trackcpp.CppDoublePos()
    r = _trackcpp.track_findm66(
        accelerator._accelerator,
        _closed_orbit,
        _cumul_trans_matrices,
        _m66,
        _v0
    )
    if r > 0:
        raise TrackingException(_trackcpp.string_error_messages[r])

    m66 = _CppMatrix2Numpy(_m66)
    if indices == 'm66':
        return m66

    cumul_trans_matrices = MatrixList(_cumul_trans_matrices)

    return m66, cumul_trans_matrices
Example #5
0
def find_m66(accelerator, indices=None, closed_orbit=None):
    """Calculate 6D transfer matrices of elements in an accelerator.

    Keyword arguments:
    accelerator
    indices
    closed_orbit

    Return values:
    m66
    cumul_trans_matrices -- values at the start of each lattice element
    """
    if indices is None:
        indices = list(range(len(accelerator)))

    if closed_orbit is None:
        # Closed orbit is calculated by trackcpp
        _closed_orbit = _trackcpp.CppDoublePosVector()
    else:
        _closed_orbit = _Numpy2CppDoublePosVector(closed_orbit)

    _cumul_trans_matrices = _trackcpp.CppMatrixVector()
    _m66 = _trackcpp.Matrix()
    _v0 = _trackcpp.CppDoublePos()
    r = _trackcpp.track_findm66(accelerator._accelerator, _closed_orbit,
                                _cumul_trans_matrices, _m66, _v0)
    if r > 0:
        raise TrackingException(_trackcpp.string_error_messages[r])

    m66 = _CppMatrix2Numpy(_m66)
    if indices == 'm66':
        return m66

    cumul_trans_matrices = MatrixList(_cumul_trans_matrices)

    return m66, cumul_trans_matrices