美文网首页
pyControl | 用于控制行为的神经科学实验的开源硬件和软

pyControl | 用于控制行为的神经科学实验的开源硬件和软

作者: 茗创科技 | 来源:发表于2022-03-28 11:50 被阅读0次

文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注。

导读

实验室行为任务是一种重要的研究手段。随着有关行为和大脑活动的问题变得越来越复杂,明确并执行结构丰富任务的能力变得越来越重要。为此,研究者开发了pyControl,一个用于控制行为实验的开源硬件和软件系统,包括简单而灵活的基于python的语法,用于将任务指定为扩展状态机,用于构建行为设置的硬件模块,图形用户界面设计用于并行高效运算的实验,并且提供在线文档。

前言

动物行为本身以及与大脑功能的关系都具有基本的科学价值。虽然理解自然行为是最终目标,但实验室任务提供的严格控制仍然是表征学习机制的基本工具。为了满足当代神经科学的需要,控制行为实验的硬件和软件应该既灵活又易于使用。此外,对实验结果可重复性的关注日益增加,需要行为控制系统促进跨实验室的交流和行为模式的复制。

现有的商业解决方案往往达不到这些要求。专有的闭源硬件和软件使得扩展或适应显式实现用例之外的功能变得困难。此外,一些商业系统上的行为任务编程可能很不友好,这可能是由于硬件方面存在限制。商业硬件通常也非常昂贵,这对研究资金不充足的研究者不利,并限制了扩大行为分析以实现高通量的能力。

由于这些原因,许多团队使用Arduinos或raspberry PI等低成本微控制器或Labview等通用实验室控制软件制作自己的行为硬件。尽管非常灵活,但从头开始构建行为控制系统也有一些缺点。它会导致大量的重复性工作,因为许多所需的功能在实验中是通用的。此外,除非定制系统有很好的文档,否则用户很难有意义地共享实验协议。这一点很重要,因为科学出版物并不总是包含足够的信息来约束研究中所使用到的任务细节,而这些细节往往是重现行为结果的关键。因此,将任务代码公开是可重现性的关键,但这只有在它具有可读性和文档化以及性能良好的情况下才有效。为了解决这些限制,研究者开发了pyControl,一种用于控制行为实验的开源硬件和软件系统。

系统概述

pyControl由三个部分组成:pyControl框架、硬件和图形用户界面(GUI)。框架用于行为任务的语法编程(图1)。pyControl硬件由一个分线板组成,它与端口和连接器接口pyboard微控制器,以及一组设备连接到分线板创建行为设置。分线板通过USB接口连接计算机。多个分线板可以连接到一台计算机,每个分线板控制一个单独的行为设置。pyControl可用于与其他系统(如相机或生理学硬件)同步数据。所有硬件是完全开源的,组装硬件可以从open Ephys商店和LabMaker低价购得。GUI提供了一个图形界面,用于设置和运行实验、可视化操作和设置。为了提高可复制性,GUI实现了自文档化特性,这些特性确保用于生成数据的所有任务文件都与数据本身一起存储,并且有关任务参数的任何更改都将记录在数据文件中。

图1.任务例子。完成一个简单任务的任务定义代码(左侧)和相应的状态图(右侧)。

任务定义语法

pyControl任务是作为状态机实现的,状态机的基本元素是状态和事件。在任何给定的时间,任务都处于其中一种状态,当前状态决定了任务如何响应事件。事件可以由外部生成,也可以由内部的计时器生成。图1显示了一个简单任务的完整任务定义代码和相应的状态图,在该任务中,按下一个按钮三次将LED打开1s。代码首先定义要使用的硬件,列出任务的状态和事件名称,指定初始状态,并初始化任务变量。

然后,代码通过为每个状态定义一个state behaviour function来指定任务行为。当事件发生时,当前状态的状态行为函数将以事件名作为参数调用。当状态entryexit时,会发生称为进入和退出的特殊事件,允许在状态转换上执行操作。状态行为函数通常由一组ifelse if语句组成,用于确定在该状态下发生不同事件时会发生什么。任何有效的MicroPython代码都可以放置在状态行为函数中,唯一的约束是它必须快速执行,因为它会在执行时阻止进一步的状态机行为。用户可以在任务定义文件中定义其他函数和类,这些函数和类可以从状态行为函数中调用。

框架的主要组成部分能够设置计时器来触发状态转换或事件。示例中使用的timed_goto_state函数在指定的延迟之后触发到指定状态的转换。其他函数允许计时器在指定的延迟后触发指定的事件,或者取消、暂停和取消已经设置的计时器。为了让事情与任务的主状态集并行发生,用户可以定义一个all_states函数,当事件发生时,无论任务处于何种状态,都会调用这个函数,并以事件名作为参数。这可以与计时器和变量结合使用,以实现独立于主状态集或与主状态集交互的任务行为。例如,要使某事件在指定的持续时间后发生,而不考虑当前状态,用户可以设置计时器在所需持续时间后触发事件,并在事件发生时使用all_states函数执行所需的操作。

pyControl提供了一组用于生成随机变量的函数,数学函数可以通过MicroPython数学模块使用。尽管MicroPython实现了核心Python语言的一个很大的子集,但不能使用NumPy或SciPy这样的包,因为它们太大了,不适合放在微控制器上。

框架:pyControl框架由大约1000行Python代码组成。图2显示了系统组件之间的信息流的简化图。

图2.框架图。当任务运行时,显示框架的不同组件和图形用户界面(GUI)之间的信息流。

硬件

典型的pyControl硬件设置包括运行GUI的计算机,通过USB连接到一个或多个分线板,每个分线板控制单个行为设置(图3A)。由于任务代码运行在微控制器上,计算机不需要很强大的性能。一般并行运行24个是没有问题的。分线板接口pyboard微控制器(Arm Cortex M4运行在168MHz,192KB RAM上)与一组行为端口用于连接设备,构成行为设置,和BNC连接器,指示灯LED和用户按钮(图3B)。

