__main__.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. """
  2. Read hippocampal subfield volumes computed by Freesurfer and/or ASHS
  3. and export collected data as CSV.
  4. """
  5. import argparse
  6. import os
  7. import re
  8. import pandas
  9. from freesurfer_volume_reader import ashs, freesurfer, parse_version_string, \
  10. remove_group_names_from_regex
  11. VOLUME_FILE_FINDERS = {
  12. 'ashs': ashs.HippocampalSubfieldsVolumeFile,
  13. 'freesurfer': freesurfer.HippocampalSubfieldsVolumeFile,
  14. }
  15. def main():
  16. argparser = argparse.ArgumentParser(description=__doc__,
  17. formatter_class=argparse.RawDescriptionHelpFormatter)
  18. argparser.add_argument('--source-types', nargs='+', default=['freesurfer'],
  19. choices=VOLUME_FILE_FINDERS.keys(),
  20. help='default: [freesurfer]')
  21. for source_type, file_class in VOLUME_FILE_FINDERS.items():
  22. argparser.add_argument('--{}-filename-regex'.format(source_type),
  23. type=re.compile,
  24. default=remove_group_names_from_regex(file_class.FILENAME_PATTERN),
  25. help='default: %(default)s')
  26. argparser.add_argument('--output-format', choices=['csv'], default='csv',
  27. help='default: %(default)s')
  28. subjects_dir_path = os.environ.get('SUBJECTS_DIR', None)
  29. argparser.add_argument('root_dir_paths',
  30. metavar='ROOT_DIR',
  31. nargs='*' if subjects_dir_path else '+',
  32. default=[subjects_dir_path],
  33. help='default: $SUBJECTS_DIR ({})'.format(subjects_dir_path))
  34. args = argparser.parse_args()
  35. filename_regexs = {k[:-len('_filename_regex')]: v for k, v in vars(args).items()
  36. if k.endswith('_filename_regex')}
  37. volume_frames = []
  38. for source_type in args.source_types:
  39. finder = VOLUME_FILE_FINDERS[source_type].find
  40. for root_dir_path in args.root_dir_paths:
  41. for volume_file in finder(root_dir_path=root_dir_path,
  42. filename_regex=filename_regexs[source_type]):
  43. volume_frame = volume_file.read_volumes_dataframe()
  44. volume_frame['source_type'] = source_type
  45. volume_frame['source_path'] = volume_file.absolute_path
  46. volume_frames.append(volume_frame)
  47. if parse_version_string(pandas.__version__) < (0, 23):
  48. united_volume_frame = pandas.concat(volume_frames, ignore_index=True)
  49. else:
  50. united_volume_frame = pandas.concat(volume_frames, ignore_index=True, sort=False)
  51. print(united_volume_frame.to_csv(index=False))
  52. if __name__ == '__main__':
  53. main()