生信工作流框架搭建 | 02-nextflow 实战

news2025/1/15 6:43:26

目录

  • 生信工作流框架搭建 | 02-nextflow
    • 前情提要
    • 开始使用
      • 依赖
      • 安装
      • 核心概念
        • 一个fastqc的示例,加深理解
      • 快速搭建你的程序
        • 你需要仔细阅读的:
        • 可以快速浏览(但需要知道大概有什么,以便后来查览):
      • 报错!你会踩哪些坑?
    • 下期预告

生信工作流框架搭建 | 02-nextflow

本篇为biodoge《生信工作流框架搭建》系列笔记的第3篇,该系列将持续更新。

前情提要

上回生信工作流框架搭建 | 01-nextflow、snakemake、wdl 对比测试为大家对比了三种主流工作流语言,根据实际情况,我选择了nextflow为后续搭建流程。那么,本篇即为nextflow的实用教程。
注意,nextflow官方教程已经非常详细,我不会一点点把教程搬过来,只从实战角度快速上手。
本文示例基于AWS EC2环境。

开始使用

ok,让我们一起打开 https://www.nextflow.io/ 开始使用吧!

依赖

  1. 任何POSIX兼容系统(Linux,OS X等)
  2. Bash 3.2(或更高版本)
  3. Java 11(或更高版本,最多 18)。

安装

#安装java(版本11-18)首先要看是否已经安装过了java环境
$ java -version
#到java官网找合适版本 wget,我这里找的是java17(不同版本有差别,可以查一查)
$ mkdir java
$ cd java
$ wget 	https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
$ tar -zxvf jdk-17_linux-x64_bin.tar.gz
#配环境变量
$ vi /etc/profile
#输入以下内容
insert:#set java environment
export JAVA_HOME=/usr/java/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
#wq
$ source /etc/profile

#使用conda安装nextflow
$ conda install nextflow

核心概念

在详细阅读官方文档前,我们要了解一点:
工作流语言/框架是在管道的功能逻辑底层执行系统之间提供了抽象
那么这层抽象是怎样的结构呢?

通道channel、流程process、工作流workflow
nextflow详解

一个fastqc的示例,加深理解

无论是RNAseq还是宏基因组分析,首先都会经过质控这个步骤,且往往都是数据处理的第一步。
如果我们想搭建一个fastqc的小工作流,该如何实现呢?
我的思路是,无论何种工作流语言,核心都是输入输出。
第一步,确定输入:sample_R1.fastq.gz sample_R2.fastq.gz,我们也可以批量处理样本:sample1、sample2、sample3……
确定输出:我们需要的fastq运行结果:sample.zip sample.html
第二步,确定传输方式。HOW——我们如何读取fastq文件?——nextflow贴心准备了fromFilePairs方法(颗粒度真的很细!),在fromFilePairs里面传入一个参数(可以在顶部定义,这样想更改文件路径的时候直接修改顶部参数即可,非常棒的是可以识别通配符),通过该方法,我们会读入一个tuple,形如

sampleIDreads
sample1[/some/data/sample1_R1.fastq.gz , /some/data/sample1_R2.fastq.gz]
sample2[/some/data/sample2_R1.fastq.gz , /some/data/sample2_R2.fastq.gz]

传入process时,我们要用tuple val(xx),path(yy)这样的形式,xx和yy在脚本中正确调用就好。
我们如何获取输出文件?——publishDir指定即可。
第三步,把process的骨架搭起来——输入输出脚本,加上一些指令——最后工作流调用任务

// Declare syntax version 版本号很关键,不同版本语法不同!推荐大家使用dsl2
nextflow.enable.dsl=2
// Script parameters 脚本参数在这里定义
params.read = "/some/data/*.fastq.gz"	//可以识别通配符

process fastq {
  container "${ workflow.containerEngine == 'singularity' ?
        'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :
        'quay.io/biocontainers/fastqc:0.11.9--0'}"		//指定容器
  publishDir "/result/",mode:'copy'
  
  input:		//输入 这里是tuple
  tuple val(meta),path(reads)

  output:		//输出 也许工作目录会有很多结果文件,但我们只需要特定的输出文件,那么只有这个指定的文件会被视为需要输出的
  path("${id}/*.html"),emit:html	//提问,这里的emit有什么用?
  path("${id}/*.zip"),emit:zip

  when:
  task.ext.when == null || task.ext.when

  script:		//脚本,linux命令,与命令行执行基本一样,除了要注意一些字符需要反转义,系统变量前也要加/反转义
  """
  mkdir ${id}
  fastqc -o ${id} -t 16 ${reads}
  
  """
}

workflow {
   reads = Channel.fromFilePairs(params.read)	//通过通道传递参数,读取文件,fromPair这个方法可以直接读成对reads
   FASTQC(reads)	//像调用函数那样调用任务,括号传参
}

当然我们处理更复杂的数据时,我们完全可以采用fromPath的方法导入一个csv文件(此时必须要split.csv()操作符协助),如下,这样可以分别调用reads1、2

