brainles-preprocessing 0.6.0__tar.gz → 0.6.1__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 (122) hide show
  1. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/PKG-INFO +11 -4
  2. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/README.md +9 -3
  3. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/modality.py +1 -2
  4. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/preprocessor/atlas_centric_preprocessor.py +89 -86
  5. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/preprocessor/native_space_preprocessor.py +75 -73
  6. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/preprocessor/preprocessor.py +25 -19
  7. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/transform.py +2 -4
  8. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/utils/zenodo.py +1 -6
  9. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/pyproject.toml +2 -1
  10. brainles_preprocessing-0.6.0/brainles_preprocessing/utils/logging_utils.py +0 -131
  11. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/LICENSE +0 -0
  12. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/__init__.py +0 -0
  13. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/brain_extraction/__init__.py +0 -0
  14. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/brain_extraction/brain_extractor.py +0 -0
  15. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/brats/__init__.py +0 -0
  16. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/brats/t1_centric.py +0 -0
  17. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/brats/t1c_centric.py +0 -0
  18. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/cli.py +0 -0
  19. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/constants.py +0 -0
  20. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/defacing/__init__.py +0 -0
  21. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/defacing/defacer.py +0 -0
  22. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/defacing/quickshear/__init__.py +0 -0
  23. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/defacing/quickshear/nipy_quickshear.py +0 -0
  24. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/defacing/quickshear/quickshear.py +0 -0
  25. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/n4_bias_correction/__init__.py +0 -0
  26. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/n4_bias_correction/n4_bias_corrector.py +0 -0
  27. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/n4_bias_correction/sitk/__init__.py +0 -0
  28. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/n4_bias_correction/sitk/sitk_n4_bias_corrector.py +0 -0
  29. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/normalization/__init__.py +0 -0
  30. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/normalization/normalizer_base.py +0 -0
  31. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/normalization/percentile_normalizer.py +0 -0
  32. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/normalization/windowing_normalizer.py +0 -0
  33. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/preprocessor/__init__.py +0 -0
  34. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/ANTs/ANTs.py +0 -0
  35. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/ANTs/TODO_ANTs_parameters.py +0 -0
  36. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/ANTs/__init__.py +0 -0
  37. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/__init__.py +0 -0
  38. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/elastix/__init__.py +0 -0
  39. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/elastix/elastix.py +0 -0
  40. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/greedy/__init__.py +0 -0
  41. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/greedy/greedy.py +0 -0
  42. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/__init__.py +0 -0
  43. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg.py +0 -0
  44. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/groupwise_niftyreg_params.sh +0 -0
  45. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/groupwise_niftyreg_run.sh +0 -0
  46. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_aladin +0 -0
  47. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_average +0 -0
  48. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_f3d +0 -0
  49. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_jacobian +0 -0
  50. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_measure +0 -0
  51. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_resample +0 -0
  52. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_tools +0 -0
  53. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/bin/reg_transform +0 -0
  54. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/AffineDeformationFieldKernel.h +0 -0
  55. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/AladinContent.h +0 -0
  56. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/BlockMatchingKernel.h +0 -0
  57. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUAffineDeformationFieldKernel.h +0 -0
  58. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUBlockMatchingKernel.h +0 -0
  59. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUConvolutionKernel.h +0 -0
  60. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUKernelFactory.h +0 -0
  61. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUOptimiseKernel.h +0 -0
  62. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/CPUResampleImageKernel.h +0 -0
  63. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/ConvolutionKernel.h +0 -0
  64. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/Kernel.h +0 -0
  65. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/KernelFactory.h +0 -0
  66. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/OptimiseKernel.h +0 -0
  67. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/Platform.h +0 -0
  68. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/ResampleImageKernel.h +0 -0
  69. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ReadWriteImage.h +0 -0
  70. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ReadWriteMatrix.h +0 -0
  71. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin.cpp +0 -0
  72. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin.h +0 -0
  73. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin_sym.cpp +0 -0
  74. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_aladin_sym.h +0 -0
  75. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_base.h +0 -0
  76. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_blockMatching.h +0 -0
  77. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_dti.h +0 -0
  78. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d.h +0 -0
  79. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d2.h +0 -0
  80. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_f3d_sym.h +0 -0
  81. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_femTrans.h +0 -0
  82. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_globalTrans.h +0 -0
  83. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_kld.h +0 -0
  84. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_lncc.h +0 -0
  85. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans.h +0 -0
  86. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans_jac.h +0 -0
  87. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_localTrans_regul.h +0 -0
  88. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_macros.h +0 -0
  89. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_maths.h +0 -0
  90. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_maths_eigen.h +0 -0
  91. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_measure.h +0 -0
  92. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_mind.h +0 -0
  93. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_nmi.h +0 -0
  94. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_optimiser.cpp +0 -0
  95. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_optimiser.h +0 -0
  96. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_resampling.h +0 -0
  97. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_splineBasis.h +0 -0
  98. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_ssd.h +0 -0
  99. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_stringFormat.h +0 -0
  100. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/_reg_tools.h +0 -0
  101. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/nifti1.h +0 -0
  102. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/nifti1_io.h +0 -0
  103. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/png.h +0 -0
  104. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngconf.h +0 -0
  105. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngdebug.h +0 -0
  106. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pnginfo.h +0 -0
  107. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pnglibconf.h +0 -0
  108. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngpriv.h +0 -0
  109. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/pngstruct.h +0 -0
  110. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/readpng.h +0 -0
  111. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/reg_png.h +0 -0
  112. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/zlib.h +0 -0
  113. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/znzlib.h +0 -0
  114. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/niftyreg_1.5.68/include/zutil.h +0 -0
  115. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/reg_aladin +0 -0
  116. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/reg_resample +0 -0
  117. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/rigid_reg.sh +0 -0
  118. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/niftyreg/niftyreg_scripts/transform.sh +0 -0
  119. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/registration/registrator.py +0 -0
  120. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/utils/__init__.py +0 -0
  121. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/utils/citation_reminder.py +0 -0
  122. {brainles_preprocessing-0.6.0 → brainles_preprocessing-0.6.1}/brainles_preprocessing/utils/generic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: brainles_preprocessing
