

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Output tugas dalam definisi HealthOmics alur kerja
<a name="workflows-task-outputs"></a>

Anda menentukan output tugas dalam definisi alur kerja. Secara default, HealthOmics buang semua file tugas perantara saat alur kerja selesai. Untuk mengekspor file perantara, Anda mendefinisikannya sebagai output. 

Jika Anda menggunakan caching panggilan, HealthOmics menyimpan output tugas ke cache, termasuk file perantara yang Anda tentukan sebagai output.

Topik berikut mencakup contoh definisi tugas untuk setiap bahasa definisi alur kerja.

**Topics**
+ [Output tugas untuk WDL](#workflow-task-outputs-wdl)
+ [Output tugas untuk Nextflow](#workflow-task-outputs-nextflow)
+ [Output tugas untuk CWL](#workflow-task-outputs-cwl)

## Output tugas untuk WDL
<a name="workflow-task-outputs-wdl"></a>

Untuk definisi alur kerja yang ditulis dalam WDL, tentukan output Anda di bagian alur kerja tingkat atas. **outputs** 

HealthOmics

**Topics**
+ [Output tugas untuk STDOUT](#task-outputs-wdl-stdout)
+ [Output tugas untuk STDERR](#task-outputs-wdl-stderr)
+ [Output tugas ke file](#task-outputs-wdl-file)
+ [Output tugas ke array file](#task-outputs-wdl-files)

### Output tugas untuk STDOUT
<a name="task-outputs-wdl-stdout"></a>

Contoh ini membuat tugas bernama `SayHello` yang menggemakan konten STDOUT ke file output tugas. **stdout****Fungsi WDL menangkap konten STDOUT (dalam contoh ini, string input Hello World\$1** ) dalam file**stdout\$1file**. 

Karena HealthOmics membuat log untuk semua konten STDOUT, output juga muncul di CloudWatch Log, bersama dengan informasi logging STDERR lainnya untuk tugas tersebut.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stdout_file = SayHello.stdout_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" 
        echo "Current date: $(date)"
        echo "This message was printed to STDOUT"
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stdout_file = stdout()
    }
}
```

### Output tugas untuk STDERR
<a name="task-outputs-wdl-stderr"></a>

Contoh ini membuat tugas bernama `SayHello` yang menggemakan konten STDERR ke file output tugas. **stderr****Fungsi WDL menangkap konten STDERR (dalam contoh ini, string input Hello World\$1** ) dalam file**stderr\$1file**. 

Karena HealthOmics membuat log untuk semua konten STDERR, output akan muncul di CloudWatch Log, bersama dengan informasi logging STDERR lainnya untuk tugas tersebut.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stderr_file = SayHello.stderr_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" >&2
        echo "Current date: $(date)" >&2
        echo "This message was printed to STDERR" >&2
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stderr_file = stderr()
    }
}
```

### Output tugas ke file
<a name="task-outputs-wdl-file"></a>

Dalam contoh ini, SayHello tugas membuat dua file (message.txt dan info.txt) dan secara eksplisit menyatakan file-file ini sebagai output bernama (message\$1file dan info\$1file). 

```
version 1.0
workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File message_file = SayHello.message_file
        File info_file = SayHello.info_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        # Create message file
        echo "~{message}" > message.txt
        
        # Create info file with date and additional information
        echo "Current date: $(date)" > info.txt
        echo "This message was saved to a file" >> info.txt
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File message_file = "message.txt"
        File info_file = "info.txt"
    } 
}
```

### Output tugas ke array file
<a name="task-outputs-wdl-files"></a>

Dalam contoh ini, `GenerateGreetings` tugas menghasilkan array file sebagai output tugas. Tugas secara dinamis menghasilkan satu file ucapan untuk setiap anggota array input. `names` Karena nama file tidak diketahui sampai runtime, definisi output menggunakan fungsi WDL glob () untuk menampilkan semua file yang cocok dengan pola. `*_greeting.txt` 

```
version 1.0
 workflow HelloArray {
    input {
        Array[String] names = ["World", "Friend", "Developer"]
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call GenerateGreetings {
        input:
            names = names,
            container = ubuntu_container
    }

    output {
        Array[File] greeting_files = GenerateGreetings.greeting_files
    }
}

task GenerateGreetings {
    input {
        Array[String] names
        String container
    }

    command  <<<
        # Create a greeting file for each name
        for name in ~{sep=" " names}; do
            echo "Hello, $name!" > ${name}_greeting.txt
        done
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        Array[File] greeting_files = glob("*_greeting.txt")
    }       
 }
```

## Output tugas untuk Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Untuk definisi alur kerja yang ditulis dalam Alur Berikutnya, tentukan direktif **PublishDir** untuk mengekspor konten tugas ke bucket Amazon S3 keluaran Anda. Setel nilai **publishDir** ke. `/mnt/workflow/pubdir` 

 HealthOmics Untuk mengekspor file ke Amazon S3, file harus ada di direktori ini.

Jika tugas menghasilkan sekelompok file output untuk digunakan sebagai input untuk tugas berikutnya, kami sarankan Anda mengelompokkan file-file ini dalam direktori dan memancarkan direktori sebagai output tugas. Menghitung setiap file individu dapat mengakibatkan kemacetan I/O di sistem file yang mendasarinya. Misalnya:

```
process my_task {
      ...
      // recommended
      output "output-folder/", emit: output
      
      // not recommended
      // output "output-folder/**", emit: output
      ...
  }
```

## Output tugas untuk CWL
<a name="workflow-task-outputs-cwl"></a>

Untuk definisi alur kerja yang ditulis dalam CWL, Anda dapat menentukan output tugas menggunakan tugas. `CommandLineTool` Bagian berikut menunjukkan contoh `CommandLineTool` tugas yang menentukan berbagai jenis output.

**Topics**
+ [Output tugas untuk STDOUT](#task-outputs-cwl-stdout)
+ [Output tugas untuk STDERR](#task-outputs-cwl-stderr)
+ [Output tugas ke file](#task-outputs-cwl-file)
+ [Output tugas ke array file](#task-outputs-cwl-files)

### Output tugas untuk STDOUT
<a name="task-outputs-cwl-stdout"></a>

Contoh ini membuat `CommandLineTool` tugas yang menggemakan konten STDOUT ke file keluaran teks bernama. **output.txt** Misalnya, jika Anda memberikan masukan berikut, output tugas yang dihasilkan adalah **Hello World\$1** dalam **output.txt** file.

```
{
    "message": "Hello World!"
}
```

`outputs`Direktif menentukan bahwa nama output adalah **example\$1out** dan jenisnya adalah. `stdout` Untuk tugas hilir untuk mengkonsumsi output dari tugas ini, itu akan merujuk ke output sebagai`example_out`.

Karena HealthOmics membuat log untuk semua konten STDERR dan STDOUT, output juga muncul di CloudWatch Log, bersama dengan informasi logging STDERR lainnya untuk tugas tersebut.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: echo
stdout: output.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
outputs:
  example_out:
    type: stdout

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Output tugas untuk STDERR
<a name="task-outputs-cwl-stderr"></a>

Contoh ini membuat `CommandLineTool` tugas yang menggemakan konten STDERR ke file keluaran teks bernama. **stderr.txt** Tugas memodifikasi `baseCommand` sehingga `echo` menulis ke STDERR (bukan STDOUT).

`outputs`Direktif menentukan bahwa nama output adalah **stderr\$1out** dan jenisnya adalah. `stderr` 

Karena HealthOmics membuat log untuk semua konten STDERR dan STDOUT, output akan muncul di CloudWatch Log, bersama dengan informasi logging STDERR lainnya untuk tugas tersebut.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [bash, -c]
stderr: stderr.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
      shellQuote: true
      valueFrom: "echo $(self) >&2"
outputs:
  stderr_out:
    type: stderr

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Output tugas ke file
<a name="task-outputs-cwl-file"></a>

Contoh ini membuat `CommandLineTool` tugas yang membuat arsip tar terkompresi dari file input. Anda memberikan nama arsip sebagai parameter input (archive\$1name). 

**outputs**Direktif menentukan bahwa jenis `archive_file` output adalah`File`, dan menggunakan referensi ke parameter input untuk mengikat `archive_name` ke file output.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, cfz]
inputs:
  archive_name:
    type: string
    inputBinding:
      position: 1
  input_files:
    type: File[]
    inputBinding:
      position: 2
      
outputs:
  archive_file:
    type: File
    outputBinding:
      glob: "$(inputs.archive_name)"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Output tugas ke array file
<a name="task-outputs-cwl-files"></a>

Dalam contoh ini, `CommandLineTool` tugas membuat array file menggunakan `touch` perintah. Perintah menggunakan string dalam parameter `files-to-create` input untuk memberi nama file. Perintah mengeluarkan array file. Array mencakup file apa pun di direktori kerja yang cocok dengan `glob` pola. Contoh ini menggunakan pola wildcard (“\$1”) yang cocok dengan semua file.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: touch
inputs:
  files-to-create:
    type:
      type: array
      items: string
    inputBinding:
      position: 1
outputs:
  output-files:
    type:
      type: array
      items: File
    outputBinding:
      glob: "*"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```