Skip to content

format_app

lijiaping edited this page Apr 25, 2019 · 1 revision

App的定义

每个App是完成一项分析的最小单元模块,是生成任务脚本的依据。应尽量只做好一件事情,避免在一个App中做太多事情。如果模板长度超过一屏,说明应该拆分成多个了。这样能达到更高的灵活性,复用程度同时减小Docker镜像的体积。应尽量避免在perl中调用R之类的行为。App就是用来生成脚本的,脚本中应该只包含数据处理相关的程序,不应该包括生成其他程序或脚本的代码。

config.yaml

关于App参数,输入输出以及脚本模板的定义。

app:
  package: # Genedock配置,可留空
  category: "Tests" # Genedock配置,可留空
  homepage: null # Genedock配置,可留空
  version: 1 # Genedock配置,可留空
  name: "wc" # App的名字
  alias: "wc" # App的别名
  description: >
    "wc" # 关于App的描述
  tutorial: >
    "" # Genedock配置,可留空
  document_author: [email protected] # App作者
  requirements:
    instance: # 阿里实例相关配置,可以不写。
      id: ecs.sn1.medium # 阿里上使用的实例类型。不写会自动根据cpu和内存的使用量挑选合适的实例类型。
      image: img-ubuntu # 批量计算的虚拟机镜像。目前除了blast2go外,都用这个默认值。可以不写。
    container: # 容器配置
      type: docker # 目前只支持docker
      image: 'diamond:v0.9.13-s' # 镜像名称,需要事先上传至阿里
    resources: # 资源消耗
      cpu: 1
      mem: 0.5G
      network: true
      port: []
      disk: 100m # 单位支持M/G
      disk_type: system.cloud_ssd # 配置实例磁盘类型。格式为:磁盘类型(system/data).磁盘类型(cloud/cloud_ssd/cloud_efficiency/ephemeral/ephemeral_ssd)。高IO的尽量采用cloud_ssd提高性能,数据量大于50G的可以考虑采用data类型。
  inputs: # 输入文件
    fq1: # 模板、parameter.conf、dependencies.yaml中标示该文件的名字
      hint: 'sample reads1' # Genedock配置
      type: file
      required: true # 是否为必须
      default: '' # 默认值,会自动按parameter.conf > dependencies.yaml > config.yaml的顺序使用
      minitems: 1
      maxitems: 1
      item:
        separator: " "
      formats: ['fa', 'fasta'] # 支持的文件格式
    fq2:
      hint: 'sample reads2'
      type: file
      required: true
      default: ''
      minitems: 1
      maxitems: 1
      item:
        separator: " "
      formats: ['fa', 'fasta']
  outputs: # 输出文件,格式与输入类似
    line_stat:
      hint: 'lines'
      type: file
      required: true
      default: ''
      minitems: 1
      maxitems: 1
      item:
        separator: ""
      formats: 'txt'
  parameters: # App参数
    WORKSPACE: # 预留参数,用于设置工作目录
      separator: ''
      prefix: ''
      type: string
      required: true
      default: '/data/project/'
      quotes: false
      hint: 'Prefix of working space'
    SOFT_PATH: # 预留参数,用于设置软件路径
      separator: ''
      prefix: ''
      type: string
      required: true
      default: '/data/software/'
      quotes: false
      hint: 'Prefix of software installed path'
    APP_PATH: # 预留参数,用于设置App路径
      separator: ''
      prefix: ''
      type: string
      required: true
      default: '/data/pipeline/RNA_APP/'
      quotes: false
      hint: 'Prefix of app path'
    ENV_PATH: # 预留参数,用于设置环境变量路径
      separator: ''
      prefix: ''
      type: string
      required: true
      default: '/data/local/'
      quotes: false
      hint: 'Prefix of enviroment path'
    ON_GENEDOCK: # 模板中用于判断是否在GeneDock上运行,生成云上和本地不同的代码
      separator: ''
      prefix: ''
      type: string
      required: true
      default: 'YES'
      quotes: false
      hint: 'Prefix of enviroment path'
    seq_type: # 参数名,参数在模板中会以-prefix[separator]<quotes>value</quotes>的格式输出
      separator: '' # 参数分隔符
      quotes: false # 是否加引号"
      prefix: '' # 前缀
      type: string # 类型,包括float等
      required: true # 是否为可选参数
      hint: '' # 网页中关于该参数的说明
      default: 'Hiseq' # 默认值
  cmd_template: | # jinja2格式的脚本模板
    set -ex;
    echo {{parameters.APP_PATH}} # 参数的调用方法
    mkdir -p "$(dirname {{outputs.line_stat[0].path}})" # 文件路径的调用方法,如果line_stat有多个文件,需要用for循环遍历
    cat {{inputs.fq1[0].path}} {{inputs.fq2[0].path}}|wc -l > {{outputs.line_stat[0].path}}

要掌握cmd_template模板的强大功能与使用方式,请阅读:jinja2模板设计者文档

模板中一些特殊的值

  • inputs.APP_PATH:原为参数,现已改为输入。可用来获取到App的bin路径。
  • parameters.WORKSPACE:可以获取到工作路径
  • parameters.sample_name:样品名,当脚本路径中出现{{parameters.sample_name}}时,会自动加入参数,并生成与样品数相同数量的脚本。
  • extra.sample_name:样品名,当input路径中出现{{extra.sample_name}}时,意味着需要用到所有的样品的对应文件。
  • extra.i:需要生成如比较组之类的参数列表时,该参数用于脚本路径中可以说明这是第几组。
  • samples:包含所有的样品信息。
  • groups:包含所有的分组信息。
  • 方案信息:当对应的parameters形如~UHRR1|HBRR1@PossionDis时,内部会转成字典{'control': 'HBRR1', 'case': 'UHRR1', 'method': 'PossionDis'}。假设参数名为VS,则可通过{{parameters.VS.value.case}}获取到对应的值UHRR1。当对应的parameters形如~NB_A;NB_B;NB_S1;NB_S2时,内部会转成字典{'elements': ['NB_A', 'NB_B', 'NB_S1', 'NB_S2']}。假设参数名为Plan,则可通过{{parameters.Plan.value.elements}}访问到对应元素。

bin

该目录用于存放App所用到的,自行编写的程序或脚本。供模板脚本调用。

Clone this wiki locally