Source code for voxelops.schemas.qsiparc
"""QSIParc schemas: inputs, outputs, and defaults."""
from dataclasses import dataclass
from pathlib import Path
from typing import Optional
from parcellate.interfaces.models import AtlasDefinition
[docs]
@dataclass
class QSIParcInputs:
"""Required inputs for QSIParc parcellation.
Parameters
----------
qsirecon_dir : Path
QSIRecon output directory.
participant : str
Participant label (without 'sub-' prefix).
output_dir : Optional[Path], optional
Output directory, by default None.
If None, defaults to qsirecon_dir parent.
session : Optional[str], optional
Session label (without 'ses-' prefix), by default None.
atlases : Optional[list[AtlasDefinition]], optional
List of atlas definitions, by default None.
n_jobs : Optional[int], optional
Number of jobs to run in parallel, by default None.
n_procs : Optional[int], optional
Number of processors to use, by default None.
"""
qsirecon_dir: Path
participant: str
output_dir: Optional[Path] = None
session: Optional[str] = None
atlases: Optional[list[AtlasDefinition]] = None
n_jobs: Optional[int] = None
n_procs: Optional[int] = None
[docs]
def __post_init__(self):
"""Ensure paths are Path objects."""
self.qsirecon_dir = Path(self.qsirecon_dir)
if self.output_dir:
self.output_dir = Path(self.output_dir)
[docs]
@dataclass
class QSIParcOutputs:
"""Expected outputs from QSIParc.
Parameters
----------
output_dir : Path
Parcellation output directory.
"""
output_dir: Path
[docs]
@classmethod
def from_inputs(cls, inputs: QSIParcInputs, output_dir: Path):
"""Generate expected output paths from inputs.
Parameters
----------
inputs : QSIParcInputs
QSIParcInputs instance.
output_dir : Path
Resolved output directory.
Returns
-------
QSIParcOutputs
QSIParcOutputs with expected paths.
"""
return cls(output_dir=output_dir)
[docs]
@dataclass
class QSIParcDefaults:
"""Default configuration for QSIParc (brain bank standards).
Parameters
----------
mask : Optional[str], optional
Mask to apply during parcellation ("gm", "wm", "brain", or path), by default "gm".
force : bool, optional
Whether to overwrite existing outputs, by default False.
background_label : int, optional
Label value for background voxels, by default 0.
resampling_target : Optional[str], optional
Resampling strategy ("data", "labels", "atlas", or None), by default "data".
log_level : str, optional
Logging verbosity (e.g., "INFO", "DEBUG"), by default "INFO".
n_jobs : Optional[int], optional
Number of jobs to run in parallel, by default 1.
n_procs : Optional[int], optional
Number of processors to use, by default 1.
"""
mask: Optional[str] = "gm"
force: bool = False
background_label: int = 0
resampling_target: Optional[str] = "data"
log_level: str = "INFO"
n_jobs: Optional[int] = 1
n_procs: Optional[int] = 1