2.6. パラメータリファレンス#
前の例では、"tar "プログラムを使用してファイルを抽出しました。しかし、その例は非常に限定的なものでした。というのも、私たちが興味を持っているファイルは"hello.txt"と呼ばれ、これが.cwl
ファイルに直接書き込まれていると仮定していたからです。これは最良の方法ではありません。なぜなら、"hello.txt "というファイル名は、使用する入力ファイルによって異なるか、または依存する可能性があるからです。 これを避けるために、ジョブパラメーターファイル(.yml
)で必要なファイル名を指定できます。この例では、入力パラメーターの値を他のフィールドから動的に参照して、抽出するファイル名を指定する方法を説明します。
tar-param.cwl
##!/usr/bin/env cwl-runner
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, --extract]
inputs:
tarfile:
type: File
inputBinding:
prefix: --file
extractfile:
type: string
inputBinding:
position: 1
outputs:
extracted_file:
type: File
outputBinding:
glob: $(inputs.extractfile)
tar-param-job.yml
#tarfile:
class: File
path: hello.tar
extractfile: goodbye.txt
入力ファイル(入力オブジェクト)を作成し、コマンドラインでツール定義と入力オブジェクトを指定してcwltool
を呼び出します:
$ rm hello.tar || true && touch goodbye.txt && tar -cvf hello.tar goodbye.txt
$ cwltool tar-param.cwl tar-param-job.yml
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwltool 3.1.20240508115724
INFO Resolved 'tar-param.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/parameter-references/tar-param.cwl'
INFO [job tar-param.cwl] /tmp/gxt7eeh6$ tar \
--extract \
--file \
/tmp/wwbsd107/stg04ba75f6-a7b6-4ddf-b424-bff59fe64c27/hello.tar \
goodbye.txt
INFO [job tar-param.cwl] completed success
{
"extracted_file": {
"location": "file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/parameter-references/goodbye.txt",
"basename": "goodbye.txt",
"class": "File",
"checksum": "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709",
"size": 0,
"path": "/home/runner/work/user_guide/user_guide/src/_includes/cwl/parameter-references/goodbye.txt"
}
}INFO Final process status is success
$(...)
で囲まれたパラメータ参照を許可するフィールドもあります。これらは評価され、参照されている値に置き換えられます。
outputs:
extracted_out:
type: File
outputBinding:
glob: $(inputs.extractfile)
パラメータリファレンスは、Javascriptの構文のサブセットを使用して記述します。 この例では、$(inputs.extractfile)
、$(inputs["extractfile"])
、$(inputs['extractfile'])
は同じです。
変数 "inputs "の値は、CWLツールの起動時に提供された入力オブジェクトです。
File
パラメータはオブジェクトであるため、入力ファイルのパスを取得するには、ファイルオブジェクトのpathフィールドを参照する必要があります。上記の例でtarファイルのパスを参照するには、$(inputs.tarfile.path)
となります。
パラメータ参照はどこで許されるのですか?
パラメータ参照は、特定のフィールドでのみ使用できます。 以下はその例です:
-
arguments
valueFrom
stdin
stdout
stderr
-
format
secondaryFiles
inputBinding
からvalueFrom
-
format
secondaryFiles
-
glob
outputEval
Workflow
からInputParameter と WorkflowOutputParameter から
format
secondaryFiles
steps
から-
valueFrom
-
-
expression
InputParameter と ExpressionToolOutputParameter から
format
secondaryFiles
-
coresMin
coresMax
ramMin
ramMax
tmpdirMin
tmpdirMax
outdirMin
outdirMax
-
listing
Dirent の中に
entry
entryname
EnvVarRequirement
から-
envValue
-