hoa-tools 1.0.10__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 (313) hide show
  1. hoa_tools/__init__.py +5 -0
  2. hoa_tools/_n5.py +10 -0
  3. hoa_tools/_version.py +34 -0
  4. hoa_tools/data/metadata/metadata/A129_lung_VOI-02_2.0um_bm18.json +286 -0
  5. hoa_tools/data/metadata/metadata/A186_lung_right_VOI-3_4.26um_bm18.json +275 -0
  6. hoa_tools/data/metadata/metadata/A186_lung_right_complete-organ_24.132um_bm18.json +269 -0
  7. hoa_tools/data/metadata/metadata/AUMC-005_uterus_complete-organ_20.026um_bm18.json +331 -0
  8. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-01_2.5um_bm05.json +211 -0
  9. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-01_6.5um_bm05.json +217 -0
  10. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-02_2.5um_bm05.json +211 -0
  11. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-02_6.5um_bm05.json +217 -0
  12. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-03_2.5um_bm05.json +211 -0
  13. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-03_6.5um_bm05.json +217 -0
  14. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-04_6.5um_bm05.json +211 -0
  15. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-07_2.5um_bm05.json +211 -0
  16. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_VOI-08_2.5um_bm05.json +211 -0
  17. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_central-column_6.24um_bm05.json +214 -0
  18. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_complete-organ_26.38um_bm05.json +208 -0
  19. hoa_tools/data/metadata/metadata/FO-20-125_lung_complete-organ_26.38um_bm05.json +208 -0
  20. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2_2.22um_bm05.json +210 -0
  21. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2b_2.22um_bm05.json +210 -0
  22. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01_6.24um_bm05.json +214 -0
  23. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02.2_2.22um_bm05.json +210 -0
  24. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02_6.24um_bm05.json +214 -0
  25. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03.2_2.22um_bm05.json +210 -0
  26. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03_6.24um_bm05.json +214 -0
  27. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03b-bis_2.2um_bm05.json +210 -0
  28. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04-bis_6.5um_bm05.json +210 -0
  29. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04.2_2.22um_bm05.json +210 -0
  30. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04_6.24um_bm05.json +214 -0
  31. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05.2_2.22um_bm05.json +210 -0
  32. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05_6.24um_bm05.json +214 -0
  33. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-08.2_2.22um_bm05.json +210 -0
  34. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-09.2_2.22um_bm05.json +210 -0
  35. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-10.2_2.22um_bm05.json +210 -0
  36. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa-bis_2.2um_bm05.json +210 -0
  37. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa_0.65um_bm05.json +199 -0
  38. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-sx20_6.24um_bm05.json +214 -0
  39. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe-bis_25.25um_bm05.json +204 -0
  40. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe_26.38um_bm05.json +208 -0
  41. hoa_tools/data/metadata/metadata/FO-20-129_lung_right_upper_lobe_core-biopsy_2.25um_bm05.json +204 -0
  42. hoa_tools/data/metadata/metadata/FO-20-135_lung_complete-organ_25.25um_bm05.json +204 -0
  43. hoa_tools/data/metadata/metadata/FO-20-153_lung_complete-organ_25.25um_bm05.json +204 -0
  44. hoa_tools/data/metadata/metadata/FO-20-154_lung_col1_2.5um_bm05.json +204 -0
  45. hoa_tools/data/metadata/metadata/FO-20-154_lung_col1_6.5um_bm05.json +210 -0
  46. hoa_tools/data/metadata/metadata/FO-20-154_lung_col2_2.5um_bm05.json +204 -0
  47. hoa_tools/data/metadata/metadata/FO-20-154_lung_col2_6.5um_bm05.json +210 -0
  48. hoa_tools/data/metadata/metadata/FO-20-154_lung_col3_2.5um_bm05.json +204 -0
  49. hoa_tools/data/metadata/metadata/FO-20-154_lung_col4_2.5um_bm05.json +204 -0
  50. hoa_tools/data/metadata/metadata/FO-20-154_lung_col5_2.5um_bm05.json +204 -0
  51. hoa_tools/data/metadata/metadata/FO-20-154_lung_col6_2.5um_bm05.json +204 -0
  52. hoa_tools/data/metadata/metadata/FO-20-154_lung_col7_2.5um_bm05.json +204 -0
  53. hoa_tools/data/metadata/metadata/FO-20-154_lung_complete-organ_25.25um_bm05.json +204 -0
  54. hoa_tools/data/metadata/metadata/FO-20-155_lung_col1_2.5um_bm05.json +204 -0
  55. hoa_tools/data/metadata/metadata/FO-20-155_lung_col1_6.5um_bm05.json +210 -0
  56. hoa_tools/data/metadata/metadata/FO-20-155_lung_col2_2.5um_bm05.json +204 -0
  57. hoa_tools/data/metadata/metadata/FO-20-155_lung_col2_6.5um_bm05.json +210 -0
  58. hoa_tools/data/metadata/metadata/FO-20-155_lung_col3_2.5um_bm05.json +204 -0
  59. hoa_tools/data/metadata/metadata/FO-20-155_lung_col3_6.5um_bm05.json +210 -0
  60. hoa_tools/data/metadata/metadata/FO-20-155_lung_col4_6.5um_bm05.json +210 -0
  61. hoa_tools/data/metadata/metadata/FO-20-155_lung_col6_2.5um_bm05.json +210 -0
  62. hoa_tools/data/metadata/metadata/FO-20-155_lung_complete-organ_25.28um_bm05.json +199 -0
  63. hoa_tools/data/metadata/metadata/FO-20-160_lung_complete-organ_25.0um_bm05.json +199 -0
  64. hoa_tools/data/metadata/metadata/GLR-163_lung_right_lower_lobe_core-biopsy_2.45um_bm05.json +204 -0
  65. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_L-vent-muscle_2.22um_bm05.json +210 -0
  66. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_LR-vent-muscles-ramus-interventricularis-anterior_6.05um_bm05.json +210 -0
  67. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-01_6.5um_bm18.json +272 -0
  68. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-02_6.5um_bm18.json +272 -0
  69. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-03_6.5um_bm18.json +272 -0
  70. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_19.89um_bm18.json +252 -0
  71. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_25.08um_bm05.json +204 -0
  72. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_1.29um_bm05.json +210 -0
  73. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_6.05um_bm05.json +210 -0
  74. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_complete-organ_25.08um_bm05.json +204 -0
  75. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_right_complete-organ_25.0um_bm05.json +204 -0
  76. hoa_tools/data/metadata/metadata/LADAF-2020-27_liver_complete-organ_19.61um_bm18.json +266 -0
  77. hoa_tools/data/metadata/metadata/LADAF-2020-27_liver_complete-organ_25.25um_bm05.json +204 -0
  78. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_2.51um_bm05.json +199 -0
  79. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_25.25um_bm05.json +205 -0
  80. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_6.5um_bm05.json +199 -0
  81. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_2.51um_bm05.json +199 -0
  82. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_25.25um_bm05.json +205 -0
  83. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_6.5um_bm05.json +199 -0
  84. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.45um_bm05.json +210 -0
  85. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.5um_bm05.json +210 -0
  86. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.05um_bm05.json +210 -0
  87. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.5um_bm05.json +205 -0
  88. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_2.45um_bm05.json +210 -0
  89. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_6.05um_bm05.json +210 -0
  90. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-apical_2.5um_bm05.json +210 -0
  91. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-medial_6.5um_bm05.json +205 -0
  92. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03-upper-lobe-apical_2.5um_bm05.json +210 -0
  93. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03_6.5um_bm05.json +205 -0
  94. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03b-interlobular-fissure_6.5um_bm05.json +205 -0
  95. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04-upper-lobe-medial_2.5um_bm05.json +210 -0
  96. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04b-lower-lobe-basal-medial_6.5um_bm05.json +205 -0
  97. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-lower-lobe-basal_2.5um_bm05.json +210 -0
  98. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-upper-lobe-apical_6.5um_bm05.json +205 -0
  99. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_2.45um_bm05.json +210 -0
  100. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_6.05um_bm05.json +210 -0
  101. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_complete-organ_25.08um_bm05.json +204 -0
  102. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_right_complete-organ_19.61um_bm18.json +266 -0
  103. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_1.29um_bm05.json +210 -0
  104. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_6.05um_bm05.json +210 -0
  105. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_complete-organ_25.08um_bm05.json +204 -0
  106. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum-occipital_6.05um_bm05.json +210 -0
  107. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum_2.45um_bm05.json +210 -0
  108. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_complete-organ_25.08um_bm05.json +204 -0
  109. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_frontal_2.45um_bm05.json +210 -0
  110. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_2.45um_bm05.json +204 -0
  111. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_6.05um_bm05.json +210 -0
  112. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.36um_bm18.json +246 -0
  113. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.5um_bm05.json +205 -0
  114. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.36um_bm18.json +246 -0
  115. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.5um_bm05.json +205 -0
  116. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.36um_bm18.json +246 -0
  117. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.5um_bm05.json +205 -0
  118. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-04_6.5um_bm05.json +205 -0
  119. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-05_6.36um_bm18.json +246 -0
  120. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-06_6.36um_bm18.json +246 -0
  121. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-07_6.36um_bm18.json +246 -0
  122. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_19.89um_bm18.json +252 -0
  123. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_25.17um_bm05.json +204 -0
  124. hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_complete-organ_25.0um_bm05.json +204 -0
  125. hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_lateral-transect_2.5um_bm05.json +211 -0
  126. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-01_6.54um_bm18.json +258 -0
  127. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-02_6.54um_bm18.json +258 -0
  128. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-03_6.54um_bm18.json +258 -0
  129. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-04_6.54um_bm18.json +258 -0
  130. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-05_6.54um_bm18.json +258 -0
  131. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-06_6.54um_bm18.json +258 -0
  132. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-07_6.54um_bm18.json +258 -0
  133. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-08_6.54um_bm18.json +258 -0
  134. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-09_6.54um_bm18.json +258 -0
  135. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-10_6.54um_bm18.json +258 -0
  136. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-11_6.36um_bm18.json +246 -0
  137. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-12_6.36um_bm18.json +246 -0
  138. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-13_6.36um_bm18.json +246 -0
  139. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-14_6.36um_bm18.json +246 -0
  140. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-15_6.36um_bm18.json +246 -0
  141. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-02.1_2.256um_bm18.json +272 -0
  142. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-03.2_2.256um_bm18.json +272 -0
  143. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-13.1_2.256um_bm18.json +272 -0
  144. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_23.42um_bm18.json +266 -0
  145. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_25.25um_bm05.json +218 -0
  146. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_7.72um_bm18.json +240 -0
  147. hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-01_1.444um_bm05.json +255 -0
  148. hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-01_4.502um_bm18.json +261 -0
  149. hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-07_1.444um_bm05.json +255 -0
  150. hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_VOI-11_4.502um_bm18.json +261 -0
  151. hoa_tools/data/metadata/metadata/LADAF-2021-17_colon_complete-organ_20.025um_bm18.json +260 -0
  152. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.36um_bm18.json +246 -0
  153. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.5um_bm05.json +265 -0
  154. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.36um_bm18.json +246 -0
  155. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.5um_bm05.json +265 -0
  156. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.36um_bm18.json +246 -0
  157. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.5um_bm05.json +265 -0
  158. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-04_6.36um_bm18.json +246 -0
  159. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-05_6.36um_bm18.json +246 -0
  160. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-06_6.36um_bm18.json +246 -0
  161. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-07_6.36um_bm18.json +246 -0
  162. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.1_2.256um_bm18.json +272 -0
  163. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.2_2.256um_bm18.json +272 -0
  164. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-3.1_2.256um_bm18.json +272 -0
  165. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.1_2.256um_bm18.json +272 -0
  166. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.2_2.256um_bm18.json +272 -0
  167. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.3_2.256um_bm18.json +272 -0
  168. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-5.1_2.256um_bm18.json +272 -0
  169. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-7.1_2.256um_bm18.json +272 -0
  170. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_19.85um_bm18.json +240 -0
  171. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_25.08um_bm05.json +252 -0
  172. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01.1_2.6um_bm05.json +258 -0
  173. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01_6.49um_bm05.json +258 -0
  174. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02.1_2.6um_bm05.json +258 -0
  175. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02_6.49um_bm05.json +258 -0
  176. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_complete-organ_25.14um_bm05.json +252 -0
  177. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01.1_2.6um_bm05.json +258 -0
  178. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01_6.5um_bm05.json +258 -0
  179. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02.1_2.6um_bm05.json +258 -0
  180. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02_6.5um_bm05.json +258 -0
  181. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03.1_2.6um_bm05.json +258 -0
  182. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03_6.5um_bm05.json +258 -0
  183. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_complete-organ_25.0um_bm05.json +218 -0
  184. hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-01_4.14um_bm18.json +233 -0
  185. hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-02_4.14um_bm18.json +233 -0
  186. hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-03_4.14um_bm18.json +233 -0
  187. hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_VOI-08_4.14um_bm18.json +233 -0
  188. hoa_tools/data/metadata/metadata/LADAF-2021-17_liver_complete-organ_22.56um_bm18.json +240 -0
  189. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_left_complete-organ_22.56um_bm18.json +240 -0
  190. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-01_5.05um_bm18.json +246 -0
  191. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-03_5.05um_bm18.json +246 -0
  192. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-04_5.05um_bm18.json +246 -0
  193. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-05_5.05um_bm18.json +246 -0
  194. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-06_5.05um_bm18.json +246 -0
  195. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-07_5.05um_bm18.json +246 -0
  196. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-08_5.05um_bm18.json +240 -0
  197. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-09_5.05um_bm18.json +240 -0
  198. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-10_5.05um_bm18.json +240 -0
  199. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_VOI-11_5.05um_bm18.json +246 -0
  200. hoa_tools/data/metadata/metadata/LADAF-2021-17_lung_right_complete-organ_21.64um_bm18.json +280 -0
  201. hoa_tools/data/metadata/metadata/LADAF-2021-17_prostate_complete-scan_23.42um_bm18.json +266 -0
  202. hoa_tools/data/metadata/metadata/LADAF-2021-17_spleen_complete-organ_25.0um_bm05.json +218 -0
  203. hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_1_VOI-01_2.02um_bm18.json +233 -0
  204. hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_1_complete-organ_9.595um_bm18.json +227 -0
  205. hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_2_VOI-02_2.02um_bm18.json +233 -0
  206. hoa_tools/data/metadata/metadata/LADAF-2021-17_testis_2_complete-organ_9.595um_bm18.json +227 -0
  207. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-01_6.51um_bm18.json +246 -0
  208. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-02_6.51um_bm18.json +246 -0
  209. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-04_6.51um_bm18.json +246 -0
  210. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-05_6.51um_bm18.json +246 -0
  211. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-06_6.51um_bm18.json +246 -0
  212. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-07_6.51um_bm18.json +246 -0
  213. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.1_2.26um_bm18.json +272 -0
  214. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.2_2.26um_bm18.json +272 -0
  215. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-3.1_2.26um_bm18.json +272 -0
  216. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.1_2.26um_bm18.json +272 -0
  217. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.2_2.26um_bm18.json +272 -0
  218. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-5.1_2.26um_bm18.json +272 -0
  219. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-6.1_2.26um_bm18.json +272 -0
  220. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-7.1_2.26um_bm18.json +272 -0
  221. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_complete-organ_19.89um_bm18.json +252 -0
  222. hoa_tools/data/metadata/metadata/LADAF-2022-13_kidney_1_complete-organ_15.77um_bm18.json +266 -0
  223. hoa_tools/data/metadata/metadata/LADAF-2022-13_kidney_2_complete-organ_15.77um_bm18.json +266 -0
  224. hoa_tools/data/metadata/metadata/LADAF-2022-13_prostate_complete-organ_14.72um_bm18.json +244 -0
  225. hoa_tools/data/metadata/metadata/LADAF-2022-16_prostate_complete-organ_15.75um_bm18.json +266 -0
  226. hoa_tools/data/metadata/metadata/LADAF-2022-16_spleen_complete-organ_15.75um_bm18.json +266 -0
  227. hoa_tools/data/metadata/metadata/LADAF-2022-27_kidney_bottom_complete-organ_15.75um_bm18.json +266 -0
  228. hoa_tools/data/metadata/metadata/LADAF-2022-27_kidney_top_complete-organ_15.75um_bm18.json +266 -0
  229. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-01-tricuspid-valve_12.02um_bm05.json +258 -0
  230. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-01_6.51um_bm18.json +246 -0
  231. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-02_6.51um_bm18.json +246 -0
  232. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-03_6.51um_bm18.json +246 -0
  233. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-04_6.51um_bm18.json +246 -0
  234. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-05_6.51um_bm18.json +246 -0
  235. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-06_6.51um_bm18.json +246 -0
  236. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-08_6.51um_bm18.json +246 -0
  237. hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_19.85um_bm18.json +240 -0
  238. hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_25.27um_bm05.json +204 -0
  239. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-01_2.5um_bm05.json +224 -0
  240. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-01_6.51um_bm05.json +210 -0
  241. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-02_2.5um_bm05.json +224 -0
  242. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-02_6.51um_bm05.json +210 -0
  243. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-03_2.5um_bm05.json +224 -0
  244. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-04_2.5um_bm05.json +224 -0
  245. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-05_2.5um_bm05.json +224 -0
  246. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-06_2.5um_bm05.json +218 -0
  247. hoa_tools/data/metadata/metadata/S-20-28_kidney_VOI-07_2.5um_bm05.json +224 -0
  248. hoa_tools/data/metadata/metadata/S-20-28_kidney_complete-organ_25.0um_bm05.json +204 -0
  249. hoa_tools/data/metadata/metadata/S-20-28_lung_right_lower_lobe_overview_19.89um_bm18.json +252 -0
  250. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_2.5um_bm05.json +224 -0
  251. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_6.54um_bm18.json +258 -0
  252. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_6.5um_bm05.json +224 -0
  253. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01b_6.5um_bm05.json +224 -0
  254. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_2.5um_bm05.json +224 -0
  255. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_6.54um_bm18.json +258 -0
  256. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_6.5um_bm05.json +224 -0
  257. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_2.5um_bm05.json +224 -0
  258. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_6.54um_bm18.json +258 -0
  259. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_6.5um_bm05.json +224 -0
  260. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_2.5um_bm05.json +224 -0
  261. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_6.54um_bm18.json +258 -0
  262. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_6.5um_bm05.json +224 -0
  263. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_2.5um_bm05.json +224 -0
  264. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_6.54um_bm18.json +258 -0
  265. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_6.5um_bm05.json +224 -0
  266. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-06_6.54um_bm18.json +258 -0
  267. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-07_6.54um_bm18.json +258 -0
  268. hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_19.57um_bm18.json +240 -0
  269. hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_25.33um_bm05.json +199 -0
  270. hoa_tools/data/metadata/metadata/S-20-29_heart_ROI-03_6.5um_bm05.json +210 -0
  271. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_2.5um_bm05.json +210 -0
  272. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_6.51um_bm18.json +246 -0
  273. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_6.5um_bm05.json +210 -0
  274. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_2.5um_bm05.json +210 -0
  275. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_6.51um_bm18.json +246 -0
  276. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_6.5um_bm05.json +210 -0
  277. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-03_6.51um_bm18.json +246 -0
  278. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-04_6.51um_bm18.json +246 -0
  279. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-04_6.5um_bm05.json +210 -0
  280. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-05_6.51um_bm18.json +246 -0
  281. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-05b_6.5um_bm05.json +210 -0
  282. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-06_6.51um_bm18.json +246 -0
  283. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-07_6.51um_bm18.json +246 -0
  284. hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_19.89um_bm18.json +252 -0
  285. hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_25.25um_bm05.json +199 -0
  286. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_1.4um_bm05.json +204 -0
  287. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_6.5um_bm05.json +210 -0
  288. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-02_6.5um_bm05.json +210 -0
  289. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-03_6.5um_bm05.json +210 -0
  290. hoa_tools/data/metadata/metadata/S-20-29_kidney_complete-organ_25.38um_bm05.json +204 -0
  291. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-2.1_2.256um_bm18.json +266 -0
  292. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-3.1_2.256um_bm18.json +272 -0
  293. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-5.3_2.256um_bm18.json +272 -0
  294. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-01_6.5um_bm05.json +210 -0
  295. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-02_6.5um_bm05.json +210 -0
  296. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-04_6.5um_bm05.json +210 -0
  297. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-05_6.5um_bm05.json +210 -0
  298. hoa_tools/data/metadata/metadata/S-20-29_lung_left_complete-organ_25.31um_bm05.json +199 -0
  299. hoa_tools/data/metadata/metadata/S-21-33_brain_complete-organ_19.57um_bm18.json +240 -0
  300. hoa_tools/data/metadata/metadata/S-21-46_brain_complete-organ_19.57um_bm18.json +240 -0
  301. hoa_tools/data/metadata/metadata/S-22-16_brain_complete-organ_19.59um_bm18.json +266 -0
  302. hoa_tools/dataset.py +295 -0
  303. hoa_tools/inventory.py +30 -0
  304. hoa_tools/metadata.py +772 -0
  305. hoa_tools/py.typed +0 -0
  306. hoa_tools/registration.py +125 -0
  307. hoa_tools/types.py +59 -0
  308. hoa_tools/voi.py +230 -0
  309. hoa_tools-1.0.10.dist-info/METADATA +108 -0
  310. hoa_tools-1.0.10.dist-info/RECORD +313 -0
  311. hoa_tools-1.0.10.dist-info/WHEEL +5 -0
  312. hoa_tools-1.0.10.dist-info/licenses/LICENSE.md +27 -0
  313. hoa_tools-1.0.10.dist-info/top_level.txt +1 -0
