def ett(plot_ax="Y", source=False, id_list="final", make_tight=True, print_title=True, linewidth=0.8, fontscale=0.5, isspec=False, make_sem=True): config = get_config_file(localpath=path.dirname(path.realpath(__file__))+'/') #IMPORT VARIABLES if not source: source = config.get('Source', 'source') data_path = config.get('Addresses', source) reaction_times = config.get('Addresses', 'reaction_times') #END IMPORT VARIABLES if plot_ax == "X": plot_axis = 'GazePointX' direction = "(towards stimulus)" if plot_ax == "Y": plot_axis = 'GazePointY' direction = "(up)" data_path = path.expanduser(data_path) rt_path = data_path + reaction_times files = [lefile for lefile in listdir(rt_path) if lefile.endswith('.tsv')] ids = [t.split('_',2)[0]+'_'+t.split('_',2)[1] for t in files] ids = np.unique(ids) eye_data_total = pd.DataFrame([]) stimulus_datas = pd.DataFrame([]) spec = ['6245247_f'] h_dist = ['1236345_f','6779353_f','7310001_f','7714775_m','7816097_m','7865828_m','7922847_m'] l_dist = ['1975801_m','4724273_f','6268973_m','8963557_f','8286497_m','8963557_m','9651558_m','8240877_m','6887665_m','5559429_f','8582941_f','8582941_m','9302438_f','4276763_f','3878418_m','3537898_f','1247497_f','8717741_m','4744495_f','7117377_m'] best = ['1975801_m','4724273_f','6268973_m','8963557_f','8286497_m','8963557_m','6887665_m','5559429_f','8582941_f','9302438_f','1247497_f','4744495_f','7117377_m'] test = ['chr1_f','chr2_f'] if id_list=="final": id_list = l_dist for fileidx, fileid in enumerate(id_list): ratings = open_csv(rt_path+fileid+'_p') ratings = pd.DataFrame(ratings[1:], columns=ratings[0], dtype=float) ratings = ratings.groupby('picture').mean() sorted_scores = sorted(ratings['score']) score_top, score_bottom = sorted_scores[-20], sorted_scores [19] stimulus_data = pd.DataFrame stimulus_data = stimulus_data.from_csv(rt_path+fileid+'_wm.csv') stimulus_data['rateL'] = stimulus_data['rateL'].astype(np.float64) stimulus_data['RTL'] = stimulus_data['RTL'].astype(np.float64) stimulus_data['orderL'] = stimulus_data['orderL'].astype(np.float64) stimulus_data['rateR'] = stimulus_data['rateR'].astype(np.float64) stimulus_data['RTR'] = stimulus_data['RTR'].astype(np.float64) stimulus_data['orderR'] = stimulus_data['orderR'].astype(np.float64) stimulus_data['RT'] = stimulus_data['RT'].astype(np.float64) stimulus_data['session'] = stimulus_data['session'].astype(np.float64) stimulus_data = stimulus_data[stimulus_data['RT'] >=0] stimulus_data['block'] = '' stimulus_data.ix[(stimulus_data['rateL'] >= score_top) & (stimulus_data['rateR'] >= score_top), 'block'] = 'aa' stimulus_data.ix[(stimulus_data['rateL'] >= score_top) & (stimulus_data['rateR'] <= score_bottom), 'block'] = 'au' stimulus_data.ix[(stimulus_data['rateL'] <= score_bottom) & (stimulus_data['rateR'] >= score_top), 'block'] = 'ua' stimulus_data.ix[(stimulus_data['rateL'] <= score_bottom) & (stimulus_data['rateR'] <= score_bottom), 'block'] = 'uu' aa_trials = list(stimulus_data[(stimulus_data['block'] == 'aa')]['session']) au_trials = list(stimulus_data[(stimulus_data['block'] == 'au')]['session']) ua_trials = list(stimulus_data[(stimulus_data['block'] == 'ua')]['session']) uu_trials = list(stimulus_data[(stimulus_data['block'] == 'uu')]['session']) stimleft_trials = list(stimulus_data[(stimulus_data['isstimleft'] == True)]['session']) stimright_trials = list(stimulus_data[(stimulus_data['isstimleft'] == False)]['session']) stimatt_trials = list(stimulus_data[(stimulus_data['isstimleft'] == True) & (stimulus_data['rateL'] >= score_top) & (stimulus_data['rateR'] <= score_bottom)]['session']) stimatt_trials = stimatt_trials + list(stimulus_data[(stimulus_data['isstimleft'] == False) & (stimulus_data['rateL'] <= score_bottom) & (stimulus_data['rateR'] >= score_top)]['session']) stimNatt_trials = list(stimulus_data[(stimulus_data['isstimleft'] == False) & (stimulus_data['rateL'] >= score_top) & (stimulus_data['rateR'] <= score_bottom)]['session']) stimNatt_trials = stimNatt_trials + list(stimulus_data[(stimulus_data['isstimleft'] == True) & (stimulus_data['rateL'] <= score_bottom) & (stimulus_data['rateR'] >= score_top)]['session']) pat = 'TimeStamp GazePointXLeft GazePointYLeft ValidityLeft GazePointXRight GazePointYRight ValidityRight GazePointX GazePointY Event' with open(rt_path+fileid+'_wmet.tsv') as infile: eye_data = infile.read().split(pat) eye_data = eye_data[1:] # remove header (describing date etc) eye_data = [trial.split('\r\n') for trial in eye_data] # split at '\r' for idx, i in enumerate(eye_data): # crop to 447 ACTUAL time frames - the first one is empty eye_data[idx] = i[:448] for idx, trial in enumerate(eye_data): trial = [row.split('\t') for row in trial] eye_data[idx] = trial eye_data = [name[1:] for name in eye_data] # crop the first, empty line eye_data = np.array(eye_data) eye_data = eye_data[:,:,[0,3,6,7,8]].astype(np.float64) # convert to float, we don't need separate eye coordinates eye_data[:,:,3:] = eye_data[:,:,3:] / 2 - 0.5 # the integrated left-right gaze coordinates are the sum of the per-eye screen percentages - divide by 2 (2 eyes) and normalize to: 50% = 0 for a in np.arange(np.shape(eye_data)[0]): # assume that when neither of the eyes is detected the subject looks at the fixation for i in np.arange(np.shape(eye_data)[1]): if eye_data[a,i,1] == 4 and eye_data[a,i,2] == 4: eye_data[a,i,3] = 0 eye_data[a,i,4] = 0 for i in stimleft_trials: # invert stimleft trial coordinates - equates 'right' with 'stimside' eye_data[i,:,3:] = -eye_data[i,:,3:] eye_data = eye_data[:,:,[0,3,4]] # we can't work with eye detection indices in the subsequent sumation, discard them here eye_data_aa = eye_data[aa_trials,:,:] eye_data_uu = eye_data[uu_trials,:,:] eye_data_uas = eye_data[stimatt_trials,:,:] eye_data_aus = eye_data[stimNatt_trials,:,:] eye_data_aa = np.sum(eye_data_aa, axis=0) / np.shape(eye_data_aa)[0] eye_data_uu = np.sum(eye_data_uu, axis=0) / np.shape(eye_data_uu)[0] eye_data_uas = np.sum(eye_data_uas, axis=0) / np.shape(eye_data_uas)[0] eye_data_aus = np.sum(eye_data_aus, axis=0) / np.shape(eye_data_aus)[0] eye_data_aa = pd.DataFrame(eye_data_aa, columns=['time','GazePointX','GazePointY']) eye_data_aa['stimuli'] = 'aa' eye_data_uu = pd.DataFrame(eye_data_uu, columns=['time','GazePointX','GazePointY']) eye_data_uu['stimuli'] = 'uu' eye_data_uas = pd.DataFrame(eye_data_uas, columns=['time','GazePointX','GazePointY']) eye_data_uas['stimuli'] = 'uas' eye_data_aus = pd.DataFrame(eye_data_aus, columns=['time','GazePointX','GazePointY']) eye_data_aus['stimuli'] = 'aus' eye_data = pd.concat([eye_data_aa, eye_data_uu, eye_data_uas, eye_data_aus]) eye_data['ID'] = fileid eye_data["timepoint"] = eye_data.index if fileidx == 0: eye_data_total = eye_data[["timepoint",'time','GazePointX','GazePointY','stimuli',"ID"]] else: eye_data_total = pd.concat([eye_data_total, eye_data[["timepoint",'time','GazePointX','GazePointY','stimuli',"ID"]]]) # load reaction times (to plot as lines) here: conts = get_dataframes(id_list, rt_path) sa_reaction_time = conts[(conts['subblock'] == 'uas+sau')]['RT'].mean()*1000 su_reaction_time = conts[(conts['subblock'] == 'aus+sua')]['RT'].mean()*1000 aa_reaction_time = conts[(conts['block'] == 'aa')]['RT'].mean()*1000 uu_reaction_time = conts[(conts['block'] == 'uu')]['RT'].mean()*1000 # end load reaction times et_means = eye_data_total.groupby(["stimuli","timepoint"]).mean() if make_sem: et_sem = eye_data_total.groupby(["stimuli","timepoint"]).aggregate(sem) fig = figure(figsize=(3, 4), dpi=300, facecolor='#eeeeee', tight_layout=make_tight) ax1=fig.add_subplot(2,1,1) matplotlib.rcParams.update({'font.size': 12*fontscale}) ax1.set_xlim(0, et_means['time'].max()) tc = et_means.ix["aa"]['time'] v = et_means.ix["aa"][plot_axis] ax1.plot(tc, v, color='g') if make_sem: se = et_sem.ix["aa"][plot_axis]/2 ax1.fill_between(tc, v+se, v-se, facecolor="g", edgecolor="none", alpha=0.1, zorder=0) tc = et_means.ix["uu"]['time'] v = et_means.ix["uu"][plot_axis] ax1.plot(tc, v, color='m') if make_sem: se = et_sem.ix["uu"][plot_axis]/2 ax1.fill_between(tc, v+se, v-se, facecolor="m", edgecolor="none", alpha=0.1, zorder=0) legend(('Attractive - Attractive','Unattractive - Unattractive'), bbox_to_anchor=(0.94, 0.99), shadow=False, frameon=False, prop=FontProperties(size=str(9*fontscale))) ax1.axhline(0, color='k', alpha = 0.1, linewidth=linewidth) ax1.axvline(aa_reaction_time, color='g', alpha = 0.3, linewidth=linewidth) ax1.axvline(uu_reaction_time, color='m', alpha = 0.3, linewidth=linewidth) ax1.set_ylabel(plot_ax+'-axis % '+direction) ax1.set_xlabel('Time [ms]') ax2 = fig.add_subplot(212) ax2.set_xlim(0, et_means['time'].max()) tc = et_means.ix["uas"]['time'] v = et_means.ix["uas"][plot_axis] ax2.plot(tc, v, color='g') if make_sem: se = et_sem.ix["uas"][plot_axis]/2 ax2.fill_between(tc, v+se, v-se, facecolor="g", edgecolor="none", alpha=0.1, zorder=0) tc = et_means.ix["aus"]['time'] v = et_means.ix["aus"][plot_axis] ax2.plot(tc, v, color='m') if make_sem: se = et_means.ix["aus"][plot_axis]/2 ax2.fill_between(tc, v+se, v-se, facecolor="m", edgecolor="none", alpha=0.1, zorder=0) legend(('Attractive on Target Side','Unattractive on Target Side'), bbox_to_anchor=(0.94, 0.99), shadow=False, frameon=False, prop=FontProperties(size=str(9*fontscale))) ax2.axhline(0, color='k', alpha = 0.1, linewidth=linewidth) ax2.axvline(sa_reaction_time, color='g', alpha = 0.3, linewidth=linewidth) ax2.axvline(su_reaction_time, color='m', alpha = 0.3, linewidth=linewidth) ax2.set_ylabel(plot_ax+'-axis % '+direction) ax2.set_xlabel('Time [ms]')
def coi(source=False, make_tight=True, print_title = True, elinewidth=3, fontscale=1, isspec = False): config = get_config_file(localpath=path.dirname(path.realpath(__file__))+'/') #IMPORT VARIABLES if not source: source = config.get('Source', 'source') data_path = config.get('Addresses', source) reaction_times = config.get('Addresses', 'reaction_times') #END IMPORT VARIABLES data_path = path.expanduser(data_path) rt_path = data_path + reaction_times files = [lefile for lefile in listdir(rt_path) if lefile.endswith('.csv')] ids = [t.split('_',2)[0]+'_'+t.split('_',2)[1] for t in files] ids = np.unique(ids) conts = get_dataframes(id_list, rt_path) if isspec: spec_conts = get_dataframes(spec, rt_path) meanscont = spec_conts.groupby('subblock').mean() print meanscont cat1 = spec_conts[spec_conts['subblock']=='aus+sua'] cat2 = spec_conts[spec_conts['subblock']=='uas+sau'] print ttest_rel(cat1['RTdiff'], cat2['RTdiff']) meanscont = conts.groupby(['ID','subblock']).mean() meanscont = meanscont.reset_index() ids = sorted(list(set(conts.set_index('ID').index))) pos_ids = np.arange(len(ids)) sa_means = conts[(conts['subblock'] == 'uas+sau')].groupby('ID')['RTdiff'].mean() sa_std = conts[(conts['subblock'] == 'uas+sau')].groupby('ID')['RTdiff'].aggregate(sem) su_means = conts[(conts['subblock'] == 'aus+sua')].groupby('ID')['RTdiff'].mean() su_std = conts[(conts['subblock'] == 'aus+sua')].groupby('ID')['RTdiff'].aggregate(sem) sa_means = conts[(conts['subblock'] == 'uas+sau')].groupby('ID')['RTdiff'].mean() sa_std = conts[(conts['subblock'] == 'uas+sau')].groupby('ID')['RTdiff'].aggregate(sem) sa_t_means = meanscont[(meanscont['subblock'] == 'uas+sau')]['RTdiff'].mean() sa_t_std = sem(meanscont[(meanscont['subblock'] == 'uas+sau')]['RTdiff']) su_means = conts[(conts['subblock'] == 'aus+sua')].groupby('ID')['RTdiff'].mean() su_std = conts[(conts['subblock'] == 'aus+sua')].groupby('ID')['RTdiff'].aggregate(sem) su_t_means = meanscont[(meanscont['subblock'] == 'aus+sua')]['RTdiff'].mean() su_t_std = sem(meanscont[(meanscont['subblock'] == 'aus+sua')]['RTdiff']) if isspec: sa_spec_means = spec_conts[(spec_conts['subblock'] == 'uas+sau')]['RTdiff'].mean() sa_spec_std = sem(spec_conts[(spec_conts['subblock'] == 'uas+sau')]['RTdiff']) su_spec_means = spec_conts[(spec_conts['subblock'] == 'aus+sua')]['RTdiff'].mean() su_spec_std = sem(spec_conts[(spec_conts['subblock'] == 'aus+sua')]['RTdiff']) fig = figure(figsize=(pos_ids.max()*3, 4), dpi=300, facecolor='#eeeeee', tight_layout=make_tight) ax=fig.add_subplot(1,1,1) matplotlib.rcParams.update({'font.size': 12*fontscale}) width = 0.3 ax.yaxis.grid(True, linestyle='-', which='major', color='#dddddd',alpha=0.5, zorder=1) sa_bar = plt.bar(pos_ids, sa_means, width ,color='m', alpha=0.4, zorder=1, linewidth=0) sa_err = errorbar(pos_ids+(width/2), sa_means, yerr=sa_std, ecolor='0.55', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) sa_t_bar = plt.bar(pos_ids[-1]+1, sa_t_means, width ,color='m', alpha=0.8, zorder=1, linewidth=0) sa_t_err = errorbar(pos_ids[-1]+1+(width/2), sa_t_means, yerr=sa_t_std, ecolor='0.1', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) su_bar = plt.bar(pos_ids+width, su_means, width ,color='g', alpha=0.4, zorder=1, linewidth=0) su_err = errorbar(pos_ids+(width*3/2), su_means, yerr=su_std, ecolor='0.55', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) su_t_bar = plt.bar(pos_ids[-1]+1+width, su_t_means, width ,color='g', alpha=0.8, zorder=1, linewidth=0) su_t_err = errorbar(pos_ids[-1]+1+(width*3/2), su_t_means, yerr=su_t_std, ecolor='0.1', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if isspec: sa_spec_bar = plt.bar(pos_ids[-1]+2, sa_spec_means, width ,color='m', alpha=0.4, zorder=1, linewidth=0) sa_spec_err = errorbar(pos_ids[-1]+2+(width*1/2), sa_spec_means, yerr=sa_spec_std, ecolor='0.55', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) su_spec_bar = plt.bar(pos_ids[-1]+2+width, su_spec_means, width ,color='g', alpha=0.4, zorder=1, linewidth=0) su_spec_err = errorbar(pos_ids[-1]+2+(width*3/2), su_spec_means, yerr=su_spec_std, ecolor='0.55', elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if isspec: ids=ids+['total',spec] else: ids=ids+['TOTAL '] # blank space at the end so that it doesn't overlap with the x-axis pos_ids = np.arange(len(ids)) ax.set_xlim(0, pos_ids.max()) ax.set_ylabel(r'$\mathsf{\overline{RT}}$ [s]') ax.set_xlabel('Participant ID') ax.set_xticks(pos_ids + width) ax.set_xticklabels(ids,fontsize=8*fontscale,rotation=90) for tick in ax.axes.get_xticklines(): tick.set_visible(False) axis.Axis.zoom(ax.xaxis, -0.5) legend((sa_t_bar,su_t_bar),('Target flanking attracive face','Target flanking unattractive face'), bbox_to_anchor=(0.92, 0.2), shadow=False, frameon=False, prop=FontProperties(size=str(11*fontscale))) print meanscont[meanscont['subblock']=='uas+sau']['RTdiff'].mean()-meanscont[meanscont['subblock']=='aus+sua']['RTdiff'].mean() return meanscont