main.nf 7.43 KB
Newer Older
Gervaise Henry's avatar
Gervaise Henry committed
1
#!/usr/bin/env nextflow
Gervaise Henry's avatar
Gervaise Henry committed
2
3
4
5
6
7
8
9
/*
main.nf
*
* --------------------------------------------------------------------------
* Licensed under MIT (https://git.biohpc.swmed.edu/BICF/Astrocyte/cellranger_mkfastq/blob/develop/LICENSE)
* --------------------------------------------------------------------------
*
*/
Gervaise Henry's avatar
Gervaise Henry committed
10

11
12
13
14
15
16
17
18
//  ########  ####  ######  ######## 
//  ##     ##  ##  ##    ## ##       
//  ##     ##  ##  ##       ##       
//  ########   ##  ##       ######   
//  ##     ##  ##  ##       ##       
//  ##     ##  ##  ##    ## ##       
//  ########  ####  ######  ##       

Gervaise Henry's avatar
Gervaise Henry committed
19
// Define input variables
20
params.name = "run"
21
22
params.bcl = "${baseDir}/../test_data/simple1/*.tar.gz"
params.designFile = "${baseDir}/../test_data/single1/cellranger-tiny-bcl-simple-1_2_0.csv"
23
params.mask = ""
Gervaise Henry's avatar
Gervaise Henry committed
24
params.astrocyte = false
Holly Ruess's avatar
Holly Ruess committed
25
26
params.outDir = "${baseDir}/output"

Gervaise Henry's avatar
Gervaise Henry committed
27
// Define list of files
Gervaise Henry's avatar
Gervaise Henry committed
28
29
tarList = Channel
  .fromPath( params.bcl )
30
bclCount = Channel
Gervaise Henry's avatar
Gervaise Henry committed
31
32
  .fromPath( params.bcl )
  .count()
Gervaise Henry's avatar
Gervaise Henry committed
33
34

// Define regular variables
35
pipelineVersion = "2.1.1"
Gervaise Henry's avatar
Gervaise Henry committed
36
name = params.name
37
38
39
designLocation = Channel
  .fromPath(params.designFile)
  .ifEmpty { exit 1, "design file not found: ${params.designFile}" }
40
mask = params.mask
41
outDir = params.outDir
Gervaise Henry's avatar
Gervaise Henry committed
42

Gervaise Henry's avatar
Gervaise Henry committed
43
44
45
46
47
// Define script files
check_designScript = Channel.fromPath("$baseDir/scripts/check_design.py")
untarBCLScript = Channel.fromPath("$baseDir/scripts/untarBCL.sh")
countDesignScript = Channel.fromPath("$baseDir/scripts/countDesign.sh")
fastqcScript = Channel.fromPath("$baseDir/scripts/fastqc.sh")
48
49
50
versionsScript = Channel.fromPath("$baseDir/scripts/generate_versions.py")
referencesScript = Channel.fromPath("$baseDir/scripts/generate_references.py")
versions_pythonScript = Channel.fromPath("$baseDir/scripts/versions_python.sh")
Gervaise Henry's avatar
Gervaise Henry committed
51
//versions_pigzScript = Channel.fromPath("$baseDir/scripts/versions_pigz.sh")
52
53
54
55
56
versions_cellrangerScript = Channel.fromPath("$baseDir/scripts/versions_cellranger.sh")
versions_bcl2fastqScript = Channel.fromPath("$baseDir/scripts/versions_bcl2fastq.sh")
versions_fastqcScript = Channel.fromPath("$baseDir/scripts/versions_fastqc.sh")

// Define report files
Gervaise Henry's avatar
Gervaise Henry committed
57
multiqcConf = Channel.fromPath("${baseDir}/configs/multiqc_config.yaml")
58
59
references = Channel.fromPath("${baseDir}/../docs/references.md")

Gervaise Henry's avatar
Gervaise Henry committed
60

Gervaise Henry's avatar
Gervaise Henry committed
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
/*
 * trackStart: track start of pipeline
 */
params.ci = false
process trackStart {
  script:
  """
  hostname
  ulimit -a
  export https_proxy=\${http_proxy}
 
  curl -H 'Content-Type: application/json' -X PUT -d '{ \
      "sessionId": "${workflow.sessionId}", \
      "pipeline": "cellranger_mkfastq", \
      "pipelineVersion": "${pipelineVersion}", \
      "start": "${workflow.start}", \
      "astrocyte": ${params.astrocyte}, \
      "status": "started", \
      "nextflowVersion": "${workflow.nextflow.version}",
      "ci": ${params.ci}}' \
  "https://xku43pcwnf.execute-api.us-east-1.amazonaws.com/ProdDeploy/pipeline-tracking"
  """
}


