diff --git a/tracking/particles.py b/tracking/particles.py index 43cb87359cdcdfa352e360f1fa32219b979b50f2..630e2323b75d9bd651e1997be16b9333b50a2cad 100644 --- a/tracking/particles.py +++ b/tracking/particles.py @@ -252,10 +252,9 @@ class Bunch: def init_gaussian(self, cov=None, mean=None, **kwargs): """ Initialize bunch particles with 6D gaussian phase space. - Covariance matrix is taken from [1]. - - !!! -> disp & dispp not included yet. - + Covariance matrix is taken from [1] and dispersion is added following + the method explained in [2]. + Parameters ---------- cov : (6,6) array, optional @@ -267,6 +266,7 @@ class Bunch: ---------- [1] Wiedemann, H. (2015). Particle accelerator physics. 4th edition. Springer, Eq.(8.38) of p223. + [2] http://www.pp.rhul.ac.uk/bdsim/manual-develop/dev_beamgeneration.html """ if mean is None: @@ -278,14 +278,22 @@ class Bunch: optics = kwargs.get("optics", self.ring.optics) cov = np.zeros((6,6)) - cov[0,0] = self.ring.emit[0]*optics.local_beta[0] - cov[1,1] = self.ring.emit[0]*optics.local_gamma[0] - cov[0,1] = -1*self.ring.emit[0]*optics.local_alpha[0] - cov[1,0] = -1*self.ring.emit[0]*optics.local_alpha[0] - cov[2,2] = self.ring.emit[1]*optics.local_beta[1] - cov[3,3] = self.ring.emit[1]*optics.local_gamma[1] - cov[2,3] = -1*self.ring.emit[1]*optics.local_alpha[1] - cov[3,2] = -1*self.ring.emit[1]*optics.local_alpha[1] + cov[0,0] = self.ring.emit[0]*optics.local_beta[0] + (optics.local_dispersion[0]*self.ring.sigma_delta)**2 + cov[1,1] = self.ring.emit[0]*optics.local_gamma[0] + (optics.local_dispersion[1]*self.ring.sigma_delta)**2 + cov[0,1] = -1*self.ring.emit[0]*optics.local_alpha[0] + (optics.local_dispersion[0]*optics.local_dispersion[1]*self.ring.sigma_delta**2) + cov[1,0] = -1*self.ring.emit[0]*optics.local_alpha[0] + (optics.local_dispersion[0]*optics.local_dispersion[1]*self.ring.sigma_delta**2) + cov[0,5] = optics.local_dispersion[0]*self.ring.sigma_delta**2 + cov[5,0] = optics.local_dispersion[0]*self.ring.sigma_delta**2 + cov[1,5] = optics.local_dispersion[1]*self.ring.sigma_delta**2 + cov[5,1] = optics.local_dispersion[1]*self.ring.sigma_delta**2 + cov[2,2] = self.ring.emit[1]*optics.local_beta[1] + (optics.local_dispersion[2]*self.ring.sigma_delta)**2 + cov[3,3] = self.ring.emit[1]*optics.local_gamma[1] + (optics.local_dispersion[3]*self.ring.sigma_delta)**2 + cov[2,3] = -1*self.ring.emit[1]*optics.local_alpha[1] + (optics.local_dispersion[2]*optics.local_dispersion[3]*self.ring.sigma_delta**2) + cov[3,2] = -1*self.ring.emit[1]*optics.local_alpha[1] + (optics.local_dispersion[2]*optics.local_dispersion[3]*self.ring.sigma_delta**2) + cov[2,5] = optics.local_dispersion[2]*self.ring.sigma_delta**2 + cov[5,2] = optics.local_dispersion[2]*self.ring.sigma_delta**2 + cov[3,5] = optics.local_dispersion[3]*self.ring.sigma_delta**2 + cov[5,3] = optics.local_dispersion[3]*self.ring.sigma_delta**2 cov[4,4] = sigma_0**2 cov[5,5] = sigma_delta**2