Browse Source

moved freesurfer.HippocampalSubfieldsVolumeFile.find() to VolumeFile.find()

Fabian Peter Hammerle 5 years ago
parent
commit
a0c0d5b52f

+ 12 - 0
freesurfer_volume_reader/__init__.py

@@ -11,11 +11,14 @@ https://surfer.nmr.mgh.harvard.edu/fswiki/HippocampalSubfields
 """
 
 import abc
+import os
 import typing
 
 
 class VolumeFile(metaclass=abc.ABCMeta):
 
+    FILENAME_REGEX = NotImplemented
+
     @property
     @abc.abstractmethod
     def absolute_path(self):
@@ -24,3 +27,12 @@ class VolumeFile(metaclass=abc.ABCMeta):
     @abc.abstractmethod
     def read_volumes_mm3(self) -> typing.Dict[str, float]:
         raise NotImplementedError()
+
+    @classmethod
+    def find(cls, root_dir_path: str,
+             filename_regex: typing.Optional[typing.Pattern] = None) -> typing.Iterator[str]:
+        if not filename_regex:
+            filename_regex = cls.FILENAME_REGEX
+        for dirpath, _, filenames in os.walk(root_dir_path):
+            for filename in filter(filename_regex.search, filenames):
+                yield cls(path=os.path.join(dirpath, filename))

+ 1 - 0
freesurfer_volume_reader/ashs.py

@@ -16,6 +16,7 @@ import typing
 
 import freesurfer_volume_reader
 
+
 class HippocampalSubfieldsVolumeFile(freesurfer_volume_reader.VolumeFile):
 
     # https://sites.google.com/site/hipposubfields/tutorial#TOC-Viewing-ASHS-Segmentation-Results

+ 0 - 7
freesurfer_volume_reader/freesurfer.py

@@ -65,10 +65,3 @@ class HippocampalSubfieldsVolumeFile(freesurfer_volume_reader.VolumeFile):
         volumes_frame['T1_input'] = self.t1_input
         volumes_frame['analysis_id'] = self.analysis_id
         return volumes_frame
-
-    @classmethod
-    def find(cls, root_dir_path: str,
-             filename_regex: typing.Pattern = FILENAME_REGEX) -> typing.Iterator[str]:
-        for dirpath, _, filenames in os.walk(root_dir_path):
-            for filename in filter(filename_regex.search, filenames):
-                yield cls(path=os.path.join(dirpath, filename))

+ 38 - 0
tests/ashs_test.py

@@ -1,4 +1,5 @@
 import os
+import re
 
 import pytest
 
@@ -67,3 +68,40 @@ def test_hippocampal_subfields_volume_file_read_volumes_mm3_not_found():
         path=os.path.join(SUBJECTS_DIR, 'nobert', 'final', 'bert_left_corr_nogray_volumes.txt'))
     with pytest.raises(FileNotFoundError):
         volume_file.read_volumes_mm3()
+
+
+@pytest.mark.parametrize(('root_dir_path', 'expected_file_paths'), [
+    (os.path.join(SUBJECTS_DIR, 'alice'),
+     {os.path.join(SUBJECTS_DIR, 'alice', 'final', 'alice_left_heur_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'alice', 'final', 'alice_left_corr_nogray_volumes.txt')}),
+    (os.path.join(SUBJECTS_DIR, 'bert'),
+     {os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_left_corr_nogray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_left_corr_usegray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_right_corr_nogray_volumes.txt')}),
+    (SUBJECTS_DIR,
+     {os.path.join(SUBJECTS_DIR, 'alice', 'final', 'alice_left_heur_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'alice', 'final', 'alice_left_corr_nogray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_left_corr_nogray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_left_corr_usegray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_right_corr_nogray_volumes.txt')}),
+])
+def test_hippocampal_subfields_volume_file_find(root_dir_path, expected_file_paths):
+    volume_files_iterator = HippocampalSubfieldsVolumeFile.find(root_dir_path=root_dir_path)
+    assert expected_file_paths == set(f.absolute_path for f in volume_files_iterator)
+
+
+@pytest.mark.parametrize(('root_dir_path', 'filename_pattern', 'expected_file_paths'), [
+    (SUBJECTS_DIR,
+     r'^bert_right_',
+     {os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_right_corr_nogray_volumes.txt')}),
+    (SUBJECTS_DIR,
+     r'_nogray_volumes.txt$',
+     {os.path.join(SUBJECTS_DIR, 'alice', 'final', 'alice_left_corr_nogray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_left_corr_nogray_volumes.txt'),
+      os.path.join(SUBJECTS_DIR, 'bert', 'final', 'bert_right_corr_nogray_volumes.txt')}),
+])
+def test_hippocampal_subfields_volume_file_find_pattern(root_dir_path, filename_pattern,
+                                                        expected_file_paths):
+    volume_files_iterator = HippocampalSubfieldsVolumeFile.find(
+        root_dir_path=root_dir_path, filename_regex=re.compile(filename_pattern))
+    assert expected_file_paths == set(f.absolute_path for f in volume_files_iterator)

+ 7 - 0
tests/subjects/alice/final/alice_left_corr_nogray_volumes.txt

@@ -0,0 +1,7 @@
+alice left CA1 26 679.903
+alice left CA2+3 26 124.458
+alice left DG 25 902.236
+alice left ERC 18 679.903
+alice left PHC 16 2346.878
+alice left PRC 26 2346.670
+alice left SUB 26 458.781

+ 7 - 0
tests/subjects/alice/final/alice_left_heur_volumes.txt

@@ -0,0 +1,7 @@
+alice left CA1 26 679.904
+alice left CA2+3 26 124.459
+alice left DG 25 902.237
+alice left ERC 18 679.904
+alice left PHC 16 2346.879
+alice left PRC 26 2346.671
+alice left SUB 26 458.782

+ 7 - 0
tests/subjects/bert/final/bert_left_corr_usegray_volumes.txt

@@ -0,0 +1,7 @@
+bert left CA1 26 678.902
+bert left CA2+3 26 123.457
+bert left DG 25 901.235
+bert left ERC 18 678.902
+bert left PHC 16 2345.877
+bert left PRC 26 2345.679
+bert left SUB 26 457.780

+ 7 - 0
tests/subjects/bert/final/bert_right_corr_nogray_volumes.txt

@@ -0,0 +1,7 @@
+bert right CA1 26 678.903
+bert right CA2+3 26 123.458
+bert right DG 25 901.236
+bert right ERC 18 678.903
+bert right PHC 16 2345.878
+bert right PRC 26 2345.670
+bert right SUB 26 457.781