From 87b40acc7229bd5fec76279e977744e5284b367a Mon Sep 17 00:00:00 2001
From: Yngve Inntjore Levinsen <Yngve.Levinsen@esss.se>
Date: Mon, 23 Mar 2015 18:49:22 +0100
Subject: [PATCH] added normalized emittance dictionary return now excludes
 lost particles this was essential for the twiss calculation apparently

---
 ess/TraceWin.py | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/ess/TraceWin.py b/ess/TraceWin.py
index 14fb940..ff38e26 100644
--- a/ess/TraceWin.py
+++ b/ess/TraceWin.py
@@ -188,8 +188,19 @@ class plt:
 
     def __getitem__(self, key):
         if key in self.Nelp:
+            import numpy
+
             i=self.Nelp.index(key)
-            return self._data[i]
+
+            ret={}
+            # some particles are lost, exclude those:
+            lost_mask=self._data[i]['l']==0
+            for key in self._data[i]:
+                if isinstance(self._data[i][key], numpy.ndarray):
+                    ret[key]=self._data[i][key][lost_mask]
+                else:
+                    ret[key]=self._data[i][key]
+            return ret
         else:
             print "No data to plot at element",key
 
@@ -315,7 +326,9 @@ class plt:
         for j in xrange(len(self.Nelp)):
             i=self.Nelp[j]
             data=self[i]
-            self.sigma.append([[numpy.mean( (data[n]-self.avg[m][j]) * (data[m] - self.avg[m][j]) ) for n in vals] for m in vals])
+
+
+            self.sigma.append([[numpy.mean( (data[n]-self.avg[n][j]) * (data[m] - self.avg[m][j]) ) for n in vals] for m in vals])
 
         self.sigma=numpy.array(self.sigma)
 
@@ -329,15 +342,23 @@ class plt:
 
         if not hasattr(self,'sigma'):
                self.calc_sigma()
+        if not hasattr(self,'gamma'):
+               self.calc_rel()
 
         self.twiss_eps=[]
         for j in xrange(len(self.Nelp)):
             self.twiss_eps.append([numpy.sqrt(numpy.linalg.det(self.sigma[j][i:i+2][:,i:i+2])) for i in (0,2,4)])
-        self.twiss_beta = [[self.sigma[j][i][i] for i in (0,2,4)] for j in xrange(len(self.Nelp))]
-
         self.twiss_eps=numpy.array(self.twiss_eps)
+
+        self.twiss_beta = [[self.sigma[j][i][i]/self.twiss_eps[j,i/2] for i in (0,2,4)] for j in xrange(len(self.Nelp))]
+
         self.twiss_beta=numpy.array(self.twiss_beta)
 
+        # calculate normalized emittance:
+        self.twiss_eps_normed=self.twiss_eps.copy()
+        for i in xrange(3):
+            self.twiss_eps_normed[:,i]*=self.gamma*self.beta
+
 
 
 
-- 
GitLab