

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# File modello di parametri per i flussi HealthOmics di lavoro
<a name="parameter-templates"></a>

I modelli di parametri definiscono i parametri di input per un flusso di lavoro. È possibile definire i parametri di input per rendere il flusso di lavoro più flessibile e versatile. Ad esempio, puoi definire un parametro per la posizione in Amazon S3 dei file del genoma di riferimento. I modelli di parametri possono essere forniti tramite un servizio di repository basato su Git o l'unità locale. Gli utenti possono quindi eseguire il flusso di lavoro utilizzando vari set di dati. 

È possibile creare il modello di parametri per il flusso di lavoro HealthOmics oppure generare il modello di parametri automaticamente.

Il modello di parametro è un file JSON. Nel file, ogni parametro di input è un oggetto denominato che deve corrispondere al nome dell'input del flusso di lavoro. Quando si avvia un'esecuzione, se non si forniscono valori per tutti i parametri richiesti, l'esecuzione ha esito negativo.

L'oggetto del parametro di input include i seguenti attributi:
+ **description**— Questo attributo obbligatorio è una stringa che la console visualizza nella pagina **Start run**. Questa descrizione viene conservata anche come metadati di esecuzione.
+ **optional**— Questo attributo opzionale indica se il parametro di input è facoltativo. Se non si specifica il **optional** campo, il parametro di input è obbligatorio.

Il seguente modello di parametri di esempio mostra come specificare i parametri di input.

```
{
  "myRequiredParameter1": {
     "description": "this parameter is required",
  },
  "myRequiredParameter2": {
     "description": "this parameter is also required",
     "optional": false
  },
  "myOptionalParameter": {
     "description": "this parameter is optional",
     "optional": true
  }
}
```

## Generazione di modelli di parametri
<a name="parameter-parsing"></a>

HealthOmics genera il modello di parametri analizzando la definizione del flusso di lavoro per rilevare i parametri di input. Se fornite un file modello di parametri per un flusso di lavoro, i parametri del file sostituiscono i parametri rilevati nella definizione del flusso di lavoro.

Esistono lievi differenze tra la logica di analisi dei motori CWL, WDL e Nextflow, come descritto nelle sezioni seguenti. 

**Topics**
+ [Rilevamento dei parametri per CWL](#parameter-parsing-cwl)
+ [Rilevamento dei parametri per WDL](#parameter-parsing-wdl)
+ [Rilevamento dei parametri per Nextflow](#parameter-parsing-nextflow)

### Rilevamento dei parametri per CWL
<a name="parameter-parsing-cwl"></a>

Nel motore di workflow CWL, la logica di analisi si basa sui seguenti presupposti:
+ Tutti i tipi nullable supportati sono contrassegnati come parametri di input opzionali.
+ Tutti i tipi supportati non nulli sono contrassegnati come parametri di input obbligatori.
+ Tutti i parametri con valori predefiniti sono contrassegnati come parametri di input opzionali.
+ Le descrizioni vengono estratte dalla `label` sezione della definizione del `main` flusso di lavoro. Se non `label` è specificato, la descrizione sarà vuota (una stringa vuota). 

Le tabelle seguenti mostrano esempi di interpolazione CWL. Per ogni esempio, il nome del parametro è. `x` Se il parametro è obbligatorio, è necessario fornire un valore per il parametro. Se il parametro è facoltativo, non è necessario fornire un valore.

Questa tabella mostra esempi di interpolazione CWL per tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 o 2 o... | Sì | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | Il valore predefinito è 2. L'input valido è 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?</pre>  | L'input valido è Nessuno o 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | Il valore predefinito è 2. L'input valido è Nessuno o 1 o 2 o... | No | 

La tabella seguente mostra esempi di interpolazione CWL per tipi complessi. Un tipo complesso è una raccolta di tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] o [1,2,3]  | Sì | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Nessuno oppure [] o [1,2,3]  | No | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] o [Nessuno, 3, Nessuno]  | Sì | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Nessuno] o Nessuno o [1,2,3] o [Nessuno, 3] ma non []  | No | 

### Rilevamento dei parametri per WDL
<a name="parameter-parsing-wdl"></a>

Nel motore di workflow WDL, la logica di analisi si basa sui seguenti presupposti:
+ Tutti i tipi nullable supportati sono contrassegnati come parametri di input opzionali. 
+ Per i tipi supportati che non possono essere annullati:
  + Qualsiasi variabile di input con assegnazione di valori letterali o espressioni è contrassegnata come parametri opzionali. Per esempio:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Se non sono stati assegnati valori o espressioni ai parametri di input, questi verranno contrassegnati come parametri obbligatori. 
