/* Iconic memory: Whole and partial report procedure for a 2x4-matrix of letters. This is a replication of Sperling's (1960) experiment 3. 2 rows of 4 letters each are presented for 60 ms. For partial report the letters are followed by an optical cue which marks the single row to report. The task is to report as many letters as possible. Response input is done with the keyboard. */
Experiment(){
Context(){
AssignmentGroup(){
// The session will be set in the command line
SessionGroup = 1;
ExperimentName = lang2("Partial Report from Iconic Memory (Sperling, 1960)", "Teilbericht aus dem Ikonischen Gedächtnis (Sperling, 1960)");
JavaClassName = "IconicMemoryExperiment.java";
DataFileTrialFormat = "%SubjectCode% %TrialCounter% %SessionGroup% %Trial.CuedLetterMatrix.CuePosition% %Trial.LetterMatrixResponse.NumberCorrect%";
TrialFactor = 20;
SubjectCode = "pxlab";
RandomizeTrials = 1;
new IntroWhole = lang2("Full Report from Iconic Memory\n \nIf the cross appears and you are ready.\nWe show you a matrix of letters (consonants).\n After that, please try to reconstruct the matrix.\n Use the cursor keys to move the cursor.\n Please enter for every position in the matrix a letter, even then if you are not sure!\n The return-key will terminate your response.\n \nPress any key to start!", ["Experiment zum sensorischen Speicher: Ganzbericht", " ", "Wenn die Marke erscheint und Sie bereit sind, dann drücken Sie bitte eine Taste.", "Darauf erscheint eine Buchstabenmatrix aus Konsonanten.", "Anschließend geben Sie für jede Position möglichst den korrekten Buchstaben ein.", "Mit den Cursortasten können Sie den Cursor bewegen.", "Sie sollen an jeder Position ein Zeichen eingeben, auch wenn Sie unsicher sind.", "Die Eingabe wird mit der Return-Taste abgeschlossen.", " ", "Zum Starten bitte eine beliebige Taste drücken!"]);
new IntroPartial = lang2("Partial Report from Iconic Memory\n \nPress any key, if the cross appears and you are ready.\nWe show you a matrix of letters (consonants) and after a short time, a row will be marked.\nAfter that, please try to reconstruct the row\n Use the cursor keys to move the cursor.\n Please enter for every position in the row a letter, even then if you are not sure!\n The Return-key will terminate your response.\n \nPress any key to start! ", ["Experiment zum sensorischen Speicher: Teilbericht", " ", "Wenn die Marke erscheint und Sie bereit sind, dann drücken Sie bitte eine Taste.", "Darauf erscheint eine Buchstabenmatrix aus Konsonanten und kurz danach wird eine der beiden Zeilen markiert.", "Anschließend geben Sie für jede Position der markierten Zeile möglichst den korrekten Buchstaben ein.", "Mit den Cursortasten können Sie den Cursor bewegen.", "Sie sollen an jeder Position ein Zeichen eingeben, auch wenn Sie unsicher sind.", "Die Eingabe wird mit der Return-Taste abgeschlossen.", " ", "Zum Starten bitte eine beliebige Taste drücken!"]);
}
Session( Trial.CuedLetterMatrix.CueSize, Trial.LetterMatrixResponse.ResponseRows, Trial.LetterMatrixResponse.FirstResponseRow, Message.Text, SessionEnd.Message.Text){
Message(){
FontSize = 26;
Alignment = 0;
Timer = de.pxlab.pxl.TimerCodes.RELEASE_RESPONSE_TIMER;
}
}
SessionEnd(){
Message(){
Duration = 2000;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
}
}
Block( StoreData){
Message(){
FontSize = 36;
Text = lang2("Press any key to start!", "Zum Weitermachen\nbitte eine Taste drücken");
Timer = de.pxlab.pxl.TimerCodes.RELEASE_RESPONSE_TIMER;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 1000;
}
}
BlockEnd(){
Message(){
FontSize = 36;
Text = "P A U S E";
Duration = 1000;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
}
}
Trial( TrialCounter, CuedLetterMatrix.Letters, LetterMatrixResponse.Letters, CuedLetterMatrix.CuePosition, LetterMatrixResponse.NumberCorrect){
FixationMark(){
Timer = de.pxlab.pxl.TimerCodes.RELEASE_RESPONSE_TIMER;
Size = 20;
LineWidth = 3;
}
ClearScreen:wait1(){
Duration = 500;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
}
CuedLetterMatrix(){
// Letter duration
Duration = 60;
// SOA between letter offset and cue onset
CueDelayDuration = 20;
// Duration of cue
CueDuration = 280;
NumberOfRows = 2;
NumberOfColumns = 4;
Width = 300;
Height = 240;
FontSize = 80;
LocationY = -30;
// Session parameter: CueSize = 0;
CueOrientation = 1;
CuePosition = 0;
}
ClearScreen:wait2(){
Duration = 300;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
}
LetterMatrixResponse(){
NumberOfRows = 2;
NumberOfColumns = 4;
Width = 300;
Height = 240;
FontSize = 80;
LocationY = -30;
CorrectLetters = Trial.CuedLetterMatrix.Letters;
// Session parameter: FirstResponseRow = CuedLetterMatrix.CuePosition;
FirstResponseColumn = 0;
// Session parameter: ResponseRows = 1;
ResponseColumns = 4;
}
LetterMatrix(){
Letters = Trial.CuedLetterMatrix.Letters;
NumberOfRows = 2;
NumberOfColumns = 4;
Width = 300;
Height = 240;
FontSize = 80;
LocationY = -30;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 2000;
}
Feedback(){
Text = "%Trial.LetterMatrixResponse.NumberCorrect% richtige";
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 1200;
}
ClearScreen:close(){
Duration = 300;
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
}
}
// Command line assignments
AssignmentGroup();
}
Procedure(){
/* The first session does partial report. */
Session( 30, 1, Trial.CuedLetterMatrix.CuePosition, IntroPartial, "Ende des ersten Teils"){
Block( 0){
Trial( ?, ?, ?, 0, ?);
Trial( ?, ?, ?, 1, ?);
}
Block( 1){
Trial( ?, ?, ?, 0, ?);
Trial( ?, ?, ?, 0, ?);
Trial( ?, ?, ?, 0, ?);
Trial( ?, ?, ?, 1, ?);
Trial( ?, ?, ?, 1, ?);
Trial( ?, ?, ?, 1, ?);
}
}
/* The second session does full report. */
Session( 0, 2, 0, IntroWhole, "Ende"){
Block( 0){
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
}
Block( 1){
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
Trial( ?, ?, ?, ?, ?);
}
}
}
}