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
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))
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)
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()
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()
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
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))
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])
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