Exemple #1
0
    def glmer(self, formula, family, lmerVar="glmer1"):

        if os.path.exists(".rbridge-glmer.csv"):
            os.remove(".rbridge-glmer.csv")

            # Peform lmer
        self.write("library(lmerTest)")
        s = self.call("(%s <- glmer(%s, family=%s))" % (lmerVar, formula, family))
        self.write('write.csv(summary(%s)$coef, ".rbridge-glmer.csv")' % lmerVar)
        while not os.path.exists(".rbridge-glmer.csv"):
            time.sleep(0.1)
            # Try this a few times, because sometimes the csv hasn't been written
            # yet
        for i in range(10):
            try:
                dm = CsvReader(".rbridge-glmer.csv").dataMatrix()
                break
            except:
                time.sleep(1)
        dm.rename("f0", "effect")
        dm.rename("Estimate", "est")
        dm.rename("Std. Error", "se")
        dm.rename("Z value", "z")
        dm.rename("Pr(>|z|)", "p")
        dm = dm.addField("estProb", dtype=float)
        dm["estProb"] = 1.0 / (1.0 + np.exp(-dm["est"]))
        return dm
Exemple #2
0
def refixLaunch(exp,corr=False, trim=True, bins=8):
	
	"""
	"""
	
	src = 'selected_dm_%s_WITH_drift_corr_onlyControl_True.csv' % exp
	dm = CsvReader(src).dataMatrix()
	
	lat1 = "saccLat1"
	lat2 = "saccLat2"
	if corr:
		fix1 = "endX1CorrNormToHandle"
		fix2 = "endX2CorrNormToHandle"
	else:
		fix1 = "endX1NormToHandle"
		fix2 = "endX2NormToHandle"
		
	for var in [lat1, lat2, fix1, fix2]:
		dm = dm.select("%s != ''" % var)
	
	# Trim the data
	if trim:
	
		dm = dm.selectByStdDev(["file"],lat2, 
			verbose=False)
		dm = dm.removeField("__dummyCond__")
		dm = dm.removeField("__stdOutlier__")
		dm = dm.selectByStdDev(["file"], fix2,
			verbose=False)
	
	dm = dm.addField('saccLat2_perc', dtype=float)
	dm = dm.calcPerc(lat2, 'saccLat2_perc', nBin=bins)
	cmLat1 = dm.collapse(['saccLat2_perc'], lat1)	
	cmX = cmLat2 = dm.collapse(['saccLat2_perc'], lat2)
	cmFix1 = dm.collapse(['saccLat2_perc'], fix1)
	cmFix2 = dm.collapse(['saccLat2_perc'], fix2)
	
	fig = plt.figure(figsize = (3,6))
	plt.subplots_adjust(left=.2, bottom=.15)
		
	colList = [orange[1], blue[1]]
	nRows = 3
	nCols = 1
	nPlot = 0
	lTitles = ["Landing pos 2", "Landing pos 1"]
	lTitles.reverse()
	for cmY in [cmFix2, cmFix1]:#, cmLat1]:
		#nPlot +=1
		#plt.subplot(nRows, nCols, nPlot)
		color = colList.pop()
		plt.plot(cmX['mean'], cmY['mean'], marker = 'o', color=color, \
			markerfacecolor='white', markeredgecolor=color, \
			markeredgewidth=1)
		plt.xlabel("Sacc lat 2")

	plt.legend(lTitles, frameon=False, loc='best')
	plt.axhline(0, linestyle = "--", color = gray[3])
	
	plt.savefig("Launch_site_refixations_%s_corr_%s.png" % (exp, corr))
Exemple #3
0
printSum = False

if __name__ == "__main__":
	
	# Get dictionary containing w and h of imaginary boxes around the stimuli:
	boxDict = drawBox.boxDict()

	# OpenSesame output file is opened as dm. The fixation values will 
	# be added to this dm.
	dm = CsvReader(fName, delimiter = ",").dataMatrix()
	
	# The varialbe 'corrDirection' is determined in ascParser,
	# and doesn't exist for the simulation data.
	# Therefore we add it manually:
	dm = dm.addField("corrDirection", dtype = str)
	
	# Make new column headers:
	for sacc in range(1,4):
		
		# Landing position:
		dm = dm.addField('endX%s' % sacc, dtype=str)
		dm = dm.addField('endY%s' % sacc, dtype = str)
		
		# Normalised landing position:
		dm = dm.addField('endX%sNorm' % sacc, dtype = str)
		dm = dm.addField('endY%sNorm' % sacc, dtype = str)
		
		# Landing position where positive indicates ToHandle"
		dm = dm.addField('endX%sNormToHandle' % sacc, dtype = str)
		
