Skip to content

hoa_tools.metadata

Metadata model for dataset metadata.

Age

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description='Age in years at death.', ge=0, title='Age')]

Citation pydantic-model

Bases: BaseModel

Fields:

author_list pydantic-field

author_list: list[str]

Author list. If citing this data, please use this authorship list in the order given

contributors pydantic-field

contributors: list[Contributor]

Dataset contributors, listed alphabetically by name.

doi pydantic-field

doi: str | None

Dataset DOI

title pydantic-field

title: str

Citation title

Contributor pydantic-model

Bases: BaseModel

Fields:

  • first_name (str)
  • last_name (str)
  • orcid (Orcid | None)
  • roles (list[Literal['Conceptualization', 'Data curation', 'Formal analysis', 'Funding acquisition', 'Investigation', 'Methodology', 'Project administration', 'Resources', 'Software', 'Supervision', 'Validation', 'Vlisualization', 'Writing - original draft', 'Writing - review & editing']])

first_name pydantic-field

first_name: str

last_name pydantic-field

last_name: str

orcid pydantic-field

orcid: Orcid | None

ORCID iD

roles pydantic-field

roles: list[Literal['Conceptualization', 'Data curation', 'Formal analysis', 'Funding acquisition', 'Investigation', 'Methodology', 'Project administration', 'Resources', 'Software', 'Supervision', 'Validation', 'Vlisualization', 'Writing - original draft', 'Writing - review & editing']]

Contributor role(s), following the Contributor Role Taxonomy (CReditT)

CurrentStart

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Current of the synchrotron at the start of the scan, measured in mA.', gt=0.0, title='Current Start')]

Data pydantic-model

Bases: BaseModel

Fields:

gcs_url pydantic-field

gcs_url: str

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.

shape pydantic-field

shape: list

Array shape for dataset.

voxel_size_um pydantic-field

voxel_size_um: float

Isotropic size of a single voxel, in micrometers.

DistanceSampleDetector

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Distance between the sample and the detector, measured in millimeters.', gt=0.0, title='Sample-detector distance')]

DistanceSourceSample

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Distance between the source and the sample, measured in millimeters.', gt=0.0, title='Source-sample distance')]

Donor pydantic-model

Bases: BaseModel

Config:

  • extra: forbid

Fields:

age pydantic-field

age: Age | Literal['<18', '>18'] | None

Age in years at death.

cause_of_death pydantic-field

cause_of_death: str | None

diabetes pydantic-field

diabetes: Literal['Type 2', 'No', 'Yes'] | None

height pydantic-field

height: Height | None

Height in cm at death.

hypertension pydantic-field

hypertension: Literal['Yes', 'No'] | None

id pydantic-field

id: str

Unique donor ID.

medical_history pydantic-field

medical_history: str | None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

sex pydantic-field

sex: Literal['M', 'F'] | None

smoker pydantic-field

smoker: Literal['Never', 'Yes'] | None

weight pydantic-field

weight: Weight | None

Weight in kg at death.

Energy

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Energy used during the scan, measured in keV.', gt=0.0, title='Energy')]

ExposureTime

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Exposure time of a single frame, measured in seconds. This is the sub-frame time multiplied by the number of sub-frames.', gt=0.0, title='Exposure Time')]

HOAMetadata pydantic-model

Bases: BaseModel

Fields:

citation pydantic-field

citation: Citation

data pydantic-field

data: Data

Data metadata

dataset_type pydantic-field

dataset_type: Literal['overview', 'zoom']

Type of dataset. Overview datasets contain the full sample. Zoom datasets contain a zoom into a particular volume of interest within the sample.

donor pydantic-field

donor: Donor

Donor metadata

metadata_version pydantic-field

metadata_version: Literal['1.1']

Version of this metadata file.

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

name pydantic-field

name: str

Unique name for dataset.

proposal pydantic-field

proposal: Proposal

Beamtime proposal metadata

registration pydantic-field

registration: Registration | None

Metadata mapping high resolution volume of interest datasets to a full organ dataset. Not present for full organ datasets.

sample pydantic-field

sample: Sample

Sample metadata

scan pydantic-field

scan: Scan

Scan metadata

voi pydantic-field

voi: str

Volume of interest name. For zoom datasets this gives a unique identifier among zoom datasets taken within the same sample.

Height

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Height in cm at death.', gt=0.0, title='Height')]

LatencyTime

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Inactive time between active sensor times, measured in seconds.', gt=0.0, title='Latency Time')]

NDark

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description='Number of dark images (without illumination) collected during the scan.', ge=0, title='Number of darks')]

NFrames

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description='Number of frames acquired during the scan.', gt=0, title='Number of frames')]

NRef

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description='Number of reference images collected during the scan.', ge=0, title='Number of references')]

NScans

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(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.', gt=0, title='Number of scans')]

NSubframes

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description='Number of frames accumulated per exposure.', gt=0, title='Number of sub-frames')]

