Add genmod (#1950)

* add annotate

* add models

* add compound

* add score

* update annotate recipe

* update meta and main

* main updates

* add test for annotate

* update all tests

* refactor

* update tests

* fix conda issue

* review suggestions
This commit is contained in:
Ramprasad Neethiraj 2022-08-09 14:48:29 +02:00 committed by GitHub
parent 47cc7a77bf
commit 94619a3faf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 580 additions and 2 deletions

View file

@ -0,0 +1,46 @@
process GENMOD_ANNOTATE {
tag "$meta.id"
label 'process_medium'
conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null)
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0':
'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }"
input:
tuple val(meta), path(input_vcf)
output:
tuple val(meta), path("*_annotate.vcf"), emit: vcf
path "versions.yml" , emit: versions
when:
task.ext.when == null || task.ext.when
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
"""
genmod \\
annotate \\
$args \\
--outfile ${prefix}_annotate.vcf \\
$input_vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}_annotate.vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
}

View file

@ -0,0 +1,40 @@
name: "genmod_annotate"
description: for annotating regions, frequencies, cadd scores
keywords:
- annotate
- genmod
tools:
- "genmod":
description: "Annotate genetic inheritance models in variant files"
homepage: "https://github.com/Clinical-Genomics/genmod"
documentation: "https://github.com/Clinical-Genomics/genmod"
tool_dev_url: "https://github.com/moonso"
doi: ""
licence: "['MIT']"
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- input_vcf:
type: file
description: VCF file
pattern: "*.{vcf}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- versions:
type: file
description: File containing software versions
pattern: "versions.yml"
- vcf:
type: vcf
description: Annotated VCF file
pattern: "*.{vcf}"
authors:
- "@ramprasadn"

View file

@ -0,0 +1,46 @@
process GENMOD_COMPOUND {
tag "$meta.id"
label 'process_medium'
conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null)
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0':
'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }"
input:
tuple val(meta), path(input_vcf)
output:
tuple val(meta), path("*_compound.vcf"), emit: vcf
path "versions.yml" , emit: versions
when:
task.ext.when == null || task.ext.when
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
"""
genmod \\
compound \\
$args \\
--outfile ${prefix}_compound.vcf \\
$input_vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}_compound.vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
}

View file

@ -0,0 +1,40 @@
name: "genmod_compound"
description: Score compounds
keywords:
- compound
- genmod
tools:
- "genmod":
description: "Annotate genetic inheritance models in variant files"
homepage: "https://github.com/Clinical-Genomics/genmod"
documentation: "https://github.com/Clinical-Genomics/genmod"
tool_dev_url: "https://github.com/moonso"
doi: ""
licence: "['MIT']"
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- input_vcf:
type: file
description: VCF file
pattern: "*.{vcf}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ] #
- versions:
type: file
description: File containing software versions
pattern: "versions.yml"
- vcf:
type: file
description: Output VCF file
pattern: "*.{vcf}"
authors:
- "@ramprasadn"

View file

