-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathchipseq-pipeline.nf
executable file
·97 lines (89 loc) · 2.51 KB
/
chipseq-pipeline.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
// Enable DSL2
nextflow.enable.dsl=2
// Define default values for parameters
def defaults = [
shift: false,
mismatches: 2,
multimaps: 10,
rescale: false,
genomeSize: 'hs',
fragmentLength: 200,
minMatchedBases: 0.8,
qualityThreshold: 26,
zeroneMinConfidence: 0,
removeDuplicates: false,
replicatePattern: '.[12]',
dbFile: 'chipseq-pipeline.db',
tmpDirMACS2: '.',
]
// Parameters for test run
params.index = "${baseDir}/data/index.tsv"
params.genome = "${baseDir}/data/genome.fa"
// Set default values for parameters
params.help = false
params.genomeIndex = ''
params.shift = defaults.shift
params.dbFile = defaults.dbFile
params.rescale = defaults.rescale
params.multimaps = defaults.multimaps
params.genomeSize = defaults.genomeSize
params.mismatches = defaults.mismatches
params.fragmentLength = 0
params.minMatchedBases = defaults.minMatchedBases
params.qualityThreshold = defaults.qualityThreshold
params.removeDuplicates = defaults.removeDuplicates
params.replicatePattern = defaults.replicatePattern
params.zeroneMinConfidence = defaults.zeroneMinConfidence
params.tmpDirMACS2 = defaults.tmpDirMACS2
// Check input parameters
include { printUsage } from './modules/common'
if (params.help) {
printUsage(defaults)
exit 1
}
if (!params.genome) {
exit 1, "Please specify a genome file"
}
if (!params.index) {
exit 1, "Please specify the input table file"
}
// Includes
include { parseIndexFile; collectResults; printHeader } from './modules/common'
include { align } from './modules/gem'
include { mergeBams; processBams } from './modules/bam'
include { computeMetrics } from './modules/metrics'
include { callPeaks as MACS2callPeaks} from './modules/macs'
include { callPeaks as ZERONEcallPeaks} from './modules/zerone'
workflow {
printHeader()
fastqs = parseIndexFile(
file(params.index),
params.fragmentLength ?: defaults.fragmentLength,
)
align(params.genome, fastqs)
mergeBams(align.out)
allBams = processBams(mergeBams.out)
(peaks, signal) = MACS2callPeaks(
file(params.genome),
params.fragmentLength ?: defaults.fragmentLength,
allBams
)
(zeroneMatrix, zeroneBed, zeroneMergedBed) = ZERONEcallPeaks(allBams)
metrics = computeMetrics(
allBams,
peaks.filter { it[4] =~ /narrowPeak$/ }
)
collectResults(
metrics,
allBams,
peaks,
signal,
zeroneMatrix.mix(zeroneBed).mix(zeroneMergedBed)
)
}
workflow.onComplete {
log.info ""
log.info "-----------------------"
log.info "Pipeline run completed."
log.info "-----------------------"
}