|
@@ -18,7 +18,7 @@ https://sites.google.com/site/hipposubfields/home
|
|
|
>>> print(volume_file.read_volume_series())
|
|
|
"""
|
|
|
|
|
|
-import os
|
|
|
+import pathlib
|
|
|
import re
|
|
|
import typing
|
|
|
|
|
@@ -32,21 +32,20 @@ class IntracranialVolumeFile(freesurfer_volume_reader.VolumeFile):
|
|
|
FILENAME_REGEX = re.compile(r"^(?P<s>\w+)_icv.txt$")
|
|
|
|
|
|
def __init__(self, path: str):
|
|
|
- self._absolute_path = os.path.abspath(path)
|
|
|
- filename_match = self.FILENAME_REGEX.match(os.path.basename(path))
|
|
|
+ self._absolute_path = pathlib.Path(path).absolute()
|
|
|
+ filename_match = self.FILENAME_REGEX.match(self._absolute_path.name)
|
|
|
assert filename_match, self._absolute_path
|
|
|
self.subject = filename_match.groupdict()["s"]
|
|
|
super().__init__(path=path)
|
|
|
|
|
|
@property
|
|
|
def absolute_path(self):
|
|
|
- return self._absolute_path
|
|
|
+ return str(self._absolute_path)
|
|
|
|
|
|
def read_volume_mm3(self) -> float:
|
|
|
- with open(self.absolute_path, "r") as volume_file:
|
|
|
- subject, icv = volume_file.read().rstrip().split(" ")
|
|
|
- assert subject == self.subject, (subject, self.subject)
|
|
|
- return float(icv)
|
|
|
+ subject, icv = self._absolute_path.read_text().rstrip().split(" ")
|
|
|
+ assert subject == self.subject, (subject, self.subject)
|
|
|
+ return float(icv)
|
|
|
|
|
|
def read_volume_series(self) -> pandas.Series:
|
|
|
return pandas.Series(
|
|
@@ -66,8 +65,8 @@ class HippocampalSubfieldsVolumeFile(freesurfer_volume_reader.SubfieldVolumeFile
|
|
|
FILENAME_REGEX = re.compile(FILENAME_PATTERN)
|
|
|
|
|
|
def __init__(self, path: str):
|
|
|
- self._absolute_path = os.path.abspath(path)
|
|
|
- filename_match = self.FILENAME_REGEX.match(os.path.basename(path))
|
|
|
+ self._absolute_path = pathlib.Path(path).absolute()
|
|
|
+ filename_match = self.FILENAME_REGEX.match(self._absolute_path.name)
|
|
|
assert filename_match, self._absolute_path
|
|
|
filename_groups = filename_match.groupdict()
|
|
|
self.subject = filename_groups["s"]
|
|
@@ -77,25 +76,24 @@ class HippocampalSubfieldsVolumeFile(freesurfer_volume_reader.SubfieldVolumeFile
|
|
|
|
|
|
@property
|
|
|
def absolute_path(self):
|
|
|
- return self._absolute_path
|
|
|
+ return str(self._absolute_path)
|
|
|
|
|
|
def read_volumes_mm3(self) -> typing.Dict[str, float]:
|
|
|
subfield_volumes = {}
|
|
|
- with open(self.absolute_path, "r") as volume_file:
|
|
|
- for line in volume_file.read().rstrip().split("\n"):
|
|
|
-
|
|
|
-
|
|
|
- (
|
|
|
- subject,
|
|
|
- hemisphere,
|
|
|
- subfield_name,
|
|
|
- slices_number_str,
|
|
|
- volume_mm3_str,
|
|
|
- ) = line.split(" ")
|
|
|
- assert self.subject == subject
|
|
|
- assert self.hemisphere == hemisphere
|
|
|
- assert int(slices_number_str) >= 0
|
|
|
- subfield_volumes[subfield_name] = float(volume_mm3_str)
|
|
|
+ for line in self._absolute_path.read_text().rstrip().split("\n"):
|
|
|
+
|
|
|
+
|
|
|
+ (
|
|
|
+ subject,
|
|
|
+ hemisphere,
|
|
|
+ subfield_name,
|
|
|
+ slices_number_str,
|
|
|
+ volume_mm3_str,
|
|
|
+ ) = line.split(" ")
|
|
|
+ assert self.subject == subject
|
|
|
+ assert self.hemisphere == hemisphere
|
|
|
+ assert int(slices_number_str) >= 0
|
|
|
+ subfield_volumes[subfield_name] = float(volume_mm3_str)
|
|
|
return subfield_volumes
|
|
|
|
|
|
def read_volumes_dataframe(self) -> pandas.DataFrame:
|