@@ -34,8 +34,8 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
3434 c = StringIO (data )
3535 da = np .loadtxt (c )
3636 da = da .astype (data_type_codes .type [datatype ])
37- # independent of the endianness
38- return da
37+ return da # independent of the endianness
38+
3939 elif enclabel == 'B64BIN' :
4040 # GIFTI_ENCODING_B64BIN
4141 dec = base64 .b64decode (data .encode ('ascii' ))
@@ -44,6 +44,7 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
4444 newarr = np .fromstring (dec , dtype = dt )
4545 if len (newarr .shape ) != len (sh ):
4646 newarr = newarr .reshape (sh , order = ord )
47+
4748 elif enclabel == 'B64GZ' :
4849 # GIFTI_ENCODING_B64GZ
4950 # convert to bytes array for python 3.2
@@ -55,24 +56,28 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
5556 newarr = np .fromstring (zdec , dtype = dt )
5657 if len (newarr .shape ) != len (sh ):
5758 newarr = newarr .reshape (sh , order = ord )
59+
5860 elif enclabel == 'External' :
5961 # GIFTI_ENCODING_EXTBIN
6062 raise NotImplementedError ("In what format are the external files?" )
63+
6164 else :
6265 return 0
66+
6367 # check if we need to byteswap
6468 required_byteorder = gifti_endian_codes .byteorder [endian ]
6569 if (required_byteorder in ('big' , 'little' ) and
66- required_byteorder != sys .byteorder ):
70+ required_byteorder != sys .byteorder ):
6771 newarr = newarr .byteswap ()
6872 return newarr
6973
7074
7175class GiftiImageParser (XmlImageParser ):
7276
73- def __init__ (self , encoding = None , buffer_size = 35000000 ):
77+ def __init__ (self , encoding = None , buffer_size = 35000000 , verbose = 0 ):
7478 super (GiftiImageParser , self ).__init__ (encoding = encoding ,
75- buffer_size = buffer_size )
79+ buffer_size = buffer_size ,
80+ verbose = verbose )
7681
7782 # finite state machine stack
7883 self .fsm_state = []
@@ -98,40 +103,43 @@ def StartElementHandler(self, name, attrs):
98103 self .flush_chardata ()
99104 if self .verbose > 0 :
100105 print ('Start element:\n \t ' , repr (name ), attrs )
106+
101107 if name == 'GIFTI' :
102108 # create gifti image
103109 self .img = GiftiImage ()
104110 if 'Version' in attrs :
105111 self .img .version = attrs ['Version' ]
106112 if 'NumberOfDataArrays' in attrs :
107113 self .expected_numDA = int (attrs ['NumberOfDataArrays' ])
108-
109114 self .fsm_state .append ('GIFTI' )
115+
110116 elif name == 'MetaData' :
111117 self .fsm_state .append ('MetaData' )
112-
113118 # if this metadata tag is first, create self.img.meta
114119 if len (self .fsm_state ) == 2 :
115120 self .meta_global = GiftiMetaData ()
116121 else :
117122 # otherwise, create darray.meta
118123 self .meta_da = GiftiMetaData ()
124+
119125 elif name == 'MD' :
120126 self .nvpair = GiftiNVPairs ()
121127 self .fsm_state .append ('MD' )
128+
122129 elif name == 'Name' :
123130 if self .nvpair is None :
124131 raise ExpatError
125- else :
126- self . write_to = 'Name'
132+ self . write_to = 'Name'
133+
127134 elif name == 'Value' :
128135 if self .nvpair is None :
129136 raise ExpatError
130- else :
131- self . write_to = 'Value'
137+ self . write_to = 'Value'
138+
132139 elif name == 'LabelTable' :
133140 self .lata = GiftiLabelTable ()
134141 self .fsm_state .append ('LabelTable' )
142+
135143 elif name == 'Label' :
136144 self .label = GiftiLabel ()
137145 if "Index" in attrs :
@@ -147,6 +155,7 @@ def StartElementHandler(self, name, attrs):
147155 if "Alpha" in attrs :
148156 self .label .alpha = float (attrs ["Alpha" ])
149157 self .write_to = 'Label'
158+
150159 elif name == 'DataArray' :
151160 self .da = GiftiDataArray ()
152161 if "Intent" in attrs :
@@ -174,32 +183,35 @@ def StartElementHandler(self, name, attrs):
174183 self .da .ext_offset = attrs ["ExternalFileOffset" ]
175184 self .img .darrays .append (self .da )
176185 self .fsm_state .append ('DataArray' )
186+
177187 elif name == 'CoordinateSystemTransformMatrix' :
178188 self .coordsys = GiftiCoordSystem ()
179189 self .img .darrays [- 1 ].coordsys = self .coordsys
180190 self .fsm_state .append ('CoordinateSystemTransformMatrix' )
191+
181192 elif name == 'DataSpace' :
182193 if self .coordsys is None :
183194 raise ExpatError
184- else :
185- self . write_to = 'DataSpace'
195+ self . write_to = 'DataSpace'
196+
186197 elif name == 'TransformedSpace' :
187198 if self .coordsys is None :
188199 raise ExpatError
189- else :
190- self . write_to = 'TransformedSpace'
200+ self . write_to = 'TransformedSpace'
201+
191202 elif name == 'MatrixData' :
192203 if self .coordsys is None :
193204 raise ExpatError
194- else :
195- self . write_to = 'MatrixData'
205+ self . write_to = 'MatrixData'
206+
196207 elif name == 'Data' :
197208 self .write_to = 'Data'
198209
199210 def EndElementHandler (self , name ):
200211 self .flush_chardata ()
201212 if self .verbose > 0 :
202213 print ('End element:\n \t ' , repr (name ))
214+
203215 if name == 'GIFTI' :
204216 if hasattr (self , 'expected_numDA' ) and self .expected_numDA != self .img .numDA :
205217 warnings .warn ("Actual # of data arrays does not match "
@@ -208,6 +220,7 @@ def EndElementHandler(self, name):
208220 # remove last element of the list
209221 self .fsm_state .pop ()
210222 # assert len(self.fsm_state) == 0
223+
211224 elif name == 'MetaData' :
212225 self .fsm_state .pop ()
213226 if len (self .fsm_state ) == 1 :
@@ -218,6 +231,7 @@ def EndElementHandler(self, name):
218231 else :
219232 self .img .darrays [- 1 ].meta = self .meta_da
220233 self .meta_da = None
234+
221235 elif name == 'MD' :
222236 self .fsm_state .pop ()
223237 if self .meta_global is not None and self .meta_da is None :
@@ -226,28 +240,24 @@ def EndElementHandler(self, name):
226240 self .meta_da .data .append (self .nvpair )
227241 # remove reference
228242 self .nvpair = None
243+
229244 elif name == 'LabelTable' :
230245 self .fsm_state .pop ()
231246 # add labeltable
232247 self .img .labeltable = self .lata
233248 self .lata = None
249+
234250 elif name == 'DataArray' :
235251 self .fsm_state .pop ()
252+
236253 elif name == 'CoordinateSystemTransformMatrix' :
237254 self .fsm_state .pop ()
238255 self .coordsys = None
239- elif name == 'DataSpace' :
240- self .write_to = None
241- elif name == 'TransformedSpace' :
242- self .write_to = None
243- elif name == 'MatrixData' :
244- self .write_to = None
245- elif name == 'Name' :
246- self .write_to = None
247- elif name == 'Value' :
248- self .write_to = None
249- elif name == 'Data' :
256+
257+ elif name in ['DataSpace' , 'TransformedSpace' , 'MatrixData' ,
258+ 'Name' , 'Value' , 'Data' ]:
250259 self .write_to = None
260+
251261 elif name == 'Label' :
252262 self .lata .labels .append (self .label )
253263 self .label = None
@@ -277,24 +287,30 @@ def flush_chardata(self):
277287 data = '' .join (self ._char_blocks )
278288 # Reset the char collector
279289 self ._char_blocks = None
290+
280291 # Process data
281292 if self .write_to == 'Name' :
282293 data = data .strip ()
283294 self .nvpair .name = data
295+
284296 elif self .write_to == 'Value' :
285297 data = data .strip ()
286298 self .nvpair .value = data
299+
287300 elif self .write_to == 'DataSpace' :
288301 data = data .strip ()
289302 self .coordsys .dataspace = xform_codes .code [data ]
303+
290304 elif self .write_to == 'TransformedSpace' :
291305 data = data .strip ()
292306 self .coordsys .xformspace = xform_codes .code [data ]
307+
293308 elif self .write_to == 'MatrixData' :
294309 # conversion to numpy array
295310 c = StringIO (data )
296311 self .coordsys .xform = np .loadtxt (c )
297312 c .close ()
313+
298314 elif self .write_to == 'Data' :
299315 da_tmp = self .img .darrays [- 1 ]
300316 da_tmp .data = read_data_block (da_tmp .encoding , da_tmp .endian ,
@@ -303,13 +319,14 @@ def flush_chardata(self):
303319 # update the endianness according to the
304320 # current machine setting
305321 self .endian = gifti_endian_codes .code [sys .byteorder ]
322+
306323 elif self .write_to == 'Label' :
307324 self .label .label = data .strip ()
308325
309326 @property
310327 def pending_data (self ):
311328 " True if there is character data pending for processing "
312- return not self ._char_blocks is None
329+ return self ._char_blocks is not None
313330
314331
315332class Outputter (GiftiImageParser ):
0 commit comments