Source code for omni.interfaces.fsl
import os
import shutil
from glob import glob
from .common import run_process, append_suffix
[docs]def flirt(
out_file: str,
reference: str,
source: str,
out_matrix: str = None,
dof: int = 12,
cost: str = "corratio",
interp: str = "sinc",
other_args: str = None,
):
"""Affine alignment with fsl flirt.
Parameters
----------
out_file: str
Aligned output image.
reference: str
Reference image to align.
source: str
Source image to align.
out_matrix: str
Affine matrix file.
dof: str
Degrees of freedom to use for alignment.
cost: str
Cost function to use for optimization.
interp: str
Interpolation to use for output image.
other_args: str
Other arguments to pass in.
"""
return run_process(
"flirt "
"-out {} "
"-ref {} "
"-in {} "
"-dof {} "
"-cost {} "
"-interp {} "
"{}{}-v".format(
out_file,
reference,
source,
dof,
cost,
interp,
"-omat {} ".format(out_matrix) if out_matrix else "",
"{} ".format(other_args) if other_args else "",
)
)
[docs]def bet(
out_file: str,
in_file: str,
fractional_intensity_threshold: float = 0.5,
mask: bool = False,
eye: bool = False,
neck: bool = False,
other_args: str = None,
):
"""Brain extraction tool.
Parameters
----------
out_file: str
Brain extracted output image.
in_file: str
Image to brain extract
fractional_intensity_threshold: float
Fractional intensity threshold for bet.
mask: bool
Controls whether a binary mask should be output
eye: bool
Generate eye mask (mutually exclusive with neck option)
neck: bool
Neck cleanup (mutually exclusive with eye option)
other_args: str
Other arguments to pass in.
"""
# Cannot have two mutually exclusive options enabled
if eye and neck:
raise ValueError("eye and neck options are mutually exclusive.")
# run bet
process_string = run_process(
"bet "
"{0} {1} -f {2} "
"{3}{4}{5}{6}-v".format(
in_file,
out_file,
fractional_intensity_threshold,
"-m " if mask else "",
"-S -d " if eye else "",
"-B -d " if neck else "",
"{} ".format(other_args) if other_args else "",
)
)
# generate output list
output_list = [
process_string,
]
# add mask outputs if enabled
if mask:
output_list.append(append_suffix(out_file, "_mask"))
if eye:
shutil.move(append_suffix(out_file, "_tmp_eye_mask"), append_suffix(out_file, "_eye_mask"))
output_list.append(append_suffix(out_file, "_eye_mask"))
# cleanup tmp files
output_dir = os.path.dirname(out_file)
if glob(os.path.join(output_dir, "*tmp*")):
run_process("rm {}".format(os.path.join(output_dir, "*tmp*")), stdout=False)
# return output list
return output_list