s17.proc.FT.rest.11 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. #!/bin/tcsh -xef
  2. echo "auto-generated by afni_proc.py, Mon Feb 25 16:50:45 2019"
  3. echo "(version 6.32, February 22, 2019)"
  4. echo "execution started: `date`"
  5. # to execute via tcsh:
  6. # tcsh -xef proc.FT.rest.11 |& tee output.proc.FT.rest.11
  7. # to execute via bash:
  8. # tcsh -xef proc.FT.rest.11 2>&1 | tee output.proc.FT.rest.11
  9. # =========================== auto block: setup ============================
  10. # script setup
  11. # take note of the AFNI version
  12. afni -ver
  13. # check that the current AFNI version is recent enough
  14. afni_history -check_date 17 Jan 2019
  15. if ( $status ) then
  16. echo "** this script requires newer AFNI binaries (than 17 Jan 2019)"
  17. echo " (consider: @update.afni.binaries -defaults)"
  18. exit
  19. endif
  20. # the user may specify a single subject to run with
  21. if ( $#argv > 0 ) then
  22. set subj = $argv[1]
  23. else
  24. set subj = FT.rest.11
  25. endif
  26. # assign output directory name
  27. set output_dir = $subj.results
  28. # verify that the results directory does not yet exist
  29. if ( -d $output_dir ) then
  30. echo output dir "$subj.results" already exists
  31. exit
  32. endif
  33. # set list of runs
  34. set runs = (`count -digits 2 1 3`)
  35. # create results and stimuli directories
  36. mkdir $output_dir
  37. mkdir $output_dir/stimuli
  38. # copy anatomy to results dir
  39. 3dcopy FT/FT_anat+orig $output_dir/FT_anat
  40. # copy anatomical follower datasets into the results dir
  41. 3dcopy FT/SUMA/aparc.a2009s+aseg.nii $output_dir/copy_af_aaseg
  42. 3dcopy FT/SUMA/aparc.a2009s+aseg.nii $output_dir/copy_af_aeseg
  43. 3dcopy FT/SUMA/FT_vent.nii $output_dir/copy_af_FSvent
  44. 3dcopy FT/SUMA/FT_white.nii $output_dir/copy_af_FSWe
  45. # ============================ auto block: tcat ============================
  46. # apply 3dTcat to copy input dsets to results dir,
  47. # while removing the first 2 TRs
  48. 3dTcat -prefix $output_dir/pb00.$subj.r01.tcat FT/FT_epi_r1+orig'[2..$]'
  49. 3dTcat -prefix $output_dir/pb00.$subj.r02.tcat FT/FT_epi_r2+orig'[2..$]'
  50. 3dTcat -prefix $output_dir/pb00.$subj.r03.tcat FT/FT_epi_r3+orig'[2..$]'
  51. # and make note of repetitions (TRs) per run
  52. set tr_counts = ( 150 150 150 )
  53. # -------------------------------------------------------
  54. # enter the results directory (can begin processing data)
  55. cd $output_dir
  56. # ========================== auto block: outcount ==========================
  57. # data check: compute outlier fraction for each volume
  58. touch out.pre_ss_warn.txt
  59. foreach run ( $runs )
  60. 3dToutcount -automask -fraction -polort 3 -legendre \
  61. pb00.$subj.r$run.tcat+orig > outcount.r$run.1D
  62. # censor outlier TRs per run, ignoring the first 0 TRs
  63. # - censor when more than 0.1 of automask voxels are outliers
  64. # - step() defines which TRs to remove via censoring
  65. 1deval -a outcount.r$run.1D -expr "1-step(a-0.1)" > rm.out.cen.r$run.1D
  66. # outliers at TR 0 might suggest pre-steady state TRs
  67. if ( `1deval -a outcount.r$run.1D"{0}" -expr "step(a-0.4)"` ) then
  68. echo "** TR #0 outliers: possible pre-steady state TRs in run $run" \
  69. >> out.pre_ss_warn.txt
  70. endif
  71. end
  72. # catenate outlier counts into a single time series
  73. cat outcount.r*.1D > outcount_rall.1D
  74. # catenate outlier censor files into a single time series
  75. cat rm.out.cen.r*.1D > outcount_${subj}_censor.1D
  76. # get run number and TR index for minimum outlier volume
  77. set minindex = `3dTstat -argmin -prefix - outcount_rall.1D\'`
  78. set ovals = ( `1d_tool.py -set_run_lengths $tr_counts \
  79. -index_to_run_tr $minindex` )
  80. # save run and TR indices for extraction of vr_base_min_outlier
  81. set minoutrun = $ovals[1]
  82. set minouttr = $ovals[2]
  83. echo "min outlier: run $minoutrun, TR $minouttr" | tee out.min_outlier.txt
  84. # ================================ despike =================================
  85. # apply 3dDespike to each run
  86. foreach run ( $runs )
  87. 3dDespike -NEW -nomask -prefix pb01.$subj.r$run.despike \
  88. pb00.$subj.r$run.tcat+orig
  89. end
  90. # ================================= tshift =================================
  91. # time shift data so all slice timing is the same
  92. foreach run ( $runs )
  93. 3dTshift -tzero 0 -quintic -prefix pb02.$subj.r$run.tshift \
  94. pb01.$subj.r$run.despike+orig
  95. end
  96. # --------------------------------
  97. # extract volreg registration base
  98. 3dbucket -prefix vr_base_min_outlier \
  99. pb02.$subj.r$minoutrun.tshift+orig"[$minouttr]"
  100. # ================================= align ==================================
  101. # for e2a: compute anat alignment transformation to EPI registration base
  102. # (new anat will be intermediate, stripped, FT_anat_ns+orig)
  103. align_epi_anat.py -anat2epi -anat FT_anat+orig \
  104. -save_skullstrip -suffix _al_junk \
  105. -epi vr_base_min_outlier+orig -epi_base 0 \
  106. -epi_strip 3dAutomask \
  107. -volreg off -tshift off
  108. # ================================== tlrc ==================================
  109. # warp anatomy to standard space (non-linear warp)
  110. auto_warp.py -base MNI_caez_N27+tlrc -input FT_anat_ns+orig \
  111. -skull_strip_input no
  112. # move results up out of the awpy directory
  113. # - NL-warped anat, affine warp, NL warp
  114. # - use typical standard space name for anat
  115. # - wildcard is a cheap way to go after any .gz
  116. # - be sure NIFTI sform_code=2 means standard space
  117. 3dbucket -DAFNI_NIFTI_VIEW=tlrc \
  118. -prefix FT_anat_ns awpy/FT_anat_ns.aw.nii*
  119. mv awpy/anat.un.aff.Xat.1D .
  120. mv awpy/anat.un.aff.qw_WARP.nii .
  121. # ================================= volreg =================================
  122. # align each dset to base volume, to anat, warp to tlrc space
  123. # verify that we have a +tlrc warp dataset
  124. if ( ! -f FT_anat_ns+tlrc.HEAD ) then
  125. echo "** missing +tlrc warp dataset: FT_anat_ns+tlrc.HEAD"
  126. exit
  127. endif
  128. # register and warp
  129. foreach run ( $runs )
  130. # register each volume to the base image
  131. 3dvolreg -verbose -zpad 1 -base vr_base_min_outlier+orig \
  132. -1Dfile dfile.r$run.1D -prefix rm.epi.volreg.r$run \
  133. -cubic \
  134. -1Dmatrix_save mat.r$run.vr.aff12.1D \
  135. pb02.$subj.r$run.tshift+orig
  136. # create an all-1 dataset to mask the extents of the warp
  137. 3dcalc -overwrite -a pb02.$subj.r$run.tshift+orig -expr 1 \
  138. -prefix rm.epi.all1
  139. # catenate volreg/epi2anat/tlrc xforms
  140. cat_matvec -ONELINE \
  141. anat.un.aff.Xat.1D \
  142. FT_anat_al_junk_mat.aff12.1D -I \
  143. mat.r$run.vr.aff12.1D > mat.r$run.warp.aff12.1D
  144. # apply catenated xform: volreg/epi2anat/tlrc/NLtlrc
  145. # then apply non-linear standard-space warp
  146. 3dNwarpApply -master FT_anat_ns+tlrc -dxyz 2.5 \
  147. -source pb02.$subj.r$run.tshift+orig \
  148. -nwarp "anat.un.aff.qw_WARP.nii mat.r$run.warp.aff12.1D" \
  149. -prefix rm.epi.nomask.r$run
  150. # warp the all-1 dataset for extents masking
  151. 3dNwarpApply -master FT_anat_ns+tlrc -dxyz 2.5 \
  152. -source rm.epi.all1+orig \
  153. -nwarp "anat.un.aff.qw_WARP.nii mat.r$run.warp.aff12.1D" \
  154. -interp cubic \
  155. -ainterp NN -quiet \
  156. -prefix rm.epi.1.r$run
  157. # make an extents intersection mask of this run
  158. 3dTstat -min -prefix rm.epi.min.r$run rm.epi.1.r$run+tlrc
  159. end
  160. # make a single file of registration params
  161. cat dfile.r*.1D > dfile_rall.1D
  162. # ----------------------------------------
  163. # create the extents mask: mask_epi_extents+tlrc
  164. # (this is a mask of voxels that have valid data at every TR)
  165. 3dMean -datum short -prefix rm.epi.mean rm.epi.min.r*.HEAD
  166. 3dcalc -a rm.epi.mean+tlrc -expr 'step(a-0.999)' -prefix mask_epi_extents
  167. # and apply the extents mask to the EPI data
  168. # (delete any time series with missing data)
  169. foreach run ( $runs )
  170. 3dcalc -a rm.epi.nomask.r$run+tlrc -b mask_epi_extents+tlrc \
  171. -expr 'a*b' -prefix pb03.$subj.r$run.volreg
  172. end
  173. # warp the volreg base EPI dataset to make a final version
  174. cat_matvec -ONELINE \
  175. anat.un.aff.Xat.1D \
  176. FT_anat_al_junk_mat.aff12.1D -I > mat.basewarp.aff12.1D
  177. 3dNwarpApply -master FT_anat_ns+tlrc -dxyz 2.5 \
  178. -source vr_base_min_outlier+orig \
  179. -nwarp "anat.un.aff.qw_WARP.nii mat.basewarp.aff12.1D" \
  180. -prefix final_epi_vr_base_min_outlier
  181. # create an anat_final dataset, aligned with stats
  182. 3dcopy FT_anat_ns+tlrc anat_final.$subj
  183. # record final registration costs
  184. 3dAllineate -base final_epi_vr_base_min_outlier+tlrc -allcostX \
  185. -input anat_final.$subj+tlrc |& tee out.allcostX.txt
  186. # -----------------------------------------
  187. # warp anat follower datasets (non-linear)
  188. 3dNwarpApply -source copy_af_aaseg+orig \
  189. -master anat_final.$subj+tlrc \
  190. -ainterp NN -nwarp anat.un.aff.qw_WARP.nii anat.un.aff.Xat.1D \
  191. -prefix follow_ROI_aaseg
  192. 3dNwarpApply -source copy_af_aeseg+orig \
  193. -master pb03.$subj.r01.volreg+tlrc \
  194. -ainterp NN -nwarp anat.un.aff.qw_WARP.nii anat.un.aff.Xat.1D \
  195. -prefix follow_ROI_aeseg
  196. 3dNwarpApply -source copy_af_FSvent+orig \
  197. -master pb03.$subj.r01.volreg+tlrc \
  198. -ainterp NN -nwarp anat.un.aff.qw_WARP.nii anat.un.aff.Xat.1D \
  199. -prefix follow_ROI_FSvent
  200. 3dNwarpApply -source copy_af_FSWe+orig \
  201. -master pb03.$subj.r01.volreg+tlrc \
  202. -ainterp NN -nwarp anat.un.aff.qw_WARP.nii anat.un.aff.Xat.1D \
  203. -prefix follow_ROI_FSWe
  204. 3dNwarpApply -source FT_anat+orig \
  205. -master anat_final.$subj+tlrc \
  206. -ainterp wsinc5 -nwarp anat.un.aff.qw_WARP.nii anat.un.aff.Xat.1D\
  207. -prefix anat_w_skull_warped
  208. # ================================== blur ==================================
  209. # blur each volume of each run
  210. foreach run ( $runs )
  211. 3dmerge -1blur_fwhm 4.0 -doall -prefix rm.pb04.$subj.r$run.blur \
  212. pb03.$subj.r$run.volreg+tlrc
  213. # and apply extents mask, since no scale block
  214. 3dcalc -a rm.pb04.$subj.r$run.blur+tlrc -b mask_epi_extents+tlrc \
  215. -expr 'a*b' -prefix pb04.$subj.r$run.blur
  216. end
  217. # ================================== mask ==================================
  218. # create 'full_mask' dataset (union mask)
  219. foreach run ( $runs )
  220. 3dAutomask -prefix rm.mask_r$run pb04.$subj.r$run.blur+tlrc
  221. end
  222. # create union of inputs, output type is byte
  223. 3dmask_tool -inputs rm.mask_r*+tlrc.HEAD -union -prefix full_mask.$subj
  224. # ---- create subject anatomy mask, mask_anat.$subj+tlrc ----
  225. # (resampled from tlrc anat)
  226. 3dresample -master full_mask.$subj+tlrc -input FT_anat_ns+tlrc \
  227. -prefix rm.resam.anat
  228. # convert to binary anat mask; fill gaps and holes
  229. 3dmask_tool -dilate_input 5 -5 -fill_holes -input rm.resam.anat+tlrc \
  230. -prefix mask_anat.$subj
  231. # compute tighter EPI mask by intersecting with anat mask
  232. 3dmask_tool -input full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  233. -inter -prefix mask_epi_anat.$subj
  234. # compute overlaps between anat and EPI masks
  235. 3dABoverlap -no_automask full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  236. |& tee out.mask_ae_overlap.txt
  237. # note Dice coefficient of masks, as well
  238. 3ddot -dodice full_mask.$subj+tlrc mask_anat.$subj+tlrc \
  239. |& tee out.mask_ae_dice.txt
  240. # ---- create group anatomy mask, mask_group+tlrc ----
  241. # (resampled from tlrc base anat, MNI_caez_N27+tlrc)
  242. 3dresample -master full_mask.$subj+tlrc -prefix ./rm.resam.group \
  243. -input /home/rickr/abin/MNI_caez_N27+tlrc
  244. # convert to binary group mask; fill gaps and holes
  245. 3dmask_tool -dilate_input 5 -5 -fill_holes -input rm.resam.group+tlrc \
  246. -prefix mask_group
  247. # ================================ regress =================================
  248. # compute de-meaned motion parameters (for use in regression)
  249. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  250. -demean -write motion_demean.1D
  251. # compute motion parameter derivatives (for use in regression)
  252. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  253. -derivative -demean -write motion_deriv.1D
  254. # convert motion parameters for per-run regression
  255. 1d_tool.py -infile motion_demean.1D -set_nruns 3 \
  256. -split_into_pad_runs mot_demean
  257. 1d_tool.py -infile motion_deriv.1D -set_nruns 3 \
  258. -split_into_pad_runs mot_deriv
  259. # create censor file motion_${subj}_censor.1D, for censoring motion
  260. 1d_tool.py -infile dfile_rall.1D -set_nruns 3 \
  261. -show_censor_count -censor_prev_TR \
  262. -censor_motion 0.2 motion_${subj}
  263. # combine multiple censor files
  264. 1deval -a motion_${subj}_censor.1D -b outcount_${subj}_censor.1D \
  265. -expr "a*b" > censor_${subj}_combined_2.1D
  266. # create ROI regressor: FSWe
  267. # (get each ROI average time series and remove resulting mean)
  268. foreach run ( $runs )
  269. 3dmaskave -quiet -mask follow_ROI_FSWe+tlrc \
  270. pb03.$subj.r$run.volreg+tlrc \
  271. | 1d_tool.py -infile - -demean -write rm.ROI.FSWe.r$run.1D
  272. end
  273. # and catenate the demeaned ROI averages across runs
  274. cat rm.ROI.FSWe.r*.1D > ROI.FSWe_rall.1D
  275. # note TRs that were not censored
  276. set ktrs = `1d_tool.py -infile censor_${subj}_combined_2.1D \
  277. -show_trs_uncensored encoded`
  278. # ------------------------------
  279. # create ROI PC ort sets: FSvent
  280. # create a time series dataset to run 3dpc on...
  281. # detrend, so principal components are not affected
  282. foreach run ( $runs )
  283. # to censor, create per-run censor files
  284. 1d_tool.py -set_run_lengths $tr_counts -select_runs $run \
  285. -infile censor_${subj}_combined_2.1D -write rm.censor.r$run.1D
  286. # do not let censored time points affect detrending
  287. 3dTproject -polort 3 -prefix rm.det_pcin_r$run \
  288. -censor rm.censor.r$run.1D -cenmode KILL \
  289. -input pb03.$subj.r$run.volreg+tlrc
  290. end
  291. # catenate runs, prepare to censor TRs
  292. 3dTcat -prefix rm.det_pcin_rall rm.det_pcin_r*+tlrc.HEAD
  293. # make ROI PCs : FSvent
  294. 3dpc -mask follow_ROI_FSvent+tlrc -pcsave 3 \
  295. -prefix rm.ROIPC.FSvent rm.det_pcin_rall+tlrc
  296. # zero pad censored TRs
  297. 1d_tool.py -censor_fill_parent censor_${subj}_combined_2.1D \
  298. -infile rm.ROIPC.FSvent_vec.1D \
  299. -write ROIPC.FSvent.1D
  300. # ------------------------------
  301. # run the regression analysis
  302. 3dDeconvolve -input pb04.$subj.r*.blur+tlrc.HEAD \
  303. -censor censor_${subj}_combined_2.1D \
  304. -ortvec ROI.FSWe_rall.1D ROI.FSWe \
  305. -ortvec ROIPC.FSvent.1D ROIPC.FSvent \
  306. -ortvec mot_demean.r01.1D mot_demean_r01 \
  307. -ortvec mot_demean.r02.1D mot_demean_r02 \
  308. -ortvec mot_demean.r03.1D mot_demean_r03 \
  309. -ortvec mot_deriv.r01.1D mot_deriv_r01 \
  310. -ortvec mot_deriv.r02.1D mot_deriv_r02 \
  311. -ortvec mot_deriv.r03.1D mot_deriv_r03 \
  312. -polort 3 \
  313. -num_stimts 0 \
  314. -fout -tout -x1D X.xmat.1D -xjpeg X.jpg \
  315. -x1D_uncensored X.nocensor.xmat.1D \
  316. -fitts fitts.$subj \
  317. -errts errts.${subj} \
  318. -x1D_stop \
  319. -bucket stats.$subj
  320. # -- use 3dTproject to project out regression matrix --
  321. 3dTproject -polort 0 -input pb04.$subj.r*.blur+tlrc.HEAD \
  322. -censor censor_${subj}_combined_2.1D -cenmode ZERO \
  323. -ort X.nocensor.xmat.1D -prefix errts.${subj}.tproject
  324. # if 3dDeconvolve fails, terminate the script
  325. if ( $status != 0 ) then
  326. echo '---------------------------------------'
  327. echo '** 3dDeconvolve error, failing...'
  328. echo ' (consider the file 3dDeconvolve.err)'
  329. exit
  330. endif
  331. # display any large pairwise correlations from the X-matrix
  332. 1d_tool.py -show_cormat_warnings -infile X.xmat.1D |& tee out.cormat_warn.txt
  333. # display degrees of freedom info from X-matrix
  334. 1d_tool.py -show_df_info -infile X.xmat.1D |& tee out.df_info.txt
  335. # create an all_runs dataset to match the fitts, errts, etc.
  336. 3dTcat -prefix all_runs.$subj pb04.$subj.r*.blur+tlrc.HEAD
  337. # --------------------------------------------------
  338. # generate fast ANATICOR result: errts.$subj.fanaticor+tlrc
  339. # --------------------------------------------------
  340. # fast ANATICOR: generate local FSWe time series averages
  341. # create catenated volreg dataset
  342. 3dTcat -prefix rm.all_runs.volreg pb03.$subj.r*.volreg+tlrc.HEAD
  343. # mask white matter before blurring
  344. 3dcalc -a rm.all_runs.volreg+tlrc -b follow_ROI_FSWe+tlrc \
  345. -expr "a*bool(b)" -datum float -prefix rm.all_runs.volreg.mask
  346. # generate ANATICOR voxelwise regressors via blur
  347. 3dmerge -1blur_fwhm 30 -doall -prefix Local_FSWe_rall \
  348. rm.all_runs.volreg.mask+tlrc
  349. # -- use 3dTproject to project out regression matrix --
  350. 3dTproject -polort 0 -input pb04.$subj.r*.blur+tlrc.HEAD \
  351. -censor censor_${subj}_combined_2.1D -cenmode ZERO \
  352. -dsort Local_FSWe_rall+tlrc \
  353. -ort X.nocensor.xmat.1D -prefix errts.$subj.fanaticor
  354. # --------------------------------------------------
  355. # create a temporal signal to noise ratio dataset
  356. # signal: if 'scale' block, mean should be 100
  357. # noise : compute standard deviation of errts
  358. 3dTstat -mean -prefix rm.signal.all all_runs.$subj+tlrc"[$ktrs]"
  359. 3dTstat -stdev -prefix rm.noise.all errts.$subj.fanaticor+tlrc"[$ktrs]"
  360. 3dcalc -a rm.signal.all+tlrc \
  361. -b rm.noise.all+tlrc \
  362. -c mask_epi_anat.$subj+tlrc \
  363. -expr 'c*a/b' -prefix TSNR.$subj
  364. # ---------------------------------------------------
  365. # compute and store GCOR (global correlation average)
  366. # (sum of squares of global mean of unit errts)
  367. 3dTnorm -norm2 -prefix rm.errts.unit errts.$subj.fanaticor+tlrc
  368. 3dmaskave -quiet -mask full_mask.$subj+tlrc rm.errts.unit+tlrc \
  369. > gmean.errts.unit.1D
  370. 3dTstat -sos -prefix - gmean.errts.unit.1D\' > out.gcor.1D
  371. echo "-- GCOR = `cat out.gcor.1D`"
  372. # ---------------------------------------------------
  373. # compute correlation volume
  374. # (per voxel: average correlation across masked brain)
  375. # (now just dot product with average unit time series)
  376. 3dcalc -a rm.errts.unit+tlrc -b gmean.errts.unit.1D -expr 'a*b' -prefix rm.DP
  377. 3dTstat -sum -prefix corr_brain rm.DP+tlrc
  378. # compute 2 requested correlation volume(s)
  379. # create correlation volume corr_af_aeseg
  380. 3dcalc -a follow_ROI_aeseg+tlrc -b full_mask.$subj+tlrc -expr 'a*b' \
  381. -prefix rm.fm.aeseg
  382. 3dmaskave -q -mask rm.fm.aeseg+tlrc rm.errts.unit+tlrc > mean.unit.aeseg.1D
  383. 3dcalc -a rm.errts.unit+tlrc -b mean.unit.aeseg.1D \
  384. -expr 'a*b' -prefix rm.DP.aeseg
  385. 3dTstat -sum -prefix corr_af_aeseg rm.DP.aeseg+tlrc
  386. # create correlation volume corr_af_FSvent
  387. 3dcalc -a follow_ROI_FSvent+tlrc -b full_mask.$subj+tlrc -expr 'a*b' \
  388. -prefix rm.fm.FSvent
  389. 3dmaskave -q -mask rm.fm.FSvent+tlrc rm.errts.unit+tlrc > mean.unit.FSvent.1D
  390. 3dcalc -a rm.errts.unit+tlrc -b mean.unit.FSvent.1D \
  391. -expr 'a*b' -prefix rm.DP.FSvent
  392. 3dTstat -sum -prefix corr_af_FSvent rm.DP.FSvent+tlrc
  393. # --------------------------------------------------------
  394. # compute sum of non-baseline regressors from the X-matrix
  395. # (use 1d_tool.py to get list of regressor colums)
  396. set reg_cols = `1d_tool.py -infile X.nocensor.xmat.1D -show_indices_interest`
  397. 3dTstat -sum -prefix sum_ideal.1D X.nocensor.xmat.1D"[$reg_cols]"
  398. # also, create a stimulus-only X-matrix, for easy review
  399. 1dcat X.nocensor.xmat.1D"[$reg_cols]" > X.stim.xmat.1D
  400. # ============================ blur estimation =============================
  401. # compute blur estimates
  402. touch blur_est.$subj.1D # start with empty file
  403. # create directory for ACF curve files
  404. mkdir files_ACF
  405. # -- estimate blur for each run in epits --
  406. touch blur.epits.1D
  407. # restrict to uncensored TRs, per run
  408. foreach run ( $runs )
  409. set trs = `1d_tool.py -infile X.xmat.1D -show_trs_uncensored encoded \
  410. -show_trs_run $run`
  411. if ( $trs == "" ) continue
  412. 3dFWHMx -detrend -mask mask_epi_anat.$subj+tlrc \
  413. -ACF files_ACF/out.3dFWHMx.ACF.epits.r$run.1D \
  414. all_runs.$subj+tlrc"[$trs]" >> blur.epits.1D
  415. end
  416. # compute average FWHM blur (from every other row) and append
  417. set blurs = ( `3dTstat -mean -prefix - blur.epits.1D'{0..$(2)}'\'` )
  418. echo average epits FWHM blurs: $blurs
  419. echo "$blurs # epits FWHM blur estimates" >> blur_est.$subj.1D
  420. # compute average ACF blur (from every other row) and append
  421. set blurs = ( `3dTstat -mean -prefix - blur.epits.1D'{1..$(2)}'\'` )
  422. echo average epits ACF blurs: $blurs
  423. echo "$blurs # epits ACF blur estimates" >> blur_est.$subj.1D
  424. # -- estimate blur for each run in errts --
  425. touch blur.errts.1D
  426. # restrict to uncensored TRs, per run
  427. foreach run ( $runs )
  428. set trs = `1d_tool.py -infile X.xmat.1D -show_trs_uncensored encoded \
  429. -show_trs_run $run`
  430. if ( $trs == "" ) continue
  431. 3dFWHMx -detrend -mask mask_epi_anat.$subj+tlrc \
  432. -ACF files_ACF/out.3dFWHMx.ACF.errts.r$run.1D \
  433. errts.$subj.fanaticor+tlrc"[$trs]" >> blur.errts.1D
  434. end
  435. # compute average FWHM blur (from every other row) and append
  436. set blurs = ( `3dTstat -mean -prefix - blur.errts.1D'{0..$(2)}'\'` )
  437. echo average errts FWHM blurs: $blurs
  438. echo "$blurs # errts FWHM blur estimates" >> blur_est.$subj.1D
  439. # compute average ACF blur (from every other row) and append
  440. set blurs = ( `3dTstat -mean -prefix - blur.errts.1D'{1..$(2)}'\'` )
  441. echo average errts ACF blurs: $blurs
  442. echo "$blurs # errts ACF blur estimates" >> blur_est.$subj.1D
  443. # ================== auto block: generate review scripts ===================
  444. # generate a review script for the unprocessed EPI data
  445. gen_epi_review.py -script @epi_review.$subj \
  446. -dsets pb00.$subj.r*.tcat+orig.HEAD
  447. # generate scripts to review single subject results
  448. # (try with defaults, but do not allow bad exit status)
  449. gen_ss_review_scripts.py -mot_limit 0.2 -out_limit 0.1 \
  450. -errts_dset errts.$subj.fanaticor+tlrc.HEAD -exit0 \
  451. -ss_review_dset out.ss_review.$subj.txt \
  452. -write_uvars_json out.ss_review_uvars.json
  453. # ========================== auto block: finalize ==========================
  454. # remove temporary files
  455. \rm -fr rm.* awpy
  456. # if the basic subject review script is here, run it
  457. # (want this to be the last text output)
  458. if ( -e @ss_review_basic ) then
  459. ./@ss_review_basic |& tee out.ss_review.$subj.txt
  460. # generate html ss review pages
  461. # (akin to static images from running @ss_review_driver)
  462. apqc_make_tcsh.py -review_style basic -subj_dir . \
  463. -uvar_json out.ss_review_uvars.json
  464. tcsh @ss_review_html
  465. apqc_make_html.py -qc_dir QC_$subj
  466. echo "\nconsider running: \n\n afni_open -b $subj.results/QC_$subj/index.html\n"
  467. endif
  468. # return to parent directory (just in case...)
  469. cd ..
  470. echo "execution finished: `date`"
  471. # ==========================================================================
  472. # script generated by the command:
  473. #
  474. # afni_proc.py -subj_id FT.rest.11 -script proc.FT.rest.11 -scr_overwrite \
  475. # -blocks despike tshift align tlrc volreg blur mask regress -copy_anat \
  476. # FT/FT_anat+orig -anat_follower_ROI aaseg anat \
  477. # FT/SUMA/aparc.a2009s+aseg.nii -anat_follower_ROI aeseg epi \
  478. # FT/SUMA/aparc.a2009s+aseg.nii -anat_follower_ROI FSvent epi \
  479. # FT/SUMA/FT_vent.nii -anat_follower_ROI FSWe epi FT/SUMA/FT_white.nii \
  480. # -dsets FT/FT_epi_r1+orig.HEAD FT/FT_epi_r2+orig.HEAD \
  481. # FT/FT_epi_r3+orig.HEAD -tcat_remove_first_trs 2 -tlrc_base \
  482. # MNI_caez_N27+tlrc -tlrc_NL_warp -volreg_align_to MIN_OUTLIER \
  483. # -volreg_align_e2a -volreg_tlrc_warp -blur_size 4.0 -mask_epi_anat yes \
  484. # -regress_ROI_PC FSvent 3 -regress_ROI FSWe -regress_make_corr_vols \
  485. # aeseg FSvent -regress_anaticor_fast -regress_anaticor_label FSWe \
  486. # -regress_motion_per_run -regress_censor_motion 0.2 \
  487. # -regress_censor_outliers 0.1 -regress_apply_mot_types demean deriv \
  488. # -regress_est_blur_epits -regress_est_blur_errts -regress_run_clustsim no