心理学/神经科学中的许多行为实验设计需要条件分支(例如,如果在初始实践阶段已达到必要的性能水平,则仅进入测试阶段)。PsychoPy 的 Builder 视图允许生成 Python 脚本以使用大部分图形控件运行实验。但它似乎没有对条件分支的内置支持。
是否可以通过在代码组件中使用 Python 片段在 Builder 中实现在给定运行中跳过特定例程?还是需要迁移到完整的 Python Coder 环境?
心理学/神经科学中的许多行为实验设计需要条件分支(例如,如果在初始实践阶段已达到必要的性能水平,则仅进入测试阶段)。PsychoPy 的 Builder 视图允许生成 Python 脚本以使用大部分图形控件运行实验。但它似乎没有对条件分支的内置支持。
是否可以通过在代码组件中使用 Python 片段在 Builder 中实现在给定运行中跳过特定例程?还是需要迁移到完整的 Python Coder 环境?
PsychoPy 中的 Coder 视图让您可以完全访问 Python 编程语言,因此您可以实现任意复杂的实验设计。
同时,PsychoPy 的图形构建器视图强调易用性和简单性而非灵活性。它不直接满足的一件事是条件分支。但是,它可以被黑客入侵以间接实现它。
假设您有一个三阶段的实验:一个练习块,然后是两个可能的实验块,条件 A 或条件 B。完成练习块后,表现优异的科目被分配到条件A,而表现不佳的科目被分配到条件B。
要在 Builder 中实现这一点,请创建三个例程来表示每个任务块(练习、条件 A 和条件 B)。每个也将被一个循环包围(分别为practice_loop、A_loop 和B_loop。)还在Practice 和conditionA 之间插入一个例程(例如,称为assignCondition)。
在assignCondition 例程中,放置一个代码组件。假设在这种情况下,在练习例程中维护了一个性能分数计数器。我们可以使用它来更改后续例程的重复次数。也就是说,通过将循环的重复次数设置为零,我们确保不会执行该循环内的例程。因此,这些循环的重复次数将不是一个固定值,而是一个变量(例如,repetitionsA 和 repeatsB)。
在 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
Matt Wall 在此处的博客文章中给出了对该技术的更完整描述(以 fMRI 模块设计为例,其中模块的顺序需要是可变的):