From 9a97886300ea606dc84f28b57dde8799be8c9d62 Mon Sep 17 00:00:00 2001
From: gubaidulinvadim <gubaidulinvadim@gmail.com>
Date: Mon, 15 Jul 2024 15:44:42 +0200
Subject: [PATCH] added two tests: emittance calculation and emittance
 calculation with nonzero dispersion

---
 tests/test_bunch.py | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/tests/test_bunch.py b/tests/test_bunch.py
index 7c1499a..17ffd33 100644
--- a/tests/test_bunch.py
+++ b/tests/test_bunch.py
@@ -70,4 +70,37 @@ def test_bunch_plots(mybunch):
     mybunch.plot_phasespace()
     mybunch.plot_profile()
     assert True
+def test_bunch_emittance(demo_ring):
+    mp_number = 1_000_000
+    current = 1.2e-3
+    mybunch = Bunch(demo_ring, mp_number=mp_number, current=current, 
+                    track_alive=False)    
+    mybunch.init_gaussian()
+    np.testing.assert_allclose(mybunch.emit[0], demo_ring.emit[0], rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {demo_ring.emit[0]} initialised, {mybunch.emit[0]:} calculated')
+    np.testing.assert_allclose(mybunch.emit[1], demo_ring.emit[1], rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {demo_ring.emit[1]} initialised, {mybunch.emit[1]:} calculated')
+
+    np.testing.assert_allclose(mybunch.emit[0], mybunch.cs_invariant[0]/2, rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {mybunch.cs_invariant[0]/2} calculated with optics functions, {mybunch.emit[0]:} calculated with coordinates only')
+    np.testing.assert_allclose(mybunch.emit[1], mybunch.cs_invariant[1]/2, rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {mybunch.cs_invariant[1]/2} calculated with optics functions, {mybunch.emit[1]:} calculated with coordinates only')
+    
+
+def test_bunch_emittance_with_dispersion(demo_ring):
+    mp_number = 1_000_000
+    current = 1.2e-3
+    demo_ring.optics.local_dispersion = np.array([1e-2, 1e-3, 1e-2, 1e-3])
+    mybunch = Bunch(demo_ring, mp_number=mp_number, current=current, 
+                    track_alive=False)    
+    mybunch.init_gaussian()
+    np.testing.assert_allclose(mybunch.emit[0], demo_ring.emit[0], rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {demo_ring.emit[0]} initialised, {mybunch.emit[0]:} calculated')
+    np.testing.assert_allclose(mybunch.emit[1], demo_ring.emit[1], rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {demo_ring.emit[1]} initialised, {mybunch.emit[1]:} calculated')
+
+    np.testing.assert_allclose(mybunch.emit[0], mybunch.cs_invariant[0]/2, rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {mybunch.cs_invariant[0]/2} calculated with optics functions, {mybunch.emit[0]:} calculated with coordinates only')
+    np.testing.assert_allclose(mybunch.emit[1], mybunch.cs_invariant[1]/2, rtol=0, atol=1e-13,
+     err_msg=f'Emittances do not match. {mybunch.cs_invariant[1]/2} calculated with optics functions, {mybunch.emit[1]:} calculated with coordinates only')
     
\ No newline at end of file
-- 
GitLab