brainles-preprocessing 0.3.5__tar.gz → 0.3.6__tar.gz

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 (121) hide show
  1. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/PKG-INFO +2 -4
  2. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/README.md +1 -1
  3. brainles_preprocessing-0.3.6/brainles_preprocessing/constants.py +25 -0
  4. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/preprocessor.py +6 -6
  5. brainles_preprocessing-0.3.6/brainles_preprocessing/registration/__init__.py +27 -0
  6. brainles_preprocessing-0.3.6/brainles_preprocessing/utils/zenodo.py +189 -0
  7. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/pyproject.toml +2 -4
  8. brainles_preprocessing-0.3.5/brainles_preprocessing/constants.py +0 -10
  9. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/__init__.py +0 -23
  10. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/atlas/copyright.md +0 -11
  11. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/atlas/t1_brats_space.nii +0 -0
  12. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/atlas/t1_skullstripped_brats_space.nii +0 -0
  13. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/eReg/config_files/TODO.md +0 -0
  14. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/eReg/eReg.py +0 -100
  15. brainles_preprocessing-0.3.5/brainles_preprocessing/registration/niftyreg/__init__.py +0 -0
  16. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/LICENSE +0 -0
  17. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/__init__.py +0 -0
  18. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/brain_extraction/__init__.py +0 -0
  19. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/brain_extraction/brain_extractor.py +0 -0
  20. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/brats/__init__.py +0 -0
  21. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/brats/t1_centric.py +0 -0
  22. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/brats/t1c_centric.py +0 -0
  23. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/cli.py +0 -0
  24. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/defacing/__init__.py +0 -0
  25. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/defacing/defacer.py +0 -0
  26. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/defacing/quickshear/__init__.py +0 -0
  27. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/defacing/quickshear/nipy_quickshear.py +0 -0
  28. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/defacing/quickshear/quickshear.py +0 -0
  29. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/modality.py +0 -0
  30. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/normalization/__init__.py +0 -0
  31. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/normalization/normalizer_base.py +0 -0
  32. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/normalization/percentile_normalizer.py +0 -0
  33. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/normalization/windowing_normalizer.py +0 -0
  34. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/ANTs/ANTs.py +0 -0
  35. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/ANTs/TODO_ANTs_parameters.py +0 -0
  36. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/ANTs/__init__.py +0 -0
  37. {brainles_preprocessing-0.3.5/brainles_preprocessing/registration/eReg → brainles_preprocessing-0.3.6/brainles_preprocessing/registration/elastix}/__init__.py +0 -0
  38. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/elastix/elastix.py +0 -0
  39. {brainles_preprocessing-0.3.5/brainles_preprocessing/registration/elastix → brainles_preprocessing-0.3.6/brainles_preprocessing/registration/greedy}/__init__.py +0 -0
  40. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/greedy/greedy.py +0 -0
  41. {brainles_preprocessing-0.3.5/brainles_preprocessing/registration/greedy → brainles_preprocessing-0.3.6/brainles_preprocessing/registration/niftyreg}/__init__.py +0 -0
  42. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg.py +0 -0
  43. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/groupwise_niftyreg_params.sh +0 -0
  44. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/groupwise_niftyreg_run.sh +0 -0
  45. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_aladin +0 -0
  46. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_average +0 -0
  47. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_f3d +0 -0
  48. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_jacobian +0 -0
  49. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_measure +0 -0
  50. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_resample +0 -0
  51. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_tools +0 -0
  52. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_transform +0 -0
  53. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/AffineDeformationFieldKernel.h +0 -0
  54. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/AladinContent.h +0 -0
  55. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/BlockMatchingKernel.h +0 -0
  56. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUAffineDeformationFieldKernel.h +0 -0
  57. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUBlockMatchingKernel.h +0 -0
  58. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUConvolutionKernel.h +0 -0
  59. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUKernelFactory.h +0 -0
  60. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUOptimiseKernel.h +0 -0
  61. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUResampleImageKernel.h +0 -0
  62. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/ConvolutionKernel.h +0 -0
  63. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/Kernel.h +0 -0
  64. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/KernelFactory.h +0 -0
  65. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/OptimiseKernel.h +0 -0
  66. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/Platform.h +0 -0
  67. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/ResampleImageKernel.h +0 -0
  68. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ReadWriteImage.h +0 -0
  69. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ReadWriteMatrix.h +0 -0
  70. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin.cpp +0 -0
  71. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin.h +0 -0
  72. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin_sym.cpp +0 -0
  73. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin_sym.h +0 -0
  74. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_base.h +0 -0
  75. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_blockMatching.h +0 -0
  76. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_dti.h +0 -0
  77. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d.h +0 -0
  78. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d2.h +0 -0
  79. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d_sym.h +0 -0
  80. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_femTrans.h +0 -0
  81. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_globalTrans.h +0 -0
  82. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_kld.h +0 -0
  83. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_lncc.h +0 -0
  84. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans.h +0 -0
  85. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans_jac.h +0 -0
  86. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans_regul.h +0 -0
  87. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_macros.h +0 -0
  88. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_maths.h +0 -0
  89. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_maths_eigen.h +0 -0
  90. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_measure.h +0 -0
  91. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_mind.h +0 -0
  92. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_nmi.h +0 -0
  93. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_optimiser.cpp +0 -0
  94. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_optimiser.h +0 -0
  95. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_resampling.h +0 -0
  96. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_splineBasis.h +0 -0
  97. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ssd.h +0 -0
  98. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_stringFormat.h +0 -0
  99. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_tools.h +0 -0
  100. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/nifti1.h +0 -0
  101. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/nifti1_io.h +0 -0
  102. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/png.h +0 -0
  103. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngconf.h +0 -0
  104. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngdebug.h +0 -0
  105. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pnginfo.h +0 -0
  106. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pnglibconf.h +0 -0
  107. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngpriv.h +0 -0
  108. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngstruct.h +0 -0
  109. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/readpng.h +0 -0
  110. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/reg_png.h +0 -0
  111. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/zlib.h +0 -0
  112. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/znzlib.h +0 -0
  113. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/zutil.h +0 -0
  114. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/reg_aladin +0 -0
  115. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/reg_resample +0 -0
  116. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/rigid_reg.sh +0 -0
  117. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/transform.sh +0 -0
  118. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/registration/registrator.py +0 -0
  119. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/utils/__init__.py +0 -0
  120. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/utils/generic.py +0 -0
  121. {brainles_preprocessing-0.3.5 → brainles_preprocessing-0.3.6}/brainles_preprocessing/utils/logging_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: brainles_preprocessing
