Especificidades da definição do fluxo de trabalho da WDL - AWS HealthOmics

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Especificidades da definição do fluxo de trabalho da WDL

Os tópicos a seguir fornecem detalhes sobre os tipos e diretivas disponíveis para definições de fluxo de trabalho da WDL em. HealthOmics

Definição de namespace em input.json

HealthOmics suporta variáveis totalmente qualificadas em input.json. Por exemplo, se você declarar duas variáveis de entrada chamadas número1 e número2 no fluxo de trabalho: SumWorkflow

workflow SumWorkflow { input { Int number1 Int number2 } }

Você pode usá-las como variáveis totalmente qualificadas em input.json:

{ "SumWorkflow.number1": 15, "SumWorkflow.number2": 27 }

Tipos primitivos na Biblioteca Digital Mundial

A tabela a seguir mostra como as entradas na WDL são mapeadas para os tipos primitivos correspondentes. HealthOmics fornece suporte limitado para coerção de tipo, por isso recomendamos que você defina tipos explícitos.

Tipos primitivos
Tipo WDL Tipo JSON Exemplo de WDL Exemplo de chave e valor JSON Observações
Boolean boolean Boolean b "b": true O valor deve estar em minúsculas e sem aspas.
Int integer Int i "i": 7 Não deve ser citado.
Float number Float f "f": 42.2 Não deve ser citado.
String string String s "s": "characters" As cadeias de caracteres JSON que são um URI devem ser mapeadas para um arquivo WDL para serem importadas.
File string File f "f": "s3://amzn-s3-demo-bucket1/path/to/file" O Amazon S3 e o HealthOmics armazenamento URIs são importados, desde que a função do IAM fornecida para o fluxo de trabalho tenha acesso de leitura a esses objetos. Nenhum outro esquema de URI é suportado (como file://https://, eftp://). O URI deve especificar um objeto. Não pode ser um diretório, o que significa que não pode terminar com / a.
Directory string Directory d "d": "s3://bucket/path/" O Directory tipo não está incluído na WDL 1.0 ou 1.1, então você precisará version development adicioná-lo ao cabeçalho do arquivo WDL. O URI deve ser um URI do Amazon S3 e com um prefixo que termine com '/'. Todo o conteúdo do diretório será copiado recursivamente para o fluxo de trabalho como um único download. O Directory deve conter somente arquivos relacionados ao fluxo de trabalho.

Tipos complexos em WDL

A tabela a seguir mostra como as entradas na WDL são mapeadas para os tipos JSON complexos correspondentes. Os tipos complexos na Biblioteca Digital Mundial são estruturas de dados compostas por tipos primitivos. Estruturas de dados, como listas, serão convertidas em matrizes.

Tipos complexos
Tipo WDL Tipo JSON Exemplo de WDL Exemplo de chave e valor JSON Observações
Array array Array[Int] nums “nums": [1, 2, 3] Os membros da matriz devem seguir o formato do tipo de matriz WDL.
Pair object Pair[String, Int] str_to_i “str_to_i": {"left": "0", "right": 1} Cada valor do par deve usar o formato JSON do tipo WDL correspondente.
Map object Map[Int, String] int_to_string "int_to_string": { 2: "hello", 1: "goodbye" } Cada entrada no mapa deve usar o formato JSON de seu tipo WDL correspondente.
Struct object
struct SampleBamAndIndex { String sample_name File bam File bam_index } SampleBamAndIndex b_and_i
"b_and_i": { "sample_name": "NA12878", "bam": "s3://amzn-s3-demo-bucket1/NA12878.bam", "bam_index": "s3://amzn-s3-demo-bucket1/NA12878.bam.bai" }
Os nomes dos membros da estrutura devem corresponder exatamente aos nomes das chaves do objeto JSON. Cada valor deve usar o formato JSON do tipo de WDL correspondente.
Object N/D N/D N/D O Object tipo WDL está desatualizado e deve ser substituído por Struct em todos os casos.

Diretivas na Biblioteca Digital Mundial

HealthOmics suporta as seguintes diretivas em todas as versões da WDL que HealthOmics oferecem suporte.

Tipo de acelerador e contagem de aceleradores

HealthOmics suporta atributos de tempo de execução acceleratorType e acceleratorCount com todas as instâncias de GPU compatíveis. HealthOmics também oferece suporte a aliases chamados gpuType egpuCount, que têm a mesma funcionalidade de seus equivalentes aceleradores. Se a definição da WDL contiver as duas diretivas, HealthOmics use os valores do acelerador.

O exemplo a seguir mostra como usar essas diretivas:

runtime { gpuCount: 2 gpuType: "nvidia-tesla-t4" }

Códigos de devolução

O atributo returnCodes fornece um mecanismo para especificar um código de retorno, ou um conjunto de códigos de retorno, que indica a execução bem-sucedida de uma tarefa. O mecanismo da WDL respeita os códigos de retorno que você especifica na seção de tempo de execução da definição da WDL e define o status das tarefas adequadamente.

runtime { returnCodes: 1 }

Exemplo de definição de fluxo de trabalho WDL

Os exemplos a seguir mostram definições de fluxo de trabalho privadas para conversão de CRAM para BAM em WDL. O BAM fluxo de trabalho CRAM to define duas tarefas e usa ferramentas do genomes-in-the-cloud contêiner, que são mostradas no exemplo e estão disponíveis publicamente.

O exemplo a seguir mostra como incluir o contêiner Amazon ECR como parâmetro. Isso permite HealthOmics verificar as permissões de acesso ao seu contêiner antes que ele inicie a execução.

{ ... "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710" }

O exemplo a seguir mostra como especificar quais arquivos usar em sua execução, quando os arquivos estão em um bucket do 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" }

Se você quiser especificar arquivos de um armazenamento de sequência, indique isso conforme mostrado no exemplo a seguir, usando o URI para o armazenamento de sequência.

{ "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" }

Em seguida, você pode definir seu fluxo de trabalho na WDL, conforme mostrado a seguir.

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}" } }