Snakemake分组输出

时间:2019-02-13 15:01:03

标签: snakemake

我对我的其中一项规则的RaisedButton有相当复杂的要求。
我在CSV文件(output)中有一些示例,其中包含如下嵌套信息:

samples.csv

我将它们作为熊猫数据框存储在region,run_id,sample_id A,1,150 A,3,111 A,3,145 A,3,153 B,4,105 B,4,107 中。

Snakefile

我有一条规则samples = pd.read_csv("samples.csv").set_index( ["region", "run_id", "sample_id"], drop=False ) ,它接收一个fastq文件,该文件是demultiplexsample_id的所有run_id读取的组合

region

此多路分解规则的作用是将这个合并的fastq文件放入并为该rule demultiplex: input: "analysis/{region}/{run}/basecalled.fastq" 中的每个sample_id(条形码)返回一个fastq文件。

所以我在这里遇到的困难是如何使run_id映射到output

在正在运行的示例中,我实际上想要的是input规则,该规则对每个有效(demultiplexregion)对都执行一次,但是会产生多个文件。因此所需的分组将如下所示:

run_id

因此,该示例中的规则input: "analysis/A/1/basecalled.fastq" output: ["analysis/A/1/demultiplex/150.fastq"] input: "analysis/A/3/basecalled.fastq" output: ["analysis/A/3/demultiplex/111.fastq", "analysis/A/3/demultiplex/145.fastq", "analysis/A/3/demultiplex/153.fastq"] input: "analysis/B/4/basecalled.fastq" output: ["analysis/B/4/demultiplex/105.fastq", "analysis/B/4/demultiplex/107.fastq"] 将运行3次。

1 个答案:

答案 0 :(得分:0)

一种解决方案可能是为每个需要多路分解的fastq文件触摸一个文件。在下面的代码中,假设可以从样本表中的信息重构主fastq文件的路径(如果我理解正确的话,应该是这种情况):

import pandas as pd

samples = pd.read_csv("samples.csv").set_index(
    ["region", "run_id", "sample_id"], drop=False
)

fastq= samples[['region', 'run_id']].drop_duplicates()

rule all:
    input:
        expand('analysis/{region}/{run}/demultiplex/demux.done', zip, \
            region= list(fastq['region']), run= list(fastq['run_id']))

rule demultiplex:
    input:
        "analysis/{region}/{run}/basecalled.fastq",
    output:
        touch('analysis/{region}/{run}/demultiplex/demux.done'),
    shell:
        r"""    
        demux {input} 
        """