3
- Version: 0.3.5
3
+ Version: 0.3.6
4
4
  Summary: Tool for preprocessing tasks in biomedical imaging, with a focus on (but not limited to) multi-modal brain MRI
5
5
  License: Apache-2.0
6
6
  Keywords: brain tumor,glioma,BraTS,skullstripping,brain extraction
@@ -17,14 +17,12 @@ Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: 3.13
19
19
  Provides-Extra: all
20
- Provides-Extra: ereg
21
20
  Provides-Extra: itk-elastix
22
21
  Provides-Extra: picsl-greedy
23
22
  Requires-Dist: antspyx (>=0.4.2,<0.5.0)
24
23
  Requires-Dist: auxiliary (>=0.0.42)
25
24
  Requires-Dist: black (>=22.1.0,<23.0.0)
26
25
  Requires-Dist: brainles_hd_bet (>=0.0.10)
27
- Requires-Dist: ereg (>=0.0.10,<0.0.11) ; extra == "all" or extra == "ereg"
28
26
  Requires-Dist: itk-elastix (>=0.20.0,<0.21.0) ; extra == "all" or extra == "itk-elastix"
29
27
  Requires-Dist: nibabel (>=3.2.1)
30
28
  Requires-Dist: numpy (>=1.23.0,<2.0.0)
