From 4770618a6dda544faa553345decaad1368dba01b Mon Sep 17 00:00:00 2001 From: gubaidulinvadim <gubaidulinvadim@gmail.com> Date: Tue, 30 Jul 2024 11:47:54 +0200 Subject: [PATCH] changed chromaticity computation in _compute_chro() of transverse_map_sector_generator(). Now it can compute arbitrary order of chromaticity from AT. --- mbtrack2/tracking/element.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/mbtrack2/tracking/element.py b/mbtrack2/tracking/element.py index d218e8e..7e36e81 100644 --- a/mbtrack2/tracking/element.py +++ b/mbtrack2/tracking/element.py @@ -404,22 +404,15 @@ def transverse_map_sector_generator(ring, positions): else: import at - def _compute_chro(ring, pos, dp=1e-4): + def _compute_chro(ring, pos, dp=1e-4, order=4): lat = deepcopy(ring.optics.lattice) lat.append(at.Marker("END")) - N = len(lat) - refpts = np.arange(N) - (*elem_neg_dp, ) = at.linopt2(lat, refpts=refpts, dp=-dp) - (*elem_pos_dp, ) = at.linopt2(lat, refpts=refpts, dp=dp) - - s = elem_neg_dp[2]["s_pos"] - mux0 = elem_neg_dp[2]["mu"][:, 0] - mux1 = elem_pos_dp[2]["mu"][:, 0] - muy0 = elem_neg_dp[2]["mu"][:, 1] - muy1 = elem_pos_dp[2]["mu"][:, 1] - - Chrox = (mux1-mux0) / (2*dp) / 2 / np.pi - Chroy = (muy1-muy0) / (2*dp) / 2 / np.pi + fit, dpa, tune = at.physics.nonlinear.chromaticity(lat, + method='linopt', + dpm=0.02, + n_points=100, + order=order) + Chrox, Chroy = fit chrox = np.interp(pos, s, Chrox) chroy = np.interp(pos, s, Chroy) -- GitLab