{"_id":"5cbf2fba467feb0251f5ba3c","project":"5773dcfc255e820e00e1cd4d","version":{"_id":"5773dcfc255e820e00e1cd50","__v":27,"project":"5773dcfc255e820e00e1cd4d","createdAt":"2016-06-29T14:36:44.812Z","releaseDate":"2016-06-29T14:36:44.812Z","categories":["5773dcfc255e820e00e1cd51","5773df36904b0c0e00ef05ff","577baf92451b1e0e006075ac","577bb183b7ee4a0e007c4e8d","577ce77a1cf3cb0e0048e5ea","577d11865fd4de0e00cc3dab","578e62792c3c790e00937597","578f4fd98335ca0e006d5c84","578f5e5c3d04570e00976ebb","57bc35f7531e000e0075d118","57f801b3760f3a1700219ebb","5804d55d1642890f00803623","581c8d55c0dc651900aa9350","589dcf8ba8c63b3b00c3704f","594cebadd8a2f7001b0b53b2","59a562f46a5d8c00238e309a","5a2aa096e25025003c582b58","5a2e79566c771d003ca0acd4","5a3a5166142db90026f24007","5a3a52b5bcc254001c4bf152","5a3a574a2be213002675c6d2","5a3a66bb2be213002675cb73","5a3a6e4854faf60030b63159","5c8a68278e883901341de571","5cb9971e57bf020024523c7b","5cbf1683e2a36d01d5012ecd","5dc15666a4f788004c5fd7d7"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"category":{"_id":"5cbf1683e2a36d01d5012ecd","project":"5773dcfc255e820e00e1cd4d","version":"5773dcfc255e820e00e1cd50","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2019-04-23T13:43:31.578Z","from_sync":false,"order":13,"slug":"edit-an-app","title":"EDIT AN APP"},"user":"5767bc73bb15f40e00a28777","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2019-04-23T15:31:06.151Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":3,"body":"## Creating a tool\n1. Navigate to your project.\n2. Click the **Apps** tab.\n3. Click **+Add app** in the top-right corner.\n4. Select the **Create New App** tab.\n5. In the **Tool** section on the right click **Create a Tool**.\n6. Select whether to use the older **sbg:draft-2** version of CWL, or the latest CWL **v1.0** version. Even if you still have the legacy editor selected as the default editor, CWL v1.0 tools are automatically opened in the new editor. Read more about [CWL formats and versions](doc:about-the-common-workflow-language).\n7. Click **Create**. You are now taken to the tool editor, where you can start entering the tool information in the sections described below.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"If you selected the new editor as the default one and want to switch back to the legacy editor, click your username in the top-right corner of the new editor and select **Switch back to the legacy editor**. This option is available only for apps described using the sbg:draft-2 version of CWL.\"\n}\n[/block]\n## Tool editor reference\n### Docker image\nThis is the location of the Docker image containing the tool.\n\nIf the image is in the Cavatica image registry, the format is `pgc-images.sbgenomics.com/<repository>/<imagename>:<tag>`,  where:\n\n* `<repository>` is your Cavatica user name, all in lowercase, and with any non-alphanumeric character in your username replaced with an underscore (“_”).\n* `<imagename>` is the unique name of the image\n* `<tag>` by convention, is the version number of the image.\n\nIf the image is in Docker hub, the format is `<docker-repository>:<tag>`, where:\n\n* `<docker-repository>` is the name of the Docker repository containing the image\n* `<tag>` by convention, is the version number of the image.\n\n### Base command\nThe base command is the part of the command before any items you want to specify as inputs to be resolved at runtime. This will include the command itself, and usually the sub-command, if present. It may also include command options and parameters that you want to set to hard-coded values, provided these can be positioned at the start of the command line. Alternatively, hardcoded command options and parameters can be defined as [arguments](#section-arguments), which can have defined positions in the command line.\n\nYou can specify everything in the base command as a single section, or, if you are using the sbg:draft-2 version of CWL, you can build this up in multiple sections. If you want to include [dynamic expressions](doc:dynamic-expressions-in-tool-descriptions-1) in the base command (CWL sbg:draft-2 only), you will have to use separate sections for each fixed part and each dynamic expression as you can’t mix fixed items and dynamic items in the same section.\n\n**Note:** If you are using CWL v1.0, you cannot include expressions in the base command, so any dynamic expressions need to be specified as an argument, not as part of the base command.\n\n### Arguments\nArguments are command options and parameters that you want to set to predefined values that are applied every time when the tool executes. Arguments can also include dynamic expressions. For example, you could use a fixed expression that generates the output file name based on the name of an input file.\n\nIf the argument could be positioned immediately after the base command in the command line, you could set it as part of the base command instead. But note that CWL v1.0 does not support dynamic expressions in base commands, so if you need a dynamic expression you will have to use an argument.\n\nSet the values in the object inspector as follows:\n\n* **Use command line binding**: whether to use command line binding. Set this option if you need to specify a prefix or a position (or both) for the argument, and clear it if the argument is a simple value or dynamic expression.\n   * **Prefix** (shown if **Use command line binding** is selected): any prefix required by the argument. If the prefix is separated from the value by “=”, include “=” in the prefix string. Leave blank if not required.\n   * **Expression** (shown if **Use command line binding** is selected): the value to use for the argument. This can be a [dynamic expression](doc:dynamic-expressions-in-tool-descriptions-1).\n   * **Separate value and prefix** (shown if **Use command line binding** is selected): whether there is a space between any prefix and the value.\n   * **Position** (shown if **Use command line binding** is selected): the position in the command line to place this argument, if applicable. Position ordering includes both arguments and commands in a single numbering sequence. Position values are relative, not absolute, so, for example, if you had two positional arguments and one positional input, you could specify positions **-1**, **3** and **99**. Defaults to **0** if not set.\n* **Value** (shown if **Use command line binding** is cleared): the value to use for this argument. This can be a [dynamic expression](doc:dynamic-expressions-in-tool-descriptions-1).\n\n### Input ports\nInput ports correspond to the variable parameters that can be set each time the tool is executed.\n\nThe following properties can be set in the object inspector for an input port:\n\n* **Required**: whether this input is mandatory.\n* **ID**: identifier of the input. This is shown against the input when the tool is placed in a workflow.\n* **Type**: the type of the input. Valid values are **array**, **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** (a HashMap with string keys and string values, CWL sbg:draft-2 only) and **Directory** (CWL v1.0 only).\n* **Items type** (only shown if **Type** is array): The type of the items in the array. Valid values are **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL v1.0 only).\n* **Allow array as well as single item** (not shown if **Type** is array): whether the input is capable of accepting multiple items. If you set **Type** to a non-array type, and set **Allow array as well as single item**, the input can either be a single item or an array, whereas if you set **Type** to **Array**, and set Items type to an element type, execution will fail if a single item is supplied instead of an array.\n* **Symbols** (only shown if **Type** is **enum**, or **Type** is **array** and **Item Type** is **enum**): a list of the valid values for the input item.\n* **Include in command line** (not shown for **map**): whether to include this input item in the command line. Usually this will be set, as most inputs to the tool will be included in the command line, but occasionally you may want to supply an input to the tool which can be used in dynamic expressions to define other inputs, but doesn’t appear in the command line itself.\n* **Value** (not shown if **Type** is **record**, or **Type** is **array** and **Item Type** is **record**): the value to assign to this input. This is optional (the value for an input port will commonly be set when the tool is executed). If supplied, this must be a dynamic expression, which will probably be constructed to transform the value supplied for that input. In CWL v1.0 apps, if no input data is set during execution, expressions entered in this field will not be evaluated. To still have a value in the command line when there is no input data, please use **Arguments**.\n* **Prefix**: any prefix required to identify the input. Leave blank if not required.\n* **Array Item Prefix** (only shown if **Type** is **array**): the prefix to add before each item in the array. Available for CWL 1.0 apps only. For the matching functionality in sbg:draft-2 apps, see **Item Separator** below.\n* **Position**: the position in the command line to place this input, if applicable. Position ordering includes both arguments and commands in a single numbering sequence. Position values are relative, not absolute, so, for example, if you had two positional arguments and one positional input, you could specify positions **-1**, **3** and **99**. Defaults to **0** if not set.\n* **Separate value and prefix**: whether there is a space between any prefix and the value.\n* **Item separator** (only shown if **Type** is **array**): the separator to use between the elements in the array. One of **equal**, **comma**, **semicolon**, **space** or **repeat** (this sets the separator to **null**, and repeats the prefix in front of every item in the array. Available only for sbg:draft-2 apps).\n\n**Stage input**\n* **Stage input** (CWL sbg:draft-2 only, and only shown if **Type** is **record** or **File**, or if **Type** is **array** and **Item Type** is **record** or **File**): whether to make any file data available in the tool’s working directory. One of **None** (the file is available as an input to the tool, but isn’t copied into the tool’s working directory) **Copy** (the file is copied into the tool’s working directory) or **Link** (a symlink to the file is copied to the tool’s working directory). You can read more about using staged inputs [here](doc:input-file-options#section-stage-input).\n\n[Learn more](doc:input-file-options#section-stage-input) about staging inputs in CWL v1.0 apps.\n\n**Secondary files**\n* **Secondary files** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**, and, for CWL sbg:draft-2, if **Include in command line** is set): an optional file extension for a secondary file related to this file, if the tool supports it, for example an index file associated with a BAM file. Defined secondary file settings are also kept when the tool is placed in a workflow. You can read more about using secondary files [here](tool-input-ports#section-secondary-files).\n\n**Description**\n* **Description**: more information about the functionality of the input port. This is provided to help the user of the tool when the tool is placed in a workflow, and does not affect operation of the tool.\n   * **Label**: If provided, this value is shown against the input port in the workflow editor.\n   * **Description**: More extensive text description of the input port.\n   * **Alternative Prefix**: If a single input has two possible command line prefixes, e.g. **-b** and **--bam**, the second prefix can be entered here for information purposes.\n   * **Category**: Descriptive text field that can be used to organize inputs - multiple inputs can be grouped in one category.\n   * **File type(s)** (if the input port **Type** is **File**): specifies the valid file types that can be connected to this port (for example, TXT, BAM).\n\n**Test value**\n* Any value entered in this field is used for two purposes:\n   * To evaluate an expression, if used to generate the value of the given input field.\n   * To be displayed in the command line preview.\n\n### Output ports\nOutput ports correspond to the items that are produced when the tool is executed.\n\nThe following properties can be set in the object inspector for an output port. For more information, see the [details on output ports](https://docs.sevenbridges.com/docs/tool-output-ports#section-basic-information).\n\nSet the values in the object inspector as follows:\n\n* **Required**: whether this output is mandatory.\n* **ID**: identifier of the output. This is shown against the output when the tool is placed in a workflow.\n* **Type**: the type of the output. Valid values are **array**, **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL 1.0).\n* **Items type** (only shown if **Type** is **array**): The type of the items in the array. Valid values are **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL 1.0).\n* **Allow array as well as single item** (not shown if **Type** is **array**): whether the output is capable of accepting multiple items.\n* **Symbols** (only shown if **Type** is **enum**, or **Type** is **array** and **Item Type** is **enum**): a list of the valid values for the output item.\n* **Glob**: A wildcard pattern for the names of the files in the tool’s working directory that will be associated with this output port. For example, setting a value of ***.bam** will associate all BAM files with this output port. Note that subfolders are not searched recursively, although you can specify a subfolder as part of the glob syntax if required. You can read more about using globs [here](https://docs.sevenbridges.com/page/glob).\n\n**Metadata**\n* **Metadata** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**): the metadata to annotate the file with. The **Inherit** field allows you to specify which input file to inherit the data from, and you can also add additional metadata as **Key**, **Value** pairs.\n\n**Output eval**\n* **Output eval**: a JavaScript expression that will be used to access and manipulate the first 6 KB of the output file or files. **Load contents** specifies whether the content is actually loaded, and hence can be manipulated, or just read. You can see an example [here](https://docs.sevenbridges.com/docs/tool-output-ports#section-output-eval).\n\nFor CWL 1.0 tools, the **Output Eval** field will be populated with the expression that will be used for inheriting metadata. If there is a conflict, you will see a warning under the ID field and will be able to solve the issue by editing the expression in the **Output Eval** field.\n\n**Secondary files**\n* **Secondary files** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**): an optional file extension for a secondary file related to this file, if the tool supports it, for example an index file associated with a BAM file. You can read more about using secondary files [here](https://docs.sevenbridges.com/docs/tool-input-ports#section-secondary-files).\n\n**Description**\nContains text fields that help describe the functionality of the output port in more detail. For specific information about each of the fields, please see **Description** in the **Input ports** section above.\n\n### Computational Resources\nComputational resources specify the minimum resource requirements for the tool. The execution will fail if the resources specified here cannot be allocated.\n\n* **Memory (min)**: the minimum amount of memory required to execute the tool. This can include a [dynamic expression](doc:introduction-to-tool-wrapping#about-dynamic-expressions).\n* **CPU (min):** the minimum number of CPUs required to execute the tool. You can select between **single-thread** and **multi-thread** options, or set a custom number of CPUs. The **Custom** option can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions).\n\n### Hints\nHints specify execution requirements and suggestions, for example, the AWS instance type to use. \n* **Class**: the class of hint you are setting. The available classes are listed [here](list-of-execution-hints).\n* **Value**: the value of the hint. This can be a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions).\n\n### File Requirements\nThese are any additional files the tool needs to run that aren’t already included in the Docker container. For example, you could specify a configuration file here instead of installing it in the Docker container. Any files specified here will be created in the working directory when the tool executes.\n\n* **File name**: the name of the file to be created when the tool executes. This can be a [dynamic expression](introduction-to-tool-wrapping#about-dynamic-expressions).\n* **File content**: the contents of the file.This can include [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions).\n\n### Other\nThe stream files are optional. They allow you to specify files to use for standard input or standard output.\n\n**Stdin redirect**: If you want to pipe data into standard input when the tool runs, enter the name of the file containing the data here. The filename can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions).\n\n**Stdout redirect**: If you want to save the standard output from the tool, enter the name of the file you want to use here. The filename can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions).\n\n**Success Codes**: Define which app exit code(s) will be treated as success codes.\n\n**Temporary Fail Codes**: Define which app exit code(s) will be treated as temporary fail codes.\n\n**Permanent Fail Codes**: Define which app exit code(s) will be treated as indicators of permanent failure.\n\n### App Info tab\nThe **App Info** tab contains information about the tool. This information is shown when the tool is placed in a workflow.\n\nHover over a field to see the **Edit** option.","excerpt":"","slug":"create-a-tool","type":"basic","title":"Create a tool"}
## Creating a tool 1. Navigate to your project. 2. Click the **Apps** tab. 3. Click **+Add app** in the top-right corner. 4. Select the **Create New App** tab. 5. In the **Tool** section on the right click **Create a Tool**. 6. Select whether to use the older **sbg:draft-2** version of CWL, or the latest CWL **v1.0** version. Even if you still have the legacy editor selected as the default editor, CWL v1.0 tools are automatically opened in the new editor. Read more about [CWL formats and versions](doc:about-the-common-workflow-language). 7. Click **Create**. You are now taken to the tool editor, where you can start entering the tool information in the sections described below. [block:callout] { "type": "info", "body": "If you selected the new editor as the default one and want to switch back to the legacy editor, click your username in the top-right corner of the new editor and select **Switch back to the legacy editor**. This option is available only for apps described using the sbg:draft-2 version of CWL." } [/block] ## Tool editor reference ### Docker image This is the location of the Docker image containing the tool. If the image is in the Cavatica image registry, the format is `pgc-images.sbgenomics.com/<repository>/<imagename>:<tag>`, where: * `<repository>` is your Cavatica user name, all in lowercase, and with any non-alphanumeric character in your username replaced with an underscore (“_”). * `<imagename>` is the unique name of the image * `<tag>` by convention, is the version number of the image. If the image is in Docker hub, the format is `<docker-repository>:<tag>`, where: * `<docker-repository>` is the name of the Docker repository containing the image * `<tag>` by convention, is the version number of the image. ### Base command The base command is the part of the command before any items you want to specify as inputs to be resolved at runtime. This will include the command itself, and usually the sub-command, if present. It may also include command options and parameters that you want to set to hard-coded values, provided these can be positioned at the start of the command line. Alternatively, hardcoded command options and parameters can be defined as [arguments](#section-arguments), which can have defined positions in the command line. You can specify everything in the base command as a single section, or, if you are using the sbg:draft-2 version of CWL, you can build this up in multiple sections. If you want to include [dynamic expressions](doc:dynamic-expressions-in-tool-descriptions-1) in the base command (CWL sbg:draft-2 only), you will have to use separate sections for each fixed part and each dynamic expression as you can’t mix fixed items and dynamic items in the same section. **Note:** If you are using CWL v1.0, you cannot include expressions in the base command, so any dynamic expressions need to be specified as an argument, not as part of the base command. ### Arguments Arguments are command options and parameters that you want to set to predefined values that are applied every time when the tool executes. Arguments can also include dynamic expressions. For example, you could use a fixed expression that generates the output file name based on the name of an input file. If the argument could be positioned immediately after the base command in the command line, you could set it as part of the base command instead. But note that CWL v1.0 does not support dynamic expressions in base commands, so if you need a dynamic expression you will have to use an argument. Set the values in the object inspector as follows: * **Use command line binding**: whether to use command line binding. Set this option if you need to specify a prefix or a position (or both) for the argument, and clear it if the argument is a simple value or dynamic expression. * **Prefix** (shown if **Use command line binding** is selected): any prefix required by the argument. If the prefix is separated from the value by “=”, include “=” in the prefix string. Leave blank if not required. * **Expression** (shown if **Use command line binding** is selected): the value to use for the argument. This can be a [dynamic expression](doc:dynamic-expressions-in-tool-descriptions-1). * **Separate value and prefix** (shown if **Use command line binding** is selected): whether there is a space between any prefix and the value. * **Position** (shown if **Use command line binding** is selected): the position in the command line to place this argument, if applicable. Position ordering includes both arguments and commands in a single numbering sequence. Position values are relative, not absolute, so, for example, if you had two positional arguments and one positional input, you could specify positions **-1**, **3** and **99**. Defaults to **0** if not set. * **Value** (shown if **Use command line binding** is cleared): the value to use for this argument. This can be a [dynamic expression](doc:dynamic-expressions-in-tool-descriptions-1). ### Input ports Input ports correspond to the variable parameters that can be set each time the tool is executed. The following properties can be set in the object inspector for an input port: * **Required**: whether this input is mandatory. * **ID**: identifier of the input. This is shown against the input when the tool is placed in a workflow. * **Type**: the type of the input. Valid values are **array**, **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** (a HashMap with string keys and string values, CWL sbg:draft-2 only) and **Directory** (CWL v1.0 only). * **Items type** (only shown if **Type** is array): The type of the items in the array. Valid values are **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL v1.0 only). * **Allow array as well as single item** (not shown if **Type** is array): whether the input is capable of accepting multiple items. If you set **Type** to a non-array type, and set **Allow array as well as single item**, the input can either be a single item or an array, whereas if you set **Type** to **Array**, and set Items type to an element type, execution will fail if a single item is supplied instead of an array. * **Symbols** (only shown if **Type** is **enum**, or **Type** is **array** and **Item Type** is **enum**): a list of the valid values for the input item. * **Include in command line** (not shown for **map**): whether to include this input item in the command line. Usually this will be set, as most inputs to the tool will be included in the command line, but occasionally you may want to supply an input to the tool which can be used in dynamic expressions to define other inputs, but doesn’t appear in the command line itself. * **Value** (not shown if **Type** is **record**, or **Type** is **array** and **Item Type** is **record**): the value to assign to this input. This is optional (the value for an input port will commonly be set when the tool is executed). If supplied, this must be a dynamic expression, which will probably be constructed to transform the value supplied for that input. In CWL v1.0 apps, if no input data is set during execution, expressions entered in this field will not be evaluated. To still have a value in the command line when there is no input data, please use **Arguments**. * **Prefix**: any prefix required to identify the input. Leave blank if not required. * **Array Item Prefix** (only shown if **Type** is **array**): the prefix to add before each item in the array. Available for CWL 1.0 apps only. For the matching functionality in sbg:draft-2 apps, see **Item Separator** below. * **Position**: the position in the command line to place this input, if applicable. Position ordering includes both arguments and commands in a single numbering sequence. Position values are relative, not absolute, so, for example, if you had two positional arguments and one positional input, you could specify positions **-1**, **3** and **99**. Defaults to **0** if not set. * **Separate value and prefix**: whether there is a space between any prefix and the value. * **Item separator** (only shown if **Type** is **array**): the separator to use between the elements in the array. One of **equal**, **comma**, **semicolon**, **space** or **repeat** (this sets the separator to **null**, and repeats the prefix in front of every item in the array. Available only for sbg:draft-2 apps). **Stage input** * **Stage input** (CWL sbg:draft-2 only, and only shown if **Type** is **record** or **File**, or if **Type** is **array** and **Item Type** is **record** or **File**): whether to make any file data available in the tool’s working directory. One of **None** (the file is available as an input to the tool, but isn’t copied into the tool’s working directory) **Copy** (the file is copied into the tool’s working directory) or **Link** (a symlink to the file is copied to the tool’s working directory). You can read more about using staged inputs [here](doc:input-file-options#section-stage-input). [Learn more](doc:input-file-options#section-stage-input) about staging inputs in CWL v1.0 apps. **Secondary files** * **Secondary files** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**, and, for CWL sbg:draft-2, if **Include in command line** is set): an optional file extension for a secondary file related to this file, if the tool supports it, for example an index file associated with a BAM file. Defined secondary file settings are also kept when the tool is placed in a workflow. You can read more about using secondary files [here](tool-input-ports#section-secondary-files). **Description** * **Description**: more information about the functionality of the input port. This is provided to help the user of the tool when the tool is placed in a workflow, and does not affect operation of the tool. * **Label**: If provided, this value is shown against the input port in the workflow editor. * **Description**: More extensive text description of the input port. * **Alternative Prefix**: If a single input has two possible command line prefixes, e.g. **-b** and **--bam**, the second prefix can be entered here for information purposes. * **Category**: Descriptive text field that can be used to organize inputs - multiple inputs can be grouped in one category. * **File type(s)** (if the input port **Type** is **File**): specifies the valid file types that can be connected to this port (for example, TXT, BAM). **Test value** * Any value entered in this field is used for two purposes: * To evaluate an expression, if used to generate the value of the given input field. * To be displayed in the command line preview. ### Output ports Output ports correspond to the items that are produced when the tool is executed. The following properties can be set in the object inspector for an output port. For more information, see the [details on output ports](https://docs.sevenbridges.com/docs/tool-output-ports#section-basic-information). Set the values in the object inspector as follows: * **Required**: whether this output is mandatory. * **ID**: identifier of the output. This is shown against the output when the tool is placed in a workflow. * **Type**: the type of the output. Valid values are **array**, **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL 1.0). * **Items type** (only shown if **Type** is **array**): The type of the items in the array. Valid values are **enum**, **record**, **File**, **string**, **int**, **float**, **boolean**, **map** and **Directory** (CWL 1.0). * **Allow array as well as single item** (not shown if **Type** is **array**): whether the output is capable of accepting multiple items. * **Symbols** (only shown if **Type** is **enum**, or **Type** is **array** and **Item Type** is **enum**): a list of the valid values for the output item. * **Glob**: A wildcard pattern for the names of the files in the tool’s working directory that will be associated with this output port. For example, setting a value of ***.bam** will associate all BAM files with this output port. Note that subfolders are not searched recursively, although you can specify a subfolder as part of the glob syntax if required. You can read more about using globs [here](https://docs.sevenbridges.com/page/glob). **Metadata** * **Metadata** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**): the metadata to annotate the file with. The **Inherit** field allows you to specify which input file to inherit the data from, and you can also add additional metadata as **Key**, **Value** pairs. **Output eval** * **Output eval**: a JavaScript expression that will be used to access and manipulate the first 6 KB of the output file or files. **Load contents** specifies whether the content is actually loaded, and hence can be manipulated, or just read. You can see an example [here](https://docs.sevenbridges.com/docs/tool-output-ports#section-output-eval). For CWL 1.0 tools, the **Output Eval** field will be populated with the expression that will be used for inheriting metadata. If there is a conflict, you will see a warning under the ID field and will be able to solve the issue by editing the expression in the **Output Eval** field. **Secondary files** * **Secondary files** (only shown if **Type** is **File**, or **Type** is **array** and **Item Type** is **File**): an optional file extension for a secondary file related to this file, if the tool supports it, for example an index file associated with a BAM file. You can read more about using secondary files [here](https://docs.sevenbridges.com/docs/tool-input-ports#section-secondary-files). **Description** Contains text fields that help describe the functionality of the output port in more detail. For specific information about each of the fields, please see **Description** in the **Input ports** section above. ### Computational Resources Computational resources specify the minimum resource requirements for the tool. The execution will fail if the resources specified here cannot be allocated. * **Memory (min)**: the minimum amount of memory required to execute the tool. This can include a [dynamic expression](doc:introduction-to-tool-wrapping#about-dynamic-expressions). * **CPU (min):** the minimum number of CPUs required to execute the tool. You can select between **single-thread** and **multi-thread** options, or set a custom number of CPUs. The **Custom** option can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions). ### Hints Hints specify execution requirements and suggestions, for example, the AWS instance type to use. * **Class**: the class of hint you are setting. The available classes are listed [here](list-of-execution-hints). * **Value**: the value of the hint. This can be a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions). ### File Requirements These are any additional files the tool needs to run that aren’t already included in the Docker container. For example, you could specify a configuration file here instead of installing it in the Docker container. Any files specified here will be created in the working directory when the tool executes. * **File name**: the name of the file to be created when the tool executes. This can be a [dynamic expression](introduction-to-tool-wrapping#about-dynamic-expressions). * **File content**: the contents of the file.This can include [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions). ### Other The stream files are optional. They allow you to specify files to use for standard input or standard output. **Stdin redirect**: If you want to pipe data into standard input when the tool runs, enter the name of the file containing the data here. The filename can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions). **Stdout redirect**: If you want to save the standard output from the tool, enter the name of the file you want to use here. The filename can include a [dynamic expression](doc:introduction-to-tool-wrapping#section-about-dynamic-expressions). **Success Codes**: Define which app exit code(s) will be treated as success codes. **Temporary Fail Codes**: Define which app exit code(s) will be treated as temporary fail codes. **Permanent Fail Codes**: Define which app exit code(s) will be treated as indicators of permanent failure. ### App Info tab The **App Info** tab contains information about the tool. This information is shown when the tool is placed in a workflow. Hover over a field to see the **Edit** option.