Browse Source

add conversion script

Oscar Esteban 2 years ago
parent
commit
24faf482ee
1 changed files with 45 additions and 0 deletions
  1. 45 0
      scripts/to_gii.py

+ 45 - 0
scripts/to_gii.py

@@ -0,0 +1,45 @@
+import itertools
+import os
+from pathlib import Path
+import subprocess as sp
+import sys
+
+
+FS_HOME = os.environ["FREESURFER_HOME"]
+FSAVERAGE_DENSITY = {
+    "fsaverage5": "10k",
+    "fsaverage6": "41k",
+    "fsaverage": "164k",
+}
+
+
+def invalid_fs():
+    assert FS_HOME, "FreeSurfer not installed"
+    try:
+        proc = sp.run(("mri_convert", "-h"), stdout=sp.DEVNULL, stderr=sp.STDOUT)
+    except OSError:
+        print("FreeSurfer installation not found.")
+        sys.exit(1)
+    return proc.returncode
+
+
+def convert2gii(filename, hemi, den, suffix):
+    outfile = f"tpl-fsaverage_hemi-{hemi}_den-{den}_{suffix}.shape.gii"
+    cmd = ["mri_convert", str(filename), outfile]
+    print(f"Running {' '.join(cmd)}")
+    proc = sp.run(cmd, stdout=sp.PIPE)
+    return proc
+
+if __name__ == "__main__":
+    if invalid_fs():
+        print("Error running FreeSurfer's ``mri_convert``.")
+        sys.exit(1)
+    FS_TEMPLATES_PATH = Path(FS_HOME) / "subjects"
+    for template in ("fsaverage", "fsaverage5", "fsaverage6"):
+        den = FSAVERAGE_DENSITY[template]
+        template_curv = (FS_TEMPLATES_PATH / template).glob("surf/*h.curv")
+        template_sulc = (FS_TEMPLATES_PATH / template).glob("surf/*h.sulc")
+        for f in itertools.chain(template_curv, template_sulc):
+            hemi = "L" if f.name.startswith('l') else "R"
+            suffix = f.suffix.lstrip('.')
+            convert2gii(f, hemi, den, suffix)