Я пытаюсь настроить рабочий процесс с помощью Nextflow на WSL2. После некоторых изменений вот полный обновленный код:
params.output_dir = "./workflow_output"
params.input_dir = null
process fastQC {
publishDir(
path: "$params.output_dir/qc_reports",
mode: "copy"
)
input:
val fqs
output:
path "$params.input_dir/*_fastqc.zip", emit: zip
path "$params.input_dir/*_fastqc.html", emit: html
"""
fastqc $fqs
"""
}
workflow onlyQC {
out_dir = file("$params.output_dir")
fqs = channel.from(file("$params.input_dir/*.fastq"))
fastQC(fqs)
}
Прежде чем изменить процесс fastqc
на использование publishDir
, я получал следующее сообщение об ошибке, когда пытался использовать mkdir -p $out_dir
перед запуском команды fastqc -o $out_dir $fqs
.
mkdir: cannot create directory ‘workflow_output’: File exists
Я перешел на обновленный код, используя директиву publishDir
, но теперь получаю ошибку:
Missing output file(s) data/*_fastqc.zip expected by process onlyQC:fastQC (3)
Любые рекомендации/помощь будут оценены по достоинству. Спасибо!
@hobbs этого не понял, спасибо!
mkdir: невозможно создать каталог «workflow_output»: файл существует
Вы получаете эту ошибку, потому что просите Nextflow разместить выходной каталог (т. е. out_dir
) в рабочий каталог процесса (под ./work
), и по умолчанию входные файлы и каталоги будут связаны символическими ссылками (это можно изменить с помощью директива stageInMode). Обратите внимание, что mkdir
не будет следовать по символической ссылке, а интерпретирует ее как файл, отсюда и ошибка.
Лучший способ опубликовать результаты процесса — использовать директиву PublishDir . Например:
params.fastqs = "/path/to/*.fastq"
params.output_dir = "./workflow_output"
process fastQC {
publishDir(
path: "${params.output_dir}/fastQC",
mode: 'copy',
)
input:
path fqs
output:
path "*_fastqc.zip", emit: zip
path "*_fastqc.html", emit: html
"""
fastqc ${fqs}
"""
}
workflow {
fastqs = Channel.fromPath("${params.fastqs}")
fastQC( fastqs )
}
Спасибо за помощь! Когда я пытаюсь следовать предложенным вами решениям, я получаю сообщение об ошибке: Отсутствуют данные выходного файла(ов)/*_fastqc.zip, ожидаемые только процессомQC:fastQC (3). Я вручную проверил, что файлы действительно создаются в папке data/, поэтому не понимаю, почему Nextflow их не находит.
@MananChopra Как именно вы используете FastQC? Чтобы файлы создавались в подкаталоге с именем data
, я ожидаю, что ваш блок сценария будет выглядеть примерно так mkdir data; fastqc -o data ${fqs}
.
Входные файлы расположены в каталоге data/, поэтому без указания флага -o FastQC будет выводить данные в тот же каталог по умолчанию. Думаю, мой код действительно должен читаться ${input_dir}/*_fastqc.zip
, поскольку он не всегда будет иметь имя data
, но это не влияет на этот тестовый пример. Я не уверен, почему nextflow не находит файлы, поскольку я проверил вручную, и они действительно генерируются в каталоге data/.
@MananChopra Но когда вышеуказанный процесс запускается, input: path fqs
гарантирует, что каждый файл fastq локализован в свой собственный рабочий каталог процесса (например, ./work/01/<uuid>
) посредством символической ссылки. Затем, когда fastqc
выполняется (без -o
), выходные данные zip и html также должны быть созданы вместе с локализованным файлом fastq (т. е. символической ссылкой). Это то, что позволяет нам просто использовать output: path "*_fastqc.html"
, чтобы сообщить Nextflow, какие html-файлы ожидать. Обязательно используйте тип ввода path
для подготовки файлов fastq. Использование input: val fqs
является ошибкой, если это то, что есть в вашем коде.
Пожалуйста, отредактируйте свой вопрос, чтобы показать обновленный код, который вы используете, если я неправильно понял, в чем проблема, спасибо!
Спасибо за вашу помощь @Steve. Я обновил основной вопрос новым кодом. Я думаю, что мои проблемы возникают из-за некоторых недоразумений с моей стороны относительно того, как работает Nextflow. Я изменил val fqs
на path fqs
и удалил data
из выходных строк, и теперь процесс работает как положено. Есть ли у вас какие-либо рекомендации относительно ресурсов, которые помогут получить более четкое представление о Nextflow? Я только что просмотрел документацию, которой, как мне кажется, иногда не хватает, хотя это определенно может быть только моей проблемой :)
@MananChopra Вы не одиноки с таким мнением. Хорошее место для начала — Training.nextflow.io . Кроме того, раздел документации о нескольких входных каналах также должен быть обязательно прочитан, но его легко пропустить.
Примечание: смысла в
mkdir -p this ; mkdir -p this/that
нет. Весь смыслmkdir -p
в том, что он создает несуществующих родителей, поэтому для выполнения работы достаточно только второго.