图3.pyControl硬件。

图形用户界面(GUI)

GUI提供了两种设置和运行任务的方式;运行任务和实验选项卡,以及用于命名和配置硬件设置的设置选项卡。Run task选项卡允许用户在单个设置上快速上传和运行任务。通常用于原型任务和测试硬件,但也可以用于获取数据。任务变量的值可以在任务启动前或任务运行时修改。实验选项卡用于在多个设置上并行运行实验,旨在促进高通量实验。一项实验由一组被试在同一任务上并行运行。如果不同被试需要在不同的任务上并行运行,可以通过打开GUI的多个实例来实现。要配置一个实验,用户需要指定在哪个设置上运行哪个实验对象,以及在任务开始之前修改的任何变量的值。可以为所有被试或个别被试设置相同的变量值。可以将变量指定为Persistent,从而在会话结束时将它们的值存储在计算机上,然后在下次运行实验时将其设置为相同的值。变量可以指定为Summary,它们的值可以直接粘贴到电子表格中。实验配置可以保存并加载。

当实验运行时,“实验”选项卡中的“configure experiment”界面变为“run experiment”界面。会话界面可以为每个被试单独启动和停止,也可以为所有被试同时启动和停止。在运行每个设置时,将显示事件、状态条目、当前状态等内容(图4)。在会话窗口,可以查看和修改各个被试的变量值。可以打开一个带标签的图表窗口,显示每个被试的事件、状态和模拟信号的实时滚动图表,单个被试的图表信息可以分开显示,以允许多个被试的数据同时可视化。GUI可以完全在Python中PyQt GUI框架和PyQtGraph绘图库实现。

图4.pyControl图形用户界面(GUI)。

pyControl数据

来自pyControl会话的数据会保存为文本文件。当会话开始时,包括被试、任务和实验名称、启动数据和时间在内的信息被写入数据文件中。在任务运行时,所有事件和状态转换都以毫秒时间戳自动保存。用户在其任务文件中可以使用print函数导出额外的数据。

框架性能

为了验证pyControl框架的性能,研究者测量了系统的响应延迟和时间精度。响应延迟的评估使用数字输出任务,设置一个数字输出,以匹配由方波信号驱动的数字输入的状态。记录输入和输出信号,绘制出两个信号在所有上升和下降边缘之间的延迟分布情况(图5A和B)。时间精度的评估,同样使用一种任务进行测试,当数字输入接收到上升沿时,打开数字输出为10毫秒。绘制误差分布之间的测量持续时间的输出脉冲和10毫秒的目标持续时间(图5C和D)。总的来说,这些性能对于绝大多数神经科学应用来说是足够的。

对定时/延迟性能有严格要求的用户应该了解MicroPython的自动垃圾收集。垃圾收集会在需要释放内存时触发,耗时几毫秒。一般代码执行在垃圾收集期间暂停,尽管中断了,但还是会照常运行。一旦垃圾收集完成,就会处理在垃圾收集期间过期的pyControl计时器(图5E)。正在运行但在垃圾收集期间没有过期的计时器不受影响。在垃圾收集期间的数字输入将会显示出正确的时间戳(图5F)。为了避免垃圾收集影响关键处理过程,用户也可以手动触发垃圾收集。

图5.框架的性能。

应用举例:社会决策任务

基于迷宫的老鼠社会决策任务为例,改编自Márquez等人(2015)的实验任务。在这个任务中,‘焦点’动物的选择决定了对‘受赠’动物的奖励,能够考察亲社会行为和利己选择偏好。每个T迷宫(T-maze)包括一个中央走廊,两边(选择区)都有一个nose-poke,两侧各有一个食物容器与末端的分配器相连(图6A和B)。这项任务包括两个独立的阶段:(1)个体训练阶段,在这一阶段,动物学会通过拨弄中臂上的端口来开门,并从侧臂上取出食物;(2)社会测试,‘焦点’动物的决定控制了两个迷宫的门,从而决定了自己和在另一个迷宫中‘受赠’动物获得的奖励。个体训练方案对于焦点和受赠动物是不同的(图6C,D)。焦点动物的选择决定了受赠动物是否得到奖励,所以焦点动物可以做出既能奖励自己也能奖励受赠动物的亲社会选择,也可以做出只奖励它自己的利己选择。为了证明这一点,研究者展示了一对互动老鼠在社交活动中获得的奖励情况(图6F)。这项任务中的社会行为的完整分析将单独发表(Esteve-Agraz和Marquez,准备中)。

图6.社会决策任务。

总的来说,pyControl是一个用于运行行为实验的开源系统,主要优点是(1)为编程任务提供灵活、直观的基于python的语法;(2)提供实惠、简单、可扩展的行为硬件;(3)拥有GUI设计,能有效地运行高通量实验;(4)具有广泛的在线文档和用户支持。pyControl可以在两个重要的方面对行为神经科学做出贡献:第一,使广泛的行为任务的实施和大规模运行变得更快、更容易、成本更低。其次,促进了行为实验的交流和可复现性。

原文:Open-source, Python-based, hardware and software for controlling behavioural neuroscience experiments.

DOI: https://doi.org/10.7554/eLife.67846

pyControl软件,算法网址:https://github.com/pyControl/code

pyControl硬件网址:https://github.com/pyControl/hardware

pyControl文档网址:https://pycontrol.readthedocs.io

相关文章

网友评论

      本文标题:pyControl | 用于控制行为的神经科学实验的开源硬件和软

      本文链接:https://www.haomeiwen.com/subject/jnxwdrtx.html