Gervaise Henry's avatar
Gervaise Henry committed
86
process checkDesignFile {
Holly Ruess's avatar
Holly Ruess committed
87
88

  tag "${name}"
89
  module 'python/3.6.1-2-anaconda'
Gervaise Henry's avatar
Gervaise Henry committed
90
91

  input:
Gervaise Henry's avatar
Gervaise Henry committed
92
    file check_designScript
93
    file versions_pythonScript
Holly Ruess's avatar
Holly Ruess committed
94
    file designLocation
Gervaise Henry's avatar
Gervaise Henry committed
95
96

  output:
Holly Ruess's avatar
Holly Ruess committed
97
98
    file("design.checked.csv") into designPaths
    file("design.checked.csv") into designCount
99
100
    file("version_pipeline.txt") into version_pipeline
    file("version_nextflow.txt") into version_nextflow
101
    file("version_python.txt") into version_python
Gervaise Henry's avatar
Gervaise Henry committed
102
103

  script:
Holly Ruess's avatar
Holly Ruess committed
104
105
    """
    hostname
106
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
107
    ulimit -a
108
109
110
111
    noSpaceDesign=\$(echo "${designLocation}" | tr -d ' ')
    if [[ "\${noSpaceDesign}" != "${designLocation}" ]]; then
      mv "${designLocation}" "\${noSpaceDesign}"
    fi
Gervaise Henry's avatar
Gervaise Henry committed
112
    python3 check_design.py -d \${noSpaceDesign}
113
    bash versions_python.sh > version_python.txt
114
    echo "${workflow.nextflow.version}" > version_nextflow.txt
115
    echo "${pipelineVersion}" > version_pipeline.txt
Holly Ruess's avatar
Holly Ruess committed
116
117
    """

Gervaise Henry's avatar
Gervaise Henry committed
118
}
119
120
121
/* nextflow workflow manifest version calls that aren't compatible with Asrcocyte
    echo "${workflow.manifest.version}" > version_pipeline.txt
*/
Gervaise Henry's avatar
Gervaise Henry committed
122

123
process untarBCL {  
Holly Ruess's avatar
Holly Ruess committed
124

125
  tag "${tar.simpleName}"
126
  module 'pigz/2.4'
Gervaise Henry's avatar
Gervaise Henry committed
127
128

  input:
Gervaise Henry's avatar
Gervaise Henry committed
129
    file untarBCLScript
Gervaise Henry's avatar
Gervaise Henry committed
130
    //file versions_pigzScript
131
    each file(tar) from tarList
Gervaise Henry's avatar
Gervaise Henry committed
132
133

  output:
134
    file("*[!version_pigz.txt]") into bclPaths mode flatten
Gervaise Henry's avatar
Gervaise Henry committed
135
    //file("version_pigz.txt") into version_pigz
Gervaise Henry's avatar
Gervaise Henry committed
136
137

  script:
Holly Ruess's avatar
Holly Ruess committed
138
139
    """
    hostname
140
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
141
    ulimit -a
142
    bash untarBCL.sh -t ${tar}
Gervaise Henry's avatar
Gervaise Henry committed
143
    #bash versions_pigz.sh > version_pigz.txt
Holly Ruess's avatar
Holly Ruess committed
144
145
    """

Gervaise Henry's avatar
Gervaise Henry committed
146
147
}

Gervaise Henry's avatar
Gervaise Henry committed
148

Gervaise Henry's avatar
Gervaise Henry committed
149
process mkfastq {
Holly Ruess's avatar
Holly Ruess committed
150

151
  tag "${bcl.simpleName}"
Holly Ruess's avatar
Holly Ruess committed
152
  publishDir "${outDir}/${task.process}", mode: 'copy', pattern: "{*/outs/**/*.fastq.gz}"
153
  queue '128GB,256GB,256GBv1,384GB'
154
  module 'cellranger/3.1.0:bcl2fastq/2.19.1'
Gervaise Henry's avatar
Gervaise Henry committed
155
156

  input:
157
158
    file versions_cellrangerScript
    file versions_bcl2fastqScript
159
    each file(bcl) from bclPaths.collect()
Holly Ruess's avatar
Holly Ruess committed
160
    file design from designPaths
Gervaise Henry's avatar
Gervaise Henry committed
161
162

  output:
163
164
165
    file("fq/${bcl.simpleName}/*.fastq.gz") into fastqPaths
    val "${bcl.simpleName}" into bclName
    file("**/outs/**/*.fastq.gz") into cellrangerCount mode flatten
Gervaise Henry's avatar
Gervaise Henry committed
166
    file("**/outs/fastq_path/Stats/*") into bqcPaths
167
168
    file("version_cellranger.txt") into version_cellranger
    file("version_bcl2fastq.txt") into version_bcl2fastq
Gervaise Henry's avatar
Gervaise Henry committed
169
170

  script:
Holly Ruess's avatar
Holly Ruess committed
171
172
    """
    hostname
173
174
    ulimit -u 16384
    ulimit -a
175
    cellranger mkfastq --id=mkfastq_${bcl.simpleName} --run=${bcl} --csv=${design} --ignore-dual-index ${mask}
176
177
178
179
180
    mkdir fq
    mkdir "fq/${bcl.simpleName}"
    find . -name "*.fastq.gz" -exec cp {} fq/${bcl.simpleName}/ \\;
    bash versions_cellranger.sh > version_cellranger.txt
    bash versions_bcl2fastq.sh > version_bcl2fastq.txt
Holly Ruess's avatar
Holly Ruess committed
181
182
    """

Gervaise Henry's avatar
Gervaise Henry committed
183
}
Gervaise Henry's avatar
Gervaise Henry committed
184

