Skip to content

Commit

Permalink
Structured config files into sub-folders for easy access. Removed red…
Browse files Browse the repository at this point in the history
…undant code and moved subworkflows to correspondent folders. Fixes in rnadnavar.nf workflow and input check. Removed dependency in schema_input.json for lane. Added modules and subwrokflows the proper way.
  • Loading branch information
RaqManzano committed Aug 24, 2023
1 parent 770495e commit 912ff43
Show file tree
Hide file tree
Showing 53 changed files with 3,060 additions and 770 deletions.
1 change: 0 additions & 1 deletion assets/schema_input.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
"type": "string",
"pattern": "^\\S+$",
"unique": ["patient", "sample"],
"dependentRequired": ["fastq_1"],
"meta": ["lane"]
},
"fastq_1": {
Expand Down
87 changes: 87 additions & 0 deletions conf/modules/alignment/alignment_to_fastq.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Config file for defining DSL2 per module options and publishing paths
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Available keys to override module options:
ext.args = Additional arguments appended to command in module.
ext.args2 = Second set of arguments appended to command in module (multi-tool modules).
ext.args3 = Third set of arguments appended to command in module (multi-tool modules).
ext.prefix = File name prefix for output files.
ext.when = When to run the module.
----------------------------------------------------------------------------------------
*/

// BAM TO FASTQ

process { // alignment_to_fastq

withName: 'COLLATE_FASTQ_MAP' {
ext.args2 = '-N'
ext.prefix = {"${meta.id}.mapped"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'COLLATE_FASTQ_UNMAP' {
ext.args2 = '-N'
ext.prefix = {"${meta.id}.unmapped"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'SAMTOOLS_VIEW_MAP_MAP' {
ext.args = '-b -f1 -F12'
ext.prefix = {"${meta.id}.map_map"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'SAMTOOLS_VIEW_MAP_UNMAP' {
ext.args = '-b -f8 -F260'
ext.prefix = {"${meta.id}.map_unmap"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'SAMTOOLS_VIEW_UNMAP_MAP' {
ext.args = '-b -f4 -F264'
ext.prefix = {"${meta.id}.unmap_map"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'SAMTOOLS_VIEW_UNMAP_UNMAP' {
ext.args = '-b -f12 -F256'
ext.prefix = {"${meta.id}.unmap_unmap"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}

withName: 'SAMTOOLS_MERGE_UNMAP' {
ext.prefix = {"${meta.id}.merged_unmap"}
publishDir = [
//specify to avoid publishing, overwritten otherwise
enabled: false
]
}
withName: 'CAT_FASTQ' {
publishDir = [
enabled: params.save_split_fastqs,
mode: params.publish_dir_mode,
path: { "${params.outdir}/reference/bed" },
saveAs: { filename -> filename.equals('versions.yml') ? null : filename }
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

// BAM_ALIGN config

process {
process { // bam_align

if (params.step == 'mapping'){

Expand Down Expand Up @@ -50,22 +50,22 @@ process {
else { null }
}
]
}
}

withName: "(BWAMEM.*_MEM|DRAGMAP_ALIGN)" {
// Markduplicates Spark NEEDS name-sorted reads or runtime goes through the roof
// However if it's skipped, reads need to be coordinate-sorted
// Only name sort if Spark for Markduplicates + duplicate marking is not skipped
ext.args2 = { (!params.skip_tools || (params.skip_tools && !params.skip_tools.split(',').contains('markduplicates'))) ? '-n' : '' }
}
}

withName: "BWAMEM.*_MEM|SENTIEON_BWAMEM" {
withName: "BWAMEM.*_MEM|SENTIEON_BWAMEM" {
// Using -B 3 for tumor samples
ext.args = { meta.status == 1 ? "-K 100000000 -Y -B 3 -R ${meta.read_group}" : "-K 100000000 -Y -R ${meta.read_group}" }
}
}



withName: 'MERGE_BAM|INDEX_MERGE_BAM' {
publishDir = [
mode: params.publish_dir_mode,
Expand Down Expand Up @@ -95,9 +95,9 @@ process {
]
}

withName: STAR_ALIGN {
withName: 'STAR_ALIGN' {
ext.args = [
'--outSAMtype BAM SortedByCoordinate',
'--outSAMtype BAM Unsorted',
'--readFilesCommand zcat',
'--outFilterMultimapScoreRange 1',
'--outFilterMultimapNmax 20',
Expand All @@ -113,11 +113,9 @@ process {
params.read_length ? "--sjdbOverhang ${params.read_length - 1}" : '',
params.star_twopass ? '--twopassMode Basic' : '',
params.star_max_memory_bamsort > 0 ? "--limitBAMsortRAM ${params.star_max_memory_bamsort}" : "",
params.star_bins_bamsort > 0 ? "--outBAMsortingBinsN ${params.star_bins_bamsort}" : "",
params.star_max_collapsed_junc > 0 ? "--limitOutSJcollapsed ${params.star_max_collapsed_junc}" : ""
].join(' ').trim()
ext.args2 = { "--outSAMattrRGline ${meta.read_group}" }
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(reads.get(0).name.tokenize('.')[0]) : "" }
].flatten().unique(false).join(' ').trim()
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(reads.get(0).baseName.tokenize('.')[0]) : "" }
publishDir = [
[
path: { "${params.outdir}/reports/star/${meta.patient}/${meta.id}/" },
Expand Down Expand Up @@ -165,10 +163,102 @@ process {
]
}

}
// POST ALIGNMENT AND PREPROCESSING BAM TODO: check if it follows new pattern
withName: '.*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_SORT' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]).concat('') : "${meta.id}" }
publishDir = [
path: { "${params.outdir}/preprocessing/" },
mode: params.publish_dir_mode,
pattern: '*.bam',
saveAs: { (params.save_bam_mapped || (params.skip_tools && params.skip_tools.split(',').contains('markduplicates'))) && (meta.size * meta.numLanes == 1) ? "mapped/${meta.patient}/${meta.id}/${it}" : null }

]
}
withName: '.*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_FLAGSTAT' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]) : "${meta.id}" }
publishDir = [
path: { "${params.outdir}/reports/samtools/${meta.patient}/${meta.id}" },
mode: params.publish_dir_mode,
pattern: "*.flagstat",
enabled: params.save_align_intermeds
]
}


withName: '.*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_STATS' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(input.name.tokenize('.')[1]) : "${meta.id}" }
publishDir = [
path: { "${params.outdir}/reports/samtools/${meta.patient}/${meta.id}" },
mode: params.publish_dir_mode,
pattern: "*.stats",
enabled: params.save_align_intermeds
]
}

withName: '.*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_IDXSTATS' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(input.name.tokenize('.')[1]) : "${meta.id}" }
publishDir = [
path: { "${params.outdir}/reports/samtools/${meta.patient}/${meta.id}" },
mode: params.publish_dir_mode,
pattern: "*.idxstats",
enabled: params.save_align_intermeds
]
}

withName: '.*:FASTQ_ALIGN_STAR:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_INDEX' {
ext.args = params.bam_csi_index ? '-c' : ''
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]).concat('.aligned') : "${meta.id}.aligned" }
publishDir = [
path: { "${params.outdir}/preprocessing/" },
mode: params.publish_dir_mode,
pattern: "*.{bai,csi}",
saveAs: { (params.save_bam_mapped || (params.skip_tools && params.skip_tools.split(',').contains('markduplicates'))) && (meta.size * meta.numLanes == 1) ? "mapped/${meta.patient}/${meta.id}/${it}" : null }

]
}
}

