nabu 2024.2.14__py3-none-any.whl → 2025.1.0__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.
Files changed (197) hide show
  1. doc/doc_config.py +32 -0
  2. nabu/__init__.py +1 -1
  3. nabu/app/bootstrap_stitching.py +4 -2
  4. nabu/app/cast_volume.py +16 -14
  5. nabu/app/cli_configs.py +102 -9
  6. nabu/app/compare_volumes.py +1 -1
  7. nabu/app/composite_cor.py +2 -4
  8. nabu/app/diag_to_pix.py +5 -6
  9. nabu/app/diag_to_rot.py +10 -11
  10. nabu/app/double_flatfield.py +18 -5
  11. nabu/app/estimate_motion.py +75 -0
  12. nabu/app/multicor.py +28 -15
  13. nabu/app/parse_reconstruction_log.py +1 -0
  14. nabu/app/pcaflats.py +122 -0
  15. nabu/app/prepare_weights_double.py +1 -2
  16. nabu/app/reconstruct.py +1 -7
  17. nabu/app/reconstruct_helical.py +5 -9
  18. nabu/app/reduce_dark_flat.py +5 -4
  19. nabu/app/rotate.py +3 -1
  20. nabu/app/stitching.py +7 -2
  21. nabu/app/tests/test_reduce_dark_flat.py +2 -2
  22. nabu/app/validator.py +1 -4
  23. nabu/cuda/convolution.py +1 -1
  24. nabu/cuda/fft.py +1 -1
  25. nabu/cuda/medfilt.py +1 -1
  26. nabu/cuda/padding.py +1 -1
  27. nabu/cuda/src/backproj.cu +6 -6
  28. nabu/cuda/src/cone.cu +4 -0
  29. nabu/cuda/src/hierarchical_backproj.cu +14 -0
  30. nabu/cuda/utils.py +2 -2
  31. nabu/estimation/alignment.py +17 -31
  32. nabu/estimation/cor.py +27 -33
  33. nabu/estimation/cor_sino.py +2 -8
  34. nabu/estimation/focus.py +4 -8
  35. nabu/estimation/motion.py +557 -0
  36. nabu/estimation/tests/test_alignment.py +2 -0
  37. nabu/estimation/tests/test_motion_estimation.py +471 -0
  38. nabu/estimation/tests/test_tilt.py +1 -1
  39. nabu/estimation/tilt.py +6 -5
  40. nabu/estimation/translation.py +47 -1
  41. nabu/io/cast_volume.py +108 -18
  42. nabu/io/detector_distortion.py +5 -6
  43. nabu/io/reader.py +45 -6
  44. nabu/io/reader_helical.py +5 -4
  45. nabu/io/tests/test_cast_volume.py +2 -2
  46. nabu/io/tests/test_readers.py +41 -38
  47. nabu/io/tests/test_remove_volume.py +152 -0
  48. nabu/io/tests/test_writers.py +2 -2
  49. nabu/io/utils.py +8 -4
  50. nabu/io/writer.py +1 -2
  51. nabu/misc/fftshift.py +1 -1
  52. nabu/misc/fourier_filters.py +1 -1
  53. nabu/misc/histogram.py +1 -1
  54. nabu/misc/histogram_cuda.py +1 -1
  55. nabu/misc/padding_base.py +1 -1
  56. nabu/misc/rotation.py +1 -1
  57. nabu/misc/rotation_cuda.py +1 -1
  58. nabu/misc/tests/test_binning.py +1 -1
  59. nabu/misc/transpose.py +1 -1
  60. nabu/misc/unsharp.py +1 -1
  61. nabu/misc/unsharp_cuda.py +1 -1
  62. nabu/misc/unsharp_opencl.py +1 -1
  63. nabu/misc/utils.py +1 -1
  64. nabu/opencl/fft.py +1 -1
  65. nabu/opencl/padding.py +1 -1
  66. nabu/opencl/src/backproj.cl +6 -6
  67. nabu/opencl/utils.py +8 -8
  68. nabu/pipeline/config.py +2 -2
  69. nabu/pipeline/config_validators.py +46 -46
  70. nabu/pipeline/datadump.py +3 -3
  71. nabu/pipeline/estimators.py +271 -11
  72. nabu/pipeline/fullfield/chunked.py +103 -67
  73. nabu/pipeline/fullfield/chunked_cuda.py +5 -2
  74. nabu/pipeline/fullfield/computations.py +4 -1
  75. nabu/pipeline/fullfield/dataset_validator.py +0 -1
  76. nabu/pipeline/fullfield/get_double_flatfield.py +147 -0
  77. nabu/pipeline/fullfield/nabu_config.py +36 -17
  78. nabu/pipeline/fullfield/processconfig.py +41 -7
  79. nabu/pipeline/fullfield/reconstruction.py +14 -10
  80. nabu/pipeline/helical/dataset_validator.py +3 -4
  81. nabu/pipeline/helical/fbp.py +4 -4
  82. nabu/pipeline/helical/filtering.py +5 -4
  83. nabu/pipeline/helical/gridded_accumulator.py +10 -11
  84. nabu/pipeline/helical/helical_chunked_regridded.py +1 -0
  85. nabu/pipeline/helical/helical_reconstruction.py +12 -9
  86. nabu/pipeline/helical/helical_utils.py +1 -2
  87. nabu/pipeline/helical/nabu_config.py +2 -1
  88. nabu/pipeline/helical/span_strategy.py +1 -0
  89. nabu/pipeline/helical/weight_balancer.py +2 -3
  90. nabu/pipeline/params.py +20 -3
  91. nabu/pipeline/tests/__init__.py +0 -0
  92. nabu/pipeline/tests/test_estimators.py +240 -3
  93. nabu/pipeline/utils.py +1 -1
  94. nabu/pipeline/writer.py +1 -1
  95. nabu/preproc/alignment.py +0 -10
  96. nabu/preproc/ccd.py +53 -3
  97. nabu/preproc/ctf.py +8 -8
  98. nabu/preproc/ctf_cuda.py +1 -1
  99. nabu/preproc/double_flatfield_cuda.py +2 -2
  100. nabu/preproc/double_flatfield_variable_region.py +0 -1
  101. nabu/preproc/flatfield.py +307 -2
  102. nabu/preproc/flatfield_cuda.py +1 -2
  103. nabu/preproc/flatfield_variable_region.py +3 -3
  104. nabu/preproc/phase.py +2 -4
  105. nabu/preproc/phase_cuda.py +2 -2
  106. nabu/preproc/shift.py +4 -2
  107. nabu/preproc/shift_cuda.py +0 -1
  108. nabu/preproc/tests/test_ctf.py +4 -4
  109. nabu/preproc/tests/test_double_flatfield.py +1 -1
  110. nabu/preproc/tests/test_flatfield.py +1 -1
  111. nabu/preproc/tests/test_paganin.py +1 -3
  112. nabu/preproc/tests/test_pcaflats.py +154 -0
  113. nabu/preproc/tests/test_vshift.py +4 -1
  114. nabu/processing/azim.py +9 -5
  115. nabu/processing/convolution_cuda.py +6 -4
  116. nabu/processing/fft_base.py +7 -3
  117. nabu/processing/fft_cuda.py +25 -164
  118. nabu/processing/fft_opencl.py +28 -6
  119. nabu/processing/fftshift.py +1 -1
  120. nabu/processing/histogram.py +1 -1
  121. nabu/processing/muladd.py +0 -1
  122. nabu/processing/padding_base.py +1 -1
  123. nabu/processing/padding_cuda.py +0 -2
  124. nabu/processing/processing_base.py +12 -6
  125. nabu/processing/rotation_cuda.py +3 -1
  126. nabu/processing/tests/test_fft.py +2 -64
  127. nabu/processing/tests/test_fftshift.py +1 -1
  128. nabu/processing/tests/test_medfilt.py +1 -3
  129. nabu/processing/tests/test_padding.py +1 -1
  130. nabu/processing/tests/test_roll.py +1 -1
  131. nabu/processing/tests/test_rotation.py +4 -2
  132. nabu/processing/unsharp_opencl.py +1 -1
  133. nabu/reconstruction/astra.py +245 -0
  134. nabu/reconstruction/cone.py +39 -9
  135. nabu/reconstruction/fbp.py +7 -0
  136. nabu/reconstruction/fbp_base.py +36 -5
  137. nabu/reconstruction/filtering.py +59 -25
  138. nabu/reconstruction/filtering_cuda.py +22 -21
  139. nabu/reconstruction/filtering_opencl.py +10 -14
  140. nabu/reconstruction/hbp.py +26 -13
  141. nabu/reconstruction/mlem.py +55 -16
  142. nabu/reconstruction/projection.py +3 -5
  143. nabu/reconstruction/sinogram.py +1 -1
  144. nabu/reconstruction/sinogram_cuda.py +0 -1
  145. nabu/reconstruction/tests/test_cone.py +37 -2
  146. nabu/reconstruction/tests/test_deringer.py +4 -4
  147. nabu/reconstruction/tests/test_fbp.py +36 -15
  148. nabu/reconstruction/tests/test_filtering.py +27 -7
  149. nabu/reconstruction/tests/test_halftomo.py +28 -2
  150. nabu/reconstruction/tests/test_mlem.py +94 -64
  151. nabu/reconstruction/tests/test_projector.py +7 -2
  152. nabu/reconstruction/tests/test_reconstructor.py +1 -1
  153. nabu/reconstruction/tests/test_sino_normalization.py +0 -1
  154. nabu/resources/dataset_analyzer.py +210 -24
  155. nabu/resources/gpu.py +4 -4
  156. nabu/resources/logger.py +4 -4
  157. nabu/resources/nxflatfield.py +103 -37
  158. nabu/resources/tests/test_dataset_analyzer.py +37 -0
  159. nabu/resources/tests/test_extract.py +11 -0
  160. nabu/resources/tests/test_nxflatfield.py +5 -5
  161. nabu/resources/utils.py +16 -10
  162. nabu/stitching/alignment.py +8 -11
  163. nabu/stitching/config.py +44 -35
  164. nabu/stitching/definitions.py +2 -2
  165. nabu/stitching/frame_composition.py +8 -10
  166. nabu/stitching/overlap.py +4 -4
  167. nabu/stitching/sample_normalization.py +5 -5
  168. nabu/stitching/slurm_utils.py +2 -2
  169. nabu/stitching/stitcher/base.py +2 -0
  170. nabu/stitching/stitcher/dumper/base.py +0 -1
  171. nabu/stitching/stitcher/dumper/postprocessing.py +1 -1
  172. nabu/stitching/stitcher/post_processing.py +11 -9
  173. nabu/stitching/stitcher/pre_processing.py +37 -31
  174. nabu/stitching/stitcher/single_axis.py +2 -3
  175. nabu/stitching/stitcher_2D.py +2 -1
  176. nabu/stitching/tests/test_config.py +10 -11
  177. nabu/stitching/tests/test_sample_normalization.py +1 -1
  178. nabu/stitching/tests/test_slurm_utils.py +1 -2
  179. nabu/stitching/tests/test_y_preprocessing_stitching.py +11 -8
  180. nabu/stitching/tests/test_z_postprocessing_stitching.py +3 -3
  181. nabu/stitching/tests/test_z_preprocessing_stitching.py +27 -24
  182. nabu/stitching/utils/tests/__init__.py +0 -0
  183. nabu/stitching/utils/tests/test_post-processing.py +1 -0
  184. nabu/stitching/utils/utils.py +16 -18
  185. nabu/tests.py +0 -3
  186. nabu/testutils.py +62 -9
  187. nabu/utils.py +50 -20
  188. {nabu-2024.2.14.dist-info → nabu-2025.1.0.dist-info}/METADATA +7 -7
  189. nabu-2025.1.0.dist-info/RECORD +328 -0
  190. {nabu-2024.2.14.dist-info → nabu-2025.1.0.dist-info}/WHEEL +1 -1
  191. {nabu-2024.2.14.dist-info → nabu-2025.1.0.dist-info}/entry_points.txt +2 -1
  192. nabu/app/correct_rot.py +0 -70
  193. nabu/io/tests/test_detector_distortion.py +0 -178
  194. nabu-2024.2.14.dist-info/RECORD +0 -317
  195. /nabu/{stitching → app}/tests/__init__.py +0 -0
  196. {nabu-2024.2.14.dist-info → nabu-2025.1.0.dist-info}/licenses/LICENSE +0 -0
  197. {nabu-2024.2.14.dist-info → nabu-2025.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,328 @@
1
+ doc/conf.py,sha256=3xtCarCHrXPr50GbeRDuH-o3Jzojw7mpr7vpGfZPLAE,3787
2
+ doc/create_conf_doc.py,sha256=IVOdP70KvbW9WS_UQu3Iyd0YfS60E2fJ5IDtQ_s4cDw,1143
3
+ doc/doc_config.py,sha256=anqeOVjqE2e7eVzg7yuh9dvIneTkrA5doGl1cVBqT7Q,730
4
+ doc/get_mathjax.py,sha256=VIvKRCdDuF2VoY8JD3mSey9XX13AZMmwTJBHdt1tUs4,1012
5
+ nabu/__init__.py,sha256=Nz3-pFbLQQoLIL9zsmmXjr97c7pm9ezSJvKzq6cPbIk,270
6
+ nabu/tests.py,sha256=hOJD1GGxn_KE1bWMoxfjnjzI7d9JBUpoc9B2_tVFiEk,1370
7
+ nabu/testutils.py,sha256=4I62IP3VLOJx8JvGBgY1t4i4CiJMWfT_aUopxg39JIM,10047
8
+ nabu/utils.py,sha256=tJI64BNXMhD6W293fwwcgf9bvTalYG_5AwVGYkgi6tU,27179
9
+ nabu/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ nabu/app/bootstrap.py,sha256=3yLZJmrmQBmPJMBtE2ih2cspfqOy5T_UN2U8B3i_hkI,3266
11
+ nabu/app/bootstrap_stitching.py,sha256=wCKgugOQr6-lPMWEn4AYQeric0tCuRc9O-RnpBuTWAA,2230
12
+ nabu/app/cast_volume.py,sha256=OufJDx_ZJ-ZbhbvIPHxRox4jtL6PfWcL148g77BWCDU,11454
13
+ nabu/app/cli_configs.py,sha256=SakK1GhLDR4msZIJa0werjK6KxggrIED2yg6kxcDkJk,25482
14
+ nabu/app/compare_volumes.py,sha256=3qm3QsxV-D_myLAkhM_LlX0DTrDmhzfhrnNak-1538Q,3337
15
+ nabu/app/composite_cor.py,sha256=-qAbMJCFa0NmSb1hO2G1QvdW4fwEXSMBBbSFCnQXmCc,5068
16
+ nabu/app/create_distortion_map_from_poly.py,sha256=aa-vE-ndB9PsuHwdHUW7-8jGz4BxvjC-bQDWHlPV0Kg,6193
17
+ nabu/app/diag_to_pix.py,sha256=KKIj4YrcvEc8Ey-_T3yvxeSKTfrY5o13ekteMQN_cr4,14987
18
+ nabu/app/diag_to_rot.py,sha256=tBaF1Oy0-bjCqkLFK-Bu_n74easzLlRkI_FTC1cAH2Q,16933
19
+ nabu/app/double_flatfield.py,sha256=1yquRUIHYXmrIg7NGHMDIXpkUCS_muEioUeqLyWf8PI,5641
20
+ nabu/app/estimate_motion.py,sha256=-E21ttzzHYSYnDnFo4ggVgIP3AARLUgU2IA4L95vz7k,2844
21
+ nabu/app/generate_header.py,sha256=Voo-FAvwS_mU5gtDxyqpZnSpP_mlMSfd_6bEtgdi_tg,8919
22
+ nabu/app/histogram.py,sha256=gyLXKwFrU5WPQMkM1k8OdpIXSwGEEKC-f8RcTHKOho4,7930
23
+ nabu/app/multicor.py,sha256=FjmJurruRmrwXF7v56KlTszQGIGsqft1_P7AKR9feY0,4726
24
+ nabu/app/nx_z_splitter.py,sha256=p54jR-PAAw-AkGolM9fZE5lM2vbNLspCNCy5zBnJNP4,4976
25
+ nabu/app/parse_reconstruction_log.py,sha256=msOtA3xaqLZpISRqS0F9_SrkvbdvKNPE99tdWhPrkY0,4745
26
+ nabu/app/pcaflats.py,sha256=mzZzRvZKqVJAbzj75gYrlDqDzP1fpy_H5QCdjD-ivCw,4170
27
+ nabu/app/prepare_weights_double.py,sha256=jy78aP1UNKqSk82Wy6ZCkKjpYXxaGmlIj_vjB4SxS8A,5443
28
+ nabu/app/reconstruct.py,sha256=g_pkrs11QFuclgxKLih1JCRLhyM-Ln8ACXlMspA2phc,5681
29
+ nabu/app/reconstruct_helical.py,sha256=cMjcc8IUGUtqAOfObsznLkcGm6Ev4ZoE_vJa--fDSNQ,4257
30
+ nabu/app/reduce_dark_flat.py,sha256=nJg94M64Mtvcc8B-mKQT056s30fEJRHFYPMcxH3GGJ0,6599
31
+ nabu/app/rotate.py,sha256=st9tPf9XSH_nYPivANbcvBwDcY3snH-fYXJhVh7Suh4,6503
32
+ nabu/app/shrink_dataset.py,sha256=P9dorO0Q-gPAWgSHyZi3XQp4jkMTJacDYzNvJY4oh98,3507
33
+ nabu/app/stitching.py,sha256=WAcAAxWw9nTpajp273KylfRc-Rxw7HmyqzSLjJ4sWh4,4418
34
+ nabu/app/utils.py,sha256=XUBRWDmth4i3BZHd27rfarFAUP7OEcsMeVmDJ6T4EXA,1178
35
+ nabu/app/validator.py,sha256=rmSiMnp1PucJo4adsn7eQ-wVf1sFXA1qZFOOHDJPLVs,3338
36
+ nabu/app/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ nabu/app/tests/test_reduce_dark_flat.py,sha256=ouHz3q6RK4KgmYWt7Te-_THWqF9cX_81WMU0-X4tn7A,2694
38
+ nabu/cuda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ nabu/cuda/convolution.py,sha256=2YfvcfOVVXSHH4PNoifsYhtG__rRQ2kD-nVjHTBNe3c,255
40
+ nabu/cuda/fft.py,sha256=cahlqESgKsHXwerCqW3NZBPPMCWSrCnAcSoTMAcOrqY,208
41
+ nabu/cuda/kernel.py,sha256=8v0b9kGNZfTPt2-xRbwrwX363Tw38B0TvsvmtmEtcrw,3776
42
+ nabu/cuda/medfilt.py,sha256=0V_zx2FSKvOwTwhyFQ8YlkzES5OKKu4tBx-xZlkllNI,230
43
+ nabu/cuda/padding.py,sha256=x6lk6_SoHzruHbQZCdN-FTgE4JlN3hyrtm3k6wwANZM,230
44
+ nabu/cuda/processing.py,sha256=nefntcARa917yirZqe5c90yPXua_sGzVUtg6Fzc2Vu8,2655
45
+ nabu/cuda/utils.py,sha256=C-0-X3mWXgUzHrEKqX0hXpir1M5M6wx1Im-HdEVIYBc,9628
46
+ nabu/cuda/src/ElementOp.cu,sha256=PhebQQgeF0V7MDNzeYiRXIeNq3tE2PsBx00XhanBmvg,7188
47
+ nabu/cuda/src/backproj.cu,sha256=EsJtb-HKK6hNnTzIYxK8B8YkgvuKJd2LC_seE-OzSbI,6197
48
+ nabu/cuda/src/backproj_polar.cu,sha256=sZbtw3KMfN69XyubJQSSLC87d5IPOyzbPBoRSNC1Cek,1851
49
+ nabu/cuda/src/boundary.h,sha256=eQhfKZm-o0kj88BvkUwzqfqxYfRde4Tuj8AhQvRK16Y,2898
50
+ nabu/cuda/src/cone.cu,sha256=BcW6eLhYVnJZ9WgyD8F35-fGtVeggFv01ZxuWkmCZ_g,3533
51
+ nabu/cuda/src/convolution.cu,sha256=O6r8qPpQjpaqnNivMRX0LK3dEACKk9xyNYO9u_JysU0,7353
52
+ nabu/cuda/src/dfi_fftshift.cu,sha256=ElgNXy8H14mff2hmyjxCq7CnFK_DSY2Z564QGytRO1o,2220
53
+ nabu/cuda/src/flatfield.cu,sha256=ZVVmEd-jcsK03VWv42uugYw6LeUnDEVY8qo_G07doHs,2058
54
+ nabu/cuda/src/fourier_wavelets.cu,sha256=571gDOFLy4cMKOockPZIxCJKcFWJwDYT8FdWjQJHEWE,547
55
+ nabu/cuda/src/halftomo.cu,sha256=agqNiL4gvY0S57_d0Xa7rvjXI5teOOXF9XHK1IA-aDQ,2902
56
+ nabu/cuda/src/helical_padding.cu,sha256=87Ia2jDWzA_1ZSmE-v1yBqccIrIvF5Op6Nbmyvk31Ww,3955
57
+ nabu/cuda/src/hierarchical_backproj.cu,sha256=4sCzv-Q-jngz6RgCIc5z1L4AsCc7qgZtpuDPI3i3ipc,9619
58
+ nabu/cuda/src/histogram.cu,sha256=bVdVA5GfT0-asMjmWk8r39a7W2jmjL-YVz60LUyvqiQ,808
59
+ nabu/cuda/src/interpolation.cu,sha256=Q4TjDklZToSjk9yCd4Rq97kQlhSAgFer7Pf4PUo4jYU,839
60
+ nabu/cuda/src/medfilt.cu,sha256=fyuuOEHxQFfQoDjyXr_BdNRHIUBN7e6T66kvW4OQI7A,2449
61
+ nabu/cuda/src/normalization.cu,sha256=uEJLeKZRe6yWYB9fSHnLjluIOiNBzJRK8LFYyVqrrn0,2028
62
+ nabu/cuda/src/padding.cu,sha256=ir5kmWq3Fm0dgyNLfWS3bVp_GrQGJcHjCNXXoW76TmY,4420
63
+ nabu/cuda/src/proj.cu,sha256=i5WZ6-V_yO2BoAVkrrELAWhFHQAOifnVwPqtIWFbcS4,3750
64
+ nabu/cuda/src/rotation.cu,sha256=inatw44lT0Qn4D2xguLi_YZsjzP96zfGGLiCc9vLhQw,657
65
+ nabu/cuda/src/transpose.cu,sha256=Enim7vLxTCFZbK3BmYdQ6ZatA_FLp6601VOSl8iGFjg,476
66
+ nabu/cuda/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
67
+ nabu/estimation/__init__.py,sha256=HWE3ivArjlJx4FjFh2Q73VmpIyzod80KTmXvFo1AP1s,379
68
+ nabu/estimation/alignment.py,sha256=i7q6txkHDXuxusJ9bi6MlMVpOR8yv07LeWkKXGwqSz0,20839
69
+ nabu/estimation/cor.py,sha256=8RsyZ_MYT04EWvP2tLThftn_bD3cz9-uWo8D5FpXLKQ,50353
70
+ nabu/estimation/cor_sino.py,sha256=qN6y16UVqoDX696JYyn3iWXDxQo0FMcFTuGbT92BW_s,18959
71
+ nabu/estimation/distortion.py,sha256=DEXizQpgHBXmrhbQ0kuEchicxmiDgmU2qrh8bCgSezg,4701
72
+ nabu/estimation/focus.py,sha256=CdtMFk6Xt4qq1JwwKDmDcVCeVocz-mpV0saikO0B1mc,17995
73
+ nabu/estimation/motion.py,sha256=8fgwGsJMZleUugCCMRyZ2Zfi6-fWp-_dJpUnvetxGvk,26501
74
+ nabu/estimation/tilt.py,sha256=6R8l8gnf00m-xdgLhvQmkvZ3lIO_8hDglNsFjzlzZ4E,8834
75
+ nabu/estimation/translation.py,sha256=qoxT8VT38TZqrqLRwOef7-wBE5OeEObp_Qy9T2De2Do,10184
76
+ nabu/estimation/utils.py,sha256=31d17Ng__NxcLOtGXPmbPPW1veh1m0poCvRgDCJssUA,347
77
+ nabu/estimation/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ nabu/estimation/tests/test_alignment.py,sha256=knNn_IqVd5MR-K3LBNc1BkREZF9V8aRD829K_zD1atY,2513
79
+ nabu/estimation/tests/test_cor.py,sha256=YKrZc1v33WBcNEOTmzoifnotghgvUL8-78B0IxCmjCs,23811
80
+ nabu/estimation/tests/test_focus.py,sha256=cMxEeTLlfVHOvG_4oGMLpp6bVI6okYz0u4aNcW0vmNI,4188
81
+ nabu/estimation/tests/test_motion_estimation.py,sha256=WKUpkVand8VszoBIvsaEnhKqvwlsr4NVNtTaNvd-nsE,19179
82
+ nabu/estimation/tests/test_tilt.py,sha256=KIgTJqQvNfWndm8f3aRSdznWFl3AdQhYXiZPKLseYOs,1672
83
+ nabu/estimation/tests/test_translation.py,sha256=RkOnCYgk9DZGKlIka1snqTv4wbIz_nG7-EHAxnBHsJU,2999
84
+ nabu/io/__init__.py,sha256=AbQgj4-fCCHOKynO_PyAR9ejnFSuWKgroxxhxWVpjyQ,120
85
+ nabu/io/cast_volume.py,sha256=eJuiKuZILD3xClUtYOjCqmwnbW12gwg-gJTzj606u_Y,21499
86
+ nabu/io/detector_distortion.py,sha256=qO1Z6gejkBrixThvU_sLwH3UfLAe8aAO63YQ8z7PH78,11750
87
+ nabu/io/reader.py,sha256=CRQfzLqG10QNzKpPY1j3z2toEAti2bNgImMwWnHQfVE,41775
88
+ nabu/io/reader_helical.py,sha256=q3LOmu6F_4Uxi3rZZWJ-rsix2Lgu_saXXdiJF8TLi24,4533
89
+ nabu/io/utils.py,sha256=iSeBhOIcLlKgiHXdDLfAdyvSrgdv6I5iQUcjT2gv_WQ,9303
90
+ nabu/io/writer.py,sha256=0bZ2X0hvT-r_2Uu2u3fIfXZH7clxKIDhBwHmBS0ZcxM,15811
91
+ nabu/io/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
+ nabu/io/tests/test_cast_volume.py,sha256=UGrIYVp1fxm372YFJinLWAL-xCtcR731axYchhonZHY,10774
93
+ nabu/io/tests/test_readers.py,sha256=70vD7qPuhVjZnebDAR9zrXjk1cD65bCH_F_5xb0JfbA,18252
94
+ nabu/io/tests/test_remove_volume.py,sha256=q632Rq0qLneDcJLHGWCR8HYlvdnTvaEEyTQAsNv1ggM,5967
95
+ nabu/io/tests/test_writers.py,sha256=EJp3DKeaRko7FVTgGdjrl2tt6jES228_XT5Jb767I0w,3137
96
+ nabu/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
+ nabu/misc/binning.py,sha256=x7mbKTfEKF8ZaZoPq2LJl9hfUsQ0qMNGMxaHE98PcNc,2920
98
+ nabu/misc/fftshift.py,sha256=5ktzFxD0XMrR7h8Y-ccnYZX92wmE5lhf4tuXhn8_vQg,219
99
+ nabu/misc/filters.py,sha256=8aoO7-g94PJ8zDUSKD0pV4knozsmZIGTDiiGgO3Fzhg,604
100
+ nabu/misc/fourier_filters.py,sha256=e3bEUXZLSWorsG8oUZ-AdYWx3fKrP2UsFg9M81ESwC8,5668
101
+ nabu/misc/histogram.py,sha256=eV6VfEl1gGP9_wbthh1xhiqtZHmb41o0OMI6G8q1sXw,223
102
+ nabu/misc/histogram_cuda.py,sha256=-eivBJlFRicRBWQtiDfs-iMiF6NDv43sWuAlul2dFqk,252
103
+ nabu/misc/kernel_base.py,sha256=ASiEvHiXhp_dLjkQxxAhob1fQ68ZmIkTsZM9uz11dbU,194
104
+ nabu/misc/padding.py,sha256=NUTNDsafUnI1pgy-YtemKINGUUufCb7w2EV-UrznCsM,2713
105
+ nabu/misc/padding_base.py,sha256=NQwOxhMnbssGBDKznE2Q6FMrIiQeAYRHVgsjxKy3Rzk,230
106
+ nabu/misc/processing_base.py,sha256=YTDfq2G64RVVuZn7JgWTie1YAtW-tT48Uq3ZuXH21hw,214
107
+ nabu/misc/rotation.py,sha256=4UgR3kaedemjeaZCfwmjF0HwfOLdSFE9ooSpMtoP85E,219
108
+ nabu/misc/rotation_cuda.py,sha256=agtjgKBjwOHJGXY-Y1HlbOUXi3Bl9ykyGv_a1qksucc,239
109
+ nabu/misc/transpose.py,sha256=ogJ1PPYO0sOPUfCgjk-Ho5cTjlBbP-KXGqhCgTj75DY,223
110
+ nabu/misc/unsharp.py,sha256=3xYsdiLTqTDlE8G-tIY7EeTf3nKxPrvMHOnXgkcKWvU,209
111
+ nabu/misc/unsharp_cuda.py,sha256=-csDxfQt_naYn5O8fOxksYNqyFKxbF8lV7yXlPd2XoM,235
112
+ nabu/misc/unsharp_opencl.py,sha256=HCPoobPwi2LEAfqGQ2qekjQi6G2VDKmqJQZTDXySv1Y,252
113
+ nabu/misc/utils.py,sha256=s8ACtKdw9rTmlD0APdrpeo_ZIneKsTv2Xq3X2TRxCRk,3898
114
+ nabu/misc/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
115
+ nabu/misc/tests/test_binning.py,sha256=vcZZINi_v_KOw4DMqLIgPlF-CwLTG102Yf7dMQ5_SEo,1890
116
+ nabu/misc/tests/test_interpolation.py,sha256=H8ZJ7dppCcpxVa9wOBkJ9U0mymH5lGyCJ0LZCYIK8PE,2389
117
+ nabu/opencl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ nabu/opencl/fft.py,sha256=0TOYjzIhRhvFgF6_oL2V89kOrlekPXu9eWpIkfOexAI,222
119
+ nabu/opencl/kernel.py,sha256=lmHRgWqpEbQUOunZe0xFuuw_Z_K6dq8BxjH3FLReVBU,5125
120
+ nabu/opencl/memcpy.py,sha256=s_0CCO-PTDmEsCW9_kVCNHwN7_hw7uNy_O6KJ0zS71I,1263
121
+ nabu/opencl/padding.py,sha256=CjeifU4xcUhgD_OILoIC4vPDQGVyVRjJXsMb8gxPL_0,238
122
+ nabu/opencl/processing.py,sha256=cKq_VLtLBPijp2pl7Zgc4mrVsYLUA27x26jPo484Kg4,2416
123
+ nabu/opencl/utils.py,sha256=OPqSJAZ82EwRmqu_H5_S59Y9a3CrqQhEQomWQj-EuSU,10239
124
+ nabu/opencl/src/ElementOp.cl,sha256=RMScHhHYDa6xXC4NLJrC1KpDRq-aMZG1lwq3O9pStiY,1258
125
+ nabu/opencl/src/backproj.cl,sha256=BmikalwFHhqO8xSWGq_txnkrkeAja5SlVcxhFxH2jIw,5470
126
+ nabu/opencl/src/fftshift.cl,sha256=xq-HNRWhuXqTVD_nD-38_41HPYZPCXAHDTpxsGURSTY,1726
127
+ nabu/opencl/src/halftomo.cl,sha256=IZ2VJwWLpfaNpzM8Ief13zsqDcq68lyFqG55qYWoHNE,1386
128
+ nabu/opencl/src/padding.cl,sha256=0e4wDB3wOVFIFw0f7VTfD45PK6HzDhooCgK2DZqiUfA,460
129
+ nabu/opencl/src/roll.cl,sha256=UTH4A9SfajGoX3wjOAm1inDT9-8RxCFfoZ5ePijMGOE,2486
130
+ nabu/opencl/src/transpose.cl,sha256=jFRIFccPefzbKFEqEIVYGrWac5XJs3FY1tEmvCzA74E,450
131
+ nabu/opencl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
+ nabu/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
+ nabu/pipeline/config.py,sha256=rOpCHywEi_StPDaz-fSYc36ondCMamMPhMy7o03HcJk,9207
134
+ nabu/pipeline/config_validators.py,sha256=Wx9nnUpfxTJ8H2ODkUyjImTtJS9V68TafLH1TecEFxI,16222
135
+ nabu/pipeline/datadump.py,sha256=tKW-Dl28FU2vf1OuIie_YI1-GT1DMreis57sOR-DuGU,7026
136
+ nabu/pipeline/dataset_validator.py,sha256=etQw9NC_YGsdWCgjsn8aJ3WfvcRuJlLVZlWoqhvvo-8,9263
137
+ nabu/pipeline/detector_distortion_provider.py,sha256=ru1AxbcuO-FA8FYooPBWgp1lzdSDUtzFUC1A_sS8jME,920
138
+ nabu/pipeline/estimators.py,sha256=ALzlcBxaVMt7OprEgndfBE_csuv9aKZax3erD3nBWU0,51786
139
+ nabu/pipeline/params.py,sha256=UKMQWFQnrlNMW5aIGty-JoGmBdkS6tpoAXCjW8n6FX8,4229
140
+ nabu/pipeline/processconfig.py,sha256=3xx2Lc8uEzPAqSMwUncr4RCiCtKn2c7wnXXbPSn8GNo,7719
141
+ nabu/pipeline/reader.py,sha256=wkxPHYOi_C8dHNc7kddB8AMtFuW7GjsP_tm6SJeHlEY,4792
142
+ nabu/pipeline/utils.py,sha256=5GGhT9Wu7tHDlF3w7YNjTTYkNBl5xHa9EcRZSGFUWtM,3538
143
+ nabu/pipeline/writer.py,sha256=NVeAtkWDtXg5UJ4C3wsbkfM23ZnK64atCWl8tjmjsuY,8166
144
+ nabu/pipeline/fullfield/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
+ nabu/pipeline/fullfield/chunked.py,sha256=gEm9XYk1MhNQBi-2VSVrXKQD55XmLPQAoHn9sCsEDIc,43272
146
+ nabu/pipeline/fullfield/chunked_cuda.py,sha256=US5prrhNjsx3QVHkY5duQp8uFcGdgYEPzVS7nfWkJRw,6047
147
+ nabu/pipeline/fullfield/computations.py,sha256=uqf7LvuDPm7n51BpP8eb8vTewDgRFyzSDP249g3FWBE,10098
148
+ nabu/pipeline/fullfield/dataset_validator.py,sha256=HK_bmlII9pc59PXCgKJOyLv7Xu3DYv_jbH3RmQSgzvI,2933
149
+ nabu/pipeline/fullfield/get_double_flatfield.py,sha256=uYFDAii6Nw4RCUQO_6Id6tXLdmtVbj_pxAHQWennSeE,5411
150
+ nabu/pipeline/fullfield/nabu_config.py,sha256=F1E4KwHTfw6tynBnBjvr1F6tflIFsvDp8Pyop7xNmGg,33146
151
+ nabu/pipeline/fullfield/processconfig.py,sha256=72hjxgClKcxmzypVpvcWzkzoXP7Ypu5VpRxMjYQVnJQ,38461
152
+ nabu/pipeline/fullfield/reconstruction.py,sha256=cljRyxD8rvZ5qDws_5AwChi7P-5T_0SSXsGkYUGOVb8,38006
153
+ nabu/pipeline/helical/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
+ nabu/pipeline/helical/dataset_validator.py,sha256=HdKjUSj3PIpJb1dKSzJg8s4zXbAnMPWaPn8kvp_xQEs,657
155
+ nabu/pipeline/helical/fbp.py,sha256=MKn587bO5Lj7yFu-Sll2RkOIY5r3rC-fmC10SzFU5i0,5841
156
+ nabu/pipeline/helical/filtering.py,sha256=dK93SP68QMCROTh8kWaYsm_NhqFpfj0I1Teek7dM6xg,10215
157
+ nabu/pipeline/helical/gridded_accumulator.py,sha256=DfyNp3MRQ1JWBjEMB_MJuJodtaProczeceh1xq2YvXU,26352
158
+ nabu/pipeline/helical/helical_chunked_regridded.py,sha256=Pedgb4D8SzMEHw_vIrSVTHXkt60gXmAIUGM69LBosaE,68463
159
+ nabu/pipeline/helical/helical_chunked_regridded_cuda.py,sha256=DdH55nQml3JWDX9VJaxflefyFWFZr6zBWwJRitCeeE8,3887
160
+ nabu/pipeline/helical/helical_reconstruction.py,sha256=-QwmcBif0XrONm01wJ1IhyRMU3YjG6fdAJEkImOk-Uc,24111
161
+ nabu/pipeline/helical/helical_utils.py,sha256=s38xbugkIJgcGeXqXJVSdGsUg-WPHt5hBmWuiYHVzR0,1437
162
+ nabu/pipeline/helical/nabu_config.py,sha256=lQU1AZaBSsvBEbNGAf5t0DRXFmNJzUqObrcqGKc7WM8,8047
163
+ nabu/pipeline/helical/processconfig.py,sha256=IlCfKkiclBmDDdT6Ail3aSj9Q7zV38YpFmF1_SsCjy4,2775
164
+ nabu/pipeline/helical/span_strategy.py,sha256=tKLWQv2woj3SSW5JLJu5pNbv48fy0vYNejnm7uHnaEc,25057
165
+ nabu/pipeline/helical/weight_balancer.py,sha256=9yQodctr1qUZFOEA-xfvUiolr-tI-HjX0Y8YIlO5gII,3975
166
+ nabu/pipeline/helical/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
+ nabu/pipeline/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
+ nabu/pipeline/tests/test_estimators.py,sha256=fYSc5ZA9j7e--AC9D4es7cSQ8-e0FsYq4IfXv4-LBcs,14901
169
+ nabu/pipeline/xrdct/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
+ nabu/preproc/__init__.py,sha256=dKxvZvWZXjKS3iPRaSXiUeM2dNGIOyTlirq5pdAWY0Y,284
171
+ nabu/preproc/alignment.py,sha256=PUw4YdpCmY6FVkUaosaT6LxFoNgPv7XHFy11Fhz1_6w,19
172
+ nabu/preproc/ccd.py,sha256=LELLZcoJaae9V6zW2lXehyP54-xWuvvQ3_0OIxWrpos,6979
173
+ nabu/preproc/ccd_cuda.py,sha256=IckZjk0fznVgX6VlBWZEURar_RqvMTN-g87Aj6Y8rJk,6093
174
+ nabu/preproc/ctf.py,sha256=LEZT5fawEIIT3Qx0V0910RSv8aPLYuuHDrMzTYqyd5o,14981
175
+ nabu/preproc/ctf_cuda.py,sha256=j6s8JOYQ7IVuu5HHAoGJhbTRW2zi7t5d6YrcAxIU0aQ,5268
176
+ nabu/preproc/distortion.py,sha256=XksQNrrSBfZS7mlvIdVEMZjw839ppQWP6AitTLcgfb0,3309
177
+ nabu/preproc/double_flatfield.py,sha256=WcYsNuotgQgm_KaioNa3OVI8rGfk3Wrn_YCW5v4mo4w,7895
178
+ nabu/preproc/double_flatfield_cuda.py,sha256=lqgvZyeujdWJ5nF_GNRMQx7punjqA3SZ8K3IIyL3HDY,6197
179
+ nabu/preproc/double_flatfield_variable_region.py,sha256=yiyvfGLFv3b93aKzHw84EQszPwQHfBv0PqtlQ8khvm4,2258
180
+ nabu/preproc/flatfield.py,sha256=t0NaV0NYaUAKtfWAop2srhL7wrfw6sGPMUAjs--LE3k,30574
181
+ nabu/preproc/flatfield_cuda.py,sha256=Iiqv7bHa870DZOH68L19xiN1kG9I9JXuckFfA3khGtY,5482
182
+ nabu/preproc/flatfield_variable_region.py,sha256=RVmSW515vgkHagjqotPNPUe97oQooHgdqkBn6hPH_2Q,3142
183
+ nabu/preproc/phase.py,sha256=nRFhnHN_Bmmu5AHDcoO-Kt59sXYFSQaTljHZ5dlZiA0,13857
184
+ nabu/preproc/phase_cuda.py,sha256=2oGjpmSl8U6dbzxrU_pt-_3JFm3XeBMCTCUNoxjIAuw,4944
185
+ nabu/preproc/shift.py,sha256=wAzZgafxbgboAZAs_m3q6Hxlz2ztMMN4FRY5balwNsE,3501
186
+ nabu/preproc/shift_cuda.py,sha256=4YOVRZ4oECEVWOQ6MzDBh8cOY2RtOOhlU7tir0Tp77M,4125
187
+ nabu/preproc/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
188
+ nabu/preproc/tests/test_ccd_corr.py,sha256=KIpwaWYWT_6OPVXyVuLxXIIWreBkYF0rOnDMiegiLMU,2249
189
+ nabu/preproc/tests/test_ctf.py,sha256=4KtjLdiMqwtv3ZJgk-q5xzxoxSnKL_wleZtEgEgEw2A,9986
190
+ nabu/preproc/tests/test_double_flatfield.py,sha256=qUmgAktFHqzKJBHHfj3GJzorey0yk7R0e4nr8dRmbTo,2870
191
+ nabu/preproc/tests/test_flatfield.py,sha256=8_vmTtfmrpbuKUr4fW8NmtH-PtGWkSQkMBFD6hs0ul4,21055
192
+ nabu/preproc/tests/test_paganin.py,sha256=Ixlp624o0xtFs12akN6sDn-gHWXm1wVlcdumm2prqh4,2978
193
+ nabu/preproc/tests/test_pcaflats.py,sha256=tZpMNzEtcqhLgnfl02VYyn9Ez8_YmZgtHAZublYNTHo,6356
194
+ nabu/preproc/tests/test_vshift.py,sha256=Gq9sDtbbAAdLTJALH2qcbeYXE5dINQ8QpBnCgZM0tFQ,2972
195
+ nabu/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
+ nabu/processing/azim.py,sha256=edTySuOWaZlc2dxU-PSY7Odd_mrVl0_MtjOvh8fzKxw,7264
197
+ nabu/processing/convolution_cuda.py,sha256=jOLKdEwzBwNZPTEjXIBWStZp22ieeukc6KGnuSNVnaA,15421
198
+ nabu/processing/fft_base.py,sha256=wSLiyJEwX51chfZG3CWPl0DvKp182qAmTnRY8N1mWW0,5741
199
+ nabu/processing/fft_cuda.py,sha256=0JNzdSPPQ1xS38mjsgriN3-Cj9MXCtADLVHzIQjQjWc,3467
200
+ nabu/processing/fft_opencl.py,sha256=Qhd9F32XCN22tet-en8S-yGkZDNsOMapqHlS0eTiPp0,2082
201
+ nabu/processing/fftshift.py,sha256=mFOKuqQtxDPXoFPPP_G-YMA4WFmmO0oPFXjBWrrfDO8,4880
202
+ nabu/processing/histogram.py,sha256=CumzHFjOw0JaHWlMnhCnj7I2Guam1HYqPVJeijKqC40,11376
203
+ nabu/processing/histogram_cuda.py,sha256=G0uKJNhDwPUTr8lyEBr1m5G0D4n3-eZwCCBC1FZaCyQ,3338
204
+ nabu/processing/kernel_base.py,sha256=0m5WxJIREntSMoUP_ECtGnuWMKN9AS6wJVdblEGDu_M,4366
205
+ nabu/processing/medfilt_cuda.py,sha256=usnNMKxFMrGI6ZIYNRDXBn5kzBzOyuVay8mnQSvNR2k,5691
206
+ nabu/processing/muladd.py,sha256=CZyVL2innf7suGvwM7xB16vUjgZSz0UYEm7Z563igyw,876
207
+ nabu/processing/muladd_cuda.py,sha256=wGivGyyMn7FN68hDT590RwSiV4Ju-TLGwa1bnw4Cd_k,2477
208
+ nabu/processing/padding_base.py,sha256=P6Zu8yLkHrCW3ZAZmeLfPn2ZfAH2_fZEB3CMLbCWL6E,2874
209
+ nabu/processing/padding_cuda.py,sha256=72bypO92I9TRVr63YO6COnht3v9nwt95QkfYiNJBqY8,2612
210
+ nabu/processing/padding_opencl.py,sha256=H7w5bY9Th9pJKYKaX1_u-XqUj8lM5XWfVViu0ax4W40,3074
211
+ nabu/processing/processing_base.py,sha256=sbMmkjjYvkqNosGsO8IeC2hlzIqLapdAh-wGv2ssG-o,4477
212
+ nabu/processing/roll_opencl.py,sha256=ms6ZW7ecG-kWq--wWijAjDB_uVWQtUylFp_EDKmfUKw,2283
213
+ nabu/processing/rotation.py,sha256=8tVQponi8tv8uPw-xT-0GyZecl3YIXyJgPkEnQMer8M,1836
214
+ nabu/processing/rotation_cuda.py,sha256=_NtcrqshEwbD7DUW1NA0HVq0nr8RBAKovEg1DvuADcw,2941
215
+ nabu/processing/transpose.py,sha256=bOnxEFXJd16YcTGyMS-3lwREIVaDkClE_Fkb8bOn1l8,4410
216
+ nabu/processing/unsharp.py,sha256=XqoieKlX5sEHalxObi5JBOjauRUSbiHc6rqYT_buTa4,2682
217
+ nabu/processing/unsharp_cuda.py,sha256=uKFCEk8bRqgJzR8HB_OeKYuwC5jKqaXpFI6pRv_pDY4,2152
218
+ nabu/processing/unsharp_opencl.py,sha256=vBVq5wA-rxOkULE-sv6WzNt5Pq9hc3gFcp4mM0kCo44,2651
219
+ nabu/processing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
+ nabu/processing/tests/test_fft.py,sha256=9UnMcqnmzlBz5SHeJV9b8VOX-cAm35DBIbEP84l4nlM,7587
221
+ nabu/processing/tests/test_fftshift.py,sha256=Qwg3oOwNh_MRmg9BS1kMVhQSSfzQzrCOsppsvY3v5rg,2599
222
+ nabu/processing/tests/test_histogram.py,sha256=25CLs1WZpLF9xZ2DR82x4_YokA5Z76Qsnn6zY8YdJj8,2283
223
+ nabu/processing/tests/test_medfilt.py,sha256=rnReK3MMCsc74-NoycYSRSMp7bN4Qdg4cZbHfWQ9ZWQ,2652
224
+ nabu/processing/tests/test_muladd.py,sha256=cRhAC5hgmRV0BAwPA4o4M-kcx-UDniLK7sSyiN0F3kE,1927
225
+ nabu/processing/tests/test_padding.py,sha256=EQXYwAFDvtAjK6KRPAY7fNarRXPixuwqKItM3bkJDKY,8730
226
+ nabu/processing/tests/test_roll.py,sha256=XtEFz1V_OId1O2hGf4JJjesCyYLxKjoz966sGL-YzEs,2333
227
+ nabu/processing/tests/test_rotation.py,sha256=5O1yHthJfdoP-2loXob96j_V2IwI2eb8rouCYwDrdKk,2834
228
+ nabu/processing/tests/test_transpose.py,sha256=hTG17wTaB5Wv6twbW3ZFhBv6BYfqJY7DTQPoO0-KdkM,2760
229
+ nabu/processing/tests/test_unsharp.py,sha256=R3ovbwDDp3ccy2A8t6CcUVELXRWkED5EnQdN2FQOfQM,4391
230
+ nabu/reconstruction/__init__.py,sha256=EmKVvx_-FJvzJngG4ielIC7FhMCpI1Waaflg_lF44tk,163
231
+ nabu/reconstruction/astra.py,sha256=qnFYabU-Bzgys8hXjIBcwO2NazrvhNXUYFIkMHc6BmM,10444
232
+ nabu/reconstruction/cone.py,sha256=tSjaMDHeFV-h_IFbxUqSbhqlWmvlBcJQ8u89Y9Q9gg8,20559
233
+ nabu/reconstruction/fbp.py,sha256=ptHcQsZTxgMFa9PhFJeTzDekibWR-P1BUj2SvRrk770,5684
234
+ nabu/reconstruction/fbp_base.py,sha256=usd49ctQMI5w6uU5xn8qBsN7gI95iU9a3jRZgSPmOJk,18653
235
+ nabu/reconstruction/fbp_opencl.py,sha256=U-XP7v1m1lJ1ulvlF8tclJfEOWmZLCT1hevIw4gsNec,3497
236
+ nabu/reconstruction/filtering.py,sha256=monJnA_kk9k_Gy7bMAos9I-XgU8czWhf9vBth6ikcMM,10566
237
+ nabu/reconstruction/filtering_cuda.py,sha256=_S-BZMhtnNt8ugePSmf-LF7JvMPCOyGPUMSseymgwZw,4019
238
+ nabu/reconstruction/filtering_opencl.py,sha256=v-sUzbnRp6M1B221F-iSh-crBCGknjHYYsjFs05VhDY,3788
239
+ nabu/reconstruction/hbp.py,sha256=Qll7i20LWxUo1-SHRxemkYAolBTP8HScwt1OvWmD2r0,18642
240
+ nabu/reconstruction/mlem.py,sha256=wgC2pKl6RKB-f2318worB9VE-qCGoQcz24aKbtkrJos,5794
241
+ nabu/reconstruction/projection.py,sha256=SNocaOY9HuNiHs-VxkW9IS707JPJnd3sDjAbf7aIw2E,9081
242
+ nabu/reconstruction/reconstructor.py,sha256=16xxHcK4iie-uh-trf6x_IuvgxJKBvQRTE5B8tnc4F8,7358
243
+ nabu/reconstruction/reconstructor_cuda.py,sha256=m_3GzG44PRyiSEfTvYjgr5atLwl26hMfZOMyqTWxp0g,1644
244
+ nabu/reconstruction/rings.py,sha256=mpbCLuFM_6Uy9oNJkyQ8tZwhGhrbWtzRlArSRsC90bI,9527
245
+ nabu/reconstruction/rings_cuda.py,sha256=yWUQ-XK-2htZ59GM5aNORA4sjxUswEwWUZuWqKJXiNY,14878
246
+ nabu/reconstruction/sinogram.py,sha256=VeydpunbseI6azvMpoutldz3ZaSc6cKP4ibrGuvEHN4,17028
247
+ nabu/reconstruction/sinogram_cuda.py,sha256=DBF06ruzkZ5zn8x06Ron2NkB_FBKiZC2oM7kjeiV6jQ,10630
248
+ nabu/reconstruction/sinogram_opencl.py,sha256=vxJa5BeOd2NVdUayXYfQGAfO1AEbJfTGotuijT8qgCs,1486
249
+ nabu/reconstruction/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
250
+ nabu/reconstruction/tests/test_cone.py,sha256=yRx0k1Nv1bTP2IyiwygtIoafQ6v18-qf9J1Rkg_OxSI,22732
251
+ nabu/reconstruction/tests/test_deringer.py,sha256=3xT7YltisnXa-NUd7aoMe88wOfTiTj-uxC6JFxGXtUA,8352
252
+ nabu/reconstruction/tests/test_fbp.py,sha256=SLdNjpWp3c7XVRUlR9nKyUvvzEcu9CkFE7WaP6nFxQc,16368
253
+ nabu/reconstruction/tests/test_filtering.py,sha256=J5U6PDykX2yThQn4fVrln4mNxC2TgwW9xRY7wE9X-dQ,5977
254
+ nabu/reconstruction/tests/test_halftomo.py,sha256=zCAOFGRaLicr2PLw3628Kdcuj_bhGZz8QZvWBL-c7As,6526
255
+ nabu/reconstruction/tests/test_mlem.py,sha256=QlrBZIJJetRxDRWoMDZ3wNepanAwGd6KgJd3hhoQ7dU,4983
256
+ nabu/reconstruction/tests/test_projector.py,sha256=QcHLnNWQ6HC9pJo9CdalaaeEDQ_vFpNMn5yXEpfBDXI,6259
257
+ nabu/reconstruction/tests/test_reconstructor.py,sha256=xzfEM0j48ScQoGqWVcAK74HG97tcF7FsVVLzvX_TgHE,3379
258
+ nabu/reconstruction/tests/test_sino_normalization.py,sha256=qNnpVUp3UcFGyLlSP0rCzE5hxdV6YENL9AF6mo72WcQ,3669
259
+ nabu/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
+ nabu/resources/cor.py,sha256=-mcrTbj3G7o4PP5E_gIRo2j6_-ADmMkkOc_0CyQv84c,170
261
+ nabu/resources/dataset_analyzer.py,sha256=X52X2YAOGBSMRfWko4Z2-oL_VePpc27A1GZbbTAk5yI,25739
262
+ nabu/resources/gpu.py,sha256=oQA8PpPdyuIzpxq1PwVd9gJdyCiLIry2godUV1AbPW0,5769
263
+ nabu/resources/logger.py,sha256=xV9UoLZBw3wXAWYfOgqrnOtzJc9aC1VNO4LM2cHxWJg,3738
264
+ nabu/resources/nxflatfield.py,sha256=kgHPf_jGQiuJ_EFe8fladRkx_PM6PfdRtcf5Tf2cYgU,12385
265
+ nabu/resources/utils.py,sha256=79iO6I0sXx8VGXZOC9eXquNvasF37A9Zr6r2BYSwJWU,5974
266
+ nabu/resources/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
+ nabu/resources/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
+ nabu/resources/templates/bm05_pag.conf,sha256=3-Zny2_QlQuZKge53N1vFLZ8yzq-y2cmpAAkByUdHX8,394
269
+ nabu/resources/templates/id16_ctf.conf,sha256=PJt_hvBlAweZSo6INnsmozHfBJvJ64b28x1mFfAOD6s,842
270
+ nabu/resources/templates/id16_holo.conf,sha256=sDd_rEJGZjOGVAsGub5sT2arfXDnc_sxyDBAcfKHNpw,773
271
+ nabu/resources/templates/id16a_fluo.conf,sha256=Nz1etzO2fSwksi7CThWJ5T1kZEdyBe8rMO7puNJ93Hc,542
272
+ nabu/resources/templates/id19_pag.conf,sha256=u4fFPEBprzOW9_5_ChkIgowQcYpLhjmA8Gwm5XgC4Jc,384
273
+ nabu/resources/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
+ nabu/resources/tests/test_dataset_analyzer.py,sha256=qp0cCwZfZMITWNDvxa-q84xpfUyFnQygDwCLN7QMSOs,1590
275
+ nabu/resources/tests/test_extract.py,sha256=6ufLTc4Wgf9-FLsscpG2TbUDEn767iLVdyOrwRQyI9A,443
276
+ nabu/resources/tests/test_nxflatfield.py,sha256=XCiFULzNyApdhr89a3a3BseJMPUN4JnzxQ8VdBaA8ac,4225
277
+ nabu/resources/tests/test_units.py,sha256=F2jFTck-1UwYET1MwTtX6ntzYUosfwOJkugSencGgz8,2155
278
+ nabu/stitching/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
279
+ nabu/stitching/alignment.py,sha256=J1wNjULS1PTB_37MSvw9-EX1yb5MuNElsqcdk3g9KWU,8923
280
+ nabu/stitching/config.py,sha256=ZYMvbxsJN-lUvJuJiWcVpdF4Pp5Pua3ifCLHP3d87J8,52991
281
+ nabu/stitching/definitions.py,sha256=PhSvXZwe-nPrqFebCs3M-OIKoLvD4oq3XRRnOEBvk7Y,137
282
+ nabu/stitching/frame_composition.py,sha256=bOuOn3SoyAgtEv_DZon-JbEfh5hW3RySTjK6ERxVZ2w,6626
283
+ nabu/stitching/overlap.py,sha256=pGDZqh0TAp3z89yVktO5x-yi0tG-qQugLmRuTO9AFIM,17168
284
+ nabu/stitching/sample_normalization.py,sha256=d6xjDp4-_MA4S2ytPXX3ROV2CBKcY4QAhE52t6HjC50,2025
285
+ nabu/stitching/single_axis_stitching.py,sha256=bAJlZhUOqW93VkX4nWFNrnQN4G92PHCn-87RpQ34oto,1214
286
+ nabu/stitching/slurm_utils.py,sha256=kTtqZOrkSLjY_AzL5Fd2n11uqmWPCYHJvN1qbbaGy-E,8993
287
+ nabu/stitching/stitcher_2D.py,sha256=g9MQttUrJTYNt4SreGjj3PkccyVCQ4MwyUUUbjsweC4,12667
288
+ nabu/stitching/y_stitching.py,sha256=Urt2lBXokxXxX5HFHEiLBqC69yy5b_KyuKFoU8smah4,1020
289
+ nabu/stitching/z_stitching.py,sha256=gNwj7qWvDFQaGroLVoQnKBPlbvr_CReUQEqxW15m2Ag,1835
290
+ nabu/stitching/stitcher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
+ nabu/stitching/stitcher/base.py,sha256=Nyc5L-nvSLWOsrVVq_EP8V9j5AKnFVgxTijStyiF5-I,4326
292
+ nabu/stitching/stitcher/post_processing.py,sha256=jgNL-3nPevNGHtDKgYMGeJdUxR0ma-qCfzCcYJW8aEI,26868
293
+ nabu/stitching/stitcher/pre_processing.py,sha256=S5bvORC0IsXf82WW1-9YMpk3JzFvp-G9c1mM5_89UKU,51829
294
+ nabu/stitching/stitcher/single_axis.py,sha256=hocbPKtOmcx9z_Eavyzxj9W-yMgeLlaze6Dsv8NdWVc,20026
295
+ nabu/stitching/stitcher/stitcher.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
296
+ nabu/stitching/stitcher/y_stitcher.py,sha256=KXwkyw6cCFcuSBCq5OyAait2Ob_5WRrtawrAlAhk60k,317
297
+ nabu/stitching/stitcher/z_stitcher.py,sha256=pb8IezJOD9U7hTc6LCExRtkxOgBsUUCgf4G8yuvq11k,1397
298
+ nabu/stitching/stitcher/dumper/__init__.py,sha256=FcSlb-AvGWZHm_4x9GYvmTrB1488vKeHv6uVR1pKAa0,243
299
+ nabu/stitching/stitcher/dumper/base.py,sha256=kenknxtqyg_SQMDsLzd0yBYPlpepCaqyB5bvZnGEpuk,3397
300
+ nabu/stitching/stitcher/dumper/postprocessing.py,sha256=-50ZIzsBqp1344pcp_eGKaWeCvIXLevPNtvDtDiGP_E,18274
301
+ nabu/stitching/stitcher/dumper/preprocessing.py,sha256=7qOx27p92Tbbiah6gYEjkxfax7L8ictdrvzqfDm3vHo,2219
302
+ nabu/stitching/tests/test_alignment.py,sha256=MACak1ILOr8nRKeT0mWfMd-ZvhCl3SWjjcp6GjRbITc,2735
303
+ nabu/stitching/tests/test_config.py,sha256=oFlLm3VCC2DEE948IDU-PE9FklCjZU86K-sd8wvSDvA,7311
304
+ nabu/stitching/tests/test_frame_composition.py,sha256=fQLT426u-uF5TTURKN48uHKgeYiz3ogTjwo7o4YFE30,4839
305
+ nabu/stitching/tests/test_overlap.py,sha256=B_iT0pe9b9EJ77V59ilk-_Run6n5a1V9mTDuiPzqieg,7820
306
+ nabu/stitching/tests/test_sample_normalization.py,sha256=a-F8geN8qrteDeQK37oeSYNdt49siyWFs3fZgPTRn4g,1328
307
+ nabu/stitching/tests/test_slurm_utils.py,sha256=QTbtx5SRAK1JkbyI-GNSI5xeqVHI8KptD3STpOb09Pc,4951
308
+ nabu/stitching/tests/test_utils.py,sha256=hIahPlogtnZNr_YkbN_Rcv-y6qG47IiRSSss51-cWK4,647
309
+ nabu/stitching/tests/test_y_preprocessing_stitching.py,sha256=9AGMM3glAVsZ-M1v-_DD1u_QWUb5Id5QldIOYnw-1vY,5179
310
+ nabu/stitching/tests/test_z_postprocessing_stitching.py,sha256=vzWPGr2X-kN6WuRMHFMcEnSMjA9xv_TTq3pogpT8uEY,26908
311
+ nabu/stitching/tests/test_z_preprocessing_stitching.py,sha256=aIaYaROpoMflx_wW-cOoLUqmngMEnRCXlQUuoGldcs4,16445
312
+ nabu/stitching/utils/__init__.py,sha256=alIDGBnxWH4JvP-UW-7N99seBBi0r1GV1h8f1ERFBec,21
313
+ nabu/stitching/utils/post_processing.py,sha256=aow36shbYhFgAnbCoq6mtXVpjBNCKm7VSLIvv3EYVdA,11303
314
+ nabu/stitching/utils/utils.py,sha256=hX9WC-ZpmV31svQnKPO8Ek-uW-RZ3Ot4szfvuYpZjPg,24586
315
+ nabu/stitching/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
316
+ nabu/stitching/utils/tests/test_post-processing.py,sha256=X79gYJ2dwF_bjFWVQLu9odHNJaMmljfuI1-ROIp7jdE,766
317
+ nabu/thirdparty/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
318
+ nabu/thirdparty/algotom_convert_sino.py,sha256=iZVRilvyqMyLTu8RKgbqDFUjObWW5X69rCARrnNizuI,13872
319
+ nabu/thirdparty/pore3d_deringer_munch.py,sha256=o4bisnFc-wMjuohWBT8wgWmfNehPQGtCl6G2NebJlbg,4500
320
+ nabu/thirdparty/tomocupy_remove_stripe.py,sha256=Khe4zFf0kRzu65Yxnvq58gt1ljOztqJGdMDhVAiM7lM,24363
321
+ nabu/thirdparty/tomopy_phase.py,sha256=hK4oPpkogLOhv23XzzEXQY2u3r8fJvASY_bINVs6ERE,8634
322
+ nabu/thirdparty/tomwer_load_flats_darks.py,sha256=ZNoVAinUb_wGYbfvs_4BVnWsjsQmNxSvCh1bWhR2WWg,5611
323
+ nabu-2025.1.0.dist-info/licenses/LICENSE,sha256=1eAIPSnEsnSFNUODnLtNtQTs76exG3ZxJ1DJR6zoUBA,1066
324
+ nabu-2025.1.0.dist-info/METADATA,sha256=Hm7AO-tcnARZvhjBTjJCvKA5L1CgV29yzAurY7oFG0s,4271
325
+ nabu-2025.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
326
+ nabu-2025.1.0.dist-info/entry_points.txt,sha256=YxzCY5CNQ1XHrIGbRKg-BgC1Jy7QaCITdITpyhhxpZU,1338
327
+ nabu-2025.1.0.dist-info/top_level.txt,sha256=fsm_N3eXLRZk2QXF9OSKPNDPFXOz8FAQjHh5avT3dok,9
328
+ nabu-2025.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -8,12 +8,13 @@ nabu-diag2pix = nabu.app.diag_to_pix:main
8
8
  nabu-diag2rot = nabu.app.diag_to_rot:main
9
9
  nabu-display-timings = nabu.app.parse_reconstruction_log:parse_reclog_cli
10
10
  nabu-double-flatfield = nabu.app.double_flatfield:dff_cli
11
+ nabu-estimate-motion = nabu.app.estimate_motion:estimate_motion
11
12
  nabu-generate-info = nabu.app.generate_header:generate_merged_info_file
12
13
  nabu-helical = nabu.app.reconstruct_helical:main_helical
13
- nabu-helical-correct-rot = nabu.app.correct_rot:main
14
14
  nabu-helical-prepare-weights-double = nabu.app.prepare_weights_double:main
15
15
  nabu-histogram = nabu.app.histogram:histogram_cli
16
16
  nabu-multicor = nabu.app.multicor:main
17
+ nabu-pcaflats = nabu.app.pcaflats:main
17
18
  nabu-poly2map = nabu.app.create_distortion_map_from_poly:create_distortion_maps_entry_point
18
19
  nabu-reduce-dark-flat = nabu.app.reduce_dark_flat:main
19
20
  nabu-rotate = nabu.app.rotate:rotate_cli
nabu/app/correct_rot.py DELETED
@@ -1,70 +0,0 @@
1
- from .. import version
2
- from os import environ
3
-
4
- import argparse
5
- import shutil
6
- import os
7
- import sys
8
- import re
9
- import h5py
10
- import numpy as np
11
-
12
-
13
- from ..resources.logger import LoggerOrPrint
14
- from .utils import parse_params_values
15
- from .cli_configs import CorrectRotConfig
16
- from silx.io.dictdump import h5todict
17
-
18
- from nxtomo.application.nxtomo import NXtomo
19
-
20
- import h5py
21
- from nabu.utils import DictToObj
22
-
23
-
24
- def main(user_args=None):
25
- """Applies the correction found by diag_to_rot to a nexus file"""
26
-
27
- if user_args is None:
28
- user_args = sys.argv[1:]
29
-
30
- args = DictToObj(
31
- parse_params_values(
32
- CorrectRotConfig,
33
- parser_description=main.__doc__,
34
- program_version="nabu " + version,
35
- user_args=user_args,
36
- )
37
- )
38
-
39
- # now we read the results of the diag_to_rot utility, they are in the cor_file parameter
40
- # of the cli
41
- cor_data = DictToObj(h5todict(args.cor_file, "/"))
42
-
43
- my_cor = cor_data.cor[0]
44
- # we will take my_cor as cor at the first angular position
45
- # and then we correct the x_translation at the other angles
46
-
47
- # We now load the nexus that we wish to correct
48
- nx_tomo = NXtomo().load(args.nexus_source, args.entry_name)
49
-
50
- # The cor_file that we use for correction
51
- # is providing us with the z_m that gives for each
52
- # cor position found in the cor array the corresponding value of
53
- # the translation along z (in meters)
54
- z_translation = nx_tomo.sample.z_translation.value
55
- z_translation = z_translation - z_translation[0]
56
-
57
- # now we interpolate to find the correction
58
- # for each position of the encoders
59
- cors = np.interp(z_translation, cor_data.z_m, cor_data.cor)
60
-
61
- # this is the correction
62
- x_correction = nx_tomo.instrument.detector.x_pixel_size.value * (cors - my_cor) # we are in meters here
63
-
64
- # and we apply it to the nexus that we have loaded
65
- nx_tomo.sample.x_translation = nx_tomo.sample.x_translation.value + x_correction
66
-
67
- # finally we write it to the corrected nexus file
68
- nx_tomo.save(file_path=args.nexus_target, data_path=args.entry_name, overwrite=True)
69
-
70
- return 0
@@ -1,178 +0,0 @@
1
- import pytest
2
- import numpy as np
3
- import scipy.ndimage
4
- from scipy import sparse
5
- from nabu.io.detector_distortion import DetectorDistortionBase
6
- from nabu.processing.rotation import Rotation, __have__skimage__
7
-
8
- if __have__skimage__:
9
- import skimage
10
-
11
-
12
- @pytest.mark.skipif(not (__have__skimage__), reason="Need scikit-image for rotation")
13
- def test_detector_distortion():
14
- image = scipy.ndimage.gaussian_filter(np.random.random([379, 1357]), 3.0)
15
- center_xz = ((image.shape[1] - 1) / 2, (image.shape[0] - 1) / 2)
16
-
17
- part_to_be_retrieved = image[100:279]
18
-
19
- rotated_image = skimage.transform.rotate(image, angle=5.0, center=center_xz[::])
20
-
21
- corrector = DetectorDistortionRotation(detector_full_shape_vh=image.shape, center_xz=center_xz, angle_deg=-5.0)
22
- start_x, end_x, start_z, end_z = corrector.set_sub_region_transformation(
23
- target_sub_region=(
24
- None,
25
- None,
26
- 100,
27
- 279,
28
- )
29
- )
30
-
31
- source = rotated_image[start_z:end_z, start_x:end_x]
32
-
33
- retrieved = corrector.transform(source)
34
-
35
- diff = (retrieved - part_to_be_retrieved)[:, 20:-20]
36
-
37
- assert abs(diff).std() < 1e-3
38
-
39
-
40
- class DetectorDistortionRotation(DetectorDistortionBase):
41
- """ """
42
-
43
- def __init__(self, detector_full_shape_vh=(0, 0), center_xz=(0, 0), angle_deg=0.0):
44
- """This is the basis class.
45
- A simple identity transformation which has the only merit to show
46
- how it works.Reimplement this function to have more parameters for other
47
- transformations
48
- """
49
- self._build_full_transformation(detector_full_shape_vh, center_xz, angle_deg)
50
-
51
- def _build_full_transformation(self, detector_full_shape_vh, center_xz, angle_deg):
52
- """A simple identity.
53
- Reimplement this function to have more parameters for other
54
- transformations
55
- """
56
-
57
- indices = np.indices(detector_full_shape_vh)
58
- center_x, center_z = center_xz
59
- coordinates = (indices.T - np.array([center_z, center_x])).T
60
-
61
- c = np.cos(np.deg2rad(angle_deg))
62
- s = np.sin(np.deg2rad(angle_deg))
63
-
64
- rot_mat = np.array([[c, s], [-s, c]])
65
-
66
- coordinates = np.tensordot(rot_mat, coordinates, axes=[1, 0])
67
-
68
- # padding
69
- sz, sx = detector_full_shape_vh
70
- total_detector_npixs = sz * sx
71
- xs = np.clip(np.array(coordinates[1].flat) + center_x, [[0]], [[sx - 1]])
72
- zs = np.clip(np.array(coordinates[0].flat) + center_z, [[0]], [[sz - 1]])
73
-
74
- ix0s = np.floor(xs)
75
- ix1s = np.ceil(xs)
76
- fx = xs - ix0s
77
-
78
- iz0s = np.floor(zs)
79
- iz1s = np.ceil(zs)
80
- fz = zs - iz0s
81
-
82
- I_tmp = np.empty([4 * sz * sx], np.int64)
83
- J_tmp = np.empty([4 * sz * sx], np.int64)
84
- V_tmp = np.ones([4 * sz * sx], "f")
85
-
86
- I_tmp[:] = np.arange(sz * sx * 4) // 4
87
-
88
- J_tmp[0::4] = iz0s * sx + ix0s
89
- J_tmp[1::4] = iz0s * sx + ix1s
90
- J_tmp[2::4] = iz1s * sx + ix0s
91
- J_tmp[3::4] = iz1s * sx + ix1s
92
-
93
- V_tmp[0::4] = (1 - fz) * (1 - fx)
94
- V_tmp[1::4] = (1 - fz) * fx
95
- V_tmp[2::4] = fz * (1 - fx)
96
- V_tmp[3::4] = fz * fx
97
-
98
- self.detector_full_shape_vh = detector_full_shape_vh
99
-
100
- coo_tmp = sparse.coo_matrix((V_tmp.astype("f"), (I_tmp, J_tmp)), shape=(sz * sx, sz * sx))
101
-
102
- csr_tmp = coo_tmp.tocsr()
103
-
104
- self.full_csr_data = csr_tmp.data
105
- self.full_csr_indices = csr_tmp.indices
106
- self.full_csr_indptr = csr_tmp.indptr
107
-
108
- ## This will be used to save time if the same sub_region argument is requested several time in a row
109
- self._status = None
110
-
111
- def _set_sub_region_transformation(
112
- self,
113
- target_sub_region=(
114
- (
115
- None,
116
- None,
117
- 0,
118
- 0,
119
- ),
120
- ),
121
- ):
122
- (x_start, x_end, z_start, z_end) = target_sub_region
123
-
124
- if z_start is None:
125
- z_start = 0
126
- if z_end is None:
127
- z_end = self.detector_full_shape_vh[0]
128
-
129
- if (x_start, x_end) not in [(None, None), (0, None), (0, self.detector_full_shape_vh[1])]:
130
- message = f""" In the base class DetectorDistortionRotation only vertical slicing is accepted.
131
- The sub_region contained (x_start, x_end)={(x_start, x_end)} which would slice the
132
- full horizontal size which is {self.detector_full_shape_vh[1]}
133
- """
134
- raise ValueError()
135
-
136
- x_start, x_end = 0, self.detector_full_shape_vh[1]
137
-
138
- row_ptr_start = z_start * self.detector_full_shape_vh[1]
139
- row_ptr_end = z_end * self.detector_full_shape_vh[1]
140
-
141
- indices_start = self.full_csr_indptr[row_ptr_start]
142
- indices_end = self.full_csr_indptr[row_ptr_end]
143
-
144
- data_tmp = self.full_csr_data[indices_start:indices_end]
145
-
146
- target_offset = self.full_csr_indptr[row_ptr_start]
147
- indptr_tmp = self.full_csr_indptr[row_ptr_start : row_ptr_end + 1] - target_offset
148
-
149
- indices_tmp = self.full_csr_indices[indices_start:indices_end]
150
-
151
- iz_source = (indices_tmp) // self.detector_full_shape_vh[1]
152
-
153
- z_start_source = iz_source.min()
154
- z_end_source = iz_source.max() + 1
155
- source_offset = z_start_source * self.detector_full_shape_vh[1]
156
- indices_tmp = indices_tmp - source_offset
157
-
158
- target_size = (z_end - z_start) * self.detector_full_shape_vh[1]
159
- source_size = (z_end_source - z_start_source) * self.detector_full_shape_vh[1]
160
-
161
- self.transformation_matrix = sparse.csr_matrix(
162
- (data_tmp, indices_tmp, indptr_tmp), shape=(target_size, source_size)
163
- )
164
-
165
- self.target_shape = ((z_end - z_start), self.detector_full_shape_vh[1])
166
-
167
- ## For the identity matrix the source and the target have the same size.
168
- ## The two following lines are trivial.
169
- ## For this identity transformation only the slicing of the appropriate part
170
- ## of the identity sparse matrix is slightly laborious.
171
- ## Practical case will be more complicated and source_sub_region
172
- ## will be in general larger than the target_sub_region
173
- self._status = {
174
- "target_sub_region": ((x_start, x_end, z_start, z_end)),
175
- "source_sub_region": ((x_start, x_end, z_start_source, z_end_source)),
176
- }
177
-
178
- return self._status["source_sub_region"]