Skip to content

nifti_folders

oxytcmri.infrastructure.importers.nifti_folders

Importer that extracts MRI exams data from folders containing Nifti files and stores them into appropriate repositories.

Classes:

Name Description
NiftiFoldersImporter

Importer for NIfTI folders that extracts MRI exams data and stores them in repositories.

NiftiFoldersImporter(base_path, subject_repository=None, mri_exam_repository=None, atlas_repository=None)

Bases: Importer

Importer for NIfTI folders that extracts MRI exams data and stores them in repositories.

This class uses a NiftiFoldersMRIExamRepository to scan folders and extract MRI data, then stores the extracted data in persistent repositories.

Parameters:

Name Type Description Default
base_path str

Path to the folder containing NIfTI data folders

required
subject_repository SubjectRepository

Repository for storing subject information

None
mri_exam_repository MRIExamRepository

Persistent repository for storing MRI exam data

None
atlas_repository AtlasRepository

Repository for storing atlas information

None

Methods:

Name Description
register_repository

Register the needed repositories for the importer.

import_data

Import MRI exam data from NIfTI folders and store in repositories.

check_repositories

Check if subject and MRI exam repositories are set.

Attributes:

Name Type Description
base_path
nifti_folders_repository
subject_repository
mri_exam_repository
Source code in oxytcmri/infrastructure/importers/nifti_folders.py
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def __init__(
        self,
        base_path: str,
        subject_repository: SubjectRepository = None,
        mri_exam_repository: MRIExamRepository = None,
        atlas_repository: AtlasRepository = None,
):
    self.base_path = Path(base_path)
    # Ensure that the base path exists
    if not self.base_path.exists():
        raise FileNotFoundError(f"Path '{base_path}' does not exist.")
    self.nifti_folders_repository = NiftiFoldersMRIExamRepository(base_path, atlas_repository)

    # persistent repositories
    self.subject_repository = subject_repository
    self.mri_exam_repository = mri_exam_repository

base_path = Path(base_path) instance-attribute

nifti_folders_repository = NiftiFoldersMRIExamRepository(base_path, atlas_repository) instance-attribute

subject_repository = subject_repository instance-attribute

mri_exam_repository = mri_exam_repository instance-attribute

register_repository(repositories)

Register the needed repositories for the importer.

Parameters:

Name Type Description Default
repositories list[Repository]

List of repositories to register.

required
Source code in oxytcmri/infrastructure/importers/nifti_folders.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def register_repository(self, repositories: list[Repository]):
    """
    Register the needed repositories for the importer.

    Parameters
    ----------
    repositories : list[Repository]
        List of repositories to register.
    """
    for repository in repositories:
        if isinstance(repository, SubjectRepository):
            self.subject_repository = repository
        elif isinstance(repository, MRIExamRepository):
            self.mri_exam_repository = repository
        elif isinstance(repository, AtlasRepository):
            self.nifti_folders_repository.atlas_repository = repository

import_data()

Import MRI exam data from NIfTI folders and store in repositories.

This method scans the NIfTI folders, extracts MRI exam data, and stores the data in the subject and MRI exam repositories.

Source code in oxytcmri/infrastructure/importers/nifti_folders.py
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
def import_data(self) -> None:
    """
    Import MRI exam data from NIfTI folders and store in repositories.

    This method scans the NIfTI folders, extracts MRI exam data, and stores
    the data in the subject and MRI exam repositories.
    """
    logger = getLogger(__name__)
    logger.info("Starting import of NIfTI folders...")

    self.check_repositories()

    # Scan folders and get MRI exams
    mri_exams = self.nifti_folders_repository.scan_nifti_folders()

    # Import each MRI exam
    for mri_exam in mri_exams:
        self._import_mri_exam(mri_exam)
        logger.info(f"Imported MRI exam: {mri_exam.id}")

    logger.info("Import of NIfTI folders completed.")

check_repositories()

Check if subject and MRI exam repositories are set.

Raises:

Type Description
ValueError

If subject or MRI exam repository is not set.

Source code in oxytcmri/infrastructure/importers/nifti_folders.py
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
def check_repositories(self) -> None:
    """
    Check if subject and MRI exam repositories are set.

    Raises
    ------
    ValueError
        If subject or MRI exam repository is not set.
    """
    if self.subject_repository is None:
        raise ValueError("Subject repository is not set.")
    if self.mri_exam_repository is None:
        raise ValueError("MRI exam repository is not set.")
    if self.nifti_folders_repository is None:
        raise ValueError("Nifti folders repository is not set.")
    if self.nifti_folders_repository.atlas_repository is None:
        raise ValueError("Atlas repository is not set in Nifti folders repository.")