--- API: 2.1 OpenSesame: 3.2.1 Platform: nt --- set width 1024 set uniform_coordinates yes set title "FixCheck-relative_coor_inline_script_(einheitlich)" set subject_parity even set subject_nr 0 set start experiment set sound_sample_size -16 set sound_freq 48000 set sound_channels 2 set sound_buf_size 1024 set sampler_backend legacy set round_decimals 2 set mouse_backend psycho set keyboard_backend psycho set height 768 set fullscreen no set form_clicks no set foreground black set font_underline no set font_size 18 set font_italic no set font_family mono set font_bold no set experiment_path "\\\\samba.psychologie.uni-kiel.de\\wakolab\\SHK\\#Code" set disable_garbage_collection yes set description "The main experiment item" set coordinates uniform set compensation 0 set color_backend psycho set clock_backend psycho set canvas_backend psycho set background grey define sequence experiment set flush_keyboard yes set description "Führt mehrere Items nacheinander aus" run pygaze_init always run fixation_check_relative always define inline_script fixation_check_relative set description "Executes Python code" ___run__ """ Pauline Gerschwitz und Christina Hübers - 04.05.18 für relative Koordinaten FixCheck: Fixationspunkt wird angezeigt, 600 ms um Fixationspunkt zu fixieren dann startet ein Timer und die Fixationen werden überprüft. - erfolgreich: im Zeitfenster von 500 ms wird der Punkt für 200 ms fixiert - nicht erfolgreich: keine Fixation auf Punkt oder > 200 ms Insgesamt 3 Versuche, um FixCheck zu bestehen. Bei Erfolg wird das Experiment fortgesetzt. Bei Misserfolg folgt eine erneute Kalibrierung und dann wird das Experiment fortgesetzt. Gültige Fixation auf Fixationspunkt: innerhalb eines 1.24° × 1.24° Kreises Timing: OpenSesame rät stets 5 ms von gewünschter Zeit abzuziehen In OS Einstellungen einheitliche Koordinaten eingeschaltet, damit auch im inline script ein relatives Koordinatensystem (RK; 0/0 in der Mitte; wie im OpenSesame sketchpad) Siehe \wakolab\SHK\#Docs\OpenSesame_absolute_vs_relative_Koordinaten.docx !!! Wichtige Einstellungen unter "Vorbereiten" !!! UPDATE 17.06.20: Einstellungen ob einheitliche Koordinaten scheint nicht mehr möglich / notwendig. Nun automatisch nicht-einheitliche Koordinaten (absolute Koordinaten im inline script / RK im sketchpad). Allerdings ist diese Änderung noch nicht durch OpenSesame dokumentiert. Version: OpenSesame 3.3.2 Lentiform Loewenfeld """ eyetracker.start_recording() while done == 0 and chance < maxchance: #solange wie nicht erfolgreich und noch Versuche verfügbar c.show() # blendet Fixdot ein self.sleep(595) # wartet 600 ms chance = chance + 1 t_end = clock.time() + 495 #setzt Timer auf 500 ms #solange Zeit nicht abgelaufen / nicht erfolgreich: while clock.time() < t_end and done == 0: # ziehe neuestes Sample der Blickpositionen (Default: linkes Auge!): check = eyetracker.sample() x = check[0] - var.width / 2 #x-Koordinate y = check[1] - var.height / 2 #y-Koordinate if x**2 + y**2 < pixel**2: #falls Blickposition x/y im Kreis liegt: done = 1 t_fix = clock.time() + 195 #setze Timer auf 200 ms #solange Zeit nicht abgelaufen / Fixation auf Fixdot anhält: while clock.time() < t_fix and done == 1: check = eyetracker.sample() x = check[0] - var.width / 2 y = check[1] - var.height / 2 #falls Blickposition außerhalb des Kreises: if (x**2 + y**2) > pixel**2: done = 0 # Nicht erfolgreich, aber noch weitere Versuche verfügbar: if done == 0 and chance < maxchance: new.show() #blendet Fixdot aus self.sleep(1195) #wartet 1200 ms eyetracker.stop_recording() #auch dritte Chance vertan - Kalibrierung startet: if done == 0 and chance == maxchance: exp.pygaze_eyetracker.log("new calibration") #Botschaft für Log Datei eyetracker.calibrate() __end__ ___prepare__ from math import atan2, degrees """ Christina Hübers 17.06.2020: Bereitet Canvases vor. "Note that it is generally faster to use a different canvas for each experimental display than to use a single canvas and repeatedly clear and redraw it." (OpenSesame Documenation d. Canvas Funktionen: https://osdoc.cogsci.nl/3.3/manual/python/canvas/) !!! Die Variablen h, d, r, degrees_circle müssen an Situation angepasst werden !!! """ # Zunächst: Berechnung Radius d. Kreises um Fixdot (1.24 x 1.24 Grad Sehwinkel) in Pixel # ACHTUNG wenn experimentelle Auflösung nicht der Standard-Auflösung d. Monitors entspricht / nicht der gesamte Monitor genutzt wird h = 26.8 # (genutzte) Monitorhöhe (cm) d = 60 # Distanz zwischen Monitor und Proband (cm) r = 768 # (genutzte) vertikale Auflösung des Monitors degrees_circle = 1.24 # Radius d. Kreises um Fixationspunkt deg_per_px = degrees(atan2(.5*h, d)) / (.5*r) # Grad Sehwinkel pro Pixel # Calculate the size of the stimulus in degrees pixel = degrees_circle / deg_per_px # so groß ist der Kreis c = Canvas() # Canvas mit Fixationspunkt new = Canvas() # Canvas ohne Fixationspunkt done = 0 # Boolean - 0: noch keine gültige Fixation auf FixDot / nicht erfolgreich; 1: Fixation auf Fixdot detektiert => erfolgreich chance = 0 # Zähler der Versuche maxchance = 3 #maximale "Chancen" FixCheck zu bestehen c.fixdot(0, 0, style='large-open', color='black') # Canvas mit Fixdot __end__ define pygaze_init pygaze_init set tracker_type "Advanced dummy (mouse simulation)" set tobiiglasses_udpport 49152 set tobiiglasses_address "192.168.71.50" set smi_send_port 4444 set smi_recv_port 5555 set smi_ip "127.0.0.1" set sacc_vel_thr 35 set sacc_acc_thr 9500 set eyelink_pupil_size_mode area set eyelink_force_drift_correct yes set description "Initialize and calibrate eye tracker" set calibrate yes set calbeep yes set alea_api_key "Contact Alea for an API key" set alea_animated_calibration no set _logfile automatic