def test_DGC_blank_block(self): dgc = sr.DriftingGratingCircle(monitor=self.monitor, indicator=self.indicator, background=0., coordinate='degree', center=(10., 90.), sf_list=(0.02,), tf_list=(4.0,), dire_list=(45.,), con_list=(0.8,), radius_list=(20.,), block_dur=0.5, midgap_dur=0.1, iteration=2, pregap_dur=0.2, postgap_dur=0.3, is_blank_block=True) frames = dgc.generate_frames() # print('\n'.join([str(f) for f in frames])) assert (len(frames) == 168) for frame in frames: assert (len(frame) == 9) _ = dgc._generate_frames_for_index_display_condition((0., 0., 0., 0., 0.)) frames_unique_blank, index_to_display_blank = _ # print('\nDGC frames_unique_blank:') # print('\n'.join([str(f) for f in frames_unique_blank])) # print('\nDGC index_to_display_blank:') # print(index_to_display_blank) assert (frames_unique_blank == ((1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0), (1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0))) assert (index_to_display_blank == [0] + [1] * 29) frames_unique, condi_ind_in_frames_unique = dgc._generate_frames_unique_and_condi_ind_dict() # print('\nDGC frames_unique:') # print('\n'.join([str(f) for f in frames_unique])) # print('\nDGC condi_ind_in_frames_unique:') # print(condi_ind_in_frames_unique) assert (frames_unique[-1] == (1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)) assert (frames_unique[-2] == (1, 1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)) assert (condi_ind_in_frames_unique['condi_0001'] == [16] + [17] * 29)
def test_DGC_generate_frames_unique_and_condi_ind_dict(self): dgc = sr.DriftingGratingCircle(monitor=self.monitor, indicator=self.indicator, block_dur=2., sf_list=(0.04, ), tf_list=( 1., 3.0, ), dire_list=(45., 90.), con_list=(0.8, ), radius_list=(10., ), midgap_dur=0.1, pregap_dur=0.5, postgap_dur=0.2, iteration=2, is_blank_block=False) frames_unique, condi_ind_in_frames_unique = dgc._generate_frames_unique_and_condi_ind_dict( ) assert (len(condi_ind_in_frames_unique) == 4) assert (set(condi_ind_in_frames_unique.keys()) == { 'condi_0000', 'condi_0001', 'condi_0002', 'condi_0003' }) assert (len(frames_unique) == 161) for frame in frames_unique: assert (len(frame) == 9) import numpy as np for cond, ind in list(condi_ind_in_frames_unique.items()): assert (len(ind) == 120) assert (ind[0] % 20 == 1) assert (len(np.unique(ind)) == 60 or len(np.unique(ind)) == 20)
def test_DGC_generate_frames_for_index_display_condition(self): dgc = sr.DriftingGratingCircle(monitor=self.monitor, indicator=self.indicator, block_dur=2., sf_list=(0.04, ), tf_list=(2.0, ), dire_list=(45., ), con_list=(0.8, ), radius_list=(10., ), midgap_dur=0.1, pregap_dur=0.5, postgap_dur=0.2, iteration=2, is_blank_block=False) conditions = dgc._generate_all_conditions() # print len(conditions) assert (len(conditions) == 1) frames_unique_condi, index_to_display_condi = dgc._generate_frames_for_index_display_condition( conditions[0]) assert (index_to_display_condi == list(range(30)) * 4) assert (max(index_to_display_condi) == len(frames_unique_condi) - 1) # print '\n'.join([str(f) for f in frames_unique_condi]) assert ([f[0] for f in frames_unique_condi] == [1] * 30) assert (frames_unique_condi[0][1] == 1) assert (frames_unique_condi[0][8] == 1.) assert ([f[1] for f in frames_unique_condi[1:]] == [0] * 29) assert ([f[8] for f in frames_unique_condi[1:]] == [0.] * 29)
def test_DGC_generate_display_index(self): dgc = sr.DriftingGratingCircle(monitor=self.monitor, indicator=self.indicator, block_dur=2., sf_list=(0.04,), tf_list=(1., 3.0,), dire_list=(45., 90.), con_list=(0.8,), radius_list=(10.,), midgap_dur=0.1, pregap_dur=0.5, postgap_dur=0.2, iteration=2) frames_unique, index_to_display = dgc._generate_display_index() # print '\n'.join([str(f) for f in frames_unique]) assert (len(frames_unique) == 161) assert (max(index_to_display) == len(frames_unique) - 1) # print len(index_to_display) assert (len(index_to_display) == 1044)
def test_DGC_generate_frames(self): dgc = sr.DriftingGratingCircle(monitor=self.monitor, indicator=self.indicator, background=0., coordinate='degree', center=(10., 90.), sf_list=(0.02, 0.04), tf_list=(1.0, ), dire_list=(45., ), con_list=(0.8, ), radius_list=(20., ), block_dur=2., midgap_dur=1., iteration=2, pregap_dur=1.5, postgap_dur=3., is_blank_block=False) frames = dgc.generate_frames() assert (len(frames) == 930) assert ([f[0] for f in frames[0:90]] == [0] * 90) assert ([f[0] for f in frames[210:270]] == [0] * 60) assert ([f[0] for f in frames[390:450]] == [0] * 60) assert ([f[0] for f in frames[570:630]] == [0] * 60) assert ([f[0] for f in frames[750:930]] == [0] * 180) assert ([f[8] for f in frames[0:90]] == [-1.] * 90) assert ([f[8] for f in frames[210:270]] == [-1.] * 60) assert ([f[8] for f in frames[390:450]] == [-1.] * 60) assert ([f[8] for f in frames[570:630]] == [-1.] * 60) assert ([f[8] for f in frames[750:930]] == [-1.] * 180) assert ([f[0] for f in frames[90:210]] == [1] * 120) assert ([f[0] for f in frames[270:390]] == [1] * 120) assert ([f[0] for f in frames[450:570]] == [1] * 120) assert ([f[0] for f in frames[630:750]] == [1] * 120) assert (frames[90][8] == 1.) assert ([f[8] for f in frames[91:150]] == [0.] * 59) assert (frames[150][8] == 1.) assert ([f[8] for f in frames[151:210]] == [0.] * 59) assert (frames[270][8] == 1.) assert ([f[8] for f in frames[271:330]] == [0.] * 59) assert (frames[330][8] == 1.) assert ([f[8] for f in frames[331:390]] == [0.] * 59) assert (frames[450][8] == 1.) assert ([f[8] for f in frames[451:510]] == [0.] * 59) assert (frames[510][8] == 1.) assert ([f[8] for f in frames[511:570]] == [0.] * 59) assert (frames[630][8] == 1.) assert ([f[8] for f in frames[631:690]] == [0.] * 59) assert (frames[690][8] == 1.) assert ([f[8] for f in frames[691:750]] == [0.] * 59)
lsn = stim.LocallySparseNoise(monitor=mon, indicator=ind, pregap_dur=pregap_dur, postgap_dur=postgap_dur, coordinate=coordinate, background=background, subregion=lsn_subregion, grid_space=lsn_grid_space, sign=lsn_sign, probe_size=lsn_probe_size, probe_orientation=lsn_probe_orientation, probe_frame_num=lsn_probe_frame_num, iteration=lsn_iteration, is_include_edge=lsn_is_include_edge, min_distance=lsn_min_distance, repeat=lsn_repeat) # ================================================================================= # ======================= Drifting Grating Circle ================================= dgc = stim.DriftingGratingCircle(monitor=mon, indicator=ind, pregap_dur=pregap_dur, postgap_dur=postgap_dur, coordinate=coordinate, background=background, center=dgc_center, sf_list=dgc_sf_list, tf_list=dgc_tf_list, dire_list=dgc_dire_list, con_list=dgc_con_list, radius_list=dgc_radius_list, block_dur=dgc_block_dur, midgap_dur=dgc_midgap_dur, iteration=dgc_iteration, is_smooth_edge=dgc_is_smooth_edge, smooth_width_ratio=dgc_smooth_width_ratio, smooth_func=dgc_smooth_func, is_blank_block=dgc_is_blank_block) # ================================================================================= # ======================= Static Grating Cricle =================================== sgc = stim.StaticGratingCircle(monitor=mon, indicator=ind, pregap_dur=pregap_dur, postgap_dur=postgap_dur, coordinate=coordinate, background=background, center=sgc_center, sf_list=sgc_sf_list, ori_list=sgc_ori_list, con_list=sgc_con_list, radius_list=sgc_radius_list, phase_list=sgc_phase_list, display_dur=sgc_display_dur, midgap_dur=sgc_midgap_dur, iteration=sgc_iteration, is_smooth_edge=sgc_is_smooth_edge,
# -*- coding: utf-8 -*- """ the minimum script to run 10 seconds of black screen """ import matplotlib.pyplot as plt import retinotopic_mapping.StimulusRoutines as stim from retinotopic_mapping.MonitorSetup import Monitor, Indicator from retinotopic_mapping.DisplayStimulus import DisplaySequence # Initialize Monitor object mon = Monitor(resolution=(768, 1360), dis=15., mon_width_cm=52., mon_height_cm=32.) ind = Indicator(mon) ds = DisplaySequence(log_dir='C:/data', is_by_index=True, is_save_sequence=True) dgc = stim.DriftingGratingCircle(monitor=mon, indicator=ind, background=0., coordinate='degree', center=(10., 90.), sf_list=(0.02,), tf_list=(4.0, 2.0), dire_list=(45.,), con_list=(0.8,), radius_list=(20.,), block_dur=2., midgap_dur=1., iteration=3, pregap_dur=2., postgap_dur=2., is_blank_block=True) ds.set_stim(dgc) ds.trigger_display() plt.show()
# creating a monitor object to display the indicator on (since we don' use it) mon_bin = Monitor(resolution=(0, 0), dis=15., mon_width_cm=52., mon_height_cm=32.) ind = Indicator(mon_bin) ks = stim.DriftingGratingCircle( mon, ind, radius_list=[50], dire_list=[0, 45, 90, 135, 180, 225, 270, 315], pregap_dur=3, postgap_dur=2, is_smooth_edge=False, block_dur=5, midgap_dur=5, center=(0., 60.), sf_list=[0.05], tf_list=[0.8], con_list=[1], iteration=5, is_blank_block=False, sqr=False) ds = DisplaySequence(log_dir="/data", is_by_index=True, display_screen=0, is_sync_pulse_LJ=False) ds.set_stim(ks) ds.trigger_display(fullscr=True)