History of AFNI updates  

|
December 10, 2019 05:30PM
Hi there,

I am having trouble reproducing the same results using 3dDeconvolve as I get running the full proc_py script. Of course, i'd like to figure this out, so that I don't have to preprocess the data every time I'd like to run a new gltsym. I have pasted the code for both 3dDeconvolves at the bottom to show that the flags and preferences are exactly the same.

1. SubBrick Differences
The first difference I noticed, was that 3ddeconvolve, when run through ProcPy creates a sub-brick for the coef, tstat, and fstat of each condition/contrast, as well as an overall full_fstat. However, when I run 3dDeconvolve, instead i get only a Tstat and coef for each condition, and the only fstat is the overall full_fstat. Is this a sign that internally there is a difference in what is being run?

See images below - you may need to click on the link:

A. ProcPy- 3 bricks per condition:


B. Standalone 3dDeconvolve - 2 bricks per condition


2. Number of voxels included in contrasts - more voxels included when using standalone 3dDeconvolve
I am creating subject-specific masks for voxels that are more active for one condition than the others. I've found that creating this mask using both the proc_py and standalone 3dDeconvolve contrasts lead to different results.

For instance, I create a mask using the following code on the proc_py stats file using subbrick 20, which is the tstat associated with my contrast of interest:

thresh1="$(p2dsetstat -inset stats.${subj}_REML+orig.'[20]' -pval 0.001 -2sided -quiet)"
3dcalc -a stats.${subj}_REML+orig.'[20]' -expr "ispositive(a-${thresh1})+isnegative(${thresh1}-a)" -prefix faceSelectiveMask_Standard_procPy.nii
This produces a tstat of 3.34571 and a mask that contains 1,385 voxels. (according to output of '3dBrickStat -count -non-zero faceSelectiveMask_Standard_procPy.niiĀ ')

However if I create the same mask using the stats file created with 3dDeconvolve and sub=brick 14 for the same contrast
thresh1="$(p2dsetstat -inset stats_3dDeconvolve.${subj}_REML+orig.'[14]' -pval 0.001 -2sided -quiet)"
3dcalc -a stats_3dDeconvolve.${subj}_REML+orig.'[14]' -expr "ispositive(a-${thresh1})+isnegative(${thresh1}-a)" -prefix faceSelectiveMask_Standard_3dD.nii
I get a slightly different tstat here 3.3454 instead of 3.3457. Additionally the mask ends up being several hundred voxels larger at 1,615 voxels, compared to 1,385.

3. I am pretty confident that the standalone 3dDeconvolve code is the same as the one in the proc_py script (save for the addition of two more gltsym in procpy).
I am pasting both below for comparison. Given this, do you have any idea why i might be getting these discrepancies?? I'd like to get to a point where the result are the same, so that i can feel confident in using 3dDeconvolve on its own. Please let me know why you think there might be this discrepancy!