hoa_tools/dataset.py ADDED
@@ -0,0 +1,295 @@
1
+ """
2
+ Tools for working with individual datasets.
3
+
4
+ The core class representing a single dataset is [`Dataset`][hoa_tools.dataset.Dataset].
5
+ This inherits from [`HOAMetadata`][hoa_tools.metadata.HOAMetadata],
6
+ which stores all the metadata for a given dataset.
7
+
8
+ [`Dataset`][hoa_tools.dataset.Dataset] objects are not designed to be created by users.
9
+ To get a [`Dataset`][hoa_tools.dataset.Dataset], use the
10
+ [`get_dataset`][hoa_tools.dataset.get_dataset] function in this module.
11
+ """
12
+
13
+ import warnings
14
+ from functools import cached_property
15
+ from pathlib import Path
16
+ from typing import Literal
17
+
18
+ import dask.array.core
19
+ import gcsfs
20
+ import networkx as nx
21
+ import numpy as np
22
+ import xarray as xr
23
+ import zarr.core
24
+ import zarr.n5
25
+ import zarr.storage
26
+
27
+ from hoa_tools._n5 import N5FSStore
28
+ from hoa_tools.metadata import HOAMetadata
29
+ from hoa_tools.types import PhysicalCoordinate
30
+
31
+ __all__ = ["Dataset", "get_dataset"]
32
+
33
+
34
+ _DATASETS: dict[str, "Dataset"]
35
+
36
+
37
+ class Dataset(HOAMetadata):
38
+ """
39
+ An individual Human Organ Atlas dataset.
40
+ """
41
+
42
+ def __str__(self) -> str:
43
+ return f"Dataset(name={self.name})"
44
+
45
+ def __hash__(self) -> int:
46
+ return hash(self.name)
47
+
48
+ def _organ_str(self) -> str:
49
+ """
50
+ Get name of organ, with organ context appended if present.
51
+ """
52
+ organ_str = str(self.sample.organ)
53
+ if self.sample.organ_context:
54
+ organ_str += "_" + self.sample.organ_context
55
+ return organ_str
56
+
57
+ def _voxel_size_str(self) -> str:
58
+ # Make sure that voxel size includes a .0 if an integer value.
59
+ return str(float(self.data.voxel_size_um))
60
+
61
+ @property
62
+ def is_full_organ(self) -> bool:
63
+ """
64
+ Whether this dataset contains the whole organ or not.
65
+ """
66
+ return self.voi.startswith("complete")
67
+
68
+ @property
69
+ def is_zoom(self) -> bool:
70
+ """
71
+ Whether this dataset is a zoom or not.
72
+ """
73
+ return not self.is_full_organ
74
+
75
+ def get_children(self) -> list["Dataset"]:
76
+ """
77
+ Get child dataset(s).
78
+
79
+ Child datasets are high-resolution zooms of a full-organ dataset.
80
+
81
+ Notes
82
+ -----
83
+ For full-organ datasets, this returns an empty list.
84
+
85
+ """
86
+ children = [
87
+ d
88
+ for d in _DATASETS.values()
89
+ if (
90
+ d.donor.id == self.donor.id
91
+ and d.sample.organ == self.sample.organ
92
+ and d.scan.beamline == self.scan.beamline
93
+ and d.is_zoom
94
+ )
95
+ ]
96
+ return sorted(children, key=lambda c: c.name)
97
+
98
+ def get_parents(self) -> list["Dataset"]:
99
+ """
100
+ Get parent dataset(s).
101
+
102
+ Parent datasets are full-organ datasets from which a zoom dataset is taken from.
103
+
104
+ Notes
105
+ -----
106
+ For zoom datasets, this returns an empty list.
107
+
108
+ """
109
+ parents = [
110
+ d
111
+ for d in _DATASETS.values()
112
+ if (
113
+ d.donor.id == self.donor.id
114
+ and d.sample.organ == self.sample.organ
115
+ and d.scan.beamline == self.scan.beamline
116
+ and d.is_full_organ
117
+ )
118
+ ]
119
+ return sorted(parents, key=lambda c: c.name)
120
+
121
+ def get_registered(self) -> set["Dataset"]:
122
+ """
123
+ Get a set of all datasets that are registered (even indirectly) to this dataset.
124
+ """
125
+ import hoa_tools.registration # noqa: PLC0415
126
+
127
+ dataset_names = nx.node_connected_component(
128
+ hoa_tools.registration.Inventory._graph.to_undirected(), # noqa: SLF001
129
+ self.name,
130
+ )
131
+ return {get_dataset(name) for name in dataset_names}
132
+
133
+ @property
134
+ def _remote_fmt(self) -> Literal["n5", "zarr"]:
135
+ if self.data.gcs_url.startswith("n5://"):
136
+ return "n5"
137
+ if self.data.gcs_url.startswith("zarr://"):
138
+ return "zarr"
139
+ raise RuntimeError("URL must start with n5:// or zarr://")
140
+
141
+ @cached_property
142
+ def _remote_store(self) -> zarr.Group:
143
+ """
144
+ Remote data store.
145
+ """
146
+ gcs_url = self.data.gcs_url
147
+ gcs_path = gcs_url.removeprefix("n5://gs://").removeprefix("zarr://gs://")
148
+
149
+ # n5://gs://ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/S-20-29/heart/2.5um_VOI-01_bm05/
150
+ bucket, path = gcs_path.split("/", maxsplit=1)
151
+ fs = gcsfs.GCSFileSystem(project=bucket, token="anon", access="read_only") # noqa: S106
152
+ if self._remote_fmt == "n5":
153
+ store = N5FSStore(url=bucket, fs=fs, mode="r")
154
+ elif self._remote_fmt == "zarr":
155
+ store = zarr.storage.FSStore(url=bucket, fs=fs, mode="r")
156
+
157
+ return zarr.open_group(store, mode="r", path=path)
158
+
159
+ def _remote_array(self, *, downsample_level: int) -> zarr.core.Array:
160
+ """
161
+ Get an object representing the data array in the remote Google Cloud Store.
162
+ """
163
+ if not downsample_level >= 0:
164
+ msg = "level must be >= 0"
165
+ raise ValueError(msg)
166
+
167
+ if self._remote_fmt == "n5":
168
+ key = f"s{downsample_level}"
169
+ else:
170
+ key = f"{downsample_level}"
171
+ return self._remote_store[key]
172
+
173
+ def data_array(self, *, downsample_level: int) -> xr.DataArray:
174
+ """
175
+ Get a DataArray representing the array for this image.
176
+ """
177
+ remote_array = self._remote_array(downsample_level=downsample_level)
178
+ dask_array = dask.array.core.from_array( # type: ignore[no-untyped-call]
179
+ remote_array, chunks=remote_array.chunks
180
+ )
181
+ if self._remote_fmt == "zarr":
182
+ dask_array = dask_array.T
183
+
184
+ spacing = self.data.voxel_size_um * 2**downsample_level
185
+ return xr.DataArray(
186
+ dask_array,
187
+ name=self.name,
188
+ dims=["z", "y", "x"],
189
+ coords={
190
+ "z": xr.DataArray(
191
+ data=(np.arange(dask_array.shape[0]) * spacing),
192
+ dims=["z"],
193
+ attrs={"units": "μm"},
194
+ ),
195
+ "y": xr.DataArray(
196
+ data=(np.arange(dask_array.shape[1]) * spacing),
197
+ dims=["y"],
198
+ attrs={"units": "μm"},
199
+ ),
200
+ "x": xr.DataArray(
201
+ data=(np.arange(dask_array.shape[2]) * spacing),
202
+ dims=["x"],
203
+ attrs={"units": "μm"},
204
+ ),
205
+ },
206
+ )
207
+
208
+
209
+ def _load_datasets_from_files(data_dir: Path) -> dict[str, Dataset]:
210
+ """
211
+ Load dataset metadtata files.
212
+ """
213
+ datasets = {
214
+ f.stem: Dataset.model_validate_json(f.read_text())
215
+ for f in (data_dir).glob("*.json")
216
+ }
217
+ if len(datasets) == 0:
218
+ raise FileNotFoundError(
219
+ f"Did not find any dataset metadata files at {data_dir}" # noqa: EM102
220
+ )
221
+ return datasets
222
+
223
+
224
+ def get_dataset(name: str) -> Dataset:
225
+ """
226
+ Get a dataset from its name.
227
+
228
+ The name of datasets can be looked up using the `hoa_tools.inventory` module.
229
+ """
230
+ return _DATASETS[name]
231
+
232
+
233
+ def change_metadata_directory(data_dir: Path) -> None:
234
+ """
235
+ Update available datasets from another directory of metadata files.
236
+
237
+ Designed for internal project members to load metadata files that aren't yet public.
238
+ """
239
+ global _DATASETS # noqa: PLW0603
240
+ _DATASETS = _load_datasets_from_files(data_dir)
241
+ _populate_registrations_from_metadata(_DATASETS)
242
+
243
+
244
+ def _populate_registrations_from_metadata(datasets: dict[str, Dataset]) -> None:
245
+ from hoa_tools.registration import Inventory, build_transform # noqa: PLC0415
246
+
247
+ Inventory._clear() # noqa: SLF001
248
+ for dataset_name in datasets:
249
+ dataset = _DATASETS[dataset_name]
250
+ if (registration := dataset.registration) is not None:
251
+ source_dataset = _DATASETS[registration.source_dataset]
252
+ if registration.target_dataset not in _DATASETS:
253
+ # Some datasets don't have their parent datasets release yet - only warn
254
+ # if we're expecting a parent dataset
255
+ if registration.source_dataset not in [
256
+ "A129_lung_VOI-02_2.0um_bm18"
257
+ ] and not registration.source_dataset.startswith("LADAF-2021-17_brain"):
258
+ warnings.warn(
259
+ f"Did not find target dataset {registration.target_dataset} "
260
+ f"in dataset inventory. "
261
+ f"Not adding {registration.source_dataset} "
262
+ "to registration inventory.",
263
+ stacklevel=1,
264
+ )
265
+ continue
266
+ target_dataset = _DATASETS[registration.target_dataset]
267
+ transform = build_transform(
268
+ translation=PhysicalCoordinate(
269
+ x=registration.translation[0] * target_dataset.data.voxel_size_um,
270
+ y=registration.translation[1] * target_dataset.data.voxel_size_um,
271
+ z=registration.translation[2] * target_dataset.data.voxel_size_um,
272
+ ),
273
+ rotation_deg=registration.rotation,
274
+ scale=registration.scale
275
+ * target_dataset.data.voxel_size_um
276
+ / source_dataset.data.voxel_size_um,
277
+ )
278
+ Inventory.add_registration(
279
+ source_dataset=_DATASETS[registration.source_dataset],
280
+ target_dataset=_DATASETS[registration.target_dataset],
281
+ transform=transform,
282
+ )
283
+
284
+
285
+ _META_DIR = Path(__file__).parent / "data" / "metadata" / "metadata"
286
+ try:
287
+ change_metadata_directory(_META_DIR)
288
+ except FileNotFoundError as e:
289
+ raise ImportError(
290
+ "Did not find any dataset metadata files. "
291
+ "This means there is something wrong with the hoa-tools installation.\n"
292
+ "Please report this at https://github.com/HumanOrganAtlas/hoa-tools\n"
293
+ "If you are installing from source, you might need to "
294
+ "initialise and fetch git submodules. "
295
+ ) from e
hoa_tools/inventory.py ADDED
@@ -0,0 +1,30 @@
1
+ """
2
+ Tools for working with the dataset inventory.
3
+ """
4
+
5
+ import pandas as pd
6
+
7
+ from hoa_tools.dataset import _DATASETS
8
+
9
+
10
+ def load_inventory() -> pd.DataFrame:
11
+ """
12
+ Load the dataset inventory.
13
+
14
+ Returns
15
+ -------
16
+ inventory :
17
+ Dataset inventory.
18
+
19
+ """
20
+ data = [
21
+ {
22
+ "donor": d.donor.id,
23
+ "organ": d.sample.organ,
24
+ "organ_context": d.sample.organ_context,
25
+ "voi": d.voi,
26
+ "voxel_size_um": d.data.voxel_size_um,
27
+ }
28
+ for d in _DATASETS.values()
29
+ ]
30
+ return pd.DataFrame(data=data, index=list(_DATASETS.keys()))