nf-core_modules/modules/vcftools/main.nf
Harshil Patel 20d8250d9f
Update all modules to new NF DSL2 syntax (#1099)
* Add comment line for consistency

* Remove all functions.nf

* Remove include functions.nf and publishDir options

* Replace options.args3 with task.ext.args3 - 3 modules

* Replace options.args3 with task.ext.args3 - 17 modules

* Replace {task.cpus} with task.cpus

* Replace off on off off off off off off off on off on off on off off off on off off off on on off off off on on off off off off off off off on off off off off on off on on off off off on on on on off off off on off on on off on on off off on on on off on on off on off off off off on off off off on off off on off on off off off on on off on off on off off on off off off on off off off on off off off off on off off off on on on off on on off off on off on on on off on on off on on on off off off off off on on off off on off off off off off on off off on on off on on off on off off off on off off off off on on off on off off on off off on off on off off off off off off off off on on off on off off off.args with

* Add def args = task.ext.args line to all modules in script section

* Replace options.args with args and args_list

* Initialise args2 and args3 properly

* Replace container syntax

* Revert container changes for cellranger/mkref

* Replace getProcessName in all modules

* Replace getSoftwareName in all modules

* Unify modules using VERSION variable

* Replae options.suffix with task.ext.suffix

* Remove NF version restriction for CI

* Bump NF version in README

* Replace task.process.tokenize logic with task.process

* Minor tweaks to unify syntax in tests main.nf

* Add a separate nextflow.config for each module

* Transfer remaining module options to nextflow.config

* Remove addParams from tests main.nf

* Remove TODO statements

* Use -c to import module specific config

* Bump NF version to 21.10.3

* Fix tests for artic/minion

* Fix broken publishDir syntax

* Standardise and fix obvious failing module tests

* Remove kronatools to krona

* Comment out tags in subworkflow test.yml

* Fix failing module tests

* Add consistent indentation to nextflow.config

* Comment out subworklow definitions

* Fix kallistobustools/ref

* Fix rmarkdownnotebook

* Fix jupyternotebook

* Quote task.process

* Add plink2/vcf to pytest_modules.yml

* Remove NF_CORE_MODULES_TEST from pytest CI

* Fix more tests

* Move bacteroides_fragilis to prokaryotes folder

* Fix cooler merge tests

* Fix kallistobustools/count tests

* Fix kallistobustools/ref tests

* Update test_10x_1_fastq_gz file for kallistobustools/count tests

* Fix bcftools/query tests

* Fix delly/call tests

* Fix cooler/zoomify tests

* Fix csvtk/split tests

* Fix gatk4/intervallisttools tests

* Fix gatk4/variantfiltration

* Fix pydamage/filter tests

* Fix test data for unicycler

* Fix gstama/collapse module

* Fix leehom tests

* Fix metaphlan3 tests

* Fix pairtools/select tests

* Update nextflow.config

* Update nextflow.config

* feat: update syntax

* Fix arriba tests

* Fix more failing tests

* Update test syntax

* Remove comments from tests nextflow.config

* Apply suggestions from code review

* Fix kallistobustools/count module

* Update dumpsoftwareversions module

* Update custom/dumpsoftwareversions

* Add args2 to untar module

* Update leftover modules

* Remove last remaining addParams

Co-authored-by: JoseEspinosa <kadomu@gmail.com>
Co-authored-by: Gregor Sturm <mail@gregor-sturm.de>
Co-authored-by: MaxUlysse <max.u.garcia@gmail.com>
2021-11-26 07:58:40 +00:00

120 lines
7.7 KiB
Text

process VCFTOOLS {
tag "$meta.id"
label 'process_medium'
conda (params.enable_conda ? "bioconda::vcftools=0.1.16" : null)
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/vcftools:0.1.16--he513fc3_4' :
'quay.io/biocontainers/vcftools:0.1.16--he513fc3_4' }"
input:
// Owing to the nature of vcftools we here provide solutions to working with optional bed files and optional
// alternative variant files, for use with the 'diff' suite of tools.
// Other optional input files can be utilised in a similar way to below but we do not exhaustively itterate through all
// possible options. Instead we leave that to the user.
tuple val(meta), path(variant_file)
path bed
path diff_variant_file
output:
tuple val(meta), path("*.vcf") , optional:true, emit: vcf
tuple val(meta), path("*.bcf") , optional:true, emit: bcf
tuple val(meta), path("*.frq") , optional:true, emit: frq
tuple val(meta), path("*.frq.count") , optional:true, emit: frq_count
tuple val(meta), path("*.idepth") , optional:true, emit: idepth
tuple val(meta), path("*.ldepth") , optional:true, emit: ldepth
tuple val(meta), path("*.ldepth.mean") , optional:true, emit: ldepth_mean
tuple val(meta), path("*.gdepth") , optional:true, emit: gdepth
tuple val(meta), path("*.hap.ld") , optional:true, emit: hap_ld
tuple val(meta), path("*.geno.ld") , optional:true, emit: geno_ld
tuple val(meta), path("*.geno.chisq") , optional:true, emit: geno_chisq
tuple val(meta), path("*.list.hap.ld") , optional:true, emit: list_hap_ld
tuple val(meta), path("*.list.geno.ld") , optional:true, emit: list_geno_ld
tuple val(meta), path("*.interchrom.hap.ld") , optional:true, emit: interchrom_hap_ld
tuple val(meta), path("*.interchrom.geno.ld") , optional:true, emit: interchrom_geno_ld
tuple val(meta), path("*.TsTv") , optional:true, emit: tstv
tuple val(meta), path("*.TsTv.summary") , optional:true, emit: tstv_summary
tuple val(meta), path("*.TsTv.count") , optional:true, emit: tstv_count
tuple val(meta), path("*.TsTv.qual") , optional:true, emit: tstv_qual
tuple val(meta), path("*.FILTER.summary") , optional:true, emit: filter_summary
tuple val(meta), path("*.sites.pi") , optional:true, emit: sites_pi
tuple val(meta), path("*.windowed.pi") , optional:true, emit: windowed_pi
tuple val(meta), path("*.weir.fst") , optional:true, emit: weir_fst
tuple val(meta), path("*.het") , optional:true, emit: heterozygosity
tuple val(meta), path("*.hwe") , optional:true, emit: hwe
tuple val(meta), path("*.Tajima.D") , optional:true, emit: tajima_d
tuple val(meta), path("*.ifreqburden") , optional:true, emit: freq_burden
tuple val(meta), path("*.LROH") , optional:true, emit: lroh
tuple val(meta), path("*.relatedness") , optional:true, emit: relatedness
tuple val(meta), path("*.relatedness2") , optional:true, emit: relatedness2
tuple val(meta), path("*.lqual") , optional:true, emit: lqual
tuple val(meta), path("*.imiss") , optional:true, emit: missing_individual
tuple val(meta), path("*.lmiss") , optional:true, emit: missing_site
tuple val(meta), path("*.snpden") , optional:true, emit: snp_density
tuple val(meta), path("*.kept.sites") , optional:true, emit: kept_sites
tuple val(meta), path("*.removed.sites") , optional:true, emit: removed_sites
tuple val(meta), path("*.singletons") , optional:true, emit: singeltons
tuple val(meta), path("*.indel.hist") , optional:true, emit: indel_hist
tuple val(meta), path("*.hapcount") , optional:true, emit: hapcount
tuple val(meta), path("*.mendel") , optional:true, emit: mendel
tuple val(meta), path("*.FORMAT") , optional:true, emit: format
tuple val(meta), path("*.INFO") , optional:true, emit: info
tuple val(meta), path("*.012") , optional:true, emit: genotypes_matrix
tuple val(meta), path("*.012.indv") , optional:true, emit: genotypes_matrix_individual
tuple val(meta), path("*.012.pos") , optional:true, emit: genotypes_matrix_position
tuple val(meta), path("*.impute.hap") , optional:true, emit: impute_hap
tuple val(meta), path("*.impute.hap.legend") , optional:true, emit: impute_hap_legend
tuple val(meta), path("*.impute.hap.indv") , optional:true, emit: impute_hap_indv
tuple val(meta), path("*.ldhat.sites") , optional:true, emit: ldhat_sites
tuple val(meta), path("*.ldhat.locs") , optional:true, emit: ldhat_locs
tuple val(meta), path("*.BEAGLE.GL") , optional:true, emit: beagle_gl
tuple val(meta), path("*.BEAGLE.PL") , optional:true, emit: beagle_pl
tuple val(meta), path("*.ped") , optional:true, emit: ped
tuple val(meta), path("*.map") , optional:true, emit: map_
tuple val(meta), path("*.tped") , optional:true, emit: tped
tuple val(meta), path("*.tfam") , optional:true, emit: tfam
tuple val(meta), path("*.diff.sites_in_files") , optional:true, emit: diff_sites_in_files
tuple val(meta), path("*.diff.indv_in_files") , optional:true, emit: diff_indv_in_files
tuple val(meta), path("*.diff.sites") , optional:true, emit: diff_sites
tuple val(meta), path("*.diff.indv") , optional:true, emit: diff_indv
tuple val(meta), path("*.diff.discordance.matrix"), optional:true, emit: diff_discd_matrix
tuple val(meta), path("*.diff.switch") , optional:true, emit: diff_switch_error
path "versions.yml" , emit: versions
script:
def args = task.ext.args ?: ''
def prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}"
def args_list = args.tokenize()
def bed_arg = (args.contains('--bed')) ? "--bed ${bed}" :
(args.contains('--exclude-bed')) ? "--exclude-bed ${bed}" :
(args.contains('--hapcount')) ? "--hapcount ${bed}" : ''
args_list.removeIf { it.contains('--bed') }
args_list.removeIf { it.contains('--exclude-bed') }
args_list.removeIf { it.contains('--hapcount') }
def diff_variant_arg = (args.contains('--diff')) ? "--diff ${diff_variant_file}" :
(args.contains('--gzdiff')) ? "--gzdiff ${diff_variant_file}" :
(args.contains('--diff-bcf')) ? "--diff-bcf ${diff_variant_file}" : ''
args_list.removeIf { it.contains('--diff') }
args_list.removeIf { it.contains('--gzdiff') }
args_list.removeIf { it.contains('--diff-bcf') }
def input_file = ("$variant_file".endsWith(".vcf")) ? "--vcf ${variant_file}" :
("$variant_file".endsWith(".vcf.gz")) ? "--gzvcf ${variant_file}" :
("$variant_file".endsWith(".bcf")) ? "--bcf ${variant_file}" : ''
"""
vcftools \\
$input_file \\
--out $prefix \\
${args_list.join(' ')} \\
$bed_arg \\
$diff_variant_arg
cat <<-END_VERSIONS > versions.yml
"${task.process}":
vcftools: \$(echo \$(vcftools --version 2>&1) | sed 's/^.*VCFtools (//;s/).*//')
END_VERSIONS
"""
}