Ir para o conteúdo

Parte 1: Executar um pipeline de demonstração

Tradução assistida por IA - saiba mais e sugira melhorias

Nesta primeira parte do curso de treinamento Hello nf-core, mostramos como encontrar e experimentar um pipeline do nf-core, configurar e personalizar sua execução para suas necessidades, e entender como a validação de entrada protege contra erros comuns.

Vamos usar um pipeline chamado nf-core/demo que é mantido pelo projeto nf-core como parte de seu inventário de pipelines para fins de demonstração e treinamento.

Certifique-se de que seu diretório de trabalho esteja definido como hello-nf-core/ conforme instruído na página Primeiros passos.


1. Encontrar e recuperar o pipeline nf-core/demo

Vamos começar localizando o pipeline nf-core/demo no site do projeto em nf-co.re, que centraliza todas as informações, como: documentação geral e artigos de ajuda, documentação para cada um dos pipelines, posts de blog, anúncios de eventos e assim por diante.

1.1. Encontrar o pipeline no site

No seu navegador web, vá para https://nf-co.re/pipelines/ e digite demo na barra de pesquisa.

search results

Clique no nome do pipeline, demo, para acessar a página de documentação do pipeline.

Cada pipeline lançado tem uma página dedicada que inclui as seguintes seções de documentação:

  • Introduction: Uma introdução e visão geral do pipeline
  • Usage: Descrições de como executar o pipeline
  • Parameters: Parâmetros do pipeline agrupados com descrições
  • Output: Descrições e exemplos dos arquivos de saída esperados
  • Results: Exemplos de arquivos de saída gerados a partir do conjunto de dados de teste completo
  • Releases & Statistics: Histórico de versões do pipeline e estatísticas

Sempre que você estiver considerando adotar um novo pipeline, você deve ler a documentação do pipeline cuidadosamente primeiro para entender o que ele faz e como deve ser configurado antes de tentar executá-lo.

Dê uma olhada agora e veja se você consegue descobrir:

  • Quais ferramentas o pipeline executará (Verifique a aba: Introduction)
  • Quais entradas e parâmetros o pipeline aceita ou requer (Verifique a aba: Parameters)
  • Quais são as saídas produzidas pelo pipeline (Verifique a aba: Output)

1.1.1. Visão geral do pipeline

A aba Introduction fornece uma visão geral do pipeline, incluindo uma representação visual (chamada de mapa de metrô) e uma lista de ferramentas que são executadas como parte do pipeline.

pipeline subway map

  1. Read QC (FASTQC)
  2. Adapter and quality trimming (SEQTK_TRIM)
  3. Present QC for raw reads (MULTIQC)

1.1.2. Exemplo de linha de comando

A documentação também fornece um arquivo de entrada de exemplo (discutido mais adiante) e um exemplo de linha de comando.

nextflow run nf-core/demo \
  -profile <docker/singularity/.../institute> \
  --input samplesheet.csv \
  --outdir <OUTDIR>

Você notará que o comando de exemplo NÃO especifica um arquivo de fluxo de trabalho, apenas a referência ao repositório do pipeline, nf-core/demo.

Quando invocado dessa forma, o Nextflow assumirá que o código está organizado de uma certa maneira. Vamos recuperar o código para que possamos examinar essa estrutura.

1.2. Recuperar o código do pipeline

Depois de determinarmos que o pipeline parece ser adequado para nossos propósitos, vamos experimentá-lo. Felizmente, o Nextflow facilita a recuperação de pipelines de repositórios formatados corretamente sem precisar baixar nada manualmente.

1.2.1. Usar nextflow pull

Vamos retornar ao terminal e executar o seguinte:

nextflow pull nf-core/demo
Saída do comando
Checking nf-core/demo ...
downloaded from https://github.com/nf-core/demo.git - revision: 04060b4644 [master]

O Nextflow faz um pull do código do pipeline, o que significa que ele baixa o repositório completo para sua unidade local.

Para ser claro, você pode fazer isso com qualquer pipeline Nextflow que esteja configurado adequadamente no GitHub, não apenas pipelines do nf-core. No entanto, o nf-core é a maior coleção de código aberto de pipelines Nextflow.

1.2.2. Usar nextflow list

Você pode fazer o Nextflow fornecer uma lista de quais pipelines você recuperou dessa maneira:

nextflow list
Saída do comando
nf-core/demo

Você pode tentar fazer o pull de alguns outros pipelines para ver como eles aparecem na lista quando você tem mais de um.

1.2.3. Encontrar seus pipelines em $NXF_HOME/assets/

Você notará que os arquivos não estão no seu diretório de trabalho atual. Por padrão, o Nextflow os salva em $NXF_HOME/assets.

