@@ -132,24 +132,24 @@ def recon(f, rot_cen, sli=[], binning=None, zero_flag=0, block_list=[],
132132 if 1: set negative pixel value to 0
133133 if 0: keep negative pixel value
134134 block_list: list
135- a list of index for the projections that will not be considered in reconstruction
135+ a list of index for the projections that will not be considered in
136+ reconstruction
136137
137138 '''
138139 import tomopy
139140
140141 tmp = np .array (f ['img_tomo' ][0 ])
141142 s = [1 , tmp .shape [0 ], tmp .shape [1 ]]
142- slice_info = ''
143143
144144 if len (sli ) == 0 :
145145 sli = [0 , s [1 ]]
146- elif len (sli ) == 1 and sli [0 ] >= 0 and sli [0 ] <= s [1 ]:
146+ elif len (sli ) == 1 and sli [0 ] >= 0 and sli [0 ] <= s [1 ]:
147147 sli = [sli [0 ], sli [0 ]+ 1 ]
148- slice_info = '_slice_{}' .format (sli [0 ])
149- elif len (sli ) == 2 and sli [0 ] >= 0 and sli [1 ] <= s [1 ]:
150- slice_info = '_slice_{}_{}' .format (sli [0 ], sli [1 ])
148+ elif len (sli ) == 2 and sli [0 ] >= 0 and sli [1 ] <= s [1 ]:
149+ pass
151150 else :
152- print ('non valid slice id, will take reconstruction for the whole object' )
151+ print ('non valid slice id, will take reconstruction for the whole' ,
152+ 'object' )
153153 '''
154154 if len(col) == 0:
155155 col = [0, s[2]]
@@ -161,7 +161,7 @@ def recon(f, rot_cen, sli=[], binning=None, zero_flag=0, block_list=[],
161161 col = [0, s[2]]
162162 print('invalid col id, will take reconstruction for the whole object')
163163 '''
164- #rot_cen = rot_cen - col[0]
164+ # rot_cen = rot_cen - col[0]
165165 theta = np .array (f ['angle' ]) / 180.0 * np .pi
166166 pos = find_nearest (theta , theta [0 ]+ np .pi )
167167 block_list = list (block_list ) + list (np .arange (pos + 1 , len (theta )))
@@ -188,22 +188,25 @@ def recon(f, rot_cen, sli=[], binning=None, zero_flag=0, block_list=[],
188188 wiener_param ['psf' ] = np .ones ([psf , psf ])/ (psf ** 2 )
189189 wiener_param ['reg' ] = None
190190 wiener_param ['balance' ] = 0.3
191- wiener_param ['is_real' ]= True
191+ wiener_param ['is_real' ] = True
192192 wiener_param ['clip' ] = True
193193 else :
194194 add_slice = 0
195195 wiener_param = []
196196
197197 try :
198- rec = np .zeros ([s [0 ] // binning , s [1 ] // binning , s [1 ] // binning ], dtype = np .float32 )
199- except :
198+ rec = np .zeros ([s [0 ] // binning , s [1 ] // binning , s [1 ] // binning ],
199+ dtype = np .float32 )
200+ except Exception :
200201 print ('Cannot allocate memory' )
201202
202203 '''
203204 # first sli_step slices: will not do any denoising
204- prj_norm = proj_normalize(f, [0, sli_step], txm_normed_flag, binning, allow_list, bkg_level)
205+ prj_norm = proj_normalize(f, [0, sli_step], txm_normed_flag, binning,
206+ allow_list, bkg_level)
205207 prj_norm = wiener_denoise(prj_norm, wiener_param, denoise_flag)
206- rec_sub = tomopy.recon(prj_norm, theta, center=rot_cen, algorithm='gridrec')
208+ rec_sub = tomopy.recon(prj_norm, theta, center=rot_cen,
209+ algorithm='gridrec')
207210 rec[0 : rec_sub.shape[0]] = rec_sub
208211 '''
209212 # following slices
@@ -214,16 +217,22 @@ def recon(f, rot_cen, sli=[], binning=None, zero_flag=0, block_list=[],
214217 else :
215218 sli_sub = [i * sli_step + sli_total [0 ], (i + 1 )* sli_step + sli_total [0 ]]
216219 current_sli = [sli_sub [0 ]- add_slice , sli_sub [1 ]+ add_slice ]
217- print (f'recon { i + 1 } /{ n_steps } : sli = [{ sli_sub [0 ]} , { sli_sub [1 ]} ] ... ' )
218- prj_norm = proj_normalize (f , current_sli , txm_normed_flag , binning , allow_list , bkg_level , denoise_level )
220+ print (f'recon { i + 1 } /{ n_steps } : sli = [{ sli_sub [0 ]} ,' ,
221+ f'{ sli_sub [1 ]} ] ... ' )
222+ prj_norm = proj_normalize (f , current_sli , txm_normed_flag , binning ,
223+ allow_list , bkg_level , denoise_level )
219224 prj_norm = wiener_denoise (prj_norm , wiener_param , denoise_flag )
220- if i != 0 and i != n_steps - 1 :
221- prj_norm = prj_norm [:, add_slice // binning :sli_step // binning + add_slice // binning ]
222- rec_sub = tomopy .recon (prj_norm , theta , center = rot_cen , algorithm = 'gridrec' )
223- rec [i * sli_step // binning : i * sli_step // binning + rec_sub .shape [0 ]] = rec_sub
225+ if i != 0 and i != n_steps - 1 :
226+ start = add_slice // binning
227+ stop = sli_step // binning + start
228+ prj_norm = prj_norm [:, start :stop ]
229+ rec_sub = tomopy .recon (prj_norm , theta , center = rot_cen ,
230+ algorithm = 'gridrec' )
231+ start = i * sli_step // binning
232+ rec [start : start + rec_sub .shape [0 ]] = rec_sub
224233
225234 if zero_flag :
226- rec [rec < 0 ] = 0
235+ rec [rec < 0 ] = 0
227236
228237 return rec
229238
@@ -240,35 +249,41 @@ def wiener_denoise(prj_norm, wiener_param, denoise_flag):
240249 is_real = wiener_param ['is_real' ]
241250 clip = wiener_param ['clip' ]
242251 for j in range (ss [0 ]):
243- prj_norm [j ] = skr .wiener (prj_norm [j ], psf = psf , reg = reg , balance = balance , is_real = is_real , clip = clip )
252+ prj_norm [j ] = skr .wiener (prj_norm [j ], psf = psf , reg = reg ,
253+ balance = balance , is_real = is_real , clip = clip )
244254 return prj_norm
245255
246256
247- def proj_normalize (f , sli , txm_normed_flag , binning , allow_list = [], bkg_level = 0 , denoise_level = 9 ):
257+ def proj_normalize (f , sli , txm_normed_flag , binning , allow_list = [],
258+ bkg_level = 0 , denoise_level = 9 ):
248259 import tomopy
249260
250261 img_tomo = np .array (f ['img_tomo' ][:, sli [0 ]:sli [1 ], :])
251262 try :
252263 img_bkg = np .array (f ['img_bkg_avg' ][:, sli [0 ]:sli [1 ]])
253- except :
264+ except Exception :
254265 img_bkg = []
255266 try :
256267 img_dark = np .array (f ['img_dark_avg' ][:, sli [0 ]:sli [1 ]])
257- except :
268+ except Exception :
258269 img_dark = []
259270 if len (img_dark ) == 0 or len (img_bkg ) == 0 or txm_normed_flag == 1 :
260271 prj = img_tomo
261272 else :
262273 prj = (img_tomo - img_dark ) / (img_bkg - img_dark )
263274
264275 s = prj .shape
265- prj = bin_ndarray (prj , (s [0 ], int (s [1 ]/ binning ), int (s [2 ]/ binning )), 'mean' )
276+ prj = bin_ndarray (prj , (s [0 ], int (s [1 ] / binning ), int (s [2 ] / binning )),
277+ 'mean' )
266278 prj_norm = - np .log (prj )
267279 prj_norm [np .isnan (prj_norm )] = 0
268280 prj_norm [np .isinf (prj_norm )] = 0
269281 prj_norm [prj_norm < 0 ] = 0
270282 prj_norm = prj_norm [allow_list ]
271- prj_norm = tomopy .prep .stripe .remove_stripe_fw (prj_norm ,level = denoise_level , wname = 'db5' , sigma = 1 , pad = True )
283+ prj_norm = tomopy .prep .stripe .remove_stripe_fw (prj_norm ,
284+ level = denoise_level ,
285+ wname = 'db5' , sigma = 1 ,
286+ pad = True )
272287 prj_norm -= bkg_level
273288 return prj_norm
274289
@@ -294,19 +309,19 @@ def bin_ndarray(ndarray, new_shape=None, operation='mean'):
294309 [342 350 358 366 374]]
295310
296311 """
297- if new_shape == None :
312+ if new_shape is None :
298313 s = np .array (ndarray .shape )
299- s1 = np .int32 (s / 2 )
314+ s1 = np .int32 (s / 2 )
300315 new_shape = tuple (s1 )
301316 operation = operation .lower ()
302- if not operation in ['sum' , 'mean' ]:
317+ if operation not in ['sum' , 'mean' ]:
303318 raise ValueError ("Operation not supported." )
304319 if ndarray .ndim != len (new_shape ):
305320 raise ValueError ("Shape mismatch: {} -> {}" .format (ndarray .shape ,
306321 new_shape ))
307- compression_pairs = [(d , c // d ) for d ,c in zip (new_shape ,
308- ndarray .shape )]
309- flattened = [l for p in compression_pairs for l in p ]
322+ compression_pairs = [(d , c // d ) for d , c in zip (new_shape ,
323+ ndarray .shape )]
324+ flattened = [x for p in compression_pairs for x in p ]
310325 ndarray = ndarray .reshape (flattened )
311326 for i in range (len (new_shape )):
312327 op = getattr (ndarray , operation )
@@ -330,14 +345,16 @@ def rotcen_test(f, start=None, stop=None, steps=None, sli=0, block_list=[],
330345 psf = np .ones ([psf , psf ])/ (psf ** 2 )
331346 reg = None
332347 balance = 0.3
333- is_real = True
348+ is_real = True
334349 clip = True
335350 else :
336351 addition_slice = 0
337352
353+ if sli == 0 :
354+ sli = int (s [1 ] / 2 )
338355
339- if sli == 0 : sli = int ( s [ 1 ] / 2 )
340- sli_exp = [ np . max ([ 0 , sli - addition_slice // 2 ]), np .min ([sli + addition_slice // 2 + 1 , s [1 ]])]
356+ sli_exp = [ np . max ([ 0 , sli - addition_slice // 2 ]),
357+ np .min ([sli + addition_slice // 2 + 1 , s [1 ]])]
341358
342359 theta = np .array (f ['angle' ]) / 180.0 * np .pi
343360
@@ -357,11 +374,16 @@ def rotcen_test(f, start=None, stop=None, steps=None, sli=0, block_list=[],
357374
358375 prj_norm -= bkg_level
359376
360- prj_norm = tomopy .prep .stripe .remove_stripe_fw (prj_norm ,level = denoise_level , wname = 'db5' , sigma = 1 , pad = True )
361- if denoise_flag : # denoise using wiener filter
377+ prj_norm = tomopy .prep .stripe .remove_stripe_fw (prj_norm ,
378+ level = denoise_level ,
379+ wname = 'db5' , sigma = 1 ,
380+ pad = True )
381+ if denoise_flag : # denoise using wiener filter
362382 ss = prj_norm .shape
363383 for i in range (ss [0 ]):
364- prj_norm [i ] = skr .wiener (prj_norm [i ], psf = psf , reg = reg , balance = balance , is_real = is_real , clip = clip )
384+ prj_norm [i ] = skr .wiener (prj_norm [i ], psf = psf , reg = reg ,
385+ balance = balance , is_real = is_real ,
386+ clip = clip )
365387
366388 s = prj_norm .shape
367389 if len (s ) == 2 :
@@ -374,7 +396,7 @@ def rotcen_test(f, start=None, stop=None, steps=None, sli=0, block_list=[],
374396 allow_list = list (set (np .arange (len (prj_norm ))) - set (block_list ))
375397 prj_norm = prj_norm [allow_list ]
376398 theta = theta [allow_list ]
377- if start == None or stop == None or steps == None :
399+ if start is None or stop is None or steps is None :
378400 start = int (s [2 ]/ 2 - 50 )
379401 stop = int (s [2 ]/ 2 + 50 )
380402 steps = 26
@@ -383,6 +405,7 @@ def rotcen_test(f, start=None, stop=None, steps=None, sli=0, block_list=[],
383405 for i in range (len (cen )):
384406 if print_flag :
385407 print ('{}: rotcen {}' .format (i + 1 , cen [i ]))
386- img [i ] = tomopy .recon (prj_norm [:, addition_slice :addition_slice + 1 ], theta , center = cen [i ], algorithm = 'gridrec' )
408+ img [i ] = tomopy .recon (prj_norm [:, addition_slice :addition_slice + 1 ],
409+ theta , center = cen [i ], algorithm = 'gridrec' )
387410 img = tomopy .circ_mask (img , axis = 0 , ratio = 0.8 )
388411 return img , cen
0 commit comments