From f881b286a8c682b3fc8ea81495b8a92280ae2d48 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Thu, 17 Mar 2022 12:14:49 +0000 Subject: [PATCH] MNT: Allow fsl_sub to fail, e.g. when trying to run eddy_cuda on a non-cuda machine. Save runEddy output to file so we can inspect it on failures --- eddy/feedsRun.EddyHigh_b_Test | 20 +++++++++++--------- eddy/feedsRun.EddyLSRTest | 20 +++++++++++--------- eddy/feedsRun.EddyMBSTest | 23 ++++++++++++----------- eddy/feedsRun.EddyS2VTest | 23 ++++++++++++----------- eddy/feedsRun.EddyTest | 15 ++++++++------- eddy/runEddy | 17 +++++++++++++---- 6 files changed, 67 insertions(+), 51 deletions(-) diff --git a/eddy/feedsRun.EddyHigh_b_Test b/eddy/feedsRun.EddyHigh_b_Test index e04dd59..627b423 100755 --- a/eddy/feedsRun.EddyHigh_b_Test +++ b/eddy/feedsRun.EddyHigh_b_Test @@ -41,17 +41,19 @@ if [ ! -d "$indir" ]; then fi # Prepare arguments to pass to eddy -eddy_args="--imain=${indir}/EddyHigh_b_TestData/eddyData/testData - --mask=${indir}/EddyHigh_b_TestData/eddyData/testMask - --bvals=${indir}/EddyHigh_b_TestData/eddyData/testBvals - --bvecs=${indir}/EddyHigh_b_TestData/eddyData/testBvecs - --index=${indir}/EddyHigh_b_TestData/eddyData/testIndex - --acqp=${indir}/EddyHigh_b_TestData/eddyData/testAcqparams - --topup=${indir}/EddyHigh_b_TestData/eddyData/testTopup +eddy_args="--imain=${indir}/EddyHigh_b_TestData/eddyData/testData + --mask=${indir}/EddyHigh_b_TestData/eddyData/testMask + --bvals=${indir}/EddyHigh_b_TestData/eddyData/testBvals + --bvecs=${indir}/EddyHigh_b_TestData/eddyData/testBvecs + --index=${indir}/EddyHigh_b_TestData/eddyData/testIndex + --acqp=${indir}/EddyHigh_b_TestData/eddyData/testAcqparams + --topup=${indir}/EddyHigh_b_TestData/eddyData/testTopup --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --very_verbose" # run eddy -output_prefixes=$(${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} | tail -n1) +${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} > ${odir}/EddyHigh_b_Test.runEddy.o$$ +output_prefixes=$(tail -n1 ${odir}/EddyHigh_b_Test.runEddy.o$$) + # Define some constants max_mean_ima_diff=15.0 @@ -65,7 +67,7 @@ for prefix in ${output_prefixes}; do else precomputed="${indir}/EddyHigh_b_TestData/eddyData/Precomputed/eddy_openmp_output" fi - + ${thisdir}/EddyHigh_b_Feeds.py ${odir} `basename ${prefix}` \ `imglob -extension ${indir}/EddyHigh_b_TestData/eddyData/testMask` \ `imglob -extension ${prefix}` \ diff --git a/eddy/feedsRun.EddyLSRTest b/eddy/feedsRun.EddyLSRTest index 0e0fdaa..fd8212f 100755 --- a/eddy/feedsRun.EddyLSRTest +++ b/eddy/feedsRun.EddyLSRTest @@ -38,18 +38,20 @@ if [ ! -d "$indir" ]; then fi # Prepare arguments to pass to eddy -eddy_args="--imain=${indir}/EddyLSRTestData/eddyData/testData - --mask=${indir}/EddyLSRTestData/eddyData/testMask - --bvals=${indir}/EddyLSRTestData/eddyData/testBvals - --bvecs=${indir}/EddyLSRTestData/eddyData/testBvecs - --index=${indir}/EddyLSRTestData/eddyData/testIndex - --acqp=${indir}/EddyLSRTestData/eddyData/testAcqparams - --topup=${indir}/EddyLSRTestData/eddyData/testTopup - --resamp=lsr --fep --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 +eddy_args="--imain=${indir}/EddyLSRTestData/eddyData/testData + --mask=${indir}/EddyLSRTestData/eddyData/testMask + --bvals=${indir}/EddyLSRTestData/eddyData/testBvals + --bvecs=${indir}/EddyLSRTestData/eddyData/testBvecs + --index=${indir}/EddyLSRTestData/eddyData/testIndex + --acqp=${indir}/EddyLSRTestData/eddyData/testAcqparams + --topup=${indir}/EddyLSRTestData/eddyData/testTopup + --resamp=lsr --fep --nvoxhp=5000 --repol --fwhm=10,0,0,0,0 --dont_peas --very_verbose" # run eddy -output_prefixes=$(${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} | tail -n1) +${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} > ${odir}/EddyLSRTest.runEddy.o$$ +output_prefixes=$(tail -n1 ${odir}/EddyLSRTest.runEddy.o$$) + # Define some constants max_mean_ima_diff=15.0 diff --git a/eddy/feedsRun.EddyMBSTest b/eddy/feedsRun.EddyMBSTest index 273f2ad..488fdf8 100755 --- a/eddy/feedsRun.EddyMBSTest +++ b/eddy/feedsRun.EddyMBSTest @@ -43,19 +43,20 @@ if [ ! -d "$indir" ]; then fi # Prepare arguments to pass to eddy -eddy_args="--imain=${indir}/EddyMBSTestData/eddyData/testData - --acqp=${indir}/EddyMBSTestData/eddyData/testAcqparams - --mask=${indir}/EddyMBSTestData/eddyData/testMask - --index=${indir}/EddyMBSTestData/eddyData/testIndex - --bvecs=${indir}/EddyMBSTestData/eddyData/testBvecs - --bvals=${indir}/EddyMBSTestData/eddyData/testBvals - --topup=${indir}/EddyMBSTestData/eddyData/testTopup - --fwhm=10,5,2,0,0,0,0,0 --niter=8 --nvoxhp=2000 - --flm=quadratic --dont_peas --estimate_move_by_susceptibility +eddy_args="--imain=${indir}/EddyMBSTestData/eddyData/testData + --acqp=${indir}/EddyMBSTestData/eddyData/testAcqparams + --mask=${indir}/EddyMBSTestData/eddyData/testMask + --index=${indir}/EddyMBSTestData/eddyData/testIndex + --bvecs=${indir}/EddyMBSTestData/eddyData/testBvecs + --bvals=${indir}/EddyMBSTestData/eddyData/testBvals + --topup=${indir}/EddyMBSTestData/eddyData/testTopup + --fwhm=10,5,2,0,0,0,0,0 --niter=8 --nvoxhp=2000 + --flm=quadratic --dont_peas --estimate_move_by_susceptibility --mbs_niter=20 --mbs_lambda=10 --mbs_ksp=10 --very_verbose" # run eddy -output_prefixes=$(${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} | tail -n1) +${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} > ${odir}/EddyMBSTest.runEddy.o$$ +output_prefixes=$(tail -n1 ${odir}/EddyMBSTest.runEddy.o$$) # Define some constants max_mean_dfield_diff=0.03 @@ -66,7 +67,7 @@ max_max_ima_diff=0.6 # Check the results against precomputed results -for prefix in ${output_prefixes}; do +for prefix in ${output_prefixes}; do ${thisdir}/MoveBySuscFeeds.py ${odir} `basename ${prefix}` \ `imglob -extension ${indir}/EddyMBSTestData/eddyData/Precomputed/BrainMaskForComparison` \ `imglob -extension ${prefix}` \ diff --git a/eddy/feedsRun.EddyS2VTest b/eddy/feedsRun.EddyS2VTest index c2ae886..6d79f0d 100755 --- a/eddy/feedsRun.EddyS2VTest +++ b/eddy/feedsRun.EddyS2VTest @@ -40,20 +40,21 @@ if [ ! -d "$indir" ]; then fi # Prepare arguments to pass to eddy -eddy_args="--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 --ol_nstd=6 --ol_nvox=500 - --niter=8 --fwhm=10,6,4,2,0,0,0,0 --nvoxhp=5000 - --mporder=16 --s2v_niter=10 --s2v_interp=trilinear - --s2v_lambda=1 --very_verbose +eddy_args="--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 --ol_nstd=6 --ol_nvox=500 + --niter=8 --fwhm=10,6,4,2,0,0,0,0 --nvoxhp=5000 + --mporder=16 --s2v_niter=10 --s2v_interp=trilinear + --s2v_lambda=1 --very_verbose --slspec=${indir}/EddyS2VTestData/eddyData/testSlspec " # run eddy -output_prefixes=$(${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} | tail -n1) +${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} > ${odir}/EddyS2VTest.runEddy.o$$ +output_prefixes=$(tail -n1 ${odir}/EddyS2VTest.runEddy.o$$) # Define some constants # These are for the comparison of output images divided on b=0, b=700 and b=2000 diff --git a/eddy/feedsRun.EddyTest b/eddy/feedsRun.EddyTest index 3c0d2b2..6edd25f 100755 --- a/eddy/feedsRun.EddyTest +++ b/eddy/feedsRun.EddyTest @@ -37,16 +37,17 @@ if [ ! -d "$indir" ]; then fi # Prepare arguments to pass to eddy -eddy_args="--imain=${indir}/EddyTestData/eddyData/testData - --mask=${indir}/EddyTestData/eddyData/testMask - --bvals=${indir}/EddyTestData/eddyData/testBvals - --bvecs=${indir}/EddyTestData/eddyData/testBvecs - --index=${indir}/EddyTestData/eddyData/testIndex - --acqp=${indir}/EddyTestData/eddyData/testAcqparams +eddy_args="--imain=${indir}/EddyTestData/eddyData/testData + --mask=${indir}/EddyTestData/eddyData/testMask + --bvals=${indir}/EddyTestData/eddyData/testBvals + --bvecs=${indir}/EddyTestData/eddyData/testBvecs + --index=${indir}/EddyTestData/eddyData/testIndex + --acqp=${indir}/EddyTestData/eddyData/testAcqparams --repol --fwhm=10,0,0,0,0 --dfields -v" # run eddy -output_prefixes=$(${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} | tail -n1) +${thisdir}/runEddy ${exedir} ${odir} ${eddy_args} > ${odir}/EddyTest.runEddy.o$$ +output_prefixes=$(tail -n1 ${odir}/EddyTest.runEddy.o$$) # Define some constants max_mean_dfield_diff=0.5 diff --git a/eddy/runEddy b/eddy/runEddy index 3dba71d..8e583c1 100755 --- a/eddy/runEddy +++ b/eddy/runEddy @@ -67,10 +67,14 @@ do fsl_sub="fsl_sub -l ${outdir} -q long.q -s openmp,6" fi - jid=`${fsl_sub} ${exe} --out=${outdir}/eddyOutput_${variant} ${eddy_args}` - if [ $? -ne 0 ]; then - echo "Error submitting ${exe} ${eddy_args}" - exit 1 + # fsl_sub will return an error (and not + # output a job id) if we try to run a + # cuda exe on a non-cuda-capable machine + # or queue. So we allow it to fail. + jid=$(${fsl_sub} ${exe} --out=${outdir}/eddyOutput_${variant} ${eddy_args} || true) + if [ "${jid}" == "" ]; then + echo "Error submitting ${exe} - skipping" + continue fi if [[ "${exe}" == *"cuda"* ]]; then @@ -80,6 +84,11 @@ do fi done +if [ "${cuda_jids}" == "" ] && [ "${cpu_jids}" == "" ]; then + echo "Unable to submit any eddy executables!" + exit 1 +fi + # If running on a cluster, wait # until all jobs have finished. # If not running on a cluster, -- GitLab