In [1]:
import os
import glob
import sys
#\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
#####################################################################################
# Prepend the shell environment search paths
PROGRAM_PATHS = '/scratch/NAMICExternalProjects/release/bin'
PROGRAM_PATHS = PROGRAM_PATHS.split(':')
PROGRAM_PATHS.extend(os.environ['PATH'].split(':'))
os.environ['PATH'] = ':'.join(PROGRAM_PATHS)
CUSTOM_ENVIRONMENT=dict()
# Platform specific information
# Prepend the python search paths
PYTHON_AUX_PATHS = '/scratch/NAMICExternalProjects/release/BRAINSTools/AutoWorkup'
PYTHON_AUX_PATHS = PYTHON_AUX_PATHS.split(':')
PYTHON_AUX_PATHS.extend(sys.path)
sys.path = PYTHON_AUX_PATHS
import SimpleITK as sitk
import nipype
from nipype.interfaces import ants
from nipype.interfaces.base import CommandLine, CommandLineInputSpec, TraitedSpec, File, Directory
from nipype.interfaces.base import traits, isdefined, BaseInterface
from nipype.interfaces.utility import Merge, Split, Function, Rename, IdentityInterface
import nipype.interfaces.io as nio # Data i/oS
import nipype.pipeline.engine as pe # pypeline engine
from nipype.interfaces.freesurfer import ReconAll
from SEMTools import *
In [2]:
# Remove the skull from the T2 volume
def ExtractBRAINFromHead(RawScan, BrainLabels):
import os
import SimpleITK as sitk
# Remove skull from the head scan
assert os.path.exists(RawScan), "File not found: %s" % RawScan
assert os.path.exists(BrainLabels), "File not found: %s" % BrainLabels
headImage = sitk.ReadImage(RawScan)
labelsMap = sitk.ReadImage(BrainLabels)
label_mask = labelsMap>0
brainImage = sitk.Cast(headImage,sitk.sitkInt16) * sitk.Cast(label_mask,sitk.sitkInt16)
outputVolume = os.path.realpath('T2Stripped.nrrd')
sitk.WriteImage(brainImage, outputVolume)
return outputVolume
#-------------------------------------
def MakeResamplerInFileList(inputT2, inputLabelMap):
imagesList = [inputT2, inputLabelMap]
return imagesList
#-------------------------------------
# This function helps to pick desirable output from the outputVolume list
def pickFromList(inlist,item):
return inlist[item]
#-------------------------------------
def CreateAntsRegistrationMask(brainMask):
import os
import SimpleITK as sitk
assert os.path.exists(brainMask), "File not found: %s" % brainMask
labelsMap = sitk.ReadImage(brainMask)
label_mask = labelsMap>0
# erode the label mask
erodeFilter = sitk.BinaryErodeImageFilter()
erodeFilter.SetKernelRadius(4)
eroded_mask = erodeFilter.Execute( label_mask )
# dilate the label mask
dilateFilter = sitk.BinaryDilateImageFilter()
dilateFilter.SetKernelRadius(4)
dilated_mask = dilateFilter.Execute( label_mask )
regMask = eroded_mask - dilated_mask
registrationMask = os.path.realpath('registrationMask.nrrd')
sitk.WriteImage(regMask, registrationMask)
return registrationMask
#-------------------------------------
# Save direction cosine for the resampled T2 image
def Save_T2inB0_DC(inputVolume):
import os
import SimpleITK as sitk
assert os.path.exists(inputVolume), "File not found: %s" % inputVolume
t2 = sitk.ReadImage(inputVolume)
directionCosine = t2.GetDirection()
return directionCosine
#-----------------------------------
# Force DC to ID
def MakeForceDCFilesList(inputB0, inputT2, inputLabelMap):
import os
assert os.path.exists(inputB0), "File not found: %s" % inputB0
assert os.path.exists(inputT2), "File not found: %s" % inputT2
assert os.path.exists(inputLabelMap), "File not found: %s" % inputLabelMap
imagesList = [inputB0, inputT2, inputLabelMap]
return imagesList
#-----------------------------------
def ForceDCtoID(inputVolume):
import os
import SimpleITK as sitk
inImage = sitk.ReadImage(inputVolume)
inImage.SetDirection((1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0))
outputVolume = os.path.realpath('IDDC_'+ os.path.basename(inputVolume))
sitk.WriteImage(inImage, outputVolume)
return outputVolume
In [3]:
def pickCompositeTransfromFromList(composite_transform_as_list):
return composite_transform_as_list[0]
#-----------------------------------
def ForceDCtoSavedMatrix(inputVolume, inputDirectionCosine):
import os
import SimpleITK as sitk
inImage = sitk.ReadImage(inputVolume)
inImage.SetDirection(inputDirectionCosine)
outputVolume = os.path.realpath('RestoredDC_'+ os.path.basename(inputVolume))
sitk.WriteImage(inImage, outputVolume)
return outputVolume
#-----------------------------------
def GetRigidTransformInverse(inputTransform):
import os
import SimpleITK as sitk
inputTx = sitk.ReadTransform(inputTransform)
versorRigidTx = sitk.VersorRigid3DTransform()
versorRigidTx.SetFixedParameters(inputTx.GetFixedParameters())
versorRigidTx.SetParameters(inputTx.GetParameters())
invTx = versorRigidTx.GetInverse()
inverseTransform = os.path.realpath('Inverse_'+ os.path.basename(inputTransform))
sitk.WriteTransform(invTx, inverseTransform)
return inverseTransform
#-----------------------------------
In [ ]:
WFname = 'DWIWorkflow_' + sessionID
DWIWorkflow = pe.Workflow(name=WFname)