什么生信流程语言让你极度爽?

生信流程搭建有多难?行业为解决这一问题提出了各种各样的配方,有你熟悉的吗?

一、困境 - 乱

无数机构投入大量人力物力,以期获得一条条可用的生信流程。而有些流程,由于种种原因,存在着巨大的缺陷:

  1. 没有标准,不同的人设计出来的流程,开发、使用方法都不一样。

  2. 将软件/脚本、计算资源以及业务逻辑混在一起,导致代码结构混乱。

由于上述原因,导致非常严重的后果:

  1. 开发周期无限拉上,成本被无限放大。这是由于流程本身的缺陷,导致既难开发,也难维护。代码永远都存在 Bug,一直在修复的路上。

  2. 由于流程的结构不合理,导致想升级、优化某些步骤,或者增加新功能,难如登天。

  3. 君不见有些公司的内部数据库或软件 5、6 年不更新,甚至接近 10 年不更新也不鲜见。

  4. 比如 Python 还停留在 Python2.x 时代,R 还停留在 3.x 甚至 2.x时代,GATK 是 3.x 甚至 2.x,数据库落后官方好几年等等不一而足。主打的就是能跑就行,流程能跑就跑,不能跑我跑。

  5. 有一些软件/数据库,官方都停止维护了,甚至在其网站明确声明不再维护,建议换其他软件/数据库。而有的企业内部却一直不更新,为什么?因为原来流程能跑得通,没人愿意去更新,也怕更新了出错,于是干脆就维持现状。

  6. 由于没有标准,导致每一条流程的使用都得有一个SOP,新人入手极其困难。

困境是:乱,很乱,怎一个乱字了得。f180194f10e980f719c3420adcc5dc06.png

二、传统 - 串

传统的生信流程搭建,关键词就是:串。

用 Shell script / Perl / Python 等脚本语言将需要跑的命令串起来。比如这个基因家族分析:A pipeline for identification of olfactory receptor(OR) gene family

https://github.com/jianzuoyi/orfam

该流程仿的是发了 Nature method 的 Speedseq4a96e4b78a256a61475308438cba0560.png

这种最原始的流程搭建方式,其特点是将流程中要运行的命令、计算资源和业务逻辑绑定在一起。针对一些业务逻辑简单的任务没什么问题,但是对于比较复杂的情况就无能为力了。

三、标准 - 理想丰满

为了解决搭流程的问题,生物信息学领域是很拼的。不少机构都下场,誓要将这一问题彻底给解决。

都号称自己能将生信流程轻松拿捏。 由此多家单位都推出了自己的标准。

fe90e3657eee981357a883457d811505.png

下面仅列举常见的四个:

  • CWL,全称是通用流程语言(Common Workflow Language)。

  • WDL,全称是流程描述语言(Workflow Description Language)。

  • Nextflow,专注于开发生信流程的社区,其 nf-core 有一些现成可用的流程。

  • Snakemake,make 风格的流程搭建。

这是目前大浪淘沙之下剩余下来有一定影响力的。我对这些标准的评价是:浓浓的学院风,非常不接地气。大白话讲就是:难用。

大家有没有见到过一种现象,就是网上有很多介绍各种流程框架的使用教程,大多都虎头蛇尾。一开始雄心壮志,说要掌握某某流程框架,写了几篇之后,发现没法继续了,大都停留在 Helllo World 阶段,然后就没有然后了。

或者最后说一句:遇到了点问题。哈哈哈。。。仅仅是一点问题么。。。

6fdddd28d97d1c38e6c92c2647433c16.png写写 Hello world,各种框架还是很丝滑的。遗憾的是,仅此而已。

四、现实 - 却很骨感

我曾重度使用过 WDL,尝试把公司内自己负责的所有生信流程都用 WDL 重写。因为当年博德研究所联合华大等单位一起在国内大力推广 WDL,当年还成立了所谓的“生物信息协作组”,大概叫这么一个名字,其目的是制定流程搭建标准,大家如果都按照统一标准来,就可以方便流程共享,减少重复工作。多美好的愿望啊。

所以我就躬身入局了。后来发现,这玩意不仅开发麻烦,运行过程中还经常报莫名其妙的错误,根本排查不出原因。这是生产环境的大忌,忍无可忍之后,遗憾放弃。

