2014-05-01 48 views
3

心理學​​/神經科學中的許多行爲實驗設計都需要條件分支(例如,如果在初始實踐階段已經達到了必要的性能水平,則只進入測試階段)。使用PsychoPy的Builder視圖可以生成一個Python腳本,以使用大量圖形控件來運行實驗。但它似乎沒有內置支持條件分支。你如何在PsychoPy Builder中實現條件分支?

通過在代碼組件中使用Python代碼片段,可以在Builder中實現在特定運行中跳過特定例程嗎?還是需要轉移到完整的Python編碼器環境?

+0

堆棧溢出是一個偉大的地方詢問不工作特定的源代碼,其中該代碼是問題分享讓每個人可以看看它。對於只有少數人使用的圖書館的問題並不是那麼好,特別是如果開發人員不在這裏閒逛。也許嘗試PsychoPy的郵件列表:https://groups.google.com/forum/#!forum/psychopy-users – Paul

+0

我還注意到,Python有'if'語句,Python有一個名爲'dictionary'的數據類型,可以用於根據關鍵變量鏈接功能以應用。我不知道PsychoPy是否利用了這一點,或者期望最終用戶能夠編程它。 – Paul

+1

@Paul PsychoPy有7000個註冊用戶:http://www.psychopy.org/usage.php。 StackOverflow對於Q/A來說是一個更好的系統,開發人員將從現在開始在這裏閒逛。讓我們知道您是否有任何意見/評論是否應以不同方式完成。 –

回答

3

PsychoPy中的編碼器視圖可讓您完全訪問Python編程語言,因此您可以實現任意複雜的實驗設計。

與此同時,PsychoPy的圖形構建器視圖強調易用性和簡單性而非靈活性。有一件事不直接支持是條件分支。然而,它可以被黑客間接實現。假設你有一個三階段實驗:一個練習模塊,後面跟着兩個可能的實驗模塊,ConditionA或ConditionB。完成練習塊後,將高績效科目分配至conditionA,而將低績效科目分配至conditionB。

要在Builder中實現此功能,請創建三個例程來表示每個任務塊(Practice,conditionA和conditionB)。每個也將被一個循環包圍(分別爲practice_loop,A_loop和B_loop)。在Practice和conditionA之間插入一個例程(稱爲assignCondition)。

在assignCondition例程中,放置一個代碼組件。假設在這種情況下,練習程序中保持了一個績效評分計數器。我們可以用它來改變後續例程的重複次數。也就是說,通過將循環的重複次數設置爲零,我們確保該循環內的例程不會被執行。因此,這些循環的重複次數不會是一個固定值,而是一個變量(比如重複A和重複B)。

在「開始例行的」 assignCondition程序的代碼組件的選項卡,把Python的網頁摘要:

if performanceScore > 25: 
    repetitionsA = 50 # run this routine 50 times 
    repetitionsB = 0 # don't run this condition at all 
else: 
    repetitionsA = 0 # vice versa: don't run this 
    repetitionsB = 50 # do run this 

這種技術的完整描述由馬特·沃爾在博客這裏給出(帶一個功能磁共振成像塊設計爲例如其中塊的順序必須是可變的):

http://computingforpsychologists.wordpress.com/2013/11/12/how-to-hack-conditional-branching-in-the-psychopy-builder/