🔧 tool

Snakemake工作流

**基本语法:** Snakemake的核心是定义规则(rule),每个规则包含输入(input)、输出(output)和命令(shell/run/script)。 ```python # Snakefile # 定义样本列表 SAMPLES = ["sample1", "sample2", "sample3"] # 目标规则:定义最终需要生成的文件 rule all: input:...

📖 定义

基本语法:
Snakemake的核心是定义规则(rule),每个规则包含输入(input)、输出(output)和命令(shell/run/script)。

# Snakefile
# 定义样本列表
SAMPLES = ["sample1", "sample2", "sample3"]
# 目标规则:定义最终需要生成的文件
rule all:
    input:
        "results/counts_matrix.txt",
        "results/multiqc_report.html"
# 质量控制规则
rule fastqc:
    input:
        "data/{sample}_R1.fastq.gz",
        "data/{sample}_R2.fastq.gz"
    output:
        html_r1="qc/{sample}_R1_fastqc.html",
        zip_r1="qc/{sample}_R1_fastqc.zip",
        html_r2="qc/{sample}_R2_fastqc.html",
        zip_r2="qc/{sample}_R2_fastqc.zip"
    params:
        outdir="qc"
    threads: 2
    shell:
        "fastqc -t {threads} -o {params.outdir} {input}"
# 序列比对规则
rule star_align:
    input:
        r1="data/{sample}_R1.fastq.gz",
        r2="data/{sample}_R2.fastq.gz",
        index="reference/STAR_index/Genome"
    output:
        bam="aligned/{sample}.sorted.bam",
        bai="aligned/{sample}.sorted.bam.bai"
    params:
        prefix="aligned/{sample}_",
        index_dir="reference/STAR_index"
    threads: 8
    shell:
        """
        STAR --runThreadN {threads} \
             --genomeDir {params.index_dir} \
             --readFilesIn {input.r1} {input.r2} \
             --readFilesCommand zcat \
             --outFileNamePrefix {params.prefix} \
             --outSAMtype BAM SortedByCoordinate
        mv {params.prefix}Aligned.sortedByCoord.out.bam {output.bam}
        samtools index {output.bam}
        """
# 表达量定量
rule featurecounts:
    input:
        bams=expand("aligned/{sample}.sorted.bam", sample=SAMPLES),
        gtf="reference/genes.gtf"
    output:
        counts="results/counts_matrix.txt"
    threads: 4
    shell:
        "featureCounts -T {threads} -a {input.gtf} -o {output.counts} {input.bams}"
# MultiQC汇总
rule multiqc:
    input:
        expand("qc/{sample}_{read}_fastqc.zip", sample=SAMPLES, read=["R1", "R2"])
    output:
        "results/multiqc_report.html"
    shell:
        "multiqc qc/ -o results/"

运行Snakemake:

# 预览(dry-run)
snakemake -n
# 本地运行(使用4个核)
snakemake --cores 4
# 强制重新运行
snakemake --cores 4 --forceall
# 只运行特定规则
snakemake --cores 4 featurecounts
# 使用Conda环境(自动为每个规则创建环境)
snakemake --cores 4 --use-conda
# 集群提交(SLURM)
snakemake --cluster "sbatch --time={resources.time} --mem={resources.mem} --cpus-per-task={threads}" \
          --jobs 10