@@ -161,7 +159,7 @@ We provide a (WIP) documentation. Have a look [here](https://brainles-preprocess
161
159
  Please credit the authors by citing their work.
162
160
 
163
161
  ### Registration
164
- We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux), eReg (experimental)
162
+ We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux).
165
163
 
166
164
  ### Atlas Reference
167
165
  We provide the SRI-24 atlas from this [publication](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2915788/).
@@ -121,7 +121,7 @@ We provide a (WIP) documentation. Have a look [here](https://brainles-preprocess
121
121
  Please credit the authors by citing their work.
122
122
 
123
123
  ### Registration
124
- We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux), eReg (experimental)
124
+ We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux).
125
125
 
126
126
  ### Atlas Reference
127
127
  We provide the SRI-24 atlas from this [publication](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2915788/).
@@ -0,0 +1,25 @@
1
+ from enum import Enum, IntEnum
2
+
3
+
4
+ class PreprocessorSteps(IntEnum):
5
+ INPUT = 0
6
+ COREGISTERED = 1
7
+ ATLAS_REGISTERED = 2
8
+ ATLAS_CORRECTED = 3
9
+ BET = 4
10
+ DEFACED = 5
11
+
12
+
13
+ class Atlas(str, Enum):
14
+ BRATS_SRI24 = "brats_sri24.nii"
15
+ """Slightly modified SRI24 atlas as found in the BraTS challenges"""
16
+ BRATS_SRI24_SKULLSTRIPPED = "brats_sri24_skullstripped.nii"
17
+ """Slightly modified SRI24 skull stripped atlas as found in the BraTS challenges"""
18
+
19
+ SRI24 = "sri24.nii"
20
+ """SRI24 atlas from https://www.nitrc.org/frs/download.php/4502/sri24_anatomy_unstripped_nifti.zip"""
21
+ SRI24_SKULLSTRIPPED = "sri24_skullstripped.nii"
22
+ """SRI24 skull stripped atlas from https://www.nitrc.org/frs/download.php/4499/sri24_anatomy_nifti.zip"""
23
+
24
+ BRATS_MNI152 = "brats_MNI152lin_T1_1mm.nii.gz"
25
+ """Slightly modified MNI152 atlas as found in the BraTS challenges"""
@@ -12,8 +12,9 @@ from pathlib import Path
12
12
  from typing import List, Optional, Union
13
13
  import warnings
14
14
 
15
- from brainles_preprocessing.constants import PreprocessorSteps
15
+ from brainles_preprocessing.constants import Atlas, PreprocessorSteps
16
16
  from brainles_preprocessing.defacing import Defacer, QuickshearDefacer
17
+ from brainles_preprocessing.utils.zenodo import verify_or_download_atlases
17
18
 
18
19
  from .brain_extraction.brain_extractor import BrainExtractor, HDBetExtractor
19
20
  from .modality import Modality, CenterModality
@@ -50,7 +51,7 @@ class Preprocessor:
50
51
  registrator: Registrator = None,
51
52
  brain_extractor: Optional[BrainExtractor] = None,
52
53
  defacer: Optional[Defacer] = None,
53
- atlas_image_path: Union[str, Path] = None,
54
+ atlas_image_path: Union[str, Path, Atlas] = Atlas.BRATS_SRI24,
54
55
  temp_folder: Optional[Union[str, Path]] = None,
55
56
  use_gpu: Optional[bool] = None,
56
57
  limit_cuda_visible_devices: Optional[str] = None,
@@ -67,10 +68,9 @@ class Preprocessor:
67
68
  self.center_modality = center_modality
68
69
  self.moving_modalities = moving_modalities
69
70
 
