hoa-tools 1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hoa-tools might be problematic. Click here for more details.

Files changed (198) hide show
  1. hoa_tools/__init__.py +5 -0
  2. hoa_tools/_n5.py +10 -0
  3. hoa_tools/_version.py +21 -0
  4. hoa_tools/data/metadata/metadata/A186_lung_right_VOI-3_4.26um_bm18.json +275 -0
  5. hoa_tools/data/metadata/metadata/A186_lung_right_complete-organ_24.132um_bm18.json +269 -0
  6. hoa_tools/data/metadata/metadata/FO-20-124_lung_upper_lobe_complete-organ_26.38um_bm05.json +208 -0
  7. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2_2.22um_bm05.json +210 -0
  8. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01.2b_2.22um_bm05.json +210 -0
  9. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-01_6.24um_bm05.json +214 -0
  10. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02.2_2.22um_bm05.json +210 -0
  11. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-02_6.24um_bm05.json +214 -0
  12. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03.2_2.22um_bm05.json +210 -0
  13. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03_6.24um_bm05.json +214 -0
  14. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-03b-bis_2.2um_bm05.json +205 -0
  15. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04-bis_6.5um_bm05.json +205 -0
  16. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04.2_2.22um_bm05.json +210 -0
  17. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-04_6.24um_bm05.json +214 -0
  18. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05.2_2.22um_bm05.json +210 -0
  19. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-05_6.24um_bm05.json +214 -0
  20. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-08.2_2.22um_bm05.json +210 -0
  21. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-09.2_2.22um_bm05.json +210 -0
  22. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-10.2_2.22um_bm05.json +210 -0
  23. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa-bis_2.2um_bm05.json +205 -0
  24. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-aa_0.65um_bm05.json +199 -0
  25. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_VOI-sx20_6.24um_bm05.json +214 -0
  26. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe-bis_25.25um_bm05.json +199 -0
  27. hoa_tools/data/metadata/metadata/FO-20-129_lung_left_upper_lobe_complete-upper-lobe_26.38um_bm05.json +208 -0
  28. hoa_tools/data/metadata/metadata/FO-20-129_lung_right_upper_lobe_core-biopsy_2.25um_bm05.json +204 -0
  29. hoa_tools/data/metadata/metadata/GLR-163_lung_right_lower_lobe_core-biopsy_2.45um_bm05.json +204 -0
  30. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_L-vent-muscle_2.22um_bm05.json +210 -0
  31. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_LR-vent-muscles-ramus-interventricularis-anterior_6.05um_bm05.json +210 -0
  32. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-01_6.5um_bm18.json +272 -0
  33. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-02_6.5um_bm18.json +272 -0
  34. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_ROI-03_6.5um_bm18.json +272 -0
  35. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_19.89um_bm18.json +252 -0
  36. hoa_tools/data/metadata/metadata/LADAF-2020-27_heart_complete-organ_25.08um_bm05.json +204 -0
  37. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_1.29um_bm05.json +210 -0
  38. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_central-column_6.05um_bm05.json +210 -0
  39. hoa_tools/data/metadata/metadata/LADAF-2020-27_kidney_left_complete-organ_25.08um_bm05.json +204 -0
  40. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_2.51um_bm05.json +199 -0
  41. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_25.25um_bm05.json +205 -0
  42. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-A_6.5um_bm05.json +199 -0
  43. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_2.51um_bm05.json +199 -0
  44. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_25.25um_bm05.json +205 -0
  45. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_FSC-B_6.5um_bm05.json +199 -0
  46. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.45um_bm05.json +210 -0
  47. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_2.5um_bm05.json +205 -0
  48. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.05um_bm05.json +210 -0
  49. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-01-upper-lobe-apical_6.5um_bm05.json +205 -0
  50. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_2.45um_bm05.json +210 -0
  51. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02-lower-lobe-basal_6.05um_bm05.json +210 -0
  52. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-apical_2.5um_bm05.json +205 -0
  53. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-02b-upper-lobe-medial_6.5um_bm05.json +205 -0
  54. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03-upper-lobe-apical_2.5um_bm05.json +205 -0
  55. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03_6.5um_bm05.json +205 -0
  56. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-03b-interlobular-fissure_6.5um_bm05.json +205 -0
  57. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04-upper-lobe-medial_2.5um_bm05.json +205 -0
  58. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-04b-lower-lobe-basal-medial_6.5um_bm05.json +205 -0
  59. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-lower-lobe-basal_2.5um_bm05.json +205 -0
  60. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-05-upper-lobe-apical_6.5um_bm05.json +205 -0
  61. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_2.45um_bm05.json +210 -0
  62. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_VOI-06-lower-lobe-basal_6.05um_bm05.json +210 -0
  63. hoa_tools/data/metadata/metadata/LADAF-2020-27_lung_left_complete-organ_25.08um_bm05.json +204 -0
  64. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_1.29um_bm05.json +210 -0
  65. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_central-column_6.05um_bm05.json +210 -0
  66. hoa_tools/data/metadata/metadata/LADAF-2020-27_spleen_complete-organ_25.08um_bm05.json +204 -0
  67. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum-occipital_6.05um_bm05.json +210 -0
  68. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_cerebellum_2.45um_bm05.json +210 -0
  69. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_complete-organ_25.08um_bm05.json +204 -0
  70. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_frontal_2.45um_bm05.json +210 -0
  71. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_2.45um_bm05.json +210 -0
  72. hoa_tools/data/metadata/metadata/LADAF-2020-31_brain_hippocampus_6.05um_bm05.json +210 -0
  73. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.36um_bm18.json +246 -0
  74. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-01_6.5um_bm05.json +205 -0
  75. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.36um_bm18.json +246 -0
  76. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-02_6.5um_bm05.json +205 -0
  77. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.36um_bm18.json +246 -0
  78. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-03_6.5um_bm05.json +205 -0
  79. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-04_6.5um_bm05.json +205 -0
  80. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-05_6.36um_bm18.json +246 -0
  81. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-06_6.36um_bm18.json +246 -0
  82. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_ROI-07_6.36um_bm18.json +246 -0
  83. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_19.89um_bm18.json +252 -0
  84. hoa_tools/data/metadata/metadata/LADAF-2020-31_heart_complete-organ_25.17um_bm05.json +199 -0
  85. hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_complete-organ_25.0um_bm05.json +199 -0
  86. hoa_tools/data/metadata/metadata/LADAF-2020-31_kidney_lateral-transect_2.5um_bm05.json +211 -0
  87. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-02_6.54um_bm18.json +258 -0
  88. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-03_6.54um_bm18.json +252 -0
  89. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_ROI-13_6.36um_bm18.json +246 -0
  90. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-02.1_2.256um_bm18.json +272 -0
  91. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-03.2_2.256um_bm18.json +266 -0
  92. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_VOI-13.1_2.256um_bm18.json +272 -0
  93. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_23.42um_bm18.json +266 -0
  94. hoa_tools/data/metadata/metadata/LADAF-2021-17_brain_complete-organ_25.25um_bm05.json +218 -0
  95. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.36um_bm18.json +246 -0
  96. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-01_6.5um_bm05.json +265 -0
  97. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.36um_bm18.json +246 -0
  98. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-02_6.5um_bm05.json +265 -0
  99. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.36um_bm18.json +246 -0
  100. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-03_6.5um_bm05.json +265 -0
  101. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-04_6.36um_bm18.json +246 -0
  102. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-05_6.36um_bm18.json +246 -0
  103. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-06_6.36um_bm18.json +246 -0
  104. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-07_6.36um_bm18.json +246 -0
  105. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.1_2.256um_bm18.json +272 -0
  106. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-1.2_2.256um_bm18.json +272 -0
  107. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-3.1_2.256um_bm18.json +272 -0
  108. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.1_2.256um_bm18.json +272 -0
  109. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.2_2.256um_bm18.json +272 -0
  110. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-4.3_2.256um_bm18.json +272 -0
  111. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-5.1_2.256um_bm18.json +272 -0
  112. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_ROI-7.1_2.256um_bm18.json +272 -0
  113. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_19.85um_bm18.json +240 -0
  114. hoa_tools/data/metadata/metadata/LADAF-2021-17_heart_complete-organ_25.08um_bm05.json +240 -0
  115. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01.1_2.6um_bm05.json +258 -0
  116. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-01_6.49um_bm05.json +258 -0
  117. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02.1_2.6um_bm05.json +258 -0
  118. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_VOI-02_6.49um_bm05.json +258 -0
  119. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_left_complete-organ_25.14um_bm05.json +252 -0
  120. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01.1_2.6um_bm05.json +258 -0
  121. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-01_6.5um_bm05.json +258 -0
  122. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02.1_2.6um_bm05.json +258 -0
  123. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-02_6.5um_bm05.json +258 -0
  124. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03.1_2.6um_bm05.json +252 -0
  125. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_VOI-03_6.5um_bm05.json +252 -0
  126. hoa_tools/data/metadata/metadata/LADAF-2021-17_kidney_right_complete-organ_25.0um_bm05.json +218 -0
  127. hoa_tools/data/metadata/metadata/LADAF-2021-17_spleen_complete-organ_25.0um_bm05.json +199 -0
  128. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-01_6.51um_bm18.json +246 -0
  129. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-02_6.51um_bm18.json +246 -0
  130. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-04_6.51um_bm18.json +246 -0
  131. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-05_6.51um_bm18.json +246 -0
  132. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-06_6.51um_bm18.json +246 -0
  133. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-07_6.51um_bm18.json +246 -0
  134. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.1_2.26um_bm18.json +272 -0
  135. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-1.2_2.26um_bm18.json +272 -0
  136. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-3.1_2.26um_bm18.json +272 -0
  137. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.1_2.26um_bm18.json +272 -0
  138. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-4.2_2.26um_bm18.json +272 -0
  139. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-5.1_2.26um_bm18.json +272 -0
  140. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-6.1_2.26um_bm18.json +272 -0
  141. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_VOI-7.1_2.26um_bm18.json +272 -0
  142. hoa_tools/data/metadata/metadata/LADAF-2021-64_heart_complete-organ_19.89um_bm18.json +252 -0
  143. hoa_tools/data/metadata/metadata/LADAF-2022-13_kidney_2_complete-organ_15.77um_bm18.json +266 -0
  144. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-01_6.51um_bm18.json +246 -0
  145. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-02_6.51um_bm18.json +246 -0
  146. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-03_6.51um_bm18.json +246 -0
  147. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-04_6.51um_bm18.json +246 -0
  148. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-05_6.51um_bm18.json +246 -0
  149. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-06_6.51um_bm18.json +246 -0
  150. hoa_tools/data/metadata/metadata/S-20-28_heart_VOI-08_6.51um_bm18.json +246 -0
  151. hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_19.85um_bm18.json +240 -0
  152. hoa_tools/data/metadata/metadata/S-20-28_heart_complete-organ_25.27um_bm05.json +199 -0
  153. hoa_tools/data/metadata/metadata/S-20-28_kidney_complete-organ_25.0um_bm05.json +199 -0
  154. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_2.5um_bm05.json +224 -0
  155. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01_6.5um_bm05.json +218 -0
  156. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-01b_6.5um_bm05.json +224 -0
  157. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_2.5um_bm05.json +224 -0
  158. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-02_6.5um_bm05.json +224 -0
  159. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_2.5um_bm05.json +224 -0
  160. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-03_6.5um_bm05.json +224 -0
  161. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_2.5um_bm05.json +224 -0
  162. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-04_6.5um_bm05.json +224 -0
  163. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_2.5um_bm05.json +224 -0
  164. hoa_tools/data/metadata/metadata/S-20-29_brain_VOI-05_6.5um_bm05.json +224 -0
  165. hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_19.57um_bm18.json +240 -0
  166. hoa_tools/data/metadata/metadata/S-20-29_brain_complete-organ_25.33um_bm05.json +199 -0
  167. hoa_tools/data/metadata/metadata/S-20-29_heart_ROI-03_6.5um_bm05.json +205 -0
  168. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-01_2.5um_bm05.json +205 -0
  169. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-02_2.5um_bm05.json +199 -0
  170. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-04_6.5um_bm05.json +205 -0
  171. hoa_tools/data/metadata/metadata/S-20-29_heart_VOI-05b_6.5um_bm05.json +205 -0
  172. hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_19.89um_bm18.json +252 -0
  173. hoa_tools/data/metadata/metadata/S-20-29_heart_complete-organ_25.25um_bm05.json +199 -0
  174. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_1.4um_bm05.json +205 -0
  175. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-01_6.5um_bm05.json +205 -0
  176. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-02_6.5um_bm05.json +205 -0
  177. hoa_tools/data/metadata/metadata/S-20-29_kidney_VOI-03_6.5um_bm05.json +205 -0
  178. hoa_tools/data/metadata/metadata/S-20-29_kidney_complete-organ_25.38um_bm05.json +199 -0
  179. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-2.1_2.256um_bm18.json +266 -0
  180. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-3.1_2.256um_bm18.json +272 -0
  181. hoa_tools/data/metadata/metadata/S-20-29_lung_left_ROI-5.3_2.256um_bm18.json +272 -0
  182. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-01_6.5um_bm05.json +205 -0
  183. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-02_6.5um_bm05.json +205 -0
  184. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-04_6.5um_bm05.json +205 -0
  185. hoa_tools/data/metadata/metadata/S-20-29_lung_left_VOI-05_6.5um_bm05.json +205 -0
  186. hoa_tools/data/metadata/metadata/S-20-29_lung_left_complete-organ_25.31um_bm05.json +199 -0
  187. hoa_tools/dataset.py +229 -0
  188. hoa_tools/inventory.py +30 -0
  189. hoa_tools/metadata.py +765 -0
  190. hoa_tools/py.typed +0 -0
  191. hoa_tools/registration.py +112 -0
  192. hoa_tools/types.py +59 -0
  193. hoa_tools/voi.py +230 -0
  194. hoa_tools-1.0.dist-info/METADATA +106 -0
  195. hoa_tools-1.0.dist-info/RECORD +198 -0
  196. hoa_tools-1.0.dist-info/WHEEL +5 -0
  197. hoa_tools-1.0.dist-info/licenses/LICENSE.md +27 -0
  198. hoa_tools-1.0.dist-info/top_level.txt +1 -0
