====== FEAT Level 1 Example Cluster Scripts ====== These example scripts will allow you to run all of the FEAT level one analyses (intra-subject run-by-run) in parallel on the cluster. The script "qsub_feat_level1" calls a cluster-friendly script called "qsub_feat_level1_onerun" for each of the runs in a session. By running this way, all runs are submitted at the same time, which will decrease the amount of processing time it takes to get the first level results. As with previous FSL scripts, the 1st level template fsf file must first be created using the FEAT GUI and saved with keywords replacing any fields that are subject dependent. ===== qsub_feat_level1 ===== Example usage: [user@head ~]$ ./qsub_feat_level1 99999 Or, if the file has been set (using the "chmod" command) to have execute properties: [user@head ~]$ qsub_feat_level1 99999 Copy and edit code below: #!/bin/bash # First input is exam number SUBJ=$1 # Loop through the runs submitting a job to grid engine for each run for i in 01 02 03 04 05 06 07 08 do # Call qsub_feat_level1_onerun # Creates an fsf file and runs feat on that fsf file for one run # Two input arguments: Subject ID and run name qsub -v EXPERIMENT=Dummy.01 qsub_feat_level1_onerun $SUBJ run${i} done ===== qsub_feat_level1_onerun ===== Example usage: [user@head ~]$ qsub -v EXPERIMENT=Dummy.01 qsub_feat_level1_onerun 99999 run01 Copy and edit code below: #!/bin/sh # This is a BIAC template script for jobs on the cluster # You have to provide the Experiment on command line # when you submit the job the cluster. # # > qsub -v EXPERIMENT=Dummy.01 script.sh args # # There are 2 USER sections # 1. USER DIRECTIVE: If you want mail notifications when # your job is completed or fails you need to set the # correct email address. # # 2. USER SCRIPT: Add the user script in this section. # Within this section you can access your experiment # folder using $EXPERIMENT. All paths are relative to this variable # eg: $EXPERIMENT/Data $EXPERIMENT/Analysis # By default all terminal output is routed to the " Analysis " # folder under the Experiment directory i.e. $EXPERIMENT/Analysis # To change this path, set the OUTDIR variable in this section # to another location under your experiment folder # eg: OUTDIR=$EXPERIMENT/Analysis/GridOut # By default on successful completion the job will return 0 # If you need to set another return code, set the RETURNCODE # variable in this section. To avoid conflict with system return # codes, set a RETURNCODE higher than 100. # eg: RETURNCODE=110 # Arguments to the USER SCRIPT are accessible in the usual fashion # eg: $1 $2 $3 # The remaining sections are setup related and don't require # modifications for most scripts. They are critical for access # to your data # --- BEGIN GLOBAL DIRECTIVE -- #$ -S /bin/sh #$ -o $HOME/$JOB_NAME.$JOB_ID.out #$ -e $HOME/$JOB_NAME.$JOB_ID.out #$ -m ea # -- END GLOBAL DIRECTIVE -- # -- BEGIN PRE-USER -- #Name of experiment whose data you want to access EXPERIMENT=${EXPERIMENT:?"Experiment not provided"} EXPERIMENT=`findexp $EXPERIMENT` EXPERIMENT=${EXPERIMENT:?"Returned NULL Experiment"} if [ $EXPERIMENT = "ERROR" ] then exit 32 else #Timestamp echo "----JOB [$JOB_NAME.$JOB_ID] START [`date`] on HOST [$HOSTNAME]----" # -- END PRE-USER -- # ********************************************************** # -- BEGIN USER DIRECTIVE -- # Send notifications to the following address #$ -M user@somewhere.edu # -- END USER DIRECTIVE -- # -- BEGIN USER SCRIPT -- # User script goes here #Need to input EXPERIMENT, SUBJ and RUN NAME #Example qsub -v EXPERIMENT=Dummy.01 qsub_feat_level1_onerun 99999 run01 SUBJ=$1 RUN=$2 #Set the directories FUNCDIR=$EXPERIMENT/Data/FSLFunc/$SUBJ BEHAVDIR=$EXPERIMENT/Data/Behav/$SUBJ/FSL/$RUN ANAT=$EXPERIMENT/Data/$SUBJ/anat_brain.nii.gz TEMPLATEDIR=$EXPERIMENT/Scripts/FSL OUTDIR=$EXPERIMENT/Analysis/FSL/$SUBJ #Set some variables OUTPUT=$OUTDIR/$RUN DATA=$FUNCDIR/$RUN/${RUN}.hdr ORIENT=$FUNCDIR/ORIENT.mat TARG=$BEHAVDIR/Targ.stf NEUT=$BEHAVDIR/NeutCorr.stf SCARY=$BEHAVDIR/ScaryCorr.stf mkdir -p $OUTDIR cd $TEMPLATEDIR #Makes the fsf file using the template for i in 'template.fsf'; do sed -e 's@OUTPUT@'$OUTPUT'@g' \ -e 's@ANAT@'$ANAT'@g' \ -e 's@ORIENT@'$ORIENT'@g' \ -e 's@TARG@'$TARG'@g' \ -e 's@NEUT@'$NEUT'@g' \ -e 's@SCARY@'$SCARY'@g' \ -e 's@FSLDIR@'$FSLDIR'@g' \ -e 's@DATA@'$DATA'@g' <$i> ${OUTDIR}/FEAT_${RUN}.fsf done #Run feat analysis feat ${OUTDIR}/FEAT_${RUN}.fsf # -- END USER SCRIPT -- # # ********************************************************** # -- BEGIN POST-USER -- echo "----JOB [$JOB_NAME.$JOB_ID] STOP [`date`]----" OUTDIR=${OUTDIR:-$EXPERIMENT/Analysis} mv $HOME/$JOB_NAME.$JOB_ID.out $OUTDIR/$JOB_NAME.$JOB_ID.out RETURNCODE=${RETURNCODE:-0} exit $RETURNCODE fi # -- END POST USER--