分享一下当前接触和应用的生信流程自动化分析的实现

经验一

前言

19年底刚到厦门的时候,接触了一家跟临床医院合作,提供罕见病基因检测服务的公司,生信主要对二代 DNA 杂交捕获的测序数据进行分析,人工操作步骤大致如下:

  • 拿到实验室做好的样本信息
  • 待测序公司返回数据后,需要第一时间进行 fq 数据的下载
  • 根据样本分析类型,拷贝对应的 demo 分析流程
  • 根据样本的实际信息,修改分析流程中对应的参数配置
  • 提交分析,等待分析完成后检查分析结果
  • 数据没问题了就把数据拷贝到指定路径下,交付给下游部门

刚上手分析时,这一整套操作下来就占据了半天的时间了,当分析流程还有一些异常报错,或者数据质控有问题再排查、总结问题反馈给负责人,耗时更久。

自动化方案

自动化实现的核心在于数据信息符合预期的流转。上述步骤可增加对应的脚本替代人工操作,以 python 为例:

  • 拿到实验室做好的样本信息

    1. 如果数据在 lims 类系统,可申请 API ,利用 requests 等网络请求模块获取信息。
    2. 如果是邮件附件表格,可设置虚拟邮箱,接收并解析附件的样本信息表,使用 email、pandas 等模块。
      这两操作的可将需要分析的样本信息储存到服务器上,触发方式有两种方式:
      1. 定时任务
        利用系统的 crontab 或者 python 的 schedule 模块设置定时执行,比如每分钟检查一次否有所需的邮件附件
      2. 服务接口
        使用 flask 或 fastapi 模块创建服务接口,当实验完成后,由实验员在上传样本信息表触发信息录入请求,也可以将其跟 lims 系统衔接,直接在lims 系统上触发请求。
  • 待测序公司返回数据后,需要第一时间进行 fq 数据的下载
    一般测序公司都是给云盘账号密码,客户自行下载,比如阿里云,可用 oss2 模块检测和下载,同样可以定时任务或服务接口的方式合理设定其触发时机。
    阿里云OSS存储实现文件上传和下载功能

  • 根据样本分析类型,拷贝对应的 demo 分析流程
    基础的 python 编程即可实现

  • 根据样本的实际信息,修改分析流程中对应的参数配置
    根据之前保存的样本信息操作,也只需基础的 python 编程

  • 提交分析,等待分析完成后检查分析结果
    任务提交可以用 python自带的 subprocess 模块,Popen方法允许任务挂起到后台(不阻塞主进程),后续再用对应的方法判断任务完成情况等

  • 数据没问题了就把数据拷贝到指定路径下,交付给下游部门
    通过 smtplib 和 email 模块发送分析结果邮件给下游部门

经验二

前言

后续转战另一个体系突变检测的公司,该公司自己有多种测序仪,而且产品十多个,对应的分析流程就更多了,扩增子的、杂交捕获的、单样本的、配对的,甚至繁琐,各流程都是各自存放一个路径,一旦某些比较通用的脚本需要更新,那真是是鼓噪乏味的 copy ,而且容易出错。

考虑到后续更新维护的便捷、高效,在进行自动化之前将之前的流程进行了模块化,尽量同一功能的脚本使用同一份。

自动化方案

实现的大体方向与上面思路一致,但是公司有测序仪,又有外送测序,结果交付方式多种,某些数据流转有差别:

  • 拿到实验室做好的样本信息
    由于生信内部有 4 人的 IT 团队,开发了自动化系统(包含样本录入、结果展示、出具报告), 从 API 上直接可以拿到待分析样本信息的列表(样本导入由报告组的人完成,生信属于研发部下)

  • 测序数据监控
    一方面要监控各测序仪的数据下机,通过 IT 部做的备份机制,fq 数据都被同步到 NAS 上,然后自动化分析通过监控备份日志判断芯片是否下机完成。
    另一方面外送数据的返回与之前的方案一样,用阿里云的模块监控即可

  • 根据样本分析类型,组装 snakemake 主流程
    也是一些基础的 python 逻辑即可实现

  • 根据样本的实际信息,修改分析流程中对应的参数配置
    基础 python 编程即可

  • 提交分析
    由于样本量多,大 panel 捕获流程吃服务器资源多,需要多台服务器同时分析这些样本才能保证交付时效,因此将自动化分析分成两个模块,监控模块只需运行在某一台服务器上,将需要分析的样本合理分配给分析服务器(没有配置集群的尴尬。。。)提交分析的模块需要在每一台分析服务器上都部署,然后各服务器挂在同一个 NAS 以实现信息的互通(当时 API 不熟,没有采用 API 的形式进行服务器之间分析任务的通信)
    任务结果核对和结果检查也跟上面那个一致

  • 数据交付
    结果会传回 IT 的 web 端,也会拷贝到 NAS 的方式进行交付(报告组目前还习惯用 NAS)

其他功能

一个复杂的系统实现之后,总是能发现可以优化的地方,就好比经验二中的分析系统,其中增加了相当多的特殊功能:

  • 样本补测分析
  • 样本重测分析(如果是配对分析,重测了其中一个,另一个样本允许不重新分析的)
  • 前端删除后又重复录入的样本不重复分析
  • 质控异常钉钉提醒
  • 流程报错自动重新提交分析(比如未知原因的 I/O 错误)
  • 支持集群或多分析服务器两种模式

总结

这两个自动化方案都是基于自身工作的需求,这种重复性很高、麻烦又容易出错的操作,我就会想通过代码的形式取代,空闲出工作时间,才能有时间、精力去接触、学习更多工作上的新东西。因此,从招我做临检的活变成了专职做自动化了,加油,会越来越有价值的!