sampleIDreads1reads2
sample1/some/data/sample1_R1.fastq.gz/some/data/sample1_R2.fastq.gz
sample2/some/data/sample2_R1.fastq.gz/some/data/sample2_R2.fastq.gz

nextflow.enable.dsl=2
params.read = "/some/data/*.fastq.gz"	

process fastq {
  container "${ workflow.containerEngine == 'singularity' ?
        'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :
        'quay.io/biocontainers/fastqc:0.11.9--0'}"		//指定容器
  publishDir "/result/",mode:'copy'
  
  input:		
  tuple val(id),path(reads1),path(reads2)

  output:		
  path("${id}/*.html"),emit:html	
  path("${id}/*.zip"),emit:zip

  when:
  task.ext.when == null || task.ext.when

  script:		//脚本,linux命令,与命令行执行基本一样,除了要注意一些字符需要反转义,系统变量前也要加/反转义
  """
  mkdir ${id}
  fastqc -o ${id} -t 16 ${reads1} ${reads2}
  
  """
}

workflow {
    data = channel.fromPath(params.reads)
        .splitCsv(header:true)
        .view() //这里加个view可以输出data的形式

   FASTQC(data)	
}

快速搭建你的程序

看一看官方文档,哇,内容好多!我们都要记下来吗?

一个坑的地方:虽然更新了DSL2但前面的很多示例没有同步!而DSL2与原生语法差距又很大,大家要注意!

在这里插入图片描述
实则不然,有些内容粗略带过,并不影响我们的使用。特别是刚开始入门,应该先搭建起来,而不是在各种晦涩概念中眼花缭乱,眉毛胡子一把抓。

你需要仔细阅读的:

Get started
Basic concepts
Processes
Channels
Operators
它推荐的那几个操作符 (本页是所有 Nextflow 运算符的综合参考。但是,如果您是新手,对于 Nextflow,以下是一些建议的运算符,用于常见用例)
Configuration
DSL2

FAQ 这货不在侧边栏索引,是隐藏条目,但很有用……
Tracing & visualisation 只需要nextflow run命令加上-with-report / -with-timeline / -with-dag,就会有神奇的事情发生

可以快速浏览(但需要知道大概有什么,以便后来查览):

Nextflow scripting 像是Groovy语法的简洁教程……闭包这个东西现在仍然没搞懂
Executors 后续要仔细看你要使用的执行器,比如AWS,本地跑可以忽略……
Operators 其他部分

这里可以看一些博客,毕竟是翻译过来的中文理解起来会方便一些,但是会存在时效性的问题*(官方文档在不断更新)
安利一个nextflow专栏,操作符之类的讲得很清楚。Nextflow编码实践这篇列举了很多编码技巧。

报错!你会踩哪些坑?

  1. 语法问题

