#!/bin/sh #{{{ copyright # featregapply - apply registration in a FEAT directory # # Stephen Smith, FMRIB Image Analysis Group # # Copyright (C) 2002-2008 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 5.0 (c) 2012, 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/9564. #}}} #{{{ script setup # the next line restarts using wish \ exec $FSLTCLSH "$0" "$@" set INGUI 0 source $env(FSLDIR)/tcl/fslstart.tcl #}}} #{{{ proc runregfiles proc runregfiles { in out } { catch { exec sh -c "mkdir -p reg_standard/[ file dirname $out ]" } errmsg if { ! [ imtest reg_standard/$out ] } { return 1 } elseif { [ file mtime [ imglob -extension reg_standard/$out ] ] < [ file mtime [ imglob -extension $in ] ] || [ file mtime [ imglob -extension reg_standard/$out ] ] < [ file mtime reg/example_func2standard.mat ] } { return 1 } else { return 0 } } #}}} #{{{ proc runflirt proc runflirt { in ref out space interp datatype } { global FSLDIR fmri if { [ runregfiles $in $out ] } { set TMPNAM [ fsl:exec "${FSLDIR}/bin/tmpnam frgrot" -n ] if { [ imtest reg/highres2standard_warp ] && ( $space == "example_func" || $space == "highres" ) } { set PREMAT "" if { $space == "example_func" } { set PREMAT "--premat=reg/example_func2highres.mat" } if { $interp == "nearestneighbour" } { set interp nn } fsl:exec "${FSLDIR}/bin/applywarp --ref=$ref --in=$in --out=$TMPNAM --warp=reg/highres2standard_warp $PREMAT --interp=$interp" } else { set FLIRTINIT "" if { $space != "standard" } { set FLIRTINIT "-init reg/${space}2standard.mat" } if { [ info exists fmri(singleSlice) ] && $fmri(singleSlice) == "1" } { fsl:exec "${FSLDIR}/bin/flirt -2D -ref $ref -in $in -out $TMPNAM -applyxfm $FLIRTINIT -interp $interp -datatype $datatype" } else { fsl:exec "${FSLDIR}/bin/flirt -ref $ref -in $in -out $TMPNAM -applyxfm $FLIRTINIT -interp $interp -datatype $datatype" } } immv $TMPNAM reg_standard/$out fsl:exec "/bin/rm $TMPNAM" -n } } #}}} #{{{ process options if { [ lindex $argv 0 ] == "" } { puts " Usage: featregapply \[-f\] \[-c\] \[-l \] \[-s \] -f : force featregapply to run even if already run on this FEAT directory -c : cleanup, i.e. remove all featregapply output -l : upsample functional-space to standard space using trilinear interpolation -s : upsample functional-space to standard space using spline (like sinc) interpolation " exit 1 } cd [ lindex $argv 0 ] if { [ file exists design.lev ] } { exit 0 } if { ! [ file exists reg/example_func2standard.mat ] } { puts "Error - registration has not been run for [ pwd ]" exit 1 } feat5:setupdefaults feat5:load -1 1 design.fsf set REF reg/standard # for older first-level FEAT dirs: create mean_func if it's not already there if { [ imtest filtered_func_data ] && ! [ imtest mean_func ] } { fsl:exec "${FSLDIR}/bin/fslmaths filtered_func_data -Tmean mean_func" } catch { exec sh -c "mkdir -p reg_standard/reg reg_standard/stats" } errmsg for { set i 1 } { $i < [ llength $argv ] } { incr i 1 } { if { ! [ string compare [ lindex $argv $i ] "-f" ] } { fsl:exec "/bin/rm -rf reg_standard" } elseif { ! [ string compare [ lindex $argv $i ] "-c" ] } { fsl:exec "/bin/rm -rf reg_standard" exit 0 } elseif { ! [ string compare [ lindex $argv $i ] "-l" ] } { incr i 1 set theim [ lindex $argv $i ] runflirt $theim $REF $theim example_func trilinear float } elseif { ! [ string compare [ lindex $argv $i ] "-s" ] } { incr i 1 set theim [ lindex $argv $i ] runflirt $theim $REF $theim example_func spline float } } #}}} #{{{ apply the registration # MELODIC upsampling if { [ info exists fmri(inmelodic) ] && $fmri(inmelodic) } { if { $fmri(regstandard_res)>0.0001 } { fsl:exec "${FSLDIR}/bin/flirt -ref reg/standard -in reg/standard -out reg_standard/standard -applyisoxfm $fmri(regstandard_res)" set REF reg_standard/standard } set BGIMAGE "" switch $fmri(bgimage) { 1 - 2 { set BGIMAGE highres } 3 - 4 { set BGIMAGE example_func } } if { [ imtest reg/$BGIMAGE ] } { runflirt reg/$BGIMAGE $REF bg_image $BGIMAGE spline float } else { imcp reg_standard/standard reg_standard/bg_image } runflirt filtered_func_data $REF filtered_func_data example_func trilinear float fsl:exec "${FSLDIR}/bin/fslmaths reg_standard/filtered_func_data -Tstd -bin reg_standard/mask -odt char" } else { foreach input [ imglob example_func mean_func ] { runflirt $input $REF $input example_func spline float } foreach input [ imglob stats/cope* stats/varcope* stats/tdof_t* ] { runflirt $input $REF $input example_func trilinear float } foreach input [ imglob mask ] { runflirt $input $REF $input example_func nearestneighbour char } if { [ file exists reg/highres2standard.mat ] } { runflirt reg/highres $REF reg/highres highres spline float } } #}}}