У меня есть полностью функциональный рабочий процесс Snakemake, но я хотел бы добавить правило, в котором входные переменные записываются как новые строки во вновь созданном текстовом файле вывода. Чтобы кратко подвести итог, я включил соответствующий код ниже:
OUTPUTDIR = config["outputDIR"]
SAMPLEID = list(SAMPLE_TABLE.Sample_Name)
# Above 2 lines are functional in other parts of script.
rule all:
input:
manifest = OUTPUTDIR + "/manifest.txt"
rule write_manifest:
input:
sampleid = SAMPLEID,
loc_r1 = expand("{base}/trimmed/{sample}_1.trimmed.fastq.gz", base = OUTPUTDIR, sample = SAMPLELIST),
loc_r2 = expand("{base}/trimmed/{sample}_2.trimmed.fastq.gz", base = OUTPUTDIR, sample = SAMPLELIST)
output:
OUTPUTDIR + "/manifest.txt"
shell:
"""
echo "{input.sampleid},{input.loc_r1},forward" >> {output}
echo "{input.sampleid},{input.loc_r2},reverse" >> {output}
"""
Моя проблема в том, что Snakemake читает файлы, и мне нужно, чтобы он напечатал путь к файлу или идентификатор образца, который он обнаруживает. Помогите с синтаксисом?
Желаемый выходной файл должен выглядеть так:
depth1,$PWD/raw_seqs_dir/Test01_full_L001_R1_001.fastq.gz,forward
depth1,$PWD/raw_seqs_dir/Test01_full_L001_R2_001.fastq.gz,reverse
depth2,$PWD/raw_seqs_dir/Test02_full_L001_R1_001.fastq.gz,forward
depth2,$PWD/raw_seqs_dir/Test02_full_L001_R2_001.fastq.gz,reverse
Пытаюсь написать это с помощью эха.
Сообщение об ошибке:
Building DAG of jobs...
MissingInputException in [write_manifest]:
Missing input files for rule write_manifest:
sample1
sample2
sample3
ОБНОВЛЕНИЕ: добавив sampleid в params:
rule write_manifest:
input:
loc_r1 = expand("{base}/trimmed/{sample}_{suf}_1.trimmed.fastq.gz", base = SCRATCHDIR, sample = SAMPLE$
loc_r2 = expand("{base}/trimmed/{sample}_{suf}_2.trimmed.fastq.gz", base = SCRATCHDIR, sample = SAMPLE$
output:
OUTPUTDIR + "/manifest.txt"
params:
sampleid = SAMPLEID
shell:
"""
echo "{params.sampleid},{input.loc_r1},forward" >> {output}
echo "{params.sampleid},{input.loc_r2},reverse" >> {output}
"""
Мой вывод выглядел так (что неверно)
sample1 sample2 sample3,$PWD/tmp/dir/sample1.fastq $PWD/tmp/dir/sample2.fastq $PWD/tmp/dir/sample3.fastq,forward
sample1 sample2 sample3,$PWD/tmp/dir/sample1.fastq $PWD/tmp/dir/sample2.fastq $PWD/tmp/dir/sample3.fastq,reverse
Это все еще не то, что я хочу, мне нужно, чтобы он выглядел так, как показано ниже. Могу я написать так, чтобы Snakemake перебирал каждый сэмпл / ввод / параметры? Желаемый выходной файл должен выглядеть так:
depth1,$PWD/raw_seqs_dir/Test01_full_L001_R1_001.fastq.gz,forward
depth1,$PWD/raw_seqs_dir/Test01_full_L001_R2_001.fastq.gz,reverse
depth2,$PWD/raw_seqs_dir/Test02_full_L001_R1_001.fastq.gz,forward
depth2,$PWD/raw_seqs_dir/Test02_full_L001_R2_001.fastq.gz,reverse
My issue is that Snakemake is reading in files, and I need it to print the file path or sample id that is it detecting instead.
- Не могли бы вы пояснить это утверждение? - person Manavalan Gajapathy   schedule 06.03.2019{output}
файл этого правила уже существует, и поэтому snakemake пропустит его. В таком случае вам пригодится вариант--forcerun
. - person Manavalan Gajapathy   schedule 07.03.2019