-
Notifications
You must be signed in to change notification settings - Fork 4
/
main.nf
224 lines (205 loc) · 8.3 KB
/
main.nf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/usr/bin/env nextflow
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nf-core/references
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Github : https://github.com/nf-core/references
Website: https://nf-co.re/references
Slack : https://nfcore.slack.com/channels/references
----------------------------------------------------------------------------------------
*/
nextflow.preview.output = true
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
include { paramsSummaryMap } from 'plugin/nf-schema'
include { methodsDescriptionText } from './subworkflows/local/utils_nfcore_references_pipeline'
include { paramsSummaryMultiqc } from './subworkflows/nf-core/utils_nfcore_pipeline'
include { softwareVersionsToYAML } from './subworkflows/nf-core/utils_nfcore_pipeline'
include { MULTIQC } from './modules/nf-core/multiqc/main'
include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_references_pipeline'
include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_references_pipeline'
include { REFERENCES } from "./workflows/references/main"
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RUN MAIN WORKFLOW
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
workflow {
main:
// SUBWORKFLOW: Run initialisation tasks
PIPELINE_INITIALISATION(
params.version,
params.validate_params,
params.monochrome_logs,
args,
params.outdir,
params.input
)
// WORKFLOW: Run main workflow
if (!params.tools) {
log.error("No tools specified")
error("EXIT: No tools specified")
}
NFCORE_REFERENCES(PIPELINE_INITIALISATION.out.samplesheet, params.tools)
ch_multiqc_files = Channel.empty()
//
// MODULE: MultiQC
//
ch_multiqc_config = Channel.fromPath("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)
ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty()
ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty()
ch_workflow_summary = Channel.value(paramsSummaryMultiqc(paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")))
ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true)
ch_methods_description = Channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description))
ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
ch_multiqc_files = ch_multiqc_files.mix(softwareVersionsToYAML(NFCORE_REFERENCES.out.versions).collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_references_software_mqc_versions.yml', sort: true, newLine: true))
ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true))
MULTIQC(
ch_multiqc_files.collect(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
[],
[]
)
multiqc_data = MULTIQC.out.data
multiqc_plots = MULTIQC.out.plots
multiqc_report = MULTIQC.out.report
//
// SUBWORKFLOW: Run completion tasks
//
PIPELINE_COMPLETION(
params.email,
params.email_on_fail,
params.plaintext_email,
params.outdir,
params.monochrome_logs,
params.hook_url,
MULTIQC.out.report.toList()
)
publish:
multiqc_data >> 'multiqc'
multiqc_plots >> 'multiqc'
multiqc_report >> 'multiqc'
}
output {
'bowtie1' {
path 'bowtie1'
}
'bowtie2' {
path 'bowtie2'
}
'bwamem1' {
path { meta, index -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/BWAIndex/" } }
}
'bwamem2' {
path { meta, index -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/BWAmem2Index/" } }
}
'dragmap' {
path { meta, index -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/dragmap/" } }
}
'fasta' {
path { meta, fasta -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/WholeGenomeFasta/${file}" } }
}
'fasta_dict' {
path { meta, dict -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/WholeGenomeFasta/${file}" } }
}
'fasta_fai' {
path { meta, fai -> { file -> "${meta.species}/${meta.source}/${meta.id}/Sequence/WholeGenomeFasta/${file}" } }
}
'fasta_sizes' {
path 'fasta_sizes'
}
'gffread' {
path 'gffread'
}
'hisat2' {
path 'hisat2'
}
'intervals' {
path { meta, intervals -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/intervals/${file}" } }
}
'kallisto' {
path 'kallisto'
}
'make' {
path 'make'
}
'msisensorpro' {
path { meta, index -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/msisensorpro/${file}" } }
}
'multiqc_data' {
path 'multiqc'
}
'multiqc_plots' {
path 'multiqc'
}
'multiqc_report' {
path 'multiqc'
}
'rsem' {
path 'rsem'
}
'salmon' {
path 'salmon'
}
'star' {
path 'star'
}
'tabix_dbsnp' {
path { meta, vcf -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/${meta.source_dbsnp}/${file}" } }
}
'tabix_germline_resource' {
path { meta, vcf -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/${meta.source_germline_resource}/${file}" } }
}
'tabix_known_indels' {
path { meta, vcf -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/${meta.source_known_indels}/${file}" } }
}
'tabix_known_snps' {
path { meta, vcf -> { file -> "${meta.species}/${meta.source}/${meta.id}/Annotation/${meta.source_known_snps}/${file}" } }
}
}
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NAMED WORKFLOWS FOR PIPELINE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
//
// WORKFLOW: Run main analysis pipeline depending on type of input
//
workflow NFCORE_REFERENCES {
take:
input // channel: asset reference yml file read in from --input
tools // list of tools to use to build references
main:
// WORKFLOW: Run pipeline
REFERENCES(input, tools)
emit:
bowtie1 = REFERENCES.out.bowtie1
bowtie2 = REFERENCES.out.bowtie2
bwamem1 = REFERENCES.out.bwamem1
bwamem2 = REFERENCES.out.bwamem2
dbsnp_vcf_tbi = REFERENCES.out.dbsnp_vcf_tbi
dragmap = REFERENCES.out.dragmap
fasta = REFERENCES.out.fasta
fasta_dict = REFERENCES.out.fasta_dict
fasta_fai = REFERENCES.out.fasta_fai
germline_resource_vcf_tbi = REFERENCES.out.germline_resource_vcf_tbi
gffread = REFERENCES.out.gff_gtf
hisat2 = REFERENCES.out.hisat2
hisat2_splice_sites = REFERENCES.out.hisat2_splice_sites
intervals = REFERENCES.out.intervals_bed
kallisto = REFERENCES.out.kallisto
known_indels_vcf_tbi = REFERENCES.out.known_indels_vcf_tbi
known_snps_vcf_tbi = REFERENCES.out.known_snps_vcf_tbi
msisensorpro = REFERENCES.out.msisensorpro
rsem = REFERENCES.out.rsem
rsem_transcript_fasta = REFERENCES.out.rsem_transcript_fasta
salmon = REFERENCES.out.salmon
sizes = REFERENCES.out.sizes
star = REFERENCES.out.star
versions = REFERENCES.out.versions
}