tree -L 2 $NXF_HOME/assets/
Directory contents
/workspaces/.nextflow/assets/
└── nf-core
    └── demo

2 directories, 0 files

Nota

O caminho completo pode ser diferente no seu sistema se você não estiver usando nosso ambiente de treinamento.

O Nextflow mantém o código-fonte baixado intencionalmente 'fora do caminho' com base no princípio de que esses pipelines devem ser usados mais como bibliotecas do que código com o qual você interagiria diretamente.

Não vamos examinar o código em detalhes, mas vamos dar uma rápida olhada apenas para ter uma ideia de como é a organização geral.

Para facilitar a navegação pelo código-fonte do pipeline, crie um link simbólico para o diretório de assets:

ln -s $NXF_HOME/assets pipelines

Isso cria um atalho para que você possa explorar o código com tree -L 2 pipelines ou abrir arquivos diretamente.

1.2.5. Visão geral da organização do código

Você pode usar tree ou usar o explorador de arquivos para encontrar e abrir o diretório nf-core/demo.

tree -L 1 pipelines/nf-core/demo
Conteúdo do diretório
pipelines/nf-core/demo
├── assets
├── CHANGELOG.md
├── CITATIONS.md
├── CODE_OF_CONDUCT.md
├── conf
├── docs
├── LICENSE
├── main.nf
├── modules
├── modules.json
├── nextflow.config
├── nextflow_schema.json
├── nf-test.config
├── README.md
├── ro-crate-metadata.json
├── subworkflows
├── tests
├── tower.yml
└── workflows

Como você pode ver, há muita coisa acontecendo lá, mas a maior parte não precisa ser motivo de preocupação.

Brevemente, vamos observar que no nível superior, você pode encontrar um arquivo README com informações resumidas, bem como arquivos acessórios que resumem informações do projeto, como licenciamento, diretrizes de contribuição, citação e código de conduta. A documentação detalhada do pipeline está localizada no diretório docs. Todo esse conteúdo é usado para gerar as páginas da web no site do nf-core programaticamente, então elas estão sempre atualizadas com o código.

Para o restante, podemos distinguir três grupos funcionais de arquivos de código:

  1. Componentes de código do pipeline (main.nf, workflows, subworkflows, modules)
  2. Configuração do pipeline
  3. Parâmetros do pipeline / entradas e validação

Não vamos abordar os componentes de código do pipeline nesta parte do curso, mas vamos tocar em elementos de configuração e validação que provavelmente serão relevantes para você como usuário final de pipelines do nf-core.

Dica

Você também pode navegar pelo código-fonte de qualquer pipeline do nf-core no GitHub, por exemplo, github.com/nf-core/demo. Todo pipeline do nf-core segue o mesmo layout de diretório, então uma vez que você conheça a estrutura, pode encontrar arquivos de configuração, módulos e fluxos de trabalho para qualquer pipeline da mesma forma.

Mas por enquanto, vamos executar o pipeline!

Conclusão

Agora você sabe como encontrar um pipeline através do site do nf-core e recuperar uma cópia local do código-fonte.

O que vem a seguir?

Aprenda como experimentar um pipeline do nf-core com o mínimo de esforço.


2. Experimentar o pipeline com seu perfil de teste

Convenientemente, todo pipeline do nf-core vem com um perfil de teste. Este é um conjunto mínimo de configurações para o pipeline executar usando um pequeno conjunto de dados de teste hospedado no repositório nf-core/test-datasets. É uma ótima maneira de experimentar rapidamente um pipeline em pequena escala.

Nota

O sistema de perfil de configuração do Nextflow permite que você alterne facilmente entre diferentes motores de contêiner ou ambientes de execução. Para mais detalhes, consulte Hello Nextflow Parte 6: Configuração.

2.1. Examinar o perfil de teste

É uma boa prática verificar o que o perfil de teste de um pipeline especifica antes de executá-lo. O perfil test para nf-core/demo está no arquivo de configuração conf/test.config. Você pode encontrá-lo localmente dentro do código-fonte do pipeline que o nextflow pull baixou:

code $NXF_HOME/assets/nf-core/demo/conf/test.config

Aqui está o conteúdo desse arquivo:

conf/test.config
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Nextflow config file for running minimal tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Defines input files and everything required to run a fast and simple pipeline test.

    Use as follows:
        nextflow run nf-core/demo -profile test,<docker/singularity> --outdir <OUTDIR>

----------------------------------------------------------------------------------------
*/

process {
    resourceLimits = [
        cpus: 2,
        memory: '4.GB',
        time: '1.h'
    ]
}

