The script I am working on began to fail, and the failure point seems to be in 3dSkullStrip run by align_epi_anat.py run by afni_proc.py run by a heavily modified derivative of MACAQUE_DEMO_REST
It occurs with a specific data set (session 1). Another very similar data set (same experiment, same subject, different session (3)) runs fine. But the problematic session 1 was analyzed in the same way before without problems, and I think that the reason why it does not anymore is a change to afni.
Below is my reasoning for that.
I reverted my script to the state equivalent to the state in which it ran successfully on the same data set. While I did not have the old version of the script, I knew what changes I made. The reverted script failed again when run on session 1.
I had a copy of the old results folder. I compared the ‘old’ vs ‘new’ proc file for session 1, and I see no differences except for a few minor changes (which seem to be in TSNR calculation and in gen_ss_review_scripts.py), the date when it was run, and afni_proc.py version.
I compared ‘old’ and ‘new’ output.proc file, and the only differences I see up to the point of failure are the date when it was run, afni_proc.py version, and AFNI version (and minor differences in execution time)
afni_proc version is 7.12 vs 7.14, afni version is 21.0.08 vs. 21.0.13.
The point of failure is:
3dSkullStrip -orig_vol -input ./__tt_vr_base_min_outlier_ts+orig -prefix ./__tt_vr_base_min_outlier_ts_ns Warning 3dSkullStrip:**************** Surface self intersecting! trying again: smoothing of 84, avoid_vent -1 Warning 3dSkullStrip:**************** Surface self intersecting! trying again: smoothing of 96, avoid_vent -1 Warning 3dSkullStrip:**************** Surface self intersecting! trying again: smoothing of 108, avoid_vent -1 Warning 3dSkullStrip:**************** Surface self intersecting! trying again: smoothing of 120, avoid_vent -1 Warning 3dSkullStrip: Stubborn intersection remaining at smoothing of 120. Ignoring it.*** NO CLUSTERS FOUND ***
Then it tries to soldier on, but in 3dBrickStat -automask it applies a rather suspicious threshold of 0 (previously 2730) and the script soon dies with
** FATAL ERROR: 3dAllineate fails :: base image has 0 nonzero voxels (< 100)
No surprise, the base: __tt_vr_base_min_outlier_ts_ns+orig is all black.
This all seems to point to a change made in 3dSkullStrip(?) between the versions. But I realize that there is a chance that I failed to revert the script to exactly same state even if there was no difference in proc or output.proc. Or there was a change to source data that I forgot about…
So I found a computer with AFNI 20.3.03 installed, I copied all source data and scripts from my ‘new’ version that failed, ran the script, and it did not fail.
This makes me pretty confident that a change between 21.0.08 and 21.0.13 is responsible for the skull-stripping failure when processing session 1 - so I am wondering if this change could be traced and re-evaluated if it is really necessary?
I will be happy to provide the data and scripts which should allow to replicate the issue.