Some setup...
from parseBehav import parseBhLog
from mvpa2.suite import *
PROCS_OF_INTEREST = ['MixedBivalent1', 'MixedBivalent2', 'MixedBivalent3',
'MixedUnivalent1', 'MixedUnivalent2', 'MixedUnivalent3']
FILES = ["testbold%02d.nii" % n for n in xrange(1,11)]
sas, events = parseBhLog('./testbehav.txt')
events = [ev for ev in events if ev['ev_block_proc'] in PROCS_OF_INTEREST]
ds = fmri_dataset(FILES, mask='testroi.nii')
for key in sas.keys(): ds.sa[key] = sas[key]
Vanilla event related dataset...
dse = eventrelated_dataset(ds,events=events)
print dse.nsamples
print dse.nfeatures
vi = dse.fa['voxel_indices']
print vi[0]
# all voxel indices repeated twice?
nFeats = int(floor(dse.nfeatures/2))
print all([vi[i] == vi[nFeats+i] for i in xrange(nFeats)])
192 1140 [23 31 6] True
This all looks good.
Now let's use FxMapper to do a little temporal compression...
fx = FxMapper(axis='features', fx=np.mean)
dse2 = eventrelated_dataset(ds,events=events,event_mapper=fx)
print dse2.nsamples
print dse2.nfeatures
# all voxel indices equal to mean of same voxels from
# the two volumes?
nSamps = dse2.nsamples
s1 = dse.samples
s2 = dse2.samples
print all([[s2[n,i] == np.mean([s1[n,i], s1[n,nFeats+i]]) for i in xrange(nFeats)] for n in xrange(nSamps)])
192 570 True
This looks good too. Everything is averaged correctly.
Let's check to see if the voxel indices are intact...
print dse.fa['voxel_indices'][0]
print dse2.fa['voxel_indices'][0]
[23 31 6] 6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41
Okay, lost me there. Where does this value come from?