1 import numpy
2 import math
3 import logging
4 logger = logging.getLogger("bruker100image")
5 try:
6 import Image
7 except ImportError:
8 logger.warning("PIL is not installed ... trying to do without")
9 Image = None
10
11 from brukerimage import brukerimage
12 from readbytestream import readbytestream
13
15
16
18 if not Image:
19 raise RuntimeError("PIL is not installed !!! ")
20
21 if filename:
22 self.read(filename)
23 PILimage = Image.frombuffer("F",
24 (self.dim1, self.dim2),
25 self.data,
26 "raw",
27 "F;16", 0, -1)
28 return PILimage
29
30 - def read(self, fname, frame=None):
31 f = open(fname, "rb")
32 try:
33 self._readheader(f)
34 except:
35 raise
36
37 rows = int(self.header['NROWS'])
38 cols = int(self.header['NCOLS'])
39 npixelb = int(self.header['NPIXELB'][0])
40
41
42
43
44
45 self.data = readbytestream(f, f.tell(), rows, cols, npixelb,
46 datatype="int", signed='n', swap='n')
47
48 noverfl = self.header['NOVERFL'].split()
49
50
51 data = self.data
52 k = 0
53
54 while k < 2:
55 datatype = {'1' : numpy.uint8,
56 '2' : numpy.uint16,
57 '4' : numpy.uint32 }[("%d" % 2 ** k)]
58 ar = numpy.array(numpy.fromstring(f.read(int(noverfl[k]) * (2 ** k)),
59 datatype), numpy.uint16)
60
61
62
63 lim = 2 ** (8 * k) - 1
64
65
66 M = numpy.compress(numpy.equal(data.ravel(), lim), numpy.arange(rows * cols))
67
68 numpy.put(data.ravel(), M, ar)
69 padding = 16 * int(math.ceil(int(noverfl[k]) * (2 ** k) / 16.)) - \
70 int(noverfl[k]) * (2 ** k)
71 f.seek(padding, 1)
72 print noverfl[k] + " bytes read + %d bytes padding" % padding
73 k = k + 1
74
75 f.close()
76
77 (self.dim1, self.dim2) = (rows, cols)
78 print self.dim1, self.dim2
79 self.resetvals()
80 return self
81
82 if __name__ == '__main__':
83 import sys, time
84 I = bruker100image()
85 b = time.clock()
86 while (sys.argv[1:]):
87 I.read(sys.argv[1])
88 r = I.toPIL16()
89 I.rebin(2, 2)
90 print sys.argv[1] + (": max=%d, min=%d, mean=%.2e, stddev=%.2e") % (
91 I.getmax(), I.getmin(), I.getmean(), I.getstddev())
92 print 'integrated intensity (%d %d %d %d) =%.3f' % (
93 10, 20, 20, 40, I.integrate_area((10, 20, 20, 40)))
94 sys.argv[1:] = sys.argv[2:]
95 e = time.clock()
96 print (e - b)
97