// Second run alignment
if (params.skip_tools && !params.skip_tools.split(',').contains('second_run')){
withName: '.*:FASTQ_ALIGN_HISAT2:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_SORT' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]).concat('.aligned_hs2') : "${meta.id}.aligned_hs2" }
publishDir = [
path: { "${params.outdir}/preprocessing/hisat2/${meta.patient}/${meta.id}/" },
mode: params.publish_dir_mode,
pattern: "*.bam",
enabled: params.save_align_intermeds
]
}

withName: '.*:FASTQ_ALIGN_HISAT2:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_INDEX' {
ext.args = params.bam_csi_index ? '-c' : ''
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]).concat('.aligned_hs2') : "${meta.id}.aligned_hs2" }
publishDir = [
path: { "${params.outdir}/preprocessing/hisat2/${meta.patient}/${meta.id}/" },
mode: params.publish_dir_mode,
pattern: "*.{bai,csi}",
enabled: params.save_align_intermeds
]
}

withName: '.*:FASTQ_ALIGN_HISAT2:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_FLAGSTAT' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(bam.name.tokenize('.')[1]).concat('.aligned_hs2') : "${meta.id}.aligned_hs2" }
publishDir = [
path: { "${params.outdir}/reports/samtools/${meta.patient}/${meta.id}/" },
mode: params.publish_dir_mode,
pattern: "*.{bai,csi}",
enabled: params.save_align_intermeds
]
}

withName: '.*:ALIGN_HISAT2:BAM_SORT_STATS_SAMTOOLS:SAMTOOLS_IDXSTATS' {
ext.prefix = { params.split_fastq > 1 ? "${meta.id}".concat('.').concat(input.name.tokenize('.aligned_hs2')[1]) : "${meta.id}.aligned_hs2" }
publishDir = [
path: { "${params.outdir}/reports/samtools/${meta.patient}/${meta.id}" },
mode: params.publish_dir_mode,
pattern: "*.idxstats",
enabled: params.save_align_intermeds
]
}
}
}
69 changes: 69 additions & 0 deletions conf/modules/annotate/annotate.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Config file for defining DSL2 per module options and publishing paths
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Available keys to override module options:
ext.args = Additional arguments appended to command in module.
ext.args2 = Second set of arguments appended to command in module (multi-tool modules).
ext.args3 = Third set of arguments appended to command in module (multi-tool modules).
ext.prefix = File name prefix for output files.
ext.when = When to run the module.
----------------------------------------------------------------------------------------
*/

// ANNOTATE

