-
Notifications
You must be signed in to change notification settings - Fork 15
/
nf_circle
executable file
·253 lines (184 loc) · 11.6 KB
/
nf_circle
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#!/usr/bin/env nextflow
// Enable modules
nextflow.enable.dsl=2
params.outdir = "."
params.genome = ""
params.verbose = false
params.single_end = true
params.samtools_sort_args = ''
params.ecc_preprocessing_args = ''
params.samtools_index_args = ''
params.umibam2_args = ''
params.multiqc_args = ''
params.fastqc_args = ''
params.no_output = false
params.no_qc = false
params.dedup = false
params.help = false
// Show help message and exit
if (params.help){
helpMessage()
exit 0
}
params.list_genomes = false;
if (params.list_genomes){
println ("[WORKFLOW] List genomes selected")
}
if (params.verbose){
println ("[WORKFLOW] UMIBAM ARGS ARE: " + params.umibam2_args)
println ("[WORKFLOW] MULTIQC ARGS: " + params.multiqc_args)
println ("[WORKFLOW] DEDUPLICATING: " + params.dedup)
}
include { makeFilesChannel; getFileBaseNames } from './nf_modules/files.mod.nf'
include { getGenome } from './nf_modules/genomes.mod.nf'
include { listGenomes } from './nf_modules/genomes.mod.nf'
if (params.list_genomes){
listGenomes() // this lists all available genomes, and exits
}
genome = getGenome(params.genome)
include { CHIPSEQ } from './subworkflows/chipseq_workflow.nf' params(genome: genome, no_output: params.no_output)
include { ECCDNA_PREPROCESSING } from './nf_modules/eccDNA_preprocessing.mod.nf' params(no_output: params.no_output)
include { FASTQC } from './nf_modules/fastqc.mod.nf' params(nogroup: true, no_output: params.no_output)
include { SAMTOOLS_SORT } from './nf_modules/samtools.mod.nf' params(no_output: params.no_output)
include { SAMTOOLS_INDEX2 } from './nf_modules/samtools.mod.nf' params(no_output: params.no_output)
include { UMIBAM2 } from './nf_modules/umibam2.mod.nf'
file_ch = makeFilesChannel(args)
// copied from nf_traelseq
process CHECK_BAMFILE_NOT_EMPTY {
input:
path(bam)
output:
tuple path ("*sam"), path (bam), emit: bam
script:
"""
module load samtools
samtools view ${bam} | head -n 1 > first_line.sam
"""
}
workflow {
main:
FASTQC( file_ch, params.outdir, params.fastqc_args, params.verbose )
ECCDNA_PREPROCESSING( file_ch, params.outdir, params.ecc_preprocessing_args, params.verbose )
CHIPSEQ( ECCDNA_PREPROCESSING.out.reads )
// we just need the bam files for SAMTOOLS_SORT and INDEX, not a tuple of the name and the bam
mapped_bams = CHIPSEQ.out.bam.map { it.last() }
// filter out any empty bam files from the channel - umibam fails if passed an empty bam file
CHECK_BAMFILE_NOT_EMPTY(mapped_bams)
filt_sam_bam = CHECK_BAMFILE_NOT_EMPTY.out.bam.filter { it.first().countLines() > 0 }
filt_bam = filt_sam_bam.map { it.last() }
if (params.dedup) {
SAMTOOLS_SORT (filt_bam, params.outdir, params.samtools_sort_args, params.verbose)
SAMTOOLS_INDEX2 (SAMTOOLS_SORT.out.bam, params.outdir, params.samtools_index_args, params.verbose)
// Deduplication
UMIBAM2 (SAMTOOLS_INDEX2.out.bam, SAMTOOLS_INDEX2.out.bai, params.outdir, params.umibam2_args, params.verbose)
}
}
// Since workflows with very long command lines tend to fail to get rendered at all, I was experimenting with a
// minimal execution summary report so we at least know what the working directory was...
workflow.onComplete {
def msg = """\
Pipeline execution summary
---------------------------
Jobname : ${workflow.runName}
Completed at: ${workflow.complete}
Duration : ${workflow.duration}
Success : ${workflow.success}
workDir : ${workflow.workDir}
exit status : ${workflow.exitStatus}
"""
.stripIndent()
sendMail(to: "${workflow.userName}@babraham.ac.uk", subject: 'Minimal pipeline execution report', body: msg)
}
def helpMessage() {
log.info"""
>>
SYNOPSIS:
This workflow runs a Circle-seq processing pipeline from FastQ files, including QC, contamination QC,
quality-/adapter trimming, moving UMI from the sequence and into the read header, alignments to a genome using Bowtie 2,
deduplication based on position and UMI, and finally generates an aggregate QC report.
Here is a graphical representation of the workflow:
--- FastQC
--- ECCDNA_PREPROCESSING
|
--- CHIPSEQ (subworkflow) - trims, QC, maps with bowtie2
--- Trim Galore
|
--- Samtools sort
--- Samtools index
|
umibam2
--- MultiQC*
* This step runs only once ALL other jobs have completed.
By default all these steps are submitted as jobs to the Babraham stone compute cluster.
By default, the involved tools are run in the following way:
------------------------------------------------------------
FastQC: defaults (-q)
FastQ Screen: defaults (Bowtie 2; local mode)
Trim Galore: defaults (adapter auto-detection)
Bowtie 2: end-to-end mode; '--no-unal'; for paired-end files: '--no-mixed --no-discordant' (concordant PE alignmnents only)
To add additional parameters to any of the programs, consider supplying tool-specific arguments (see --toolname_args="..." below).
==============================================================================================================
USAGE:
nf_circle [options] --genome <genomeID> <input files>
Mandatory arguments:
====================
<input files> List of input files, e.g. '*fastq.gz' or '*fq.gz'. This pipeline will only work with single end files.
--genome [str] Genome build ID to be used for the alignment, e.g. GRCh38 (latest human genome) or GRCm39
(latest mouse genome build). To list all available genomes, see '--list_genomes' below.
Optional arguments:
====================
--no_output If specified, the only files produced in the output directory will be *umibam2.1.bam, *umibam2.1_dedup_report.txt
and multiqc_report.html.
The output files from fastqc, fastq_screen, bowtie, trim_galore, samtools sort and index can be found
in the nf work/ directory but will not be written into the output directory.
This option was implemented when reprocessing a load of samples, where intermediate files were not required.
[Default: false]
--dedup If specified, umibam2 will be run to deduplicate the data [Default: false]
Tool-specific options:
======================
For all following options, please note that the format: ="your options" needs to be strictly adhered to in order to work correctly.
--fastqc_args="[str]" This option can take any number of options that are compatible with FastQC to modify its default
behaviour. For more detailed information on available options please refer to the FastQC documentation,
or run 'fastqc --help' on the command line. As an example, to run FastQC without grouping of bases when
reads are >50bp and use a specific file with non-default adapter sequences, use:
' --fastqc_args="--nogroup --adapters ./non_default_adapter_file.txt" '. [Default: None]
--fastq_screen_args="[str]" This option can take any number of options that are compatible with FastQ Screen to modify its
default behaviour. For more detailed information on available options please refer to the FastQ Screen
documentation, or run 'fastq_screen --help' on the command line. For instance, to process a bisulfite
converted library with fairly relaxed parameters, you could use:
' --fastq_screen_args="--bisulfite --score_min L,0,-0.6" '. [Default: None]
--trim_galore_args="[str]" This option can take any number of options that are compatible with Trim Galore to modify its
default trimming behaviour. For more detailed information on available options please refer
to the Trim Galore User Guide, or run 'trim_galore --help' on the command line. As an example, to trim
off the first 10bp from the 5' of R1 and 5bp of R2, use:
' --trim_galore_args="--clip_r1 10 --clip_r2 5" '. [Default: None]
--bowtie2_args="[str]" This option can take any number of options that are compatible with Bowtie 2 to modify its
default mapping behaviour. For more detailed information on available options please refer
to the Bowtie 2 User Guide, or run 'bowtie2 --help' on the command line. As an example, to
run somewhat more stringent alignments for only 1 million sequences, use:
' --bowtie2_args="-u 1000000 --score_min L,0,-0.4" '. [Default: None]
Other options:
==============
--outdir [str] Path to the output directory. [Default: current working directory]
--list_genomes List all genome builds that are currently available to choose from. To see this list
of available genomes with more detailed information about paths and indexes, run
the command as '--list_genomes --verbose'
--single_end Force files of a read pair to be treated as single-end files. [Default: auto-detect]
--verbose More verbose status messages. [Default: OFF]
--help Displays this help message and exits.
Workflow options:
=================
Please note the single '-' hyphen for the following options!
-resume If a pipeline workflow has been interrupted or stopped (e.g. by accidentally closing a laptop),
this option will attempt to resume the workflow at the point it got interrupted by using
Nextflow's caching mechanism. This may save a lot of time.
-bg Sends the entire workflow into the background, thus disconnecting it from the terminal session.
This option launches a daemon process (which will keep running on the headnode) that watches over
your workflow, and submits new jobs to the SLURM queue as required. Use this option for big pipeline
jobs, or whenever you do not want to watch the status progress yourself. Upon completion, the
pipeline will send you an email with the job details. This option is HIGHLY RECOMMENDED!
-process.executor=local Temporarily changes where the workflow is executed to the 'local' machine. See also Nextflow config
file for more details. [Default: slurm]
<<
""".stripIndent()
}