2015-09-08 60 views
0

我正在使用評定量表。參與者使用't'和'b'鍵沿光標移動光標。每個試驗目前都是6秒鐘。如果參加者在6秒鐘之前停止按't'或'b',我想在日誌文件中記錄最後一次按鍵的時間。但是,我不確定如何檢查哪個按鍵是最後一個按鍵。我正在考慮在列表中記錄最後一個按鍵的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. 我只想有鑰匙的一個列表,並檢查最後一個元素一旦定時器是向上的,即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] 
+0

1.良好的通話。 2.也好打電話。我從gedit上粘貼,所有內容都正確縮進。 3.這是因爲如果快速按下很多按鍵,它可以讓光標移動得更快。否則將光標從評分標尺的一側移到另一側可能需要很長時間。 – Maria

+0

我想打印(或記錄)最後一個鍵被按下的時間,而不是最後一個鍵的時間。我不確定如何做到這一點,但它可能會涉及設置一個變量等於'clock.getTime()'當最後一個鍵被按下。 編輯:我做了它的工作。謝謝! – Maria

+0

我更新了答案,以獲得反應時間。我還刪除了兩條不必要的行(''b_list.append(key)''和另一行)。並提出了一個觀點5,你一定要查看昨天彈出的其他答案:-) –

2

對於給定的等級量表,RS,所有主題的活動是rs.history可用,無論是在試用事後。歷史只是一個元組列表,其中每個元組都是(評級,時間)。如果比例已經開始,第一個元組總是(None,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