1 """
2
3 Authors: Henning O. Sorensen & Erik Knudsen
4 Center for Fundamental Research: Metal Structures in Four Dimensions
5 Risoe National Laboratory
6 Frederiksborgvej 399
7 DK-4000 Roskilde
8 email:henning.sorensen@risoe.dk
9
10 mods for fabio by JPW
11
12 """
13 import sys, logging
14 from fabioutils import deconstruct_filename, getnum, filename_object
15 from fabioimage import fabioimage
16 import edfimage
17 import adscimage
18 import tifimage
19 import marccdimage
20 import mar345image
21 import fit2dmaskimage
22 import brukerimage
23 import bruker100image
24 import pnmimage
25 import GEimage
26 import OXDimage
27 import dm3image
28 import HiPiCimage
29 import pilatusimage
30 import fit2dspreadsheetimage
31 import kcdimage
32 import cbfimage
33 import xsdimage
34
35 MAGIC_NUMBERS = [
36
37
38 ("FORMAT : 86" , 'bruker'),
39 ("\x4d\x4d\x00\x2a" , 'tif') ,
40
41
42
43 ("\x49\x49\x2a\x00\x08\x00" , 'marccd') ,
44 ("\x49\x49\x2a\x00\x82\x00" , 'pilatus') ,
45 ("\x49\x49\x2a\x00" , 'tif') ,
46
47 ("{\nHEA" , 'adsc'),
48 ("{" , 'edf'),
49 ("\r{" , 'edf'),
50 ("\n{" , 'edf'),
51 ("ADEPT" , 'GE'),
52 ("OD" , 'OXD'),
53 ("IM" , 'HiPiC'),
54 ('\x2d\x04' , 'mar345'),
55 ('\x04\x2d' , 'mar345'),
56
57 ('M\x00\x00\x00A\x00\x00\x00S\x00\x00\x00K\x00\x00\x00' , 'fit2dmask') ,
58 ('\x00\x00\x00\x03' , 'dm3'),
59 ("No" , "kcd"),
60 ("<" , "xsd")
61 ]
62
64 """ Try to interpret the bytes starting the file as a magic number """
65 for magic, format in MAGIC_NUMBERS:
66 if byts.find(magic) == 0:
67 return format
68 if 0:
69 print "m:", magic, "f:", format,
70 print "bytes:", magic, "len(bytes)", len(magic),
71 print "found:", byts.find(magic)
72 for i in range(len(magic)):
73 print ord(magic[i]), ord(byts[i]), magic[i], byts[i]
74 raise Exception("Could not interpret magic string")
75
76
93
94
96 """ return only the header"""
97 obj = _openimage(filename)
98 obj.readheader(filename)
99 return obj
100
101
103 """
104 determine which format for a filename
105 and return appropriate class which can be used for opening the image
106 """
107 try:
108 imo = fabioimage()
109 byts = imo._open(filename).read(18)
110 filetype = do_magic(byts)
111
112 if filetype == "marccd" and filename.find("mccd") == -1:
113
114
115 filetype = "tif"
116
117 except IOError:
118
119 raise
120 except:
121 try:
122 file_obj = deconstruct_filename(filename)
123 if file_obj == None:
124 raise Exception
125 if len(file_obj.format) != 1 and \
126 type(file_obj.format) != type(["list"]):
127
128 raise Exception("openimage failed on magic bytes & name guess")
129 filetype = file_obj.format
130
131 except:
132
133
134 raise Exception("Fabio could not identify " + filename)
135 klass_name = "".join(filetype) + 'image'
136
137
138
139
140 module = sys.modules.get("fabio." + klass_name, None)
141
142
143 if module is not None:
144 if hasattr(module, klass_name):
145 klass = getattr(module, klass_name)
146
147 else:
148 raise Exception("Module %s has no image class" % module)
149 else:
150 raise Exception("Filetype not known %s %s" % (filename, klass_name))
151 obj = klass()
152
153 return obj
154