__init__.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. """
  2. Read hippocampal subfield volumes computed by Freesurfer
  3. https://surfer.nmr.mgh.harvard.edu/fswiki/HippocampalSubfields
  4. >>> from freesurfer_volume_reader.freesurfer import HippocampalSubfieldsVolumeFile
  5. >>>
  6. >>> for volume_file in HippocampalSubfieldsVolumeFile.find('/my/freesurfer/subjects'):
  7. >>> print(volume_file.read_volumes_mm3())
  8. >>> print(volume_file.read_volumes_dataframe())
  9. """
  10. import abc
  11. import os
  12. import typing
  13. class VolumeFile(metaclass=abc.ABCMeta):
  14. FILENAME_REGEX = NotImplemented
  15. @property
  16. @abc.abstractmethod
  17. def absolute_path(self):
  18. raise NotImplementedError()
  19. @abc.abstractmethod
  20. def read_volumes_mm3(self) -> typing.Dict[str, float]:
  21. raise NotImplementedError()
  22. @classmethod
  23. def find(cls, root_dir_path: str,
  24. filename_regex: typing.Optional[typing.Pattern] = None) -> typing.Iterator[str]:
  25. if not filename_regex:
  26. filename_regex = cls.FILENAME_REGEX
  27. for dirpath, _, filenames in os.walk(root_dir_path):
  28. for filename in filter(filename_regex.search, filenames):
  29. yield cls(path=os.path.join(dirpath, filename))