Динамический поток Nextflow включает и выводит

#nextflow

#nextflow

Вопрос:

Я пытаюсь использовать динамические включения, но у меня проблемы с управлением выходными файлами:

 /* 
 * enables modules 
 */
nextflow.enable.dsl = 2

include { requestData } from './modules/get_xapi_data'
include { uniqueActors } from './modules/unique_actors'
include { compileJson } from './modules/unique_actors'

if (params.user_algo) {
    include { userAlgo } from params.user_algo
}

workflow {
    dataChannel = Channel.from("xapi_data.json")
    requestData(dataChannel)
    uniqueActors(requestData.out.channel_data)

    if (params.user_algo) {
        user_algo = userAlgo(requestData.out.channel_data)
    } else {
        user_algo = null
    }

    output_json = [user_algo, uniqueActors.out]
    // Filter output
    Channel.fromList(output_json)
        .filter{ it != null }            <--- problem here
        .map{ file(it) }
        .set{jsonFiles}

    compileJson(jsonFiles)
}
 

Проблема userAlgo в том, что она может быть динамически загружена. И я не знаю, как я могу позаботиться об этом. С этим решением я получил Unknown method invocation on ChannelOut type ошибку getFileSystem.

Ответ №1:

Проблема в том, что fromList ожидает список значений, а не список каналов. Если вы используете пустой канал вместо проверки нулевого значения, вы можете использовать:

 if( params.user_algo ) {
    user_algo = userAlgo(requestData.out.channel_data)
} else {
    user_algo = Channel.empty()
}

user_algo
    | concat( uniqueActors.out )
    | map { file(it) }
    | compileJson
 

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

1. Хорошая идея, я сделал более или менее то же самое, чтобы использовать fromList « uniqueActors() uniqueChannel = uniqueActors.out if (params.user_algo) { userAlgo() userChannel = userAlgo.out.userJson } else { userChannel = Channel.empty() } allJson = uniqueChannel.mix(Пользовательский канал) compileJson(allJson.ToList()) «