Skip to content

Commit 9e1caf1

Browse files
committed
clean up HDF5 image importer after work on MaxIV files
1 parent 4f132d9 commit 9e1caf1

File tree

1 file changed

+34
-23
lines changed

1 file changed

+34
-23
lines changed

GSASII/imports/G2img_HDF5.py

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,17 @@ def Reader(self, filename, ParentFrame=None, **kwarg):
5454
return False
5555
imagenum = kwarg.get('blocknum')
5656
if imagenum is None: imagenum = 1
57+
quick = False
5758
# do we have a image number or a map to the section with the image?
5859
try:
59-
int(imagenum)
60-
# set up an index as to where images are found
61-
self.buffer = kwarg.get('buffer',{})
62-
if not self.buffer.get('imagemap'):
60+
int(imagenum) # test if image # is a tuple
61+
except: # pull the section name and number out from the imagenum value
62+
kwargs = {'name':imagenum[0],'num':imagenum[1]}
63+
quick = True
64+
# set up an index as to where images are found
65+
self.buffer = kwarg.get('buffer',{})
66+
if not quick and not self.buffer.get('imagemap'):
67+
try:
6368
if GSASIIpath.GetConfigValue('debug'): print('Scanning for image map')
6469
self.buffer['imagemap'] = []
6570
self.Comments = self.visit(fp)
@@ -93,9 +98,13 @@ def Reader(self, filename, ParentFrame=None, **kwarg):
9398
self.errors = 'No images selected from file'
9499
fp.close()
95100
return False
101+
except Exception as msg:
102+
print(f'Error mapping file:\n{msg}')
103+
return False
104+
if not quick:
96105
self.buffer['selectedImages'] = self.buffer.get('selectedImages',
97106
list(range(len(self.buffer['imagemap']))))
98-
# get the first selected image
107+
# get the next selected image
99108
while imagenum <= len(self.buffer['imagemap']):
100109
if imagenum-1 in self.buffer['selectedImages']:
101110
del self.buffer['selectedImages'][self.buffer['selectedImages'].index(imagenum-1)]
@@ -107,11 +116,6 @@ def Reader(self, filename, ParentFrame=None, **kwarg):
107116
fp.close()
108117
return False
109118
kwargs = {'imagenum':imagenum}
110-
quick = False
111-
except:
112-
kwargs = {'name':imagenum[0],'num':imagenum[1]}
113-
quick = True
114-
# we have been passed a map to images
115119
self.Data,self.Npix,self.Image = self.readDataset(fp,**kwargs)
116120
if quick:
117121
fp.close()
@@ -153,19 +157,26 @@ def func(name, dset):
153157
if not hasattr(dset,'shape'): return # not array, can't be image
154158
if isinstance(dset, h5py.Dataset):
155159
dims = dset.shape
156-
if len(dims) < 2:
157-
head.append('%s: %s'%(dset.name,str(dset[()][0])))
158-
elif len(dims) == 4:
159-
size = dims[2:]
160-
self.buffer['imagemap'] += [(dset.name,i,size) for i in range(dims[1])]
161-
elif len(dims) == 3:
162-
size = dims[1:]
163-
self.buffer['imagemap'] += [(dset.name,i,size) for i in range(dims[0])]
164-
elif len(dims) == 2:
165-
size = dims
166-
self.buffer['imagemap'] += [(dset.name,None,size)]
167-
else:
168-
print('Skipping entry '+str(dset.name)+'. Shape is '+str(dims))
160+
try:
161+
if len(dims) == 0:
162+
val = dset[()]
163+
if type(val) is bytes: val = val.decode()
164+
head.append(f'{dset.name}: {val}')
165+
elif len(dims) < 2:
166+
head.append(f'{dset.name}: {dset[()][0]}')
167+
elif len(dims) == 4:
168+
size = dims[2:]
169+
self.buffer['imagemap'] += [(dset.name,i,size) for i in range(dims[1])]
170+
elif len(dims) == 3:
171+
size = dims[1:]
172+
self.buffer['imagemap'] += [(dset.name,i,size) for i in range(dims[0])]
173+
elif len(dims) == 2:
174+
size = dims
175+
self.buffer['imagemap'] += [(dset.name,None,size)]
176+
else:
177+
print(f'Skipping entry {dset.name}. Shape is {dims}')
178+
except Exception as msg:
179+
print(f'Skipping entry {dset.name} Error getting shape\n{msg}')
169180
fp.visititems(func)
170181
return head
171182

0 commit comments

Comments
 (0)