Как сгенерировать выходной каталог для процесса Nextflow в контейнере docker?

#docker #nextflow

#docker #nextflow

Вопрос:

Я запускаю два процесса (как указано ниже) в сценарии nextflow. Первый процесс выводит некоторые графики, которые должны быть включены вторым процессом для создания файла pdf. Оба эти процесса выполняются внутри контейнера docker (docimage: 1.0.0). Когда я запускаю этот сценарий nextflow, первый процесс выполняется нормально, но второй процесс не завершен, потому что файл latex не может найти графики, поскольку выходной каталог, содержащий графики, не создан внутри контейнера docker. Однако выходной каталог, содержащий графики, генерируется в локальном каталоге, из которого запускается сценарий nextflow. Может ли кто-нибудь предложить, как сгенерировать выходной каталог из первого процесса внутри контейнера docker, чтобы файл latex мог включать графики из контейнера docker? Спасибо!

 process run_pr {

echo true
container 'docimage:1.0.0'

publishDir "${params.outDir}", mode: 'copy'

output:
file '*' into output_ch

script:
"""
Rscript /home/project/scripts/run.R -s "$params.inputDir" -i "$params.inputFile"
"""
}



process latexGen {

echo true
container 'docimage:1.0.0'

input:
file '*' from output_ch

output:
publishDir "${params.outDir}", mode: 'copy'
    
script:
"""
pdflatex -output-directory=/home/project/$params.outDir  /home/project/scripts/doc.tex
"""
}
 

Ответ №1:

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

 inputFile = file(params.inputFile)
inputDir = file(params.inputDir)

tex = file('/home/project/scripts/doc.tex')

process run_pr {

    container 'docimage:1.0.0'

    publishDir "${params.outDir}/run_pr", mode: 'copy'

    input:
    file inputFile
    file inputDir

    output:
    file '*' into output_ch // avoid using loose wildcards when specifying outputs

    script:
    """
    run.R -s "${inputDir}" -i "${inputFile}"
    """
}

process latexGen {

    container 'docimage:1.0.0'

    publishDir "${params.outDir}/latexGen", mode: 'copy'

    input:
    file 'pdf/*' from output_ch
    file tex

    output:
    file "pdf/doc.pdf"
    
    script:
    """
    pdflatex -output-directory pdf doc.tex
    """
}
 

Мой опыт работы с latex ограничен. Мне не совсем понятно, как -output-directory работает эта опция:

 -output-directory directory
    Write output files in directory instead of the current directory.
    Look up input files in directory first, the along the normal search path.
 

Если ваш выходной каталог используется для вывода PDF-файла, вы можете игнорировать эту опцию. Если он используется для «поиска» входных файлов, то вам, очевидно, нужно его сохранить.

Также не совсем ясно, что делает ваш процесс ‘run_pr’ и каковы его выходные данные. Записывает ли он только один файл или создает несколько файлов? Если бы вы могли уточнить некоторые примеры входных данных, это было бы супер.

Комментарии:

1. Извините за поздние комментарии к вашему сообщению. Спасибо за ваши предложения и рекомендации. Я изменю конфигурационный файл и main.nf подайте соответствующий файл. Кроме того, учитывая временные ограничения, я реализовал временное решение, в котором я объединил два процесса в один процесс. Выходные данные генерируются по мере необходимости. Приветствия !