snakemake[3:一个简单的WGBS流程]

参考DNA甲基化数据分析全流程
搭建了一个简单的管道:
先上代码

samples:
    cd133/a: SAM/cd133/a.sam
    cd133/b: SAM/cd133/b.sam
    cd133/c: SAM/cd133/c.sam
    cd34/a: SAM/cd34/d.sam
    cd34/a: SAM/cd34/e.sam
    cd34/a: SAM/cd34/f.sam
    
configfile:"config.yaml"

rule all:
    input:
        expand("SAM/{sample}/bedGraph",group=config["samples"])

def get_input_sam(wildcards):
    return config["samples"][wildcards.sample]

    
rule samToBam:
    input:
        get_input_sam
    output:
        "SAM/{sample}.bam"
    shell:
        "samtools view -S -b -o {output} {input}"

rule bamToSortBam:
    input:
        "SAM/{sample}.bam"
    output:
        "SAM/{sample}.sort.bam"
    shell:
        "samtools sort -m 2000000000 {input} {output}"

rule duplication:
    input:
        "SAM/{sample}.sort.bam"
    output:
        "SAM/{sample}.dup.bam"
    shell:
        "sambamba markdup -t 5 {input} {output} 2> markdup_report.txt"

rule getBadGraph:
    input:
        "SAM/{sample}.dup.bam"
    output:
        "SAM/{group}/bedGraph"
    shell:
        """
        MethylDackel extract /home/data/GRCh37.primary_assembly.genome.fa {input} -o {output}
        MethylDackel extract /home/data/GRCh37.primary_assembly.genome.fa {input} -o {output} --CHG
        MethylDackel extract /home/data/GRCh37.primary_assembly.genome.fa {input} -o {output} --CHH
        """

1 路径

我的数据有很多的样本,每个样本里也有细分的数据。
刚开始想通过嵌套,先获得groups里的group,然后利用group的名字建立键值对对下一级目录进行访问的,但搞了一晚上发现好像有点难,于是直接在samples的键前面加上了对应的目录。
如果有大佬看到了怎么嵌套或有更简洁的方法求指路!

2 流程

.sam—samtools—>.bam
.bam—samtools—>.sort.bam
.sort.bam—sambamba—>.dum.bam
.dum.bam—MethylDackel—>bedGraph

3 小结

  • 在想使用多行shell命令可以使用"""进行标注
  • get_input_sam(wildcards)函数的实际意义是返回键值对中的值(路径)
  • all或者最后一步中利用expand定义输出文件的通配符内容

4 文件输入

看了一篇文章里面提到了利用文件建立数据索引的方法。

首先创建一个csv文件

idname
1/home/…/…sam
2/home/…/…sam
import pandas as pd
samples_table = pd.read_csv("index.csv").set_index("id", drop=False)
print(samples_table.loc[1,"path"])
print(samples_table.index)
rule all:
    input:
         "results/awesome2"
         
def sam_from_sample(wildcards):
  return samples_table.loc[int(wildcards.sample), "path"]

rule a:
    input: 
        sam_from_sample
    output:
        "results/awesome/{sample}_R1.fq"
    shell:
        "echo "
        
rule b:
    input: 
        expand("results/awesome/{sample}_R1.fq",sample=samples_table.index)
    output:
        "results/awesome2"
    shell:
        "echo "

※利用all才可以串联规则a,b
samples_table.loc[int(wildcards.sample), "path"]返回地址
sample=samples_table.index返回索引号
在b中通过id确定a的输出文件然后自动获得对应地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值