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

TEST: New pyfeeds test for old feeds tests. Relies on "old_feeds" external data

parent 5a172e5b
No related branches found
No related tags found
1 merge request!52TEST: New pyfeeds test for old feeds tests. Relies on "originalFeeds" external data
Pipeline #16831 skipped
old_feeds
\ No newline at end of file
#!/usr/bin/env fsltclsh
#{{{ FEEDS - FSL Evaluation and Example Data Suite
# Stephen Smith and Matthew Webster, FMRIB Image Analysis Group
#
# Copyright (C) 2001-2011 University of Oxford
#
# Part of FSL - FMRIB's Software Library
# http://www.fmrib.ox.ac.uk/fsl
# fsl@fmrib.ox.ac.uk
#
# Developed at FMRIB (Oxford Centre for Functional Magnetic Resonance
# Imaging of the Brain), Department of Clinical Neurology, Oxford
# University, Oxford, UK
#
#
# LICENCE
#
# FMRIB Software Library, Release 4.0 (c) 2007, The University of Oxford
# (the "Software")
#
# The Software remains the property of the University of Oxford ("the
# University").
#
# The Software is distributed "AS IS" under this Licence solely for
# non-commercial use in the hope that it will be useful, but in order
# that the University as a charitable foundation protects its assets for
# the benefit of its educational and research purposes, the University
# makes clear that no condition is made or to be implied, nor is any
# warranty given or to be implied, as to the accuracy of the Software,
# or that it will be suitable for any particular purpose or for use
# under any specific conditions. Furthermore, the University disclaims
# all responsibility for the use which is made of the Software. It
# further disclaims any liability for the outcomes arising from using
# the Software.
#
# The Licensee agrees to indemnify the University and hold the
# University harmless from and against any and all claims, damages and
# liabilities asserted by third parties (including claims for
# negligence) which arise directly or indirectly from the use of the
# Software or the sale of any products based on the Software.
#
# No part of the Software may be reproduced, modified, transmitted or
# transferred in any form or by any means, electronic or mechanical,
# without the express permission of the University. The permission of
# the University is not required if the said reproduction, modification,
# transmission or transference is done without financial return, the
# conditions of this Licence are imposed upon the receiver of the
# product, and all original and amended source code is included in any
# transmitted product. You may be held legally responsible for any
# copyright infringement that is caused or encouraged by your failure to
# abide by these terms and conditions.
#
# You are not permitted under this Licence to use this Software
# commercially. Use for which any financial return is received shall be
# defined as commercial use, and includes (1) integration of all or part
# of the source code or the Software into a product for sale or license
# by or on behalf of Licensee to third parties or (2) use of the
# Software or any derivative of it for research with the final aim of
# developing software products for sale or license to a third party or
# (3) use of the Software or any derivative of it for research with the
# final aim of developing non-software products for sale or license to a
# third party, or (4) use of the Software to provide any service to an
# external organisation for which payment is received. If you are
# interested in using the Software commercially, please contact Isis
# Innovation Limited ("Isis"), the technology transfer company of the
# University, to negotiate a licence. Contact details are:
# innovation@isis.ox.ac.uk quoting reference DE/1112.
#}}}
#{{{ perror
proc perror { testimage scale } {
global FSLDIR INDIR OUTDIR PTHRESH MAXPERROR
if { ! [ imtest $OUTDIR/$testimage ] } {
set PERROR 100
puts "No output image created"
} else {
exec sh -c "${FSLDIR}/bin/fslmaths $INDIR/$testimage -sub $OUTDIR/$testimage -sqr $OUTDIR/errsq -odt float"
exec sh -c "${FSLDIR}/bin/fslmaths $INDIR/$testimage -sqr $OUTDIR/meansq -odt float"
set PERROR [ expr int ( $scale * 10000.0 * sqrt ( \
[ exec ${FSLDIR}/bin/fslstats $OUTDIR/errsq -m ] / \
[ exec ${FSLDIR}/bin/fslstats $OUTDIR/meansq -m ] ) ) / 100.00 ]
puts "% error = $PERROR"
}
if { $PERROR > $PTHRESH } {
puts "Warning - test failed!"
}
if { $PERROR > $MAXPERROR } {
set MAXPERROR $PERROR
}
return $PERROR
}
#}}}
#{{{ simpleperror
proc simpleperror { a b denom } {
global PTHRESH MAXPERROR
set PERROR [ expr int ( 10000.0 * ( $a - $b ) / $denom ) / 100.00 ]
if { $PERROR < 0 } {
set PERROR [ expr 0 - $PERROR ]
}
puts "% error = $PERROR"
if { $PERROR > $PTHRESH } {
puts "Warning - test failed!"
}
if { $PERROR > $MAXPERROR } {
set MAXPERROR $PERROR
}
return $PERROR
}
#{{{ setup vars and first printouts
set feeds_list "fdt fugue susan sienax bet2 feat melodic first fnirt"
foreach f $feeds_list {
set feeds($f) 1
}
set OUTDIR [ lindex $argv 0 ]
set INDIR "[ lindex $argv 1 ]/old_feeds"
set FSLDIR $env(FSLDIR)
set PTHRESH 1
set MAXPERROR 0
set INMEDX 0
set INGUI 0
source ${FSLDIR}/tcl/fslstart.tcl
puts "\nFSL Evaluation and Example Data Suite\n"
puts "start time = [ exec date ]"
puts "hostname = [ exec hostname ]"
puts "os = [ exec uname -a ]\n"
puts "Input directory = $INDIR"
puts "Output directory = $OUTDIR"
puts "FSLDIR = $FSLDIR"
set logout $OUTDIR/LOG
#}}}
# to add ASAP:
# filmbabe (make_flobs and filmbabe) / mm / randomise
#{{{ FUGUE
if { $feeds(fugue) } {
puts "\nStarting PRELUDE & FUGUE at [ exec date ]"
fsl:exec "${FSLDIR}/bin/prelude -c $INDIR/fieldmap -o $OUTDIR/unwrapped_phase"
perror unwrapped_phase 0.5
fsl:exec "${FSLDIR}/bin/fugue -i $INDIR/epi -p $OUTDIR/unwrapped_phase -d 0.295 -u $OUTDIR/unwarped_epi"
perror unwarped_epi 0.2
}
#}}}
#{{{ SUSAN
if { $feeds(susan) } {
puts "\nStarting SUSAN at [ exec date ]"
fsl:exec "${FSLDIR}/bin/susan $INDIR/structural 2000 2 3 1 0 $OUTDIR/structural_susan"
perror structural_susan 0.25
}
#}}}
#{{{ SIENAX
if { $feeds(sienax) } {
puts "\nStarting SIENAX (including testing BET and FLIRT and FAST) at [ exec date ]"
fsl:exec "${FSLDIR}/bin/imcp $INDIR/structural $OUTDIR/structural"
fsl:exec "cd $OUTDIR ; ${FSLDIR}/bin/sienax structural -d -r"
puts "checking error on BET:"
perror structural_sienax/I_brain 0.2
puts "checking error on FLIRT:"
perror structural_sienax/I_stdmask 0.01
puts "checking error on FAST:"
puts "checking error on single-image binary segmentation:"
perror structural_sienax/I_stdmaskbrain_seg 0.05
puts "checking error on partial volume images:"
perror structural_sienax/I_stdmaskbrain_pve_0 0.02
perror structural_sienax/I_stdmaskbrain_pve_1 0.03
perror structural_sienax/I_stdmaskbrain_pve_2 0.03
puts "checking error on SIENAX volume outputs:"
foreach sienastats { pgrey vcsf GREY WHITE BRAIN } {
set r [ exec sh -c "grep $sienastats $OUTDIR/structural_sienax/report.sienax | awk '{ print \$2 }'" ]
set d [ exec sh -c "grep $sienastats $INDIR/structural_sienax/report.sienax | awk '{ print \$2 }'" ]
simpleperror $r $d 1600000
}
}
#}}}
#{{{ BET2
if { $feeds(bet2) } {
puts "\nStarting BET2 at [ exec date ]"
fsl:exec "/bin/cp $INDIR/head_t?.nii.gz $OUTDIR"
fsl:exec "cd $OUTDIR ; ${FSLDIR}/bin/bet head_t1 head_t1_brain -A2 head_t2"
puts "checking error on T1 brain extraction:"
perror head_t1_brain 0.05
puts "checking error on skull and scalp surfaces:"
perror head_t1_brain_inskull_mesh .01
perror head_t1_brain_outskull_mesh .01
perror head_t1_brain_outskin_mesh .01
}
#}}}
#{{{ FEAT
if { $feeds(feat) } {
puts "\nStarting FEAT at [ exec date ]"
# fix FEAT setup file to use INDIR, OUTDIR and FSLDIR
fsl:exec "cp ${INDIR}/fmri.feat/design.fsf ${OUTDIR}/design.fsf"
fsl:echo ${OUTDIR}/design.fsf "
set fmri(regstandard) ${FSLDIR}/data/standard/MNI152_T1_2mm_brain
set feat_files(1) ${INDIR}/fmri
set highres_files(1) ${INDIR}/structural_brain
set fmri(outputdir) ${OUTDIR}/fmri.feat"
# run FEAT
fsl:exec "${FSLDIR}/bin/feat ${OUTDIR}/design.fsf"
puts "checking error on filtered functional data:"
perror fmri.feat/filtered_func_data 0.1
puts "checking error on raw Z stat images:"
perror fmri.feat/stats/zstat1 0.02
perror fmri.feat/stats/zstat2 0.02
perror fmri.feat/stats/zfstat1 0.02
puts "checking error on thresholded Z stat images:"
perror fmri.feat/thresh_zstat1 0.02
perror fmri.feat/thresh_zstat2 0.02
perror fmri.feat/thresh_zfstat1 0.02
puts "checking error on registration images:"
perror fmri.feat/reg/example_func2highres 0.02
perror fmri.feat/reg/example_func2standard 0.02
#{{{ check error on largest cluster of Talairached zfstat1
puts "checking error on position of largest cluster of Talairached zfstat1:"
set iptr [ open ${INDIR}/fmri.feat/cluster_zfstat1_std.txt r ]
gets $iptr line
gets $iptr line
scan $line "%f %f %f %f %f %f %f %f %f" D(1) D(2) D(3) D(4) D(5) D(6) D(7) D(8) D(9)
close $iptr
set iptr [ open ${OUTDIR}/fmri.feat/cluster_zfstat1_std.txt r ]
gets $iptr line
gets $iptr line
scan $line "%f %f %f %f %f %f %f %f %f %f %f" R(1) R(2) R(3) R(4) R(5) R(6) R(7) R(8) R(9) R(10) R(11)
close $iptr
simpleperror $D(4) $R(6) 500
simpleperror $D(5) $R(7) 500
simpleperror $D(6) $R(8) 500
simpleperror $D(7) $R(9) 500
simpleperror $D(8) $R(10) 500
simpleperror $D(9) $R(11) 500
#}}}
}
#}}}
#{{{ MELODIC
if { $feeds(melodic) } {
puts "\nStarting MELODIC at [ exec date ]"
fsl:exec "${FSLDIR}/bin/melodic -i $INDIR/fmri -o $OUTDIR/fmri.ica --tr=3 --seed=2"
fsl:exec "${FSLDIR}/bin/fslcc $INDIR/fmri.ica/melodic_IC $OUTDIR/fmri.ica/melodic_IC > $OUTDIR/fmri.ica/fslcc.txt"
set MAXV 0
set MAXA 0
set iptr [ open $OUTDIR/fmri.ica/fslcc.txt r ]
while { ( [ gets $iptr line ] >= 0 ) } {
scan $line "%d %d %f" A B C
if { $A == 52 } {
if { $C > $MAXV } {
set MAXV $C
}
}
if { $A == 39 } {
if { $C > $MAXA } {
set MAXA $C
}
}
}
close $iptr
if { $MAXA < $MAXV } {
set MAXV $MAXA
}
simpleperror $MAXV 1 60
}
#}}}
#{{{ FIRST
if { $feeds(first) } {
puts "\nStarting FIRST at [ exec date ]"
fsl:exec "${FSLDIR}/bin/first_flirt $INDIR/structural $OUTDIR/structural_to_std_sub"
fsl:exec "${FSLDIR}/bin/run_first -i $INDIR/structural -t $OUTDIR/structural_to_std_sub.mat -n 20 -o $OUTDIR/structural_first_L_Hipp -m ${FSLDIR}/data/first/models_336_bin/L_Hipp_bin.bmv"
perror structural_first_L_Hipp 0.01
}
#}}}
#{{{ FDT
if { $feeds(fdt) } {
puts "\nStarting FDT (bedpost) at [ exec date ]"
fsl:exec "cp -r $INDIR/fdt_subj1 $OUTDIR"
fsl:exec "unset FSLMACHINELIST; ${FSLDIR}/bin/bedpostx $OUTDIR/fdt_subj1 -n 1"
puts "checking error on bedpost output:"
perror fdt_subj1.bedpostX/dyads1 .005
perror fdt_subj1.bedpostX/mean_f1samples .005
perror fdt_subj1.bedpostX/mean_ph1samples .003
perror fdt_subj1.bedpostX/mean_th1samples .002
perror fdt_subj1.bedpostX/merged_f1samples .005
perror fdt_subj1.bedpostX/merged_ph1samples .003
perror fdt_subj1.bedpostX/merged_th1samples .002
}
if { $feeds(fnirt) } {
puts "\nStarting FNIRT at [ exec date ]"
fsl:exec "cp -r $INDIR/feeds_fnirt* $OUTDIR"
fsl:exec "cp -r $INDIR/sad* $OUTDIR"
fsl:exec "cp -r $INDIR/happy* $OUTDIR"
set cwd [ pwd ]
cd $OUTDIR
fsl:exec "${FSLDIR}/bin/fnirt --config=feeds_fnirt"
cd $cwd
perror feeds_fnirt_sad2happy 0.1
}
#}}}
#{{{ finish up
puts "\nend time = [ exec date ]\n"
if { $MAXPERROR < $PTHRESH } {
puts "\nAll tests passed"
exit 0
} else {
puts "\nWarning - not all tests passed"
exit 1
}
#}}}
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