Shell 是否可以使用不同的路径/通配符定义snakemake输入规则
我想知道是否可以定义一个依赖于不同通配符的输入规则 为了详细说明,我使用qsub在不同的fastq文件上运行这个Snakemake管道,qsub将每个作业提交到不同的节点:Shell 是否可以使用不同的路径/通配符定义snakemake输入规则,shell,bioinformatics,snakemake,qsub,Shell,Bioinformatics,Snakemake,Qsub,我想知道是否可以定义一个依赖于不同通配符的输入规则 为了详细说明,我使用qsub在不同的fastq文件上运行这个Snakemake管道,qsub将每个作业提交到不同的节点: 原始fastq上的fastqc-对其他作业没有下游依赖性 适配器/质量修剪以生成修剪过的fastq 经过修剪的fastq(步骤2的输出)上的fastqc_,且无下游依赖关系 修剪后的fastq上的star rsem管道(以上步骤2的输出) rsem和tximport(步骤4的输出) 运行多重质量控制 MultiQC--在结果
rule fastqc:
input: "raw_fastq/{sample}.fastq"
output: "results/fastqc/{sample}_fastqc.zip"
log: "results/logs/fq_before/{sample}.fastqc.log"
params: ...
shell: ...
步骤2-bbduk
rule bbduk:
input: R1 = "raw_fastq/{sample}.fastq"
output: R1 = "results/bbduk/{sample}_trimmed.fastq",
params: ...
log: "results/logs/bbduk/{sample}.bbduk.log"
priority:95
shell: ....
第3步-快速质量控制
rule fastqc_after:
input: "results/bbduk/{sample}_trimmed.fastq"
output: "results/bbduk/{sample}_trimmed_fastqc.zip"
log: "results/logs/fq_after/{sample}_trimmed.fastqc.log"
priority: 70
params: ...
shell: ...
步骤4-星形对齐
rule star_align:
input: R1 = "results/bbduk/{sample}_trimmed.fastq"
output:
out_1 = "results/bam/{sample}_Aligned.toTranscriptome.out.bam",
out_2 = "results/bam/{sample}_ReadsPerGene.out.tab"
params: ...
log: "results/logs/star/{sample}.star.log"
priority:90
shell: ...
步骤5-rsem_标准
rule rsem_norm:
input:
bam = "results/bam/{sample}_Aligned.toTranscriptome.out.bam"
output:
genes = "results/quant/{sample}.genes.results"
params: ...
threads = 16
priority:85
shell: ...
步骤6-rsem_模型
rule rsem_model:
input: "results/quant/{sample}.genes.results"
output: "results/quant/{sample}_diagnostic.pdf"
params: ...
shell: ...
步骤7-tximport_rsem
rule tximport_rsem:
input: expand("results/quant/{sample}_diagnostic.pdf",sample=samples)
output: "results/rsem_tximport/RSEM_GeneLevel_Summarization.csv"
shell: ...
步骤8-多重质量控制
rule multiqc:
input: expand("results/quant/{sample}.genes.results",sample=samples)
output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
log: "results/log/multiqc"
shell: ...
如果希望规则
multiqc
仅在fastqc
完成后发生,可以将fastqc
的输出添加到multiqc
的输入中:
rule multiqc:
input:
expand("results/quant/{sample}.genes.results",sample=samples),
expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
log: "results/log/multiqc"
shell: ...
或者,如果您需要能够在shell
部分中参考rsem\u norm
的输出:
rule multiqc:
input:
rsem_out = expand("results/quant/{sample}.genes.results",sample=samples),
fastqc_out = expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
log: "results/log/multiqc"
shell: "... {input.rsem_out} ..."
在您的一条评论中,您写道:
MultiQC需要目录作为输入-我在shell命令中为它指定“results”目录
如果我理解正确,这意味着
results/quant/{sample}.genes.results
是目录,而不是普通文件。如果是这种情况,您应该确保没有下游规则在这些目录中写入文件。否则,在输出multiqc
后,目录将被视为已更新,并且每次运行管道时都会重新运行multiqc
。我不太理解您的问题。你说步骤1和步骤3没有下游依赖关系,但你不想让MultiQC在它们完成之前运行?这听起来像是一种依赖。如果这些规则创建MultiQC所需的输出,则应将这些输出文件指定为MultiQC规则的输入文件。如果没有,那么在执行MultiQC步骤之前,不应该有理由需要完成这些步骤。您可能至少应该显示当前的MultiQC
规则的input
部分和fastqc
规则的output
部分。@Colin dag/png列出了当前的依赖项。如果我需要进一步解释,请告诉我。现在,我告诉“rulemultiqc”等待“rsem_norm”的输出(它将数据输出到results/quant/{sample})。我希望multiqc还可以等待“fastqc”和“fastqc_after”的输出,这两个输出分别输出到“results/fastqc”和“results/bbduk”。这就是我需要帮助的地方——因此首先是最初的问题。正如您在这里看到的,重要的目录是“results”目录及其子文件夹-MultiQC将在这个顶级目录上工作。@bli我为我的问题添加了不同的规则。MultiQC需要目录作为输入-我在shell命令中为它指定“results”目录。所有步骤的日志文件都位于“结果”下的不同文件夹/子文件夹中,MultiQC能够深入所有步骤并提供报告。这里发生的事情是这样的:由于每个作业都由qsub提交到不同的节点,所以当前面的步骤(我编码的方式)完成时,MultiQC步骤完成运行。。这就引出了我最初的问题:我如何才能为MultiQC规则提供3个不同的文件夹路径作为输入谢谢@bli您的解决方案奏效了。我最初在“没有扩展”的情况下尝试了它,但它不起作用。最初我的multiqc
输入为:'results/quant/{sample}.genes.results'
,'results/fastqc/{sample}\u fastqc.zip'
——然而,使用您建议的扩展方式帮助解决了问题results/quant/{sample}.genes.results
是实际的文件-因此,如果我将samsake、sampleB、sampleC作为我的起始材料,我将得到results/quant/samsack.genes.results、results/quant/sampleB.genes.results、results/quant/sampleC.genes.results作为输出