время регистрации психопи, когда участник перестал двигать курсор

Я использую рейтинговую шкалу. Участники используют клавиши «t» и «b» для перемещения курсора по шкале. Каждое испытание в настоящее время длится 6 секунд. Если участник перестает нажимать «t» или «b» до истечения 6 секунд, я хочу зарегистрировать время последнего нажатия клавиши в своем файле журнала. Однако я не уверен, как проверить, какое нажатие клавиши является последним. Я думал о регистрации RT последнего нажатия клавиши в списке, но код проверяет нажатия клавиш при каждом обновлении. Это то, что у меня есть до сих пор:

trialNum=0
for eachPic in catPictures:
    prevPos = 0
    key=[]
    b_list=[]
    t_list=[]
    timer = core.CountdownTimer(TrialDuration)
    event.clearEvents() # get rid of other, unprocessed events
    while timer.getTime() > 0:
    for key in event.getKeys():
        if key in ['escape']:
            core.quit() # quit if they press escape
        if key in ['b']:
            # add keypress to list for each keypress. then move cursor proportionally to length of this list
            b_list.append(key)
            prevPos+=len(b_list)
        if key in ['t']:
            t_list.append(key)
            prevPos-=len(t_list)

person Maria    schedule 08.09.2015    source источник


Ответы (2)


  1. Я бы просто имел один список ключей и проверял последний элемент, как только таймер истечет, то есть после цикла while (после завершения пробной версии).
  2. Не запускайте совершенно новый таймер в каждом цикле. Просто сбросьте его. Гораздо более ресурсоэффективен.
  3. Делайте отступы в цикле while.
  4. Я не понимаю, почему вы перемещаете курсор на расстояние, равное количеству предыдущих нажатий клавиш в этом испытании. Кажется более разумным перемещать его на фиксированное расстояние за одно нажатие клавиши. Так я и сделал ниже.
  5. Обязательно ознакомьтесь с предложением Джереми Грея по использованию встроенного psychopy.visual.RatingScale (еще один ответ на этот вопрос).

Непроверенный код:

timer = core.CountdownTimer(TrialDuration)
stepSize = 1
for eachPic in catPictures:
    prevPos = 0  # keeps track of the slider position
    rts=[]  # used to keep track of what the latest reaction time was. Reset in the beginning of every trial.

    timer.reset()
    event.clearEvents() # get rid of other, unprocessed events
    while timer.getTime() > 0:
    for key, rt in event.getKeys(timeStamped=timer):  # time keys to this clock
        rts += [rt]  # add this reaction time to the list
        if key in ['escape']:
            core.quit() # quit if they press escape
        if key in ['b']:
            # add keypress to list for each keypress. then move cursor proportionally to length of this list
            prevPos+=stepSize
        if key in ['t']:
            prevPos-=stepSize

    # Log here instead of print
    print rts[-1]
person Jonas Lindeløv    schedule 08.09.2015
comment
1. хороший звонок. 2. тоже хороший звонок. Я вставил из gedit, где все было правильно. 3. Это потому, что он позволяет курсору двигаться быстрее, если они быстро нажимают много клавиш. в противном случае перемещение курсора с одной стороны рейтинговой шкалы на другую может занять много времени. - person Maria; 09.09.2015
comment
Я хочу напечатать (или записать) время нажатия последней клавиши, а не то, что это за последняя клавиша. Я не уверен, как это сделать, но, вероятно, это потребует установки переменной равной clock.getTime() при нажатии последней клавиши. редактировать: я заставил это работать. Благодарность! - person Maria; 09.09.2015
comment
Я обновил ответ, чтобы получить время реакции. Я также удалил две ненужные строки (b_list.append(key) и другую). И сделал пункт 5, что вы обязательно должны проверить другой ответ, который появился вчера :-) - person Jonas Lindeløv; 10.09.2015

Для заданной рейтинговой шкалы rs вся активность субъекта доступна в rs.history как во время испытания, так и после него. История — это просто список кортежей, где каждый кортеж (рейтинг, время). Если шкала запущена, первый кортеж всегда (Нет, 0,0). Если последние две оценки совпадают, то испытуемый принял эту оценку. Если они разные, значит, испытуемый двигался по шкале, но не принял оценку в момент истечения времени шкалы.

Пример истории: [(Нет, 0,0), (3, 0,777), (3, 1,396)]

from psychopy import visual, core
win = visual.Window()
rs = visual.RatingScale(win)

c = core.CountdownTimer(3)
while c.getTime() > 0:
    rs.draw()
    win.flip()

# print or log:
print rs.history  # entire history
print rs.history[-1][1]  # just the time of the last rating
person jrgray    schedule 09.09.2015