Posted at

CWLの出力ファイル名で困った


CWLで出力ファイル名を指定する

class: CommandLineTool

cwlVersion: v1.0
$namespaces:
edam: 'http://edamontology.org/'
baseCommand: fastqc
inputs:
- id: fastq
type: File
format: edam:format_1930
inputBinding:
position: 2
doc: FastQ file from next-generation sequencers
outputs:
- id: qc
type: File
outputBinding:
glob: $(inputs.fastq.nameroot)_fastqc.html
label: fastqc
arguments:
- position: 1
prefix: -o
valueFrom: .
hints:
- class: DockerRequirement
dockerPull: 'maxulysse/fastqc:latest'

こんな感じで指定できる。


CWLでは '*' を使って出力ファイルを指定できる

    outputBinding:

glob: $(inputs.fastq.nameroot)_fastqc.html

この部分を、こう書くこともできる。

    outputBinding:

glob: $(inputs.fastq.nameroot)*_fastqc.html


CWLで '*' を使って困ったこと

    outputBinding:

glob: *_fastqc.html

こう書くと、怒られる。

../cwltool/cwltool.py 1.0.20181201184214

Resolved 'fastqc.cwl' to 'file:///Users/hachiya/Projects/cwl/test/fastqc.cwl'
I'm sorry, I couldn't load this CWL file, try again with --debug for more information.
The error was: found undefined alias '_fastqc.html'
in "file:///Users/hachiya/Projects/cwl/test/fastqc.cwl", line 17, column 13

先頭で '*' を使う場合は、ダブルクォーテーションで挟むとよい。

    outputBinding:

glob: "*_fastqc.html"

これで動いた!