我使用snakemkae创建一个管道来按chr分割bam,但是我遇到了一个问题,输入文件中的通配符无法从输出文件中确定:"OutputDir"有谁能帮我弄明白吗?
if config['ref'] == 'hg38':
ref_chr = []
for i in range(1,23):
ref_chr.append('chr'+str(i))
ref_chr.extend(['chrX','chrY'])
elif config['ref'] == 'b37':
ref_chr = []
for i in range(1,23):
ref_chr.append(str(i))
ref_chr.extend(['X','Y'])
rule all:
input:
expand(f"{OutputDir}/split/{name}.{{chr}}.bam",chr=ref_chr)
rule minimap2:
input:
TargetFastq
output:
Sortbam = "{OutputDir}/{name}.sorted.bam",
Sortbai = "{OutputDir}/{name}.sorted.bam.bai"
resources:
mem_mb = 40000
threads: nt
singularity:
OntSoftware
shell:
"""
minimap2 -ax map-ont -d {ref_mmi} --MD -t {nt} {ref_fasta} {input} | samtools sort -O BAM -o {output.Sortbam}
samtools index {output.Sortbam}
"""
rule split_bam:
input:
rules.minimap2.output.Sortbam
output:
splitBam = expand(f"{OutputDir}/split/{name}.{{chr}}.bam",chr=ref_chr),
splitBamBai = expand(f"{OutputDir}/split/{name}.{{chr}}.bam.bai",chr=ref_chr)
resources:
mem_mb = 30000
threads: nt
singularity:
OntSoftware
shell:
"""
samtools view -@ {nt} -b {input} {chr} > {output.splitBam}
samtools index -@ {nt} {output.splitBam}
"""
我改变了通配符{outputdir},但这没有帮助。
expand(f"{OutputDir}/split/{name}.{{chr}}.bam",chr=ref_chr),
splitBamBai = expand(f"{OutputDir}/split/{name}.{{chr}}.bam.bai",chr=ref_chr),
这几行有几点注释:
- 使用双括号
{{chr}}
转义chr。这意味着您不希望扩展chr,我怀疑这是正确的。我猜你想要这样的东西:
expand("{{OutputDir}}/split/{{name}}.{chr}.bam",chr=ref_chr),
- 规则
minimpa2
不包含{chr}
通配符,因此您得到的错误。
顺便说一句,当您在同一规则中创建bam文件及其索引时,您可以获得索引文件的时间戳比bam文件本身更早。稍后会从samtools/bcftools生成虚假的警告。请参阅https://github.com/snakemake/snakemake/issues/1378(不确定是否已修复)。