约束限制
当前Nextflow相关特性仅为公测版本,部分功能暂不支持,因此存在如下限制约束。
- 流程使用的镜像和数据需要按照医疗智能体(EIHealth)平台的规范进行上传
推荐通过eihealth-toolkit进行上传。eihealth-toolkit介绍详见什么是医疗智能体eihealth-toolkit。数据上传可参考上传数据。。
数据上传成功后可以在数据详情页面查询,创建Nextflow流程时可以通过设置参数指定对应数据。
镜像上传可参考上传镜像。镜像上传成功后可以在镜像详情页面查询,复制其镜像地址填入Nextflow脚本中的container字段即可。
process test { container 'swr.${regionID}.myhuaweicloud.com/eihealth/admet:2.0.0' }
- 暂不支持用户设置部分Nextflow配置项
对于dag, timeline, report,,trace配置,医疗智能体(EIHealth)平台会默认开启并且指定相关路径,会覆盖用户侧配置,可以在作业详情页面查询和下载相关信息。相关信息可参考https://www.nextflow.io/docs/latest/tracing.html
对于pod配置,暂不支持用户侧设置。若用户侧设置的情况下可能会导致对应Process执行失败。相关信息可参考https://www.nextflow.io/docs/latest/process.html#pod
对于publishDir配置,用户侧设置时需要使用一定的技巧。目前测试结果表明下面两种写法是可行的, 供参考。
写法1:
写法2:
正向用例
如下所示为一个不带业务属性(仅执行基本数学运算)的正向用例,包含了输入输出,串并联场景,适用面较广。
process PROCESS_A { input: val x output: val y exec: y = x*10 } process PROCESS_B { input: val x output: val y when: x <= 50 exec: y = x*10 } process PROCESS_C { input: val x output: val y when: x > 50 exec: y = x*10 } process PROCESS_D { debug true input: val x output: stdout script: """ echo $x """ } workflow { Channel .of(1..10) | PROCESS_A | PROCESS_B & PROCESS_C | mix | PROCESS_D }
基于Nextflow官方提供first script,预期输出会打印Hello world的日志。
https://www.nextflow.io/docs/latest/getstarted.html#your-first-script
#!/usr/bin/env nextflow nextflow.enable.dsl=2 params.str = 'Hello world!' process splitLetters { // 替换为正确镜像 container 'swr.XXX.myhuaweicloud.com/XXX/admet:2.0.0' output: path 'chunk_*' """ printf '${params.str}' | split -b 6 - chunk_ """ } process convertToUpper { input: path x output: stdout """ cat $x | tr '[a-z]' '[A-Z]' """ } workflow { splitLetters | flatten | convertToUpper | view { it.trim() } }