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
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
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
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
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