Exemple #4
0
yc = 768/2

ythr = 100

if __name__ == "__main__":
	
	dm = CsvReader('data.csv').dataMatrix()
	dm = dm.select('mask_side == "control"')
	dm = dm.select('symm == "asymm"')
	#dm = dm.select('gap == "overlap"')
	#dm = dm.select('handle_side == "right"')

	#dm = dm.select('object == "screwdriver"')

	# X coordinates, where positive values indicate a deviation towards the handle
	dm = dm.addField('refix1', dtype=float)
	dm = dm.addField('refix2', dtype=float)
	dm = dm.addField('refix3', dtype=float)

	# Timestamps for each fixation
	dm = dm.addField('tfix1', dtype=float)
	dm = dm.addField('tfix2', dtype=float)
	dm = dm.addField('tfix3', dtype=float)

	for i in dm.range():
		
		trial = dm[i]
		trialNr = dm['count_trial_sequence'][i]
		handleSide = trial['handle_side'][0]
		print 'Trial %d (%s)' % (trialNr, handleSide)
		sim = CsvReader('simulation/csv/%.4d.csv' % trialNr).dataMatrix()	
Exemple #5
0
def plotContrast(exp = "004B", trim=True, inclSim=True,stats=True,norm=False):
	
	
	"""
	Plots landing positions as a function of contrats manipulation per saccade,
	for Exp 1 and Exp 2, relative to CoG.
	
	Keyword arguments:
	trim		--- (default=True)
	"""
	

	# Get dm:
	src = 'selected_dm_%s_WITH_drift_corr_onlyControl_False.csv' % exp
	dm = CsvReader(src).dataMatrix()

	colList = ["#f57900", "#3465a4"]
	lLegend = ["Saccade 1", "Saccade 2"]

	fig = plt.figure(figsize = (3,4))
	plt.subplots_adjust(left=.2, bottom=.15)
	yLim = [-.07, .12]
	

	for sacc in ["1", "2"]:
		dv = "endX%sNorm" % sacc
		saccVar = "saccLat%s" % sacc

		# Get dm:	
		# Only on-object:
		dm = onObject.onObject(dm, sacc,verbose=False)
		
		if trim:
			dm = dm.removeField("__dummyCond__")
			dm = dm.removeField("__stdOutlier__")
			dm = dm.selectByStdDev(keys = ["file"], \
			dv = dv,verbose=False)
			dm = dm.removeField("__dummyCond__")
			dm = dm.removeField("__stdOutlier__")
			dm = dm.selectByStdDev(keys = ["file"], dv = saccVar,\
				verbose=False)

		
		# Collect mean and error bar per saccade:
		lM = []
		lErr = []
		
		if norm:
			# Normalize across handle side:
			dm = dm.removeField("normDV")
			dm= dm.addField("normDV", dtype = float)
			dm= dm.withinize(dv, "normDV", \
					["handle_side"], whiten=False)
			dv = "normDV"

	
		for contrast in dm.unique("contrast_side"):
			contrast_dm = dm.select("contrast_side == '%s'" % contrast,\
				verbose = False)
			
			cm = contrast_dm.collapse(["file"], dv)

			M = cm["mean"].mean()
			SE = cm['mean'].std() / np.sqrt(len(cm))
			CI = SE * critVal
			lM.append(M)
			lErr.append(CI)
		if stats:
			# Run a full LME
			print "Exp = ", exp
			print "DV = ", dv
			print "trim = ", trim
			print "norm = ", norm
			print "saccVar = ", saccVar
			lmeContrast(R, dm, dv, saccVar, exp=exp)
			#raw_input()
				
			xData = range(len(lM))
			yData = lM
			yErr = lErr

		col = colList.pop()
		plt.errorbar(xData, yData, yerr=yErr, fmt='o-', marker = "o", \
			color = col, markerfacecolor='white', markeredgecolor=col, \
			markeredgewidth=1)
	plt.axhline(0, linestyle = "--")
	plt.ylim(yLim)
	plt.ylabel(yTitle)
	#ax.yaxis.set_ticklabels([])
	plt.legend(lLegend, frameon = False)
	plt.axhline(0, color = "black", linestyle = "--")
	plt.xlabel("High-contrast side")
	spacing = 0.5
	xTicks = range(0,3)
	xLabels = ["Left", "Control", "Right"]
	plt.xticks(xTicks, xLabels, rotation = .5)
	plt.xlim(min(xTicks)-spacing, max(xTicks)+spacing)
	plt.savefig(os.path.join(dst,"Contrast_Effect_%s_trim_%s_norm_%s.png") \
		% (exp, trim, norm))
	plt.show()
