Browse Source

rename/move read_hippocampal_volumes_mm3 -> freesurfer.HippocampalSubfieldsVolumeFile.read_volumes_mm3()

Fabian Peter Hammerle 5 years ago
parent
commit
55049efc5c

+ 1 - 0
README.md

@@ -35,6 +35,7 @@ from freesurfer_volume_reader.freesurfer import HippocampalSubfieldsVolumeFile
 from freesurfer_volume_reader import read_hippocampal_volume_file_dataframe
 
 for volume_file in HippocampalSubfieldsVolumeFile.find('/my/freesurfer/subjects'):
+    print(volume_file.read_volumes_mm3())
     print(read_hippocampal_volume_file_dataframe(volume_file))
 ```
 

+ 1 - 12
freesurfer_volume_reader/__init__.py

@@ -18,22 +18,11 @@ def remove_group_names_from_regex(regex_pattern: str) -> str:
     return re.sub(r'\?P<.+?>', '', regex_pattern)
 
 
-def read_hippocampal_volumes_mm3(volume_file_path: str) -> dict:
-    subfield_volumes = {}
-    with open(volume_file_path, 'r') as volume_file:
-        for line in volume_file.read().rstrip().split('\n'):
-            # https://github.com/freesurfer/freesurfer/blob/release_6_0_0/HippoSF/src/segmentSubjectT1T2_autoEstimateAlveusML.m#L8
-            # https://github.com/freesurfer/freesurfer/blob/release_6_0_0/HippoSF/src/segmentSubjectT1T2_autoEstimateAlveusML.m#L1946
-            subfield_name, subfield_volume_mm3_str = line.split(' ')
-            subfield_volumes[subfield_name] = float(subfield_volume_mm3_str)
-    return subfield_volumes
-
-
 def read_hippocampal_volume_file_dataframe(volume_file: HippocampalSubfieldsVolumeFile,
                                            ) -> pandas.DataFrame:
     volumes_frame = pandas.DataFrame([
         {'subfield': s, 'volume_mm^3': v}
-        for s, v in read_hippocampal_volumes_mm3(volume_file.absolute_path).items()
+        for s, v in volume_file.read_volumes_mm3().items()
     ])
     volumes_frame['subject'] = volume_file.subject
     volumes_frame['hemisphere'] = volume_file.hemisphere

+ 10 - 1
freesurfer_volume_reader/freesurfer.py

@@ -2,7 +2,6 @@ import os
 import re
 import typing
 
-# pylint: disable=too-few-public-methods
 class HippocampalSubfieldsVolumeFile:
 
     # https://surfer.nmr.mgh.harvard.edu/fswiki/HippocampalSubfields
@@ -28,6 +27,16 @@ class HippocampalSubfieldsVolumeFile:
     def absolute_path(self):
         return 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'):
+                # https://github.com/freesurfer/freesurfer/blob/release_6_0_0/HippoSF/src/segmentSubjectT1T2_autoEstimateAlveusML.m#L8
+                # https://github.com/freesurfer/freesurfer/blob/release_6_0_0/HippoSF/src/segmentSubjectT1T2_autoEstimateAlveusML.m#L1946
+                subfield_name, subfield_volume_mm3_str = line.split(' ')
+                subfield_volumes[subfield_name] = float(subfield_volume_mm3_str)
+        return subfield_volumes
+
     @classmethod
     def find(cls, root_dir_path: str,
              filename_regex: typing.Pattern = FILENAME_REGEX) -> typing.Iterator[str]:

+ 28 - 0
tests/freesurfer_test.py

@@ -48,6 +48,34 @@ def test_hippocampal_subfields_volume_file_init_invalid(volume_file_path):
         HippocampalSubfieldsVolumeFile(path=volume_file_path)
 
 
+@pytest.mark.parametrize(('volume_file_path', 'expected_volumes'), [
+    (os.path.join(SUBJECTS_DIR, 'bert/mri/lh.hippoSfVolumes-T1.v10.txt'),
+     {'Hippocampal_tail': 123.456789,
+      'subiculum': 234.567891,
+      'CA1': 34.567891,
+      'hippocampal-fissure': 345.678912,
+      'presubiculum': 456.789123,
+      'parasubiculum': 45.678912,
+      'molecular_layer_HP': 56.789123,
+      'GC-ML-DG': 567.891234,
+      'CA3': 678.912345,
+      'CA4': 789.123456,
+      'fimbria': 89.123456,
+      'HATA': 91.234567,
+      'Whole_hippocampus': 1234.567899}),
+])
+def test_hippocampal_subfields_volume_file_read_volumes_mm3(volume_file_path, expected_volumes):
+    volume_file = HippocampalSubfieldsVolumeFile(path=volume_file_path)
+    assert expected_volumes == volume_file.read_volumes_mm3()
+
+
+def test_hippocampal_subfields_volume_file_read_volumes_mm3_not_found():
+    volume_file = HippocampalSubfieldsVolumeFile(
+        path=os.path.join(SUBJECTS_DIR, 'non-existing', 'lh.hippoSfVolumes-T1.v10.txt'))
+    with pytest.raises(FileNotFoundError):
+        volume_file.read_volumes_mm3()
+
+
 @pytest.mark.parametrize(('root_dir_path', 'expected_file_paths'), [
     (SUBJECTS_DIR,
      {os.path.join(SUBJECTS_DIR, 'alice', 'mri', 'lh.hippoSfVolumes-T1.v10.txt'),

+ 0 - 27
tests/hippocampus_test.py

@@ -23,33 +23,6 @@ def test_remove_group_names_from_regex(source_pattern, expected_pattern):
     )
 
 
-@pytest.mark.parametrize(('volume_file_path', 'expected_volumes'), [
-    (os.path.join(SUBJECTS_DIR, 'bert/mri/lh.hippoSfVolumes-T1.v10.txt'),
-     {'Hippocampal_tail': 123.456789,
-      'subiculum': 234.567891,
-      'CA1': 34.567891,
-      'hippocampal-fissure': 345.678912,
-      'presubiculum': 456.789123,
-      'parasubiculum': 45.678912,
-      'molecular_layer_HP': 56.789123,
-      'GC-ML-DG': 567.891234,
-      'CA3': 678.912345,
-      'CA4': 789.123456,
-      'fimbria': 89.123456,
-      'HATA': 91.234567,
-      'Whole_hippocampus': 1234.567899}),
-])
-def test_read_hippocampal_volumes_mm3(volume_file_path, expected_volumes):
-    assert expected_volumes == freesurfer_volume_reader.read_hippocampal_volumes_mm3(
-        volume_file_path)
-
-
-def test_read_hippocampal_volumes_mm3_not_found():
-    with pytest.raises(FileNotFoundError):
-        freesurfer_volume_reader.read_hippocampal_volumes_mm3(
-            os.path.join(SUBJECTS_DIR, 'non-existing', 'lh.hippoSfVolumes-T1.v10.txt'))
-
-
 @pytest.mark.parametrize(('volume_file_path', 'expected_dataframe'), [
     (os.path.join(SUBJECTS_DIR, 'alice', 'mri', 'lh.hippoSfVolumes-T1.v10.txt'),
      pandas.DataFrame({