70
- if atlas_image_path is None:
71
- self.atlas_image_path = (
72
- Path(__file__).parent / "registration" / "atlas" / "t1_brats_space.nii"
73
- )
71
+ if isinstance(atlas_image_path, Atlas):
72
+ atlas_folder = verify_or_download_atlases()
73
+ self.atlas_image_path = atlas_folder / atlas_image_path.value
74
74
  else:
75
75
  self.atlas_image_path = Path(atlas_image_path)
76
76
 
@@ -0,0 +1,27 @@
1
+ import warnings
2
+
3
+
4
+ try:
5
+ from .ANTs.ANTs import ANTsRegistrator
6
+ except ImportError:
7
+ warnings.warn(
8
+ "ANTS package not found. If you want to use it, please install it using 'pip install antspyx'"
9
+ )
10
+
11
+
12
+ from .niftyreg.niftyreg import NiftyRegRegistrator
13
+
14
+
15
+ try:
16
+ from .elastix.elastix import ElastixRegistrator
17
+ except ImportError:
18
+ warnings.warn(
19
+ "itk-elastix package not found. If you want to use it, please install it using 'pip install brainles_preprocessing[itk-elastix]'"
20
+ )
21
+
22
+ try:
23
+ from .greedy.greedy import GreedyRegistrator
24
+ except ImportError:
25
+ warnings.warn(
26
+ "picsl_greedy package not found. If you want to use it, please install it using 'pip install brainles_preprocessing[picsl_greedy]'"
27
+ )
@@ -0,0 +1,189 @@
1
+ from __future__ import annotations
2
+
3
+ import shutil
4
+ import sys
5
+ import zipfile
6
+ from io import BytesIO
7
+ from pathlib import Path
8
+ from typing import Dict, List, Tuple
9
+
10
+ import requests
11
+ from rich.progress import Progress, SpinnerColumn, TextColumn
12
+
13
+ from brainles_preprocessing.utils.logging_utils import LoggingManager
14
+
15
+
16
+ logging_man = LoggingManager(name=__name__)
17
+ logger = logging_man.get_logger()
18
+
19
+ ZENODO_RECORD_URL = "https://zenodo.org/api/records/15236131"
20
+ ATLASES_FOLDER = Path(__file__).parent.parent / "registration" / "atlases"
21
+ ATLASES_DIR_PATTERN = "atlases_v*.*.*"
22
+
23
+
24
+ def verify_or_download_atlases() -> Path:
25
+ """Check if latest atlases are present and download them otherwise.
26
+
27
+ Returns:
28
+ Path: Path to the atlases folder.
29
+ """
30
+
31
+ zenodo_data = _get_zenodo_metadata_and_archive_url()
32
+ if zenodo_data:
33
+ zenodo_metadata, archive_url = zenodo_data
34
+
35
+ matching_folders = list(ATLASES_FOLDER.glob(ATLASES_DIR_PATTERN))
36
+ # Get the latest downloaded atlases
37
+ latest_downloaded_atlases = _get_latest_version_folder_name(matching_folders)
38
+
39
+ if not latest_downloaded_atlases:
40
+ if not zenodo_data:
41
+ logger.error(
42
+ "Atlases not found locally and Zenodo could not be reached. Exiting..."
43
+ )
44
+ sys.exit()
45
+ logger.info(f"Atlases not found locally")
46
+
47
+ return _download_atlases(
48
+ zenodo_metadata=zenodo_metadata,
49
+ archive_url=archive_url,
50
+ )
51
+
52
+ logger.info(f"Found downloaded local atlases: {latest_downloaded_atlases}")
53
+
54
+ if not zenodo_metadata:
55
+ logger.warning(
56
+ "Zenodo server could not be reached. Using the latest downloaded atlases."
57
+ )
58
+ return ATLASES_FOLDER / latest_downloaded_atlases
59
+
60
+ # Compare the latest downloaded atlases with the latest Zenodo version
61
+ if zenodo_metadata["version"] == latest_downloaded_atlases.split("_v")[1]:
62
+ logger.info(
63
+ f"Latest atlases ({zenodo_metadata['version']}) are already present."
64
+ )
65
+ return ATLASES_FOLDER / latest_downloaded_atlases
66
+
67
+ logger.info(
68
+ f"New atlases available on Zenodo ({zenodo_metadata['version']}). Deleting old and fetching new atlases..."
69
+ )
70
+ # delete old atlases
71
+ try:
72
+ shutil.rmtree(
73
+ ATLASES_FOLDER / latest_downloaded_atlases,
74
+ )
75
+ except OSError as e:
76
+ logger.warning(f"Failed to delete old atlases: {e}")
77
+ return _download_atlases(zenodo_metadata=zenodo_metadata, archive_url=archive_url)
78
+
79
+
80
+ def _get_latest_version_folder_name(folders: List[Path]) -> str | None:
81
+ """Get the latest (non empty) version folder name from the list of folders.
82
+
83
+ Args:
84
+ folders (List[Path]): List of folders matching the pattern.
85
+
86
+ Returns:
87
+ str | None: Latest version folder name if one exists, else None.
88
+ """
89
+ if not folders:
90
+ return None
91
+ latest_downloaded_folder = sorted(
92
+ folders,
93
+ reverse=True,
94
+ key=lambda x: tuple(map(int, str(x).split("_v")[1].split("."))),
95
+ )[0]
96
+ # check folder is not empty
97
+ if not list(latest_downloaded_folder.glob("*")):
98
+ return None
99
+ return latest_downloaded_folder.name
100
+
101
+
102
+ def _get_zenodo_metadata_and_archive_url() -> Tuple[Dict, str] | None:
103
+ """Get the metadata for the Zenodo record and the files archive url.
104
+
105
+ Returns:
106
+ Tuple: (dict: Metadata for the Zenodo record, str: URL to the archive file)
107
+ """
108
+ try:
109
+ response = requests.get(f"{ZENODO_RECORD_URL}")
110
+ if response.status_code != 200:
111
+ logger.error(
112
+ f"Cant find atlases on Zenodo ({ZENODO_RECORD_URL}). Exiting..."
113
+ )
114
+ return None
115
+ data = response.json()
116
+ return data["metadata"], data["links"]["archive"]
117
+
118
+ except requests.exceptions.RequestException as e:
119
+ logger.warning(f"Failed to fetch Zenodo metadata: {e}")
120
+ return None
121
+
122
+
123
+ def _download_atlases(zenodo_metadata: Dict, archive_url: str) -> Path:
124
+ """Download the latest atlases from Zenodo for the requested record and extract them to the target folder.
125
+
126
+ Args:
127
+ zenodo_metadata (Dict): Metadata for the Zenodo record.
128
+ archive_url (str): URL to the archive file.
129
+
130
+ Returns:
131
+ Path: Path to the atlases folder for the requested record.
132
+ """
133
+ record_folder = ATLASES_FOLDER / f"atlases_v{zenodo_metadata['version']}"
134
+ # ensure folder exists
135
+ record_folder.mkdir(parents=True, exist_ok=True)
136
+
137
+ logger.info(f"Downloading atlases from Zenodo. This might take a while...")
138
+ # Make a GET request to the URL
139
+ response = requests.get(archive_url, stream=True)
140
+ # Ensure the request was successful
141
+ if response.status_code != 200:
142
+ raise RuntimeError(
143
+ f"Failed to download atlases from {archive_url}. Status code: {response.status_code}"
144
+ )
145
+
146
+ _extract_archive(response=response, record_folder=record_folder)
147
+
148
+ logger.info(f"Zip file extracted successfully to {record_folder}")
149
+ return record_folder
150
+
151
+
152
+ def _extract_archive(response: requests.Response, record_folder: Path):
153
+ # Download with progress bar
154
+ chunk_size = 1024 # 1KB
155
+ bytes_io = BytesIO()
156
+
157
+ with Progress(
158
+ SpinnerColumn(),
159
+ TextColumn("[cyan]Downloading atlases..."),
160
+ TextColumn("[cyan]{task.completed:.2f} MB"),
161
+ transient=True,
162
+ ) as progress:
163
+ task = progress.add_task("", total=None) # Indeterminate progress
164
+
165
+ for data in response.iter_content(chunk_size=chunk_size):
166
+ bytes_io.write(data)
167
+ progress.update(
168
+ task, advance=len(data) / (chunk_size**2)
169
+ ) # Convert bytes to MB
170
+
171
+ # Extract the downloaded zip file to the target folder
172
+ with zipfile.ZipFile(bytes_io) as zip_ref:
173
+ zip_ref.extractall(record_folder)
174
+
175
+ # check if the extracted file is still a zip
176
+ for f in record_folder.iterdir():
177
+ if f.is_file() and f.suffix == ".zip":
178
+ with zipfile.ZipFile(f) as zip_ref:
179
+ files = zip_ref.namelist()
180
+ with Progress(transient=True) as progress:
181
+ task = progress.add_task(
182
+ "[cyan]Extracting files...", total=len(files)
183
+ )
184
+ # Iterate over the files and extract them
185
+ for i, file in enumerate(files):
186
+ zip_ref.extract(file, record_folder)
187
+ # Update the progress bar
188
+ progress.update(task, completed=i + 1)
189
+ f.unlink() # remove zip after extraction
@@ -14,7 +14,7 @@ exclude = [
14
14
  ]