OpticMagnification

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Magnification in the optical setup.', gt=0.0, title='Optic Magnification')]

Orcid

Bases: RootModel[str]

root instance-attribute

root: Annotated[str, Field(description='ORCID iD', pattern='^\\d{4}-\\d{4}-\\d{4}-\\d{3}[0-9X]{1}$', title='Orcid')]

PostMortemIntervalHours

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Interval between death and fixation, in hours.', ge=0.0, title='Post-mortem interval')]

Proposal pydantic-model

Bases: BaseModel

Fields:

proposal_number pydantic-field

proposal_number: Literal['md1252', 'md1290', 'md1389', 'md1373']

Proposal number.

proposers pydantic-field

proposers: list[str]

Proposal proposers.

title pydantic-field

title: str

Proposal title.

Registration pydantic-model

Bases: BaseModel

Fields:

rotation pydantic-field

rotation: float

Rotation in degrees about z-axis

scale pydantic-field

scale: float

Isotropic scaling factor.

source_dataset pydantic-field

source_dataset: str

Name of dataset that is registered (this dataset).

target_dataset pydantic-field

target_dataset: str

Name of dataset that this dataset is registered to.

translation pydantic-field

translation: list

Translation vector.

Sample pydantic-model

Bases: BaseModel

Fields:

degassing_method pydantic-field

degassing_method: Literal['inline', 'vacuum', 'vacuum+inline', 'not degassed'] | None

fixation_medium pydantic-field

fixation_medium: Literal['formalin', 'ethanol', 'paraformaldehyde'] | None

Fixation medium

fixation_method pydantic-field

fixation_method: Literal['immersion', 'perfusion'] | None

Fixation preparation method.

organ pydantic-field

organ: Literal['achillesTendon', 'arm', 'brain', 'breast', 'clitoris', 'colon', 'eye', 'femaleGenitalia', 'heart', 'kidney', 'knee', 'larynx', 'liver', 'lung', 'oesophagus', 'pancreas', 'placenta', 'prostate', 'soleus', 'spinalCord', 'spine', 'spleen', 'testis', 'thoracicBlock', 'tibia', 'uterus', 'vagina']

Organ name.

organ_context pydantic-field

organ_context: str | None

Human-readable context for location of the dataset within the whole organ. Only present for some zoom datasets.

organ_infilled pydantic-field

organ_infilled: bool | str | None

post_mortem_interval_hours pydantic-field

post_mortem_interval_hours: PostMortemIntervalHours | None

Interval between death and fixation, in hours.

scan_solvent pydantic-field

scan_solvent: Literal['formalin', 'ethanol', 'paraffin block'] | None

Scan medium solvent.

scan_solvent_concentration pydantic-field

scan_solvent_concentration: float | None

Scan medium solvent concentration in percent.

scan_temperature pydantic-field

scan_temperature: str | float | None

Temperature during scan, in degrees celsius (if a number).

stabilisation_medium pydantic-field

stabilisation_medium: Literal['agar', 'agar spaghetti', 'agar cubes', 'crushed agar', 'acrylamic spheres', 'paraffin', 'liquid'] | None

Scan pydantic-model

Bases: BaseModel

Fields:

acquisition pydantic-field

acquisition: Literal['half', 'quarter'] | None

Type of tomographic acquisition.

beamline pydantic-field

beamline: Literal['BM05', 'BM18']

ESRF beamline where scan was performed.

current_start pydantic-field

current_start: CurrentStart | None

Current of the synchrotron at the start of the scan, measured in mA.

date pydantic-field

date: date

Date when the scan was performed.

distance_sample_detector pydantic-field

distance_sample_detector: DistanceSampleDetector | None

Distance between the sample and the detector, measured in millimeters.

distance_source_sample pydantic-field

distance_source_sample: DistanceSourceSample | None

Distance between the source and the sample, measured in millimeters.

energy pydantic-field

energy: Energy | None

Energy used during the scan, measured in keV.

experiment_type pydantic-field

experiment_type: str | None

exposure_time pydantic-field

exposure_time: ExposureTime | None

Exposure time of a single frame, measured in seconds. This is the sub-frame time multiplied by the number of sub-frames.

filling_mode pydantic-field

filling_mode: Literal['16 bunch', '7/8 multibunch', 'uniform multibunch', '28*12+1 bunch', '4 bunch', '2*1/3 multibunch'] | None

Mode of filling used in the synchrotron storage ring.

filters pydantic-field

filters: list[str] | None

List of filters used during the scan.

latency_time pydantic-field

latency_time: LatencyTime | None

Inactive time between active sensor times, measured in seconds.

n_dark pydantic-field

n_dark: NDark | None

Number of dark images (without illumination) collected during the scan.

n_frames pydantic-field

n_frames: NFrames | None

Number of frames acquired during the scan.

