httomo-backends 0.6.3__py3-none-any.whl → 0.7.1__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 +215 -47
- httomo_backends/pipelines_full/FISTA3d_tomobar_directive.yaml +14 -0
- httomo_backends/scripts/yaml_pipelines_generator.py +4 -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.3.dist-info → httomo_backends-0.7.1.dist-info}/METADATA +1 -1
- {httomo_backends-0.6.3.dist-info → httomo_backends-0.7.1.dist-info}/RECORD +17 -16
- httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_savu.yaml +0 -11
- {httomo_backends-0.6.3.dist-info → httomo_backends-0.7.1.dist-info}/WHEEL +0 -0
- {httomo_backends-0.6.3.dist-info → httomo_backends-0.7.1.dist-info}/licenses/LICENSE +0 -0
- {httomo_backends-0.6.3.dist-info → httomo_backends-0.7.1.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,20 @@ 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
|
+
if "min_mem_usage_filter" in kwargs:
|
|
196
|
+
min_mem_usage_filter = kwargs["min_mem_usage_filter"]
|
|
197
|
+
min_mem_usage_ifft2 = False
|
|
198
|
+
if "min_mem_usage_ifft2" in kwargs:
|
|
199
|
+
min_mem_usage_ifft2 = kwargs["min_mem_usage_ifft2"]
|
|
176
200
|
|
|
177
201
|
angles_tot = non_slice_dims_shape[0]
|
|
178
202
|
DetectorsLengthH_prepad = non_slice_dims_shape[1]
|
|
@@ -195,11 +219,22 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
195
219
|
)
|
|
196
220
|
)
|
|
197
221
|
|
|
198
|
-
center_size =
|
|
199
|
-
center_size = min(center_size, n * 2
|
|
222
|
+
center_size = 32768
|
|
223
|
+
center_size = min(center_size, n * 2)
|
|
224
|
+
|
|
225
|
+
chunk_count = 4
|
|
226
|
+
projection_chunk_count = 4
|
|
227
|
+
oversampling_level = 4 # at least 3 or larger required
|
|
228
|
+
power_of_2_oversampling = True
|
|
229
|
+
|
|
230
|
+
if power_of_2_oversampling:
|
|
231
|
+
ne = 2 ** math.ceil(math.log2(DetectorsLengthH_prepad * 3))
|
|
232
|
+
if n > ne:
|
|
233
|
+
ne = 2 ** math.ceil(math.log2(n))
|
|
234
|
+
else:
|
|
235
|
+
ne = int(oversampling_level * DetectorsLengthH_prepad)
|
|
236
|
+
ne = max(ne, n)
|
|
200
237
|
|
|
201
|
-
oversampling_level = 2 # at least 2 or larger required
|
|
202
|
-
ne = oversampling_level * n
|
|
203
238
|
padding_m = ne // 2 - n // 2
|
|
204
239
|
|
|
205
240
|
if "angles" in kwargs:
|
|
@@ -213,8 +248,6 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
213
248
|
np.ceil(2)
|
|
214
249
|
) # assume a 2 * PI projection angle range
|
|
215
250
|
|
|
216
|
-
chunk_count = 4
|
|
217
|
-
|
|
218
251
|
output_dims = __calc_output_dim_recon(non_slice_dims_shape, **kwargs)
|
|
219
252
|
if odd_horiz:
|
|
220
253
|
output_dims = tuple(x + 1 for x in output_dims)
|
|
@@ -252,7 +285,7 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
252
285
|
irfft_result_size = angles_tot * (n + padding_m * 2) * np.float32().itemsize
|
|
253
286
|
|
|
254
287
|
datac_size = angles_tot * n * np.complex64().itemsize / 2
|
|
255
|
-
fde_size =
|
|
288
|
+
fde_size = 2 * n * 2 * n * np.complex64().itemsize / 2
|
|
256
289
|
fft_plan_slice_size = (
|
|
257
290
|
cufft_estimate_1d(nx=n, fft_type=CufftType.CUFFT_C2C, batch=angles_tot * SLICES)
|
|
258
291
|
/ SLICES
|
|
@@ -270,7 +303,7 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
270
303
|
)
|
|
271
304
|
ifft2_plan_slice_size = (
|
|
272
305
|
cufft_estimate_2d(
|
|
273
|
-
nx=
|
|
306
|
+
nx=2 * n, ny=2 * n, fft_type=CufftType.CUFFT_C2C
|
|
274
307
|
)
|
|
275
308
|
/ 2
|
|
276
309
|
)
|
|
@@ -309,24 +342,40 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
309
342
|
add_to_memory_counters(scaled_filter_size, False)
|
|
310
343
|
|
|
311
344
|
add_to_memory_counters(tmp_p_input_slice, True)
|
|
345
|
+
if min_mem_usage_filter:
|
|
346
|
+
add_to_memory_counters(rfft_plan_slice_size / 4 / projection_chunk_count, False)
|
|
347
|
+
add_to_memory_counters(irfft_plan_slice_size / 4 / projection_chunk_count, False)
|
|
348
|
+
add_to_memory_counters(padded_tmp_p_input_slice / projection_chunk_count, False)
|
|
349
|
+
|
|
350
|
+
add_to_memory_counters(rfft_result_size / projection_chunk_count, False)
|
|
351
|
+
add_to_memory_counters(filtered_rfft_result_size / projection_chunk_count, False)
|
|
352
|
+
add_to_memory_counters(-rfft_result_size / projection_chunk_count, False)
|
|
353
|
+
add_to_memory_counters(-padded_tmp_p_input_slice / projection_chunk_count, False)
|
|
354
|
+
|
|
355
|
+
add_to_memory_counters(irfft_scratch_memory_size / projection_chunk_count, False)
|
|
356
|
+
add_to_memory_counters(-irfft_scratch_memory_size / projection_chunk_count, False)
|
|
357
|
+
add_to_memory_counters(irfft_result_size / projection_chunk_count, False)
|
|
358
|
+
add_to_memory_counters(-filtered_rfft_result_size / projection_chunk_count, False)
|
|
359
|
+
|
|
360
|
+
add_to_memory_counters(-irfft_result_size / projection_chunk_count, False)
|
|
361
|
+
else:
|
|
362
|
+
add_to_memory_counters(rfft_plan_slice_size / chunk_count / projection_chunk_count * 2, True)
|
|
363
|
+
add_to_memory_counters(irfft_plan_slice_size / chunk_count / projection_chunk_count * 2, True)
|
|
364
|
+
# add_to_memory_counters(irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
365
|
+
for _ in range(0, chunk_count):
|
|
366
|
+
add_to_memory_counters(padded_tmp_p_input_slice / chunk_count / projection_chunk_count, True)
|
|
312
367
|
|
|
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)
|
|
368
|
+
add_to_memory_counters(rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
369
|
+
add_to_memory_counters(filtered_rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
370
|
+
add_to_memory_counters(-rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
371
|
+
add_to_memory_counters(-padded_tmp_p_input_slice / chunk_count / projection_chunk_count, True)
|
|
323
372
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
373
|
+
add_to_memory_counters(irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
374
|
+
add_to_memory_counters(-irfft_scratch_memory_size / chunk_count / projection_chunk_count, True)
|
|
375
|
+
add_to_memory_counters(irfft_result_size / chunk_count / projection_chunk_count, True)
|
|
376
|
+
add_to_memory_counters(-filtered_rfft_result_size / chunk_count / projection_chunk_count, True)
|
|
328
377
|
|
|
329
|
-
|
|
378
|
+
add_to_memory_counters(-irfft_result_size / chunk_count / projection_chunk_count, True)
|
|
330
379
|
|
|
331
380
|
add_to_memory_counters(-padded_in_slice_size, True)
|
|
332
381
|
add_to_memory_counters(-filter_size, False)
|
|
@@ -342,17 +391,27 @@ def _calc_memory_bytes_LPRec3d_tomobar(
|
|
|
342
391
|
|
|
343
392
|
add_to_memory_counters(-fft_result_size, True)
|
|
344
393
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
add_to_memory_counters(fde_size
|
|
348
|
-
add_to_memory_counters(-fde_size
|
|
394
|
+
if min_mem_usage_ifft2:
|
|
395
|
+
add_to_memory_counters(ifft2_plan_slice_size, False)
|
|
396
|
+
add_to_memory_counters(fde_size * 2, False)
|
|
397
|
+
add_to_memory_counters(-fde_size * 2, False)
|
|
398
|
+
else:
|
|
399
|
+
add_to_memory_counters(ifft2_plan_slice_size / chunk_count * 2, True)
|
|
400
|
+
for _ in range(0, chunk_count):
|
|
401
|
+
add_to_memory_counters(fde_size / chunk_count, True)
|
|
402
|
+
add_to_memory_counters(-fde_size / chunk_count, True)
|
|
349
403
|
|
|
350
404
|
add_to_memory_counters(recon_output_size, True)
|
|
351
405
|
add_to_memory_counters(-fde_size, True)
|
|
352
406
|
add_to_memory_counters(circular_mask_size, False)
|
|
353
407
|
add_to_memory_counters(after_recon_swapaxis_slice, True)
|
|
354
408
|
|
|
355
|
-
|
|
409
|
+
if min_mem_usage_filter and min_mem_usage_ifft2:
|
|
410
|
+
return (tot_memory_bytes * 1.15, fixed_amount)
|
|
411
|
+
elif min_mem_usage_filter and not min_mem_usage_ifft2:
|
|
412
|
+
return (tot_memory_bytes + 60 * 1024 * 1024, fixed_amount)
|
|
413
|
+
else:
|
|
414
|
+
return (tot_memory_bytes * 1.1, fixed_amount)
|
|
356
415
|
|
|
357
416
|
|
|
358
417
|
def _calc_memory_bytes_SIRT3d_tomobar(
|
|
@@ -361,21 +420,48 @@ def _calc_memory_bytes_SIRT3d_tomobar(
|
|
|
361
420
|
**kwargs,
|
|
362
421
|
) -> Tuple[int, int]:
|
|
363
422
|
|
|
423
|
+
detector_pad = 0
|
|
364
424
|
if "detector_pad" in kwargs:
|
|
365
425
|
detector_pad = kwargs["detector_pad"]
|
|
366
|
-
|
|
367
|
-
detector_pad =
|
|
426
|
+
if detector_pad is True:
|
|
427
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
428
|
+
elif detector_pad is False:
|
|
429
|
+
detector_pad = 0
|
|
430
|
+
|
|
368
431
|
anglesnum = non_slice_dims_shape[0]
|
|
369
|
-
|
|
432
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
370
433
|
# calculate the output shape
|
|
371
434
|
output_dims = _calc_output_dim_SIRT3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
435
|
+
recon_data_size_original = (
|
|
436
|
+
np.prod(output_dims) * dtype.itemsize
|
|
437
|
+
) # x_rec user-defined size
|
|
438
|
+
|
|
439
|
+
in_data_size = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
440
|
+
|
|
441
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
372
442
|
|
|
373
|
-
|
|
374
|
-
out_data_size = np.prod(output_dims) * dtype.itemsize
|
|
443
|
+
out_data_size = np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
375
444
|
|
|
376
|
-
|
|
445
|
+
R = in_data_size
|
|
446
|
+
C = out_data_size
|
|
377
447
|
|
|
378
|
-
|
|
448
|
+
Res = in_data_size
|
|
449
|
+
Res_times_R = Res
|
|
450
|
+
C_times_res = out_data_size
|
|
451
|
+
|
|
452
|
+
astra_projection = (in_data_size + out_data_size)
|
|
453
|
+
|
|
454
|
+
tot_memory_bytes = int(
|
|
455
|
+
recon_data_size_original
|
|
456
|
+
+ in_data_size
|
|
457
|
+
+ out_data_size
|
|
458
|
+
+ R
|
|
459
|
+
+ C
|
|
460
|
+
+ Res
|
|
461
|
+
+ Res_times_R
|
|
462
|
+
+ C_times_res
|
|
463
|
+
+ astra_projection
|
|
464
|
+
)
|
|
379
465
|
return (tot_memory_bytes, 0)
|
|
380
466
|
|
|
381
467
|
|
|
@@ -384,20 +470,102 @@ def _calc_memory_bytes_CGLS3d_tomobar(
|
|
|
384
470
|
dtype: np.dtype,
|
|
385
471
|
**kwargs,
|
|
386
472
|
) -> Tuple[int, int]:
|
|
473
|
+
detector_pad = 0
|
|
387
474
|
if "detector_pad" in kwargs:
|
|
388
475
|
detector_pad = kwargs["detector_pad"]
|
|
389
|
-
|
|
390
|
-
detector_pad =
|
|
476
|
+
if detector_pad is True:
|
|
477
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
478
|
+
elif detector_pad is False:
|
|
479
|
+
detector_pad = 0
|
|
391
480
|
|
|
392
481
|
anglesnum = non_slice_dims_shape[0]
|
|
393
|
-
|
|
482
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
394
483
|
# calculate the output shape
|
|
395
484
|
output_dims = _calc_output_dim_CGLS3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
485
|
+
recon_data_size_original = (
|
|
486
|
+
np.prod(output_dims) * dtype.itemsize
|
|
487
|
+
) # x_rec user-defined size
|
|
488
|
+
|
|
489
|
+
in_data_size = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
490
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
491
|
+
recon_data_size = (
|
|
492
|
+
np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
493
|
+
) # large volume in the algorithm
|
|
494
|
+
recon_data_size2 = recon_data_size # x_rec linearised
|
|
495
|
+
d_recon = recon_data_size
|
|
496
|
+
d_recon2 = d_recon # linearised, possibly a copy
|
|
497
|
+
|
|
498
|
+
data_r = in_data_size
|
|
499
|
+
Ad = recon_data_size
|
|
500
|
+
Ad2 = Ad
|
|
501
|
+
s = data_r
|
|
502
|
+
collection = (
|
|
503
|
+
in_data_size
|
|
504
|
+
+ recon_data_size_original
|
|
505
|
+
+ recon_data_size
|
|
506
|
+
+ recon_data_size2
|
|
507
|
+
+ d_recon
|
|
508
|
+
+ d_recon2
|
|
509
|
+
+ data_r
|
|
510
|
+
+ Ad
|
|
511
|
+
+ Ad2
|
|
512
|
+
+ s
|
|
513
|
+
)
|
|
514
|
+
astra_contribution = in_data_size + recon_data_size
|
|
396
515
|
|
|
397
|
-
|
|
398
|
-
|
|
516
|
+
tot_memory_bytes = int(collection + astra_contribution)
|
|
517
|
+
return (tot_memory_bytes, 0)
|
|
399
518
|
|
|
400
|
-
astra_projection = 2.5 * (in_data_size + out_data_size)
|
|
401
519
|
|
|
402
|
-
|
|
520
|
+
def _calc_memory_bytes_FISTA3d_tomobar(
|
|
521
|
+
non_slice_dims_shape: Tuple[int, int],
|
|
522
|
+
dtype: np.dtype,
|
|
523
|
+
**kwargs,
|
|
524
|
+
) -> Tuple[int, int]:
|
|
525
|
+
detector_pad = 0
|
|
526
|
+
if "detector_pad" in kwargs:
|
|
527
|
+
detector_pad = kwargs["detector_pad"]
|
|
528
|
+
if detector_pad is True:
|
|
529
|
+
detector_pad = __estimate_detectorHoriz_padding(non_slice_dims_shape[1])
|
|
530
|
+
elif detector_pad is False:
|
|
531
|
+
detector_pad = 0
|
|
532
|
+
|
|
533
|
+
anglesnum = non_slice_dims_shape[0]
|
|
534
|
+
DetectorsLengthH_padded = non_slice_dims_shape[1] + 2 * detector_pad
|
|
535
|
+
|
|
536
|
+
# calculate the output shape
|
|
537
|
+
output_dims = _calc_output_dim_FISTA3d_tomobar(non_slice_dims_shape, **kwargs)
|
|
538
|
+
recon_data_size_original = (
|
|
539
|
+
np.prod(output_dims) * dtype.itemsize
|
|
540
|
+
) # recon user-defined size
|
|
541
|
+
|
|
542
|
+
in_data_siz_pad = (anglesnum * DetectorsLengthH_padded) * dtype.itemsize
|
|
543
|
+
output_dims_larger_grid = (DetectorsLengthH_padded, DetectorsLengthH_padded)
|
|
544
|
+
|
|
545
|
+
residual_grad = in_data_siz_pad
|
|
546
|
+
out_data_size = np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
547
|
+
X_t = out_data_size
|
|
548
|
+
X_old = out_data_size
|
|
549
|
+
|
|
550
|
+
grad_fidelity = out_data_size
|
|
551
|
+
|
|
552
|
+
fista_part = (
|
|
553
|
+
recon_data_size_original
|
|
554
|
+
+ in_data_siz_pad
|
|
555
|
+
+ residual_grad
|
|
556
|
+
+ grad_fidelity
|
|
557
|
+
+ X_t
|
|
558
|
+
+ X_old
|
|
559
|
+
+ out_data_size
|
|
560
|
+
)
|
|
561
|
+
regul_part = 8 * np.prod(output_dims_larger_grid) * dtype.itemsize
|
|
562
|
+
|
|
563
|
+
tot_memory_bytes = int(fista_part + regul_part)
|
|
403
564
|
return (tot_memory_bytes, 0)
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
def __estimate_detectorHoriz_padding(detX_size) -> int:
|
|
568
|
+
det_half = detX_size // 2
|
|
569
|
+
padded_value_exact = int(np.sqrt(2 * (det_half**2))) - det_half
|
|
570
|
+
padded_add_margin = int(0.1 * padded_value_exact)
|
|
571
|
+
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
|
|
@@ -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.6" # 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:
|
|
@@ -254,7 +247,7 @@ def yaml_pipelines_generator(
|
|
|
254
247
|
pipeline_full += yaml_template_method
|
|
255
248
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
256
249
|
key="alpha",
|
|
257
|
-
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.",
|
|
258
251
|
)
|
|
259
252
|
elif "stripe" in module_name:
|
|
260
253
|
pipeline_full.yaml_set_comment_before_after_key(
|
|
@@ -276,7 +269,7 @@ def yaml_pipelines_generator(
|
|
|
276
269
|
)
|
|
277
270
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
278
271
|
key="detector_pad",
|
|
279
|
-
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",
|
|
280
273
|
)
|
|
281
274
|
pipeline_full[i]["parameters"].yaml_add_eol_comment(
|
|
282
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.1
|
|
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=CuiMAxu7qG0I41XiucrvSf2kZHjid_dgD0gUXF9cE0k,21267
|
|
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,6 +36,7 @@ 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
|
|
@@ -46,7 +47,7 @@ httomo_backends/pipelines_full/titaren_center_pc_FBP3d_resample_directive.yaml,s
|
|
|
46
47
|
httomo_backends/pipelines_full/tomopy_gridrec_directive.yaml,sha256=NlrX-mqyzjJvwGotTLwosBnC4d9pPRNB1JWFA7YXHuM,533
|
|
47
48
|
httomo_backends/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
49
|
httomo_backends/scripts/json_pipelines_generator.py,sha256=iWTsYr1i0Ei77Imaml5HXWvZUUeX-tkU1WRIdxskV3M,8322
|
|
49
|
-
httomo_backends/scripts/yaml_pipelines_generator.py,sha256=
|
|
50
|
+
httomo_backends/scripts/yaml_pipelines_generator.py,sha256=t_B3qJ0AGsjzd1_rSp76pC-9o4JbO7e28UIfWcN9olk,16393
|
|
50
51
|
httomo_backends/scripts/yaml_templates_generator.py,sha256=NjE5q8YXxkXjA-9WTg4YB8ccawNA0veeJE1C8yyWqlI,8532
|
|
51
52
|
httomo_backends/scripts/yaml_unsupported_tomopy_remove.py,sha256=R3ZAfFgpVsBWS7zBjLlU83-66nawo7EBegFsIAHBWmQ,3715
|
|
52
53
|
httomo_backends/yaml_templates/httomo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -62,24 +63,24 @@ httomo_backends/yaml_templates/httomolib/httomolib.prep.phase/paganin_filter.yam
|
|
|
62
63
|
httomo_backends/yaml_templates/httomolibgpu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
64
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.corr/median_filter.yaml,sha256=vKTeGhT0eLXWMDBvfglisIIZINlBKagOjwRo4JFQRpQ,108
|
|
64
65
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.corr/remove_outlier.yaml,sha256=k3y2Iwuv401EHdQZWIUreGAyEFoWasu7-0i7ibxRrhQ,110
|
|
65
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.denoise/total_variation_PD.yaml,sha256=
|
|
66
|
-
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
|
|
67
68
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.morph/data_resampler.yaml,sha256=4fDcC2seGd_TFUyMG0DAs68NrJn5lmIsx7WQ_6bn-A4,142
|
|
68
69
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.morph/sino_360_to_180.yaml,sha256=vikNDlp_Py6kye8-dySMpCxhYlJp_-AODQNGHTQCarQ,171
|
|
69
70
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.misc.rescale/rescale_to_int.yaml,sha256=WR_exoyowYnXgDOUH5JYGPQ17-MfUayuVkNwMQTHzac,198
|
|
70
71
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.alignment/distortion_correction_proj_discorpy.yaml,sha256=KxWTzuZOoHUymFt4OJZVT7jhPs6oAuUmSQskQJqKwZk,163
|
|
71
72
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.normalize/normalize.yaml,sha256=PIfA4jwCmnWtz7V5n0Zng8lPvD4h1YyIriBSL39CtVM,214
|
|
72
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_savu.yaml,sha256=9Hwxgu1WG6lMXliXF7XWx2Z9O1D1yMSWkRjXNfdrn9o,226
|
|
73
73
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.phase/paganin_filter_tomopy.yaml,sha256=sHWZibK7drnBufYVOND9LZATaBRMtHKkbbBoquCBcmE,157
|
|
74
74
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/raven_filter.yaml,sha256=SDqgP_RLq7jjnL9Fz7hfrKko4F7-yahCsabBIJ0XMC8,169
|
|
75
75
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_all_stripe.yaml,sha256=MfoMeF_C2zRE7-W5cknhmG9-a5QYb5lpSdz9dwOndJQ,138
|
|
76
76
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_stripe_based_sorting.yaml,sha256=xyv_XKqFhs801VcsMUfWPHiKvek0qh8RhkbnInWR5i8,116
|
|
77
77
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.prep.stripe/remove_stripe_ti.yaml,sha256=5Ed2YbB0Kf-08_nNP5dzTukNDZopRTOo1I6ODJVRrlM,95
|
|
78
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/CGLS3d_tomobar.yaml,sha256=
|
|
79
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP2d_astra.yaml,sha256=
|
|
80
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/FBP3d_tomobar.yaml,sha256=
|
|
81
|
-
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.algorithm/
|
|
82
|
-
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
|
|
83
84
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_360.yaml,sha256=nXjbgTBDQcIlBWvXwMd8FoNimtq-8QabgNWAI-fiFU8,322
|
|
84
85
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_pc.yaml,sha256=g3CNIaLhhBI6igluIMwytFqVXzrDlv8A1EU1C7ey4FE,208
|
|
85
86
|
httomo_backends/yaml_templates/httomolibgpu/httomolibgpu.recon.rotation/find_center_vo.yaml,sha256=CmJ_0a73jX7MmOxQIvQrrKg_2HEtK0MXNVXLrfR3caU,296
|
|
@@ -143,8 +144,8 @@ httomo_backends/yaml_templates/tomopy/tomopy.sim.project/add_zingers.yaml,sha256
|
|
|
143
144
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project.yaml,sha256=XBVhW5ZxT9C89tHcwDG7OOgcWNdNtQq97mqlBEoiMnU,202
|
|
144
145
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project2.yaml,sha256=5raeQ-w9nS9mbAzn2ZqhPjdcyfLOkkJflKNStdEnYRA,238
|
|
145
146
|
httomo_backends/yaml_templates/tomopy/tomopy.sim.project/project3.yaml,sha256=oyofKSMi-_dSpfjrKVMNDqoBhBCCSYbEVRz2Lsc8uTI,257
|
|
146
|
-
httomo_backends-0.
|
|
147
|
-
httomo_backends-0.
|
|
148
|
-
httomo_backends-0.
|
|
149
|
-
httomo_backends-0.
|
|
150
|
-
httomo_backends-0.
|
|
147
|
+
httomo_backends-0.7.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
148
|
+
httomo_backends-0.7.1.dist-info/METADATA,sha256=fifr2fnWW5CvPDXWR1WA-9McdqN4LCbmtWW_QRf7BUI,2312
|
|
149
|
+
httomo_backends-0.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
150
|
+
httomo_backends-0.7.1.dist-info/top_level.txt,sha256=v4x8d4CeEyMwo8QoqIvL_p-WoXAVD1bVnASPIrLjSTg,16
|
|
151
|
+
httomo_backends-0.7.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|