def organize(src_directory, dst_directory, gaze_file_filter): """ organize does not delete nor overrides any source data it will copy and convert data from source it will rename at destination it DOES overrides any previous copies in destination it must be run after pupil surface data have been exported """ print('doing:', src_directory) # destination dst_filenames = [ 'info.yml', 'session_configuration.ini', 'session_events.txt', 'gaze_coordenates_' + gaze_file_filter.replace('*', '') + '.txt' ] dst_files = [os.path.join(dst_directory, f) for f in dst_filenames] # source src_files = get_source_files(src_directory, gaze_file_filter=gaze_file_filter) # loading beha_file = load_fpe_timestamps(src_files[2], converted=False) gaze_file = load_gaze_data(src_files[3], converted=False) start_time = gaze_file['gaze_timestamp'][0] # copying copy_file(src_files[0], dst_files[0]) copy_file(src_files[1], dst_files[1]) #conversion convert_beha(beha_file, dst_files[2], start_time=start_time) convert_gaze(gaze_file, dst_files[3], start_time=start_time) # feedback print('done:', src_directory)
def analyse(i, factor='donut_slice', inspect=False, data_files=None): print('\nRunning analysis for session:') print('\t', PATHS_DESTIN[i]) print('\t', PATHS_SOURCE[i]) parameters = p[i] if not data_files: data_files = get_data_files( PATHS_DESTIN[i], gaze_file_filter=parameters['gaze_file_filter']) info_file = load_yaml_data(data_files[0]) ini_file = load_ini_data(data_files[1]) time_file = load_fpe_timestamps(data_files[2]) all_gaze_data = load_gaze_data(data_files[3]) title = ' - '.join([ '%02d' % i, '%02d' % info_file['feature_degree'], info_file['group'], info_file['nickname'], str(factor) ]) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) ini_data = zip(ini_file['trial'], ini_file['contingency'], ini_file['feature']) trials = get_events_per_trial(ini_data, time_data) responses = get_responses(time_file) button_proportion = analyse_button(trials, responses, title, inspect) features = ini_file['feature'] trial_intervals = get_trial_intervals(trials, uncategorized=True) gaze_rate_per_trial, gaze_rate_mirror = get_gaze_rate_per_trial( trial_intervals, all_gaze_data, factor=factor, inspect=inspect, min_block_size=parameters['min_block_size'], do_correction=parameters['do_correction'], do_remove_outside_screen=parameters['do_remove_outside_screen'], do_remove_outside_session_time=parameters[ 'do_remove_outside_session_time'], do_manual_correction=parameters['do_manual_correction'], do_confidence_threshold=parameters['confidence_threshold']) gaze_proportion = get_relative_gaze_rate(ini_file['feature'], gaze_rate_per_trial, gaze_rate_mirror) # draw.rates([gaze_proportion, []], # title= title, # save= not inspect, # y_label='Looking proportion', # single= True, # first_label= 'feature fp', # y_limit= [-0.1, 1.1], # ) return gaze_proportion, button_proportion, latency(trials)
def analyse_intra_subject(i, factor='donut_slice', inspect=False, data_files=None): print('\nRunning analysis for session:') print('\t', PATHS_DESTIN[i]) print('\t', PATHS_SOURCE[i]) parameters = p[i] if not data_files: data_files = get_data_files(PATHS_DESTIN[i], gaze_file_filter=p[i]['gaze_file_filter']) info_file = load_yaml_data(data_files[0]) fp_ini_file, fn_ini_file = load_ini_data_intrasubject(data_files[1]) time_file = load_fpe_timestamps(data_files[2]) responses = get_responses(time_file) title = ' - '.join( ['%02d' % i, info_file['nickname'], 'square (FP)', str(factor)]) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) fp_ini_data = zip(fp_ini_file['trial'], fp_ini_file['contingency'], fp_ini_file['feature']) fp_trials = get_events_per_trial(fp_ini_data, time_data) fp_button_proportion = analyse_button(fp_trials, responses, title) title = ' - '.join( ['%02d' % i, info_file['nickname'], 'X (FN)', str(factor)]) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) fn_ini_data = zip(fn_ini_file['trial'], fn_ini_file['contingency'], fn_ini_file['feature']) fn_trials = get_events_per_trial(fn_ini_data, time_data) fn_button_proportion = analyse_button(fn_trials, responses, title) all_gaze_data = load_gaze_data(data_files[3]) all_trial_intervals = get_trial_intervals({ **fp_trials, **fn_trials }, uncategorized=True) gaze_rate_per_trial, gaze_rate_mirror = get_gaze_rate_per_trial( all_trial_intervals, all_gaze_data, factor=factor, inspect=False, min_block_size=parameters['min_block_size'], do_correction=parameters['do_correction'], do_remove_outside_screen=parameters['do_remove_outside_screen'], do_remove_outside_session_time=parameters[ 'do_remove_outside_session_time'], do_manual_correction=parameters['do_manual_correction'], do_confidence_threshold=parameters['confidence_threshold']) fp_gaze_rate = get_relative_gaze_rate( fp_ini_file['feature'], gaze_rate_per_trial[fp_ini_file['trial']], gaze_rate_mirror[fp_ini_file['trial']]) fn_gaze_rate = get_relative_gaze_rate( fn_ini_file['feature'], gaze_rate_per_trial[fn_ini_file['trial']], gaze_rate_mirror[fn_ini_file['trial']]) title = ' - '.join( ['%02d' % i, info_file['nickname'], 'square(FP)_X(FN)', str(factor)]) draw.rates( [fp_gaze_rate, fn_gaze_rate], title, save=not inspect, y_label='Proporção média de olhar estímulo distintivo', single=False, first_label='Aspecto Positivo', second_label='Aspecto Negativo', y_limit=[-0.1, 1.1], ) title = ' - '.join([ '%02d' % i, info_file['nickname'], 'square(FP)_X(FN)', str(factor), 'button' ]) draw.rates( [fp_button_proportion, fn_button_proportion], title, save=not inspect, y_label='Proporção média de R durante o S+', single=False, first_label='Aspecto Positivo', second_label='Aspecto Negativo', y_limit=[-0.1, 1.1], ) latencies = (latency(fp_trials), latency(fn_trials)) button = (fp_button_proportion, fn_button_proportion) gaze = (fp_gaze_rate, fn_gaze_rate) return button, gaze, latencies
def analyse_intrasubject(i, inspect=False, data_files=None): parameters = PARAMETERS[i] print('\nRunning analysis for session:') print('\t', PATHS_DESTIN[i]) print('\t', PATHS_SOURCE[i]) if not data_files: data_files = get_data_files(PATHS_DESTIN[i], gaze_file_filter=parameters['gaze_file_filter']) info_file = load_yaml_data(data_files[0]) fp_ini_file, fn_ini_file = load_ini_data_intrasubject(data_files[1]) time_file = load_fpe_timestamps(data_files[2]) all_gaze_data = load_gaze_data(data_files[3]) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) fp_ini_data = zip(fp_ini_file['trial'], fp_ini_file['contingency'], fp_ini_file['feature']) fp_trials = get_events_per_trial(fp_ini_data, time_data) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) fn_ini_data = zip(fn_ini_file['trial'], fn_ini_file['contingency'], fn_ini_file['feature']) fn_trials = get_events_per_trial(fn_ini_data, time_data) fp_positive_intervals, fp_negative_intervals = get_trial_intervals(fp_trials) fn_positive_intervals, fn_negative_intervals = get_trial_intervals(fn_trials) title = ' - '.join(('%02d'%i, str(info_file['feature_degree']), info_file['nickname'], 'FP')) titlea = title + '_fp_positive' titleb = title + '_fp_negative' title = ' - '.join(('%02d'%i, str(info_file['feature_degree']), info_file['nickname'], 'FN')) titlec = title + '_fn_positive' titled = title + '_fn_negative' all_gaze_data = load_gaze_data(data_files[3]) all_trial_intervals = get_trial_intervals({**fp_trials, **fn_trials}, uncategorized=True) all_gaze_data = clean_gaze_data(all_gaze_data, do_remove_outside_session_time=all_trial_intervals, do_correction=parameters['do_correction'], do_remove_outside_screen=parameters['do_remove_outside_screen'], do_manual_correction=parameters['do_manual_correction'], do_confidence_threshold=parameters['confidence_threshold'], min_block_size=parameters['min_block_size'], inspect=False) mask = remove_outside_session_time(all_gaze_data['time'], fp_positive_intervals) fp_positive_gaze_data = all_gaze_data[mask] fp_pdispersion = dispersion(fp_positive_gaze_data, fp_positive_intervals, titlea) mask = remove_outside_session_time(all_gaze_data['time'], fp_negative_intervals) fp_negative_gaze_data = all_gaze_data[mask] fp_ndispersion = dispersion(fp_negative_gaze_data, fp_negative_intervals, titleb) mask = remove_outside_session_time(all_gaze_data['time'], fn_positive_intervals) fn_positive_gaze_data = all_gaze_data[mask] fn_pdispersion = dispersion(fn_positive_gaze_data, fn_positive_intervals, titlec) mask = remove_outside_session_time(all_gaze_data['time'], fn_negative_intervals) fn_negative_gaze_data = all_gaze_data[mask] fn_ndispersion = dispersion(fn_negative_gaze_data, fn_negative_intervals, titled) # title = ' - '.join(('%02d'%i, str(info_file['feature_degree']), info_file['nickname'], 'distinctive')) # draw.rates( # [fp_pdispersion, fn_pdispersion], # title= title+'_pdispersion', # save= not inspect, # y_label='Graus do ângulo de visão (RMS)', # single=False, # first_label='AP', # second_label='AN', # y_limit= [1., 15.] # ) # title = ' - '.join(('%02d'%i, str(info_file['feature_degree']), info_file['nickname'], 'common')) # draw.rates( # [fp_ndispersion, fn_ndispersion], # title= title+'_ndispersion', # save= not inspect, # y_label='Graus do ângulo de visão (RMS)', # single=False, # first_label='AP', # second_label='AN', # y_limit= [1., 15.] # ) # title = ' - '.join(('heat', '%02d'%i, str(info_file['feature_degree']), info_file['nickname'], 'distinctive-common')) # imgs, y_max = custom_heatmap([fp_positive_gaze_data,fn_negative_gaze_data, # fp_negative_gaze_data,fn_positive_gaze_data]) # scale_path = heatmap_scale(size=368., title= title, y_max= y_max) # plot_path = draw.images_four( # imgs, # title=title, # save= not inspect) # draw.join_images(plot_path, scale_path) gaze = (fp_positive_gaze_data, fp_negative_gaze_data, fn_positive_gaze_data, fn_negative_gaze_data) disp = (fp_pdispersion, fp_ndispersion, fn_pdispersion, fn_ndispersion) return gaze, disp
def analyse(i, inspect=False, data_files=None): parameters = PARAMETERS[i] print('\nRunning analysis for session:') print('\t', PATHS_DESTIN[i]) print('\t', PATHS_SOURCE[i]) if not data_files: data_files = get_data_files(PATHS_DESTIN[i], gaze_file_filter=parameters['gaze_file_filter']) info_file = load_yaml_data(data_files[0]) ini_file = load_ini_data(data_files[1]) time_file = load_fpe_timestamps(data_files[2]) all_gaze_data = load_gaze_data(data_files[3]) title = ' - '.join(('%02d'%i, str(info_file['feature_degree']), info_file['nickname'], info_file['group'])) time_data = zip(time_file['time'], time_file['bloc'], time_file['trial'], time_file['event']) ini_data = zip(ini_file['trial'], ini_file['contingency'], ini_file['feature']) trials = get_events_per_trial(ini_data, time_data) positive_intervals, negative_intervals = get_trial_intervals(trials) # trial_intervals = get_trial_intervals(trials, uncategorized=True) titlea = title + '_positive' titleb = title + '_negative' positive_gaze_data = clean_gaze_data(all_gaze_data, do_remove_outside_session_time=positive_intervals, do_correction=parameters['do_correction'], do_remove_outside_screen=parameters['do_remove_outside_screen'], do_manual_correction=parameters['do_manual_correction'], do_confidence_threshold=parameters['confidence_threshold'], min_block_size=parameters['min_block_size'], inspect=False) pdispersion = dispersion(positive_gaze_data, positive_intervals, titlea) negative_gaze_data = clean_gaze_data(all_gaze_data, do_remove_outside_session_time=negative_intervals, do_correction=parameters['do_correction'], do_remove_outside_screen=parameters['do_remove_outside_screen'], do_manual_correction=parameters['do_manual_correction'], do_confidence_threshold=parameters['confidence_threshold'], min_block_size=parameters['min_block_size'], inspect=False) ndispersion = dispersion(negative_gaze_data, negative_intervals, titleb) # draw.rates( # [pdispersion, ndispersion], # title= title+'_dispersion', # save= not inspect, # y_label='2d dispersion (RMS) in deggres of visual angle', # single=False, # first_label='S+', # second_label='S-', # y_limit= [1., 15.] # ) # title = ' - '.join(('heat', '%02d'%i, str(info_file['feature_degree']), info_file['group'], info_file['nickname'], 'S+ S-')) # imgs, y_max = custom_heatmap([positive_gaze_data, negative_gaze_data]) # scale_path = heatmap_scale(size=371., title= title, y_max= y_max) # plot_path = draw.images( # imgs, # (sw, sh), # save=not inspect, # title=title) # draw.join_images(plot_path, scale_path) return (positive_gaze_data, negative_gaze_data), (pdispersion, ndispersion)