n_ref pydantic-field

n_ref: NRef | None

Number of reference images collected during the scan.

n_scans pydantic-field

n_scans: NScans | None

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.

n_subframes pydantic-field

n_subframes: NSubframes | None

Number of frames accumulated per exposure.

optic pydantic-field

optic: Literal['Zoom', 'DZoom', '10x 0.4NA reflective optic', 'Hasselblad tandem optic 100mm/300mm', 'Hasselblad revolved 100 100', 'LAFIP2 optic with canon 50mm', 'Fixed x10', 'Fixed x2.85', 'Fixed x2', 'Fixed x1', 'Fixed x0.5', 'Fixed x0.125', 'Fixed x0.1', 'Twinmic 5', 'Twinmic 10', 'Twinmic 20', 'Triplemic 10', 'Otus 1x'] | None

Optical components used during the scan

optic_magnification pydantic-field

optic_magnification: OpticMagnification | None

Magnification in the optical setup.

pixel_size pydantic-field

pixel_size: float

Size of a pixel at the sample, measured in micrometers.

psho pydantic-field

psho: float | None

Primary slit horizontal offset, measured in millimeters

scan_range pydantic-field

scan_range: float

Angular range of a single scan in degrees.

scan_time pydantic-field

scan_time: ScanTime | None

Total duration of a single scan in seconds.

scan_type pydantic-field

scan_type: Literal['helical', 'zseries']

Type of scan.

scintillator pydantic-field

scintillator: Literal['LuAG:Ce 1000um', 'LuAG:Ce 100um', 'LuAG:Ce 100um, reflective', 'LuAG:Ce 100um, lead glass meniscus', 'LuAG:Ce 2000um', 'LuAG:Ce 2000um, reflective', 'Multi LuAG:Ce 2000um, reflective', 'LuAG:Ce 200um', 'LuAG:Ce 250um', 'LuAG:Ce 250um, reflective', 'LuAG:Ce 25um', 'LuAG:Ce 50um', 'LuAG:Ce 50um, reflective', 'LuAG:Ce 500um', 'LySO:Ce 8.5um', 'LySO:Ce 23um', 'LySO:Ce 2000um, reflective', 'LySO:Ce 24um', 'Gadox 60um', 'CSI trixell structured 650um, 5um pitch', 'GGG 8um', 'GGG 20um', 'GAGG 1000um, reflective', 'GAGG 250um, reflective', 'GAGG 100um, reflective', 'GAGG 50um, reflective', 'Dual LySO:Ce 5000um, reflective'] | None

Scintillator used for converting X-rays to visible light.

sensor_binning pydantic-field

sensor_binning: SensorBinning | None

Pixel binning on the sensor.

sensor_mode pydantic-field

sensor_mode: Literal['rolling shutter', 'FFM'] | None

Operating mode of the sensor during the scan.

sensor_name pydantic-field

sensor_name: Literal['PCO edge 4.2 CLHS', 'Iris15'] | None

Name of the sensor used during the scan.

sensor_roi_x_size pydantic-field

sensor_roi_x_size: SensorRoiXSize | None

Number of pixels in the x-dimension of the sensor's region of interest (ROI).

sensor_roi_y_size pydantic-field

sensor_roi_y_size: SensorRoiYSize | None

Number of pixels in the y-dimension of the sensor's region of interest (ROI).

subframe_time pydantic-field

subframe_time: SubframeTime | None

Exposure time of a single sub-frame, measured in seconds.

technique pydantic-field

technique: Literal['Hierarchical Phase-Contrast Tomography (HiP-CT)']

xray_magnification pydantic-field

xray_magnification: XrayMagnification | None

Magnification of X-rays due to divergence between the source and detector.

z_step pydantic-field

z_step: float | None

Displacement in millimeters between scans.

ScanTime

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Total duration of a single scan in seconds.', gt=0.0, title='Scan Time')]

SensorBinning

Bases: RootModel[list]

root instance-attribute

root: Annotated[list, Field(description='Pixel binning on the sensor.', max_length=2, min_length=2, title='Sensor Binning')]

SensorRoiXSize

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description="Number of pixels in the x-dimension of the sensor's region of interest (ROI).", gt=0, title='Sensor Roi X Size')]

SensorRoiYSize

Bases: RootModel[int]

root instance-attribute

root: Annotated[int, Field(description="Number of pixels in the y-dimension of the sensor's region of interest (ROI).", gt=0, title='Sensor Roi Y Size')]

SubframeTime

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Exposure time of a single sub-frame, measured in seconds.', gt=0.0, title='Subframe Time')]

Weight

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Weight in kg at death.', gt=0.0, title='Weight')]

XrayMagnification

Bases: RootModel[float]

root instance-attribute

root: Annotated[float, Field(description='Magnification of X-rays due to divergence between the source and detector.', gt=0.0, title='Xray Magnification')]