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

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

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
"""
}

person deepesh    schedule 14.01.2021    source источник


Ответы (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
    """
}

Мой опыт работы с латексом ограничен. Мне не совсем понятно, как работает опция -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 и каковы его результаты. Записывает ли он только один файл или создает несколько файлов? Если бы вы могли прояснить некоторые примеры ввода, это было бы супер.

person Steve    schedule 15.01.2021
comment
Извините за опоздание с комментариями к вашему сообщению. Спасибо за ваши предложения и рекомендации. Я изменю файл конфигурации и файл main.nf соответственно. Кроме того, учитывая нехватку времени, я реализовал временное решение, в котором я объединил два процесса в один. Вывод генерируется по мере необходимости. Ваше здоровье ! - person deepesh; 21.01.2021