15
15
 
16
16
  name = "brainles_preprocessing"
17
- version = "0.3.5" # will be overwritten by poetry-dynamic-versioning but needs to be set
17
+ version = "0.3.6" # will be overwritten by poetry-dynamic-versioning but needs to be set
18
18
  description = "Tool for preprocessing tasks in biomedical imaging, with a focus on (but not limited to) multi-modal brain MRI"
19
19
  license = "Apache-2.0"
20
20
 
@@ -69,14 +69,12 @@ auxiliary = ">=0.0.42"
69
69
  rich = "^13.6.0"
70
70
 
71
71
  # optional registration backends
72
- ereg = { version = "^0.0.10", optional = true }
73
72
  itk-elastix = { version = "^0.20.0", optional = true }
74
73
  picsl_greedy = { version = "^0.0.6", optional = true }
75
74
 
76
75
 
77
76
  [tool.poetry.extras]
78
- all = ["ereg", "itk-elastix", "picsl_greedy"]
79
- ereg = ["ereg"]
77
+ all = ["itk-elastix", "picsl_greedy"]
80
78
  itk-elastix = ["itk-elastix"]
81
79
  picsl_greedy = ["picsl_greedy"]
82
80
 
@@ -1,10 +0,0 @@
1
- from enum import IntEnum
2
-
3
-
4
- class PreprocessorSteps(IntEnum):
5
- INPUT = 0
6
- COREGISTERED = 1
7
- ATLAS_REGISTERED = 2
8
- ATLAS_CORRECTED = 3
9
- BET = 4
10
- DEFACED = 5
@@ -1,23 +0,0 @@
1
- import warnings
2
-
3
-
4
- try:
5
- from .ANTs.ANTs import ANTsRegistrator
6
- except ImportError:
7
- warnings.warn(
8
- "ANTS package not found. If you want to use it, please install it using 'pip install antspyx'"
9
- )
10
-
11
- try:
12
- from .eReg.eReg import eRegRegistrator
13
- except ImportError:
14
- warnings.warn(
15
- "eReg package not found. If you want to use it, please install it using 'pip install brainles_preprocessing[ereg]'"
16
- )
17
-
18
-
19
- from .niftyreg.niftyreg import NiftyRegRegistrator
20
-
21
- from .elastix.elastix import ElastixRegistrator
22
-
23
- from .greedy.greedy import GreedyRegistrator
@@ -1,11 +0,0 @@
1
- Copyright (C) 1993-2004 Louis Collins, McConnell Brain
2
- Imaging Centre, Montreal Neurological Institute, McGill University.
3
- Permission to use, copy, modify, and distribute this software and
4
- its documentation for any purpose and without fee is hereby granted,
5
- provided that the above copyright notice appear in all copies. The
6
- authors and McGill University make no representations about the
7
- suitability of this software for any purpose. It is provided "as
8
- is" without express or implied warranty. The authors are not
9
- responsible for any data loss, equipment damage, property loss, or
10
- injury to subjects or patients resulting from the use or misuse of
11
- this software package.
@@ -1,100 +0,0 @@
1
- # TODO add typing and docs
2
- import os
3
-
4
- from ereg.registration import RegistrationClass
5
-
6
- from brainles_preprocessing.registration.registrator import Registrator
7
-
8
-
9
- class eRegRegistrator(Registrator):
10
- def __init__(
11
- self,
12
- # TODO define default
13
- configuration_file: str | None = None,
14
- ):
15
- """
16
- # TODO
17
- """
18
- self.configuration_file = configuration_file
19
-
20
- def register(
21
- self,
22
- fixed_image_path: str,
23
- moving_image_path: str,
24
- transformed_image_path: str,
25
- matrix_path: str,
26
- log_file_path: str = None,
27
- ) -> None:
28
- """
29
- Register images using eReg.
30
-
31
- Args:
32
- fixed_image_path (str): Path to the fixed image.
33
- moving_image_path (str): Path to the moving image.
34
- transformed_image_path (str): Path to the transformed image (output).
35
- matrix_path (str): Path to the transformation matrix (output).
36
- log_file_path (str): Path to the log file.
37
- """
38
- # TODO do we need to handle kwargs?
39
- registrator = RegistrationClass(
40
- configuration_file=self.configuration_file,
41
- )
42
-
43
- matrix_path = _add_mat_suffix(matrix_path)
44
-
45
- registrator.register(
46
- target_image=fixed_image_path,
47
- moving_image=moving_image_path,
48
- output_image=transformed_image_path,
49
- transform_file=matrix_path,
50
- log_file=log_file_path,
51
- )
52
-
53
- def transform(
54
- self,
55
- fixed_image_path: str,
56
- moving_image_path: str,
57
- transformed_image_path: str,
58
- matrix_path: str,
59
- log_file_path: str = None,
60
- ) -> None:
61
- """
62
- Apply a transformation using eReg.
63
-
64
- Args:
65
- fixed_image_path (str): Path to the fixed image.
66
- moving_image_path (str): Path to the moving image.
67
- transformed_image_path (str): Path to the transformed image (output).
68
- matrix_path (str): Path to the transformation matrix.
69
- log_file_path (str): Path to the log file.
70
- """
71
- # TODO do we need to handle kwargs?
72
- registrator = RegistrationClass(
73
- configuration_file=self.configuration_file,
74
- )
75
-
76
- matrix_path = _add_mat_suffix(matrix_path)
77
-
78
- registrator.resample_image(
79
- target_image=fixed_image_path,
80
- moving_image=moving_image_path,
81
- output_image=transformed_image_path,
82
- transform_file=matrix_path,
83
- log_file=log_file_path,
84
- )
85
-
86
-
87
- def _add_mat_suffix(filename: str) -> str:
88
- """
89
- Adds a ".mat" suffix to the filename if it doesn't have any extension.
90
-
91
- Parameters:
92
- filename (str): The filename to check and potentially modify.
93
-
94
- Returns:
95
- str: The filename with ".mat" suffix added if needed.
96
- """
97
- base, ext = os.path.splitext(filename)
98
- if not ext:
99
- filename += ".mat"
100
- return filename