Exemplo n.º 1
0
	def eprime2dm(eprime,pppi):
	   	import os
	   	import re
	   	import scipy.io as sp
		import glob as gl
		import numpy
		import nipype.interfaces.matlab as mlab 
		from nipype.interfaces.base import Bunch
	    
		# convert numpy data array
		def convert_numpy(ar,toString = False):
			lst = []
			for a in ar.tolist():
				if toString:
					lst.append(str(a))
				elif type(a) == numpy.ndarray:
					if a.size > 1:			
						lst.append(a.tolist())
					else:
						lst.append([a.tolist()])
				else:
					lst.append([a])
			return lst

		m = re.search("eprime_([a-z]+)\.txt",eprime)
		sequence = m.group(1)
	   	
		# get nDM. mat files
		mat = os.path.join(os.path.dirname(eprime),"nDM*"+sequence+".mat")
		mat = gl.glob(mat)
		if len(mat) > 0:
			mat = mat[0]
		else:
			# execute matlab script to generate nDM file
			m = mlab.MatlabCommand()
			m.inputs.mfile = False
			m.inputs.script = sequence+"_eprime2dm_embarcs(\'"+eprime+"\');"
			m.run();
		
			# get nDM file (again)
			mat = os.path.join(os.path.dirname(eprime),'nDM*.mat')
			mat = gl.glob(mat)
			if len(mat) > 0:
				mat = mat[0]


		dm = sp.loadmat(mat,squeeze_me=True)
		
		names  = convert_numpy(dm.get('names'),True)
		onsets = convert_numpy(dm.get('onsets'))
		durations = convert_numpy(dm.get('durations'))
	
		# load up values and convert them
		# for PPPI remove last column for reward PPI; for ert last 3 columns
		# error, posterror, misc
		if pppi:
			trim = 3
			if sequence == "reward":
				trim = 1
			names = names[0:(len(names)-trim)]
			durations = durations[0:(len(durations)-trim)]
			onsets = onsets[0:(len(onsets)-trim)]
	
		# create bunch to return
		bunch = Bunch(conditions=names,onsets=onsets,durations=durations)
		if 'pmod' in dm:
			pmod = []
			for i in range(0,len(dm.get('pmod'))):
				if dm['pmod']['name'][i].size == 0:
					pmod.append(None)
				else:
					name = str(dm['pmod']['name'][i])
					param = dm['pmod']['param'][i].tolist()
					poly = dm['pmod']['poly'][i]
					pmod.append(Bunch(name=[name],param=[param],poly=[poly]))
			bunch.pmod = pmod
	
		return bunch
Exemplo n.º 2
0
def load_design_matrix(mat_file,trim=0):
	import os
	import re
	import scipy.io as sp
	import glob as gl
	import numpy
	import nipype.interfaces.matlab as mlab 
	from nipype.interfaces.base import Bunch

	# convert numpy data array
	def convert_numpy(ar,toString = False):
		lst = []
		for a in ar.tolist():
			if toString:
				lst.append(str(a))
			elif type(a) == numpy.ndarray:
				if a.size > 1:			
					lst.append(a.tolist())
				else:
					lst.append([a.tolist()])
			else:
				lst.append([a])
		return lst

	# if list of mat_files, then do a list
	mat_files = []	
	if isinstance(mat_file,list):
		mat_files = mat_file
	else:
		mat_files = [mat_file]
		
	bunches = []

	# go over mat files
	for mat_file in mat_files:
		# load design matrix 
		dm = sp.loadmat(mat_file,squeeze_me=True)

		names  = convert_numpy(dm.get('names'),True)
		onsets = convert_numpy(dm.get('onsets'))
		durations = convert_numpy(dm.get('durations'))
		
		# load up values and convert them
		# for PPPI remove last column for reward PPI; for ert last 3 columns
		# error, posterror, misc
		if trim > 0:
			names = names[0:(len(names)-trim)]
			durations = durations[0:(len(durations)-trim)]
			onsets = onsets[0:(len(onsets)-trim)]

		# create bunch to return
		bunch = Bunch(conditions=names,onsets=onsets,durations=durations)
		if 'pmod' in dm:
			pmod = []
			for i in range(0,len(dm.get('pmod'))):
				if isinstance(dm['pmod']['name'][i],unicode) or dm['pmod']['name'][i].size == 1:
					name = str(dm['pmod']['name'][i])
					param = dm['pmod']['param'][i].tolist()
					poly = dm['pmod']['poly'][i]
					pmod.append(Bunch(name=[name],param=[param],poly=[poly]))
				elif dm['pmod']['name'][i].size >  1:
					names = []
					params = []
					polys = []
					for j in range(0,dm['pmod']['name'][i].size):
						names.append(str(dm['pmod']['name'][i][j]))
						params.append(dm['pmod']['param'][i][j].tolist())
						polys.append(dm['pmod']['poly'][i][j])
					pmod.append(Bunch(name=names,param=params,poly=polys))
				else:
					pmod.append(None)
			bunch.pmod = pmod
		bunches.append(bunch)
	return bunches