跳转至

bam转fq

  • 流程化后,每次进行任务提交即可

流程

# 1.Git拉取项目
git clone http://git.iomics.pro/yhfu/IAnimal_Pipeline.git

# 2.修改yaml文件
cp ~/02Software/IAnimal_Pipeline/workflow/bam2fq.yaml ./

# 3.生成Snakemake文件
python3 ~/02Software/IAnimal_Pipeline/pipeline_builder.py -c bam2fq.yaml

# 4.提交任务(mu01上slurm提交)
snakemake \
         --executor cluster-generic \
         --cluster-generic-submit-cmd "sbatch --job-name={rule} --partition=cpu --cpus-per-task={threads} --mem={resources.mem_mb} --output=jobname_%j.out --nodelist=cu05"\
         --keep-going --jobs 1
# 删除中间文件:排序后的bam文件
find 输出文件目录 -name "*.bam" -exec rm {} \;

注意:安装完以后,需要在conf/config.py中,配置SOFTEWARE,以让脚本能够识别

...

## 配置软件(全路径或者)
SOFTEWARE = {
    ...
    "samtools": "samtools",
    "sambamba": "sambamba",
}

...

更快的处理 bam 数据—Sambamba-腾讯云开发者社区-腾讯云 (tencent.com)

yaml 文件

  • 实例。真实使用的文件
  • 本例中,进行了 bam 排序和 bam 转 fq
# 需要导入的模块
required_rules:
  - bam2fq

# 通配符配置 (用于自动解析 output, 注意变量名称务必为通配符+s)
wildcards:
  samples: /public/idata/tmp/conversion/sjwang/test/*

# 共用配置
global_params:
  work_dir: /public/idata/tmp/conversion/sjwang # 设置工作目录
  script_path: auto # auto 为自动推断
  data_dir: /public/idata/tmp/conversion/sjwang/test
  threads: 8

# rules 特有的配置
rules:
  bam2fq:
    input:
      sample:
        value: "{data_dir}/{sample}"
        args: -r
    output: # target rule 的最终输出
      fq_gz:
        value: directory(f"{work_dir}/bam2fastq/{{sample}}") # 只需要保证有sample名的目录即可,然后让Snakemake依据这个来简单判断是否执行成功;没有必要指定具体文件名,因为构造文件名在脚本中完成
        ignore: True # 该参数不会解析到命令行中
    resources:
      mem_mb:
        value: threads * 1024
    params:
      outdir:
        value: f"{work_dir}"
        args: -o
      threads:
        value: threads
        args: -t
      skip_sort: #控制是否跳过排序
        value: f"" # 不可注释,不可修改,因为只要使用命令行中有--skip_sort(后面不带任何参数值)就是跳过排序
        args: "--skip_sort" # 默认使用--skip_sort,以跳过排序。若需要排序,将 args 设置为 None,或 注释掉args行(可同时ignore掉skip_sort参数)[推荐]
        # ignore: True  # 注释掉args行的时候可启用,以让Snakemake的命令行参数丢弃 {params.skip_sort},好看些
    threads:
      value: threads
    shell: # 该设计无法推断多条命令,需要自定义
      cmd_template: python3 {script_path}/bam2fastq/bam2fq.py
      cmd_args: auto # 自动推断参数,并添加到 cmd_template 后面; 如果不为 auto, 则会忽略 cmd_template,直接使用 cmd_args(即这里手动写完整的命令行参数)
    chain:
      next: None

Snakemake 文件

  • 实例。真实生成、使用的文件
  • shell 中没有--skip_sort参数,说明会先对 bam 排序,再转 fq
work_dir='/public/idata/tmp/conversion/sjwang'
script_path='/public/home/idata/02Software/IAnimal_Pipeline/scripts'
data_dir='/public/idata/tmp/conversion/sjwang/unsupported_filetype'
threads=64

SAMPLES=["CRR025299", "CRR025300", "CRR025301", "CRR025302", "CRR025303", "CRR025304", "CRR025305"]


rule all:
    input:
        f"{work_dir}/sra2fq/CRR025299",
        f"{work_dir}/sra2fq/CRR025300",
        f"{work_dir}/sra2fq/CRR025301",
        f"{work_dir}/sra2fq/CRR025302",
        f"{work_dir}/sra2fq/CRR025303",
        f"{work_dir}/sra2fq/CRR025304",
        f"{work_dir}/sra2fq/CRR025305"

rule srq2fq:
    input:
        sample=f"{data_dir}/{{sample}}",
    output:
        fq_gz=directory(f"{work_dir}/sra2fq/{{sample}}"),
    resources:
        mem_mb=threads*2048,
    params:
        outdir=f"{work_dir}",
        threads=threads,
        temp=f"/tmp",
    threads: threads
    shell:
        'python3 {script_path}/bam2fastq/bam2fq.py -r {input.sample} -t {params.threads} -o {params.outdir}'
本文阅读量  次
本站总访问量  次
Authors: wangshangjian