3dRankizer- strange behavior?

Afni gurus:

I’m trying to identify the n voxels with the highest t values for a particular contrast. I know 3dRank and the -1rank option in 3dmerge only work on integers, but 3dRankizer doesn’t appear to have that restriction, so that’s what I decided to try. It says it only works on sub-brik #0 so I created a dataset containing only the sub-brik with those t values in it (subj.tvals+orig). I’m using the following command:

3dRankizer -mask brainmask+orig -prefix rankedTs subj.tvals+orig

The program runs and tells me there are ~55000 voxels in brainmask+orig. So I expected to get an output dataset that contains voxel values ranging from 1 to 55000 and then I could just pick off the top n (100, 1000, etc) using 3dcalc. Instead, I get a dataset where the vast majority of the ~55000 voxels have large negative values (-149490, -179121, etc), with only about 250 positive voxels. These 250 positive voxels do actually seem to correspond to the top 250 t-values and have the voxel values I’d expect (55000, 54999, 54998, etc) but I don’t understand why that doesn’t continue all the way down the ranks.

It’s not the case that there are only 250 positive t values in my dataset (at least 75% are positive.) I wondered if perhaps it wasn’t able to handle such a large mask/number of voxels so I tried a different mask with only about 1100 voxels in it and got essentially (but not identically) the same result- about 200 voxels with voxel values in the 900-1100 range and about 900 voxels with large (> 100000) negative values.

I’m a bit baffled. Is there something I’m obviously overlooking or doing wrong? Alternately, is there a different approach I could take to identify the highest n voxels in a dataset? (I do need it to be a certain number of voxels and not a certain percentage of voxels.)

Kate Revill

I haven’t looked at this program, but there are a couple approaches here:


and here: