httomo-backends 0.6.2__py3-none-any.whl → 0.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- httomo_backends/methods_database/packages/backends/httomolibgpu/httomolibgpu.yaml +11 -2
- httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/algorithm.py +209 -47
- httomo_backends/pipelines_full/FISTA3d_tomobar_directive.yaml +14 -0
- httomo_backends/pipelines_full/titaren_center_pc_FBP3d_resample_directive.yaml +18 -0
- httomo_backends/scripts/yaml_pipelines_generator.py +15 -11
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_PD.yaml +1 -0
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_ROF.yaml +1 -0
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/CGLS3d_tomobar.yaml +2 -1
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP2d_astra.yaml +1 -1
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP3d_tomobar.yaml +1 -1
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FISTA3d_tomobar.yaml +15 -0
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/LPRec3d_tomobar.yaml +4 -1
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/SIRT3d_tomobar.yaml +2 -1
- {httomo_backends-0.6.2.dist-info → httomo_backends-0.7.dist-info}/METADATA +1 -1
- {httomo_backends-0.6.2.dist-info → httomo_backends-0.7.dist-info}/RECORD +18 -16
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_savu.yaml +0 -11
- {httomo_backends-0.6.2.dist-info → httomo_backends-0.7.dist-info}/WHEEL +0 -0
- {httomo_backends-0.6.2.dist-info → httomo_backends-0.7.dist-info}/licenses/LICENSE +0 -0
- {httomo_backends-0.6.2.dist-info → httomo_backends-0.7.dist-info}/top_level.txt +0 -0
|
@@ -26,7 +26,7 @@ misc:
|
|
|
26
26
|
save_result_default: False
|
|
27
27
|
padding: True
|
|
28
28
|
memory_gpu:
|
|
29
|
-
multiplier:
|
|
29
|
+
multiplier: 6.1
|
|
30
30
|
method: direct
|
|
31
31
|
total_variation_PD:
|
|
32
32
|
pattern: all
|
|
@@ -35,7 +35,7 @@ misc:
|
|
|
35
35
|
save_result_default: False
|
|
36
36
|
padding: True
|
|
37
37
|
memory_gpu:
|
|
38
|
-
multiplier:
|
|
38
|
+
multiplier: 9.1
|
|
39
39
|
method: direct
|
|
40
40
|
morph:
|
|
41
41
|
sino_360_to_180:
|
|
@@ -181,6 +181,15 @@ recon:
|
|
|
181
181
|
memory_gpu:
|
|
182
182
|
multiplier: None
|
|
183
183
|
method: module
|
|
184
|
+
FISTA3d_tomobar:
|
|
185
|
+
pattern: sinogram
|
|
186
|
+
output_dims_change: True
|
|
187
|
+
implementation: gpu_cupy
|
|
188
|
+
save_result_default: True
|
|
189
|
+
padding: True
|
|
190
|
+
memory_gpu:
|
|
191
|
+
multiplier: None
|
|
192
|
+
method: module
|
|
184
193
|
rotation:
|
|
185
194
|
find_center_vo:
|
|
186
195
|
pattern: projection
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/algorithm.py
CHANGED
|
@@ -30,14 +30,21 @@ __all__ = [
|
|
|
30
30
|
"_calc_memory_bytes_LPRec3d_tomobar",
|
|
31
31
|
"_calc_memory_bytes_SIRT3d_tomobar",
|
|
32
32
|
"_calc_memory_bytes_CGLS3d_tomobar",
|
|
33
|
+
"_calc_memory_bytes_FISTA3d_tomobar",
|
|
33
34
|
"_calc_output_dim_FBP2d_astra",
|
|
34
35
|
"_calc_output_dim_FBP3d_tomobar",
|
|
35
36
|
"_calc_output_dim_LPRec3d_tomobar",
|
|
36
37
|
"_calc_output_dim_SIRT3d_tomobar",
|
|
37
38
|
"_calc_output_dim_CGLS3d_tomobar",
|
|
39
|
+
"_calc_output_dim_FISTA3d_tomobar",
|
|
40
|
+
"_calc_padding_FISTA3d_tomobar",
|
|
38
41
|
]
|
|
39
42
|
|
|
40
43
|
|
|
44
|
+
def _calc_padding_FISTA3d_tomobar(**kwargs) -> Tuple[int, int]:
|
|
45
|
+
return (5, 5)
|
|
46
|
+
|
|
47
|
+
|
|
41
48
|
def __calc_output_dim_recon(non_slice_dims_shape, **kwargs):
|
|
42
49
|
"""Function to calculate output dimensions for all reconstructors.
|
|
43
50
|
The change of the dimension depends either on the user-provided "recon_size"
|
|
@@ -72,14 +79,21 @@ def _calc_output_dim_CGLS3d_tomobar(non_slice_dims_shape, **kwargs):
|
|
|
72
79
|
return __calc_output_dim_recon(non_slice_dims_shape, **kwargs)
|
|
73
80
|
|
|
74
81
|
|
|
82
|
+
def _calc_output_dim_FISTA3d_tomobar(non_slice_dims_shape, **kwargs):
|
|
83
|
+
return __calc_output_dim_recon(non_slice_dims_shape, **kwargs)
|
|
84
|
+
|
|
85
|
+
|
|
75
86
|
def _calc_memory_bytes_FBP3d_tomobar(
|
|
76
87
|
non_slice_dims_shape: Tuple[int, int],
|
|
77
88
|
dtype: np.dtype,
|
|
78
89
|
**kwargs,
|
|
79
90
|
) -> Tuple[int, int]:
|
|
91
|
+
detector_pad = 0
|
|
80
92
|
if "detector_pad" in kwargs:
|
|
81
93
|
detector_pad = kwargs["detector_pad"]
|
|
82
|
-
|
|
94
|
+
if detector_pad is True:
|
|
95
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
96
|
+
elif detector_pad is False:
|
|
83
97
|
detector_pad = 0
|
|
84
98
|
|
|
85
99
|
angles_tot = non_slice_dims_shape[0]
|
|
@@ -132,11 +146,11 @@ def _calc_memory_bytes_FBP3d_tomobar(
|
|
|
132
146
|
|
|
133
147
|
# 7. astra backprojection will generate an output array
|
|
134
148
|
# https://github.com/dkazanc/ToMoBAR/blob/54137829b6326406e09f6ef9c95eb35c213838a7/tomobar/astra_wrappers/astra_base.py#L524
|
|
135
|
-
output_dims = _calc_output_dim_FBP3d_tomobar(
|
|
149
|
+
output_dims = _calc_output_dim_FBP3d_tomobar((angles_tot, det_width), **kwargs)
|
|
136
150
|
recon_output_size = np.prod(output_dims) * np.float32().itemsize
|
|
137
151
|
|
|
138
152
|
# 7. astra backprojection makes a copy of the input
|
|
139
|
-
astra_input_slice_size =
|
|
153
|
+
astra_input_slice_size = (angles_tot * det_width) * np.float32().itemsize
|
|
140
154
|
|
|
141
155
|
## now we calculate back projection memory (2 copies of the input + reconstruction output)
|
|
142
156
|
projection_mem_size = (
|
|
@@ -169,10 +183,16 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
169
183
|
) -> Tuple[int, int]:
|
|
170
184
|
# Based on: https://github.com/dkazanc/ToMoBAR/pull/112/commits/4704ecdc6ded3dd5ec0583c2008aa104f30a8a39
|
|
171
185
|
|
|
186
|
+
detector_pad = 0
|
|
172
187
|
if "detector_pad" in kwargs:
|
|
173
188
|
detector_pad = kwargs["detector_pad"]
|
|
174
|
-
|
|
175
|
-
detector_pad =
|
|
189
|
+
if detector_pad is True:
|
|
190
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
191
|
+
elif detector_pad is False:
|
|
192
|
+
detector_pad = 0
|
|
193
|
+
|
|
194
|
+
min_mem_usage_filter = False
|
|
195
|
+
min_mem_usage_ifft2 = False
|
|
176
196
|
|
|
177
197
|
angles_tot = non_slice_dims_shape[0]
|
|
178
198
|
DetectorsLengthH_prepad = non_slice_dims_shape[1]
|
|
@@ -195,11 +215,22 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
195
215
|
)
|
|
196
216
|
)
|
|
197
217
|
|
|
198
|
-
center_size =
|
|
199
|
-
center_size = min(center_size, n * 2
|
|
218
|
+
center_size = 32768
|
|
219
|
+
center_size = min(center_size, n * 2)
|
|
220
|
+
|
|
221
|
+
chunk_count = 4
|
|
222
|
+
projection_chunk_count = 4
|
|
223
|
+
oversampling_level = 4 # at least 3 or larger required
|
|
224
|
+
power_of_2_oversampling = True
|
|
225
|
+
|
|
226
|
+
if power_of_2_oversampling:
|
|
227
|
+
ne = 2 ** math.ceil(math.log2(DetectorsLengthH_prepad * 3))
|
|
228
|
+
if n > ne:
|
|
229
|
+
ne = 2 ** math.ceil(math.log2(n))
|
|
230
|
+
else:
|
|
231
|
+
ne = int(oversampling_level * DetectorsLengthH_prepad)
|
|
232
|
+
ne = max(ne, n)
|
|
200
233
|
|
|
201
|
-
oversampling_level = 2 # at least 2 or larger required
|
|
202
|
-
ne = oversampling_level * n
|
|
203
234
|
padding_m = ne // 2 - n // 2
|
|
204
235
|
|
|
205
236
|
if "angles" in kwargs:
|
|
@@ -213,8 +244,6 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
213
244
|
np.ceil(2)
|
|
214
245
|
) # assume a 2 * PI projection angle range
|
|
215
246
|
|
|
216
|
-
chunk_count = 4
|
|
217
|
-
|
|
218
247
|
output_dims = __calc_output_dim_recon(non_slice_dims_shape, **kwargs)
|
|
219
248
|
if odd_horiz:
|
|
220
249
|
output_dims = tuple(x + 1 for x in output_dims)
|
|
@@ -252,7 +281,7 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
252
281
|
irfft_result_size = angles_tot * (n + padding_m * 2) * np.float32().itemsize
|
|
253
282
|
|
|
254
283
|
datac_size = angles_tot * n * np.complex64().itemsize / 2
|
|
255
|
-
fde_size =
|
|
284
|
+
fde_size = 2 * n * 2 * n * np.complex64().itemsize / 2
|
|
256
285
|
fft_plan_slice_size = (
|
|
257
286
|
cufft_estimate_1d(nx=n, fft_type=CufftType.CUFFT_C2C, batch=angles_tot * SLICES)
|
|
258
287
|
/ SLICES
|
|
@@ -270,7 +299,7 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
270
299
|
)
|
|
271
300
|
ifft2_plan_slice_size = (
|
|
272
301
|
cufft_estimate_2d(
|
|
273
|
-
nx=
|
|
302
|
+
nx=2 * n, ny=2 * n, fft_type=CufftType.CUFFT_C2C
|
|
274
303
|
)
|
|
275
304
|
/ 2
|
|
276
305
|
)
|
|
@@ -309,24 +338,40 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
309
338
|
add_to_memory_counters(scaled_filter_size, False)
|
|
310
339
|
|
|
311
340
|
add_to_memory_counters(tmp_p_input_slice, True)
|
|
341
|
+
if min_mem_usage_filter:
|
|
342
|
+
add_to_memory_counters(rfft_plan_slice_size / 4, False)
|
|
343
|
+
add_to_memory_counters(irfft_plan_slice_size / 4, False)
|
|
344
|
+
add_to_memory_counters(padded_tmp_p_input_slice, False)
|
|
345
|
+
|
|
346
|
+
add_to_memory_counters(rfft_result_size, False)
|
|
347
|
+
add_to_memory_counters(filtered_rfft_result_size, False)
|
|
348
|
+
add_to_memory_counters(-rfft_result_size, False)
|
|
349
|
+
add_to_memory_counters(-padded_tmp_p_input_slice, False)
|
|
350
|
+
|
|
351
|
+
add_to_memory_counters(irfft_scratch_memory_size, False)
|
|
352
|
+
add_to_memory_counters(-irfft_scratch_memory_size, False)
|
|
353
|
+
add_to_memory_counters(irfft_result_size, False)
|
|
354
|
+
add_to_memory_counters(-filtered_rfft_result_size, False)
|
|
355
|
+
|
|
356
|
+
add_to_memory_counters(-irfft_result_size, False)
|
|
357
|
+
else:
|
|
358
|
+
add_to_memory_counters(rfft_plan_slice_size / chunk_count / projection_chunk_count * 2, True)
|
|
359
|
+
add_to_memory_counters(irfft_plan_slice_size / chunk_count / projection_chunk_count * 2, True)
|
|
360
|
+
# add_to_memory_counters(irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
361
|
+
for _ in range(0, chunk_count):
|
|
362
|
+
add_to_memory_counters(padded_tmp_p_input_slice / chunk_count / projection_chunk_count, True)
|
|
312
363
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
add_to_memory_counters(padded_tmp_p_input_slice / chunk_count, True)
|
|
318
|
-
|
|
319
|
-
add_to_memory_counters(rfft_result_size / chunk_count, True)
|
|
320
|
-
add_to_memory_counters(filtered_rfft_result_size / chunk_count, True)
|
|
321
|
-
add_to_memory_counters(-rfft_result_size / chunk_count, True)
|
|
322
|
-
add_to_memory_counters(-padded_tmp_p_input_slice / chunk_count, True)
|
|
364
|
+
add_to_memory_counters(rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
365
|
+
add_to_memory_counters(filtered_rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
366
|
+
add_to_memory_counters(-rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
367
|
+
add_to_memory_counters(-padded_tmp_p_input_slice / chunk_count / projection_chunk_count, True)
|
|
323
368
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
369
|
+
add_to_memory_counters(irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
370
|
+
add_to_memory_counters(-irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
371
|
+
add_to_memory_counters(irfft_result_size / chunk_count / projection_chunk_count, True)
|
|
372
|
+
add_to_memory_counters(-filtered_rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
328
373
|
|
|
329
|
-
|
|
374
|
+
add_to_memory_counters(-irfft_result_size / chunk_count / projection_chunk_count, True)
|
|
330
375
|
|
|
331
376
|
add_to_memory_counters(-padded_in_slice_size, True)
|
|
332
377
|
add_to_memory_counters(-filter_size, False)
|
|
@@ -342,17 +387,25 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
342
387
|
|
|
343
388
|
add_to_memory_counters(-fft_result_size, True)
|
|
344
389
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
add_to_memory_counters(fde_size
|
|
348
|
-
add_to_memory_counters(-fde_size
|
|
390
|
+
if min_mem_usage_ifft2:
|
|
391
|
+
add_to_memory_counters(ifft2_plan_slice_size, False)
|
|
392
|
+
add_to_memory_counters(fde_size * 2, False)
|
|
393
|
+
add_to_memory_counters(-fde_size * 2, False)
|
|
394
|
+
else:
|
|
395
|
+
add_to_memory_counters(ifft2_plan_slice_size / chunk_count * 2, True)
|
|
396
|
+
for _ in range(0, chunk_count):
|
|
397
|
+
add_to_memory_counters(fde_size / chunk_count, True)
|
|
398
|
+
add_to_memory_counters(-fde_size / chunk_count, True)
|
|
349
399
|
|
|
350
400
|
add_to_memory_counters(recon_output_size, True)
|
|
351
401
|
add_to_memory_counters(-fde_size, True)
|
|
352
402
|
add_to_memory_counters(circular_mask_size, False)
|
|
353
403
|
add_to_memory_counters(after_recon_swapaxis_slice, True)
|
|
354
404
|
|
|
355
|
-
|
|
405
|
+
if min_mem_usage_ifft2 and min_mem_usage_filter:
|
|
406
|
+
return (tot_memory_bytes * 1.1 + 30 * 1024 * 1024, fixed_amount)
|
|
407
|
+
else:
|
|
408
|
+
return (tot_memory_bytes * 1.1, fixed_amount)
|
|
356
409
|
|
|
357
410
|
|
|
358
411
|
def _calc_memory_bytes_SIRT3d_tomobar(
|
|
@@ -361,21 +414,48 @@ def _calc_memory_bytes_SIRT3d_tomobar(
|
|
|
361
414
|
**kwargs,
|
|
362
415
|
) -> Tuple[int, int]:
|
|
363
416
|
|
|
417
|
+
detector_pad = 0
|
|
364
418
|
if "detector_pad" in kwargs:
|
|
365
419
|
detector_pad = kwargs["detector_pad"]
|
|
366
|
-
|
|
367
|
-
detector_pad =
|
|
420
|
+
if detector_pad is True:
|
|
421
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
422
|
+
elif detector_pad is False:
|
|
423
|
+
detector_pad = 0
|
|
424
|
+
|
|
368
425
|
anglesnum = non_slice_dims_shape[0]
|
|
369
|
-
|
|
426
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
370
427
|
# calculate the output shape
|
|
371
428
|
output_dims = _calc_output_dim_SIRT3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
429
|
+
recon_data_size_original = (
|
|
430
|
+
np.prod(output_dims) * dtype.itemsize
|
|
431
|
+
) # x_rec user-defined size
|
|
432
|
+
|
|
433
|
+
in_data_size = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
434
|
+
|
|
435
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
372
436
|
|
|
373
|
-
|
|
374
|
-
out_data_size = np.prod(output_dims) * dtype.itemsize
|
|
437
|
+
out_data_size = np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
375
438
|
|
|
376
|
-
|
|
439
|
+
R = in_data_size
|
|
440
|
+
C = out_data_size
|
|
377
441
|
|
|
378
|
-
|
|
442
|
+
Res = in_data_size
|
|
443
|
+
Res_times_R = Res
|
|
444
|
+
C_times_res = out_data_size
|
|
445
|
+
|
|
446
|
+
astra_projection = (in_data_size + out_data_size)
|
|
447
|
+
|
|
448
|
+
tot_memory_bytes = int(
|
|
449
|
+
recon_data_size_original
|
|
450
|
+
+ in_data_size
|
|
451
|
+
+ out_data_size
|
|
452
|
+
+ R
|
|
453
|
+
+ C
|
|
454
|
+
+ Res
|
|
455
|
+
+ Res_times_R
|
|
456
|
+
+ C_times_res
|
|
457
|
+
+ astra_projection
|
|
458
|
+
)
|
|
379
459
|
return (tot_memory_bytes, 0)
|
|
380
460
|
|
|
381
461
|
|
|
@@ -384,20 +464,102 @@ def _calc_memory_bytes_CGLS3d_tomobar(
|
|
|
384
464
|
dtype: np.dtype,
|
|
385
465
|
**kwargs,
|
|
386
466
|
) -> Tuple[int, int]:
|
|
467
|
+
detector_pad = 0
|
|
387
468
|
if "detector_pad" in kwargs:
|
|
388
469
|
detector_pad = kwargs["detector_pad"]
|
|
389
|
-
|
|
390
|
-
detector_pad =
|
|
470
|
+
if detector_pad is True:
|
|
471
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
472
|
+
elif detector_pad is False:
|
|
473
|
+
detector_pad = 0
|
|
391
474
|
|
|
392
475
|
anglesnum = non_slice_dims_shape[0]
|
|
393
|
-
|
|
476
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
394
477
|
# calculate the output shape
|
|
395
478
|
output_dims = _calc_output_dim_CGLS3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
479
|
+
recon_data_size_original = (
|
|
480
|
+
np.prod(output_dims) * dtype.itemsize
|
|
481
|
+
) # x_rec user-defined size
|
|
482
|
+
|
|
483
|
+
in_data_size = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
484
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
485
|
+
recon_data_size = (
|
|
486
|
+
np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
487
|
+
) # large volume in the algorithm
|
|
488
|
+
recon_data_size2 = recon_data_size # x_rec linearised
|
|
489
|
+
d_recon = recon_data_size
|
|
490
|
+
d_recon2 = d_recon # linearised, possibly a copy
|
|
491
|
+
|
|
492
|
+
data_r = in_data_size
|
|
493
|
+
Ad = recon_data_size
|
|
494
|
+
Ad2 = Ad
|
|
495
|
+
s = data_r
|
|
496
|
+
collection = (
|
|
497
|
+
in_data_size
|
|
498
|
+
+ recon_data_size_original
|
|
499
|
+
+ recon_data_size
|
|
500
|
+
+ recon_data_size2
|
|
501
|
+
+ d_recon
|
|
502
|
+
+ d_recon2
|
|
503
|
+
+ data_r
|
|
504
|
+
+ Ad
|
|
505
|
+
+ Ad2
|
|
506
|
+
+ s
|
|
507
|
+
)
|
|
508
|
+
astra_contribution = in_data_size + recon_data_size
|
|
396
509
|
|
|
397
|
-
|
|
398
|
-
|
|
510
|
+
tot_memory_bytes = int(collection + astra_contribution)
|
|
511
|
+
return (tot_memory_bytes, 0)
|
|
399
512
|
|
|
400
|
-
astra_projection = 2.5 * (in_data_size + out_data_size)
|
|
401
513
|
|
|
402
|
-
|
|
514
|
+
def _calc_memory_bytes_FISTA3d_tomobar(
|
|
515
|
+
non_slice_dims_shape: Tuple[int, int],
|
|
516
|
+
dtype: np.dtype,
|
|
517
|
+
**kwargs,
|
|
518
|
+
) -> Tuple[int, int]:
|
|
519
|
+
detector_pad = 0
|
|
520
|
+
if "detector_pad" in kwargs:
|
|
521
|
+
detector_pad = kwargs["detector_pad"]
|
|
522
|
+
if detector_pad is True:
|
|
523
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
524
|
+
elif detector_pad is False:
|
|
525
|
+
detector_pad = 0
|
|
526
|
+
|
|
527
|
+
anglesnum = non_slice_dims_shape[0]
|
|
528
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
529
|
+
|
|
530
|
+
# calculate the output shape
|
|
531
|
+
output_dims = _calc_output_dim_FISTA3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
532
|
+
recon_data_size_original = (
|
|
533
|
+
np.prod(output_dims) * dtype.itemsize
|
|
534
|
+
) # recon user-defined size
|
|
535
|
+
|
|
536
|
+
in_data_siz_pad = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
537
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
538
|
+
|
|
539
|
+
residual_grad = in_data_siz_pad
|
|
540
|
+
out_data_size = np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
541
|
+
X_t = out_data_size
|
|
542
|
+
X_old = out_data_size
|
|
543
|
+
|
|
544
|
+
grad_fidelity = out_data_size
|
|
545
|
+
|
|
546
|
+
fista_part = (
|
|
547
|
+
recon_data_size_original
|
|
548
|
+
+ in_data_siz_pad
|
|
549
|
+
+ residual_grad
|
|
550
|
+
+ grad_fidelity
|
|
551
|
+
+ X_t
|
|
552
|
+
+ X_old
|
|
553
|
+
+ out_data_size
|
|
554
|
+
)
|
|
555
|
+
regul_part = 8 * np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
556
|
+
|
|
557
|
+
tot_memory_bytes = int(fista_part + regul_part)
|
|
403
558
|
return (tot_memory_bytes, 0)
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
def __estimate_detectorHoriz_padding(detX_size) -> int:
|
|
562
|
+
det_half = detX_size // 2
|
|
563
|
+
padded_value_exact = int(np.sqrt(2 * (det_half**2))) - det_half
|
|
564
|
+
padded_add_margin = int(0.1 * padded_value_exact)
|
|
565
|
+
return padded_value_exact + padded_add_margin
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
- method: standard_tomo
|
|
2
|
+
module_path: httomo.data.hdf.loaders
|
|
3
|
+
- method: find_center_vo
|
|
4
|
+
module_path: httomolibgpu.recon.rotation
|
|
5
|
+
- method: normalize
|
|
6
|
+
module_path: httomolibgpu.prep.normalize
|
|
7
|
+
- method: FISTA3d_tomobar
|
|
8
|
+
module_path: httomolibgpu.recon.algorithm
|
|
9
|
+
- method: calculate_stats
|
|
10
|
+
module_path: httomo.methods
|
|
11
|
+
- method: rescale_to_int
|
|
12
|
+
module_path: httomolib.misc.rescale
|
|
13
|
+
- method: save_to_images
|
|
14
|
+
module_path: httomolib.misc.images
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
- method: standard_tomo
|
|
2
|
+
module_path: httomo.data.hdf.loaders
|
|
3
|
+
- method: find_center_pc
|
|
4
|
+
module_path: httomolibgpu.recon.rotation
|
|
5
|
+
- method: normalize
|
|
6
|
+
module_path: httomolibgpu.prep.normalize
|
|
7
|
+
- method: remove_stripe_ti
|
|
8
|
+
module_path: httomolibgpu.prep.stripe
|
|
9
|
+
- method: FBP3d_tomobar
|
|
10
|
+
module_path: httomolibgpu.recon.algorithm
|
|
11
|
+
- method: data_resampler
|
|
12
|
+
module_path: httomolibgpu.misc.morph
|
|
13
|
+
- method: calculate_stats
|
|
14
|
+
module_path: httomo.methods
|
|
15
|
+
- method: rescale_to_int
|
|
16
|
+
module_path: httomolib.misc.rescale
|
|
17
|
+
- method: save_to_images
|
|
18
|
+
module_path: httomolib.misc.images
|
|
@@ -31,14 +31,10 @@ import ruamel.yaml
|
|
|
31
31
|
import httomo_backends
|
|
32
32
|
import yaml
|
|
33
33
|
|
|
34
|
-
try:
|
|
35
|
-
from httomo import __version__ as httomo_version
|
|
36
|
-
except:
|
|
37
|
-
httomo_version = "2.5" # temporary version fix for sphinx build
|
|
38
|
-
pass
|
|
39
34
|
|
|
40
35
|
CS = ruamel.yaml.comments.CommentedSeq # defaults to block style
|
|
41
36
|
|
|
37
|
+
|
|
42
38
|
class SweepRange:
|
|
43
39
|
"""SweepRange class."""
|
|
44
40
|
|
|
@@ -140,11 +136,8 @@ def yaml_pipelines_generator(
|
|
|
140
136
|
except OSError as e:
|
|
141
137
|
print("loading yaml template failed", e)
|
|
142
138
|
|
|
143
|
-
version_split = httomo_version.split(".")
|
|
144
|
-
major = version_split[0]
|
|
145
|
-
minor = version_split[1]
|
|
146
139
|
pipeline_full.yaml_set_start_comment(
|
|
147
|
-
|
|
140
|
+
"This pipeline should be supported by the latest developments of HTTomo. Use module load httomo/latest module at Diamond."
|
|
148
141
|
)
|
|
149
142
|
|
|
150
143
|
if "loaders" in module_name:
|
|
@@ -216,6 +209,17 @@ def yaml_pipelines_generator(
|
|
|
216
209
|
key="metadata_path",
|
|
217
210
|
comment="Provide an absolute path to the text file with distortion coefficients.",
|
|
218
211
|
)
|
|
212
|
+
elif "data_resampler" in method_name:
|
|
213
|
+
pipeline_full.yaml_set_comment_before_after_key(
|
|
214
|
+
i,
|
|
215
|
+
"--- Down/up sampling the data. --- ",
|
|
216
|
+
indent=0,
|
|
217
|
+
)
|
|
218
|
+
pipeline_full += yaml_template_method
|
|
219
|
+
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
220
|
+
key="newshape",
|
|
221
|
+
comment="Provide a new shape for a 2D slice, e.g. [256, 256].",
|
|
222
|
+
)
|
|
219
223
|
elif "sino_360_to_180" in method_name:
|
|
220
224
|
pipeline_full.yaml_set_comment_before_after_key(
|
|
221
225
|
i,
|
|
@@ -243,7 +247,7 @@ def yaml_pipelines_generator(
|
|
|
243
247
|
pipeline_full += yaml_template_method
|
|
244
248
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
245
249
|
key="alpha",
|
|
246
|
-
comment="Controls the balance between the strength of the filter and the amount of noise reduction.
|
|
250
|
+
comment="Controls the balance between the strength of the filter and the amount of noise reduction. Smaller values lead to less noise and more blur.",
|
|
247
251
|
)
|
|
248
252
|
elif "stripe" in module_name:
|
|
249
253
|
pipeline_full.yaml_set_comment_before_after_key(
|
|
@@ -265,7 +269,7 @@ def yaml_pipelines_generator(
|
|
|
265
269
|
)
|
|
266
270
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
267
271
|
key="detector_pad",
|
|
268
|
-
comment="Horizontal detector padding to minimise circle/arc-type artifacts in the reconstruction",
|
|
272
|
+
comment="Horizontal detector padding to minimise circle/arc-type artifacts in the reconstruction. Set to true to enable automatic padding or an integer",
|
|
269
273
|
)
|
|
270
274
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
271
275
|
key="recon_mask_radius",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
- method: FISTA3d_tomobar
|
|
2
|
+
module_path: httomolibgpu.recon.algorithm
|
|
3
|
+
parameters:
|
|
4
|
+
center: ${{centering.side_outputs.centre_of_rotation}}
|
|
5
|
+
detector_pad: false
|
|
6
|
+
recon_size: null
|
|
7
|
+
recon_mask_radius: 0.95
|
|
8
|
+
iterations: 20
|
|
9
|
+
subsets_number: 6
|
|
10
|
+
regularisation_type: PD_TV
|
|
11
|
+
regularisation_parameter: 1.0e-06
|
|
12
|
+
regularisation_iterations: 50
|
|
13
|
+
regularisation_half_precision: true
|
|
14
|
+
nonnegativity: true
|
|
15
|
+
neglog: false
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/LPRec3d_tomobar.yaml
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
module_path: httomolibgpu.recon.algorithm
|
|
3
3
|
parameters:
|
|
4
4
|
center: ${{centering.side_outputs.centre_of_rotation}}
|
|
5
|
-
detector_pad:
|
|
5
|
+
detector_pad: false
|
|
6
6
|
filter_type: shepp
|
|
7
7
|
filter_freq_cutoff: 1.0
|
|
8
8
|
recon_size: null
|
|
9
9
|
recon_mask_radius: 0.95
|
|
10
|
+
power_of_2_oversampling: true
|
|
11
|
+
min_mem_usage_filter: false
|
|
12
|
+
min_mem_usage_ifft2: false
|
|
10
13
|
neglog: false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: httomo-backends
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7
|
|
4
4
|
Summary: Supplementary files for HTTomo backends.
|
|
5
5
|
Author: Garry ODonnell, Jacob Williamson
|
|
6
6
|
Author-email: Daniil Kazantsev <daniil.kazantsev@diamond.ac.uk>, Yousef Moazzam <yousef.moazzam@diamond.ac.uk>, Jessica Verschoyle <jessica.verschoyle@diamond.ac.uk>, Naman Gera <naman.gera@diamond.ac.uk>, scientificsoftware@diamond.ac.uk
|
|
@@ -7,7 +7,7 @@ httomo_backends/methods_database/packages/httomo.yaml,sha256=tI3D-7IJcdu4EbKwjsj
|
|
|
7
7
|
httomo_backends/methods_database/packages/backends/httomolib/httomolib.yaml,sha256=8l2Z6GGlXIIe2vcX85GK4wis5zxhgmg7EmlwLMV_rtI,938
|
|
8
8
|
httomo_backends/methods_database/packages/backends/httomolib/httomolib_modules.yaml,sha256=tbvivxcAc90Wu36v1yFnGN-WqBIA1NHGWrg_D28UXi8,117
|
|
9
9
|
httomo_backends/methods_database/packages/backends/httomolibgpu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
httomo_backends/methods_database/packages/backends/httomolibgpu/httomolibgpu.yaml,sha256=
|
|
10
|
+
httomo_backends/methods_database/packages/backends/httomolibgpu/httomolibgpu.yaml,sha256=Y1a3J_OCeojiG4HhbRPkDdJ0KvdpGARkEk6k5OcIzHY,5347
|
|
11
11
|
httomo_backends/methods_database/packages/backends/httomolibgpu/httomolibgpu_modules.yaml,sha256=HZWQ74Ygi25hjNg7wR9muPDdmN8STtOMY-LXWaTfspc,282
|
|
12
12
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -20,7 +20,7 @@ httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs
|
|
|
20
20
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/prep/phase.py,sha256=kYznizW0jMVJdGyuE10McVLsWWggUsP5bvJiHEVvSSM,4075
|
|
21
21
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/prep/stripe.py,sha256=KnS8IpcXaLeiIWr4qAKwOrcK1vS9zrU6u5gOITZ159k,4623
|
|
22
22
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/algorithm.py,sha256=
|
|
23
|
+
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/algorithm.py,sha256=ztqcHihOoprL0xYggv8pkF3AS9mQ1L6o0AICszdvTfg,20656
|
|
24
24
|
httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/peak_memory_line_profile_hook.py,sha256=hb-CyqD5TKxDg6Rg5fvFeXIO2nvjbp_XMTeRdJZ8ONo,6347
|
|
25
25
|
httomo_backends/methods_database/packages/backends/tomopy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
httomo_backends/methods_database/packages/backends/tomopy/tomopy.yaml,sha256=URe18BAV1EbGLil53t88T42BuKSiUHz6r3uzs_wo8Ug,11215
|
|
@@ -36,16 +36,18 @@ httomo_backends/pipelines_full/FBP2d_astra_directive.yaml,sha256=BAT4wUa3nOacHRA
|
|
|
36
36
|
httomo_backends/pipelines_full/FBP3d_tomobar_denoising_directive.yaml,sha256=Ycu8X7mS2n872e0ji4btPLjSTYgEhcZVPeMEeI6MPAk,644
|
|
37
37
|
httomo_backends/pipelines_full/FBP3d_tomobar_directive.yaml,sha256=QyqyAmWZjmcgV0PjhgmZtSjytHt8BeRLncH4hkJRmcs,574
|
|
38
38
|
httomo_backends/pipelines_full/FBP3d_tomobar_noimagesaving_directive.yaml,sha256=uute7GdEEshbnmljjeyDi3Z5aqZftBTvo7Ti4wKgzhk,403
|
|
39
|
+
httomo_backends/pipelines_full/FISTA3d_tomobar_directive.yaml,sha256=xuBtnN3vT2tfpKwmW0CH12CRXeV2evNN2hpdPul9L6c,445
|
|
39
40
|
httomo_backends/pipelines_full/LPRec3d_tomobar_directive.yaml,sha256=c6c-cXCstUgLVqprfMFVdxzcTCeE8H-Dnhq7kmSIhYc,577
|
|
40
41
|
httomo_backends/pipelines_full/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
42
|
httomo_backends/pipelines_full/deg360_distortion_FBP3d_tomobar_directive.yaml,sha256=3Ht3yAzi97VW29OfvDE9j_p3NYbZfHDlfZMuRivsdKo,676
|
|
42
43
|
httomo_backends/pipelines_full/deg360_paganin_FBP3d_tomobar_directive.yaml,sha256=Qikcxqq_b3_9TpaOg5eSlYqfs1Vj9l30vx56cl5YoVI,660
|
|
43
44
|
httomo_backends/pipelines_full/sweep_center_FBP3d_tomobar_directive.yaml,sha256=ERai5NvyAQz9-1EAdMUw3XkjlMvZhh6LCtXQpRh7mv4,277
|
|
44
45
|
httomo_backends/pipelines_full/sweep_paganin_FBP3d_tomobar_directive.yaml,sha256=qoiY62uP5kHSL4qqSThJAaMwHq4PTN-dJSNRsBFxyQw,397
|
|
46
|
+
httomo_backends/pipelines_full/titaren_center_pc_FBP3d_resample_directive.yaml,sha256=lhT-jE2karklr_-cgEyvPRYLVwNGJgpf8XBI1r1TMLc,574
|
|
45
47
|
httomo_backends/pipelines_full/tomopy_gridrec_directive.yaml,sha256=NlrX-mqyzjJvwGotTLwosBnC4d9pPRNB1JWFA7YXHuM,533
|
|
46
48
|
httomo_backends/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
49
|
httomo_backends/scripts/json_pipelines_generator.py,sha256=iWTsYr1i0Ei77Imaml5HXWvZUUeX-tkU1WRIdxskV3M,8322
|
|
48
|
-
httomo_backends/scripts/yaml_pipelines_generator.py,sha256=
|
|
50
|
+
httomo_backends/scripts/yaml_pipelines_generator.py,sha256=t_B3qJ0AGsjzd1_rSp76pC-9o4JbO7e28UIfWcN9olk,16393
|
|
49
51
|
httomo_backends/scripts/yaml_templates_generator.py,sha256=NjE5q8YXxkXjA-9WTg4YB8ccawNA0veeJE1C8yyWqlI,8532
|
|
50
52
|
httomo_backends/scripts/yaml_unsupported_tomopy_remove.py,sha256=R3ZAfFgpVsBWS7zBjLlU83-66nawo7EBegFsIAHBWmQ,3715
|
|
51
53
|
httomo_backends/yaml_templates/httomo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -61,24 +63,24 @@ httomo_backends/yaml_templates/httomolib/httomolib.prep.phase/paganin_filter.yam
|
|
|
61
63
|
httomo_backends/yaml_templates/httomolibgpu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
64
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.corr/median_filter.yaml,sha256=vKTeGhT0eLXWMDBvfglisIIZINlBKagOjwRo4JFQRpQ,108
|
|
63
65
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.corr/remove_outlier.yaml,sha256=k3y2Iwuv401EHdQZWIUreGAyEFoWasu7-0i7ibxRrhQ,110
|
|
64
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_PD.yaml,sha256=
|
|
65
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_ROF.yaml,sha256=
|
|
66
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_PD.yaml,sha256=73fCwAO9IcPuuC36g5_XJaIB9ujWPli5UdbqrLhWyIk,239
|
|
67
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_ROF.yaml,sha256=eXaD6jtKZ1gSplMG663lAhdS6Q79xns4AgKSuMx9Sgc,205
|
|
66
68
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.morph/data_resampler.yaml,sha256=4fDcC2seGd_TFUyMG0DAs68NrJn5lmIsx7WQ_6bn-A4,142
|
|
67
69
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.morph/sino_360_to_180.yaml,sha256=vikNDlp_Py6kye8-dySMpCxhYlJp_-AODQNGHTQCarQ,171
|
|
68
70
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.rescale/rescale_to_int.yaml,sha256=WR_exoyowYnXgDOUH5JYGPQ17-MfUayuVkNwMQTHzac,198
|
|
69
71
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.alignment/distortion_correction_proj_discorpy.yaml,sha256=KxWTzuZOoHUymFt4OJZVT7jhPs6oAuUmSQskQJqKwZk,163
|
|
70
72
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.normalize/normalize.yaml,sha256=PIfA4jwCmnWtz7V5n0Zng8lPvD4h1YyIriBSL39CtVM,214
|
|
71
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_savu.yaml,sha256=9Hwxgu1WG6lMXliXF7XWx2Z9O1D1yMSWkRjXNfdrn9o,226
|
|
72
73
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_tomopy.yaml,sha256=sHWZibK7drnBufYVOND9LZATaBRMtHKkbbBoquCBcmE,157
|
|
73
74
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/raven_filter.yaml,sha256=SDqgP_RLq7jjnL9Fz7hfrKko4F7-yahCsabBIJ0XMC8,169
|
|
74
75
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_all_stripe.yaml,sha256=MfoMeF_C2zRE7-W5cknhmG9-a5QYb5lpSdz9dwOndJQ,138
|
|
75
76
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_stripe_based_sorting.yaml,sha256=xyv_XKqFhs801VcsMUfWPHiKvek0qh8RhkbnInWR5i8,116
|
|
76
77
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_stripe_ti.yaml,sha256=5Ed2YbB0Kf-08_nNP5dzTukNDZopRTOo1I6ODJVRrlM,95
|
|
77
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/CGLS3d_tomobar.yaml,sha256=
|
|
78
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP2d_astra.yaml,sha256=
|
|
79
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP3d_tomobar.yaml,sha256=
|
|
80
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/
|
|
81
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/
|
|
78
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/CGLS3d_tomobar.yaml,sha256=oWoW2vYNXyAeQ81NaV865A0K8XDi3QIbzV9WcRQqi_A,276
|
|
79
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP2d_astra.yaml,sha256=MxUbW-dMxMrI4Exn5mgh2ovie4Ldv1Eb-zS68ETsNCU,301
|
|
80
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP3d_tomobar.yaml,sha256=H9-PTd8qW2qXqgHYw-NfZGgy2yut7ReKsbsR3x0_OOA,261
|
|
81
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FISTA3d_tomobar.yaml,sha256=i2K7Yc19VY6uZZR8bVjb85jpWIShlM_yCGD-Z5Eb-5E,442
|
|
82
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/LPRec3d_tomobar.yaml,sha256=X_qcuTOcFW_rXaXU-XhZYQUaPkOgKe5r7uX5stpf1mE,382
|
|
83
|
+
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/SIRT3d_tomobar.yaml,sha256=oom622LQ8xAZbZiHm4t0PSKKsMkX5G743vVBqRbMQek,277
|
|
82
84
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_360.yaml,sha256=nXjbgTBDQcIlBWvXwMd8FoNimtq-8QabgNWAI-fiFU8,322
|
|
83
85
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_pc.yaml,sha256=g3CNIaLhhBI6igluIMwytFqVXzrDlv8A1EU1C7ey4FE,208
|
|
84
86
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_vo.yaml,sha256=CmJ_0a73jX7MmOxQIvQrrKg_2HEtK0MXNVXLrfR3caU,296
|
|
@@ -142,8 +144,8 @@ httomo_backends/yaml_templates/tomopy/tomopy.sim.project/add_zingers.yaml,sha256
|
|
|
142
144
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project.yaml,sha256=XBVhW5ZxT9C89tHcwDG7OOgcWNdNtQq97mqlBEoiMnU,202
|
|
143
145
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project2.yaml,sha256=5raeQ-w9nS9mbAzn2ZqhPjdcyfLOkkJflKNStdEnYRA,238
|
|
144
146
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project3.yaml,sha256=oyofKSMi-_dSpfjrKVMNDqoBhBCCSYbEVRz2Lsc8uTI,257
|
|
145
|
-
httomo_backends-0.
|
|
146
|
-
httomo_backends-0.
|
|
147
|
-
httomo_backends-0.
|
|
148
|
-
httomo_backends-0.
|
|
149
|
-
httomo_backends-0.
|
|
147
|
+
httomo_backends-0.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
148
|
+
httomo_backends-0.7.dist-info/METADATA,sha256=i2Lo2q21-TN8TYwVmhkDVRbIgb3Vysu4HylmcME7nrM,2310
|
|
149
|
+
httomo_backends-0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
150
|
+
httomo_backends-0.7.dist-info/top_level.txt,sha256=v4x8d4CeEyMwo8QoqIvL_p-WoXAVD1bVnASPIrLjSTg,16
|
|
151
|
+
httomo_backends-0.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|