Это может быть очень простой вопрос для вас, ребята, однако я только начал работать с nextflow, и мне сложно разобраться с простейшим примером.
Сначала я объясню, что я сделал, и проблему.
Цель: я стремлюсь создать рабочий процесс для моего биоинформатического анализа, как здесь (https://www.nextflow.io/example4.html)
Предыстория: я установил все необходимые пакеты, и все они работают из консоли без каких-либо ошибок.
Мой запуск: я использовал тот же скрипт, что и в примере, только заменив имена каталогов. Вот как я упорядочил каталоги
location of script
~/raman/nflow/script.nf
location of Fastq files
~/raman/nflow/Data/T4_1.fq.gz
~/raman/nflow/Data/T4_2.fq.gz
Location of transcriptomic file
~/raman/nflow/Genome/trans.fa
Сценарий
#!/usr/bin/env nextflow
/*
* The following pipeline parameters specify the refence genomes
* and read pairs and can be provided as command line options
*/
params.reads = "$baseDir/Data/T4_{1,2}.fq.gz"
params.transcriptome = "$baseDir/HumanGenome/SalmonIndex/gencode.v42.transcripts.fa"
params.outdir = "results"
workflow {
read_pairs_ch = channel.fromFilePairs( params.reads, checkIfExists: true )
INDEX(params.transcriptome)
FASTQC(read_pairs_ch)
QUANT(INDEX.out, read_pairs_ch)
}
process INDEX {
tag "$transcriptome.simpleName"
input:
path transcriptome
output:
path 'index'
script:
"""
salmon index --threads $task.cpus -t $transcriptome -i index
"""
}
process FASTQC {
tag "FASTQC on $sample_id"
publishDir params.outdir
input:
tuple val(sample_id), path(reads)
output:
path "fastqc_${sample_id}_logs"
script:
"""
fastqc "$sample_id" "$reads"
"""
}
process QUANT {
tag "$pair_id"
publishDir params.outdir
input:
path index
tuple val(pair_id), path(reads)
output:
path pair_id
script:
"""
salmon quant --threads $task.cpus --libType=U -i $index -1 ${reads[0]} -2 ${reads[1]} -o $pair_id
"""
}
Вывод:
(base) ntr@ser:~/raman/nflow$ nextflow script.nf
N E X T F L O W ~ version 22.10.1
Launching `script.nf` [modest_meninsky] DSL2 - revision: 032a643b56
executor > local (2)
executor > local (2)
[- ] process > INDEX (gencode) -
[28/02cde5] process > FASTQC (FASTQC on T4) [100%] 1 of 1, failed: 1 ✘
[- ] process > QUANT -
Error executing process > 'FASTQC (FASTQC on T4)'
Caused by:
Missing output file(s) `fastqc_T4_logs` expected by process `FASTQC (FASTQC on T4)`
Command executed:
fastqc "T4" "T4_1.fq.gz T4_2.fq.gz"
Command exit status:
0
Command output:
(empty)
Command error:
Skipping 'T4' which didn't exist, or couldn't be read
Skipping 'T4_1.fq.gz T4_2.fq.gz' which didn't exist, or couldn't be read
Work dir:
/home/ruby/raman/nflow/work/28/02cde5184f4accf9a05bc2ded29c50
Tip: view the complete command output by changing to the process work dir and entering the command `cat .command.out`
Я считаю, что у меня проблема с моим пониманием baseDir. Я предполагаю, что baseDir - это тот, где у меня есть мой файл script.nf. Я не уверен, что происходит не так, и как я могу это исправить.
Может ли кто-нибудь помочь или направить.
Спасибо
Caused by:
Missing output file(s) `fastqc_T4_logs` expected by process `FASTQC (FASTQC on T4)`
Nextflow жалуется, когда не может найти объявленные выходные файлы. Это может произойти, даже если команда выполнена успешно, то есть со статусом выхода 0. Проблема здесь в том, что fastqc
просто пропускает файлы, которые не существуют или не могут быть прочитаны (например, проблемы с правами доступа), но выдает следующие предупреждения:
Skipping 'T4' which didn't exist, or couldn't be read
Skipping 'T4_1.fq.gz T4_2.fq.gz' which didn't exist, or couldn't be read
Решение состоит в том, чтобы просто убедиться, что все файлы существуют. Обратите внимание, что фабричный метод fromFilePairs создает список файлов во втором элементе. Поэтому цитирование пары имен файлов, разделенных пробелами, также проблематично. Все, что тебе нужно:
script:
"""
fastqc ${reads}
"""