Hmm thanks for checking! I'll go through the processing steps in case I did anything wrong beforehand.
As I stated, there are 2 groups (MDD and HC). There are two fMRI sessions per subject. In each session, there are 2 runs of the task.
Here are the processing steps I do per subject per session:
- Run fmriprep
- Preprocess: smooth, remove 5 first TRs, zscore each voxel over time
- Run AFNI 3dDeconvolve across both runs of the task using the command:
cmd = ("3dDeconvolve -polort A "
"-input "
"{0}/{1}/{2}/{1}_{2}_task-faces_rec-uncorrected_run-01_bold_space-MNI152NLin2009cAsym_preproc.nii.gz "
"{0}/{1}/{2}/{1}_{2}_task-faces_rec-uncorrected_run-02_bold_space-MNI152NLin2009cAsym_preproc.nii.gz "
"-mask {8} "
"-num_glt 2 "
"-local_times -num_stimts 4 "
" {3} {4} {5} {6} "
"-gltsym 'SYM: +happy -neutral' -glt_label 1 'happyvsneut' "
"-gltsym 'SYM: +fearful -neutral' -glt_label 2 'fearvsneut' "
"-ortvec {7} "
"-fout -tout -x1D {9}/{1}/{2}/{1}_{2}_task-faces_glm.X.xmat.1D " # this is the actual design matrix
"-xjpeg {9}/{1}/{2}/{1}_{2}_task-faces_glm.X.jpg " # this is the design matrix
"-fitts {9}/{1}/{2}/{1}_{2}_task-faces_glm.fitts " # model prediction - betas * signal
"-errts {9}/{1}/{2}/{1}_{2}_task-faces.errts " # residuals
"-bucket {9}/{1}/{2}/{1}_{2}_task-faces_glm.stats".format(run_path,
bids_id, ses_id, neutral_reg, object_reg, happy_reg, fearful_reg,full_save_path,whole_brain_mask,analyses_out ))
And then I have the following steps for group level analysis:
- Subtract session 3 - session 1 betas for each subject using 3dcalc
cmd = ("3dcalc -a {0} ".format(subject_stats_2) +
"-b {0} ".format(subject_stats_1) +
"-expr 'a-b' -prefix {0}".format(output)) - Calculate covariates from Framewise displacement (I think I did this right, but just to be sure, the first column lists the subject name that's used later in 3dttest++. The order of the subjects listed as rows in the covariate file is *not* the order of the subjects listed in 3dttest++.)
- Run 3dttest++ on the differences between sessions across groups with the command printed above:
command = ("3dttest++ -setA {0} ".format(MDD_subj_str) +
"-setB {0} ".format(HC_subj_str) +
"-prefix {0}/ses-03_minus_ses-01/ses-03_minus_ses-01_stats_{1}_ACC_dlPFC_mask.ttest.nii.gz ".format(second_level,BRIK_KEY[BRIK]) +
"-AminusB "
"-mask {0} ".format(dlPFC_mask) +
"-covariates {0} ".format(covar_file) +
"-prefix_clustsim ses-03_minus_ses-01_stats_{0}_ACC_dlPFC_mask ".format(BRIK_KEY[BRIK]) +
"-ETAC -ETAC_blur 0 4 6 8 " +
"-ETAC_opt NN=2:sid=1:hpow=0:name=test1:pthr=0.01/0.001/10:fpr=5"
)
I checked the results from running 3dttest++ and ETAC on individual sessions, instead of subtracted data across sessions. I still see inconsistency between 3dttest results and ETAC one-sided masks. So I'm not sure what I'm doing wrong here :/
Thanks for your help!