params {
    config_profile_name        = 'Test profile'
    config_profile_description = 'Minimal test dataset to check pipeline function'

    // Dados de entrada
    input  = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'

}

Você notará imediatamente que o bloco de comentário no topo inclui um exemplo de uso mostrando como executar o pipeline com este perfil de teste.

conf/test.config
    Use as follows:
        nextflow run nf-core/demo -profile test,<docker/singularity> --outdir <OUTDIR>

As únicas coisas que precisamos fornecer são o que é mostrado entre colchetes angulares no comando de exemplo: <docker/singularity> e <OUTDIR>.

Como lembrete, <docker/singularity> refere-se à escolha do sistema de contêiner. Todos os pipelines do nf-core são projetados para serem usáveis com contêineres (Docker, Singularity, etc.) para garantir reprodutibilidade e eliminar problemas de instalação de software. Então precisaremos especificar se queremos usar Docker ou Singularity para testar o pipeline.

A parte --outdir <OUTDIR> refere-se ao diretório onde o Nextflow escreverá as saídas do pipeline. Precisamos fornecer um nome para ele, que podemos simplesmente inventar. Se ainda não existir, o Nextflow o criará para nós em tempo de execução.

Seguindo para a seção após o bloco de comentário, o perfil de teste nos mostra o que foi pré-configurado para teste: mais notavelmente, o parâmetro input já está configurado para apontar para um conjunto de dados de teste, então não precisamos fornecer nossos próprios dados. Se você seguir o link para a entrada pré-configurada, verá que é um arquivo CSV contendo identificadores de amostra e caminhos de arquivo para várias amostras experimentais.

samplesheet_test_illumina_amplicon.csv
sample,fastq_1,fastq_2
SAMPLE1_PE,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample1_R1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample1_R2.fastq.gz
SAMPLE2_PE,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample2_R1.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample2_R2.fastq.gz
SAMPLE3_SE,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample1_R1.fastq.gz,
SAMPLE3_SE,https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/illumina/amplicon/sample2_R1.fastq.gz,

Isso é chamado de planilha de amostras e é a forma mais comum de entrada para pipelines do nf-core.

Nota

Não se preocupe se você não estiver familiarizado com os formatos e tipos de dados, isso não é importante para o que se segue.

Então isso confirma que temos tudo o que precisamos para experimentar o pipeline.

2.2. Executar o pipeline

Vamos decidir usar Docker para o sistema de contêiner e demo-results como o diretório de saída, e estamos prontos para executar o comando de teste:

nextflow run nf-core/demo -profile docker,test --outdir demo-results
Saída do comando
 N E X T F L O W   ~  version 25.10.4

Launching `https://github.com/nf-core/demo` [magical_pauling] DSL2 - revision: 45904cb9d1 [master]


------------------------------------------------------
                                        ,--./,-.
        ___     __   __   __   ___     /,-._.--~'
  |\ | |__  __ /  ` /  \ |__) |__         }  {
  | \| |       \__, \__/ |  \ |___     \`-._,-`-,
                                        `._,._,'
  nf-core/demo 1.1.0
------------------------------------------------------
Input/output options
  input                     : https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv
  outdir                    : demo-results

Institutional config options
  config_profile_name       : Test profile
  config_profile_description: Minimal test dataset to check pipeline function

Generic options
  trace_report_suffix       : 2025-11-21_04-57-41

Core Nextflow options
  revision                  : master
  runName                   : magical_pauling
  containerEngine           : docker
  launchDir                 : /workspaces/training/hello-nf-core
  workDir                   : /workspaces/training/hello-nf-core/work
  projectDir                : /workspaces/.nextflow/assets/nf-core/demo
  userName                  : root
  profile                   : docker,test
  configFiles               : /workspaces/.nextflow/assets/nf-core/demo/nextflow.config

!! Only displaying parameters that differ from the pipeline defaults !!
------------------------------------------------------
* The pipeline
    https://doi.org/10.5281/zenodo.12192442

* The nf-core framework
    https://doi.org/10.1038/s41587-020-0439-x

* Software dependencies
    https://github.com/nf-core/demo/blob/master/CITATIONS.md


executor >  local (7)
[ff/a6976b] NFCORE_DEMO:DEMO:FASTQC (SAMPLE3_SE)     | 3 of 3 ✔
[39/731ab7] NFCORE_DEMO:DEMO:SEQTK_TRIM (SAMPLE3_SE) | 3 of 3 ✔
[7c/78d96e] NFCORE_DEMO:DEMO:MULTIQC                 | 1 of 1 ✔
-[nf-core/demo] Pipeline completed successfully-

Se sua saída corresponder a isso, parabéns! Você acabou de executar seu primeiro pipeline do nf-core.

Você notará que há muito mais saída no console do que quando você executa um pipeline Nextflow básico. Há um cabeçalho que inclui um resumo da versão do pipeline, entradas e saídas, e alguns elementos de configuração.

Nota

Sua saída mostrará carimbos de data/hora, nomes de execução e caminhos de arquivo diferentes, mas a estrutura geral e a execução do processo devem ser semelhantes.

Observe a linha próxima ao topo da saída:

Launching `https://github.com/nf-core/demo` [magical_pauling] DSL2 - revision: 45904cb9d1 [master]