hoa_tools/metadata.py ADDED
@@ -0,0 +1,765 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: metadata-schema.json
3
+ # timestamp: 2025-04-10T13:29:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import date
8
+ from typing import Annotated, Literal
9
+
10
+ from pydantic import BaseModel, ConfigDict, Field, RootModel
11
+
12
+
13
+ class Orcid(RootModel[str]):
14
+ root: Annotated[
15
+ str,
16
+ Field(
17
+ description="ORCID iD",
18
+ pattern="^\\d{4}-\\d{4}-\\d{4}-\\d{3}[0-9X]{1}$",
19
+ title="Orcid",
20
+ ),
21
+ ]
22
+
23
+
24
+ class Contributor(BaseModel):
25
+ first_name: Annotated[str, Field(title="First Name")]
26
+ last_name: Annotated[str, Field(title="Last Name")]
27
+ orcid: Annotated[Orcid | None, Field(description="ORCID iD", title="Orcid")] = None
28
+ roles: Annotated[
29
+ list[
30
+ Literal[
31
+ "Conceptualization",
32
+ "Data curation",
33
+ "Formal analysis",
34
+ "Funding acquisition",
35
+ "Investigation",
36
+ "Methodology",
37
+ "Project administration",
38
+ "Resources",
39
+ "Software",
40
+ "Supervision",
41
+ "Validation",
42
+ "Vlisualization",
43
+ "Writing - original draft",
44
+ "Writing - review & editing",
45
+ ]
46
+ ],
47
+ Field(
48
+ description="Contributor role(s), following the Contributor Role Taxonomy (CReditT)",
49
+ title="Roles",
50
+ ),
51
+ ]
52
+
53
+
54
+ class Data(BaseModel):
55
+ shape: Annotated[
56
+ list,
57
+ Field(
58
+ description="Array shape for dataset.",
59
+ max_length=3,
60
+ min_length=3,
61
+ title="Shape",
62
+ ),
63
+ ]
64
+ voxel_size_um: Annotated[
65
+ float,
66
+ Field(
67
+ description="Isotropic size of a single voxel, in micrometers.",
68
+ gt=0.0,
69
+ title="Voxel size",
70
+ ),
71
+ ]
72
+ gcs_url: Annotated[
73
+ str,
74
+ Field(
75
+ description="URL to data in Google Cloud Storage. Starts with either n5:// or zarr:// to specify whether data is in N5 or OME-Zarr 0.4 format.",
76
+ title="Google cloud storage URL",
77
+ ),
78
+ ]
79
+
80
+
81
+ class Age(RootModel[int]):
82
+ root: Annotated[int, Field(description="Age in years at death.", ge=0, title="Age")]
83
+
84
+
85
+ class Weight(RootModel[float]):
86
+ root: Annotated[
87
+ float, Field(description="Weight in kg at death.", gt=0.0, title="Weight")
88
+ ]
89
+
90
+
91
+ class Height(RootModel[float]):
92
+ root: Annotated[
93
+ float, Field(description="Height in cm at death.", gt=0.0, title="Height")
94
+ ]
95
+
96
+
97
+ class Donor(BaseModel):
98
+ model_config = ConfigDict(
99
+ extra="forbid",
100
+ )
101
+ id: Annotated[str, Field(description="Unique donor ID.", title="ID")]
102
+ age: Annotated[
103
+ Age | Literal["<18", ">18"] | None,
104
+ Field(description="Age in years at death.", title="Age"),
105
+ ] = None
106
+ sex: Annotated[Literal["M", "F"] | None, Field(title="Sex")] = None
107
+ weight: Annotated[
108
+ Weight | None, Field(description="Weight in kg at death.", title="Weight")
109
+ ] = None
110
+ height: Annotated[
111
+ Height | None, Field(description="Height in cm at death.", title="Height")
112
+ ] = None
113
+ cause_of_death: Annotated[str | None, Field(title="Cause of death")] = None
114
+ date_of_death: Annotated[date | None, Field(title="Date of death")] = None
115
+ medical_history: Annotated[str | None, Field(title="Medical history")] = None
116
+ diabetes: Annotated[
117
+ Literal["Type 2", "No", "Yes"] | None, Field(title="Diabetes history")
118
+ ] = None
119
+ hypertension: Annotated[
120
+ Literal["Yes", "No"] | None, Field(title="Hypertension history")
121
+ ] = None
122
+ smoker: Annotated[
123
+ Literal["Never", "Yes"] | None, Field(title="Smoking history")
124
+ ] = None
125
+
126
+
127
+ class Proposal(BaseModel):
128
+ proposal_number: Annotated[
129
+ Literal["md1252", "md1290", "md1389"],
130
+ Field(description="Proposal number.", title="Proposal Number"),
131
+ ]
132
+ title: Annotated[str, Field(description="Proposal title.", title="Title")]
133
+ proposers: Annotated[
134
+ list[str], Field(description="Proposal proposers.", title="Proposers")
135
+ ]
136
+
137
+
138
+ class Registration(BaseModel):
139
+ source_dataset: Annotated[
140
+ str,
141
+ Field(
142
+ description="Name of dataset that is registered (this dataset).",
143
+ title="Source Dataset",
144
+ ),
145
+ ]
146
+ target_dataset: Annotated[
147
+ str,
148
+ Field(
149
+ description="Name of dataset that this dataset is registered to.",
150
+ title="Target Dataset",
151
+ ),
152
+ ]
153
+ translation: Annotated[
154
+ list,
155
+ Field(
156
+ description="Translation vector.",
157
+ max_length=3,
158
+ min_length=3,
159
+ title="Translation",
160
+ ),
161
+ ]
162
+ rotation: Annotated[
163
+ float, Field(description="Rotation in degrees about z-axis", title="Rotation")
164
+ ]
165
+ scale: Annotated[
166
+ float, Field(description="Isotropic scaling factor.", title="Scale")
167
+ ]
168
+
169
+
170
+ class PostMortemIntervalHours(RootModel[float]):
171
+ root: Annotated[
172
+ float,
173
+ Field(
174
+ description="Interval between death and fixation, in hours.",
175
+ ge=0.0,
176
+ title="Post-mortem interval",
177
+ ),
178
+ ]
179
+
180
+
181
+ class Sample(BaseModel):
182
+ organ: Annotated[
183
+ Literal[
184
+ "brain",
185
+ "breast",
186
+ "colon",
187
+ "eye",
188
+ "femaleGenitalia",
189
+ "kidney",
190
+ "liver",
191
+ "lung",
192
+ "heart",
193
+ "oesophagus",
194
+ "spinalCord",
195
+ "spine",
196
+ "spleen",
197
+ "heart+lungs",
198
+ "pancreas",
199
+ "placenta",
200
+ "prostate",
201
+ "testis",
202
+ "uterus",
203
+ "thoracicBlock",
204
+ "soleus",
205
+ "achillesTendon",
206
+ "knee",
207
+ "tibia",
208
+ ],
209
+ Field(description="Organ name.", title="Organ"),
210
+ ]
211
+ organ_context: Annotated[
212
+ str | None,
213
+ Field(
214
+ description="Human-readable context for location of the dataset within the whole organ. Only present for some zoom datasets.",
215
+ examples=["upper_lobe", "left", "tumor"],
216
+ title="Organ Context",
217
+ ),
218
+ ] = None
219
+ post_mortem_interval_hours: Annotated[
220
+ PostMortemIntervalHours | None,
221
+ Field(
222
+ description="Interval between death and fixation, in hours.",
223
+ title="Post-mortem interval",
224
+ ),
225
+ ] = None
226
+ fixation_method: Annotated[
227
+ Literal["immersion", "perfusion"] | None,
228
+ Field(description="Fixation preparation method.", title="Fixation Method"),
229
+ ] = None
230
+ fixation_medium: Annotated[
231
+ str | None, Field(description="Fixation medium", title="Fixation Medium")
232
+ ] = None
233
+ organ_infilled: Annotated[bool | str | None, Field(title="Organ Infilled")] = None
234
+ stabilisation_medium: Annotated[
235
+ Literal["agar cubes", "crushed agar", "beads"] | None,
236
+ Field(title="Stabilisation Medium"),
237
+ ] = None
238
+ degassing_method: Annotated[
239
+ Literal["inline", "vacuum", "vacuum+inline"] | None,
240
+ Field(title="Degassing Method"),
241
+ ] = None
242
+ scan_solvent: Annotated[
243
+ Literal["formalin", "ethanol"] | None,
244
+ Field(description="Scan medium solvent.", title="Scan Solvent"),
245
+ ] = None
246
+ scan_solvent_concentration: Annotated[
247
+ float | None,
248
+ Field(
249
+ description="Scan medium solvent concentration in percent.",
250
+ title="Solvent concentration",
251
+ ),
252
+ ] = None
253
+ scan_temperature: Annotated[
254
+ str | float | None,
255
+ Field(
256
+ description="Temperature during scan, in degees celsius (if a number).",
257
+ title="Scan Temperature",
258
+ ),
259
+ ] = "room temperature"
260
+
261
+
262
+ class Energy(RootModel[float]):
263
+ root: Annotated[
264
+ float,
265
+ Field(
266
+ description="Energy used during the scan, measured in keV.",
267
+ gt=0.0,
268
+ title="Energy",
269
+ ),
270
+ ]
271
+
272
+
273
+ class CurrentStart(RootModel[float]):
274
+ root: Annotated[
275
+ float,
276
+ Field(
277
+ description="Current of the synchrotron at the start of the scan, measured in mA.",
278
+ gt=0.0,
279
+ title="Current Start",
280
+ ),
281
+ ]
282
+
283
+
284
+ class NFrames(RootModel[int]):
285
+ root: Annotated[
286
+ int,
287
+ Field(
288
+ description="Number of frames acquired during the scan.",
289
+ gt=0,
290
+ title="Number of frames",
291
+ ),
292
+ ]
293
+
294
+
295
+ class NRef(RootModel[int]):
296
+ root: Annotated[
297
+ int,
298
+ Field(
299
+ description="Number of reference images collected during the scan.",
300
+ ge=0,
301
+ title="Number of references",
302
+ ),
303
+ ]
304
+
305
+
306
+ class NDark(RootModel[int]):
307
+ root: Annotated[
308
+ int,
309
+ Field(
310
+ description="Number of dark images (without illumination) collected during the scan.",
311
+ ge=0,
312
+ title="Number of darks",
313
+ ),
314
+ ]
315
+
316
+
317
+ class LatencyTime(RootModel[float]):
318
+ root: Annotated[
319
+ float,
320
+ Field(
321
+ description="Inactive time between active sensor times, measured in seconds.",
322
+ gt=0.0,
323
+ title="Latency Time",
324
+ ),
325
+ ]
326
+
327
+
328
+ class ExposureTime(RootModel[float]):
329
+ root: Annotated[
330
+ float,
331
+ Field(
332
+ description="Exposure time of a single frame, measured in seconds. This is the sub-frame time multiplied by the number of sub-frames.",
333
+ gt=0.0,
334
+ title="Exposure Time",
335
+ ),
336
+ ]
337
+
338
+
339
+ class SubframeTime(RootModel[float]):
340
+ root: Annotated[
341
+ float,
342
+ Field(
343
+ description="Exposure time of a single sub-frame, measured in seconds.",
344
+ gt=0.0,
345
+ title="Subframe Time",
346
+ ),
347
+ ]
348
+
349
+
350
+ class NSubframes(RootModel[int]):
351
+ root: Annotated[
352
+ int,
353
+ Field(
354
+ description="Number of frames accumulated per exposure.",
355
+ gt=0,
356
+ title="Number of sub-frames",
357
+ ),
358
+ ]
359
+
360
+
361
+ class NScans(RootModel[int]):
362
+ root: Annotated[
363
+ int,
364
+ Field(
365
+ description="Total number of scans. For a helical scan this is always 1. For a zseries this is the total number of scans concatenated to make the full data volume.",
366
+ gt=0,
367
+ title="Number of scans",
368
+ ),
369
+ ]
370
+
371
+
372
+ class ScanTime(RootModel[float]):
373
+ root: Annotated[
374
+ float,
375
+ Field(
376
+ description="Total duration of a single scan in seconds.",
377
+ gt=0.0,
378
+ title="Scan Time",
379
+ ),
380
+ ]
381
+
382
+
383
+ class OpticMagnification(RootModel[float]):
384
+ root: Annotated[
385
+ float,
386
+ Field(
387
+ description="Magnification in the optical setup.",
388
+ gt=0.0,
389
+ title="Optic Magnification",
390
+ ),
391
+ ]
392
+
393
+
394
+ class DistanceSourceSample(RootModel[float]):
395
+ root: Annotated[
396
+ float,
397
+ Field(
398
+ description="Distance between the source and the sample, measured in millimeters.",
399
+ gt=0.0,
400
+ title="Source-sample distance",
401
+ ),
402
+ ]
403
+
404
+
405
+ class DistanceSampleDetector(RootModel[float]):
406
+ root: Annotated[
407
+ float,
408
+ Field(
409
+ description="Distance between the sample and the detector, measured in millimeters.",
410
+ gt=0.0,
411
+ title="Sample-detector distance",
412
+ ),
413
+ ]
414
+
415
+
416
+ class SensorRoiXSize(RootModel[int]):
417
+ root: Annotated[
418
+ int,
419
+ Field(
420
+ description="Number of pixels in the x-dimension of the sensor's region of interest (ROI).",
421
+ gt=0,
422
+ title="Sensor Roi X Size",
423
+ ),
424
+ ]
425
+
426
+
427
+ class SensorRoiYSize(RootModel[int]):
428
+ root: Annotated[
429
+ int,
430
+ Field(
431
+ description="Number of pixels in the y-dimension of the sensor's region of interest (ROI).",
432
+ gt=0,
433
+ title="Sensor Roi Y Size",
434
+ ),
435
+ ]
436
+
437
+
438
+ class SensorBinning(RootModel[list]):
439
+ root: Annotated[
440
+ list,
441
+ Field(
442
+ description="Pixel binning on the sensor.",
443
+ max_length=2,
444
+ min_length=2,
445
+ title="Sensor Binning",
446
+ ),
447
+ ]
448
+
449
+
450
+ class XrayMagnification(RootModel[float]):
451
+ root: Annotated[
452
+ float,
453
+ Field(
454
+ description="Magnification of X-rays due to divergence between the source and detector.",
455
+ gt=0.0,
456
+ title="Xray Magnification",
457
+ ),
458
+ ]
459
+
460
+
461
+ class Scan(BaseModel):
462
+ date: Annotated[
463
+ date, Field(description="Date when the scan was performed.", title="Date")
464
+ ]
465
+ beamline: Annotated[
466
+ Literal["BM05", "BM18"],
467
+ Field(description="ESRF beamline where scan was performed.", title="Beamline"),
468
+ ]
469
+ energy: Annotated[
470
+ Energy | None,
471
+ Field(
472
+ description="Energy used during the scan, measured in keV.", title="Energy"
473
+ ),
474
+ ] = None
475
+ current_start: Annotated[
476
+ CurrentStart | None,
477
+ Field(
478
+ description="Current of the synchrotron at the start of the scan, measured in mA.",
479
+ title="Current Start",
480
+ ),
481
+ ] = None
482
+ filling_mode: Annotated[
483
+ Literal[
484
+ "16 bunch",
485
+ "7/8 multibunch",
486
+ "uniform multibunch",
487
+ "28*12+1 bunch",
488
+ "4 bunch",
489
+ ]
490
+ | None,
491
+ Field(
492
+ description="Mode of filling used in the synchrotron storage ring.",
493
+ title="Filling Mode",
494
+ ),
495
+ ] = None
496
+ n_frames: Annotated[
497
+ NFrames | None,
498
+ Field(
499
+ description="Number of frames acquired during the scan.",
500
+ title="Number of frames",
501
+ ),
502
+ ] = None
503
+ n_ref: Annotated[
504
+ NRef | None,
505
+ Field(
506
+ description="Number of reference images collected during the scan.",
507
+ title="Number of references",
508
+ ),
509
+ ] = None
510
+ n_dark: Annotated[
511
+ NDark | None,
512
+ Field(
513
+ description="Number of dark images (without illumination) collected during the scan.",
514
+ title="Number of darks",
515
+ ),
516
+ ] = None
517
+ latency_time: Annotated[
518
+ LatencyTime | None,
519
+ Field(
520
+ description="Inactive time between active sensor times, measured in seconds.",
521
+ title="Latency Time",
522
+ ),
523
+ ] = None
524
+ exposure_time: Annotated[
525
+ ExposureTime | None,
526
+ Field(
527
+ description="Exposure time of a single frame, measured in seconds. This is the sub-frame time multiplied by the number of sub-frames.",
528
+ title="Exposure Time",
529
+ ),
530
+ ] = None
531
+ subframe_time: Annotated[
532
+ SubframeTime | None,
533
+ Field(
534
+ description="Exposure time of a single sub-frame, measured in seconds.",
535
+ title="Subframe Time",
536
+ ),
537
+ ] = None
538
+ n_subframes: Annotated[
539
+ NSubframes | None,
540
+ Field(
541
+ description="Number of frames accumulated per exposure.",
542
+ title="Number of sub-frames",
543
+ ),
544
+ ] = None
545
+ scan_type: Annotated[
546
+ Literal["helical", "zseries"],
547
+ Field(description="Type of scan.", title="Scan Type"),
548
+ ]
549
+ scan_range: Annotated[
550
+ float,
551
+ Field(
552
+ description="Angular range of a single scan in degrees.",
553
+ gt=0.0,
554
+ title="Scan Range",
555
+ ),
556
+ ]
557
+ n_scans: Annotated[
558
+ NScans | None,
559
+ Field(
560
+ description="Total number of scans. For a helical scan this is always 1. For a zseries this is the total number of scans concatenated to make the full data volume.",
561
+ title="Number of scans",
562
+ ),
563
+ ] = None
564
+ acquisition: Annotated[
565
+ Literal["half", "quarter"] | None,
566
+ Field(description="Type of tomographic acquisition.", title="Acquisition"),
567
+ ] = None
568
+ z_step: Annotated[
569
+ float | None,
570
+ Field(description="Displacement in millimeters between scans.", title="Z Step"),
571
+ ] = None
572
+ scan_time: Annotated[
573
+ ScanTime | None,
574
+ Field(
575
+ description="Total duration of a single scan in seconds.", title="Scan Time"
576
+ ),
577
+ ] = None
578
+ filters: Annotated[
579
+ list[str] | None,
580
+ Field(description="List of filters used during the scan.", title="Filters"),
581
+ ] = None
582
+ scintillator: Annotated[
583
+ Literal[
584
+ "LuAG:Ce 1000um",
585
+ "LuAG:Ce 100um",
586
+ "LuAG:Ce 100um, reflective",
587
+ "LuAG:Ce 100um, lead glass meniscus",
588
+ "LuAG:Ce 2000um",
589
+ "LuAG:Ce 2000um, reflective",
590
+ "Multi LuAG:Ce 2000um, reflective",
591
+ "LuAG:Ce 200um",
592
+ "LuAG:Ce 250um",
593
+ "LuAG:Ce 250um, reflective",
594
+ "LuAG:Ce 25um",
595
+ "LuAG:Ce 50um",
596
+ "LuAG:Ce 50um, reflective",
597
+ "LuAG:Ce 500um",
598
+ "LySO:Ce 8.5um",
599
+ "LySO:Ce 23um",
600
+ "LySO:Ce 2000um, reflective",
601
+ "Gadox 60um",
602
+ "CSI trixell structured 650um, 5um pitch",
603
+ "GGG 8um",
604
+ "gagg1000_refl",
605
+ "dual-lso5000_refl",
606
+ ]
607
+ | None,
608
+ Field(
609
+ description="Scintillator used for converting X-rays to visible light.",
610
+ title="Scintillator",
611
+ ),
612
+ ] = None
613
+ optic: Annotated[
614
+ Literal[
615
+ "Zoom",
616
+ "DZoom",
617
+ "10x 0.4NA reflective optic",
618
+ "Hasselblad tandem optic 100mm/300mm",
619
+ "Hasselblad revolved 100 100",
620
+ "LAFIP2 optic with canon 50mm",
621
+ "Fixed x2",
622
+ "Fixed x1",
623
+ "Fixed x0.125",
624
+ "Fixed x0.1",
625
+ "Fixed x2.85",
626
+ "Fixed x10",
627
+ "Twinmic 5",
628
+ "Twinmic 10",
629
+ "Twinmic 20",
630
+ "Triplemic 10",
631
+ ]
632
+ | None,
633
+ Field(description="Optical components used during the scan", title="Optic"),
634
+ ] = None
635
+ optic_magnification: Annotated[
636
+ OpticMagnification | None,
637
+ Field(
638
+ description="Magnification in the optical setup.",
639
+ title="Optic Magnification",
640
+ ),
641
+ ] = None
642
+ distance_source_sample: Annotated[
643
+ DistanceSourceSample | None,
644
+ Field(
645
+ description="Distance between the source and the sample, measured in millimeters.",
646
+ title="Source-sample distance",
647
+ ),
648
+ ] = None
649
+ distance_sample_detector: Annotated[
650
+ DistanceSampleDetector | None,
651
+ Field(
652
+ description="Distance between the sample and the detector, measured in millimeters.",
653
+ title="Sample-detector distance",
654
+ ),
655
+ ] = None
656
+ sensor_name: Annotated[
657
+ Literal["PCO edge 4.2 CLHS", "Iris15"] | None,
658
+ Field(
659
+ description="Name of the sensor used during the scan.", title="Sensor Name"
660
+ ),
661
+ ] = None
662
+ sensor_mode: Annotated[
663
+ Literal["rolling shutter", "FFM"] | None,
664
+ Field(
665
+ description="Operating mode of the sensor during the scan.",
666
+ title="Sensor Mode",
667
+ ),
668
+ ] = None
669
+ sensor_roi_x_size: Annotated[
670
+ SensorRoiXSize | None,
671
+ Field(
672
+ description="Number of pixels in the x-dimension of the sensor's region of interest (ROI).",
673
+ title="Sensor Roi X Size",
674
+ ),
675
+ ] = None
676
+ sensor_roi_y_size: Annotated[
677
+ SensorRoiYSize | None,
678
+ Field(
679
+ description="Number of pixels in the y-dimension of the sensor's region of interest (ROI).",
680
+ title="Sensor Roi Y Size",
681
+ ),
682
+ ] = None
683
+ sensor_binning: Annotated[
684
+ SensorBinning | None,
685
+ Field(description="Pixel binning on the sensor.", title="Sensor Binning"),
686
+ ] = None
687
+ pixel_size: Annotated[
688
+ float,
689
+ Field(
690
+ description="Size of a pixel at the sample, measured in micrometers.",
691
+ gt=0.0,
692
+ title="Pixel Size",
693
+ ),
694
+ ]
695
+ xray_magnification: Annotated[
696
+ XrayMagnification | None,
697
+ Field(
698
+ description="Magnification of X-rays due to divergence between the source and detector.",
699
+ title="Xray Magnification",
700
+ ),
701
+ ] = None
702
+ technique: Annotated[
703
+ Literal["Hierarchical Phase-Contrast Tomography (HiP-CT)"],
704
+ Field(title="Experimental technique."),
705
+ ] = "Hierarchical Phase-Contrast Tomography (HiP-CT)"
706
+ experiment_type: Annotated[str | None, Field(title="Experiment Type")] = (
707
+ "Tomography"
708
+ )
709
+
710
+
711
+ class Citation(BaseModel):
712
+ title: Annotated[str, Field(description="Citation title", title="Title")]
713
+ contributors: Annotated[
714
+ list[Contributor],
715
+ Field(
716
+ description="Dataset contributors, listed alphabetically by name.",
717
+ title="Contributors",
718
+ ),
719
+ ]
720
+ doi: Annotated[str | None, Field(description="Dataset DOI", title="Doi")] = None
721
+ author_list: Annotated[
722
+ list[str],
723
+ Field(
724
+ description="Author list. If citing this data, please use this authorship list in the order given",
725
+ title="Author List",
726
+ ),
727
+ ]
728
+
729
+
730
+ class HOAMetadata(BaseModel):
731
+ model_config = ConfigDict(
732
+ extra="forbid",
733
+ )
734
+ name: Annotated[str, Field(description="Unique name for dataset.", title="Name")]
735
+ dataset_type: Annotated[
736
+ Literal["overview", "zoom"],
737
+ Field(
738
+ description="Type of dataset. Overview datasets contain the full sample. Zoom datasets contain a zoom into a particular volume of interest within the sample.",
739
+ title="Dataset Type",
740
+ ),
741
+ ]
742
+ voi: Annotated[
743
+ str,
744
+ Field(
745
+ description="Volume of interest name. For zoom datasets this gives a unique identifier among zoom datasets taken within the same sample.",
746
+ title="Volume of Interest",
747
+ ),
748
+ ]
749
+ data: Annotated[Data, Field(description="Data metadata")]
750
+ sample: Annotated[Sample, Field(description="Sample metadata")]
751
+ donor: Annotated[Donor, Field(description="Donor metadata")]
752
+ scan: Annotated[Scan, Field(description="Scan metadata")]
753
+ proposal: Annotated[Proposal, Field(description="Beamtime proposal metadata")]
754
+ registration: Annotated[
755
+ Registration | None,
756
+ Field(
757
+ description="Metadata mapping high resolution volume of interest datasets to a full organ dataset. Not present for full organ datasets.",
758
+ title="Registration parameters",
759
+ ),
760
+ ] = None
761
+ citation: Annotated[Citation, Field(title="Dataset citation")]
762
+ metadata_version: Annotated[
763
+ Literal["0.9"],
764
+ Field(description="Version of this metadata file.", title="Metadata Version"),
765
+ ] = "0.9"