Exemple #6
0
from exparser.CsvReader import CsvReader
from matplotlib import pyplot as plt

f = "Sylvie.csv"

dm = CsvReader(f).dataMatrix()
dm = dm.addField("trial_dur")

for i in dm.range():
	# Skip the very first trial because it doesn't have a previous trial:
	if i == 0:
		dm["trial_dur"][i] = -1000
	else:
		s = dm["time_correct_response"][i-1]
		e = dm["time_correct_response"][i]

		dur = e-s
		dm["trial_dur"][i] = dur

# Exclude first trial, which was skipped:
dm = dm.select("trial_dur > 0")
dm["trial_dur"] = dm["trial_dur"]/1000/60

#import analyse
#analyse.plotDist(dm, "trial_dur", bins = 100)
#plt.show()

plt.hist(dm["trial_dur"], bins=100)
plt.show()

# Exclude trials that took longer than 1 minute, because this was probably a 
Exemple #7
0
def ovp(exp,corr=False, trim=True, bins=8):
	
	"""
	"""
	
	src = 'selected_dm_%s_WITH_drift_corr_onlyControl_True.csv' % exp
	dm = CsvReader(src).dataMatrix()

	lat1 = "saccLat1"
	lat2 = "saccLat2"
	prob = "saccCount"
	dur1 = "durationFix1"
	dur2 = "durationFix2"
	total = "gazeDur"
	rt = "rtFromStim"
	
	if corr:
		fix1 = "endX1CorrNormToHandle"
		fix2 = "endX2CorrNormToHandle"
	else:
		fix1 = "endX1NormToHandle"
		fix2 = "endX2NormToHandle"
		
	for var in [lat1, lat2, fix1, fix2, dur1, dur2, total, rt]:
		dm = dm.select("%s != ''" % var)
	
	# Trim the data
	if trim:
	
		dm = dm.selectByStdDev(["file"],lat2, 
			verbose=False)
		dm = dm.removeField("__dummyCond__")
		dm = dm.removeField("__stdOutlier__")
		dm = dm.selectByStdDev(["file"], fix2,
			verbose=False)
	
	dm = dm.addField('land2_perc', dtype=float)
	dm = dm.calcPerc(fix2, 'land2_perc', nBin=bins)
	cmLat1 = dm.collapse(['land2_perc'], lat1)	
	cmLat2 = dm.collapse(['land2_perc'], lat2)
	cmFix1 = dm.collapse(['land2_perc'], fix1)
	cmX = cmFix2 = dm.collapse(['land2_perc'], fix2)
	cmProb = dm.collapse(['land2_perc'], prob)
	cmDur1 = dm.collapse(['land2_perc'], dur1)
	cmDur2 = dm.collapse(['land2_perc'], dur2)
	cmTotal = dm.collapse(['land2_perc'], total)
	cmRt = dm.collapse(['land2_perc'], rt)
	fig = plt.figure(figsize = (3,10))
	plt.subplots_adjust(left=.2, bottom=.15, hspace = .2)
		

	lTitles = ["dur 1", "prob", "land 1", "rt", "total", "lat 1", "lat 2", "dur 2"]
	lTitles.reverse()
	nRows = len(lTitles)
	nCols = 1
	nPlot = 0

	for cmY in [cmDur1, cmProb, cmFix1, cmRt, cmTotal, \
		cmLat1, cmLat2, cmDur2]:
			
		nPlot +=1
		ax = plt.subplot(nRows, nCols, nPlot)
		#color = colList.pop()
		color = blue[1]
		plt.plot(cmX['mean'], cmY['mean'], marker = 'o', color=color, \
			markerfacecolor='white', markeredgecolor=color, \
			markeredgewidth=1)
		plt.ylabel(lTitles.pop())

		plt.axvline(0, linestyle = "--", color = gray[3])
			
		if nPlot == nRows:
			plt.xlabel("Second landing position")
		else:
			ax.xaxis.set_ticklabels([])

	plt.savefig("ovp2_%s_corr_%s.png" % (exp, corr))