A. proc_py code for 3dDeconvole:
# ------------------------------
# run the regression analysis
3dDeconvolve -input pb04.$subj.r*.blur+orig.HEAD                         \
    -mask mask_anat.$subj+orig                                           \
    -censor censor_${subj}_combined_2.1D                                 \
    -ortvec mot_demean.r01.1D mot_demean_r01                             \
    -ortvec mot_demean.r02.1D mot_demean_r02                             \
    -ortvec mot_deriv.r01.1D mot_deriv_r01                               \
    -ortvec mot_deriv.r02.1D mot_deriv_r02                               \
    -polort 2                                                            \
    -local_times                                                         \
    -num_stimts 6                                                        \
    -stim_times 1 stimuli/a_face_times.txt 'GAM'                         \
    -stim_label 1 A_Face                                                 \
    -stim_times 2 stimuli/a_scram_times.txt 'GAM'                        \
    -stim_label 2 A_Scram                                                \
    -stim_times 3 stimuli/b_face_times.txt 'GAM'                         \
    -stim_label 3 B_Face                                                 \
    -stim_times 4 stimuli/b_scram_times.txt 'GAM'                        \
    -stim_label 4 B_Scram                                                \
    -stim_times 5 stimuli/fixationCross_times.txt 'GAM'                  \
    -stim_label 5 Fix_Crs                                                \
    -stim_times 6 stimuli/obj_times.txt 'GAM'                            \
    -stim_label 6 Obj                                                    \
    -GOFORIT 12                                                          \
    -num_glt 4                                                           \
    -gltsym 'SYM: +2*A_Face +2*B_Face -A_Scram -B_Scram -Fix_Crs -Obj'   \
    -glt_label 1 Face_Selective_Voxels_Standard                          \
    -gltsym 'SYM: +1.5*A_Face +1.5*B_Face -A_Scram -B_Scram -Fix_Crs'    \
    -glt_label 2 Face_Selective_Voxels_NoObjects                         \
    -gltsym 'SYM: +A_Face +B_Scram -B_Face -A_Scram'                     \
    -glt_label 3 Asian_Dir_Interaction                                   \
    -gltsym 'SYM: +B_Face +A_Scram -A_Face -B_Scram'                     \
    -glt_label 4 Black_Dir_Interaction                                   \
    -jobs 4                                                              \
    -fout -tout -x1D X.xmat.1D -xjpeg X.jpg                              \
    -x1D_uncensored X.nocensor.xmat.1D                                   \
    -fitts fitts.$subj                                                   \
    -errts errts.${subj}                                                 \
    -bucket stats.$subj

B.Standalone 3dDeconvole code:
3dDeconvolve -input pb04.${subj}.r01.blur+orig.HEAD pb04.${subj}.r02.blur+orig.HEAD \
-mask mask_anat.${subj}+orig \
-censor censor_${subj}_combined_2.1D \
-ortvec mot_demean.r01.1D mot_demean_r01 -ortvec mot_demean.r02.1D mot_demean_r02 -ortvec mot_deriv.r01.1D mot_deriv_r01 -ortvec mot_deriv.r02.1D mot_deriv_r02 \
-polort 2 \
-local_times \
-num_stimts 6 \
-stim_times 1 stimuli/a_face_times.txt 'GAM' -stim_label 1 A_Face  \
-stim_times 2 stimuli/a_scram_times.txt 'GAM' -stim_label 2 A_Scram \
-stim_times 3 stimuli/b_face_times.txt 'GAM' -stim_label 3 B_Face \
-stim_times 4 stimuli/b_scram_times.txt 'GAM' -stim_label 4 B_Scram \
-stim_times 5 stimuli/fixationCross_times.txt 'GAM' -stim_label 5 Fix_Crs \
-stim_times 6 stimuli/obj_times.txt 'GAM' -stim_label 6 Obj \
-GOFORIT 12 \
-num_glt 2 \
-gltsym 'SYM: +2*A_Face +2*B_Face -A_Scram -B_Scram -Fix_Crs -Obj' -glt_label 1 '3dDeconvolved - Face Selective Voxels Standard' \
-gltsym 'SYM: +1.5*A_Face +1.5*B_Face -A_Scram -B_Scram -Fix_Crs' -glt_label 2 '3dDeconvolved - Face Selective Voxels Sans Objects' \
-jobs $NUM_CPUS \
-fout -tout -x1D X.xmat_3dDeconvolve.1D -xjpeg X_3dDeconvolve.jpg -x1D_uncensored X.nocensor_3dDeconvolve.xmat.1D -fitts fitts_3dDeconvolve.${subj} -errts errts_3dDeconvolve.${subj} -bucket stats_3dDeconvolve.${subj} \

Subject Author Posted

3dDeconvolve differences between proc.py and standalone 3dDeconvolve

jyaros December 10, 2019 05:30PM

Re: 3dDeconvolve differences between proc.py and standalone 3dDeconvolve

rick reynolds December 10, 2019 10:04PM

Re: 3dDeconvolve differences between proc.py and standalone 3dDeconvolve

jyaros December 13, 2019 12:54AM