如何解决Snakemake在新规则中指定新通配符
我有输入文件:
Bob_1.fastq.gz
Bob_2.fastq.gz
Bob_3.fastq.gz
Bob_4.fastq.gz
Ron_1.fastq.gz
Ron_2.fastq.gz
Ron_3.fastq.gz
Ron_4.fastq.gz
我正在一个蛇文件中运行多路分解和修剪步骤,如下所示:
workdir: "/path/to/dir/"
(SAMPLES,) =glob_wildcards('/path/to/dir/raw/{sample}.fastq.gz')
rule all:
input:
expand("demulptiplex/{sample}.fastq.gz",sample=SAMPLES),expand("trimmed/{sample}.trimmed.fastq.gz",sample=SAMPLES)
rule sabre:
input:
infile="/path/to/dir/raw/{sample}.fastq.gz",barcodefile= "files/{sample}.txt"
output:
unknownfile=temp("demulptiplex/unknown_barcode_{sample}.fastq.gz"),shell:
"""
/Tools/sabre-master2/sabre se -f {input.infile} -b {input.barcodefile} -u {output.unknownfile}
"""
rule trimmomatic_se:
input:
r="{sample}.fastq.gz"
output:
r="trimmed/{sample}.trimmed.fastq.gz"
threads: 10
shell:
"""java -jar /Tools/Trimmomatic-0.36/trimmomatic-0.36.jar SE -threads {threads} {input.r} {output.r} ILLUMINACLIP:/Tools/Trimmomatic-0.36/adapters/TruSeq3-SE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36"""
解复用输出文件如下:
Bob_1_CL1.fastq.gz.... Bob_1_CL345.fastq.gz
Bob_2_CL1.fastq.gz.... Bob_1_CL248.fastq.gz
Ron_1_dad1.fastq.gz... Ron_1_dad67.fastq.gz
以此类推
因此,如果我未指定demultiplex
输出文件,程序将自行创建它。我的问题是如何在下一步修剪步骤中从先前规则的输出中指定/引入新的wildcard
,因为wildcards
与现在的初始sample
不同。
解决方法
通配符只需要在规则中保持一致,而不必在整个工作流程中保持一致。这里的问题是您有一条规则会生成“未知”输出,您需要对其进行进一步处理。为此,您需要使用checkpoints。
通读关于聚合的第二段代码。您的检查点将是多路分解的,如果您没有其他步骤,则all
将是您调用checkpoints.demultiplex.get
的聚合步骤。如果您在stackoverflow上搜索检查点,您会发现很多例子。一开始很难使用!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。