客观来说,所有标准的出发点都是好的,它们最终的目标都是天下一统,就像秦统一六国:

六王毕,四海一。

遗憾的是,各种标准的提出,本身又成了一个又一个的小王国。所有标准都希望开发者尽入吾彀中,现实却是很骨感的。

这个标准不好,于是又提出一个新的标准。标准之争,最终演变成了标准泛滥。6fcb0f551bee367003317a4c90742fd0.png

五、破局 - 返璞归真

什么才是真正通用的生信流程语言?其实不是别的,正是 Linux,准确地说是 Linux shell,更具体点,可以说是 Bash 脚本语言。

为什么?因为我们是通过 Shell 去调用 Linux 服务器上的生信软件的,Shell 是调用 Linux 命令通用的语言,自然也是通用的生信流程语言了。明白了这一点,就清楚我们搭建生信流程需要坚持的原则了:

  1. 尽量直接使用 Shell 脚本

  2. 如果流程复杂度上升,可以借助胶水语言如 Python / Perl,但是第一步也是要先生成 Shell 脚本

这两个原则,还可以用来判断一个流程框架是否合理。为什么流程框架的第一步必须先生成 Shell 脚本?原因如下:

  1. 灵活性。生成 Shell 脚本,可以向任何后端集群投任务。而向集群投任务,IT 行业已经解决得非常好了,任何集群,都有成熟的任务投递工具。反观一些流程框架,负责任务生成和投递,除了徒增复杂性和向外行表示自己的强大之外,没有任何好处。

  2. 问题排查。如果任务执行失败,直接查看相应 Shell 脚本是否正确就行了,非常方便。有的流程框架不生成 Shell 脚本,有的生成了 Shell 脚本但是放在非常混乱的文件夹下,不利于排查问题。

  3. 结果复现/溯源。Shell 脚本与分析结果放在一起,方便未来复现结果,或者追溯当时生成结果的相关软件及其参数设定。

六、zflow - 让你极度爽

现有标准都不好,于是又提出一个新的+1。

基于一个理念:Linux 才是通用的生信流程语言。zflow 是流程中的一个核心组件,负责生成 Shell 脚本,其支持:

  1. 单样本流程搭建:如转录组标准分析、WGS、WES 重测序等。

  2. 配对样本流程搭建:如肿瘤 NGS 变异检测等。

  3. 支持加测:即支持一个样本多个文库,一个文库多条Lane的实验设计。

  4. 凡是任务之间有复杂依赖关系的流程,都可以通过 zflow 简单实现。

zflow 生成 Shell 脚本后,可以通过插件向不同集群投递任务。如何做到这一点?这得益于 zflow 生成的 Shell 脚本有以下几个特点:

  1. 一个脚本是一个任务。

  2. 纯的 Shell 脚本,可以直接运行。

  3. 附带 Cpu 和 内存需求说明。

  4. 附带任务之间的依赖关系。

因此,zflow 生成的脚本,可以被后续的插件纳入 DAG (有向无环图)中,从而向任意集群投递任务。

最后顺便解释一下 zflow 的命名:z,是字母 a-z 的最后一个,暗含终极之意,zflow,可以称之为:终极 flow。

c58b58385e6721238f4a498d37b32f33.png

七、许可证 - 学术免费

zflow 支持学术免费使用,官网地址为:

https://github.com/jianzuoyi/zflow

欢迎 Fork、加星和下载。

如需商用,请联系【简说基因】团队获得授权。商用权利:

  1. 获取程序所有源码。

  2. 可协助适配任意集群的任务投递,保证真正落地可用。

  3. 赠送两条成熟的生信流程:转录组 Hisat2 + Stringtie 定量(Galaxy 平台同款)、肿瘤 WES 变异检测。可直接用于生产,也是单样本和配对样本流程搭建的范例。

  4. 一年内使用 zflow 流程搭建相关的问题咨询。

很多生信流程,值得用 zflow 重写一遍。

