__main__.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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, remove_group_names_from_regex
  10. VOLUME_FILE_FINDERS = {
  11. 'ashs': ashs.HippocampalSubfieldsVolumeFile,
  12. 'freesurfer': freesurfer.HippocampalSubfieldsVolumeFile,
  13. }
  14. def main():
  15. argparser = argparse.ArgumentParser(description=__doc__,
  16. formatter_class=argparse.RawDescriptionHelpFormatter)
  17. argparser.add_argument('--source-types', nargs='+', default=['freesurfer'],
  18. choices=VOLUME_FILE_FINDERS.keys(),
  19. help='default: [freesurfer]')
  20. for source_type, file_class in VOLUME_FILE_FINDERS.items():
  21. argparser.add_argument('--{}-filename-regex'.format(source_type),
  22. type=re.compile,
  23. default=remove_group_names_from_regex(file_class.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. filename_regexs = {k[:-len('_filename_regex')]: v for k, v in vars(args).items()
  35. if k.endswith('_filename_regex')}
  36. volume_frames = []
  37. for source_type in args.source_types:
  38. finder = VOLUME_FILE_FINDERS[source_type].find
  39. for root_dir_path in args.root_dir_paths:
  40. for volume_file in finder(root_dir_path=root_dir_path,
  41. filename_regex=filename_regexs[source_type]):
  42. volume_frame = volume_file.read_volumes_dataframe()
  43. volume_frame['source_type'] = source_type
  44. volume_frame['source_path'] = volume_file.absolute_path
  45. volume_frames.append(volume_frame)
  46. united_volume_frame = pandas.concat(volume_frames, ignore_index=True, sort=False)
  47. print(united_volume_frame.to_csv(index=False))
  48. if __name__ == '__main__':
  49. main()