Psychopy не получает все ответы

Я использую психопсию для построения когнитивной задачи. У меня на экране 5 кругов и участнику нужно нажать на хороший кружок. Мой код:

if mouse.isPressedIn(cercle_1):
    continueRoutine = False
    # save data if you like:
    thisExp.addData('correct', 1)
    thisExp.addData('RT', t)

elif mouse.isPressedIn(cercle_2):
    # save data if you like:
    thisExp.addData('correct', 0)
    thisExp.addData('RT', t)
    continueRoutine = True
elif mouse.isPressedIn(cercle_3):
    # save data if you like:
    thisExp.addData('correct', 0)
    thisExp.addData('RT', t)
    continueRoutine = True
elif mouse.isPressedIn(cercle_4):
    # save data if you like:
    thisExp.addData('correct', 0)
    thisExp.addData('RT', t)
    continueRoutine = True

elif mouse.isPressedIn(cercle_5):
    # save data if you like:
    thisExp.addData('correct', 0)
    thisExp.addData('RT', t)
    continueRoutine = True

Проблема в том, что мой файл данных содержит только время отклика (RT) и информацию об окружности_1. Я бы понятия не имел, пробовал ли участник другой круг, прежде чем нажимать на круг_1.

Вопрос: Как я могу иметь в своем CSV-файле информацию обо всех случаях, когда участник нажимал кнопку мыши. Возможно, перед нажатием cercle_1 он нажимал cercle_3. Сейчас у меня есть только то, сколько времени потребовалось, чтобы получить правильный ответ.


person bim1    schedule 03.01.2018    source источник
comment
Я вижу проблему, но какой конкретный вопрос вы задаете?   -  person Mad Physicist    schedule 03.01.2018
comment
Как посмотреть информацию о том, сколько раз участник нажимал кнопку мыши   -  person bim1    schedule 04.01.2018
comment
Пожалуйста, отредактируйте это в своем вопросе.   -  person Mad Physicist    schedule 04.01.2018
comment
Кстати, это можно было бы легко переписать как гораздо короче и легче читать цикл, но это уже другой вопрос.   -  person Mad Physicist    schedule 04.01.2018


Ответы (1)


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

Запишите количество неправильных ответов

Создайте столбец (например, n_wrong) и подсчитайте количество ответов, отличных от круга_1. В Начать процедуру добавьте

n_wrong = 0

Затем в каждом кадре добавьте:

if mouse.isPressedIn(cercle_1):
    thisExp.addData('correct', 1)
    thisExp.addData('RT', t)
    continueRoutine = False

elif mouse.isPressedIn(cercle_2) or mouse.isPressedIn(cercle_3) or mouse.isPressedIn(cercle_4) or mouse.isPressedIn(cercle_5):
    thisExp.addData('correct', 0)
    thisExp.addData('RT', t)
    n_wrong += 1  # One more error recorded!

    # Now wait until the mouse release to prevent recording 60 wrong clicks per second!
    while any(mouse.getPressed()):
        pass

Затем в разделе Завершить процедуру добавьте:

thisExp.addData('n_wrong', n_wrong)

Запишите, какие круги были нажаты

Другой - иметь столбец для каждого круга и перемещать их из «ненажатых» в «нажатые» при нажатии. Тогда столбец cercle1 будет соответствовать тому, что вы сейчас называете столбцом correct. Итак, в разделе начать процедуру:

# Mark all non-target cirlces as unpressed
thisExp.addData('cercle1', 0)
thisExp.addData('cercle2', 0)
thisExp.addData('cercle3', 0)
thisExp.addData('cercle4', 0)
thisExp.addData('cercle5', 0)

Затем под каждым кадром я бы сделал следующее:

if mouse.isPressedIn(cercle_1):
    thisExp.addData('cercle1', 1)
    continueRoutine = False
if mouse.isPressedIn(cercle_2):
    thisExp.addData('cercle2', 1)
if mouse.isPressedIn(cercle_3):
    thisExp.addData('cercle3', 1)
if mouse.isPressedIn(cercle_4):
    thisExp.addData('cercle4', 1)
if mouse.isPressedIn(cercle_5):
    thisExp.addData('cercle5', 1)

Последний подход можно расширить, добавив время реакции, добавив столбцы с названием cercle1_rt и т. д., но тогда вам также нужно будет проделать трюк с while any(mouse.getPressed()): pass, чтобы записать начало, а не только освобождение.

person Jonas Lindeløv    schedule 03.01.2018
comment
Благодарность! но мой столбец «n_wrong» пуст, даже если я знаю, что сделал ошибку? Пишет, что я нажал cercle2, но все равно пишет, что ошибок нет.. - person bim1; 04.01.2018
comment
Странно, здесь работает правильно. Вы уверены, что вставили код на правильные вкладки? И что вы использовали настоящие названия стимулов рутины? - person Jonas Lindeløv; 05.01.2018
comment
это странно, потому что, если я напишу n_wrong = 5 в процедуре начала, в конце в моем csv я все равно получу пустой столбец - person bim1; 05.01.2018
comment
У вас много строк или только одна? У меня есть только одна строка, появляющаяся в моем csv. Если я нажму cercle_2, а затем cercle_1, я получу 1 в cercle1 и 1 в cercle2. Но все равно у моего n_wrong есть пустая ячейка. - person bim1; 05.01.2018
comment
Я получаю одну строку для каждого испытания. Если я установлю n_wrong=5, а затем нажму cercle_2 7 раз, пробная версия покажет 12 в n_wrong (5+7). Если установка значения n_wrong не переносит это в ваши данные, вы должны либо переопределить n_wrong равным нулю, либо забыли сделать addData для n_wrong. Ваш ответ указывает на то, что вы использовали оба решения вместе. Я предполагаю, что это возможно, но попробуйте просто сделать один, чтобы упростить отладку. - person Jonas Lindeløv; 07.01.2018