Exemple #8
0
def plotGap(exp, dv = "saccLat1", trim = False, norm=True, nBins = 50, \
	exclFastSacc = False):
	
	"""
	"""
	
	src = 'selected_dm_%s_WITH_drift_corr_onlyControl_True.csv' % exp
	dm = CsvReader(src).dataMatrix()

	# Determine sacc:
	sacc = [int(x.group()) for x in re.finditer(r'\d+', dv)][0]
	dm = onObject.onObject(dm, sacc)
	
	# Exclude very fast saccades:
	dm = dm.select("%s > 80" % dv)	
	
	colList = [orange[1], blue[1]]

	# Trim the data
	if trim:
		
		dm = dm.removeField("__dummyCond__")
		dm = dm.removeField("__stdOutlier__")

		dm = dm.selectByStdDev(["file"], dv, \
			verbose=False)
		dm = dm.removeField("__dummyCond__")
		dm = dm.removeField("__stdOutlier__")
		dm = dm.selectByStdDev(["file"], "endX%sNormToHandle" % sacc, \
			verbose=False)
		
		if exp == "004A":
			dm = dm.removeField("__dummyCond__")
			dm = dm.removeField("__stdOutlier__")
			dm = dm.selectByStdDev(["file"], "endX%sCorrNormToHandle" % sacc, \
				verbose=False)
				
	else:
		dm = dm.select("%s < 1000" % dv)
	
	# Normalize saccade latencies 
	if norm:
		dm= dm.addField("normSacc", dtype = float)
		dm= dm.withinize(dv, "normSacc", \
				["file"], whiten=False)
		dv = "normSacc"
		
	for gap in dm.unique("gap"):
		
		_dm = dm.select("gap == '%s'" % gap)

		samp = _dm[dv]
	
		y, edges = np.histogram(samp, bins = nBins)
		y = normY(y)
				
		x = .5*edges[1:] + .5*edges[:-1]
		col = colList.pop()
		plt.plot(x, y, color = col)
		plt.fill_between(x, 0, y, alpha=.3, color=col)	
	plt.legend(dm.unique("gap"))
	plt.ylim([0,1.1])
Exemple #9
0
def dmSim():

	"""
	"""
	
	dm = CsvReader('./simulation/data.csv').dataMatrix()

	# X coordinates, where positive values indicate a deviation towards the handle
	dm = dm.addField('sacc1_ex', dtype=float)
	dm = dm.addField('sacc2_ex', dtype=float)
	dm = dm.addField('sacc3_ex', dtype=float)

	dm = dm.addField('sacc1_ey', dtype=float)
	dm = dm.addField('sacc2_ey', dtype=float)
	dm = dm.addField('sacc3_ey', dtype=float)
	
	dm = dm.addField("trialId", dtype = str)


	# Timestamps for each fixation
	dm = dm.addField('saccLat1', dtype=float)
	dm = dm.addField('saccLat2', dtype=float)
	dm = dm.addField('saccLat3', dtype=float)

	for i in dm.range():
		
		trial = dm[i]
		trialNr = dm['count_trial_sequence'][i]
		dm["trialId"][i] = trialNr
		handleSide = trial['flip'][0]
		print 'Trial %d (%s)' % (trialNr, handleSide)
		sim = CsvReader('simulation/simulation/csv/%.4d.csv' % trialNr).dataMatrix()	
		
		fixNr = 1	
		for fix in sim:
			t = fix['t'][0]

			dx = fix['x'][0]
			dy = fix['y'][0]
			dm["sacc%s_ey" % fixNr][i] = dy
			dm['sacc%d_ex' % fixNr][i] = dx
			dm['saccLat%d' % fixNr][i] = t
			fixNr += 1
			if fixNr > 3:
				break
	dm.save('dm_simulation.csv')
	
	dm = dm.addField("expId", dtype = str, default = "sim")
	dm = dm.addField("symm", dtype = str, default = "asymm")
	dm = dm.addField("saccCount", default = 3)
	dm = dm.addField("mask_side", dtype = str, default = "control")
	dm = dm.addField("cond", dtype = str, default = "not_practice")
	dm = dm.addField("rep", dtype = str, default = "not_practice")
	dm = dm.addField("checkFixDotFailed", dtype = str, default = "False")
	dm = dm.addField("checkObjectFailed", dtype = str, default = "False")
	dm = dm.addField("file", dtype = str, default = "sim")
	return dm