云上转录组分析流程(点击图片跳转

cb1764b351d4568104d9f131a2cd1811.png

一文读懂scRNA-seq数据分析(点击图片跳转)

de9b9694083e90bada9f327f9e933c1c.png

如何自学生物信息学:从菜鸟到专家(点击图片跳转)

6544df82dc53894d23698c6a67b75819.png


往期精彩:

生信人的自我修养:Linux 命令速查手册

经典教程:全转录数据分析实战

网上最全的 R 语言图库(建议收藏)| 简说基因 Recommend

清华大学生物信息学课件资料分享

生物信息学软件:两种风格

新年第一课:从零开始入门Galaxy生信云平台

生物信息学必备的R语言相关参考书 | 简说基因 Recommand

从单细胞数据分析的最佳实践看R与Python两个阵营的博弈

涉嫌侵权,容我解(jiao)释(bian)一下

生物信息学中的可重复性研究

关于简说基因

  • 生信平台

    Galaxy中国(UseGalaxy.cn)致力于打造中国人的云上生物信息基础设施。大量在线工具免费使用。无需安装,用完即走。活跃的用户社区,随时交流使用心得。

  • 联系方式

    QQ交流群(免费):925694514

    微信交流群(免费):加微信好友,注明“Galaxy交流群”

    客服微信:usegalaxy

a7272e9cd19a2fbd436755882b208f16.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全风险 - 切换后台时背景模糊处理

因为安全风险中提到当app处于后台卡片状态时,显示的卡片页面应该为模糊效果,否则容易泄露用户隐私,尤其当前页涉及个人信息、资产信息等,都会造成信息泄露!基于这种场景,我研究了下这种业务下的模糊效果 找…

普通函数的参数中的auto

2.1 普通函数的参数中的auto 从c14起&#xff0c;lambda可以使用auto占位符声明或者定义参数: auto printColl [] (const auto& coll) // generic lambda{ for (const auto& elem : coll) {std::cout << elem << \n;}} 只要支持Lambda 内部的操作&…

Golang创建文件夹

方法 package zdpgo_fileimport ("os" )// AddDir 创建文件夹 func AddDir(dir string) error {if !IsExist(dir) {return os.MkdirAll(dir, os.ModePerm)}return nil }测试 package zdpgo_fileimport "testing"func TestAddDir(t *testing.T) {data : […

JAVA云HIS医院系统源码 HIS源码:云HIS系统与SaaS的关系

云HIS系统与SaaS的关系 云HIS系统是一种基于云计算技术的医院信息系统&#xff0c;它采用B/S架构&#xff0c;通过云端SaaS服务的方式提供。用户可以通过浏览器访问云HIS系统&#xff0c;无需关注系统的部署、维护、升级等问题。云HIS系统通常具有模板化、配置化、智能化等特点…

hot100 -- 回溯(上)

目录 &#x1f35e;科普 &#x1f33c;全排列 AC DFS &#x1f6a9;子集 AC DFS &#x1f382;电话号码的字母组合 AC DFS &#x1f33c;组合总和 AC DFS &#x1f35e;科普 忘记 dfs 的&#xff0c;先看看这个&#x1f447; DFS&#xff08;深度优先搜索&#xf…

百度软件测试面试经历,期望薪资27K

一面 1、 请为百度搜索框设计测试用例&#xff1f; 2、百度设计框上线前需要进行那些测试&#xff1f; 界面测试&#xff0c;功能测试&#xff0c;性能测试&#xff0c;安全性测试&#xff0c;易用性测试&#xff0c;兼容性测试&#xff0c;UI测试。 3、如何查看http状态码…

重学java 38.创建线程的方式⭐

It is during our darkest moments that we must focus to see the light —— 24.5.24 一、第一种方式_继承extends Thread方法 1.定义一个类,继承Thread 2.重写run方法,在run方法中设置线程任务(所谓的线程任务指的是此线程要干的具体的事儿,具体执行的代码) 3.创建自定义线程…

基于灰狼优化算法优化支持向量机(GWO-SVM)回归预测

代码原理 基于灰狼优化算法优化支持向量机&#xff08;GWO-SVM&#xff09;的回归预测代码的原理和流程如下&#xff1a; 1. **初始化灰狼群体**&#xff1a;随机生成一定数量的灰狼&#xff0c;并初始化它们的位置和速度。 2. **初始化SVM模型参数**&#xff1a;根据问题要…

【JAVA基础之网络编程】UDP和TCP协议以及三次握手和四次挥手的过程

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1. 网络编程 1.1 概述 1.2 网络编程的三要素 1.2.1 IP地址 1.2.2 InetAddress 1.2.3 端口和协议 1.3 UDP协议 1.3.1 UDP发送数据 1.3.2 UDP接收数据 1.4…

C语言——小知识和小细节18

一、力扣题目 1、题目本体 2、题解 本题目我们使用异或分组的方法来解决。可以在我之前的文章《C语言——操作符CSDN博客》中看一下异或的特点。 由于异或的运算规则为相同为0&#xff0c;不同为1&#xff0c;而且是在二进制补码上进行操作的&#xff0c;我们可以发现的一个…

c++|多态

c|多态 1 多态的概念2 多态的定义及其实现2.1 满足多态的条件2.2 虚函数2.3 虚函数的重写2.4 析构函数适合加virtural吗2.4 C11 override 和 final2.5 三个概念的对比 3 多态的原理4 抽象类4.1 概念4.2 纯虚函数 1 多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是…

【再探】设计模式—代理模式

代理是指授权代理人在一定范围内代表其向第三方进行处理有关事务。 1 代理模式 需求&#xff1a;1&#xff09;将业务代码与非业务代码分离&#xff0c;在不改变代码结构的基础上&#xff0c;为其添加新的功能。2&#xff09;为系统中的某些操作做同一处理&#xff0c;例如进…

[实例] Unity Shader 逐像素漫反射与半兰伯特光照

漫反射光照是Unity中最基本最简单的光照模型&#xff0c;本篇将会介绍在片元着色器中实现反射效果&#xff0c;并会采用半兰伯特光照技术对其进行改进。 1. 逐顶点光照与逐像素光照 在Unity Shader中&#xff0c;我们可以有两个地方可以用来计算光照&#xff1a;在顶点着色器…

z3-加法器实验

补码器加减法&#xff0c;运算方法简介 我们要知道什么是补码的加法&#xff0c;我们为什么要用补码的加法&#xff1f; 补码的加法其实就是将两个补码形式的二进制数字直接相加&#xff0c;处理的时候忽略超出固定位数的进位。补码的加法运算和无符号二进制数的加法操作一样&…

【最新区块链论文录用资讯】CCF A — SP 2024 共17篇

Conference&#xff1a;45th IEEE Symposium onSecurity and Privacy CCF level&#xff1a;CCF A Categories&#xff1a;网络与信息安全 Year&#xff1a;2024 Num&#xff1a;17 Efficient Zero-Knowledge Arguments For Paillier Cryptosystem Paillier 加密系统的有效…

基于python的网页自动刷新工具

1.下载webdriver https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix122.0.2365.59/下载Edge的浏览器驱动 2.安装selenium pip install selenium4.11.1 3.写代码 # -*- coding: utf-8 -*- import tkinter as tk from tkinter import messagebox import thr…

【halcon】set_part 实现平移和缩放 彻悟版

背景 之前写了一篇关于set_part 的文章 &#xff0c;确实也实现了平移和缩放。平移是对的&#xff0c;但是缩放其实有畸变。这个问题一直都困扰着我&#xff0c;知道昨天连续测试了好几个小时&#xff0c;直到晚上11点终于完美解决。 坐标和高宽 坐标 再讲set_part 之前&am…

免费撸gpt-4o和各种大模型实用经验分享

项目 Github: https://github.com/MartialBE/one-api 先贴两张图&#xff1a; 说明 免费撸AI大模型,各位可以对照下面我给出的大模型记录表来填&#xff0c;key需要自己去拿&#xff0c;国内都需要手机号验证&#xff0c;如果你不介意。另外我在自己的博客放出免费API给大家…

模型评价指标笔记:混淆矩阵+F1+PR曲线+mAP

评价指标 二分类评价指标 混淆矩阵 TP: 正确预测为了正样本&#xff0c;原来也是正样本 FN: 错误的预测为负样本&#xff0c;原来是正样本 (漏报&#xff0c;没有找到正确匹配的数目) FP: 错误的预测为正样本&#xff0c;原来是负样本 (误报&#xff0c;没有的匹配不正确) TN…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…