def create_basis(X, basis, mask): """ Create a (polynomial) basis set """ # check whether we are using a polynomial basis set if type(basis) is int or (type(basis) is str and len(basis) == 1): dimpoly = int(basis) dimx = X.shape[1] print('Generating polynomial basis set of degree', dimpoly, '...') Phi = np.zeros((X.shape[0], X.shape[1] * dimpoly)) colid = np.arange(0, dimx) for d in range(1, dimpoly + 1): Phi[:, colid] = X**d colid += dimx else: # custom basis set if type(basis) is str: print('Loading custom basis set from', basis) # Phi_vol = fileio.load_data(basis) # we load the data this way instead so we can apply the same mask Phi_vol = fileio.load_nifti(basis, vol=True) Phi = fileio.vol2vec(Phi_vol, mask) print('Basis set consists of', Phi.shape[1], 'basis functions.') # maskid = np.where(mask.ravel())[0] else: raise ValueError("I don't know what to do with basis:", basis) return Phi
def load_data(datafile, maskfile=None): """ load 4d nifti data """ if datafile.endswith("nii.gz") or datafile.endswith("nii"): # we load the data this way rather than fileio.load() because we need # access to the volumetric representation (to know the # coordinates) dat = fileio.load_nifti(datafile, vol=True) dim = dat.shape if len(dim) <= 3: dim = dim + (1, ) else: raise ValueError("No routine to handle non-nifti data") mask = fileio.create_mask(dat, mask=maskfile) dat = fileio.vol2vec(dat, mask) maskid = np.where(mask.ravel())[0] # generate voxel coordinates i, j, k = np.meshgrid(np.linspace(0, dim[0] - 1, dim[0]), np.linspace(0, dim[1] - 1, dim[1]), np.linspace(0, dim[2] - 1, dim[2]), indexing='ij') # voxel-to-world mapping img = nib.load(datafile) world = np.vstack( (i.ravel(), j.ravel(), k.ravel(), np.ones(np.prod(i.shape), float))).T world = np.dot(world, img.affine.T)[maskid, 0:3] return dat, world, mask
def load_response_vars(datafile, maskfile=None, vol=True): """ load response variables (of any data type)""" if fileio.file_type(datafile) == 'nifti': dat = fileio.load_nifti(datafile, vol=vol) volmask = fileio.create_mask(dat, mask=maskfile) Y = fileio.vol2vec(dat, volmask).T else: Y = fileio.load(datafile) volmask = None if fileio.file_type(datafile) == 'cifti': Y = Y.T return Y, volmask