diff --git a/ess/TraceWin.py b/ess/TraceWin.py new file mode 100644 index 0000000000000000000000000000000000000000..0dced8a34d3c7feb8c2dc282b627962fec8f5e9b --- /dev/null +++ b/ess/TraceWin.py @@ -0,0 +1,59 @@ + +class dst: + def __init__(self, filename): + ''' + Simple class to read in a + TraceWin distribution file + + Class afterwards hold the following + dictionary items: + - x [cm] + - xp [rad] + - y [cm] + - yp [rad] + - phi [rad] + - E [MeV] + ''' + # easy storage.. + self.filename=filename + # used to create dict behaviour.. + self._columns=['x','xp','y','yp','phi','E'] + # read in the file.. + self._readBinaryFile() + + def _readBinaryFile(self): + ''' + Thanks Emma! + ''' + + import numpy + + fin=file(self.filename,'r') + + # dummy, Np, Ib, freq, dummy + Header_type = numpy.dtype([ + ('dummy12', numpy.int16), + ('Np', numpy.int32), + ('Ib', numpy.float64), + ('freq', numpy.float64), + ('dummy3', numpy.int8) + ]) + Header=numpy.fromfile(fin, dtype=Header_type, count=1) + self.Np=Header['Np'][0] + self.Ib=Header['Ib'][0] + self.freq=Header['freq'][0] + + Table=numpy.fromfile(fin, dtype=numpy.float64, count=self.Np*6) + self._data=Table.reshape(self.Np,6) + + Footer=numpy.fromfile(fin, dtype='f64', count=1) + self.mass=Footer[0] + + def __getitem__(self, key): + ''' + makes the class function as a dictionary + e.g. dst['x'] returns the x array.. + ''' + if key in self._columns: + i=self._columns.index(key) + return self._data[:,i] diff --git a/ess/__init__.py b/ess/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bbca5411d04e4855ed88082e44b4fa7b3dc8022f --- /dev/null +++ b/ess/__init__.py @@ -0,0 +1 @@ +import TraceWin