gpt4 book ai didi

python - 使用 Snakemake 的分组样本每组单个输出文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:58 24 4
gpt4 key购买 nike

我正在尝试编写一个 snakemake 管道来处理分成多个组的样本,每个组需要一个摘要文件。例如,样本划分如下:

Group 1:
Sample 1
Sample 2
Group 2:
Sample 3
Sample 4

每个样本都使用 bedtools 为每个样本生成一个输出文件。接下来,我需要对每个Group收集的样本进行分组层面的总结。一个简短的 snakemake 文件如下所示:

 rule intersect:
input:
bam = join('{group}','{sample}.bam'),
reg_bed = join('{group}', 'region.bed')
output:
reg_intersect = join('{group}', '{sample}.intersect.bed')
shell:
'bedtools intersect -wa -wb -a {input.reg_bed} -b {input.bam} > {output.reg_intersect}'

rule aggregate:
input:
rules.interesect.output
output:
join('{group}','summary_stats.csv')
shell:
touch(join('{group}','summary_stats.csv'))
#this would be a call to a python function that operates on all the output files to generate a single file

我收到投诉,通配符在输入和输出之间不一致(输入包含 {group} 和 {sample},而输出只有 {group}。我试过使用 expand() 但我必须包括组和值示例,并且示例是不可能的,因为它取决于组。

欢迎提出任何建议。

最佳答案

就像@Maarten-vd-Sande 所说的那样,最好的方法是使用输入函数获取聚合 规则中某个组的所有样本。

samplesInGroups = {"group1":["sample1","sample2"],"group2":["sample3","sample4"]}

def getSamplesInGroup(wildcards):
return [join(wildcards.group,s+".intersect.bed") for s in samplesInGroups[wildcards.group]]

rule all:
input: expand("{group}/summary_stats.csv",group=list(samplesInGroups.keys()))

rule intersect:
input:
bam = join('{group}','{sample}.bam'),
reg_bed = join('{group}', 'region.bed')
output:
reg_intersect = join('{group}', '{sample}.intersect.bed')
shell:
'bedtools intersect -wa -wb -a {input.reg_bed} -b {input.bam} > {output.reg_intersect}'

rule aggregate:
input:
getSamplesInGroup
output:
join('{group}','summary_stats.csv')
shell:
"python ... {input}"

关于python - 使用 Snakemake 的分组样本每组单个输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57484960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com