查看原文
其他

snakemake 使用多环境分析数据

JunJunLab 老俊俊的生信笔记 2022-08-15


看万山红遍,层林尽染

1引言

前面已经有两期内容讲了 snakemake 的基本用法,基本上我们 写个简单的 workflow 是完全没有问题的。

我们知道当我们分析数据走一个完整的 pipeline 时,可能每个 step 用到的 软件不一样 ,每个软件的 依赖的软件也不一样 ,此外各种软件的 依赖环境也可能不一样

举个例子: 有些软件只能在 python2 的环境运行,到了 python3 就会报错。

一个很常见的现象就是你在一个环境里安装了太多软件,可能会导致之前的软件无法运行或者新装的软件也可能会报错。

最好的办法就是建立不同的环境来安装这些软件方便管理。 snakemake 可以使用 conda 参数 来提供你的 环境 yaml 文件 ,从而达到每个模块可以在不同的环境进行分析。

2创建 yaml 文件

假如我们创建一个数据预处理的 python3 环境:

$ conda create -n prefilter python=3 fastqc multiqc fastp

激活环境:

$ conda activate prefilter

导出环境:

$ conda env export > prefilter.yaml

#
 查看内容
$ head -n 15 prefilter.yaml
name: prefilter
channels:
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=4.5=1_gnu
  - blas=1.0=mkl
  - bzip2=1.0.8=h7b6447c_0
  - c-ares=1.17.1=h27cfd23_0
  - ca-certificates=2021.10.26=h06a4308_2
...

这个 yaml 文件包含了软件及依赖软件的具体信息,还有软件下载来源。

3使用 yaml 文件

那么如何在 snakemake 的 workflow 中使用呢? 我们需要在模块里引入 conda 参数,写一个 fastqc 和 multiqc 的小模块:

rule filter_qc:
    input:
        expand("fastq-data/{sample}.fq.gz", sample=samples)
    output:
        expand("QC-data/{sample}_fastqc.html",sample = SAMPLES),
        expand("QC-data/{sample}_fastqc.zip",sample = SAMPLES)
    conda:
        "envs/prefilter.yaml"
    shell:
        "fastqc -t 10 -o QC-data/ {input}"

rule multiQC:
    input:
        expand("0.QC-data/{sample}_fastqc.zip",sample = SAMPLES)
    output:
        "0.QC-data/multiqc_report.html"
    conda:
        "envs/prefilter.yaml"
    shell:
        "multiqc -o 0.QC-data/ {input}"

在执行时,Snakemake自动创建该环境,并在其中执行 shell 命令,我们讲 yaml 文件放在了 envs 文件夹下。

测试:

$ snakemake --use-conda -n

4官网示例代码

最后提供一下官网的示例完整 pipeline 代码:

samples = ["A""B"]


rule all:
    input:
        "calls/all.vcf",
        "plots/quals.svg"


rule bwa:
    input:
        "data/genome.fa",
        "data/samples/{sample}.fastq"
    output:
        temp("mapped/{sample}.bam")
    conda:
        "envs/mapping.yaml" ## 比对环境
    threads: 8
    shell:
        "bwa mem -t {threads} {input} | samtools view -Sb - > {output}"


rule sort:
    input:
        "mapped/{sample}.bam"
    output:
        "mapped/{sample}.sorted.bam"
    conda:
        "envs/mapping.yaml" ## 比对环境
    shell:
        "samtools sort -o {output} {input}"



rule call:
    input:
        fa="data/genome.fa",
        bam=expand("mapped/{sample}.sorted.bam", sample=samples)
    output:
        "calls/all.vcf"
    conda:
        "envs/calling.yaml" ## calling 环境
    shell:
        "samtools mpileup -g -f {input.fa} {input.bam} | "
        "bcftools call -mv - > {output}"

rule stats:
    input:
        "calls/all.vcf"
    output:
        report("plots/quals.svg", caption="report/calling.rst")
    conda:
        "envs/stats.yaml" ## 统计环境
    script:
        "scripts/plot-quals.py"

5思乡

我是农村人,玩着泥巴长大。长大后身在异乡多年,浏览外乡风景时总会想起相似的家乡之景。随着年龄的增长,思乡之情亦会增多,也许 的更是儿时的感觉和回忆,炊烟袅袅,儿时伙伴吧。

夏日清晨放牛光景



欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦,代码已上传至QQ群文件夹,欢迎下载。

群二维码:

老俊俊微信:


知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!



 往期回顾 




跟着 Genome Research 学画图: 等高线散点图

基因 hclust 聚类并绘制聚类热图和表达趋势图

设置 wsl 子系统的使用线程和内存

使用 Mfuzz 包聚类分析并自定义绘图

clusterProfiler 的 shiny 版上线了!

听说你想把 spearman 和 pearson 展示在一张相关性热图里?

snakemake 进阶用法

听说你离成功还差个对象?

snakemake 初探

批量下载 starBase 数据库查询信息

◀...

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存