snakemake: ввод правил с другим шаблоном - PullRequest
1 голос
/ 21 февраля 2020

Я новичок в snakemake и хотел бы использовать следующее правило:

input_path = config["PATH"]
samples = pd.read_csv(config["METAFILE"], sep = '\t', header = 0)['sample']

rule getPaired:
        output:
            fwd = temp(tmp_path + "/reads/{sample}_fwd.fastq.gz"),
            rev = temp(tmp_path + "/reads/{sample}_rev.fastq.gz")
        params:
            input_path = input_path
        run:
            shell("scp -i {params.input_path}/{wildcards.sample}_*1*.f*q.gz {output.fwd}"),
            shell("scp -i {params.input_path}/{wildcards.sample}_*2*.f*q.gz {output.rev}")

Входные файлы имеют разные шаблоны:

  1. {sampleID} _R [1 -2] _001.fq.gz (например: 2160_J15_S480_R1_001.fastq.gz)
  2. {sampleID} _ [1-2] .fq.gz (например: SRX000001_1.fq.gz)

Правило getPaired работает для ввода, например {sample} _ [1-2] .fq.gz , но не для второго шаблона.

Что я делаю не так?

1 Ответ

1 голос
/ 21 февраля 2020

Вы должны использовать функции ввода . Я сделал пример, который не совсем то, что вам нужно, но я думаю, что он должен ясно показать, чего вы хотите достичь:

paths = {'sample1': '/home/jankees/data',
         'sample2': '/mnt/data',
         'sample3': '/home/christina/fastq'}

extensions = {'sample1': '.fq.gz',
              'sample2': '.fq.gz',
              'sample3': '.fastq.gz'}

def get_input(wildcards):
    input_file = paths[wildcards.sample] + "/read/" + wildcards.sample + extensions[wildcards.sample]
    return input_file

rule all:
    input:
        ["sample1_trimmed.fastq.gz", 
         "sample2_trimmed.fastq.gz", 
         "sample3_trimmed.fastq.gz"]

rule trim:
    input:
        get_input
    output:
        "{sample}_trimmed.fastq.gz"
    shell:
        "touch {output}"
...