s16.proc.FT.rest 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. #!/bin/tcsh -xef
  2. echo "auto-generated by afni_proc.py, Tue Jun 5 09:14:37 2018"
  3. echo "(version 6.14, May 25, 2018)"
  4. echo "execution started: `date`"
  5. # execute via :
  6. # tcsh -xef proc.FT.rest |& tee output.proc.FT.rest
  7. # =========================== auto block: setup ============================
  8. # script setup
  9. # take note of the AFNI version
  10. afni -ver
  11. # check that the current AFNI version is recent enough
  12. afni_history -check_date 3 May 2018
  13. if ( $status ) then
  14. echo "** this script requires newer AFNI binaries (than 3 May 2018)"
  15. echo " (consider: @update.afni.binaries -defaults)"
  16. exit
  17. endif
  18. # the user may specify a single subject to run with
  19. if ( $#argv > 0 ) then
  20. set subj = $argv[1]
  21. else
  22. set subj = FT.rest
  23. endif
  24. # assign output directory name
  25. set output_dir = $subj.results
  26. # verify that the results directory does not yet exist
  27. if ( -d $output_dir ) then
  28. echo output dir "$subj.results" already exists
  29. exit
  30. endif
  31. # set list of runs
  32. set runs = (`count -digits 2 1 3`)
  33. # create results and stimuli directories
  34. mkdir $output_dir
  35. mkdir $output_dir/stimuli
  36. # copy anatomy to results dir
  37. 3dcopy FT/FT_anat+orig $output_dir/FT_anat
  38. # ============================ auto block: tcat ============================
  39. # apply 3dTcat to copy input dsets to results dir,
  40. # while removing the first 2 TRs
  41. 3dTcat -prefix $output_dir/pb00.$subj.r01.tcat FT/FT_epi_r1+orig'[2..$]'
  42. 3dTcat -prefix $output_dir/pb00.$subj.r02.tcat FT/FT_epi_r2+orig'[2..$]'
  43. 3dTcat -prefix $output_dir/pb00.$subj.r03.tcat FT/FT_epi_r3+orig'[2..$]'
  44. # and make note of repetitions (TRs) per run
  45. set tr_counts = ( 150 150 150 )
  46. # -------------------------------------------------------
  47. # enter the results directory (can begin processing data)
  48. cd $output_dir
  49. # ========================== auto block: outcount ==========================
  50. # data check: compute outlier fraction for each volume
  51. touch out.pre_ss_warn.txt
  52. foreach run ( $runs )
  53. 3dToutcount -automask -fraction -polort 3 -legendre \
  54. pb00.$subj.r$run.tcat+orig > outcount.r$run.1D
  55. # censor outlier TRs per run, ignoring the first 0 TRs
  56. # - censor when more than 0.1 of automask voxels are outliers
  57. # - step() defines which TRs to remove via censoring
  58. 1deval -a outcount.r$run.1D -expr "1-step(a-0.1)" > rm.out.cen.r$run.1D
  59. # outliers at TR 0 might suggest pre-steady state TRs
  60. if ( `1deval -a outcount.r$run.1D"{0}" -expr "step(a-0.4)"` ) then
  61. echo "** TR #0 outliers: possible pre-steady state TRs in run $run" \
  62. >> out.pre_ss_warn.txt
  63. endif
  64. end
  65. # catenate outlier counts into a single time series
  66. cat outcount.r*.1D > outcount_rall.1D
  67. # catenate outlier censor files into a single time series
  68. cat rm.out.cen.r*.1D > outcount_${subj}_censor.1D
  69. # get run number and TR index for minimum outlier volume
  70. set minindex = `3dTstat -argmin -prefix - outcount_rall.1D\'`
  71. set ovals = ( `1d_tool.py -set_run_lengths $tr_counts \
  72. -index_to_run_tr $minindex` )
  73. # save run and TR indices for extraction of vr_base_min_outlier
  74. set minoutrun = $ovals[1]
  75. set minouttr = $ovals[2]
  76. echo "min outlier: run $minoutrun, TR $minouttr" | tee out.min_outlier.txt
  77. # ================================ despike =================================
  78. # apply 3dDespike to each run
  79. foreach run ( $runs )
  80. 3dDespike -NEW -nomask -prefix pb01.$subj.r$run.despike \
  81. pb00.$subj.r$run.tcat+orig
  82. end
  83. # ================================= tshift =================================
  84. # time shift data so all slice timing is the same
  85. foreach run ( $runs )
  86. 3dTshift -tzero 0 -quintic -prefix pb02.$subj.r$run.tshift \
  87. pb01.$subj.r$run.despike+orig
  88. end
  89. # --------------------------------
  90. # extract volreg registration base
  91. 3dbucket -prefix vr_base_min_outlier \
  92. pb02.$subj.r$minoutrun.tshift+orig"[$minouttr]"
  93. # ================================= align ==================================
  94. # for e2a: compute anat alignment transformation to EPI registration base
  95. # (new anat will be intermediate, stripped, FT_anat_ns+orig)
  96. align_epi_anat.py -anat2epi -anat FT_anat+orig \
  97. -save_skullstrip -suffix _al_junk \
  98. -epi vr_base_min_outlier+orig -epi_base 0 \
  99. -epi_strip 3dAutomask \
  100. -volreg off -tshift off
  101. # ================================== tlrc ==================================
  102. # warp anatomy to standard space
  103. @auto_tlrc -base TT_N27+tlrc -input FT_anat_ns+orig -no_ss
  104. # store forward transformation matrix in a text file
  105. cat_matvec FT_anat_ns+tlrc::WARP_DATA -I > warp.anat.Xat.1D
  106. # ================================= volreg =================================
  107. # align each dset to base volume, align to anat, warp to tlrc space
  108. # verify that we have a +tlrc warp dataset
  109. if ( ! -f FT_anat_ns+tlrc.HEAD ) then
  110. echo "** missing +tlrc warp dataset: FT_anat_ns+tlrc.HEAD"
  111. exit
  112. endif
  113. # register and warp
  114. foreach run ( $runs )
  115. # register each volume to the base image
  116. 3dvolreg -verbose -zpad 1 -base vr_base_min_outlier+orig \
  117. -1Dfile dfile.r$run.1D -prefix rm.epi.volreg.r$run \
  118. -cubic \
  119. -1Dmatrix_save mat.r$run.vr.aff12.1D \
  120. pb02.$subj.r$run.tshift+orig
  121. # create an all-1 dataset to mask the extents of the warp
  122. 3dcalc -overwrite -a pb02.$subj.r$run.tshift+orig -expr 1 \
  123. -prefix rm.epi.all1
  124. # catenate volreg/epi2anat/tlrc xforms
  125. cat_matvec -ONELINE \
  126. FT_anat_ns+tlrc::WARP_DATA -I \
  127. FT_anat_al_junk_mat.aff12.1D -I \
  128. mat.r$run.vr.aff12.1D > mat.r$run.warp.aff12.1D
  129. # apply catenated xform: volreg/epi2anat/tlrc
  130. 3dAllineate -base FT_anat_ns+tlrc \
  131. -input pb02.$subj.r$run.tshift+orig \
  132. -1Dmatrix_apply mat.r$run.warp.aff12.1D \
  133. -mast_dxyz 2.5 \
  134. -prefix rm.epi.nomask.r$run
  135. # warp the all-1 dataset for extents masking
  136. 3dAllineate -base FT_anat_ns+tlrc \
  137. -input rm.epi.all1+orig \
  138. -1Dmatrix_apply mat.r$run.warp.aff12.1D \
  139. -mast_dxyz 2.5 -final NN -quiet \
  140. -prefix rm.epi.1.r$run
  141. # make an extents intersection mask of this run
  142. 3dTstat -min -prefix rm.epi.min.r$run rm.epi.1.r$run+tlrc
  143. end
  144. # make a single file of registration params
  145. cat dfile.r*.1D > dfile_rall.1D
  146. # ----------------------------------------
  147. # create the extents mask: mask_epi_extents+tlrc
  148. # (this is a mask of voxels that have valid data at every TR)
  149. 3dMean -datum short -prefix rm.epi.mean rm.epi.min.r*.HEAD
  150. 3dcalc -a rm.epi.mean+tlrc -expr 'step(a-0.999)' -prefix mask_epi_extents
  151. # and apply the extents mask to the EPI data
  152. # (delete any time series with missing data)
  153. foreach run ( $runs )
  154. 3dcalc -a rm.epi.nomask.r$run+tlrc -b mask_epi_extents+tlrc \
  155. -expr 'a*b' -prefix pb03.$subj.r$run.volreg
  156. end
  157. # warp the volreg base EPI dataset to make a final version
  158. cat_matvec -ONELINE \
  159. FT_anat_ns+tlrc::WARP_DATA -I \
  160. FT_anat_al_junk_mat.aff12.1D -I > mat.basewarp.aff12.1D
  161. 3dAllineate -base FT_anat_ns+tlrc \
  162. -input vr_base_min_outlier+orig \
  163. -1Dmatrix_apply mat.basewarp.aff12.1D \
  164. -mast_dxyz 2.5 \
  165. -prefix final_epi_vr_base_min_outlier
  166. # create an anat_final dataset, aligned with stats
  167. 3dcopy FT_anat_ns+tlrc anat_final.$subj
  168. # record final registration costs
  169. 3dAllineate -base final_epi_vr_base_min_outlier+tlrc -allcostX \
  170. -input anat_final.$subj+tlrc |& tee out.allcostX.txt
  171. # -----------------------------------------
  172. # warp anat follower datasets (affine)
  173. 3dAllineate -source FT_anat+orig \
  174. -master anat_final.$subj+tlrc \
  175. -final wsinc5 -1Dmatrix_apply warp.anat.Xat.1D \
  176. -prefix anat_w_skull_warped
  177. # ================================== blur ==================================
  178. # blur each volume of each run
  179. foreach run ( $runs )
  180. 3dmerge -1blur_fwhm 4.0 -doall -prefix rm.pb04.$subj.r$run.blur \
  181. pb03.$subj.r$run.volreg+tlrc
  182. # and apply extents mask, since no scale block
  183. 3dcalc -a rm.pb04.$subj.r$run.blur+tlrc -b mask_epi_extents+tlrc \
  184. -expr 'a*b' -prefix pb04.$subj.r$run.blur
  185. end
  186. # ================================== mask ==================================
  187. # create 'full_mask' dataset (union mask)
  188. foreach run ( $runs )
  189. 3dAutomask -prefix rm.mask_r$run pb04.$subj.r$run.blur+tlrc
  190. end
  191. # create union of inputs, output type is byte
  192. 3dmask_tool -inputs rm.mask_r*+tlrc.HEAD -union -prefix full_mask.$subj
  193. # ---- create subject anatomy mask, mask_anat.$subj+tlrc ----
  194. # (resampled from tlrc anat)
  195. 3dresample -master full_mask.$subj+tlrc -input FT_anat_ns+tlrc \
  196. -prefix rm.resam.anat
  197. # convert to binary anat mask; fill gaps and holes
  198. 3dmask_tool -dilate_input 5 -5 -fill_holes -input rm.resam.anat+tlrc \
  199. -prefix mask_anat.$subj
  200. # compute tighter EPI mask by intersecting with anat mask
  201. 3dmask_tool -input full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  202. -inter -prefix mask_epi_anat.$subj
  203. # compute overlaps between anat and EPI masks
  204. 3dABoverlap -no_automask full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  205. |& tee out.mask_ae_overlap.txt
  206. # note Dice coefficient of masks, as well
  207. 3ddot -dodice full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  208. |& tee out.mask_ae_dice.txt
  209. # ---- create group anatomy mask, mask_group+tlrc ----
  210. # (resampled from tlrc base anat, TT_N27+tlrc)
  211. 3dresample -master full_mask.$subj+tlrc -prefix ./rm.resam.group \
  212. -input /home/rickr/abin/TT_N27+tlrc
  213. # convert to binary group mask; fill gaps and holes
  214. 3dmask_tool -dilate_input 5 -5 -fill_holes -input rm.resam.group+tlrc \
  215. -prefix mask_group
  216. # ---- segment anatomy into classes CSF/GM/WM ----
  217. 3dSeg -anat anat_final.$subj+tlrc -mask AUTO -classes 'CSF ; GM ; WM'
  218. # copy resulting Classes dataset to current directory
  219. 3dcopy Segsy/Classes+tlrc .
  220. # make individual ROI masks for regression (CSF GM WM and CSFe GMe WMe)
  221. foreach class ( CSF GM WM )
  222. # unitize and resample individual class mask from composite
  223. 3dmask_tool -input Segsy/Classes+tlrc"<$class>" \
  224. -prefix rm.mask_${class}
  225. 3dresample -master pb04.$subj.r01.blur+tlrc -rmode NN \
  226. -input rm.mask_${class}+tlrc -prefix mask_${class}_resam
  227. # also, generate eroded masks
  228. 3dmask_tool -input Segsy/Classes+tlrc"<$class>" -dilate_input -1 \
  229. -prefix rm.mask_${class}e
  230. 3dresample -master pb04.$subj.r01.blur+tlrc -rmode NN \
  231. -input rm.mask_${class}e+tlrc -prefix mask_${class}e_resam
  232. end
  233. # ================================ regress =================================
  234. # compute de-meaned motion parameters (for use in regression)
  235. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  236. -demean -write motion_demean.1D
  237. # compute motion parameter derivatives (for use in regression)
  238. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  239. -derivative -demean -write motion_deriv.1D
  240. # convert motion parameters for per-run regression
  241. 1d_tool.py -infile motion_demean.1D -set_nruns 3 \
  242. -split_into_pad_runs mot_demean
  243. 1d_tool.py -infile motion_deriv.1D -set_nruns 3 \
  244. -split_into_pad_runs mot_deriv
  245. # create censor file motion_${subj}_censor.1D, for censoring motion
  246. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  247. -show_censor_count -censor_prev_TR \
  248. -censor_motion 0.2 motion_${subj}
  249. # combine multiple censor files
  250. 1deval -a motion_${subj}_censor.1D -b outcount_${subj}_censor.1D \
  251. -expr "a*b" > censor_${subj}_combined_2.1D
  252. # create bandpass regressors (instead of using 3dBandpass, say)
  253. # (make separate regressors per run, with all in one file)
  254. foreach index ( `count -digits 1 1 $#runs` )
  255. set nt = $tr_counts[$index]
  256. set run = $runs[$index]
  257. 1dBport -nodata $nt 2 -band 0.01 0.1 -invert -nozero > rm.bpass.1D
  258. 1d_tool.py -infile rm.bpass.1D -pad_into_many_runs $run $#runs \
  259. -set_run_lengths $tr_counts \
  260. -write bpass.r$run.1D
  261. end
  262. 1dcat bpass.r*1D > bandpass_rall.1D
  263. # create ROI regressor: WMe
  264. # (get each ROI average time series and remove resulting mean)
  265. foreach run ( $runs )
  266. 3dmaskave -quiet -mask mask_WMe_resam+tlrc \
  267. pb03.$subj.r$run.volreg+tlrc \
  268. | 1d_tool.py -infile - -demean -write rm.ROI.WMe.r$run.1D
  269. end
  270. # and catenate the demeaned ROI averages across runs
  271. cat rm.ROI.WMe.r*.1D > ROI.WMe_rall.1D
  272. # note TRs that were not censored
  273. set ktrs = `1d_tool.py -infile censor_${subj}_combined_2.1D \
  274. -show_trs_uncensored encoded`
  275. # ------------------------------
  276. # run the regression analysis
  277. 3dDeconvolve -input pb04.$subj.r*.blur+tlrc.HEAD \
  278. -censor censor_${subj}_combined_2.1D \
  279. -ortvec bandpass_rall.1D bandpass \
  280. -ortvec ROI.WMe_rall.1D ROI.WMe \
  281. -polort 3 \
  282. -num_stimts 36 \
  283. -stim_file 1 mot_demean.r01.1D'[0]' -stim_base 1 -stim_label 1 roll_01 \
  284. -stim_file 2 mot_demean.r01.1D'[1]' -stim_base 2 -stim_label 2 pitch_01 \
  285. -stim_file 3 mot_demean.r01.1D'[2]' -stim_base 3 -stim_label 3 yaw_01 \
  286. -stim_file 4 mot_demean.r01.1D'[3]' -stim_base 4 -stim_label 4 dS_01 \
  287. -stim_file 5 mot_demean.r01.1D'[4]' -stim_base 5 -stim_label 5 dL_01 \
  288. -stim_file 6 mot_demean.r01.1D'[5]' -stim_base 6 -stim_label 6 dP_01 \
  289. -stim_file 7 mot_demean.r02.1D'[0]' -stim_base 7 -stim_label 7 roll_02 \
  290. -stim_file 8 mot_demean.r02.1D'[1]' -stim_base 8 -stim_label 8 pitch_02 \
  291. -stim_file 9 mot_demean.r02.1D'[2]' -stim_base 9 -stim_label 9 yaw_02 \
  292. -stim_file 10 mot_demean.r02.1D'[3]' -stim_base 10 -stim_label 10 dS_02 \
  293. -stim_file 11 mot_demean.r02.1D'[4]' -stim_base 11 -stim_label 11 dL_02 \
  294. -stim_file 12 mot_demean.r02.1D'[5]' -stim_base 12 -stim_label 12 dP_02 \
  295. -stim_file 13 mot_demean.r03.1D'[0]' -stim_base 13 -stim_label 13 roll_03 \
  296. -stim_file 14 mot_demean.r03.1D'[1]' -stim_base 14 -stim_label 14 \
  297. pitch_03 \
  298. -stim_file 15 mot_demean.r03.1D'[2]' -stim_base 15 -stim_label 15 yaw_03 \
  299. -stim_file 16 mot_demean.r03.1D'[3]' -stim_base 16 -stim_label 16 dS_03 \
  300. -stim_file 17 mot_demean.r03.1D'[4]' -stim_base 17 -stim_label 17 dL_03 \
  301. -stim_file 18 mot_demean.r03.1D'[5]' -stim_base 18 -stim_label 18 dP_03 \
  302. -stim_file 19 mot_deriv.r01.1D'[0]' -stim_base 19 -stim_label 19 roll_04 \
  303. -stim_file 20 mot_deriv.r01.1D'[1]' -stim_base 20 -stim_label 20 pitch_04 \
  304. -stim_file 21 mot_deriv.r01.1D'[2]' -stim_base 21 -stim_label 21 yaw_04 \
  305. -stim_file 22 mot_deriv.r01.1D'[3]' -stim_base 22 -stim_label 22 dS_04 \
  306. -stim_file 23 mot_deriv.r01.1D'[4]' -stim_base 23 -stim_label 23 dL_04 \
  307. -stim_file 24 mot_deriv.r01.1D'[5]' -stim_base 24 -stim_label 24 dP_04 \
  308. -stim_file 25 mot_deriv.r02.1D'[0]' -stim_base 25 -stim_label 25 roll_05 \
  309. -stim_file 26 mot_deriv.r02.1D'[1]' -stim_base 26 -stim_label 26 pitch_05 \
  310. -stim_file 27 mot_deriv.r02.1D'[2]' -stim_base 27 -stim_label 27 yaw_05 \
  311. -stim_file 28 mot_deriv.r02.1D'[3]' -stim_base 28 -stim_label 28 dS_05 \
  312. -stim_file 29 mot_deriv.r02.1D'[4]' -stim_base 29 -stim_label 29 dL_05 \
  313. -stim_file 30 mot_deriv.r02.1D'[5]' -stim_base 30 -stim_label 30 dP_05 \
  314. -stim_file 31 mot_deriv.r03.1D'[0]' -stim_base 31 -stim_label 31 roll_06 \
  315. -stim_file 32 mot_deriv.r03.1D'[1]' -stim_base 32 -stim_label 32 pitch_06 \
  316. -stim_file 33 mot_deriv.r03.1D'[2]' -stim_base 33 -stim_label 33 yaw_06 \
  317. -stim_file 34 mot_deriv.r03.1D'[3]' -stim_base 34 -stim_label 34 dS_06 \
  318. -stim_file 35 mot_deriv.r03.1D'[4]' -stim_base 35 -stim_label 35 dL_06 \
  319. -stim_file 36 mot_deriv.r03.1D'[5]' -stim_base 36 -stim_label 36 dP_06 \
  320. -fout -tout -x1D X.xmat.1D -xjpeg X.jpg \
  321. -x1D_uncensored X.nocensor.xmat.1D \
  322. -fitts fitts.$subj \
  323. -errts errts.${subj} \
  324. -x1D_stop \
  325. -bucket stats.$subj
  326. # -- use 3dTproject to project out regression matrix --
  327. 3dTproject -polort 0 -input pb04.$subj.r*.blur+tlrc.HEAD \
  328. -censor censor_${subj}_combined_2.1D -cenmode ZERO \
  329. -ort X.nocensor.xmat.1D -prefix errts.${subj}.tproject
  330. # if 3dDeconvolve fails, terminate the script
  331. if ( $status != 0 ) then
  332. echo '---------------------------------------'
  333. echo '** 3dDeconvolve error, failing...'
  334. echo ' (consider the file 3dDeconvolve.err)'
  335. exit
  336. endif
  337. # display any large pairwise correlations from the X-matrix
  338. 1d_tool.py -show_cormat_warnings -infile X.xmat.1D |& tee out.cormat_warn.txt
  339. # create an all_runs dataset to match the fitts, errts, etc.
  340. 3dTcat -prefix all_runs.$subj pb04.$subj.r*.blur+tlrc.HEAD
  341. # --------------------------------------------------
  342. # create a temporal signal to noise ratio dataset
  343. # signal: if 'scale' block, mean should be 100
  344. # noise : compute standard deviation of errts
  345. 3dTstat -mean -prefix rm.signal.all all_runs.$subj+tlrc"[$ktrs]"
  346. 3dTstat -stdev -prefix rm.noise.all errts.${subj}.tproject+tlrc"[$ktrs]"
  347. 3dcalc -a rm.signal.all+tlrc \
  348. -b rm.noise.all+tlrc \
  349. -c full_mask.$subj+tlrc \
  350. -expr 'c*a/b' -prefix TSNR.$subj
  351. # ---------------------------------------------------
  352. # compute and store GCOR (global correlation average)
  353. # (sum of squares of global mean of unit errts)
  354. 3dTnorm -norm2 -prefix rm.errts.unit errts.${subj}.tproject+tlrc
  355. 3dmaskave -quiet -mask full_mask.$subj+tlrc rm.errts.unit+tlrc \
  356. > gmean.errts.unit.1D
  357. 3dTstat -sos -prefix - gmean.errts.unit.1D\' > out.gcor.1D
  358. echo "-- GCOR = `cat out.gcor.1D`"
  359. # ---------------------------------------------------
  360. # compute correlation volume
  361. # (per voxel: average correlation across masked brain)
  362. # (now just dot product with average unit time series)
  363. 3dcalc -a rm.errts.unit+tlrc -b gmean.errts.unit.1D -expr 'a*b' -prefix rm.DP
  364. 3dTstat -sum -prefix corr_brain rm.DP+tlrc
  365. # --------------------------------------------------------
  366. # compute sum of non-baseline regressors from the X-matrix
  367. # (use 1d_tool.py to get list of regressor colums)
  368. set reg_cols = `1d_tool.py -infile X.nocensor.xmat.1D -show_indices_interest`
  369. 3dTstat -sum -prefix sum_ideal.1D X.nocensor.xmat.1D"[$reg_cols]"
  370. # also, create a stimulus-only X-matrix, for easy review
  371. 1dcat X.nocensor.xmat.1D"[$reg_cols]" > X.stim.xmat.1D
  372. # ============================ blur estimation =============================
  373. # compute blur estimates
  374. touch blur_est.$subj.1D # start with empty file
  375. # create directory for ACF curve files
  376. mkdir files_ACF
  377. # -- estimate blur for each run in errts --
  378. touch blur.errts.1D
  379. # restrict to uncensored TRs, per run
  380. foreach run ( $runs )
  381. set trs = `1d_tool.py -infile X.xmat.1D -show_trs_uncensored encoded \
  382. -show_trs_run $run`
  383. if ( $trs == "" ) continue
  384. 3dFWHMx -detrend -mask full_mask.$subj+tlrc \
  385. -ACF files_ACF/out.3dFWHMx.ACF.errts.r$run.1D \
  386. errts.${subj}.tproject+tlrc"[$trs]" >> blur.errts.1D
  387. end
  388. # compute average FWHM blur (from every other row) and append
  389. set blurs = ( `3dTstat -mean -prefix - blur.errts.1D'{0..$(2)}'\'` )
  390. echo average errts FWHM blurs: $blurs
  391. echo "$blurs # errts FWHM blur estimates" >> blur_est.$subj.1D
  392. # compute average ACF blur (from every other row) and append
  393. set blurs = ( `3dTstat -mean -prefix - blur.errts.1D'{1..$(2)}'\'` )
  394. echo average errts ACF blurs: $blurs
  395. echo "$blurs # errts ACF blur estimates" >> blur_est.$subj.1D
  396. # ================== auto block: generate review scripts ===================
  397. # generate a review script for the unprocessed EPI data
  398. gen_epi_review.py -script @epi_review.$subj \
  399. -dsets pb00.$subj.r*.tcat+orig.HEAD
  400. # generate scripts to review single subject results
  401. # (try with defaults, but do not allow bad exit status)
  402. gen_ss_review_scripts.py -mot_limit 0.2 -out_limit 0.1 \
  403. -errts_dset errts.${subj}.tproject+tlrc.HEAD -exit0
  404. # ========================== auto block: finalize ==========================
  405. # remove temporary files
  406. \rm -fr rm.* Segsy
  407. # if the basic subject review script is here, run it
  408. # (want this to be the last text output)
  409. if ( -e @ss_review_basic ) ./@ss_review_basic |& tee out.ss_review.$subj.txt
  410. # return to parent directory
  411. cd ..
  412. echo "execution finished: `date`"
  413. # ==========================================================================
  414. # script generated by the command:
  415. #
  416. # afni_proc.py -subj_id FT.rest -script proc.FT.rest -scr_overwrite -blocks \
  417. # despike tshift align tlrc volreg blur mask regress -copy_anat \
  418. # FT/FT_anat+orig -tcat_remove_first_trs 2 -dsets FT/FT_epi_r1+orig.HEAD \
  419. # FT/FT_epi_r2+orig.HEAD FT/FT_epi_r3+orig.HEAD -volreg_align_to \
  420. # MIN_OUTLIER -volreg_align_e2a -volreg_tlrc_warp -blur_size 4.0 \
  421. # -mask_segment_anat yes -mask_segment_erode yes -regress_motion_per_run \
  422. # -regress_censor_motion 0.2 -regress_censor_outliers 0.1 \
  423. # -regress_bandpass 0.01 0.1 -regress_apply_mot_types demean deriv \
  424. # -regress_ROI WMe -regress_run_clustsim no -regress_est_blur_errts