5from pygaze
import libscreen, liblog, libinput, eyetracker
12disp = libscreen.Display()
15tracker = eyetracker.EyeTracker(disp)
18keyboard = libinput.Keyboard(keylist=[
'space',
'escape'], timeout=
None)
22log.write([
"trialnr",
"trialtype",
"targetside",
"gaze_endpos",
"latency",
"correct"])
25SCREEN_WIDTH, SCREEN_HEIGHT = 1920, 1800
26CENTER = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)
27CENTER1 = (constants.DISPSIZE[0] // 2, constants.DISPSIZE[1] // 2)
33vertical_offset = random.choice([386, -386])
36left_pos = (CENTER[0] - TARGET_OFFSET, CENTER[1] + vertical_offset)
37right_pos = (CENTER[0] + TARGET_OFFSET, CENTER[1] + vertical_offset)
40inscreen = libscreen.Screen()
42 text=
"Pulsa la tecla ESPACIO para comenzar.",
45 colour=(255, 255, 255),
49fixscreen = libscreen.Screen()
50fixscreen.draw_fixation(fixtype=
'cross', colour=(255, 255, 255), pw=2)
54 'PS': libscreen.Screen(),
55 'AS': libscreen.Screen(),
56 'NoGo': libscreen.Screen(),
58signal_screens[
'PS'].draw_circle(colour=(0, 255, 0), pos=CENTER, r=50)
59signal_screens[
'AS'].draw_circle(colour=(255, 0, 0), pos=CENTER, r=50)
60signal_screens[
'NoGo'].draw_circle(colour=(255, 165, 0), pos=CENTER, r=50)
64 True: libscreen.Screen(),
65 False: libscreen.Screen(),
67feedbackscreens[
True].draw_text(text=
"¡Correcto!", fontsize=40, pos=CENTER, colour=(0, 255, 0))
68feedbackscreens[
False].draw_text(text=
"Incorrecto", fontsize=40, pos=CENTER, colour=(255, 0, 0))
78for block
in range(1, max_blocks + 1):
81 trials = [
'PS',
'AS',
'NoGo']
82 random.shuffle(trials)
84 for trialnr, trialtype
in enumerate(trials, 1):
92 disp.fill(signal_screens[trialtype])
97 targetside = random.choice([
'left',
'right'])
98 target_pos = left_pos
if targetside ==
'left' else right_pos
99 nontarget_pos = right_pos
if targetside ==
'left' else left_pos
102 dualsim_screen = libscreen.Screen()
105 dualsim_screen.draw_circle(colour=(255, 255, 255), pos=target_pos, r=50)
108 dualsim_screen.draw_circle(colour=(255, 255, 255), pos=nontarget_pos, r=60)
109 dualsim_screen.draw_circle(colour=(0, 0, 0), pos=nontarget_pos, r=40)
110 dualsim_screen.draw_circle(colour=(255, 255, 255), pos=nontarget_pos, r=20)
113 disp.fill(dualsim_screen)
117 tracker.start_recording()
120 tracker.stop_recording()
123 sample = tracker.sample()
124 endpos = sample[:2]
if sample
else (CENTER[0], CENTER[1])
127 latency = time.time() - t0
130 key_pressed = keyboard.get_key()
131 if key_pressed ==
'escape':
139 return ((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2) ** 0.5
145 if trialtype ==
'PS':
146 correct = dist_target < dist_nontarget
147 elif trialtype ==
'AS':
148 correct = dist_nontarget < dist_target
149 elif trialtype ==
'NoGo':
150 correct = dist_target > 150
and dist_nontarget > 150
153 disp.fill(feedbackscreens[correct])
158 log.write([trialnr, trialtype, targetside, endpos, latency, correct])