如何解决在 Snakemake 中使用 cutadapt 适配器文件输入
我是 Snakemake 的新手,正在尝试移植我的 BASH 代码以使用 Snakemake 规则。免责声明,我试图在 shell 块中使用带有头文件和适配器序列的 fasta 文件解复用带有 cutadapt 的 fastq 文件。加载与 fasta 标头匹配的样本名称,并在规则 all 中将其指定为通配符:
rule all:
input:
expand([os.path.join(outDir,"reads_trim.fq"),os.path.join(outDir,"{name}.tmp")],name=samples_list)
reads_trim 文件是一个标准的、连接的 fastq 文件(来自 Nanopore 测序)。我的问题是这个规则运行了 12 次,因为我的“samples_list”中有 12 个样本。然后我得到 12 个输出文件,正如我应该的那样,命名正确,但它们都包含完全相同的内容。我想知道如果它只运行一次,输出是否正确,但还没有找到强制这种行为的方法。
rule demultiplex:
""" Demultiplex Nextera-styled barcodes using the compiled barcode fasta file """
input:
barcodeFile=os.path.join(outDir,"barcodes_used.fasta"),fastqFile=os.path.join(outDir,"reads_trim.fq")
output: os.path.join(outDir,"{name}.tmp")
message: "Demultiplexing trimmed reads"
log: "logs/cutadapt/demultiplexing_{name}.log"
shell:
"""
cutadapt -e 0.20 -O 10 -m 15 -M 15 -g file:{input.barcodeFile} -o {output} {input.fastqFile}
"""
知道如何获得一个文件进入的标准行为,x 个文件以不同的输出(找到适配器的位置)吗?
解决方法
我不熟悉用于解复用的 cutadapt,但从快速浏览 docs,我 认为你想要这些东西(我简化了你的原始代码):
rule all:
input:
expand("{name}.tmp",name= samples_list),rule demultiplex:
input:
barcodeFile= "barcodes_used.fasta",fastqFile= "reads_trim.fq"
output:
expand("{name}.tmp",name=samples_list),shell:
r"""
cutadapt ... -g file:{input.barcodeFile} -o {{name}}.tmp {input.fastqFile}
"""
如果输入 reads_trim.fq
一次生成所有 12 个输出文件,则
您需要在 output
指令中列出所有 12 个输出。我使用了
expand()
函数。注意 {{name}}.tmp
有双花括号
告诉snakemake它不是通配符,但它的读法完全相同
{name}
(根据 cutadapt 文档,如果我没看错的话)。
顺便问一下,你确定 cutadapt 可以解复用 Nanopore 吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。