Isso informa qual revisão do pipeline foi usada. Como não especificamos uma versão, o Nextflow usou o commit mais recente no master. Para execuções reproduzíveis, você deve fixar uma versão específica usando a flag -r:

nextflow run nf-core/demo -r 1.1.0 -profile docker,test --outdir demo-results

Isso garante que o mesmo código do pipeline seja usado sempre, independentemente de novos commits ou lançamentos. Para este treinamento, omitimos -r por simplicidade, mas em produção você deve sempre especificá-lo.

Seguindo para a saída de execução, vamos dar uma olhada nas linhas que nos dizem quais processos foram executados:

executor >  local (7)
[ff/a6976b] NFCORE_DEMO:DEMO:FASTQC (SAMPLE3_SE)     | 3 of 3 ✔
[39/731ab7] NFCORE_DEMO:DEMO:SEQTK_TRIM (SAMPLE3_SE) | 3 of 3 ✔
[7c/78d96e] NFCORE_DEMO:DEMO:MULTIQC                 | 1 of 1 ✔
-[nf-core/demo] Pipeline completed successfully-

Isso nos diz que três processos foram executados, correspondendo às três ferramentas mostradas na página de documentação do pipeline no site do nf-core: FASTQC, SEQTK_TRIM e MULTIQC.

Os nomes completos dos processos como mostrado aqui, como NFCORE_DEMO:DEMO:MULTIQC, são mais longos do que o que você pode ter visto no material introdutório do Hello Nextflow. Estes incluem os nomes de seus fluxos de trabalho pai e refletem a modularidade do código do pipeline. Vamos entrar em mais detalhes sobre isso na Parte 2 deste curso.

2.3. Examinar as saídas do pipeline

Finalmente, vamos dar uma olhada no diretório demo-results produzido pelo pipeline.

tree -L 2 demo-results
Conteúdo do diretório
demo-results
├── fastqc
│   ├── SAMPLE1_PE
│   ├── SAMPLE2_PE
│   └── SAMPLE3_SE
├── fq
│   ├── SAMPLE1_PE
│   ├── SAMPLE2_PE
│   └── SAMPLE3_SE
├── multiqc
│   ├── multiqc_data
│   ├── multiqc_plots
│   └── multiqc_report.html
└── pipeline_info
    ├── execution_report_2025-11-21_04-57-41.html
    ├── execution_timeline_2025-11-21_04-57-41.html
    ├── execution_trace_2025-11-21_04-57-41.txt
    ├── nf_core_demo_software_mqc_versions.yml
    ├── params_2025-11-21_04-57-46.json
    └── pipeline_dag_2025-11-21_04-57-41.html

Isso pode parecer muito. Para saber mais sobre as saídas do pipeline nf-core/demo, consulte sua página de documentação.

Nesta etapa, o que é importante observar é que os resultados são organizados por módulo, e há adicionalmente um diretório chamado pipeline_info contendo vários relatórios com carimbos de data/hora sobre a execução do pipeline.

Por exemplo, o arquivo execution_timeline_* mostra quais processos foram executados, em que ordem e quanto tempo levaram para executar:

execution timeline report

Nota

Aqui as tarefas não foram executadas em paralelo porque estamos executando em uma máquina minimalista no Github Codespaces. Para ver essas execuções em paralelo, tente aumentar a alocação de CPU do seu codespace e os limites de recursos na configuração de teste.

Esses relatórios são gerados automaticamente para todos os pipelines do nf-core.

Conclusão

Você sabe como executar um pipeline do nf-core usando seu perfil de teste integrado e onde encontrar suas saídas.

O que vem a seguir?

Aprenda como configurar o pipeline para personalizar sua execução.


3. Configurar a execução do pipeline

Conforme explicado em Hello Config, queremos poder alterar em quais dados nosso pipeline será executado e como ele será executado sem alterar o código do pipeline em si. Para isso, o Nextflow suporta múltiplas formas de controlar a configuração do pipeline, o que pode ser um pouco avassalador.

