Skip to content

Commit b6be8e7

Browse files
authored
Merge pull request #2172 from psavery/fix-flake8
Fix flake8 issues
2 parents 5b25e14 + a65afe7 commit b6be8e7

1 file changed

Lines changed: 63 additions & 40 deletions

File tree

tomviz/python/Recon_tomopy_fxi.py

Lines changed: 63 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)