Мои данные структурированы как образцы, которые запускаются партиями. Итак, у меня есть такая иерархия каталогов:
/path/to/dir/batch_1/sample_1
/path/to/dir/batch_1/sample_2
/path/to/dir/batch_1/...
/path/to/dir/batch_2/sample_1
/path/to/dir/batch_2/sample_2
/path/to/dir/batch_2/...
/path/to/dir/...
Я хочу применить процесс к каждому образцу для данного подмножества пакетов. Один из эффективных подходов - создать канал, в котором перечислены образцы:
path_to_samples= Channel
.fromPath(['/path/to/dir/batch_2/sample_*',
'/path/to/dir/batch_322/sample_*'], type: 'dir' )
process my_process{
input:
path(sample) from path_to_samples
"""
do stuff
"""
}
Теперь я хотел бы указать имена пакетов отдельно, и пусть сценарий найдет соответствующие образцы. Что-то подобное:
params.root_dir = '/path/to/dir/'
params.batch_names = Channel.from('batch_2', 'batch_322')
// make samples channel: incorrect
path_to_samples = params.batch_names
.map { params.root_dir + it + 'sample_*' }
.toPath()
process my_process{
input:
path(sample) from path_to_samples
"""
do stuff
"""
}
Значит, я неправильно думаю о каналах? Есть ли способ сгладить список сэмплов с помощью операций с каналом? Или правильный подход - сделать более сложное замыкание Groovy, которое будет перечислять файлы в каждом каталоге пакета и возвращать его в виде кортежа или списка?