From a2ba86e6f0761bfb3e213f6d34035e06cb9fe8e2 Mon Sep 17 00:00:00 2001
From: Gamelin Alexis <alexis.gamelin@synchrotron-soleil.fr>
Date: Fri, 3 Sep 2021 13:01:56 +0200
Subject: [PATCH] [Fix] beam size sigma and import of new plots

Fixed error on the computation of the beam size with dispersion in Synchrotron.sigma method.
Add import of plot_beamspectrum and streak_beamspectrum
---
 tracking/monitors/__init__.py |  4 +++-
 tracking/synchrotron.py       | 16 ++++++++--------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/tracking/monitors/__init__.py b/tracking/monitors/__init__.py
index 126dbbc..1bc0337 100644
--- a/tracking/monitors/__init__.py
+++ b/tracking/monitors/__init__.py
@@ -21,6 +21,8 @@ from mbtrack2.tracking.monitors.plotting import (plot_bunchdata,
                                                  plot_cavitydata,
                                                  streak_beamdata,
                                                  plot_bunchspectrum,
-                                                 streak_bunchspectrum)
+                                                 streak_bunchspectrum,
+                                                 plot_beamspectrum,
+                                                 streak_beamspectrum)
 
 from mbtrack2.tracking.monitors.tools import merge_files
\ No newline at end of file
diff --git a/tracking/synchrotron.py b/tracking/synchrotron.py
index d71e78b..aba2b58 100644
--- a/tracking/synchrotron.py
+++ b/tracking/synchrotron.py
@@ -257,13 +257,13 @@ class Synchrotron:
         if position is None:
             sigma = np.zeros((4,))
             sigma[0] = (self.emit[0]*self.optics.local_beta[0] +
-                        self.optics.local_dispersion[0]**2*self.sigma_delta)**0.5
+                        self.optics.local_dispersion[0]**2*self.sigma_delta**2)**0.5
             sigma[1] = (self.emit[0]*self.optics.local_gamma[0] +
-                        self.optics.local_dispersion[1]**2*self.sigma_delta)**0.5
+                        self.optics.local_dispersion[1]**2*self.sigma_delta**2)**0.5
             sigma[2] = (self.emit[1]*self.optics.local_beta[1] +
-                        self.optics.local_dispersion[2]**2*self.sigma_delta)**0.5
+                        self.optics.local_dispersion[2]**2*self.sigma_delta**2)**0.5
             sigma[3] = (self.emit[1]*self.optics.local_gamma[1] +
-                        self.optics.local_dispersion[3]**2*self.sigma_delta)**0.5
+                        self.optics.local_dispersion[3]**2*self.sigma_delta**2)**0.5
         else:
             if isinstance(position, (float, int)):
                 n = 1
@@ -271,13 +271,13 @@ class Synchrotron:
                 n = len(position)
             sigma = np.zeros((4, n))
             sigma[0,:] = (self.emit[0]*self.optics.beta(position)[0] +
-                        self.optics.dispersion(position)[0]**2*self.sigma_delta)**0.5
+                        self.optics.dispersion(position)[0]**2*self.sigma_delta**2)**0.5
             sigma[1,:] = (self.emit[0]*self.optics.gamma(position)[0] +
-                        self.optics.dispersion(position)[1]**2*self.sigma_delta)**0.5
+                        self.optics.dispersion(position)[1]**2*self.sigma_delta**2)**0.5
             sigma[2,:] = (self.emit[1]*self.optics.beta(position)[1] +
-                        self.optics.dispersion(position)[2]**2*self.sigma_delta)**0.5
+                        self.optics.dispersion(position)[2]**2*self.sigma_delta**2)**0.5
             sigma[3,:] = (self.emit[1]*self.optics.gamma(position)[1] +
-                        self.optics.dispersion(position)[3]**2*self.sigma_delta)**0.5
+                        self.optics.dispersion(position)[3]**2*self.sigma_delta**2)**0.5
         return sigma
     
     def synchrotron_tune(self, Vrf):
-- 
GitLab