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