__init__.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 argparse
  11. import os
  12. import re
  13. import typing
  14. import pandas
  15. from freesurfer_volume_reader.freesurfer import HippocampalSubfieldsVolumeFile
  16. def remove_group_names_from_regex(regex_pattern: str) -> str:
  17. return re.sub(r'\?P<.+?>', '', regex_pattern)
  18. def main():
  19. argparser = argparse.ArgumentParser(description=__doc__,
  20. formatter_class=argparse.RawDescriptionHelpFormatter)
  21. argparser.add_argument('--filename-regex', type=re.compile,
  22. default=remove_group_names_from_regex(
  23. HippocampalSubfieldsVolumeFile.FILENAME_PATTERN),
  24. help='default: %(default)s')
  25. argparser.add_argument('--output-format', choices=['csv'], default='csv',
  26. help='default: %(default)s')
  27. subjects_dir_path = os.environ.get('SUBJECTS_DIR', None)
  28. argparser.add_argument('root_dir_paths',
  29. metavar='ROOT_DIR',
  30. nargs='*' if subjects_dir_path else '+',
  31. default=[subjects_dir_path],
  32. help='default: $SUBJECTS_DIR ({})'.format(subjects_dir_path))
  33. args = argparser.parse_args()
  34. volume_files = [f for d in args.root_dir_paths
  35. for f in HippocampalSubfieldsVolumeFile.find(
  36. root_dir_path=d, filename_regex=args.filename_regex)]
  37. volume_frames = []
  38. for volume_file in volume_files:
  39. volume_frame = volume_file.read_volumes_dataframe()
  40. volume_frame['source_path'] = volume_file.absolute_path
  41. volume_frames.append(volume_frame)
  42. united_volume_frame = pandas.concat(volume_frames, ignore_index=True)
  43. print(united_volume_frame.to_csv(index=False))
  44. if __name__ == '__main__':
  45. main()