Я новичок в змейке. Я пытаюсь применить это правило, но у меня возникли проблемы.
SOAPnuke принимает входной файл считывания и обратного чтения в качестве входных данных, фильтрует файлы чтения и вывода «Clean_DP8400007518BR_L01_557_1.fq.gz» и «Clean_DP8400007518BR_L01_557_2.fq.gz». .
SOAPnuke -1 DP8400007518BR_L01_557_1.fq.gz -2 DP8400007518BR_L01_557_1.fq.gz
Snakemake жалуется, что «в качестве функций можно указывать только входные файлы» в строке оболочки.
Есть предложения, чтобы это исправить? Спасибо.
"config.yaml" похож на это.
outdir: ./test
SOAPnuke: /path/to/SOAPnuke
filter:
l: 10
rate: 0.1
m: 20
n: 0.001
Q: 2
f: AAGTCGGAGGCCAAGCGGTCTTAGGAAGACAA
r: AAGTCGGATCGTAGCCATGTCGTTCTGTGAGCCAAGGAGTTG
samples:
/path/to/A: sample_A
/path/to/B: sample_A
/path/to/C: sample_B
Под путями есть несколько файлов fq.gz, принадлежащих соответствующему образцу. Дерево каталогов выглядит следующим образом.
|-- A
| |-- DP8400007518BR_L01_557_1.fq.gz
| |-- DP8400007518BR_L01_557_2.fq.gz
| |-- DP8400007518BR_L01_558_1.fq.gz
| |-- DP8400007518BR_L01_558_2.fq.gz
| |-- DP8400007518BR_L01_559_1.fq.gz
| |-- DP8400007518BR_L01_559_2.fq.gz
| |-- DP8400007518BR_L01_560_1.fq.gz
| `-- DP8400007518BR_L01_560_2.fq.gz
|-- A
| |-- DP8400007587BR_L01_559_1.fq.gz
| |-- DP8400007587BR_L01_559_2.fq.gz
| |-- DP8400007587BR_L01_560_1.fq.gz
| `-- DP8400007587BR_L01_560_2.fq.gz
`-- B
|-- DP8400008089TR_L01_543_1.fq.gz
|-- DP8400008089TR_L01_543_2.fq.gz
|-- DP8400008089TR_L01_544_1.fq.gz
`-- DP8400008089TR_L01_544_2.fq.gz
Это мой snakefile
configfile: "config.yaml"
import os
outdir = os.path.abspath(config["outdir"])
def get_name(path):
samples, = glob_wildcards(path+"/{id}_1.fq.gz")
rule filter:
input:
p1 = lambda wildcards: expand("{path}/{id}_1.fq.gz", path=config["samples"].keys(), id=get_name(path)),
p2 = lambda wildcards: expand("{path}/{id}_2.fq.gz", path=config["samples"].keys(), id=get_name(path))
output:
f"{outdir}/{config['samples']}{{path}}/filter/Clean_{{id}}_1.fq.gz",
f"{outdir}/{config['samples']}{{path}}/filter/Clean_{{id}}_2.fq.gz"
params:
SOAPnuke = config["SOAPnuke"],
l = config["filter"]["l"],
rate = config["filter"]["rate"],
m = config["filter"]["m"],
n = config["filter"]["n"],
Q = config["filter"]["Q"],
f = config["filter"]["f"],
r = config["filter"]["r"]
shell:
"""
{params.SOAPnuke} filter -1 {input.p1} -2 {input.p2} -l {params.l} -q {params.q} -m {params.m} -n {params.n} -G -Q {params.Q}
-f {params.f} -r {params.r} -o f"{outdir}/{config['samples']}{{wildcards.path}}/filter/"
"""
Ожидаемый результат:
|-- A
| `-- filter
| |-- Clean_DP8400007518BR_L01_557_1.fq.gz
| |-- Clean_DP8400007518BR_L01_557_2.fq.gz
| |-- Clean_DP8400007518BR_L01_558_1.fq.gz
| |-- Clean_DP8400007518BR_L01_558_2.fq.gz
| |-- Clean_DP8400007518BR_L01_559_1.fq.gz
| |-- Clean_DP8400007518BR_L01_559_2.fq.gz
| |-- Clean_DP8400007518BR_L01_560_1.fq.gz
| |-- Clean_DP8400007518BR_L01_560_2.fq.gz
| |-- Clean_DP8400007587BR_L01_559_1.fq.gz
| |-- Clean_DP8400007587BR_L01_559_2.fq.gz
| |-- Clean_DP8400007587BR_L01_560_1.fq.gz
| `-- Clean_DP8400007587BR_L01_560_2.fq.gz
`-- B
`-- filter
|-- Clean_DP8400008089TR_L01_543_1.fq.gz
|-- Clean_DP8400008089TR_L01_543_2.fq.gz
|-- Clean_DP8400008089TR_L01_544_1.fq.gz
`-- Clean_DP8400008089TR_L01_544_2.fq.gz