-
Notifications
You must be signed in to change notification settings - Fork 262
Reading freesurfer stats files correctly #1152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
dfed1e3
e0ea23d
84d6e04
8880a1a
97107b7
c3c3e04
02334f4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
"""Read / write FreeSurfer geometry, morphometry, label, annotation formats""" | ||
"""Read / write FreeSurfer geometry, morphometry, label, stats, annotation formats""" | ||
from __future__ import annotations | ||
|
||
import getpass | ||
import time | ||
|
@@ -617,3 +618,50 @@ | |
val = volume_info[key] | ||
strings.append(f'{key:6s} = {val[0]:.10g} {val[1]:.10g} {val[2]:.10g}\n'.encode()) | ||
return b''.join(strings) | ||
|
||
def read_stats_file(file_path): | ||
"""Extracts stats from stats files except '*curv.stats' files | ||
|
||
Parameters | ||
---------- | ||
file_path: str, required | ||
|
||
Examples | ||
-------- | ||
>>> stats_a2009, column_names = read_stats_file(r'lh.aparc.a2009s.stats') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we're going to have example code, it needs to run. We could drop an example file in from nibabel.testing import test_data
stats_a2009 = read_stats_file(test_data(fname='lh.aparc.a2009s.stats')) |
||
|
||
""" | ||
with open(file_path, 'r') as f: | ||
for line in f: | ||
if line.startswith('# ColHeaders '): | ||
columns = line.split()[2:] | ||
break | ||
return np.genfromtxt(f, dtype=None, names=columns, encoding='utf-8') | ||
|
||
|
||
def read_stats_file_both_hemispheres(file_path: str): | ||
"""Extracts stats data of both hemispheres and merges them | ||
|
||
Parameters | ||
---------- | ||
file_path: str, required | ||
Path of the stats file belong to left (lh) or right(rh) hemisphere | ||
|
||
Returns | ||
------- | ||
stats_both_hemispheres: ndarray | ||
Stats data of both hemisphers | ||
column_naems: ndarray | ||
Name of columns | ||
|
||
Examples | ||
-------- | ||
>>> stats_a2009, column_names = read_stats_file_both_hemispheres(r'lh.aparc.a2009s.stats') | ||
|
||
""" | ||
stats_left, columns_left = read_stats_file(file_path.replace('rh', 'lh')) | ||
stats_right, columns_right = read_stats_file(file_path.replace('lh', 'rh')) | ||
stats_both_hemispheres = np.concatenate((stats_left, stats_right[:, 1:]), axis=1) | ||
column_names = [col_name + '_left' for col_name in columns_left] + [col_name + '_right' for col_name in | ||
columns_right[1:]] | ||
Comment on lines
+662
to
+666
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You're no longer returning column names. I think you can use numpy.lib.recfunctions.join_by to do what you want. I would also use the following pattern for doctests: .. testsetup::
>>> import os
>>> from nibabel.testing import get_test_data
>>> cwd = os.getcwd()
>>> os.chdir(get_test_data())
>>> stats_a2009 = read_stats_file_both_hemispheres(r'lh.aparc.a2009s.stats')
.. testcleanup::
>>> os.chdir(cwd) |
||
return stats_both_hemispheres, column_names | ||
Uh oh!
There was an error while loading. Please reload this page.