3
- Version: 0.6.0
3
+ Version: 0.6.1
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
@@ -23,6 +23,7 @@ Requires-Dist: antspyx (>=0.5.4,<1.0.0)
23
23
  Requires-Dist: auxiliary (>=0.3.1)
24
24
  Requires-Dist: brainles_hd_bet (>=0.0.10,<1.0.0)
25
25
  Requires-Dist: itk-elastix (>=0.20.0,<0.21.0) ; extra == "all" or extra == "itk-elastix"
26
+ Requires-Dist: loguru (>=0.7.3,<0.8.0)
26
27
  Requires-Dist: nibabel (>=3.2.1)
27
28
  Requires-Dist: numpy (>=1.23.0,<2.0.0)
28
29
  Requires-Dist: pathlib (>=1.0.1,<2.0.0)
@@ -176,11 +177,17 @@ We provide a (WIP) documentation. Have a look [here](https://brainles-preprocess
176
177
  Please credit the authors by citing their work.
177
178
 
178
179
  ### Registration
179
- We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux).
180
+ We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux). We also offer basic support for [greedy](https://greedy.readthedocs.io/en/latest/reference.html#greedy-usage) and [elastix](https://pypi.org/project/itk-elastix/0.13.0/).
180
181
 
181
182
  ### Atlas Reference
182
- We provide the SRI-24 atlas from this [publication](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2915788/).
183
- However, custom atlases in NIfTI format are supported.
183
+ We provide a range of different atlases, namely:
184
+ - [SRI24](https://www.nitrc.org/frs/download.php/4502/sri24_anatomy_unstripped_nifti.zip) and its [skull-stripped version](https://www.nitrc.org/frs/download.php/4499/sri24_anatomy_nifti.zip)
185
+ - A slightly modified SRI24 atlas as found in the BraTS challenges (also with a skull-stripped version)
186
+ - MNI152: [MNI_ICBM_2009c_Nonlinear_Symmetric](https://nist.mni.mcgill.ca/icbm-152-nonlinear-atlases-2009/)
187
+ - A slightly modified MNI152 atlas as found in the BraTS challenge
188
+
189
+ We also support supplying a custom atlas in NIfTI format
190
+
184
191
 
185
192
  ### N4 Bias correction
186
193
  We currently provide support for N4 Bias correction based on [SimpleITK](https://simpleitk.org/)
@@ -138,11 +138,17 @@ We provide a (WIP) documentation. Have a look [here](https://brainles-preprocess
138
138
  Please credit the authors by citing their work.
139
139
 
140
140
  ### Registration
141
- We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux).
141
+ We currently provide support for [ANTs](https://github.com/ANTsX/ANTs) (default), [Niftyreg](https://github.com/KCL-BMEIS/niftyreg) (Linux). We also offer basic support for [greedy](https://greedy.readthedocs.io/en/latest/reference.html#greedy-usage) and [elastix](https://pypi.org/project/itk-elastix/0.13.0/).
142
142
 
143
143
  ### Atlas Reference
144
- We provide the SRI-24 atlas from this [publication](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2915788/).
145
- However, custom atlases in NIfTI format are supported.
144
+ We provide a range of different atlases, namely:
145
+ - [SRI24](https://www.nitrc.org/frs/download.php/4502/sri24_anatomy_unstripped_nifti.zip) and its [skull-stripped version](https://www.nitrc.org/frs/download.php/4499/sri24_anatomy_nifti.zip)
146
+ - A slightly modified SRI24 atlas as found in the BraTS challenges (also with a skull-stripped version)
147
+ - MNI152: [MNI_ICBM_2009c_Nonlinear_Symmetric](https://nist.mni.mcgill.ca/icbm-152-nonlinear-atlases-2009/)
148
+ - A slightly modified MNI152 atlas as found in the BraTS challenge
149
+
150
+ We also support supplying a custom atlas in NIfTI format
151
+
146
152
 
147
153
  ### N4 Bias correction
148
154
  We currently provide support for N4 Bias correction based on [SimpleITK](https://simpleitk.org/)
@@ -5,6 +5,7 @@ from pathlib import Path
5
5
  from typing import Dict, Optional, Union
6
6
 
7
7
  from auxiliary.io import read_image, write_image
8
+ from loguru import logger
8
9
 
9
10
  from brainles_preprocessing.brain_extraction.brain_extractor import BrainExtractor
10
11
  from brainles_preprocessing.constants import Atlas, PreprocessorSteps
@@ -17,8 +18,6 @@ from brainles_preprocessing.registration import ( # TODO: this will throw warni
17
18
  from brainles_preprocessing.registration.registrator import Registrator
18
19
  from brainles_preprocessing.utils.zenodo import verify_or_download_atlases
19
20
 
20
- logger = logging.getLogger(__name__)
21
-
22
21
 
23
22
  class Modality:
24
23
  """
@@ -2,6 +2,8 @@ import shutil
2
2
  from pathlib import Path
3
3
  from typing import List, Optional, Union
4
4
 
5
+ from loguru import logger
6
+
5
7
  from brainles_preprocessing.brain_extraction.brain_extractor import BrainExtractor
6
8
  from brainles_preprocessing.constants import Atlas, PreprocessorSteps
7
9
  from brainles_preprocessing.defacing import Defacer, QuickshearDefacer
@@ -9,12 +11,8 @@ from brainles_preprocessing.modality import CenterModality, Modality
9
11
  from brainles_preprocessing.n4_bias_correction import N4BiasCorrector
10
12
  from brainles_preprocessing.preprocessor.preprocessor import BasePreprocessor
11
13
  from brainles_preprocessing.registration.registrator import Registrator
12
- from brainles_preprocessing.utils.logging_utils import LoggingManager
13
14
  from brainles_preprocessing.utils.zenodo import verify_or_download_atlases
14
15
 
15
- logging_man = LoggingManager(name=__name__)
16
- logger = logging_man.get_logger()
17
-
18
16
 
19
17
  class AtlasCentricPreprocessor(BasePreprocessor):
20
18
  """
@@ -101,97 +99,102 @@ class AtlasCentricPreprocessor(BasePreprocessor):
101
99
  Results are saved in the specified directories, allowing for modular and configurable output storage.
102
100
  """
103
101
 
104
- logging_man._set_log_file(log_file)
105
- logger.info(f"{' Starting preprocessing ':=^80}")
106
- logger.info(f"Logs are saved to {logging_man.log_file_handler.baseFilename}")
107
- modality_names = ", ".join(
108
- [modality.modality_name for modality in self.moving_modalities]
109
- )
110
- logger.info(
111
- f"Received center modality: {self.center_modality.modality_name} "
112
- f"and moving modalities: {modality_names}"
113
- )
114
-
115
- # Co-register moving modalities to center modality
116
- logger.info(f"{' Starting Coregistration ':-^80}")
117
- self.run_coregistration(
118
- save_dir_coregistration=save_dir_coregistration,
119
- )
120
- logger.info(
121
- f"Coregistration complete. Output saved to {save_dir_coregistration}"
122
- )
123
-
124
- # Register center modality to atlas
125
- logger.info(f"{' Starting atlas registration ':-^80}")
126
- self.run_atlas_registration(
127
- save_dir_atlas_registration=save_dir_atlas_registration,
128
- )
129
- logger.info(
130
- f"Transformations complete. Output saved to {save_dir_atlas_registration}"
131
- )
102
+ logger_id = self._add_log_file_handler(log_file)
103
+ try:
104
+ logger.info(f"{' Starting preprocessing ':=^80}")
105
+ modality_names = ", ".join(
106
+ [modality.modality_name for modality in self.moving_modalities]
107
+ )
108
+ logger.info(
109
+ f"Received center modality: {self.center_modality.modality_name} "
110
+ f"and moving modalities: {modality_names}"
111
+ )
132
112
 
133
- # Optional: additional correction in atlas space
134
- logger.info(f"{' Checking optional atlas correction ':-^80}")
135
- self.run_atlas_correction(
136
- save_dir_atlas_correction=save_dir_atlas_correction,
137
- )
113
+ # Co-register moving modalities to center modality
114
+ logger.info(f"{' Starting Coregistration ':-^80}")
115
+ self.run_coregistration(
116
+ save_dir_coregistration=save_dir_coregistration,
117
+ )
118
+ logger.info(
119
+ f"Coregistration complete. Output saved to {save_dir_coregistration}"
120
+ )
138
121
 
139
- # Optional: N4 bias correction
140
- logger.info(f"{' Checking optional N4 bias correction ':-^80}")
141
- self.run_n4_bias_correction(
142
- save_dir_n4_bias_correction=save_dir_n4_bias_correction,
143
- )
122
+ # Register center modality to atlas
123
+ logger.info(f"{' Starting atlas registration ':-^80}")
124
+ self.run_atlas_registration(
125
+ save_dir_atlas_registration=save_dir_atlas_registration,
126
+ )
127
+ logger.info(
128
+ f"Transformations complete. Output saved to {save_dir_atlas_registration}"
129
+ )
144
130
 
145
- # Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
146
- logger.info("Saving non skull-stripped images...")
147
- for modality in self.all_modalities:
148
- if modality.raw_skull_output_path:
149
- modality.save_current_image(
150
- modality.raw_skull_output_path,
151
- normalization=False,
152
- )
153
- if modality.normalized_skull_output_path:
154
- modality.save_current_image(
155
- modality.normalized_skull_output_path,
156
- normalization=True,
157
- )
131
+ # Optional: additional correction in atlas space
132
+ logger.info(f"{' Checking optional atlas correction ':-^80}")
133
+ self.run_atlas_correction(
134
+ save_dir_atlas_correction=save_dir_atlas_correction,
135
+ )
158
136
 
159
- # Optional: Brain extraction
160
- logger.info(f"{' Checking optional brain extraction ':-^80}")
161
- self.run_brain_extraction(
162
- save_dir_brain_extraction=save_dir_brain_extraction,
163
- )
137
+ # Optional: N4 bias correction
138
+ logger.info(f"{' Checking optional N4 bias correction ':-^80}")
139
+ self.run_n4_bias_correction(
140
+ save_dir_n4_bias_correction=save_dir_n4_bias_correction,
141
+ )
164
142
 
165
- # Defacing
166
- logger.info(f"{' Checking optional defacing ':-^80}")
167
- self.run_defacing(
168
- save_dir_defacing=save_dir_defacing,
169
- )
143
+ # Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
144
+ logger.info("Saving non skull-stripped images...")
145
+ for modality in self.all_modalities:
146
+ if modality.raw_skull_output_path:
147
+ modality.save_current_image(
148
+ modality.raw_skull_output_path,
149
+ normalization=False,
150
+ )
151
+ if modality.normalized_skull_output_path:
152
+ modality.save_current_image(
153
+ modality.normalized_skull_output_path,
154
+ normalization=True,
155
+ )
156
+
157
+ # Optional: Brain extraction
158
+ logger.info(f"{' Checking optional brain extraction ':-^80}")
159
+ self.run_brain_extraction(
160
+ save_dir_brain_extraction=save_dir_brain_extraction,
161
+ )
170
162
 
171
- # move to separate method
172
- if save_dir_transformations:
173
- save_dir_transformations = Path(save_dir_transformations)
163
+ # Defacing
164
+ logger.info(f"{' Checking optional defacing ':-^80}")
165
+ self.run_defacing(
166
+ save_dir_defacing=save_dir_defacing,
167
+ )
174
168
 
175
- # Save transformation matrices
176
- logger.info(f"Saving transformation matrices to {save_dir_transformations}")
177
- for modality in self.all_modalities:
169
+ # move to separate method
170
+ if save_dir_transformations:
171
+ save_dir_transformations = Path(save_dir_transformations)
178
172
 
179
- modality_transformations_dir = (
180
- save_dir_transformations / modality.modality_name
173
+ # Save transformation matrices
174
+ logger.info(
175
+ f"Saving transformation matrices to {save_dir_transformations}"
181
176
  )
182
- modality_transformations_dir.mkdir(exist_ok=True, parents=True)
183
- for step, path in modality.transformation_paths.items():
184
- if path is not None:
185
- shutil.copyfile(
186
- src=str(path.absolute()),
187
- dst=str(
188
- modality_transformations_dir
189
- / f"{step.value}_{path.name}"
190
- ),
191
- )
192
-
193
- # End
194
- logger.info(f"{' Preprocessing complete ':=^80}")
177
+ for modality in self.all_modalities:
178
+
179
+ modality_transformations_dir = (
180
+ save_dir_transformations / modality.modality_name
181
+ )
182
+ modality_transformations_dir.mkdir(exist_ok=True, parents=True)
183
+ for step, path in modality.transformation_paths.items():
184
+ if path is not None:
185
+ shutil.copyfile(
186
+ src=str(path.absolute()),
187
+ dst=str(
188
+ modality_transformations_dir
189
+ / f"{step.value}_{path.name}"
190
+ ),
191
+ )
192
+
193
+ # End
194
+ logger.info(f"{' Preprocessing complete ':=^80}")
195
+ finally:
196
+ # Remove log file handler if it was added
197
+ logger.remove(logger_id)
195
198
 
196
199
  def run_atlas_registration(
197
200
  self, save_dir_atlas_registration: Optional[Union[str, Path]] = None
@@ -2,12 +2,10 @@ import shutil
2
2
  from pathlib import Path
3
3
  from typing import Optional, Union
4
4
 
5
+ from loguru import logger
6
+
5
7
  from brainles_preprocessing.defacing import QuickshearDefacer
6
8
  from brainles_preprocessing.preprocessor.preprocessor import BasePreprocessor
7
- from brainles_preprocessing.utils.logging_utils import LoggingManager
8
-
9
- logging_man = LoggingManager(name=__name__)
10
- logger = logging_man.get_logger()
11
9
 
12
10
 
13
11
  class NativeSpacePreprocessor(BasePreprocessor):
@@ -57,81 +55,85 @@ class NativeSpacePreprocessor(BasePreprocessor):
57
55
  Results are saved in the specified directories, allowing for modular and configurable output storage.
58
56
  """
59
57
 
60
- logging_man._set_log_file(log_file)
61
- logger.info(f"{' Starting preprocessing ':=^80}")
62
- logger.info(f"Logs are saved to {logging_man.log_file_handler.baseFilename}")
63
- modality_names = ", ".join(
64
- [modality.modality_name for modality in self.moving_modalities]
65
- )
66
- logger.info(
67
- f"Received center modality: {self.center_modality.modality_name} "
68
- f"and moving modalities: {modality_names}"
69
- )
70
-
71
- # Co-register moving modalities to center modality
72
- logger.info(f"{' Starting Coregistration ':-^80}")
73
- self.run_coregistration(
74
- save_dir_coregistration=save_dir_coregistration,
75
- )
76
- logger.info(
77
- f"Coregistration complete. Output saved to {save_dir_coregistration}"
78
- )
79
- # Optional: N4 bias correction
80
- logger.info(f"{' Checking optional N4 bias correction ':-^80}")
81
- self.run_n4_bias_correction(
82
- save_dir_n4_bias_correction=save_dir_n4_bias_correction,
83
- )
84
-
85
- # Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
86
- logger.info("Saving non skull-stripped images...")
87
- for modality in self.all_modalities:
88
- if modality.raw_skull_output_path:
89
- modality.save_current_image(
90
- modality.raw_skull_output_path,
91
- normalization=False,
92
- )
93
- if modality.normalized_skull_output_path:
94
- modality.save_current_image(
95
- modality.normalized_skull_output_path,
96
- normalization=True,
97
- )
58
+ logger_id = self._add_log_file_handler(log_file)
59
+ try:
60
+ logger.info(f"{' Starting preprocessing ':=^80}")
61
+ modality_names = ", ".join(
62
+ [modality.modality_name for modality in self.moving_modalities]
63
+ )
64
+ logger.info(
65
+ f"Received center modality: {self.center_modality.modality_name} "
66
+ f"and moving modalities: {modality_names}"
67
+ )
98
68
 
99
- # Optional: Brain extraction
100
- logger.info(f"{' Checking optional brain extraction ':-^80}")
101
- self.run_brain_extraction(
102
- save_dir_brain_extraction=save_dir_brain_extraction,
103
- )
69
+ # Co-register moving modalities to center modality
70
+ logger.info(f"{' Starting Coregistration ':-^80}")
71
+ self.run_coregistration(
72
+ save_dir_coregistration=save_dir_coregistration,
73
+ )
74
+ logger.info(
75
+ f"Coregistration complete. Output saved to {save_dir_coregistration}"
76
+ )
77
+ # Optional: N4 bias correction
78
+ logger.info(f"{' Checking optional N4 bias correction ':-^80}")
79
+ self.run_n4_bias_correction(
80
+ save_dir_n4_bias_correction=save_dir_n4_bias_correction,
81
+ )
104
82
 
105
- # Defacing
106
- logger.info(f"{' Checking optional defacing ':-^80}")
107
- self.run_defacing(
108
- save_dir_defacing=save_dir_defacing,
109
- )
83
+ # Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
84
+ logger.info("Saving non skull-stripped images...")
85
+ for modality in self.all_modalities:
86
+ if modality.raw_skull_output_path:
87
+ modality.save_current_image(
88
+ modality.raw_skull_output_path,
89
+ normalization=False,
90
+ )
91
+ if modality.normalized_skull_output_path:
92
+ modality.save_current_image(
93
+ modality.normalized_skull_output_path,
94
+ normalization=True,
95
+ )
96
+
97
+ # Optional: Brain extraction
98
+ logger.info(f"{' Checking optional brain extraction ':-^80}")
99
+ self.run_brain_extraction(
100
+ save_dir_brain_extraction=save_dir_brain_extraction,
101
+ )
110
102
 
111
- # move to separate method
112
- if save_dir_transformations:
113
- save_dir_transformations = Path(save_dir_transformations)
103
+ # Defacing
104
+ logger.info(f"{' Checking optional defacing ':-^80}")
105
+ self.run_defacing(
106
+ save_dir_defacing=save_dir_defacing,
107
+ )
114
108
 
115
- # Save transformation matrices
116
- logger.info(f"Saving transformation matrices to {save_dir_transformations}")
117
- for modality in self.all_modalities:
109
+ # move to separate method
110
+ if save_dir_transformations:
111
+ save_dir_transformations = Path(save_dir_transformations)
118
112
 
119
- modality_transformations_dir = (
120
- save_dir_transformations / modality.modality_name
113
+ # Save transformation matrices
114
+ logger.info(
115
+ f"Saving transformation matrices to {save_dir_transformations}"
121
116
  )
122
- modality_transformations_dir.mkdir(exist_ok=True, parents=True)
123
- for step, path in modality.transformation_paths.items():
124
- if path is not None:
125
- shutil.copyfile(
126
- src=str(path.absolute()),
127
- dst=str(
128
- modality_transformations_dir
129
- / f"{step.value}_{path.name}"
130
- ),
131
- )
132
-
133
- # End
134
- logger.info(f"{' Preprocessing complete ':=^80}")
117
+ for modality in self.all_modalities:
118
+
119
+ modality_transformations_dir = (
120
+ save_dir_transformations / modality.modality_name
121
+ )
122
+ modality_transformations_dir.mkdir(exist_ok=True, parents=True)
123
+ for step, path in modality.transformation_paths.items():
124
+ if path is not None:
125
+ shutil.copyfile(
126
+ src=str(path.absolute()),
127
+ dst=str(
128
+ modality_transformations_dir
129
+ / f"{step.value}_{path.name}"
130
+ ),
131
+ )
132
+
133
+ # End
134
+ logger.info(f"{' Preprocessing complete ':=^80}")
135
+ finally:
136
+ logger.remove(logger_id)
135
137
 
136
138
  def run_defacing(
137
139
  self, save_dir_defacing: Optional[Union[str, Path]] = None
@@ -5,10 +5,12 @@ import tempfile
5
5
  import warnings
6
6
  from abc import ABC, abstractmethod
7
7
  from collections import Counter
8
- from functools import wraps
8
+ from datetime import datetime
9
9
  from pathlib import Path
10
10
  from typing import List, Optional, Union
11
11
 
12
+ from loguru import logger
13
+
12
14
  from brainles_preprocessing.brain_extraction.brain_extractor import (
13
15
  BrainExtractor,
14
16
  HDBetExtractor,
@@ -23,10 +25,6 @@ from brainles_preprocessing.n4_bias_correction import (
23
25
  from brainles_preprocessing.registration import ANTsRegistrator
24
26
  from brainles_preprocessing.registration.registrator import Registrator
25
27
  from brainles_preprocessing.utils.citation_reminder import citation_reminder
26
- from brainles_preprocessing.utils.logging_utils import LoggingManager
27
-
28
- logging_man = LoggingManager(name=__name__)
29
- logger = logging_man.get_logger()
30
28
 
31
29
 
32
30
  class BasePreprocessor(ABC):
@@ -46,6 +44,28 @@ class BasePreprocessor(ABC):
46
44
 
47
45
  """
48
46
 
47
+ def _add_log_file_handler(self, log_file: Optional[Path | str]) -> int:
48
+ """
49
+ Add a log file handler to the logger.
50
+
51
+ Args:
52
+ log_file (Optional[Path | str]): Path to the log file. If None, a default log file will be created (brainles_preprocessing_{timestamp}.log).
53
+
54
+ Returns:
55
+ int: The logger id
56
+ """
57
+ log_file = Path(
58
+ log_file
59
+ if log_file
60
+ else f"brainles_preprocessing_{datetime.now().strftime('%Y-%m-%d_T%H-%M-%S.%f')}.log"
61
+ )
62
+ logger_id = logger.add(log_file, level="DEBUG", catch=True)
63
+ logger.info(
64
+ f"Logging console logs and further debug information to: {log_file.absolute()}"
65
+ )
66
+
67
+ return logger_id
68
+
49
69
  @citation_reminder
50
70
  def __init__(
51
71
  self,
@@ -59,7 +79,6 @@ class BasePreprocessor(ABC):
59
79
  use_gpu: Optional[bool] = None,
60
80
  limit_cuda_visible_devices: Optional[str] = None,
61
81
  ):
62
- logging_man._setup_logger()
63
82
 
64
83
  if not isinstance(center_modality, CenterModality):
65
84
  warnings.warn(
@@ -146,18 +165,6 @@ class BasePreprocessor(ABC):
146
165
  except (subprocess.CalledProcessError, FileNotFoundError):
147
166
  return False
148
167
 
149
- def ensure_remove_log_file_handler(func):
150
- @wraps(func)
151
- def wrapper(*args, **kwargs):
152
- try:
153
- return func(*args, **kwargs)
154
- finally:
155
- self = args[0]
156
- if isinstance(self, BasePreprocessor):
157
- logging_man.remove_log_file_handler()
158
-
159
- return wrapper
160
-
161
168
  @property
162
169
  def all_modalities(self) -> List[Modality]:
163
170
  """
@@ -173,7 +180,6 @@ class BasePreprocessor(ABC):
173
180
  return any(modality.requires_deface for modality in self.all_modalities)
174
181
 
175
182
  @abstractmethod
176
- @ensure_remove_log_file_handler
177
183
  def run(self, *args, **kwargs):
178
184
  """
179
185
  Execute the preprocessing pipeline, encompassing
@@ -1,12 +1,10 @@
1
1
  from pathlib import Path
2
2
  from typing import Optional, Union
3
3
 
4
+ from loguru import logger
5
+
4
6
  from brainles_preprocessing.registration import ANTsRegistrator
5
7
  from brainles_preprocessing.registration.registrator import Registrator
6
- from brainles_preprocessing.utils.logging_utils import LoggingManager
7
-
8
- logging_man = LoggingManager(name=__name__)
9
- logger = logging_man.get_logger()
10
8
 
11
9
 
12
10
  class Transform:
@@ -8,14 +8,9 @@ from pathlib import Path
8
8
  from typing import Dict, List, Tuple
9
9
 
10
10
  import requests
11
+ from loguru import logger
11
12
  from rich.progress import Progress, SpinnerColumn, TextColumn
12
13
 
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
14
  ZENODO_RECORD_URL = "https://zenodo.org/api/records/15236131"
20
15
  ATLASES_FOLDER = Path(__file__).parent.parent / "registration" / "atlases"
21
16
  ATLASES_DIR_PATTERN = "atlases_v*.*.*"
@@ -14,7 +14,7 @@ exclude = [
14
14
  ]
15
15
 
16
16
  name = "brainles_preprocessing"
17
- version = "0.6.0" # will be overwritten by poetry-dynamic-versioning but needs to be set
17
+ version = "0.6.1" # 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
 
@@ -72,6 +72,7 @@ rich = "^13.6.0"
72
72
  # optional registration backends
73
73
  itk-elastix = { version = "^0.20.0", optional = true }
74
74
  picsl_greedy = { version = "^0.0.6", optional = true }
75
+ loguru = "^0.7.3"
75
76
 
76
77
 
77
78
  [tool.poetry.extras]
@@ -1,131 +0,0 @@
1
- import sys
2
- import signal
3
- import logging
4
- import traceback
5
-
6
- from datetime import datetime
7
- from pathlib import Path
8
- from typing import Optional, Union
9
-
10
-
11
- class LoggingManager:
12
- """
13
- Manages logging configurations for the application or library.
14
- """
15
-
16
- def __init__(self, name: str, log_file_path: Optional[Union[str, Path]] = None):
17
- self.name = name
18
- self.log_file_path = log_file_path
19
-
20
- # Create and configure the custom logger
21
- self.logger = logging.getLogger(self.name)
22
- self.log_file_handler = None
23
-
24
- # Disable log propagation
25
- self.logger.propagate = False
26
-
27
- # Set up the logger
28
- self._setup_logger()
29
-
30
- # Set up the logger file if provided
31
- if log_file_path:
32
- self._set_log_file(log_file_path)
33
-
34
- def get_logger(self) -> logging.Logger:
35
- """
36
- Returns the logger instance.
37
- """
38
- return self.logger
39
-
40
- def _setup_logger(self):
41
- """
42
- Sets up the custom logger and overwrites system hooks to add logging for exceptions and signals.
43
- """
44
- # Configure the custom logger if it hasn't been configured yet
45
- if not self.logger.handlers:
46
- self.logger.setLevel(logging.INFO)
47
- formatter = logging.Formatter(
48
- "[%(levelname)s | %(name)s] %(asctime)s: %(message)s",
49
- "%Y-%m-%dT%H:%M:%S%z",
50
- )
51
-
52
- # Add a console handler
53
- console_handler = logging.StreamHandler()
54
- console_handler.setFormatter(formatter)
55
- self.logger.addHandler(console_handler)
56
-
57
- # Overwrite system hooks to log exceptions and signals (caution advised)
58
- sys.excepthook = self.exception_handler
59
- signal.signal(signal.SIGINT, self.signal_handler)
60
- signal.signal(signal.SIGTERM, self.signal_handler)
61
-
62
- def _set_log_file(self, log_file: str = None) -> None:
63
- """
64
- Sets the log file handler for the logger.
65
-
66
- Args:
67
- log_file (str | Path, optional): Log file path. If not provided, a timestamped log file is created.
68
- """
69
-
70
- # Remove existing log file handler if present
71
- if self.log_file_handler:
72
- self.remove_log_file_handler()
73
-
74
- # Ensure parent directories exist
75
- log_file = Path(
76
- log_file
77
- if log_file
78
- else f"brainles_preprocessing_{datetime.now().strftime('%Y-%m-%d_T%H-%M-%S.%f')}.log"
79
- )
80
- log_file.parent.mkdir(parents=True, exist_ok=True)
81
-
82
- # Create and add the file handler
83
- self.log_file_handler = logging.FileHandler(str(log_file))
84
- self.log_file_handler.setFormatter(
85
- logging.Formatter(
86
- "[%(levelname)-8s | %(name)s | %(module)-15s | L%(lineno)-5d] %(asctime)s: %(message)s",
87
- "%Y-%m-%dT%H:%M:%S%z",
88
- )
89
- )
90
- self.logger.addHandler(self.log_file_handler)
91
- self.log_file_path = log_file
92
-
93
- def remove_log_file_handler(self) -> None:
94
- """
95
- Removes the log file handler from the logger.
96
- """
97
- if self.log_file_handler:
98
- self.logger.removeHandler(self.log_file_handler)
99
- self.log_file_handler.close()
100
- self.log_file_handler = None
101
- self.log_file_path = None
102
-
103
- # overwrite system hooks to log exceptions and signals (SIGINT, SIGTERM)
104
- #! NOTE: This will note work in Jupyter Notebooks, (Without extra setup) see https://stackoverflow.com/a/70469055:
105
- def exception_handler(self, exception_type, value, tb):
106
- """Handle exceptions
107
-
108
- Args:
109
- exception_type (Exception): Exception type
110
- exception (Exception): Exception
111
- traceback (Traceback): Traceback
112
- """
113
- self.logger.error(
114
- "".join(traceback.format_exception(exception_type, value, tb))
115
- )
116
-
117
- if issubclass(exception_type, SystemExit):
118
- # add specific code if exception was a system exit
119
- sys.exit(value.code)
120
-
121
- def signal_handler(self, sig, frame):
122
- """
123
- Handles signals by logging them and exiting.
124
-
125
- Args:
126
- sig (int): Signal number
127
- frame (FrameType): Current stack frame
128
- """
129
- signame = signal.Signals(sig).name
130
- self.logger.error(f"Received signal {sig} ({signame}), exiting...")
131
- sys.exit(0)