1. 问题
    2. 我如何创建并导入我自己的自定义类型到CWL描述中?
    3. 目标
    4. 学习如何编写自定义CWL对象类型。
    5. 学习如何将这些自定义对象导入工具描述。

    有时,您可能希望编写自己的自定义类型,以便在CWL描述中使用和重用。使用这种自定义类型可以减少多个使用相同类型的描述之间的冗余,并且允许额外的自定义/配置工具/分析,而不需要直接处理CWL描述。
    下面的示例是biom convert format工具的CWL描述,用于将标准的biom表文件转换为hd5格式。
    custom-types.cwl

    1. #!/usr/bin/env cwl-runner
    2. cwlVersion: v1.0
    3. class: CommandLineTool
    4. requirements:
    5. InlineJavascriptRequirement: {}
    6. ResourceRequirement:
    7. coresMax: 1
    8. ramMin: 100 # just a default, could be lowered
    9. SchemaDefRequirement:
    10. types:
    11. - $import: biom-convert-table.yaml
    12. hints:
    13. DockerRequirement:
    14. dockerPull: 'quay.io/biocontainers/biom-format:2.1.6--py27_0'
    15. SoftwareRequirement:
    16. packages:
    17. biom-format:
    18. specs: [ "https://doi.org/10.1186/2047-217X-1-7" ]
    19. version: [ "2.1.6" ]
    20. inputs:
    21. biom:
    22. type: File
    23. format: edam:format_3746 # BIOM
    24. inputBinding:
    25. prefix: --input-fp
    26. table_type:
    27. type: biom-convert-table.yaml#table_type
    28. inputBinding:
    29. prefix: --table-type
    30. header_key:
    31. type: string?
    32. doc: |
    33. The observation metadata to include from the input BIOM table file when
    34. creating a tsv table file. By default no observation metadata will be
    35. included.
    36. inputBinding:
    37. prefix: --header-key
    38. baseCommand: [ biom, convert ]
    39. arguments:
    40. - valueFrom: $(inputs.biom.nameroot).hdf5
    41. prefix: --output-fp
    42. - --to-hdf5
    43. outputs:
    44. result:
    45. type: File
    46. outputBinding: { glob: "$(inputs.biom.nameroot)*" }
    47. $namespaces:
    48. edam: http://edamontology.org/
    49. s: https://schema.org/
    50. $schemas:
    51. - http://edamontology.org/EDAM_1.16.owl
    52. - http://schema.org/version/9.0/schemaorg-current-http.rdf
    53. s:license: https://spdx.org/licenses/Apache-2.0
    54. s:copyrightHolder: "EMBL - European Bioinformatics Institute"

    custom-types.yml

    1. biom:
    2. class: File
    3. format: http://edamontology.org/format_3746
    4. path: rich_sparse_otu_table.biom
    5. table_type: OTU table

    注意:要遵循下面的示例,您需要下载示例输入文件rich_sparse_otu_table.biom。该文件可从https://raw.githubusercontent.com/common-workflow-language/user_guide/gh-pages/_includes/cwl/19-custom-types/rich_sparse_otu_table.biom获得,并可以通过wget下载:

    1. wget https://raw.githubusercontent.com/common-workflow-language/user_guide/gh-pages/_includes/cwl/19-custom-types/rich_sparse_otu_table.biom

    在第34行,在inputs:table_type中,表转换中允许使用的表选项列表被作为自定义对象导入:

    1. inputs:
    2. biom:
    3. type: File
    4. format: edam:format_3746 # BIOM
    5. inputBinding:
    6. prefix: --input-fp
    7. table_type:
    8. type: biom-convert-table.yaml#table_type
    9. inputBinding:
    10. prefix: --table-type

    对自定义类型的引用是定义对象的文件名(bio -convert-table.yaml)和定义自定义类型的文件中的对象名(table_type)的组合。在这种情况下,符号数组从导入的生物转换表。yaml文件定义允许的表选项。例如,在custom-types.yml中,我们传递OTU表作为输入,它告诉工具创建一个hd5格式的OTU表。
    描述自定义类型的YAML文件的内容如下所示:

    1. type: enum
    2. name: table_type
    3. label: The type of the table to produce
    4. symbols:
    5. - OTU table
    6. - Pathway table
    7. - Function table
    8. - Ortholog table
    9. - Gene table
    10. - Metabolite table
    11. - Taxon table
    12. - Table

    为了在CWL描述中使用自定义类型,必须导入它。导入在requirements: schemadefrerequirements中进行了描述,如下面的示例自定义类型中所示。cwl描述:

    1. requirements:
    2. InlineJavascriptRequirement: {}
    3. ResourceRequirement:
    4. coresMax: 1
    5. ramMin: 100
    6. SchemaDefRequirement:
    7. types:
    8. - $import: biom-convert-table.yaml

    还要注意这CWL描述的作者也包括ResourceRequirements,指定内存的最小数量和所需数量的核心工具运行成功,以及详细的版本的软件,和其他有用的描述写元数据。这些特性将在本用户指南的其他章节中进一步讨论。