Commit aaa659cb authored by Christoph Arthofer's avatar Christoph Arthofer
Browse files

fslsub

parent 83494392
...@@ -142,28 +142,10 @@ Contains the output of the first set of rigd and affine registrations including ...@@ -142,28 +142,10 @@ Contains the output of the first set of rigd and affine registrations including
- unbiased average T1 template in the unbiased space of the subjects - unbiased average T1 template in the unbiased space of the subjects
- rigid transformation of unbiased template to MNI space - rigid transformation of unbiased template to MNI space
#### `affine_it1` #### `affine_it2`
affine_it2 (affine_it2_dir)
{sub_id} (affine_it2_subject_dir)
T1_to_MNI152{ext_mat} (T1_to_MNI_mat)
T1_brain_to_MNI152{ext_nii} (T1_brain_to_MNI_img)
T1_head_to_MNI152{ext_nii} (T1_head_to_MNI_img)
T1_brain_mask_to_MNI152{ext_nii} (T1_brain_mask_to_MNI_img)
T2_FLAIR_to_MNI152{ext_mat} (T2_to_MNI_mat)
T2_FLAIR_brain_to_MNI152{ext_nii} (T2_brain_to_MNI_img)
T2_FLAIR_head_to_MNI152{ext_nii} (T2_head_to_MNI_img)
DTI_to_MNI152{ext_mat} (DTI_to_MNI_mat)
DTI_to_MNI152{ext_nii} (DTI_to_MNI_img)
DTI_tensor_to_MNI152{ext_nii} (DTI_tensor_to_MNI)
affine_template_T1_brain{ext_nii} (T1_brain_affine_template)
affine_template_T1_brain_mask{ext_nii} (T1_brain_mask_affine_template)
affine_template_T1_brain_mask_weighted{ext_nii} (T1_brain_mask_weighted_affine_template)
affine_template_T1_head{ext_nii} (T1_head_affine_template)
affine_template_T2_head{ext_nii} (T2_head_affine_template)
affine_template_DTI{ext_nii} (DTI_affine_template)
affine_template_DTI_tensor{ext_nii} (DTI_tensor_affine_template)
...@@ -13,6 +13,9 @@ import shutil ...@@ -13,6 +13,9 @@ import shutil
import pandas as pd import pandas as pd
import nibabel as nib import nibabel as nib
import numpy as np import numpy as np
import shlex
import subprocess
import sys
from fsl.wrappers import fslmaths,flirt,applyxfm,concatxfm,bet,fast,fslstats from fsl.wrappers import fslmaths,flirt,applyxfm,concatxfm,bet,fast,fslstats
from fsl.wrappers.fnirt import invwarp, applywarp, convertwarp from fsl.wrappers.fnirt import invwarp, applywarp, convertwarp
from file_tree import FileTree from file_tree import FileTree
...@@ -21,7 +24,7 @@ from fsl.utils.fslsub import func_to_cmd ...@@ -21,7 +24,7 @@ from fsl.utils.fslsub import func_to_cmd
from operator import itemgetter from operator import itemgetter
import tempfile import tempfile
import argparse import argparse
import sys # import fsl_sub
def writeConfig(step,mod,fpath): def writeConfig(step,mod,fpath):
"""! Writes the nonlinear registration parameters for a given resolution level and modalities to a file readable by MMORF. """! Writes the nonlinear registration parameters for a given resolution level and modalities to a file readable by MMORF.
...@@ -413,6 +416,66 @@ def applyWarpWrapper(img_path, ref_path, warped_path, warp_path, interp='spline' ...@@ -413,6 +416,66 @@ def applyWarpWrapper(img_path, ref_path, warped_path, warp_path, interp='spline'
applywarp(src=img_nib, ref=ref_path, out=warped_path, warp=warp_path, interp=interp) applywarp(src=img_nib, ref=ref_path, out=warped_path, warp=warp_path, interp=interp)
# def submitJob_fsl_sub(name, log_dir, queue, wait_for=[], script=None, command=None, coprocessor_class=None, export_var=None,
# debug=False):
# """! Wrapper for fslsub - submits a job to the cluster. This function can be easily extended to work with other workload managers.
#
# @param name: Job name
# @param log_dir: Directory where output log-files will be saved
# @param queue: Name of queue to submit the job to
# @param wait_for: List of IDs of jobs required to finish before running this job.
# @param script: Path to a shell script, which contains one command per line - commands will be submitted as an array job
# @param command: Alternatively a single command can be provided as a string - command will be submitted as single job
# @param coprocessor_class: Coprocessor class, if not None cuda will be selected
# @param export_var: Environment variables to be exported to the submission node
# @param debug: If True, information about job will be written to output
#
# @return The job ID.
# """
#
# fsl_sub.submit()
#
# cmd = 'fsl_sub'
# if wait_for and any(job != '' for job in wait_for):
# cmd += ' -j '
# for j, job in enumerate(wait_for):
# if job != '':
# cmd += job.replace("\n", "")
# if j < len(wait_for) - 1:
# cmd += ','
#
# cmd += ' -N ' + name + \
# ' -l ' + log_dir + \
# ' -q ' + queue
#
# if coprocessor_class is not None :
# cmd += ' --coprocessor cuda'
#
# if export_var is not None :
# cmd += ' --export ' + export_var
#
# if debug:
# cmd += ' --debug'
#
# if script is not None and os.path.exists(script):
# cmd += ' -t ' + script
# elif command is not None :
# cmd += shlex.split(command)
#
# # stream = os.popen(cmd)
# # job_id = stream.read()
#
# try:
# result = subprocess.run(command, capture_output, text=True, check=True)
# except subprocess.CalledProcessError as e:
# print(str(e), file=sys.stderr)
# return None
#
# job_id = result.stdout.strip()
#
# return job_id
def submitJob(name, log_dir, queue, wait_for=[], script=None, command=None, coprocessor_class=None, export_var=None, def submitJob(name, log_dir, queue, wait_for=[], script=None, command=None, coprocessor_class=None, export_var=None,
debug=False): debug=False):
"""! Wrapper for fslsub - submits a job to the cluster. This function can be easily extended to work with other workload managers. """! Wrapper for fslsub - submits a job to the cluster. This function can be easily extended to work with other workload managers.
...@@ -442,25 +505,34 @@ def submitJob(name, log_dir, queue, wait_for=[], script=None, command=None, copr ...@@ -442,25 +505,34 @@ def submitJob(name, log_dir, queue, wait_for=[], script=None, command=None, copr
' -l ' + log_dir + \ ' -l ' + log_dir + \
' -q ' + queue ' -q ' + queue
if coprocessor_class != None: if coprocessor_class is not None :
cmd += ' --coprocessor cuda' cmd += ' --coprocessor cuda'
if export_var != None: if export_var is not None :
cmd += ' --export ' + export_var cmd += ' --export ' + export_var
if debug: if debug:
cmd += ' --debug' cmd += ' --debug'
if script != None and os.path.exists(script): if script is not None and os.path.exists(script):
cmd += ' -t ' + script cmd += ' -t ' + script
elif command != None: elif command is not None :
cmd += ' "' + command + '"' cmd += shlex.split(command)
# stream = os.popen(cmd)
# job_id = stream.read()
stream = os.popen(cmd) try:
job_id = stream.read() result = subprocess.run(command, capture_output, text=True, check=True)
except subprocess.CalledProcessError as e:
print(str(e), file=sys.stderr)
return None
job_id = result.stdout.strip()
return job_id return job_id
def RMSdifference(img1_path, img2_path, mask1_path=None, mask2_path=None, rms_path=None): def RMSdifference(img1_path, img2_path, mask1_path=None, mask2_path=None, rms_path=None):
"""! Calculates the difference between two images or warps as the root mean squared (RMS) """! Calculates the difference between two images or warps as the root mean squared (RMS)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment