#nextflow
#nextflow
Вопрос:
У меня есть следующий сценарий nextflow:
echo true
wd = "$params.wd"
geoid = "$params.geoid"
process step1 {
publishDir = "$wd/data/"
input:
val celFiles from "$wd/data/$geoid"
output:
file "${geoid}_datFiles.RData" into channel
"""
Rscript $wd/scripts/step1.R $celFiles $wd/data/${geoid}_datFiles.RData
"""
}
Rscript содержит следующие команды:
step1=function(WD,
celFiles,
output) {
library(affy)
datFiles=ReadAffy(celfile.path=paste0(WD,"/",celFiles))
save(datFiles,file=output)
}
args=commandArgs(trailingOnly=TRUE)
WD=args[1]
celFiles=args[2]
output=args[3]
step1(WD,celFiles,output)
При запуске выходной файл сохраняется в нужном мне каталоге ($wd/data/ ${geoid} _datFiles .RData). Учитывая, что publishDir указывает на тот же каталог, я бы ожидал вывода (определенного как «$ {geoid} _datFiles .RData»), который будет доступен в каталоге publishDir.
Однако я получаю следующую ошибку:
Missing output file(s) `GSE4290_datFiles.RData` expected by process `step1`
Файл журнала предполагает, что nextflow все еще ищет выходные данные в созданном рабочем процессе каталоге:
Process `step1` is unable to find [UnixPath]: `/Users/rebeccaeliscu/Desktop/workflow/affymetrix/nextflow/work/92/42afb131a36eb32ed780bd1bf3bc3b/GSE4290_datFiles.RData`
Полный файл журнала:
Nov-12 17:55:39.611 [main] DEBUG nextflow.cli.Launcher - $> nextflow run main.nf
Nov-12 17:55:39.945 [main] INFO nextflow.cli.CmdRun - N E X T F L O W ~ version 20.07.1
Nov-12 17:55:39.968 [main] INFO nextflow.cli.CmdRun - Launching `main.nf` [infallible_brahmagupta] - revision: d68e496ea0
Nov-12 17:55:40.026 [main] DEBUG nextflow.config.ConfigBuilder - Found config local: /Users/rebeccaeliscu/Desktop/workflow/affymetrix/nextflow/nextflow.config
Nov-12 17:55:40.029 [main] DEBUG nextflow.config.ConfigBuilder - Parsing config file: /Users/rebeccaeliscu/Desktop/workflow/affymetrix/nextflow/nextflow.config
Nov-12 17:55:40.140 [main] DEBUG nextflow.config.ConfigBuilder - Applying config profile: `standard`
Nov-12 17:55:41.288 [main] DEBUG nextflow.Session - Session uuid: 94f22a74-2a63-4a87-9fb3-33cf925a5a74
Nov-12 17:55:41.288 [main] DEBUG nextflow.Session - Run name: infallible_brahmagupta
Nov-12 17:55:41.289 [main] DEBUG nextflow.Session - Executor pool size: 4
Nov-12 17:55:41.326 [main] DEBUG nextflow.cli.CmdRun -
Version: 20.07.1 build 5412
Created: 24-07-2020 15:18 UTC (08:18 PDT)
System: Mac OS X 10.15.7
Runtime: Groovy 2.5.11 on Java HotSpot(TM) 64-Bit Server VM 1.8.0_111-b14
Encoding: UTF-8 (UTF-8)
Process: 46458@Rebeccas-MacBook-Pro-6.local.ucsf.edu [10.49.41.197]
CPUs: 4 - Mem: 8 GB (708.4 MB) - Swap: 2 GB (927 MB)
Nov-12 17:55:41.353 [main] DEBUG nextflow.Session - Work-dir: /Users/rebeccaeliscu/Desktop/workflow/affymetrix/nextflow/work [Mac OS X]
Nov-12 17:55:41.354 [main] DEBUG nextflow.Session - Script base path does not exist or is not a directory: /Users/rebeccaeliscu/Desktop/workflow/affymetrix/nextflow/bin
Nov-12 17:55:41.594 [main] DEBUG nextflow.Session - Observer factory: TowerFactory
Nov-12 17:55:41.598 [main] DEBUG nextflow.Session - Observer factory: DefaultObserverFactory
Nov-12 17:55:41.911 [main] DEBUG nextflow.Session - Session start invoked
Nov-12 17:55:42.309 [main] DEBUG nextflow.script.ScriptRunner - > Launching execution
Nov-12 17:55:42.331 [main] DEBUG nextflow.Session - Workflow process names [dsl1]: step1
Nov-12 17:55:42.334 [main] WARN nextflow.script.BaseScript - The use of `echo` method has been deprecated
Nov-12 17:55:42.495 [main] DEBUG nextflow.executor.ExecutorFactory - << taskConfig executor: null
Nov-12 17:55:42.496 [main] DEBUG nextflow.executor.ExecutorFactory - >> processorType: 'local'
Nov-12 17:55:42.508 [main] DEBUG nextflow.executor.Executor - [warm up] executor > local
Nov-12 17:55:42.521 [main] DEBUG n.processor.LocalPollingMonitor - Creating local task monitor for executor 'local' > cpus=4; memory=8 GB; capacity=4; pollInterval=100ms; dumpInterval=5m
Ответ №1:
Ваше объявление вывода ищет файл в текущем workDir: "${geoid}_datFiles.RData"
, но ваш Rscript записывает в: $wd/data/${geoid}_datFiles.RData
. Если вы измените свою команду на:
Rscript $wd/scripts/step1.R $celFiles ${geoid}_datFiles.RData
Тогда Nextflow должен быть в состоянии найти выходной файл. Директива publishDir затем «опубликует» его в определенном publishDir.
Комментарии:
1. Привет @Steve, спасибо за ваш ответ. Я настроил именование выходных файлов так, чтобы оно было просто именем файла, как вы предлагаете. Хотя рабочий процесс теперь выполняется успешно, я все еще не нахожу выходные данные, которые я хочу для publishDir, т.Е. «$ wd / data». Вместо этого они находятся в каталоге уникального рабочего процесса «work / …».
2. Обновление: я переместил директиву publishDir в начало документа. Я предполагаю, что он не достигал процессов, потому что, когда я добавил ‘publishDir’ к каждому процессу, я получил желаемое поведение. Есть ли лучший способ сделать это, т. Е. Без избыточности и включения publishDir в каждый процесс?
3. Ну, NF запускает каждый процесс в уникальном workDir (т. Е. «work / …»), Поэтому вы всегда должны ожидать выходных файлов в этом каталоге (при условии, что ваш процесс завершится успешно). Но, взглянув на ваш код еще раз, я думаю, что у вас опечатка в строке publishDir; т. Е. Есть
=
знак там, где его не должно быть; все, что вам нужно, это:publishDir "$wd/data"
. Я думаю, что это нормально, чтобы быть явным, возможно, что-то вроде:publishDir(path: "${params.publish_dir}/${task.process.replaceAll(':', '/')}", enabled: params.publish_everything || params.publish_step1, mode: params.publish_mode,)
4. Еще раз спасибо за ваш ответ!