在 Snakemake 中使用 cutadapt 适配器文件输入
Using cutadapt adapter file inputs in Snakemake
我是 Snakemake 的新手,正在尝试移植我的 BASH 代码以使用 Snakemake 规则。免责声明,我正在尝试使用带有 headers 和适配器序列的 fasta 文件,在 shell 块中对带有 cutadapt 的 fastq 文件进行多路分解。匹配 fasta headers 的样本名称被加载并指定为通配符规则 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吗?
我是 Snakemake 的新手,正在尝试移植我的 BASH 代码以使用 Snakemake 规则。免责声明,我正在尝试使用带有 headers 和适配器序列的 fasta 文件,在 shell 块中对带有 cutadapt 的 fastq 文件进行多路分解。匹配 fasta headers 的样本名称被加载并指定为通配符规则 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吗?