process { // annotate

// VEP TODO: is vep_custom_args working??
if (params.tools && params.tools.split(',').contains('vep')) {
withName: 'ENSEMBLVEP_VEP' {
ext.args = { [
(params.vep_dbnsfp && params.dbnsfp && !params.dbnsfp_consequence) ? "--plugin dbNSFP,${params.dbnsfp.split("/")[-1]},${params.dbnsfp_fields}" : '',
(params.vep_dbnsfp && params.dbnsfp && params.dbnsfp_consequence) ? "--plugin dbNSFP,'consequence=${params.dbnsfp_consequence}',${params.dbnsfp.split("/")[-1]},${params.dbnsfp_fields}" : '',
(params.vep_loftee) ? "--plugin LoF,loftee_path:/opt/conda/envs/nf-core-vep-${params.vep_version}/share/ensembl-vep-${params.vep_version}-0" : '',
(params.vep_spliceai && params.spliceai_snv && params.spliceai_indel) ? "--plugin SpliceAI,snv=${params.spliceai_snv.split("/")[-1]},indel=${params.spliceai_indel.split("/")[-1]}" : '',
(params.vep_spliceregion) ? '--plugin SpliceRegion' : '',
(params.vep_out_format) ? "--${params.vep_out_format}" : '--vcf',
(params.vep_custom_args) ?: ''
].join(' ').trim() }
// If just VEP: <vcf prefix>_VEP.ann.vcf
ext.prefix = { vcf.baseName - ".vcf" + "_VEP.ann" }
publishDir = [
[
mode: params.publish_dir_mode,
path: { "${params.outdir}/reports/EnsemblVEP/${meta.variantcaller}/${meta.id}/" },
pattern: "*html"
],
[
mode: params.publish_dir_mode,
path: { "${params.outdir}/annotation/${meta.variantcaller}/${meta.id}/" },
pattern: "*{gz}"
]
]
}
}

// ALL ANNOTATION TOOLS
if (params.tools && (params.tools.split(',').contains('snpeff') || params.tools.split(',').contains('vep') || params.tools.split(',').contains('merge'))) {
withName: "NFCORE_SAREK:SAREK:VCF_ANNOTATE_ALL:.*:(TABIX_BGZIPTABIX|TABIX_TABIX)" {
ext.prefix = { input.name - ".vcf" }
publishDir = [
mode: params.publish_dir_mode,
path: { "${params.outdir}/annotation/${meta.variantcaller}/${meta.id}/" },
pattern: "*{gz.tbi}"
]
}
}

if (params.tools && (params.tools.split(',').contains('snpeff') || params.tools.split(',').contains('merge'))) {
withName: 'NFCORE_SAREK:SAREK:VCF_ANNOTATE_ALL:VCF_ANNOTATE_SNPEFF:TABIX_BGZIPTABIX' {
publishDir = [
mode: params.publish_dir_mode,
path: { "${params.outdir}/annotation/${meta.variantcaller}/${meta.id}/" },
pattern: "*{gz,gz.tbi}",
saveAs: { params.tools.split(',').contains('snpeff') ? it : null }
]
}
}
}
58 changes: 58 additions & 0 deletions conf/modules/consensus/normalise.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Config file for defining DSL2 per module options and publishing paths
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Available keys to override module options:
ext.args = Additional arguments appended to command in module.
ext.args2 = Second set of arguments appended to command in module (multi-tool modules).
ext.args3 = Third set of arguments appended to command in module (multi-tool modules).
ext.prefix = File name prefix for output files.
ext.when = When to run the module.
----------------------------------------------------------------------------------------
*/

// NORMALISE

process { // normalise

if (params.skip_toos && params.skip_toos.split(',').contains('normalise')) {
// VT
// TODO: stats are not going to the report dir - no idea why
withName: 'VT_DECOMPOSE'{
ext.args = ""
ext.prefix = { "${vcf.baseName.minus(".vcf")}.dec" }
publishDir = [
[
mode: params.publish_dir_mode,
path: { "${params.outdir}/reports/vt/" },
pattern: {'*dec.stats'},
saveAs: {"${meta.variantcaller}/${meta.patient}/${meta.id}/${it}"},
enabled: true
],
[
mode: params.publish_dir_mode,
path: { "${params.outdir}/variant_calling/" },
pattern: {"*{vcf.gz,vcf.gz.tbi}"},
saveAs: {"${meta.variantcaller}/${meta.patient}/${meta.id}/${it}"},
enabled: false // store normalised results only
]
]
}

withName: 'VT_NORMALIZE'{
ext.args = {"-n"}
ext.prefix = { "${vcf.baseName.minus(".dec.vcf")}.norm" }
publishDir = [[
path: { "${params.outdir}/variant_calling/" },
pattern: "*{vcf.gz,vcf.gz.tbi,norm.stats}",
saveAs: { "${meta.variantcaller}/${meta.patient}/${meta.id}/${it}" },
enabled: true // just store normalised results
],
[mode: params.publish_dir_mode,
path: { "${params.outdir}/reports/vt/${meta.variantcaller}/${meta.patient}/${meta.id}/" },
pattern: "*stats"
]]
}

}
}
Loading

0 comments on commit 912ff43

Please sign in to comment.