Эксперимент не записывает время реакции во время цикла

Я использую комбинацию кодера и построителя, и, похоже, у меня проблема со сбором времени отклика на нажатия клавиш. Я относительно не знаком с кодированием. Я все еще на стадии тестирования эксперимента, и он еще не в своей окончательной форме. Вкратце, предполагается, что эксперимент представляет список слов в случайном порядке, участники получают инструкции для теста распознавания слов, а затем снова видят представленный список, нажимая y или n для того, чтобы увидеть предыдущие слова.

У меня есть 3 подпрограммы по порядку: пробная версия, инструкции по отзыву и слова по отзыву. Trial и Recallwords имеют один итерационный цикл вокруг них. Studylista — это список, содержащий 4 слова, которые я ввел на вкладке «Начало эксперимента» в кодере под процедурой пробной версии. Для отзывов на вкладке «Начало подпрограммы» у меня в кодере:

    studylista = ['balls','dingy','bear','shoe'];    
    import random
    random.shuffle(studylista)
    studylista

    import time
    for i in studylista:
        text.setText(i)  # Prepare stim
        text.pos = (0, 0)
        text.draw()  # Draw to buffer
        win.flip()  # Display on monitor
        response = event.getKeys(timeStamped=True)
        time.sleep(5.0)

Для той же процедуры отзыва слов у меня также есть ключевой элемент ответа в построителе, установленный для хранения последнего ключа. Программа работает корректно в том смысле, что все отображается. Он не распечатывает файл csv, который включает ответы во время цикла for, описанного выше, но выдает его в текстовом файле. Я также хочу иметь время отклика от начала слова, представленного в цикле for, до момента, когда участник нажимает клавишу, записанную где-то в файле, о чем, как я полагал, позаботится временная метка. Спасибо.

Отредактировано, чтобы добавить запрошенную информацию о Studylista.


person Anchises    schedule 23.09.2015    source источник


Ответы (1)


Ваш существующий код прерывает цикл рисования Builder: Builder принципиально работает в непрерывном цикле, который обновляет стимулы, собирает нажатия клавиш и т. д. с той же частотой, что и обновление экрана (например, 60 Гц). Таким образом, любой код, который вы помещаете в компонент кода (если только он не выполняется в периоды в начале или в конце эксперимента), должен умещаться в пределах одного периода обновления экрана (например, ‹ 16,7 мс). Таким образом, пауза в 5 секунд вызовет у Builder всевозможные проблемы.

Кроме того, вы перетасовываете список на каждой итерации, а это означает, что вы, вероятно, получите дубликат представления слов/отсутствуют некоторые слова. Так что это должно произойти только один раз. Вы также собираете нажатия клавиш в коде, которые будут конфликтовать с компонентом графической клавиатуры и должны быть явно сохранены в данных.

Так что не сражайтесь со Строителем, пусть он сделает за вас большую часть тяжелой работы. Укажите текстовый стимул, который длится 5 секунд, и используйте только компонент клавиатуры для сбора ответов (которые затем будут автоматически сохранены в вашем файле данных).

Это позволяет вам просто иметь этот минималистский код:

# what iteration is this? (0 through 3)
wordNumber = yourLoopName.thisN # insert the actual loop name here

# only on the first iteration, shuffle the words:
if wordNumber == 0:
    shuffle(studylista) 

# on each iteration, get current word and update the stimulus with it:
yourTextStimulus.setText(studylista[wordNumber])
person Michael MacAskill    schedule 24.09.2015
comment
Большой! Получил это для работы с презентациями, посвященными изучению и признанию, и теперь это дает мне время отклика. Спасибо. - person Anchises; 24.09.2015