什么生信流程語言讓你極度爽?

生信流程搭建有多難?行業為解決這一問題提出了各種各樣的配方,有你熟悉的嗎?

一、困境 - 亂

無數機構投入大量人力物力,以期獲得一條條可用的生信流程。而有些流程,由于種種原因,存在著巨大的缺陷:

  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.pswp.cn/web/14975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14975.shtml
英文地址,請注明出處:http://en.pswp.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 內部的操作&…

【OS】AUTOSAR Os是如何啟動第一個Task的

目錄 前言 正文 1.總體概覽及背景介紹 1.1. Os默認的Hook配置 1.2 用戶Task的配置

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 : […

第八屆“英拿科技杯”上海高校金馬程序設計聯賽暨東華大學邀請賽

第八屆“英拿科技杯”上海高校金馬程序設計聯賽暨東華大學邀請賽 儀表盤所有提交榜單 I. 孤星 單點時限: 2.0 sec 內存限制: 512 MB &#x1d45b;(1≤103) 個干員&#xff0c;每個干員工資為 &#x1d464;&#x1d456;(1≤&#x1d464;&#x1d456;≤105)&#xff0c;貢獻…

JAVA云HIS醫院系統源碼 HIS源碼:云HIS系統與SaaS的關系

云HIS系統與SaaS的關系 云HIS系統是一種基于云計算技術的醫院信息系統&#xff0c;它采用B/S架構&#xff0c;通過云端SaaS服務的方式提供。用戶可以通過瀏覽器訪問云HIS系統&#xff0c;無需關注系統的部署、維護、升級等問題。云HIS系統通常具有模板化、配置化、智能化等特點…

react記錄部署

導語 React中的核心概念 1 虛擬DOM&#xff08;Virtual DOM&#xff09; 2 Diff算法&#xff08;虛擬DOM的加速器&#xff0c;提升React性能的法寶&#xff09; React主要的原理 Virtual DOM 虛擬DOM; 提供了一種不同的而又強大的方式來更新DOM&#xff0c; 代替直接的DOM操…

cuda11.8安裝torch2.0.1

pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu118

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;就是…

2413. 最小偶倍數

題目&#xff1a; 給你一個正整數 n &#xff0c;返回 2 和 n 的最小公倍數&#xff08;正整數&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;n 5 輸出&#xff1a;10 解釋&#xff1a;5 和 2 的最小公倍數是 10 。 示例 2&#xff1a; 輸入&#xff1a;n 6 輸出&a…

JS 手寫 節流throttle 防抖debounce函數

防抖debounce // 手寫防抖 function debounce(fn, delay 200) {// timer 在閉包中let timer null// 返回一個函數return function(...args) {if (timer) {clearTimeout(timer) // 清空上次的值}timer setTimeout(() > {fn.apply(this, args) // 透傳 this 和函數參數},…

【再探】設計模式—代理模式

代理是指授權代理人在一定范圍內代表其向第三方進行處理有關事務。 1 代理模式 需求&#xff1a;1&#xff09;將業務代碼與非業務代碼分離&#xff0c;在不改變代碼結構的基礎上&#xff0c;為其添加新的功能。2&#xff09;為系統中的某些操作做同一處理&#xff0c;例如進…

[實例] Unity Shader 逐像素漫反射與半蘭伯特光照

漫反射光照是Unity中最基本最簡單的光照模型&#xff0c;本篇將會介紹在片元著色器中實現反射效果&#xff0c;并會采用半蘭伯特光照技術對其進行改進。 1. 逐頂點光照與逐像素光照 在Unity Shader中&#xff0c;我們可以有兩個地方可以用來計算光照&#xff1a;在頂點著色器…

數據結構:帶頭雙向循環鏈表

目錄 前言 鏈表實現 1.定義節點 2.接口實現 1.開辟新節點 2.初始化 3.打印鏈表 4.添加節點 頭插 尾插 在pos位置之前增加節點 5.刪除節點 判空 頭刪 尾刪 刪除pos位置的節點 6.查找 7.釋放 前言 帶頭雙向循環鏈表的結構最復雜&#xff0c;一般用在單獨存儲數…