+ Le descrizioni vengono estratte dalla definizione `parameter_meta` del `main` flusso di lavoro. Se non `parameter_meta` è specificato, la descrizione sarà vuota (una stringa vuota). Per ulteriori informazioni, vedete la specifica WDL per i [metadati dei parametri](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

Le tabelle seguenti mostrano esempi di interpolazione WDL. Per ogni esempio, il nome del parametro è. `x` Se il parametro è obbligatorio, è necessario fornire un valore per il parametro. Se il parametro è facoltativo, non è necessario fornire un valore.

Questa tabella mostra esempi di interpolazione WDL per tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
| Int x | 1 o 2 o... | Sì | 
| Int x = 2 | 2 | No | 
| Intx = 1\$12 | 3 | No | 
| Int x = y\$1z | y\$1z | No | 
| Int? x | Nessuno o 1 o 2 o... | Sì | 
| Int? x = 2 | Nessuno o 2 | No | 
| Int? x = 1\$12 | Nessuno o 3 | No | 
| Int? x = y\$1z | Nessuno o y\$1z | No | 

La tabella seguente mostra esempi di interpolazione WDL per tipi complessi. Un tipo complesso è una raccolta di tipi primitivi. 


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
| Array [Int] x | [1,2,3] o [] | Sì | 
| Matrice [Int] \$1 x | [1], ma non [] | Sì | 
| Array [Int]? x | Nessuno o [] o [1,2,3] | No | 
| Array [Int?] x | [] o [Nessuno, 3, Nessuno] | Sì | 
| Array [Int?] =? x | [Nessuno] o Nessuno o [1,2,3] o [Nessuno, 3] ma non [] | No | 
| Esempio di struttura \$1String a, Int y\$1 più avanti negli input: Sample MySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Sì | 
| Esempio di struttura \$1String a, Int y\$1 più avanti negli input: Sample? MySample |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | No | 

### Rilevamento dei parametri per Nextflow
<a name="parameter-parsing-nextflow"></a>

Per Nextflow, HealthOmics genera il modello di parametro analizzando il file. `nextflow_schema.json` Se la definizione del flusso di lavoro non include un file di schema, HealthOmics analizza il file di definizione del flusso di lavoro principale.

**Topics**
+ [Analisi del file di schema](#parameter-parsing-nextflow-schema)
+ [Analisi del file principale](#parameter-parsing-nextflow-main)
+ [Parametri annidati](#parameter-parsing-nextflow-nested)
+ [Esempi di interpolazione Nextflow](#parameter-parsing-nextflow-examples)

#### Analisi del file di schema
<a name="parameter-parsing-nextflow-schema"></a>

Affinché l'analisi funzioni correttamente, assicurati che il file di schema soddisfi i seguenti requisiti:
+ Il file di schema è denominato `nextflow_schema.json` e si trova nella stessa directory del file di workflow principale.
+ Il file di schema è JSON valido come definito in uno dei seguenti schemi:
  + [schema json. org/draft/2020-12/schema](https://json-schema.org/draft/2020-12/schema).
  + [schema json. org/draft-07/schema](https://json-schema.org/draft-07/schema).

HealthOmics analizza il `nextflow_schema.json` file per generare il modello di parametro:
+ Estrae tutto ciò **properties** che è definito nello schema.
+ Include la proprietà **description** se disponibile per la proprietà.
+ Identifica se ogni parametro è facoltativo o obbligatorio, in base al **required** campo della proprietà.

L'esempio seguente mostra un file di definizione e il file dei parametri generato.

```
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "$defs": {
        "input_options": {
            "title": "Input options",
            "type": "object",
            "required": ["input_file"],
            "properties": {
                "input_file": {
                    "type": "string",
                    "format": "file-path",
                    "pattern": "^s3://[a-z0-9.-]{3,63}(?:/\\S*)?$",
                    "description": "description for input_file"
                },
                "input_num": {
                    "type": "integer",
                    "default": 42,
                    "description": "description for input_num"
                }
            }
        },
        "output_options": {
            "title": "Output options",
            "type": "object",
            "required": ["output_dir"],
            "properties": {
                "output_dir": {
                    "type": "string",
                    "format": "file-path",
                    "description": "description for output_dir",
                }
            }
        }
    },
    "properties": {
        "ungrouped_input_bool": {
            "type": "boolean",
            "default": true
        }
    },
    "required": ["ungrouped_input_bool"],
    "allOf": [
        { "$ref": "#/$defs/input_options" },
        { "$ref": "#/$defs/output_options" }
    ]
}
```

Il modello di parametro generato:

```
{
    "input_file": {
        "description": "description for input_file",
        "optional": False
    },
    "input_num": {
        "description": "description for input_num",
        "optional": True
    },
    "output_dir": {
        "description": "description for output_dir",
        "optional": False
    },
    "ungrouped_input_bool": {
        "description": None,
        "optional": False
    }
}
```

#### Analisi del file principale
<a name="parameter-parsing-nextflow-main"></a>

Se la definizione del flusso di lavoro non include un `nextflow_schema.json` file, HealthOmics analizza il file di definizione del flusso di lavoro principale.

HealthOmics analizza le `params` espressioni presenti nel file di definizione del flusso di lavoro principale e nel `nextflow.config` file. Tutte le `params` versioni con valori predefiniti sono contrassegnate come opzionali.

Affinché l'analisi funzioni correttamente, tieni presente i seguenti requisiti:
+ HealthOmics analizza solo il file di definizione del flusso di lavoro principale. Per garantire che tutti i parametri vengano acquisiti, ti consigliamo di collegarlo a tutti **params** i sottomoduli e ai flussi di lavoro importati.
+ Il file di configurazione è facoltativo. Se ne definite uno, assegnategli un nome `nextflow.config` e inseritelo nella stessa directory del file di definizione del flusso di lavoro principale.

L'esempio seguente mostra un file di definizione e il modello di parametri generato.

```
params.input_file = "default.txt"
params.threads = 4
params.memory = "8GB"

workflow {
    if (params.version) {
        println "Using version: ${params.version}"
    }
}
```

Il modello di parametro generato:

```
{
    "input_file": {
        "description": None,
        "optional": True
    },
    "threads": {
        "description": None,
        "optional": True
    },
    "memory": {
        "description": None,
        "optional": True
    },
    "version": {
        "description": None,
        "optional": False
    }
}
```

Per i valori predefiniti definiti in nextflow.config, HealthOmics raccoglie le `params` assegnazioni e i parametri dichiarati all'interno`params {}`, come illustrato nell'esempio seguente. Nelle istruzioni di assegnazione, `params` deve apparire nella parte sinistra dell'istruzione.

```
params.alpha = "alpha"
params.beta = "beta"

params {
    gamma = "gamma"
    delta = "delta"
}

env {
   // ignored, as this assignment isn't in the params block
   VERSION = "TEST"  
}

// ignored, as params is not on the left side
interpolated_image = "${params.cli_image}"
```

Il modello di parametro generato:

```
{
    // other params in your main workflow defintion
    "alpha": {
        "description": None,
        "optional": True
    },
    "beta": {
        "description": None,
        "optional": True
    },
    "gamma": {
        "description": None,
        "optional": True
    },
    "delta": {
        "description": None,
        "optional": True
    }
}
```

#### Parametri annidati
<a name="parameter-parsing-nextflow-nested"></a>

Entrambi `nextflow.config` consentono `nextflow_schema.json` parametri annidati. Tuttavia, il modello di HealthOmics parametri richiede solo i parametri di primo livello. Se il flusso di lavoro utilizza un parametro annidato, è necessario fornire un oggetto JSON come input per quel parametro.

##### Parametri annidati nei file di schema
<a name="parameter-parsing-schema-nested"></a>

HealthOmics salti annidati **params** durante l'analisi di un file. `nextflow_schema.json` Ad esempio, se si definisce il seguente file: `nextflow_schema.json`

```
{
    "properties": {
        "input": {
            "properties": {
                "input_file": { ... },
                "input_num": { ... }
            }
        },
        "input_bool": { ... }
    }
}
```

HealthOmics ignora `input_file` e `input_num` quando genera il modello di parametro:

```
{
    "input": {
        "description": None,
        "optional": True
    },
    "input_bool": {
        "description": None,
        "optional": True
    }
}
```

Quando si esegue questo flusso di lavoro, HealthOmics si aspetta un `input.json` file simile al seguente:

```
{
   "input": {
       "input_file": "s3://bucket/obj",
       "input_num": 2
   },
   "input_bool": false
}
```

##### Parametri annidati nei file di configurazione
<a name="parameter-parsing-config-nested"></a>

HealthOmics non raccoglie i dati annidati **params** in un `nextflow.config` file e li salta durante l'analisi. Ad esempio, se definisci il seguente file: `nextflow.config`

```
params.alpha = "alpha"
  params.nested.beta = "beta"
  
  params {
      gamma = "gamma"
      group {
          delta = "delta"
      }
  }
```

HealthOmics ignora `params.nested.beta` e `params.group.delta` quando genera il modello di parametro:

```
{
    "alpha": {
        "description": None,
        "optional": True
    },
    "gamma": {
        "description": None,
        "optional": True
    }
}
```

#### Esempi di interpolazione Nextflow
<a name="parameter-parsing-nextflow-examples"></a>

La tabella seguente mostra esempi di interpolazione Nextflow per i parametri nel file principale.


| Parametri | Richiesto | 
| --- | --- | 
| params.input\$1file | Sì | 
| params.input\$1file = "s3://bucket/data.json» | No | 
| params.nested.input\$1file | N/D | 
| params.nested.input\$1file = "s3://bucket/data.json» | N/D | 

La tabella seguente mostra esempi di interpolazione Nextflow per i parametri nel file. `nextflow.config`


| Parametri | Richiesto | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | No | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | No | 
|  <pre>params {<br />   nested {<br />     input_file = "s3://bucket/data.json"    <br />   }<br />}</pre>  | N/D | 
|  <pre>input_file = params.input_file</pre>  | N/D | 