O projeto nf-core especifica convenções para organizar elementos de configuração, distinguindo dois tipos de configuração no nível superior: parâmetros do pipeline e configuração no sentido estrito.

  • Parâmetros do pipeline (definidos através do sistema params) tipicamente incluem coisas como arquivos de entrada, flags de comportamento de ferramentas e parâmetros de análise.
  • Configuração no sentido estrito refere-se à logística de como o pipeline é executado, ou seja, o executor, alocações de recursos computacionais e assim por diante.
Parameters vs Configuration How inputs and settings reach your pipeline Parameters — What to process Configuration — How to run Controls: --input samplesheet path --outdir output directory --genome reference genome --skip_trim skip a step Controls: process.cpus CPU allocation process.memory memory limits ext.args tool arguments executor where to run Set via: nextflow run ... --param value nextflow run ... -params-file params.yaml Set via: nextflow run ... -c custom.config nextflow run ... -profile name nf-schema validates Pipeline Execution Don't put params in config files — nf-schema can't validate them there

Vamos começar abordando os parâmetros do pipeline e depois veremos a configuração no sentido estrito.

3.1. Parâmetros do pipeline

Para todos os pipelines do nf-core, você pode obter uma lista completa de parâmetros do pipeline diretamente da linha de comando usando a flag --help, que é ela própria um parâmetro do pipeline.

3.1.1. Obter a lista de parâmetros com --help

Execute o comando de ajuda para o pipeline de demonstração:

nextflow run nf-core/demo --help
Saída do comando
 N E X T F L O W   ~  version 25.10.4

Launching `https://github.com/nf-core/demo` [run_name] DSL2 - revision: 45904cb9d1 [master]

