Die Prepare-Run-Strategie
Über
Experimente bestehen in der Regel aus kurzen Intervallen ('Versuche'), während denen Teilnehmer Stimuli wahrnehmen und eine Aufgabe ausführen. Die Zeitsteuerung sollte während eines Versuchs kontrolliert werden, aber einige unvorhersehbare Variation in der Dauer des Intervalls zwischen den Versuchen ist akzeptabel. Daher ist es eine gute Strategie, zeitintensive Aufgaben vor einem Versuch durchzuführen und die während eines Versuchs ausgeführten Operationen auf ein Minimum zu reduzieren.
OpenSesame macht dies, indem jedes Element aus einem sequence-Element zweimal aufgerufen wird. Dies ist die Prepare-Run-Strategie:
- Während der Prepare-Phase haben die Elemente die Möglichkeit, sich vorzubereiten. Zum Beispiel erzeugt ein synth einen Ton (spielt ihn aber nicht ab); und ein sketchpad zeichnet eine Leinwand (zeigt sie aber nicht an).
- Während der Run-Phase tun die Elemente so wenig wie möglich. Zum Beispiel spielt ein synth eine zuvor vorbereitete Ton ab; und ein sketchpad zeigt eine zuvor vorbereitete Leinwand an.
Dies reduziert das Risiko von Timing-Fehlern. Die Prepare-Run-Strategie ist auf der Ebene von sequence-Elementen implementiert, die in der Regel die zeitkritischen Teile eines Experiments enthalten. Das bedeutet, dass vor dem Start einer sequence eine unvorhersehbare zeitliche Streuung vorhanden ist.
Elementspezifische Hinweise
Loop-Elemente
Ein loop-Element wird nicht im Voraus vorbereitet. Es ist wichtig, dies zu berücksichtigen, wenn Sie eine Schleife verwenden, um zeitkritische Teile zu implementieren. Zum Beispiel könnten Sie versucht sein, einen RSVP-Stream mit einem loop-Element wie folgt zu implementieren:
rsvp_loop-Element (4 Zyklen)
- stimulus_element
In dieser Konstruktion wird stimulus_element abwechselnd viermal vorbereitet und ausgeführt, wie folgt:
stimulus_element vorbereiten
stimulus_element ausführen
stimulus_element vorbereiten
stimulus_element ausführen
stimulus_element vorbereiten
stimulus_element ausführen
stimulus_element vorbereiten
stimulus_element ausführen
Daher müssen Sie überprüfen, ob die Vorbereitung von stimulus_element keine Timing-Fehler verursacht.
Sequence-Elemente
Alle Elemente, die Teil einer sequence sind, werden im Voraus vorbereitet. Daher wird die folgende Konstruktion ...
trial_sequence
- fixation_sketchpad
- target_sketchpad
- keyboard_response
- logger
... wie folgt ausgeführt ...
fixation_sketchpad vorbereiten
target_sketchpad vorbereiten
keyboard_response vorbereiten
logger vorbereiten
fixation_sketchpad ausführen
target_sketchpad ausführen
keyboard_response ausführen
logger ausführen
Sketchpad- und Feedback-Elemente
sketchpad- und feedback-Elemente unterscheiden sich darin, wann sie vorbereitet werden. Für sketchpads erfolgt die Vorbereitung während der Prepare-Phase; für feedback-Elemente erfolgt die Vorbereitung erst während der Run-Phase.
Weitere Informationen finden Sie unter:
Synth- und Sampler-Elemente
Bei synth- und sampler-Elementen wird der Ton während der Prepare-Phase erzeugt und vorab geladen.
Inline_script-Elemente
In einem inline_script-Element können Sie wählen, wie Sie die Run- und Prepare-Strategie implementieren möchten. Im Allgemeinen ist es ratsam, die folgenden Richtlinien einzuhalten:
- Zeitintensive, vorbereitende Funktionen erfolgen in der Prepare-Phase. Zum Beispiel das Erstellen von Leinwandobjekten und das Erzeugen von Tönen.
- Eine minimale Menge an Code wird in der Run-Phase verwendet. Zum Beispiel nur das Anzeigen einer zuvor vorbereiteten Leinwand.
Andere Elemente und Plugins
Im Allgemeinen sollten Elemente dem Prinzip folgen, möglichst viel zeitintensive Vorbereitung während der Prepare-Phase durchzuführen und die Run-Phase zu minimieren. Jedes Plugin ist jedoch unterschiedlich implementiert. Wenn Sie sich in einem speziellen Fall unsicher sind, stellen Sie bitte eine Anfrage im Forum.
Bedingte Ausdrücke (run if, show if, break if usw.)
In sequence-Elementen wird der 'Run if'-Zustand im letzten Moment, während der Run-Phase, ausgewertet. Daher können Sie eine Bedingung wie correct == 0
verwenden, die von den Ergebnissen eines keyboard_response-Elements abhängt, das direkt davor aufgerufen wurde. Es ist wichtig zu beachten, dass der 'Run if'-Ausdruck nur für die Run-Phase eines Elements gilt – die Prepare-Phase wird immer ausgeführt.
In coroutines-Elementen wird die 'Ausführen, wenn'-Bedingung während der Prepare-Phase ausgewertet. Daher können die Bedingungen nicht von Ereignissen abhängen, die während der Ausführung der coroutines auftreten.
In sketchpad-Elementen wird die 'Anzeigen, wenn'-Bedingung während der Prepare-Phase ausgewertet, wenn die Leinwand erstellt wird. In feedback-Elementen wird die 'Anzeigen, wenn'-Bedingung während der Run-Phase ausgewertet (weil die Leinwand nur in der Run-Phase erstellt wird).