@ -0,0 +1,52 @@
process GENMOD_MODELS {
tag "$meta.id"
label 'process_medium'
conda (params.enable_conda ? "bioconda::genmod=3.7.4 conda-forge::python=3.4.5" : null)
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0':
'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }"
input:
tuple val(meta), path(input_vcf)
path (fam)
path (reduced_penetrance)
output:
tuple val(meta), path("*_models.vcf"), emit: vcf
path "versions.yml" , emit: versions
when:
task.ext.when == null || task.ext.when
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def family_file = fam ? "--family_file ${fam}" : ""
def pen_file = reduced_penetrance ? "--reduced_penetrance ${reduced_penetrance}" : ""
"""
genmod \\
models \\
$args \\
$pen_file \\
$family_file \\
--outfile ${prefix}_models.vcf \\
$input_vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}_models.vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
}

View file

@ -0,0 +1,49 @@
name: "genmod_models"
description: annotate models of inheritance
keywords:
- models
- genmod
tools:
- "genmod":
description: "Annotate genetic inheritance models in variant files"
homepage: "https://github.com/Clinical-Genomics/genmod"
documentation: "https://github.com/Clinical-Genomics/genmod"
tool_dev_url: "https://github.com/moonso"
doi: ""
licence: "['MIT']"
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- input_vcf:
type: file
description: vcf file
pattern: "*.{vcf}"
- reduced_penetrance:
type: file
description: file with gene ids that have reduced penetrance
pattern: "*.{tsv}"
- family_file:
type: file
description: ped file
pattern: "*.{ped}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- versions:
type: file
description: File containing software versions
pattern: "versions.yml"
- vcf:
type: file
description: Output VCF file
pattern: "*.{vcf}"
authors:
- "@ramprasadn"

View file

@ -0,0 +1,55 @@
process GENMOD_SCORE {
tag "$meta.id"
label 'process_medium'
conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null)
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0':
'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }"
input:
tuple val(meta), path(input_vcf)
path (fam)
path (reduced_penetrance)
path (score_config)
output:
tuple val(meta), path("*_score.vcf"), emit: vcf
path "versions.yml" , emit: versions
when:
task.ext.when == null || task.ext.when
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def family_file = fam ? "--family_file ${fam}" : ""
def pen_file = reduced_penetrance ? "--reduced_penetrance ${reduced_penetrance}" : ""
def config_file = score_config ? "--score_config ${score_config}" : ""
"""
genmod \\
score \\
$args \\
$pen_file \\
$family_file \\
$config_file \\
--outfile ${prefix}_score.vcf \\
$input_vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}_score.vcf
cat <<-END_VERSIONS > versions.yml
"${task.process}":
genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ))
END_VERSIONS
"""
}

View file

@ -0,0 +1,53 @@
name: "genmod_score"
description: Score the variants of a vcf based on their annotation
keywords:
- score
- genmod
tools:
- "genmod":
description: "Annotate genetic inheritance models in variant files"
homepage: "https://github.com/Clinical-Genomics/genmod"
documentation: "https://github.com/Clinical-Genomics/genmod"
tool_dev_url: "https://github.com/moonso"
doi: ""
licence: "['MIT']"
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- input_vcf:
type: file
description: vcf file
pattern: "*.{vcf}"
- reduced_penetrance:
type: file
description: file with gene ids that have reduced penetrance
pattern: "*.{tsv}"
- family_file:
type: file
description: ped file
pattern: "*.{ped}"
- score_config:
type: file
description: rank model config file
pattern: "*.{ini}"
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- versions:
type: file
description: File containing software versions
pattern: "versions.yml"
- vcf:
type: file
description: Output VCF file
pattern: "*.{vcf}"
authors:
- "@ramprasadn"

View file

@ -983,6 +983,22 @@ genmap/mappability:
- modules/genmap/mappability/** - modules/genmap/mappability/**
- tests/modules/genmap/mappability/** - tests/modules/genmap/mappability/**
genmod/annotate:
- modules/genmod/annotate/**
- tests/modules/genmod/annotate/**
genmod/compound:
- modules/genmod/compound/**
- tests/modules/genmod/compound/**
genmod/models:
- modules/genmod/models/**
- tests/modules/genmod/models/**
genmod/score:
- modules/genmod/score/**
- tests/modules/genmod/score/**
genomescope2: genomescope2:
- modules/genomescope2/** - modules/genomescope2/**
- tests/modules/genomescope2/** - tests/modules/genomescope2/**

View file

@ -331,12 +331,17 @@ params {
cutandrun_bedgraph_test_1 = "${test_data_dir}/genomics/homo_sapiens/illumina/bedgraph/cutandtag_h3k27me3_test_1.bedGraph" cutandrun_bedgraph_test_1 = "${test_data_dir}/genomics/homo_sapiens/illumina/bedgraph/cutandtag_h3k27me3_test_1.bedGraph"
cutandrun_bedgraph_test_2 = "${test_data_dir}/genomics/homo_sapiens/illumina/bedgraph/cutandtag_igg_test_1.bedGraph" cutandrun_bedgraph_test_2 = "${test_data_dir}/genomics/homo_sapiens/illumina/bedgraph/cutandtag_igg_test_1.bedGraph"
test_rnaseq_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf" test_rnaseq_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/test.rnaseq.vcf"
test_sv_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/sv_query.vcf.gz" test_sv_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/sv_query.vcf.gz"
genmod_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/genmod.vcf.gz"
genmod_annotate_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/test_annotate.vcf.gz"
genmod_models_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/test_models.vcf.gz"
genmod_score_vcf_gz = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/test_score.vcf.gz"
test_mito_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/NA12878_chrM.vcf.gz" test_mito_vcf = "${test_data_dir}/genomics/homo_sapiens/illumina/vcf/NA12878_chrM.vcf.gz"
test_pytor = "${test_data_dir}/genomics/homo_sapiens/illumina/pytor/test.pytor" test_pytor = "${test_data_dir}/genomics/homo_sapiens/illumina/pytor/test.pytor"
rank_model = "${test_data_dir}/genomics/homo_sapiens/illumina/genmod/svrank_model_-v1.8-.ini"
test_flowcell = "${test_data_dir}/genomics/homo_sapiens/illumina/bcl/flowcell.tar.gz" test_flowcell = "${test_data_dir}/genomics/homo_sapiens/illumina/bcl/flowcell.tar.gz"
test_flowcell_samplesheet = "${test_data_dir}/genomics/homo_sapiens/illumina/bcl/flowcell_samplesheet.csv" test_flowcell_samplesheet = "${test_data_dir}/genomics/homo_sapiens/illumina/bcl/flowcell_samplesheet.csv"

View file

@ -0,0 +1,20 @@
#!/usr/bin/env nextflow
nextflow.enable.dsl = 2
include { GENMOD_ANNOTATE } from '../../../../modules/genmod/annotate/main.nf'
input = [
[ id:'test', single_end:false ], // meta map
file(params.test_data['homo_sapiens']['illumina']['genmod_vcf_gz'], checkIfExists: true)
]
workflow test_genmod_annotate {
GENMOD_ANNOTATE ( input )
}
workflow test_genmod_annotate_stub {
GENMOD_ANNOTATE ( input )
}

View file

@ -0,0 +1,8 @@
process {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
withName: GENMOD_ANNOTATE {
ext.args = " --annotate_regions "
}
}

View file

@ -0,0 +1,17 @@
- name: "genmod annotate"
command: nextflow run ./tests/modules/genmod/annotate -entry test_genmod_annotate -c ./tests/config/nextflow.config -c ./tests/modules/genmod/annotate/nextflow.config
tags:
- "genmod"
- "genmod/annotate"
files:
- path: "output/genmod/test_annotate.vcf"
- path: output/genmod/versions.yml
- name: "genmod annotate stub"
command: nextflow run ./tests/modules/genmod/annotate -entry test_genmod_annotate_stub -c ./tests/config/nextflow.config -c ./tests/modules/genmod/annotate/nextflow.config -stub-run
tags:
- "genmod"
- "genmod/annotate"
files:
- path: "output/genmod/test_annotate.vcf"
- path: output/genmod/versions.yml

View file

@ -0,0 +1,22 @@
#!/usr/bin/env nextflow
nextflow.enable.dsl = 2
include { GENMOD_COMPOUND } from '../../../../modules/genmod/compound/main.nf'
input = [
[ id:'test', single_end:false ], // meta map
file(params.test_data['homo_sapiens']['illumina']['genmod_score_vcf_gz'], checkIfExists: true)
]
fam = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true)
config = file(params.test_data['homo_sapiens']['illumina']['rank_model'], checkIfExists: true)
workflow test_genmod_compound {
GENMOD_COMPOUND ( input )
}
workflow test_genmod_compound_stub {
GENMOD_COMPOUND ( input )
}

View file

@ -0,0 +1,5 @@
process {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
}

View file

@ -0,0 +1,17 @@
- name: "genmod compound"
command: nextflow run ./tests/modules/genmod/compound -entry test_genmod_compound -c ./tests/config/nextflow.config -c ./tests/modules/genmod/compound/nextflow.config
tags:
- "genmod"
- "genmod/compound"
files:
- path: output/genmod/test_compound.vcf
- path: output/genmod/versions.yml
- name: "genmod compound stub"
command: nextflow run ./tests/modules/genmod/compound -entry test_genmod_compound_stub -c ./tests/config/nextflow.config -c ./tests/modules/genmod/compound/nextflow.config -stub-run
tags:
- "genmod"
- "genmod/compound"
files:
- path: output/genmod/test_compound.vcf
- path: output/genmod/versions.yml

View file

@ -0,0 +1,21 @@
#!/usr/bin/env nextflow
nextflow.enable.dsl = 2
include { GENMOD_MODELS } from '../../../../modules/genmod/models/main.nf'
input = [
[ id:'test', single_end:false ], // meta map
file(params.test_data['homo_sapiens']['illumina']['genmod_annotate_vcf_gz'], checkIfExists: true)
]
fam = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true)
workflow test_genmod_models {
GENMOD_MODELS ( input, fam, [] )
}
workflow test_genmod_models_stub {
GENMOD_MODELS ( input, fam, [] )
}

View file

@ -0,0 +1,5 @@
process {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
}

View file

@ -0,0 +1,17 @@
- name: "genmod models"
command: nextflow run ./tests/modules/genmod/models -entry test_genmod_models -c ./tests/config/nextflow.config -c ./tests/modules/genmod/models/nextflow.config
tags:
- "genmod"
- "genmod/models"
files:
- path: output/genmod/test_models.vcf
- path: output/genmod/versions.yml
- name: "genmod models stub"
command: nextflow run ./tests/modules/genmod/models -entry test_genmod_models_stub -c ./tests/config/nextflow.config -c ./tests/modules/genmod/models/nextflow.config -stub-run
tags:
- "genmod"
- "genmod/models"
files:
- path: output/genmod/test_models.vcf
- path: output/genmod/versions.yml

View file

@ -0,0 +1,22 @@
#!/usr/bin/env nextflow
nextflow.enable.dsl = 2
include { GENMOD_SCORE } from '../../../../modules/genmod/score/main.nf'
input = [
[ id:'test', single_end:false ], // meta map
file(params.test_data['homo_sapiens']['illumina']['genmod_models_vcf_gz'], checkIfExists: true)
]
fam = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true)
config = file(params.test_data['homo_sapiens']['illumina']['rank_model'], checkIfExists: true)
workflow test_genmod_score {
GENMOD_SCORE ( input, fam, [], config)
}
workflow test_genmod_score_stub {
GENMOD_SCORE ( input, fam, [], config)
}

View file

@ -0,0 +1,5 @@
process {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
}

View file

@ -0,0 +1,17 @@
- name: "genmod score"
command: nextflow run ./tests/modules/genmod/score -entry test_genmod_score -c ./tests/config/nextflow.config -c ./tests/modules/genmod/score/nextflow.config
tags:
- "genmod"
- "genmod/score"
files:
- path: output/genmod/test_score.vcf
- path: output/genmod/versions.yml
- name: "genmod score stub"
command: nextflow run ./tests/modules/genmod/score -entry test_genmod_score_stub -c ./tests/config/nextflow.config -c ./tests/modules/genmod/score/nextflow.config -stub-run
tags:
- "genmod"
- "genmod/score"
files:
- path: output/genmod/test_score.vcf
- path: output/genmod/versions.yml