Skip to content
Snippets Groups Projects
Commit ab80717c authored by Paul McCarthy's avatar Paul McCarthy :mountain_bicyclist:
Browse files

Initial import

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 1156 additions and 0 deletions
*.nii.gz filter=lfs diff=lfs merge=lfs -text
#!/usr/bin/env fslpython
# CompareMovementOverTime.py - script for comparing two .eddy_movement_over_time files.
#
"""
Usage:
CompareMovementOverTime.py 'test .eddy_movement_over_time' 'ref .eddy_movement_over_time' max_allowed_max_trans_diff max_allowed_99percentile_trans_diff max_allowed_mean_trans_diff max_allowed_max_rot_diff max_allowed_99percentile_rot_diff max_allowed_mean_rot_diff
or
CompareMovementOverTime.py 'test .eddy_movement_over_time' 'ref .eddy_movement_over_time' max_allowed_max_trans_diff max_allowed_99percentile_trans_diff max_allowed_mean_trans_diff max_allowed_max_rot_diff max_allowed_99percentile_rot_diff max_allowed_mean_rot_diff number_of_slices_in_data first_slice_to_check last_slice_to_check
"""
from __future__ import print_function # I have no words...
import sys
import CompareTextOutputDef as ct
if __name__ == '__main__':
try:
if len(sys.argv) == 1:
print(__doc__)
exit(1)
if len(sys.argv) == 10:
are_the_same = ct.MovementOverTimeAreSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),float(sys.argv[7]),float(sys.argv[8]),int(sys.argv[9]))
elif len(sys.argv) == 13:
are_the_same = ct.MovementOverTimeAreSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),float(sys.argv[7]),float(sys.argv[8]),int(sys.argv[9]),int(sys.argv[10]),int(sys.argv[11]),int(sys.argv[12]))
else:
are_the_same = False
print('CompareMovementOverTime: Invalid number of input arguments: {}'.format(len(sys.argv)-1),file=sys.stderr)
if are_the_same == True:
sys.exit(0)
else:
sys.exit(1)
except Exception as e:
print('CompareMovementOverTime: Unknown error: {}'.format(e.args[0]),file=sys.stderr)
sys.exit(1)
print('CompareMovementOverTime: Unknown error2',file=sys.stderr)
sys.exit(1)
#!/usr/bin/env fslpython
# CompareMovementOverTime.py - script for comparing two .eddy_movement_over_time files.
#
"""
Usage:
CompareMovementOverTime.py 'test .eddy_movement_over_time' 'ref .eddy_movement_over_time' max_allowed_max_trans_diff max_allowed_99percentile_trans_diff max_allowed_mean_trans_diff max_allowed_max_rot_diff max_allowed_99percentile_rot_diff max_allowed_mean_rot_diff
or
CompareMovementOverTime.py 'test .eddy_movement_over_time' 'ref .eddy_movement_over_time' max_allowed_max_trans_diff max_allowed_99percentile_trans_diff max_allowed_mean_trans_diff max_allowed_max_rot_diff max_allowed_99percentile_rot_diff max_allowed_mean_rot_diff number_of_slices_in_data first_slice_to_check last_slice_to_check
"""
from __future__ import print_function # I have no words...
import sys
import CompareTextOutputDef as ct
if __name__ == '__main__':
try:
if len(sys.argv) == 1:
print(__doc__)
exit(1)
if len(sys.argv) == 10:
are_the_same = ct.MovementOverTimeAreSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),float(sys.argv[7]),float(sys.argv[8]),int(sys.argv[9]))
elif len(sys.argv) == 13:
are_the_same = ct.MovementOverTimeAreSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),float(sys.argv[7]),float(sys.argv[8]),int(sys.argv[9]),int(sys.argv[10]),int(sys.argv[11]),int(sys.argv[12]))
print('I am here and are_the_same = {}'.format(are_the_same))
else:
are_the_same = False
print('CompareMovementOverTime: Invalid number of input arguments: {}'.format(len(sys.argv)),file=sys.stderr)
print('I am here and now are_the_same = {}'.format(are_the_same))
if are_the_same == True:
print('I am about to exit with code 0')
sys.exit(0)
else:
sys.exit(1)
except:
# raise
print('CompareMovementOverTime: Unknown error1',file=sys.stderr)
sys.exit(1)
print('CompareMovementOverTime: Unknown error2',file=sys.stderr)
sys.exit(1)
#!/usr/bin/env fslpython
# CompareOutlierNStdevMaps.py - script for comparing two .eddy_outlier_n_stdev_map files.
#
"""
Usage:
CompareOutlierNStdevMaps.py 'test .eddy_outlier_n_stdev_map' 'ref .eddy_outlier_n_stdev_map' max_allowed_max_relative_z_score_diff_for_z>1 max_allowed_mean_relative_z_score_diff_for_z>1 max_allowed_max_relative_z_score_diff_for_z>2 max_allowed_mean_relative_z_score_diff_for_z>2
or
CompareOutlierNStdevMaps.py 'test .eddy_outlier_n_stdev_map' 'ref .eddy_outlier_n_stdev_map' max_allowed_max_relative_z_score_diff_for_z>1 max_allowed_mean_relative_z_score_diff_for_z>1 max_allowed_max_relative_z_score_diff_for_z>2 max_allowed_mean_relative_z_score_diff_for_z>2 number_of_slices_in_data first_slice_to_check last_slice_to_check
"""
from __future__ import print_function # I have no words...
import sys
import CompareTextOutputDef as ct
if __name__ == '__main__':
try:
if len(sys.argv) == 1:
print(__doc__)
are_the_same = false
if len(sys.argv) == 7:
are_the_same = ct.OutlierNStdevMapsAreTheSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]))
elif len(sys.argv) == 10:
are_the_same = ct.OutlierNStdevMapsAreTheSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),int(sys.argv[7]),int(sys.argv[8]),int(sys.argv[9]))
else:
print('CompareOutlierNStdevMaps: Invalid number of input arguments: {}'.format(len(sys.argv)-1),file=sys.stderr)
if are_the_same == True:
exit(0)
else:
exit(1)
except Exception as e:
print('CompareOutlierNStdevMaps: Unknown error: {}'.format(e.args[0]),file=sys.stderr)
exit(1)
print('CompareOutlierNStdevMaps: Unknown error',file=sys.stderr)
exit(1)
#!/usr/bin/env fslpython
# CompareOutlierNStdevMaps.py - script for comparing two .eddy_outlier_n_stdev_map files.
#
"""
Usage:
CompareOutlierNStdevMaps.py 'test .eddy_outlier_n_stdev_map' 'ref .eddy_outlier_n_stdev_map' max_allowed_max_relative_z_score_diff_for_z>1 max_allowed_mean_relative_z_score_diff_for_z>1 max_allowed_max_relative_z_score_diff_for_z>2 max_allowed_mean_relative_z_score_diff_for_z>2
or
CompareOutlierNStdevMaps.py 'test .eddy_outlier_n_stdev_map' 'ref .eddy_outlier_n_stdev_map' max_allowed_max_relative_z_score_diff_for_z>1 max_allowed_mean_relative_z_score_diff_for_z>1 max_allowed_max_relative_z_score_diff_for_z>2 max_allowed_mean_relative_z_score_diff_for_z>2 number_of_slices_in_data first_slice_to_check last_slice_to_check
"""
from __future__ import print_function # I have no words...
import sys
import CompareTextOutputDef as ct
if __name__ == '__main__':
try:
if len(sys.argv) == 1:
print(__doc__)
are_the_same = false
if len(sys.argv) == 7:
are_the_same = ct.OutlierNStdevMapsAreTheSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]))
elif len(sys.argv) == 10:
are_the_same = ct.OutlierNStdevMapsAreTheSame(sys.argv[1],sys.argv[2],float(sys.argv[3]),float(sys.argv[4]),float(sys.argv[5]),float(sys.argv[6]),int(sys.argv[7]),int(sys.argv[8]),int(sys.argv[9]))
else:
print('CompareOutlierNStdevMaps: Invalid number of input arguments: {}'.format(len(sys.argv)),file=sys.stderr)
if are_the_same == True:
exit(0)
else:
exit(1)
except:
print('CompareOutlierNStdevMaps: Unknown error',file=sys.stderr)
exit(1)
print('CompareOutlierNStdevMaps: Unknown error',file=sys.stderr)
exit(1)
#!/usr/bin/env python
# CompareTextOutputDef.py - contains defs for comparing textual output from eddy
# It has code for comparing two .eddy_movement_over_time files and for comparing
# two .eddy_outlier_n_stdev_map files.
#
from __future__ import print_function # I have no words...
import collections
import datetime
import tempfile
import logging
import shutil
import fnmatch
import re
import sys
import os
import os.path as op
import numpy as np
def MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip, *args):
"""Compares two .eddy_movement_over_time files and returns true or false.
Pass or fail depends on observed differences compared to limits specified by
inputs maxtrans, trans99, meantrans, maxrot, rot99 and meanrot. Skip is 0 or 1 if
we are to skip comparison for x-trans (0) or y-trans (1). If not, skip should be -1.
USE: MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip)
or
MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip, nsl, fsl, lsl)
"""
if (skip < -1) or (skip > 1):
print('MovementOverTimeAreSame: Invalid skip value',file=sys.stderr)
raise ValueError('MovementOverTimeAreSame: Invalid skip value')
if len(args) != 0 and len(args) != 3:
print('MovementOverTimeAreSame: Invalid number of optional arguments',file=sys.stderr)
raise RuntimeError('MovementOverTimeAreSame: Invalid number of optional arguments')
if len(args) == 3:
nsl = args[0]
fsl = args[1]
lsl = args[2]
if fsl < 0 or lsl > (nsl-1):
print('MovementOverTimeAreSame: Invalid fsl or lsl',file=sys.stderr)
raise ValueError('MovementOverTimeAreSame: Invalid fsl or lsl')
try:
test_data = np.genfromtxt(testfname)
ref_data = np.genfromtxt(reffname)
except Exception as e:
print('MovementOverTimeAreSame: File read error: {}'.format(e.args[0]),file=sys.stderr)
raise e
if test_data.shape != ref_data.shape or test_data.shape[1] != 6 or test_data.shape[0] % nsl != 0:
print('MovementOverTimeAreSame: Shape mismatch between files {} and {}'.format(testfname,reffname),file=sys.stderr)
raise ValueError('MovementOverTimeAreSame: Shape mismatch between files {} and {}'.format(testfname,reffname))
# Remove end slices if nsl, fsl and lsl have been set
if len(args) == 3:
try:
if test_data.shape[0] % nsl:
raise ValueError('')
for p in range(0,6):
tmp = test_data[:,p]
tmp = np.reshape(tmp,(nsl,test_data.shape[0]//nsl),'F')
tmp = tmp[fsl:lsl+1,:]
if p == 0:
tmp_test_data = np.reshape(tmp,(tmp.size,1),'F')
else:
tmp_test_data = np.concatenate((tmp_test_data,np.reshape(tmp,(tmp.size,1),'F')),axis=1)
tmp = ref_data[:,p]
tmp = np.reshape(tmp,(nsl,test_data.shape[0]//nsl),'F')
tmp = tmp[fsl:lsl+1,:]
if p == 0:
tmp_ref_data = np.reshape(tmp,(tmp.size,1),'F')
else:
tmp_ref_data = np.concatenate((tmp_ref_data,np.reshape(tmp,(tmp.size,1),'F')),axis=1)
except Exception as e:
print('MovementOverTimeAreSame: Input nsl={}, fsl={} or lsl={} not suited for files {} and {}'.format(nsl,fsl,lsl,testfname,reffname),file=sys.stderr)
raise ValueError('MovementOverTimeAreSame: Input nsl={}, fsl={} or lsl={} not suited for files {} and {}'.format(nsl,fsl,lsl,testfname,reffname))
test_data = tmp_test_data
ref_data = tmp_ref_data
diff = test_data - ref_data
absdiff = np.absolute(diff)
if skip == 0:
atdiff = absdiff[:,[1, 2]]
elif skip == 1:
atdiff = absdiff[:,[0, 2]]
elif skip == -1:
atdiff = absdiff[:,[0, 1, 2]]
ardiff = 180.0 * absdiff[:,[3, 4, 5]] / 3.141593
omaxtrans = np.amax(atdiff) # Max translation
omaxrot = np.amax(ardiff) # Max rotation
omeantrans = np.max(np.mean(atdiff,0)) # Mean translation along worst direction
omeanrot = np.max(np.mean(ardiff,0)) # Mean rotation around worst axis
otrans99 = np.max(np.sort(atdiff,0)[int(0.99*len(atdiff)),:]) # 99th percentile along worst direction
orot99 = np.max(np.sort(ardiff,0)[int(0.99*len(atdiff)),:]) # 99th percentile around worst axis
print('MovementOverTimeAreSame: maxtrans = {}, maxrot = {}'.format(maxtrans,maxrot),file=sys.stdout)
print('MovementOverTimeAreSame: omaxtrans = {}, omaxrot = {}'.format(omaxtrans,omaxrot),file=sys.stdout)
print('MovementOverTimeAreSame: meantrans = {}, meanrot = {}'.format(meantrans,meanrot),file=sys.stdout)
print('MovementOverTimeAreSame: omeantrans = {}, omeanrot = {}'.format(omeantrans,omeanrot),file=sys.stdout)
print('MovementOverTimeAreSame: trans99 = {}, rot99 = {}'.format(trans99,rot99),file=sys.stdout)
print('MovementOverTimeAreSame: otrans99 = {}, orot99 = {}'.format(otrans99,orot99),file=sys.stdout)
rval = True
if (omaxtrans > maxtrans) or (omaxrot > maxrot) or (otrans99 > trans99) or (orot99 > rot99) or (omeantrans > meantrans) or (omeanrot > meanrot):
rval = False
return rval
def OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2, *args):
"""Compares two .eddy_outlier_n_stdev_map files and returns true or false.
Pass or fail depends on observed differences compared to limits specified by
inputs maxdiff1, meandiff1, maxdiff2 and meandiff2.
USE: OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2)
or
OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2, nsl, fsl, lsl)
"""
if len(args) != 0 and len(args) != 3:
print('OutlierNStdevMapsAreTheSame: Invalid number of optional arguments',file=sys.stderr)
raise ValueError('OutlierNStdevMapsAreTheSame: Invalid number of optional arguments')
if len(args) == 3:
nsl = args[0]
fsl = args[1]
lsl = args[2]
if fsl < 0 or lsl > (nsl-1):
print('OutlierNStdevMapsAreTheSame: Invalid fsl or lsl',file=sys.stderr)
raise ValueError('OutlierNStdevMapsAreTheSame: Invalid fsl or lsl')
try:
test_data = np.genfromtxt(testfname,skip_header=1)
ref_data = np.genfromtxt(reffname,skip_header=1)
except Exception as e:
print('OutlierNStdevMapsAreTheSame: File read error: {}'.format(e.args[0]),file=sys.stderr)
raise e
if test_data.shape != ref_data.shape:
print('OutlierNStdevMapsAreTheSame: Shape mismatch between files {} and {}'.format(testfname,reffname),file=sys.stderr)
raise ValueError('OutlierNStdevMapsAreTheSame: Shape mismatch between files {} and {}'.format(testfname,reffname))
if len(args) == 3:
if nsl != ref_data.shape[1]:
print('OutlierNStdevMapsAreTheSame: Shape mismatch between the files {} and {} and nsl={}'.format(testfname,reffname,nsl),file=sys.stderr)
raise ValueError('OutlierNStdevMapsAreTheSame: Shape mismatch between the files {} and {} and nsl={}'.format(testfname,reffname,nsl))
ref_data = ref_data[:,fsl:lsl+1]
test_data = test_data[:,fsl:lsl+1]
try:
# Find vol-slice tuples that are non-zero in both runs
nztest = test_data != 0
nzref = ref_data != 0
if float(np.sum(nzref)-np.sum(nztest)) / np.sum(nzref) > 0.01: # Ensure ~ equal no. of non-zero
print('OutlierNStdevMapsAreTheSame: Large mismatch in number of slices considered',file=sys.stdout)
return False
mask = np.multiply(nztest.astype('int'),nzref.astype('int'))
indx = np.where(mask > 0)
test_data = test_data[indx]
ref_data = ref_data[indx]
# Calculate difference-ratio for all non-zero tuples
radiff = np.divide(np.absolute(test_data - ref_data),np.absolute(ref_data))
# Check for max and mean diff-ratio for voxels with z > 1
indx2 = np.where(ref_data > 1.0)
omaxdiff1 = np.max(radiff[indx2])
omeandiff1 = np.mean(radiff[indx2])
# Check for max and mean diff-ratio for voxels with z > 2
indx2 = np.where(ref_data > 2.0)
omaxdiff2 = np.max(radiff[indx2])
omeandiff2 = np.mean(radiff[indx2])
print('OutlierNStdevMapsAreTheSame: maxdiff1 = {}, omaxdiff1 = {}'.format(maxdiff1,omaxdiff1),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: meandiff1 = {}, omeandiff1 = {}'.format(meandiff1,omeandiff1),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: maxdiff2 = {}, omaxdiff2 = {}'.format(maxdiff2,omaxdiff2),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: meandiff2 = {}, omeandiff2 = {}'.format(meandiff2,omeandiff2),file=sys.stdout)
except Exception as e:
print('OutlierNStdevMapsAreTheSame: Unknown error: {}'.format(e.args[0]),file=sys.stderr)
raise e
rval = True
if (omaxdiff1 > maxdiff1) or (omeandiff1 > meandiff1) or (omaxdiff2 > maxdiff2) or (omeandiff2 > meandiff2):
rval = False
return rval
#!/usr/bin/env python
# CompareTextOutputDef.py - contains defs for comparing textual output from eddy
# It has code for comparing two .eddy_movement_over_time files and for comparing
# two .eddy_outlier_n_stdev_map files.
#
from __future__ import print_function # I have no words...
import collections
import datetime
import tempfile
import logging
import shutil
import fnmatch
import re
import sys
import os
import os.path as op
import numpy as np
def MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip, *args):
"""Compares two .eddy_movement_over_time files and returns true or false.
Pass or fail depends on observed differences compared to limits specified by
inputs maxtrans, trans99, meantrans, maxrot, rot99 and meanrot. Skip is 0 or 1 if
we are to skip comparison for x-trans (0) or y-trans (1). If not, skip should be -1.
USE: MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip)
or
MovementOverTimeAreSame(testfname, reffname, maxtrans, trans99, meantrans, maxrot, rot99, meanrot, skip, nsl, fsl, lsl)
"""
if (skip < -1) or (skip > 1):
print('MovementOverTimeAreSame: Invalid skip value',file=sys.stderr)
return False
if len(args) != 0 and len(args) != 3:
print('MovementOverTimeAreSame: Invalid number of optional arguments',file=sys.stderr)
return False
if len(args) == 3:
nsl = args[0]
fsl = args[1]
lsl = args[2]
if fsl < 0 or lsl > (nsl-1):
print('MovementOverTimeAreSame: Invalid fsl or lsl',file=sys.stderr)
return False
try:
test_data = np.genfromtxt(testfname)
ref_data = np.genfromtxt(reffname)
except:
print('MovementOverTimeAreSame: Unable to read file {} or {}'.format(testfname,reffname),file=sys.stderr)
return False
if test_data.shape != ref_data.shape or test_data.shape[1] != 6 or test_data.shape[0] % nsl != 0:
print('MovementOverTimeAreSame: Shape mismatch between files {} and {}'.format(testfname,reffname),file=sys.stderr)
return False
# Remove end slices if nsl, fsl and lsl have been set
if len(args) == 3:
try:
for p in range(0,6):
tmp = test_data[:,p]
tmp = np.reshape(tmp,(nsl,test_data.shape[0]/nsl),'F')
tmp = tmp[fsl:lsl+1,:]
if p == 0:
tmp_test_data = np.reshape(tmp,(tmp.size,1),'F')
else:
tmp_test_data = np.concatenate((tmp_test_data,np.reshape(tmp,(tmp.size,1),'F')),axis=1)
tmp = ref_data[:,p]
tmp = np.reshape(tmp,(nsl,test_data.shape[0]/nsl),'F')
tmp = tmp[fsl:lsl+1,:]
if p == 0:
tmp_ref_data = np.reshape(tmp,(tmp.size,1),'F')
else:
tmp_ref_data = np.concatenate((tmp_ref_data,np.reshape(tmp,(tmp.size,1),'F')),axis=1)
except:
print('MovementOverTimeAreSame: Input nsl, fsl or lsl not suited for files {} and {}'.format(testfname,reffname),file=sys.stderr)
return False
test_data = tmp_test_data
ref_data = tmp_ref_data
diff = test_data - ref_data
absdiff = np.absolute(diff)
if skip == 0:
atdiff = absdiff[:,[1, 2]]
elif skip == 1:
atdiff = absdiff[:,[0, 2]]
elif skip == -1:
atdiff = absdiff[:,[0, 1, 2]]
ardiff = 180.0 * absdiff[:,[3, 4, 5]] / 3.141593
omaxtrans = np.amax(atdiff) # Max translation
omaxrot = np.amax(ardiff) # Max rotation
omeantrans = np.max(np.mean(atdiff,0)) # Mean translation along worst direction
omeanrot = np.max(np.mean(ardiff,0)) # Mean rotation around worst axis
otrans99 = np.max(np.sort(atdiff,0)[int(0.99*len(atdiff)),:]) # 99th percentile along worst direction
orot99 = np.max(np.sort(ardiff,0)[int(0.99*len(atdiff)),:]) # 99th percentile around worst axis
print('MovementOverTimeAreSame: maxtrans = {}, maxrot = {}'.format(maxtrans,maxrot),file=sys.stdout)
print('MovementOverTimeAreSame: omaxtrans = {}, omaxrot = {}'.format(omaxtrans,omaxrot),file=sys.stdout)
print('MovementOverTimeAreSame: meantrans = {}, meanrot = {}'.format(meantrans,meanrot),file=sys.stdout)
print('MovementOverTimeAreSame: omeantrans = {}, omeanrot = {}'.format(omeantrans,omeanrot),file=sys.stdout)
print('MovementOverTimeAreSame: trans99 = {}, rot99 = {}'.format(trans99,rot99),file=sys.stdout)
print('MovementOverTimeAreSame: otrans99 = {}, orot99 = {}'.format(otrans99,orot99),file=sys.stdout)
rval = True
if (omaxtrans > maxtrans) or (omaxrot > maxrot) or (otrans99 > trans99) or (orot99 > rot99) or (omeantrans > meantrans) or (omeanrot > meanrot):
rval = False
print('I am about to return')
return rval
def OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2, *args):
"""Compares two .eddy_outlier_n_stdev_map files and returns true or false.
Pass or fail depends on observed differences compared to limits specified by
inputs maxdiff1, meandiff1, maxdiff2 and meandiff2.
USE: OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2)
or
OutlierNStdevMapsAreTheSame(testfname, reffname, maxdiff1, meandiff1, maxdiff2, meandiff2, nsl, fsl, lsl)
"""
if len(args) != 0 and len(args) != 3:
print('OutlierNStdevMapsAreTheSame: Invalid number of optional arguments',file=sys.stderr)
return False
if len(args) == 3:
nsl = args[0]
fsl = args[1]
lsl = args[2]
if fsl < 0 or lsl > (nsl-1):
print('OutlierNStdevMapsAreTheSame: Invalid fsl or lsl',file=sys.stderr)
return False
try:
test_data = np.genfromtxt(testfname,skip_header=1)
ref_data = np.genfromtxt(reffname,skip_header=1)
except:
print('OutlierNStdevMapsAreTheSame: Unable to read file {} or {}'.format(testfname,reffname),file=sys.stderr)
return False
if test_data.shape != ref_data.shape:
print('OutlierNStdevMapsAreTheSame: Shape mismatch between files {} and {}'.format(testfname,reffname),file=sys.stderr)
return False
if len(args) == 3:
if nsl != ref_data.shape[1]:
print('OutlierNStdevMapsAreTheSame: Shape mismatch between the files {} and {} and nsl'.format(testfname,reffname),file=sys.stderr)
return False
ref_data = ref_data[:,fsl:lsl+1]
test_data = test_data[:,fsl:lsl+1]
try:
# Find vol-slice tuples that are non-zero in both runs
nztest = test_data != 0
nzref = ref_data != 0
if float(np.sum(nzref)-np.sum(nztest)) / np.sum(nzref) > 0.01: # Ensure ~ equal no. of non-zero
print('OutlierNStdevMapsAreTheSame: Large mismatch in number of slices considered',file=sys.stdout)
return False
mask = np.multiply(nztest.astype('int'),nzref.astype('int'))
indx = np.where(mask > 0)
test_data = test_data[indx]
ref_data = ref_data[indx]
# Calculate difference-ratio for all non-zero tuples
radiff = np.divide(np.absolute(test_data - ref_data),np.absolute(ref_data))
# Check for max and mean diff-ratio for voxels with z > 1
indx2 = np.where(ref_data > 1.0)
omaxdiff1 = np.max(radiff[indx2])
omeandiff1 = np.mean(radiff[indx2])
# Check for max and mean diff-ratio for voxels with z > 2
indx2 = np.where(ref_data > 2.0)
omaxdiff2 = np.max(radiff[indx2])
omeandiff2 = np.mean(radiff[indx2])
print('OutlierNStdevMapsAreTheSame: maxdiff1 = {}, omaxdiff1 = {}'.format(maxdiff1,omaxdiff1),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: meandiff1 = {}, omeandiff1 = {}'.format(meandiff1,omeandiff1),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: maxdiff2 = {}, omaxdiff2 = {}'.format(maxdiff2,omaxdiff2),file=sys.stdout)
print('OutlierNStdevMapsAreTheSame: meandiff2 = {}, omeandiff2 = {}'.format(meandiff2,omeandiff2),file=sys.stdout)
except:
print('OutlierNStdevMapsAreTheSame: Unknown error',file=sys.stderr)
return False
rval = True
if (omaxdiff1 > maxdiff1) or (omeandiff1 > meandiff1) or (omaxdiff2 > maxdiff2) or (omeandiff2 > meandiff2):
rval = False
return rval
File added
EddyS2VTestData/eddyData
EddyTestData/eddyData
#! /bin/sh
#
# This script runs eddy on data with intra-volume movement,
# followed by some tests on the output.
# It uses simulated data supplied by Mark
# Graham, UCL, which allows us to have a ground
# truth. The data is a subset of that used
# for the s2v paper.
# At the time of writing this (May, 2017) the openmp version
# is not able to do slice-to-vol realignment. Hence only
# the cuda version is tested. The script should be updated
# if/when there is an openmp implementation of slice-to-vol.
#
scriptdir=`dirname $0`
odir=$1
indir=$2
#
# Inputs 1--2 are the ones neccessary for feeds to work
# Additional inputs are optional and intended for testing
# outside of the feeds context.
#
# Input 3 is alternative location of executable
#
if [ "$#" -gt 2 ]; then
exedir=$3
echo "Directory for eddy executables set to ${exedir}"
else
exedir="${FSLDIR}/bin"
fi
if [ ! -x "${exedir}/eddy_cuda" ]; then
echo "Executable ${exedir}/eddy_cuda does not exist"
exit 1
fi
#if [ ! -x "${exedir}/eddy_openmp" ]; then
# echo "Executable ${exedir}/eddy_openmp does not exist"
# exit 1
#fi
if [ ! -d "$odir" ]; then
echo "Output directory ${odir} does not exist"
exit 1;
fi
if [ ! -d "$indir" ]; then
echo "Input directory ${odir} does not exist"
exit 1;
fi
# Define some constants
# These are for the comparison of output images divided on b=0, b=700 and b=2000
max_mean_ima_diff="1.8 0.6 0.5"
max_max_ima_diff="2.0 0.7 0.6"
# Launch both GPU and CPU versions
cuda_jid=`fsl_sub -q cuda.q ${exedir}/eddy_cuda --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCudaOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose`
# omp_jid=`fsl_sub -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCudaOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose`
# Wait until they have both finished
while [ : ]; do
tmp=`qstat -j ${cuda_jid} | wc`
tmp=`echo $tmp | awk '{print $1}'`
# if [ $tmp -eq 0 ]; then
# tmp=`qstat -j ${omp_jid} | wc`
# tmp=`echo $tmp | awk '{print $1}'`
if [ $tmp -eq 0 ]; then
break
fi
# fi
sleep 5m
done
# Check that eddy output exists
if [ ! -f ${odir}/eddyCudaOutput.nii* ]; then
exit 1
fi
#if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then
# exit 1
#fi
# Check the results against ground truth
# First compare output images
mmidiff=""
maxidiff=""
# for oname in eddyCudaOutput eddyOmpOutput; do
for oname in eddyCudaOutput; do
fslmaths ${indir}/EddyS2VTestData/eddyData/GroundTruth/ground_truth -sub ${odir}/${oname} -abs ${odir}/${oname}_diff_tmp
# Divide into different shells
for bv in 0 700 2000; do
select_dwi_vols ${odir}/${oname}_diff_tmp ${indir}/EddyS2VTestData/eddyData/testBvals ${odir}/${oname}_diff_tmp_b${bv} ${bv}
done
imrm ${odir}/${oname}_diff_tmp
# Remove top and bottom slides with no data in the eddy output
for bv in 0 700 2000; do
fslroi ${odir}/${oname}_diff_tmp_b${bv} ${odir}/${oname}_diff_tmp_b${bv} 2 68 4 80 6 44
done
fslroi ${indir}/EddyS2VTestData/eddyData/testMask ${odir}/tmp_mask 2 68 4 80 6 44
for bv in 0 700 2000; do
mdiff=$(fslstats -t ${odir}/${oname}_diff_tmp_b${bv} -k ${odir}/tmp_mask -m)
imrm ${odir}/${oname}_diff_tmp_b${bv}
echo $mdiff > ${odir}/${oname}.ima_mean_diff_b${bv}.txt
echo "feedsRun: Mean difference per volume is: ${mdiff} for shell b=${bv}"
mmidiff="${mmidiff} $(echo $mdiff | awk '{sum=0; for (i=1; i<=NF; i++) { sum+= $i } print sum/NF}')"
maxidiff="${maxidiff} $(tr ' ' '\n' <<<$mdiff | sort -r | head -n1)"
done
done
echo "Avrage mean abolute differences for shells 0, 700 and 2000 are: ${mmidiff}"
echo "Acceptable average mean absolute differences for shells 0, 700 and 2000 are: ${max_mean_ima_diff}"
echo "Maximum mean absolute differences for shells 0, 700 and 2000 are: ${maxidiff}"
echo "Acceptable maximum mean absolute differences for shells 0, 700 and 2000 are: ${max_max_ima_diff}"
# Next decide on fail or pass
# Mean diff for b0
fail=$(echo "$(echo $mmidiff | awk '{print $1}') > $(echo $max_mean_ima_diff | awk '{print $1}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=0 too large"
exit 1;
fi
# Mean diff for b700
fail=$(echo "$(echo $mmidiff | awk '{print $2}') > $(echo $max_mean_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=700 too large"
exit 1;
fi
# Mean diff for b2000
fail=$(echo "$(echo $mmidiff | awk '{print $3}') > $(echo $max_mean_ima_diff | awk '{print $3}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=2000 too large"
exit 1;
fi
# Max diff for b0
fail=$(echo "$(echo $maxidiff | awk '{print $1}') > $(echo $max_max_ima_diff | awk '{print $1}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=0 too large"
exit 1;
fi
# Max diff for b700
fail=$(echo "$(echo $maxidiff | awk '{print $2}') > $(echo $max_max_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=700 too large"
exit 1;
fi
# Max diff for b2000
fail=$(echo "$(echo $maxidiff | awk '{print $2}') > $(echo $max_max_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=2000 too large"
exit 1;
fi
#
# Next do checks on output text files
#
# First .eddy_movement_over_time
#
echo "Now running CompareMovementOverTime.py"
${scriptdir}/CompareMovementOverTime.py ${odir}/${oname}.eddy_movement_over_time ${indir}/EddyS2VTestData/eddyData/MovementTruth/ground_truth.eddy_movement_over_time 1.0 1.0 0.2 3.0 1.5 0.3 1 55 7 46
fail=$?
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed in CompareMovementOverTime.py"
exit 1;
fi
#
# Next .eddy_outlier_n_stdev_map
#
echo "Now running CompareOutlierNStdevMaps.py"
${scriptdir}/CompareOutlierNStdevMaps.py ${odir}/${oname}.eddy_outlier_n_stdev_map ${indir}/EddyS2VTestData/eddyData/NStdevMapRef/ref.eddy_outlier_n_stdev_map 0.2 0.03 0.05 0.02 55 7 46
fail=$?
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed in CompareOutlierNStdevMaps.py"
exit 1;
fi
exit 0
#! /bin/sh
#
# This script runs eddy on data with intra-volume movement,
# followed by some tests on the output.
# It uses simulated data supplied by Mark
# Graham, UCL, which allows us to have a ground
# truth. The data is a subset of that used
# for the s2v paper.
# At the time of writing this (May, 2017) the openmp version
# is not able to do slice-to-vol realignment. Hence only
# the cuda version is tested. The script should be updated
# if/when there is an openmp implementation of slice-to-vol.
#
scriptdir=`dirname $0`
odir=$1
indir=$2
#
# Inputs 1--2 are the ones neccessary for feeds to work
# Additional inputs are optional and intended for testing
# outside of the feeds context.
#
# Input 3 is alternative location of executable
#
if [ "$#" -gt 2 ]; then
exedir=$3
echo "Directory for eddy executables set to ${exedir}"
else
exedir="${FSLDIR}/bin"
fi
if [ ! -x "${exedir}/eddy_cuda" ]; then
echo "Executable ${exedir}/eddy_cuda does not exist"
exit 1
fi
#if [ ! -x "${exedir}/eddy_openmp" ]; then
# echo "Executable ${exedir}/eddy_openmp does not exist"
# exit 1
#fi
if [ ! -d "$odir" ]; then
echo "Output directory ${odir} does not exist"
exit 1;
fi
if [ ! -d "$indir" ]; then
echo "Input directory ${odir} does not exist"
exit 1;
fi
# Define some constants
# These are for the comparison of output images divided on b=0, b=700 and b=2000
max_mean_ima_diff="1.8 0.6 0.5"
max_max_ima_diff="2.0 0.7 0.6"
# Launch both GPU and CPU versions
if false; then
cuda_jid=`fsl_sub -q cuda.q ${exedir}/eddy_cuda --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCudaOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose`
# omp_jid=`fsl_sub -q long.q -s openmp,6 ${exedir}/eddy_openmp --imain=${indir}/EddyS2VTestData/eddyData/testData --mask=${indir}/EddyS2VTestData/eddyData/testMask --bvals=${indir}/EddyS2VTestData/eddyData/testBvals --bvecs=${indir}/EddyS2VTestData/eddyData/testBvecs --index=${indir}/EddyS2VTestData/eddyData/testIndex --acqp=${indir}/EddyS2VTestData/eddyData/testAcqparams --repol --ol_type=slice --niter=8 --fwhm=10,6,4,2,0,0,0,0 --out=${odir}/eddyCudaOutput --nvoxhp=5000 --mporder=16 --s2v_niter=10 --s2v_interp=trilinear --s2v_lambda=1 --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec --very_verbose`
# Wait until they have both finished
while [ : ]; do
tmp=`qstat -j ${cuda_jid} | wc`
tmp=`echo $tmp | awk '{print $1}'`
# if [ $tmp -eq 0 ]; then
# tmp=`qstat -j ${omp_jid} | wc`
# tmp=`echo $tmp | awk '{print $1}'`
if [ $tmp -eq 0 ]; then
break
fi
# fi
sleep 5m
done
# Check that eddy output exists
if [ ! -f ${odir}/eddyCudaOutput.nii* ]; then
exit 1
fi
#if [ ! -f ${odir}/eddyOmpOutput.nii* ]; then
# exit 1
#fi
# Check the results against ground truth
# First compare output images
mmidiff=""
maxidiff=""
# for oname in eddyCudaOutput eddyOmpOutput; do
for oname in eddyCudaOutput; do
fslmaths ${indir}/EddyS2VTestData/eddyData/GroundTruth/ground_truth -sub ${odir}/${oname} -abs ${odir}/${oname}_diff_tmp
# Divide into different shells
for bv in 0 700 2000; do
select_dwi_vols ${odir}/${oname}_diff_tmp ${indir}/EddyS2VTestData/eddyData/testBvals ${odir}/${oname}_diff_tmp_b${bv} ${bv}
done
imrm ${odir}/${oname}_diff_tmp
# Remove top and bottom slides with no data in the eddy output
for bv in 0 700 2000; do
fslroi ${odir}/${oname}_diff_tmp_b${bv} ${odir}/${oname}_diff_tmp_b${bv} 2 68 4 80 6 44
done
fslroi ${indir}/EddyS2VTestData/eddyData/testMask ${odir}/tmp_mask 2 68 4 80 6 44
for bv in 0 700 2000; do
mdiff=$(fslstats -t ${odir}/${oname}_diff_tmp_b${bv} -k ${odir}/tmp_mask -m)
imrm ${odir}/${oname}_diff_tmp_b${bv}
echo $mdiff > ${odir}/${oname}.ima_mean_diff_b${bv}.txt
echo "feedsRun: Mean difference per volume is: ${mdiff} for shell b=${bv}"
mmidiff="${mmidiff} $(echo $mdiff | awk '{sum=0; for (i=1; i<=NF; i++) { sum+= $i } print sum/NF}')"
maxidiff="${maxidiff} $(tr ' ' '\n' <<<$mdiff | sort -r | head -n1)"
done
done
echo "Avrage mean abolute differences for shells 0, 700 and 2000 are: ${mmidiff}"
echo "Acceptable average mean absolute differences for shells 0, 700 and 2000 are: ${max_mean_ima_diff}"
echo "Maximum mean absolute differences for shells 0, 700 and 2000 are: ${maxidiff}"
echo "Acceptable maximum mean absolute differences for shells 0, 700 and 2000 are: ${max_max_ima_diff}"
# Next decide on fail or pass
# Mean diff for b0
fail=$(echo "$(echo $mmidiff | awk '{print $1}') > $(echo $max_mean_ima_diff | awk '{print $1}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=0 too large"
exit 1;
fi
# Mean diff for b700
fail=$(echo "$(echo $mmidiff | awk '{print $2}') > $(echo $max_mean_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=700 too large"
exit 1;
fi
# Mean diff for b2000
fail=$(echo "$(echo $mmidiff | awk '{print $3}') > $(echo $max_mean_ima_diff | awk '{print $3}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because mean diff for b=2000 too large"
exit 1;
fi
# Max diff for b0
fail=$(echo "$(echo $maxidiff | awk '{print $1}') > $(echo $max_max_ima_diff | awk '{print $1}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=0 too large"
exit 1;
fi
# Max diff for b700
fail=$(echo "$(echo $maxidiff | awk '{print $2}') > $(echo $max_max_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=700 too large"
exit 1;
fi
# Max diff for b2000
fail=$(echo "$(echo $maxidiff | awk '{print $2}') > $(echo $max_max_ima_diff | awk '{print $2}')" | bc)
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed because max diff for b=2000 too large"
exit 1;
fi
fi # End if false
oname="eddyCudaOutput"
#
# Next do checks on output text files
#
# First .eddy_movement_over_time
#
echo "Now running CompareMovementOverTime.py"
${scriptdir}/CompareMovementOverTime.py ${odir}/${oname}.eddy_movement_over_time ${indir}/EddyS2VTestData/eddyData/MovementTruth/ground_truth.eddy_movement_over_time 1.0 1.0 0.2 3.0 1.5 0.3 1 55 7 46
fail=$?
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed in CompareMovementOverTime.py"
exit 1;
fi
#
# Next .eddy_outlier_n_stdev_map
#
echo "Now running CompareOutlierNStdevMaps.py"
${scriptdir}/CompareOutlierNStdevMaps.py ${odir}/${oname}.eddy_outlier_n_stdev_map ${indir}/EddyS2VTestData/eddyData/NStdevMapRef/ref.eddy_outlier_n_stdev_map 0.2 0.03 0.05 0.02 55 7 46
fail=$?
if [ $fail -gt 0 ]; then
echo "feedsRun: Test failed in CompareOutlierNStdevMaps.py"
exit 1;
fi
exit 0
Part of FSL (build 508)
eddy
Copyright(c) 2015, University of Oxford (Jesper Andersson)
Usage:
eddy --monsoon
Compulsory arguments (You MUST set one or more of):
--imain File containing all the images to estimate distortions for
--mask Mask to indicate brain
--index File containing indices for all volumes in --imain into --acqp and --topup
--acqp File containing acquisition parameters
--bvecs File containing the b-vectors for all volumes in --imain
--bvals File containing the b-values for all volumes in --imain
--out Basename for output
Optional arguments (You may optionally specify one or more of):
--mb Multi-band factor
--mb_offs Multi-band offset (-1 if bottom slice removed, 1 if top slice removed)
--topup Base name for output files from topup
--field Name of file with susceptibility field (in Hz)
--field_mat Name of rigid body transform for susceptibility field
--flm First level EC model (linear/quadratic/cubic, default quadratic)
--slm Second level EC model (none/linear/quadratic, default none)
--fwhm FWHM for conditioning filter when estimating the parameters (default 0)
--niter Number of iterations (default 5)
--fep Fill empty planes in x- or y-directions
--interp Interpolation model for estimation step (spline/trilinear, default spline)
--resamp Final resampling method (jac/lsr, default jac)
--nvoxhp # of voxels used to estimate the hyperparameters (default 1000)
--initrand Resets rand for when selecting voxels (default false)
--ff Fudge factor for hyperparameter error variance (default 10.0)
--repol Detect and replace outlier slices
--ol_nstd Number of std off to qualify as outlier (default 4)
--ol_nvox Min # of voxels in a slice for inclusion in outlier detection (default 250)
--ol_type Type of outliers, slicewise (sw), groupwise (gw) or both (both). (default sw)
--ol_pos Consider both positive and negative outliers if set (default false)
--ol_sqr Consider outliers among sums-of-squared differences if set (default false)
--dont_sep_offs_move Do NOT attempt to separate field offset from subject movement (default false)
--dont_peas Do NOT perform a post-eddy alignment of shells (default false)
--data_is_shelled Assume, don't check, that data is shelled (default false)
-v,--verbose switch on diagnostic messages
-h,--help display this message
--with_outliers: Option doesn't exist!
Reading images
Performing volume-to-volume registration
Running Register
Entering EddyGpuUtils::LoadPredictionMaker
...................Allocated GPU # 0...................
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 0, Total mss = 32.3879
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 1, Total mss = 69.4732
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 2, Total mss = 52.6548
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 3, Total mss = 52.3811
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 4, Total mss = 52.2441
Running sm.Setb0Reference
Running sm.PolateB0MovPar
Running Register
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Calculating parameter updates
Iter: 0, Total mss = 0.794029
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 1, Total mss = 16.7945
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 2, Total mss = 16.3233
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 3, Total mss = 16.3347
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 4, Total mss = 16.1455
Running sm.SetDWIReference
Aligning shells (running PostEddyAlignShells)
Performing final outlier check
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Running sm.WriteOutlierFreeData
Running sm.WriteParameterFile
Running sm.WriteRegisteredImages
Running sm.WriteRotatedBVecs
Running sm.WriteMovementRMS
Running sm.WriteDisplacementFields
Reading images
Performing volume-to-volume registration
Running Register
Entering EddyGpuUtils::LoadPredictionMaker
...................Allocated GPU # 0...................
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 0, Total mss = 32.3879
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 1, Total mss = 69.473
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 2, Total mss = 52.6673
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 3, Total mss = 52.3908
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 4, Total mss = 52.2527
Running sm.Setb0Reference
Running sm.PolateB0MovPar
Running Register
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Calculating parameter updates
Iter: 0, Total mss = 0.776861
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 1, Total mss = 16.6888
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 2, Total mss = 16.3153
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 3, Total mss = 16.2089
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 4, Total mss = 16.2899
Running sm.SetDWIReference
Aligning shells (running PostEddyAlignShells)
Performing final outlier check
Entering EddyGpuUtils::LoadPredictionMaker
Loading prediction maker
Evaluating prediction maker model
Checking for outliers
Running sm.WriteOutlierFreeData
Running sm.WriteParameterFile
Running sm.WriteRegisteredImages
Running sm.WriteRegisteredImages
Running sm.RecycleOutliers
Running sm.WriteRotatedBVecs
Running sm.WriteMovementRMS
Running sm.WriteDisplacementFields
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment