Dear Peter,
Your pipeline looks very robust to me, I would modify a couple of things.
Denoising
dwidenoise {id}_ses-ap_dwi.nii.gz temp_denoised_ap.nii.gz 2>&1 dwidenoise {id}_ses-pa_dwi.nii.gz temp_denoised_pa.nii.gz 2>&1
mrdegibbs temp_denoised_ap.nii.gz temp_diffusion_ap.nii.gz 2>&1
mrdegibbs temp_denoised_pa.nii.gz temp_diffusion_pa.nii.gz 2>&1
As your data contains 159 volumes, maybe you want to add the flag -extent 7,7,7 to obtain better results.
Run EDDY (5.0.11)
fslmerge -t temp_diffusion.nii.gz temp_diffusion_ap.nii.gz temp_diffusion_pa.nii.gz
eddy_cpu -v --imain=temp_diffusion.nii.gz --mask=temp_b0_hifi_avg_brain_mask --acqp={param} --index={index} --bvecs=temp_diffusion.bvec --bvals=temp_diffusion.bval --topup=topup --out=temp_eddy --resamp=lsr --fep --data_is_shelled
The option --repol in eddy is also very interesting, you can take a look here.
Bias correction
N4BiasFieldCorrection -d 3 -i temp_b0_corrected_avg.nii.gz -w temp_b0_hifi_avg_brain_mask -o [temp_b0_hifi_avg_nobias.nii.gz,{id}_dwi-bias.nii.gz] -b [150,3] -c [1000x1000,0.0] fslmaths temp_eddy.nii.gz -div {id}_dwi-bias.nii.gz ${id}_dwi-data.nii.gz
Why don’t use the dwibiascorrect script? now provides updated parameters and also doesn’t introduce big scale differences between before and after bias correction.
Register T1 to DWI using ANTS
antsRegistrationSyN.sh -d 3 -f meanb0.nii.gz -m {id}_T1w.nii.gz -o t1_to_dwi -t r -p f antsApplyTransforms -d 3 -e 3 -i {id}_T1w.nii.gz -r ${id}_T1w.nii.gz -t t1_to_dwi0GenericAffine.mat -o t1_to_dwi.nii.gz --float
As the data has been previously corrected for all distortions, a rigid body transformation should be enough. In this scenario the bbr registration has shown to provide better results that a simply rigid body. In the forum this issue has been discussed a couple of times, here.
I hope all of this helps.
Best regards,
Manuel