@@ -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