----------------------------------------------------
                                        ,--./,-.
        ___     __   __   __   ___     /,-._.--~'
  |\ | |__  __ /  ` /  \ |__) |__         }  {
  | \| |       \__, \__/ |  \ |___     \`-._,-`-,
                                        `._,._,'
  nf-core/demo 1.1.0
----------------------------------------------------
Typical pipeline command:

  nextflow run nf-core/demo -profile <docker/singularity/.../institute> --input samplesheet.csv --outdir <OUTDIR>

Input/output options
  --input                       [string]           Path to a metadata file containing information about the samples in the experiment.
  --outdir                      [string]           The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.
  --email                       [string]           Email address for completion summary.
  --multiqc_title               [string]           MultiQC report title. Printed as page header, used for filename if not otherwise specified.

Reference genome options
  --genome                      [string]           Name of iGenomes reference.
  --fasta                       [string]           Path to FASTA genome file.

Process skipping options
  --skip_trim                   [boolean]          Skip trimming fastq files with seqtk

Generic options
  --multiqc_methods_description [string]           Custom MultiQC yaml file containing HTML including a methods description.
  --help                        [boolean, string]  Display the help message.
  --help_full                   [boolean]          Display the full detailed help message.
  --show_hidden                 [boolean]          Display hidden parameters in the help message (only works when --help or --help_full are provided).
 !! Hiding 20 param(s), use the `--show_hidden` parameter to show them !!
----------------------------------------------------

* The pipeline
    https://doi.org/10.5281/zenodo.12192442

* The nf-core framework
    https://doi.org/10.1038/s41587-020-0439-x

* Software dependencies
    https://github.com/nf-core/demo/blob/master/CITATIONS.md

Como você pode ver, a saída agrupa os parâmetros em categorias (opções de entrada/saída, opções de genoma de referência, etc.) com tipos e descrições para cada um.

Essa categorização é determinada por um arquivo de schema, que é abordado mais adiante. Em pipelines Nextflow simples, --help só funciona se o desenvolvedor o implementou manualmente.

Dica

Use --help --show_hidden para ver parâmetros adicionais que estão ocultos por padrão, como --publish_dir_mode ou --monochrome_logs.

3.1.2. Definir valores de parâmetros

Conforme abordado em Hello Config, você pode definir valores de parâmetros na linha de comando com --nome_do_param ou coletar um conjunto de parâmetros em um arquivo YAML e passá-lo com -params-file. Ambas as abordagens funcionam da mesma forma com pipelines do nf-core.

Por exemplo, para pular a etapa de trimming:

nextflow run nf-core/demo -profile docker,test --outdir demo-results-notrim --skip_trim
Saída do comando
executor >  local (4)
[3f/a82c91] NFCORE_DEMO:DEMO:FASTQC (SAMPLE3_SE) | 3 of 3 ✔
[7d/c5e014] NFCORE_DEMO:DEMO:MULTIQC             | 1 of 1 ✔
-[nf-core/demo] Pipeline completed successfully-

O processo SEQTK_TRIM não aparece mais na saída.

Info

Embora seja tecnicamente possível definir parâmetros do pipeline em um arquivo de configuração personalizado passado com -c, isso pode não substituir os padrões já definidos no próprio nextflow.config do pipeline, dependendo das regras de precedência de configuração do Nextflow. Usar --nome_do_param na linha de comando ou -params-file é mais confiável, pois estes sempre têm precedência.

Como regra geral: se aparece na saída do --help, defina-o via linha de comando ou um arquivo de parâmetros em vez de um arquivo de configuração.

3.1.3. Validação de parâmetros

Curiosidade: o comando --help funciona para todos os pipelines do nf-core porque o projeto nf-core exige que os desenvolvedores definam todos os parâmetros do pipeline formalmente em um arquivo de schema JSON (nextflow_schema.json). Esse schema registra o tipo, descrição, valor padrão e agrupamento de cada parâmetro.

Além de alimentar a saída do --help, o arquivo de schema também permite a validação automatizada no momento do lançamento. Isso significa que o Nextflow pode verificar se cada parâmetro que você passa existe e recebeu um valor apropriado (do tipo correto, dentro do intervalo de valores permitidos, etc.).

Abordamos isso com mais detalhes na Parte 5: Validação de Entrada, mas você já pode ver isso em ação fornecendo ao pipeline de demonstração alguma entrada de parâmetro inválida.

3.1.3.1. Parâmetros não reconhecidos

Tente passar um parâmetro que não existe:

nextflow run nf-core/demo -profile docker,test --outdir demo-results --foobar "invalid"

A saída do console inclui um aviso:

WARN: The following invalid input values have been detected:

* --foobar: invalid

O pipeline ainda é executado, mas o aviso alerta imediatamente que --foobar não é um parâmetro reconhecido. Isso detecta erros de digitação como --outDir em vez de --outdir antes que você desperdice tempo de computação se perguntando por que a saída foi para o lugar errado.

3.1.3.2. Valores de parâmetros inválidos

A validação também verifica os valores dos parâmetros. O parâmetro --skip_trim é uma flag boolean, então passar um valor string faz o pipeline falhar imediatamente:

nextflow run nf-core/demo -profile docker,test --outdir demo-results --skip_trim yes
ERROR ~ Validation of pipeline parameters failed!

The following invalid input values have been detected:

* --skip_trim (yes): Value is [string] but should be [boolean]

O pipeline para antes que qualquer processo seja executado, evitando uma execução com falha ou incorreta. Parâmetros boolean devem ser passados como flags (--skip_trim) sem um valor, ou definidos como true/false em um arquivo de parâmetros.

3.1.4. Validação de entrada

A mesma lógica de validação também pode ser usada para verificar a validade dos arquivos de entrada. Por exemplo, se um pipeline espera uma planilha de amostras como sua principal entrada de dados (o que é o caso de muitos, se não da maioria dos pipelines do nf-core), o desenvolvedor pode fornecer um schema de entrada (distinto do schema de parâmetros) descrevendo como o arquivo de entrada deve ser estruturado.

Então, em tempo de execução, o Nextflow pode verificar se o arquivo de entrada fornecido é válido.

Também abordamos isso com mais detalhes na Parte 5: Validação de Entrada, mas você já pode ver isso em ação fornecendo ao pipeline de demonstração uma planilha de amostras inválida.

O pipeline nf-core/demo espera um arquivo CSV com as colunas sample, fastq_1 e fastq_2. Isso é definido em um arquivo de schema (assets/schema_input.json) que especifica a estrutura esperada, tipos de coluna e restrições.

assets/schema_input.json
assets/schema_input.json
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://raw.githubusercontent.com/nf-core/demo/master/assets/schema_input.json",
    "title": "nf-core/demo pipeline - params.input schema",
    "description": "Schema for the file provided with params.input",
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "sample": {
                "type": "string",
                "pattern": "^\\S+$",
                "errorMessage": "Sample name must be provided and cannot contain spaces",
                "meta": ["id"]
            },
            "fastq_1": {
                "type": "string",
                "format": "file-path",
                "exists": true,
                "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$",
                "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'"
            },
            "fastq_2": {
                "type": "string",
                "format": "file-path",
                "exists": true,
                "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$",
                "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'"
            }
        },
        "required": ["sample", "fastq_1"]
    }
}

O schema especifica que sample e fastq_1 são obrigatórios, enquanto fastq_2 é opcional (suportando dados paired-end e single-end). Os caminhos de arquivo são validados quanto à existência e padrão de extensão.

3.1.4.1. Criar uma planilha de amostras inválida

Crie uma planilha de amostras com uma coluna ausente e um caminho de arquivo inexistente:

malformed_samplesheet.csv
sample,fastq_2
SAMPLE1,/not/a/real/file.fastq.gz

Esta planilha de amostras está faltando a coluna obrigatória fastq_1 e tem um caminho de arquivo inexistente em fastq_2. Ambos os problemas produzirão erros de validação na próxima etapa.

3.1.4.2. Executar o pipeline de demonstração com a planilha de amostras inválida

Execute o pipeline de demonstração usando malformed_samplesheet.csv como entrada.

nextflow run nf-core/demo -profile docker,test --outdir demo-results --input malformed_samplesheet.csv
ERROR ~ Validation of pipeline parameters failed!

The following invalid input values have been detected:

* --input (malformed_samplesheet.csv): Validation of file failed:
    -> Entry 1: Error for field 'fastq_2' (/not/a/real/file.fastq.gz): the file or directory
       '/not/a/real/file.fastq.gz' does not exist (FastQ file for reads 2 cannot contain spaces
       and must have extension '.fq.gz' or '.fastq.gz')
    -> Entry 1: Missing required field(s): fastq_1

Como você pode ver, o pipeline falha imediatamente e relata todos os erros de validação de uma vez. O nf-schema não para no primeiro erro — ele coleta todos os problemas e os lista juntos, para que você possa corrigir tudo de uma vez em vez de descobrir os problemas um por um.

Cada erro identifica a entrada e o campo exatos que causaram o problema, para que você possa corrigir sua planilha de amostras e relançar o pipeline com a confiança de que ele não vai falhar em algum momento posterior quando o Nextflow for acessar o caminho do arquivo.

Para desenvolvedores, tudo isso é abordado com mais detalhes na Parte 5 deste curso.

3.2. Configuração

A configuração no sentido estrito controla como o pipeline é executado: alocação de recursos, argumentos específicos de ferramentas, onde as tarefas são executadas e qual sistema de empacotamento de software usar.

Os pipelines do nf-core incluem configuração padrão em nextflow.config e no diretório conf/. Antes de substituir qualquer coisa, é útil saber onde ficam os padrões.

Você já viu na seção 2.1 que o código-fonte do pipeline está em $NXF_HOME/assets. Liste os arquivos de configuração para ver o que está disponível:

ls $NXF_HOME/assets/nf-core/demo/conf/
base.config  igenomes.config  igenomes_ignored.config  modules.config  test.config  test_full.config
nf-core Configuration Files nextflow.config Loads all other configs, sets defaults conf/base.config Resource labels: process_low 2 CPUs, 12 GB process_medium 6 CPUs, 36 GB process_high 12 CPUs, 72 GB Override with: withName: 'FASTQC' { cpus = 2 } in your custom.config passed via -c conf/modules.config Per-process settings: FASTQC: ext.args = '--quiet' MULTIQC: ext.args = title from params Override with: withName: 'X' { ext.args = '...' } in your custom.config passed via -c conf/test.config Test profile settings: resourceLimits cpus: 4, memory: 4 GB params.input test samplesheet URL Activated via: -profile test Also: conf/test_full.config for full-sized test datasets Your custom.config (passed via -c) overrides any of the above

Os arquivos de configuração mais importantes são:

  • conf/base.config: Define labels de recursos (process_low, process_medium, process_high) que atribuem CPUs, memória e tempo aos processos. Quando você vê um processo usando mais recursos do que o esperado, é aqui que esses padrões vêm.
  • conf/modules.config: Define argumentos de ferramentas por processo (ext.args) e configurações de publicação de saída (publishDir). Abra este arquivo para ver quais argumentos cada ferramenta recebe por padrão.
  • conf/test.config: O perfil de teste que você usou na seção 2.1, que limita recursos via resourceLimits e define uma planilha de amostras de teste. Ativado com -profile test. Há também um conf/test_full.config para executar com um conjunto de dados de teste de tamanho completo, útil para benchmarking.

O nextflow.config central carrega todos os itens acima e define os valores padrão apropriados para tudo.

Se você deseja modificar qualquer uma das configurações especificadas nesses arquivos, não modifique nenhum deles diretamente. Em vez disso, crie seu próprio arquivo de configuração e passe-o com -c. Os valores que você especificar substituirão os valores padrão definidos nesses outros arquivos.

Vamos percorrer alguns exercícios para fazer isso na prática.

3.2.1. Alterar a alocação de recursos para um processo

O pipeline de demonstração atribui recursos usando labels definidos em base.config. Por exemplo, FASTQC usa o label process_medium, que aloca 6 CPUs e 36 GB de memória.

O perfil de teste limita recursos via resourceLimits, mas você também pode substituir recursos para processos específicos.

Crie um arquivo chamado custom.config:

custom.config
1
2
3
4
5
6
process {
    withName: 'FASTQC' {
        cpus = 2
        memory = 4.GB
    }
}

Execute o pipeline com sua configuração personalizada:

nextflow run nf-core/demo -profile docker,test --outdir demo-results-custom -c custom.config
Saída do comando
executor >  local (7)
[2a/f17b3e] NFCORE_DEMO:DEMO:FASTQC (SAMPLE3_SE)     | 3 of 3 ✔
[9c/e4d028] NFCORE_DEMO:DEMO:SEQTK_TRIM (SAMPLE3_SE) | 3 of 3 ✔
[5b/a93c71] NFCORE_DEMO:DEMO:MULTIQC                 | 1 of 1 ✔
-[nf-core/demo] Pipeline completed successfully-

A flag -c adiciona sua configuração sobre a configuração integrada do pipeline.

3.2.2. Definir valores de argumentos de ferramentas com ext.args

Muitas ferramentas de linha de comando têm argumentos que não são obrigatórios e, portanto, não são configurados como parâmetros do pipeline, a menos que sejam muito comumente usados. Para esses argumentos de ferramentas, os módulos do nf-core usam uma convenção do Nextflow chamada ext.args para passar argumentos para a ferramenta subjacente através de um arquivo de configuração.

Por exemplo, vamos adicionar um argumento de trimming ao módulo SEQTK_TRIM usando ext.args.

3.2.2.1. Atualizar a configuração personalizada

Atualize seu custom.config:

custom.config
1
2
3
4
5
6
7
8
9
process {
    withName: 'FASTQC' {
        cpus = 2
        memory = 4.GB
    }
    withName: 'SEQTK_TRIM' {
        ext.args = '-b 5'
    }
}

Isso instrui o seqtk trimfq a remover 5 bases do início de cada leitura, além do trimming por qualidade.

3.2.2.2. Executar o pipeline

Execute o pipeline novamente com esta configuração para ver o efeito:

nextflow run nf-core/demo -profile docker,test --outdir demo-results-extargs -c custom.config
Saída do comando
executor >  local (7)
[1e/b7a392] NFCORE_DEMO:DEMO:FASTQC (SAMPLE3_SE)     | 3 of 3 ✔
[ab/cd1234] NFCORE_DEMO:DEMO:SEQTK_TRIM (SAMPLE3_SE) | 3 of 3 ✔
[4f/c8d105] NFCORE_DEMO:DEMO:MULTIQC                 | 1 of 1 ✔
-[nf-core/demo] Pipeline completed successfully-

Para verificar se o argumento foi aplicado, encontre o hash do diretório de trabalho do SEQTK_TRIM na saída da execução (por exemplo, work/ab/cd1234...) e verifique o arquivo .command.sh dentro dele:

cat work/ab/cd1234/.command.sh
Saída do comando
#!/usr/bin/env bash
...
seqtk trimfq -b 5 SAMPLE3_SE.fastq.gz | gzip -c > SAMPLE3_SE.trimmed.fastq.gz

Você deve ver -b 5 no comando seqtk trimfq, confirmando que sua substituição de ext.args teve efeito.

3.2.2.3. Substituindo valores padrão

Alguns módulos já têm ext.args definido por padrão. Por exemplo, o módulo FASTQC é configurado com ext.args = '--quiet' por padrão (definido em conf/modules.config).

conf/modules.config
    withName: FASTQC {
        ext.args = '--quiet'
        publishDir = [
            path: { "${params.outdir}/fastqc/${meta.id}" },
            mode: params.publish_dir_mode,
            pattern: "*.{html,json}"
        ]
    }

Se você fornecer um valor para ext.args via um arquivo de configuração personalizado, esse valor substituirá completamente o padrão definido para aquele processo.

Então, por exemplo, se o padrão era '--quiet' e você definir ext.args = '--kmers 8', a flag --quiet não será mais aplicada. Para manter ambos, defina ext.args = '--quiet --kmers 8'.

Isso significa que você é responsável por verificar qual é a configuração padrão das ferramentas para as quais deseja fornecer valores de argumento com ext.args.

Conclusão

Você sabe como obter ajuda de um pipeline do nf-core, definir parâmetros e entender como eles são validados, e personalizar a configuração através de arquivos de configuração.

O que vem a seguir?

Faça uma pausa! Quando estiver pronto, passe para a Parte 2, onde você criará seu próprio pipeline compatível com o nf-core do zero.