2015-09-08 3 views
0

Я использую шкалу оценки. Участники используют клавиши «t» и «b» для перемещения курсора по шкале. Каждое испытание в настоящее время длится 6 секунд. Если участник перестает нажимать «t» или «b» до 6 секунд, я хочу записать время последнего нажатия клавиши в моем файле журнала. Тем не менее, я не уверен, как проверить, какой keypress является последним. Я думал о регистрации 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) 

ответ

2
  1. Я бы только один список ключей и проверить последний элемент, как только таймер вверх, то есть после того, в то время как петли (после чистовой испытания).
  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] 
+0

1. хороший вызов. 2. также хороший звонок. Я вставил из gedit, где все было отступом правильно. 3. Это потому, что он позволяет курсору двигаться быстрее, если они быстро нажимают много клавиш. в противном случае может потребоваться много времени, чтобы переместить курсор с одной стороны шкалы оценок на другую. – Maria

+0

Я хочу напечатать (или записать) время, когда нажата последняя клавиша, а не последний ключ. Я не уверен, как это сделать, но, вероятно, это будет связано с установкой переменной равным 'clock.getTime()' при нажатии последней клавиши. Редактировать: Я заработал. благодаря! – Maria

+0

Я обновил ответ, чтобы получить время реакции. Я также удалил две ненужные строки ('' b_list.append (key) '' и другой). И сделал пункт 5, что вы обязательно должны проверить другой ответ, который появился вчера :-) –

2

Для данной рейтинговой шкалы Р.С., все активности субъекта доступен в rs.history, как во время судебного разбирательства и после него. История - это всего лишь список кортежей, где каждый кортеж (рейтинг, время). Если начальная шкала началась, первый кортеж всегда (None, 0.0). Если два последних рейтинга совпадают, субъект согласился с этим рейтингом. Если они отличаются друг от друга, предмет передвигался по шкале, но не принял оценку в тот момент, когда шкала была остановлена.

История Пример: [(None, 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 
Смежные вопросы