diff --git a/ess/TraceWin.py b/ess/TraceWin.py index 8fb1c3f376dd3963bac0ef493fb737d8d4545938..a125c793a5818d6ece95ec2166c8b0138841cb12 100644 --- a/ess/TraceWin.py +++ b/ess/TraceWin.py @@ -67,6 +67,9 @@ class density_file: self.filename=filename self.fin=file(self.filename, 'r') + # currently unknown: + self.version=0 + # first we simply count how many elements we have: counter=0 while True: @@ -91,12 +94,28 @@ class density_file: self.Xouv=numpy.zeros(counter) self.Youv=numpy.zeros(counter) + + self.moy=numpy.zeros((counter,7)) + self.moy2=numpy.zeros((counter,7)) + self._max=numpy.zeros((counter,7)) self._min=numpy.zeros((counter,7)) + if self.version>=7: + self.rms_emit=numpy.zeros((counter,3)) + self.rms_emit2=numpy.zeros((counter,3)) + self.lost=numpy.zeros((counter,self.Nrun)) self.powlost=numpy.zeros((counter,self.Nrun)) + self.lost2=numpy.zeros(counter) + self.Minlost=numpy.zeros(counter) + self.Maxlost=numpy.zeros(counter) + + self.powlost2=numpy.zeros(counter) + self.Minpowlost=numpy.zeros(counter) + self.Maxpowlost=numpy.zeros(counter) + while self.i<counter: self._getFullContent() @@ -117,12 +136,13 @@ class density_file: shift+=1 version=year year=numpy.fromfile(self.fin, dtype=numpy.int16, count=1)[0] - if shift: - raise ValueError("ERROR, shifted "+str(shift*2)+" bytes") self.vlong=numpy.fromfile(self.fin, dtype=numpy.int16, count=1)[0] self.Nrun=numpy.fromfile(self.fin, dtype=numpy.int32, count=1)[0] + if shift: + raise ValueError("ERROR, shifted "+str(shift*2)+" bytes") + self.version=version self.year=year @@ -131,9 +151,22 @@ class density_file: import numpy self._getHeader() - - numpy.fromfile(self.fin, dtype=numpy.int16, count=15132/2) - + + if self.version==8: + numpy.fromfile(self.fin, dtype=numpy.int16, count=8344/2) + if self.Nrun>1: + #WARN not 100% sure if this is correct.. + numpy.fromfile(self.fin, dtype=numpy.int16, count=((5588+self.Nrun*12)/2)) + + def _get_7dim_array(array): + return dict(x=array[0], + y=array[1], + phase=array[2], + energy=array[3], + r=array[4], + z=array[5], + dpp=array[6], + ) def _getFullContent(self): @@ -154,8 +187,8 @@ class density_file: n=7 # x [m], y[m], Phase [deg], Energy [MeV], R[m], Z[m], dp/p - moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n) - moy2=numpy.fromfile(self.fin, dtype=numpy.float32, count=n) + self.moy[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:] + self.moy2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:] self._max[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:] self._min[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:] @@ -167,8 +200,8 @@ class density_file: min_pos_moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n) max_pos_moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n) if self.version>=7: - rms_emit=numpy.fromfile(self.fin, dtype=numpy.float32, count=3) - rms_emit2=numpy.fromfile(self.fin, dtype=numpy.float32, count=3) + self.rms_emit[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)[:] + self.rms_emit2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)[:] if self.version>=8: e_ouv=numpy.fromfile(self.fin, dtype=numpy.float32, count=1) phase_ouv_pos=numpy.fromfile(self.fin, dtype=numpy.float32, count=1) @@ -181,12 +214,12 @@ class density_file: for i in xrange(self.Nrun): self.lost[self.i,i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] self.powlost[self.i,i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0] - lost2=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] - Minlost=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] - Maxlost=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] - powlost2=numpy.fromfile(self.fin, dtype=numpy.float64, count=1)[0] - Minpowlost=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0] - Maxpowlost=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0] + self.lost2[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] + self.Minlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] + self.Maxlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0] + self.powlost2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float64, count=1)[0] + self.Minpowlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0] + self.Maxpowlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0] if self.vlong==1: tab=numpy.fromfile(self.fin, dtype=numpy.uint64, count=n*step)