From c7d840c600fbc890ce4c6d9d4495e462feed330c Mon Sep 17 00:00:00 2001
From: gubaidulinvadim <gubaidulinvadim@gmail.com>
Date: Tue, 4 Jun 2024 16:27:01 +0200
Subject: [PATCH] Bunch.cs_invariant(self) takes into account nonzero
 dispersion

---
 mbtrack2/tracking/particles.py | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/mbtrack2/tracking/particles.py b/mbtrack2/tracking/particles.py
index 4c3934b..939f476 100644
--- a/mbtrack2/tracking/particles.py
+++ b/mbtrack2/tracking/particles.py
@@ -293,11 +293,13 @@ class Bunch:
         Return the average Courant-Snyder invariant of each plane.
 
         """
-        Jx = (self.ring.optics.local_gamma[0] * self['x']**2) + \
-              (2*self.ring.optics.local_alpha[0] * self['x'])*self['xp'] + \
+        xb = self['x'] - self['delta'] * self.ring.optics.local_dispersion[0]
+        yy = self['y'] - self['delta'] * self.ring.optics.local_dispersion[2]
+        Jx = (self.ring.optics.local_gamma[0] * xb**2) + \
+              (2*self.ring.optics.local_alpha[0] *xb)*self['xp'] + \
               (self.ring.optics.local_beta[0] * self['xp']**2)
-        Jy = (self.ring.optics.local_gamma[1] * self['y']**2) + \
-              (2*self.ring.optics.local_alpha[1] * self['y']*self['yp']) + \
+        Jy = (self.ring.optics.local_gamma[1] * yb**2) + \
+              (2*self.ring.optics.local_alpha[1] * yb*self['yp']) + \
               (self.ring.optics.local_beta[1] * self['yp']**2)
         Js = (self.ring.long_gamma * self['tau']**2) + \
               (2*self.ring.long_alpha * self['tau']*self['delta']) + \
-- 
GitLab