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: