翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
WDL ワークフロー定義の詳細
以下のトピックでは、HealthOmics の WDL ワークフロー定義で使用できるタイプとディレクティブについて詳しく説明します。
input.json の名前空間定義
HealthOmics は input.json で完全修飾変数をサポートしています。たとえば、ワークフロー SumWorkflow で number1 と number2 という名前の 2 つの入力変数を宣言するとします。
workflow SumWorkflow { input { Int number1 Int number2 } }
input.json では、完全修飾変数として使用できます。
{ "SumWorkflow.number1": 15, "SumWorkflow.number2": 27 }
WDL のプリミティブ型
次の表は、WDL の入力が一致するプリミティブ型にどのようにマッピングされるかを示しています。HealthOmics では型強制のサポートが制限されているため、明示的な型を設定することをお勧めします。
WDL タイプ | JSON タイプ | WDL の例 | JSON キーと値の例 | 注意 |
---|---|---|---|---|
Boolean |
boolean |
Boolean b |
"b": true |
値は小文字で、引用符で囲まない必要があります。 |
Int |
integer |
Int i |
"i": 7 |
引用符で囲まない必要があります。 |
Float |
number |
Float f |
"f": 42.2 |
引用符で囲まない必要があります。 |
String |
string |
String s |
"s": "characters" |
URI である JSON 文字列は、インポートする WDL ファイルにマッピングする必要があります。 |
File |
string |
File f |
"f": "s3://amzn-s3-demo-bucket1/path/to/file" |
Amazon S3 および HealthOmics ストレージ URIs は、ワークフローに提供される IAM ロールがこれらのオブジェクトへの読み取りアクセス権を持っている限りインポートされます。他の URI スキーム (file:// 、、 など) https:// はサポートされていませんftp:// 。URI は オブジェクトを指定する必要があります。ディレクトリにすることはできません。つまり、 で終わることはできません/ 。 |
Directory |
string |
Directory d |
"d": "s3://bucket/path/" |
Directory タイプは WDL 1.0 または 1.1 に含まれていないため、WDL ファイルの ヘッダーversion development に を追加する必要があります。URI は Amazon S3 URI で、プレフィックスが '/' で終わる必要があります。ディレクトリのすべてのコンテンツは、1 回のダウンロードとしてワークフローに再帰的にコピーされます。には、ワークフローに関連するファイルのみを含めるDirectory 必要があります。 |
WDL の複合型
次の表は、WDL の入力が一致する複雑な JSON タイプにどのようにマッピングされるかを示しています。WDL の複雑な型は、プリミティブ型で構成されるデータ構造です。リストなどのデータ構造は配列に変換されます。
WDL タイプ | JSON タイプ | WDL の例 | JSON キーと値の例 | 注意 |
---|---|---|---|---|
Array |
array |
Array[Int] nums |
“nums": [1, 2, 3] |
配列のメンバーは、WDL 配列タイプの形式に従う必要があります。 |
Pair |
object |
Pair[String, Int] str_to_i |
“str_to_i": {"left": "0", "right": 1} |
ペアの各値は、一致する WDL タイプの JSON 形式を使用する必要があります。 |
Map |
object |
Map[Int, String] int_to_string |
"int_to_string": { 2: "hello", 1: "goodbye" } |
マップの各エントリは、一致する WDL タイプの JSON 形式を使用する必要があります。 |
Struct |
object |
|
|
構造体メンバーの名前は、JSON オブジェクトキーの名前と完全に一致する必要があります。各値は、一致する WDL タイプの JSON 形式を使用する必要があります。 |
Object |
該当なし | 該当なし | 該当なし | WDL Object タイプは古いため、いずれの場合Struct も に置き換える必要があります。 |
WDL のディレクティブ
HealthOmics は、HealthOmics がサポートするすべての WDL バージョンで次のディレクティブをサポートしています。
acceleratorType と acceleratorCount
HealthOmics は、サポートされているすべての GPU インスタンスacceleratorCountでランタイム属性 acceleratorTypeと をサポートします。HealthOmics はgpuCount、アクセラレーターと同じ機能を持つ gpuTypeおよび という名前のエイリアスもサポートしています。WDL 定義に両方のディレクティブが含まれている場合、HealthOmics はアクセラレーター値を使用します。
次の例は、これらのディレクティブの使用方法を示しています。
runtime { gpuCount: 2 gpuType: "nvidia-tesla-t4" }
returnCodes
returnCodes 属性は、タスクが正常に実行されたことを示すリターンコードまたは一連のリターンコードを指定するメカニズムを提供します。WDL エンジンは、WDL 定義のランタイムセクションで指定したリターンコードを尊重し、それに応じてタスクのステータスを設定します。
runtime { returnCodes: 1 }
WDL ワークフロー定義の例
次の例は、WDL CRAM
BAM
で から に変換するためのプライベートワークフロー定義を示しています。CRAM
から へのBAM
ワークフローでは、2 つのタスクを定義し、genomes-in-the-cloud
コンテナのツールを使用します。この例は、一般公開されています。
次の例は、Amazon ECR コンテナをパラメータとして含める方法を示しています。これにより、HealthOmics は実行を開始する前にコンテナへのアクセス許可を検証できます。
{ ... "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710" }
次の例は、ファイルが Amazon S3 バケットにある場合に、実行で使用するファイルを指定する方法を示しています。
{ "input_cram": "s3://amzn-s3-demo-bucket1/inputs/NA12878.cram", "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict", "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta", "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai", "sample_name": "NA12878" }
シーケンスストアからファイルを指定する場合は、次の例に示すように、シーケンスストアの URI を使用して指定します。
{ "input_cram": "omics://429915189008.storage.us-west-2.amazonaws.com/111122223333/readSet/4500843795/source1", "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict", "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta", "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai", "sample_name": "NA12878" }
その後、次に示すように、WDL でワークフローを定義できます。
version 1.0 workflow CramToBamFlow { input { File ref_fasta File ref_fasta_index File ref_dict File input_cram String sample_name String gotc_docker = "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the- cloud:latest" } #Converts CRAM to SAM to BAM and makes BAI. call CramToBamTask{ input: ref_fasta = ref_fasta, ref_fasta_index = ref_fasta_index, ref_dict = ref_dict, input_cram = input_cram, sample_name = sample_name, docker_image = gotc_docker, } #Validates Bam. call ValidateSamFile{ input: input_bam = CramToBamTask.outputBam, docker_image = gotc_docker, } #Outputs Bam, Bai, and validation report to the FireCloud data model. output { File outputBam = CramToBamTask.outputBam File outputBai = CramToBamTask.outputBai File validation_report = ValidateSamFile.report } } #Task definitions. task CramToBamTask { input { # Command parameters File ref_fasta File ref_fasta_index File ref_dict File input_cram String sample_name # Runtime parameters String docker_image } #Calls samtools view to do the conversion. command { set -eo pipefail samtools view -h -T ~{ref_fasta} ~{input_cram} | samtools view -b -o ~{sample_name}.bam - samtools index -b ~{sample_name}.bam mv ~{sample_name}.bam.bai ~{sample_name}.bai } #Runtime attributes: runtime { docker: docker_image } #Outputs a BAM and BAI with the same sample name output { File outputBam = "~{sample_name}.bam" File outputBai = "~{sample_name}.bai" } } #Validates BAM output to ensure it wasn't corrupted during the file conversion. task ValidateSamFile { input { File input_bam Int machine_mem_size = 4 String docker_image } String output_name = basename(input_bam, ".bam") + ".validation_report" Int command_mem_size = machine_mem_size - 1 command { java -Xmx~{command_mem_size}G -jar /usr/gitc/picard.jar \ ValidateSamFile \ INPUT=~{input_bam} \ OUTPUT=~{output_name} \ MODE=SUMMARY \ IS_BISULFITE_SEQUENCED=false } runtime { docker: docker_image } #A text file is generated that lists errors or warnings that apply. output { File report = "~{output_name}" } }