Gervaise Henry's avatar
Gervaise Henry committed
185

186
if (bclCount.value == 1) {
Holly Ruess's avatar
Holly Ruess committed
187

188
  process countDesign {
Holly Ruess's avatar
Holly Ruess committed
189
190

    tag "${name}"
191
    publishDir "${outDir}/${task.process}/${name}", mode: 'copy'
192
193

    input:
Gervaise Henry's avatar
Gervaise Henry committed
194
      file countDesignScript
Holly Ruess's avatar
Holly Ruess committed
195
196
      file fastqs from cellrangerCount.collect()
      file design from designCount
197
198

    output:
Holly Ruess's avatar
Holly Ruess committed
199
      file("Cellranger_Count_Design.csv") into CountDesign
200
201

    script:
Holly Ruess's avatar
Holly Ruess committed
202
      """
203
204
205
      hostname
      ulimit -u 16384
      ulimit -a
Gervaise Henry's avatar
Gervaise Henry committed
206
      bash countDesign.sh
Holly Ruess's avatar
Holly Ruess committed
207
208
      """

209
  }
Holly Ruess's avatar
Holly Ruess committed
210

211
212
}

Gervaise Henry's avatar
Gervaise Henry committed
213

214
process fastqc {
Holly Ruess's avatar
Holly Ruess committed
215

216
  tag "${bcl}"
217
  module 'fastqc/0.11.5:parallel'
218
219

  input:
220
221
222
223
    file fastqcScript    
    file versions_fastqcScript
    file(fastq) from fastqPaths
    each bcl from bclName
224
225

  output:
226
227
    file("*fastqc.zip") into fqcPaths mode flatten
    file("version_fastqc.txt") into version_fastqc
228
229

  script:
Holly Ruess's avatar
Holly Ruess committed
230
231
    """
    hostname
232
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
233
    ulimit -a
234
    find *.fastq.gz -exec mv {} ${bcl}.{} \\;
Gervaise Henry's avatar
Gervaise Henry committed
235
    bash fastqc.sh
236
    bash versions_fastqc.sh > version_fastqc.txt
Holly Ruess's avatar
Holly Ruess committed
237
238
    """

239
240
}

241

242
process versions {
Holly Ruess's avatar
Holly Ruess committed
243
244

  tag "${name}"
245
  module 'python/3.6.1-2-anaconda:cellranger/3.1.0:bcl2fastq/2.19.1:fastqc/0.11.5:pandoc/2.7'
246
247

  input:
248
249
  file versionsScript
  file referencesScript
250
251
  file version_pipeline
  file version_nextflow
252
  file version_python
Gervaise Henry's avatar
Gervaise Henry committed
253
  //file version_pigz
254
255
256
257
  file version_cellranger
  file version_bcl2fastq
  file version_fastqc
  file references
258
259

  output:
Holly Ruess's avatar
Holly Ruess committed
260
    file("*.yaml") into yamlPaths
261
262

  script:
Holly Ruess's avatar
Holly Ruess committed
263
264
    """
    hostname
265
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
266
    ulimit -a
267
268
    python3 generate_versions.py -f version_*.txt -o versions
    python3 generate_references.py -r ${references} -o references
Holly Ruess's avatar
Holly Ruess committed
269
270
    """

271
272
}

Gervaise Henry's avatar
Gervaise Henry committed
273

Gervaise Henry's avatar
Gervaise Henry committed
274
process multiqc {
Holly Ruess's avatar
Holly Ruess committed
275
276
277

  tag "${name}"
  publishDir "${outDir}/${task.process}/${name}", mode: 'copy', pattern: "{multiqc*}"
278
  module 'multiqc/1.7'
Gervaise Henry's avatar
Gervaise Henry committed
279
280

  input:
281
    file multiqcConf
Holly Ruess's avatar
Holly Ruess committed
282
    file bqc name "bqc/?/*" from bqcPaths.collect()
283
    file fqc name "fqc/?/*" from fqcPaths.collect()
Holly Ruess's avatar
Holly Ruess committed
284
    file yamlPaths
Gervaise Henry's avatar
Gervaise Henry committed
285
286

  output:
Holly Ruess's avatar
Holly Ruess committed
287
    file("multiqc_report.html") into mqcPaths
Gervaise Henry's avatar
Gervaise Henry committed
288
289

  script:
Holly Ruess's avatar
Holly Ruess committed
290
291
    """
    hostname
292
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
293
    ulimit -a
294
295
    #export LC_ALL=C.UTF-8
    #export LANG=C.UTF-8
Holly Ruess's avatar
Holly Ruess committed
296
297
298
    multiqc -c ${multiqcConf} .
    """

Gervaise Henry's avatar
Gervaise Henry committed
299
}