process assembly {
‘{’
^
语法问题。看起来跟括号有关,实际上只能定位到该process,可能是process内某一个指令或脚本写错了语法

  1. 配置文件无法识别动态指令

Unknown method invocation multiply on Integer type
未知方法在整型上调用‘×’
一般在运行process之前发现,可能是config文件中出现了不应该的×(config无法识别动态指令)

  1. Script compilation error
    在这里插入图片描述
    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字串中不能出现单引号(对单引号使用转义符后也不行)
    双引号里可以有变量,允许变量替换;双引号里可以出现转义字符
    引号内$会被识别为nextflow的变量,而系统变量则需要转义\,同理单纯的/也需要转义\
script:
"""
echo $params.input ->(nextflow参数)
echo \$PWD ->(系统变量)
"""

下期预告

将带大家实践AWS batch+nextflow。如果喜欢的话请大力催更哦

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

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

相关文章

IPD-需求管理流程

一、产品需求管理模型 在确定客户需求时,要考虑影响用户购买标准的八类基本需求($APPEALS),并基于客户视角进行详细分解,形成有针对性的产品。 1.1、需求管理业务流程 二、需求收集流程 2.1、需求收集的来源 路标规划:通过市场管理流程分析,落实到路标规划中的需求…

基于Paddle的手写数字识别模型

百度飞桨(paddlepaddle)是百度的开源深度学习平台,今天就利用paddle来编写入门级的手写数字模型. 一,准备数据 下载数据集,这里我们使用的是MNIST数据集 # 下载原始的 MNIST 数据集并进行解压 wget https://paddle-imagenet-mode…

12.数组的初始化和引用

数组的初始化 定义数组的时候,顺便给数组的元素赋予初值,即开辟空间的同时并且给数组元素赋值 一维数组的初始化 a. 全部初始化 int a[5] {2,4,7,8,5}; 代表的意思:a[0] 2 , a[1] 4 , a[2] 7 , a[3] 8, a[4] 5; b. 部分初始化 int …

Clever Internet Suite for Delphi, C++Builder

为Internet应用程序添加即时SSL/TLS安全性,并实现许多有用的Internet相关功能。 聪明的互联网套件允许您添加下载、上传和提交互联网资源;发送和接收MIME消息;HTTP、FTP、SMTP、POP3、IMAP和NNTP客户端/服务器解决方案;带有数字证书的SSL/TLS通道支持您的VCL应用程序…

电脑分辨率怎么调?电脑分辨率怎么调合适

​无论是笔记本电脑的用户,还是说台式电脑的用户,在使用电脑的时候,如果电脑分辨率调整的不对,很容易造成显示与观感方面的模糊。电脑分辨率怎么调?电脑分辨率怎么调最佳?本篇文章,小编就来教教…

ASEMI肖特基二极管1N5822参数,1N5822特征,1N5822应用

编辑-Z ASEMI肖特基二极管1N5822参数: 型号:1N5822 最大重复峰值反向电压(VRRM):40V 最大RMS电桥输入电压(VRMS):28V 最大直流阻断电压(VDC)&#xff1a…

三、简单了解kafka设计原理

系列文章目录 文章目录系列文章目录一、Kafka核心总控制器Controller二、kafka高性能简单理解一、Kafka核心总控制器Controller 在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责…

[ZJCTF 2019]Login--动态调试--详细版

前言 主要是因为太菜了,看了别人的exp,还是懵懵懂懂的,都是静态分析,不明白为会在改密码的时候会导致最后的getshell。今天给它动态分析整一个,看看到底哪里出错了。 基本原理 网上有很多介绍的,在这里说…

Linux学习——01 gcc编译器

一、程序构建过程 高级语言的代码无法被计算机执行,需要将高级语言代码编译成汇编语言,然后再将汇编语言翻译成机器指令,最后通过链接生成最后的可执行文件,此时该文件才可以被计算机执行。总共有四步: 1.1 预编译&a…

[02] BLEMotion-Kit 基于QMI8658传感器使用加速度计进行倾斜检测

文章目录1. 先修知识2. 原理(单轴为例)2.1 单轴倾斜2.2 双轴倾斜2.3 三轴倾斜1. 先修知识 2. 原理(单轴为例) 首先我们要知道的是:当目标轴(本例中为X轴)与地球表面平行时,传感器处于 0g 场。顺时针或逆时针旋转90 将…

springboot+java大学生西部计划志愿者岗位补助管理系统

本课题要求实现一套大学生西部计划管理系,系统主要包括系统个人中心、志愿者管理、岗位信息管理、补助信息管理、交流论坛、系统管理等功能模块。 为完善志愿者、岗位信息,应当建立健全志愿者的补助和管理机制,建立有效的激励机制&#xff0c…

Android Studio无法连接设备,一直显示Loading Devices...

不知道什么时候做了啥,从某个时间点之后,电脑就特别容易断开adb,有时候重启电脑都不管用。 一直显示"Loading Devices...",拔插设备,重启Android Studio都没用,甚至重启电脑有时候也不行。 反正…

全部售罄!1,000 多个Sports Land NFT 在 24 小时内被抢空!

现在还来得及,抓紧时间!👀 在不到24小时的时间里,来自《Sports Land:足球爱好者》作品集(2022 年 11 月 16 日发布)的1000 多个可穿戴 NFT 已被售出! 祝贺 Hermit Crab Game Studio …

bootstrap学习(一)

(1)bootstrap第一个程序 (2)bootstrap排版 (1)bootstrap第一个程序 创建boot文件夹方置bootstrap所需要的文件目录,拷贝过来 创建base目录,创建html页面: 引入css&#…

python复杂网络分析库NetworkX

文章目录1.Networkx简介2.图的类型(Graphs)3.图的创建(Graph Creation)4.图的属性(Graph Reporting)5.图算法(Algorithms)6.图的绘制(Drawing)7.数据结构8.图…

A股api交易接口文档怎么使用?

A股api交易接口是在股票量化交易中常用到的一种量化工具,对于它的用法,小编针对性的以文档的例子说明: 交易接口API 功能概述: 名称 功能 基本函数 Init API 初始化 Deinit API 反初始化 Logon 登录交易账户 Logoff 登…

年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页

公司想做个五年总结 这不快年底了么,公司高层打算把这五年的发展历程做一次回顾巡礼,一方面宣扬一下公司文化,另一方面歌颂一下公司这五年来取得的辉煌成就,单纯的做个海报,写个公众号文章,或整个传统ppt在…

最强大脑记忆曲线(11)—— 30天结束第一轮复习后的操作

对于30天以后,结束第一轮(6次)复习以后,我们要做点什么操作呢? 对第一轮复习效果的评判可以是客观的,也可以是主观的。所谓客观的,是按“复习的正确率”来评判,大于某个值&#xff0…

内部类_Java

作者:爱塔居的博客_CSDN博客-JavaSE领域博主 专栏:JavaSE 文章目录 目录 文章目录 一、内部类的概念 二、内部类的分类 1.静态内部类(被static修饰) 2.非静态内部类 3.局部内部类 4.匿名内部类 一、内部类的概念 当一个事物…

【JVM】jvm的双亲委派机制

双亲委派机制一、JVM体系结构二、双亲委派机制的含义三、双亲委派机制的源代码四、双亲委派机制的意义五、示例代码一、JVM体系结构 我们先在这里放一张 JVM 的体系架构图,方便我们有个总体认知。 在了解JVM的双亲委派机制之前,你不得不需要知道的几个…