Психопия не получает все ответы

Я использую психопию для построения познавательной задачи. У меня есть 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) и информацию о circle_1. Я понятия не имею, если участник попробовал другой круг, прежде чем нажать на круг_1.

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

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 трюк, чтобы записать начало, а не только релиз.

Другие вопросы по тегам