[pymvpa] Concatenate Nifti data sets

Nick Oosterhof n.n.oosterhof at googlemail.com
Fri Mar 3 13:10:23 UTC 2017

> On 3 Mar 2017, at 07:20, Anaelia Ovalle <anaeliaovalle at gmail.com> wrote:
> Hi, this is my first time working with PyMVPA and I'm looking to build one fmri dataset from 10 individual fmri runs. I was wondering how I would go about this? As a brute force approach, I was thinking to import the first run, then looping through the rest of the runs and appending the data. However, how would I go about adding the attribute targets and chunks to it?? Below is an attempt to do this....
> Any help would be much appreciated! 
> ************************************************
> def loadData():
>     data_path = "/Users/..."
>     #start with run1 and append runs 2-10
>     bold_fname = os.path.join(data_path, 'run1_mask+orig.nii.gz')
>     #upload BOLD data with its mask
>     ds = fmri_dataset(samples = bold_fname)
>     #iterate through runs 2-10 and append each fmri dataset to ds
>     for i in range(2,11):
>         path = 'run'+str(i)+'_mask+orig.nii.gz'
>         bold_fname = os.path.join(data_path, path)
>         sub = fmri_dataset(samples = bold_fname)
>         ds = vstack((ds,sub))
>     #add the attribute targets/chunks to the data
>     ds.sa.targets = attr.targets
>     ds.sa.chunks = np.array(attr.chunks)

In fMRI, chunks are usually assigned so that the i-th run has chunk value i. So you could set .sa.chunks to a value between 1 and 10 depending on the run. 

For .sa.targets, it would be useful if you told a bit more about the contents of the datasets corresponding to the fMRI runs. Is this timecourse data? Or data from a GLM? Beta estimates, t-statistics, something else? Can your experimental design be described by a limited number of conditions (e.g. different trials with presentation of pictures of fluffy cats or dogs dancing on a rainbow) or not (e.g. continuous movie data about fluffy pets dancing)?

As a side note, your approach of stacking should work, although it's not very efficient in terms of memory allocation. Better is to collect the datasets for each run in a list, and then use a single stack operation on the list. 

More information about the Pkg-ExpPsy-PyMVPA mailing list