main.nf 7.14 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

Gervaise Henry's avatar
Gervaise Henry committed
11
// Define input variables
12
params.name = "run"
13
14
params.bcl = "${baseDir}/../test_data/simple1/*.tar.gz"
params.designFile = "${baseDir}/../test_data/single1/cellranger-tiny-bcl-simple-1_2_0.csv"
15
params.mask = ""
Gervaise Henry's avatar
Gervaise Henry committed
16
params.astrocyte = false
Holly Ruess's avatar
Holly Ruess committed
17
18
params.outDir = "${baseDir}/output"

Gervaise Henry's avatar
Gervaise Henry committed
19
// Define list of files
Gervaise Henry's avatar
Gervaise Henry committed
20
21
tarList = Channel
  .fromPath( params.bcl )
22
bclCount = Channel
Gervaise Henry's avatar
Gervaise Henry committed
23
24
  .fromPath( params.bcl )
  .count()
Gervaise Henry's avatar
Gervaise Henry committed
25
26

// Define regular variables
Gervaise Henry's avatar
Gervaise Henry committed
27
pipelineVersion = "2.x.x-indev"
Gervaise Henry's avatar
Gervaise Henry committed
28
name = params.name
29
30
31
designLocation = Channel
  .fromPath(params.designFile)
  .ifEmpty { exit 1, "design file not found: ${params.designFile}" }
32
mask = params.mask
33
outDir = params.outDir
Gervaise Henry's avatar
Gervaise Henry committed
34

Gervaise Henry's avatar
Gervaise Henry committed
35
36
37
38
39
// 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")
40
41
42
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
43
//versions_pigzScript = Channel.fromPath("$baseDir/scripts/versions_pigz.sh")
44
45
46
47
48
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
49
multiqcConf = Channel.fromPath("${baseDir}/configs/multiqc_config.yaml")
50
51
references = Channel.fromPath("${baseDir}/../docs/references.md")

Gervaise Henry's avatar
Gervaise Henry committed
52

Gervaise Henry's avatar
Gervaise Henry committed
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
/*
 * 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
78
process checkDesignFile {
Holly Ruess's avatar
Holly Ruess committed
79
80

  tag "${name}"
81
  module 'python/3.6.1-2-anaconda'
Gervaise Henry's avatar
Gervaise Henry committed
82
83

  input:
Gervaise Henry's avatar
Gervaise Henry committed
84
    file check_designScript
85
    file versions_pythonScript
Holly Ruess's avatar
Holly Ruess committed
86
    file designLocation
Gervaise Henry's avatar
Gervaise Henry committed
87
88

  output:
Holly Ruess's avatar
Holly Ruess committed
89
90
    file("design.checked.csv") into designPaths
    file("design.checked.csv") into designCount
91
92
    file("version_pipeline.txt") into version_pipeline
    file("version_nextflow.txt") into version_nextflow
93
    file("version_python.txt") into version_python
Gervaise Henry's avatar
Gervaise Henry committed
94
95

  script:
Holly Ruess's avatar
Holly Ruess committed
96
97
    """
    hostname
98
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
99
    ulimit -a
100
101
102
103
    noSpaceDesign=\$(echo "${designLocation}" | tr -d ' ')
    if [[ "\${noSpaceDesign}" != "${designLocation}" ]]; then
      mv "${designLocation}" "\${noSpaceDesign}"
    fi
Gervaise Henry's avatar
Gervaise Henry committed
104
    python3 check_design.py -d \${noSpaceDesign}
105
    bash versions_python.sh > version_python.txt
106
    echo "${workflow.nextflow.version}" > version_nextflow.txt
107
    echo "${pipelineVersion}" > version_pipeline.txt
Holly Ruess's avatar
Holly Ruess committed
108
109
    """

Gervaise Henry's avatar
Gervaise Henry committed
110
}
111
112
113
/* 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
114

115
process untarBCL {  
Holly Ruess's avatar
Holly Ruess committed
116

117
  tag "${tar.simpleName}"
118
  module 'pigz/2.4'
Gervaise Henry's avatar
Gervaise Henry committed
119
120

  input:
Gervaise Henry's avatar
Gervaise Henry committed
121
    file untarBCLScript
Gervaise Henry's avatar
Gervaise Henry committed
122
    //file versions_pigzScript
123
    each file(tar) from tarList
Gervaise Henry's avatar
Gervaise Henry committed
124
125

  output:
126
    file("*[!version_pigz.txt]") into bclPaths mode flatten
Gervaise Henry's avatar
Gervaise Henry committed
127
    //file("version_pigz.txt") into version_pigz
Gervaise Henry's avatar
Gervaise Henry committed
128
129

  script:
Holly Ruess's avatar
Holly Ruess committed
130
131
    """
    hostname
132
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
133
    ulimit -a
134
    bash untarBCL.sh -t ${tar}
Gervaise Henry's avatar
Gervaise Henry committed
135
    #bash versions_pigz.sh > version_pigz.txt
Holly Ruess's avatar
Holly Ruess committed
136
137
    """

Gervaise Henry's avatar
Gervaise Henry committed
138
139
}

Gervaise Henry's avatar
Gervaise Henry committed
140

Gervaise Henry's avatar
Gervaise Henry committed
141
process mkfastq {
Holly Ruess's avatar
Holly Ruess committed
142

143
  tag "${bcl.simpleName}"
Holly Ruess's avatar
Holly Ruess committed
144
  publishDir "${outDir}/${task.process}", mode: 'copy', pattern: "{*/outs/**/*.fastq.gz}"
145
  module 'cellranger/3.1.0:bcl2fastq/2.19.1'
Gervaise Henry's avatar
Gervaise Henry committed
146
147

  input:
148
149
    file versions_cellrangerScript
    file versions_bcl2fastqScript
150
    each file(bcl) from bclPaths.collect()
Holly Ruess's avatar
Holly Ruess committed
151
    file design from designPaths
Gervaise Henry's avatar
Gervaise Henry committed
152
153

  output:
154
155
156
    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
157
    file("**/outs/fastq_path/Stats/*") into bqcPaths
158
159
    file("version_cellranger.txt") into version_cellranger
    file("version_bcl2fastq.txt") into version_bcl2fastq
Gervaise Henry's avatar
Gervaise Henry committed
160
161

  script:
Holly Ruess's avatar
Holly Ruess committed
162
163
    """
    hostname
164
165
    ulimit -u 16384
    ulimit -a
166
    cellranger mkfastq --id=mkfastq_${bcl.simpleName} --run=${bcl} --csv=${design} --ignore-dual-index ${mask}
167
168
169
170
171
    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
172
173
    """

Gervaise Henry's avatar
Gervaise Henry committed
174
}
Gervaise Henry's avatar
Gervaise Henry committed
175

Gervaise Henry's avatar
Gervaise Henry committed
176

177
if (bclCount.value == 1) {
Holly Ruess's avatar
Holly Ruess committed
178

179
  process countDesign {
Holly Ruess's avatar
Holly Ruess committed
180
181

    tag "${name}"
182
    publishDir "${outDir}/${task.process}/${name}", mode: 'copy'
183
184

    input:
Gervaise Henry's avatar
Gervaise Henry committed
185
      file countDesignScript
Holly Ruess's avatar
Holly Ruess committed
186
187
      file fastqs from cellrangerCount.collect()
      file design from designCount
188
189

    output:
Holly Ruess's avatar
Holly Ruess committed
190
      file("Cellranger_Count_Design.csv") into CountDesign
191
192

    script:
Holly Ruess's avatar
Holly Ruess committed
193
      """
194
195
196
      hostname
      ulimit -u 16384
      ulimit -a
Gervaise Henry's avatar
Gervaise Henry committed
197
      bash countDesign.sh
Holly Ruess's avatar
Holly Ruess committed
198
199
      """

200
  }
Holly Ruess's avatar
Holly Ruess committed
201

202
203
}

Gervaise Henry's avatar
Gervaise Henry committed
204

205
process fastqc {
Holly Ruess's avatar
Holly Ruess committed
206

207
  tag "${bcl}"
208
  module 'fastqc/0.11.5:parallel'
209
210

  input:
211
212
213
214
    file fastqcScript    
    file versions_fastqcScript
    file(fastq) from fastqPaths
    each bcl from bclName
215
216

  output:
217
218
    file("*fastqc.zip") into fqcPaths mode flatten
    file("version_fastqc.txt") into version_fastqc
219
220

  script:
Holly Ruess's avatar
Holly Ruess committed
221
222
    """
    hostname
223
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
224
    ulimit -a
225
    find *.fastq.gz -exec mv {} ${bcl}.{} \\;
Gervaise Henry's avatar
Gervaise Henry committed
226
    bash fastqc.sh
227
    bash versions_fastqc.sh > version_fastqc.txt
Holly Ruess's avatar
Holly Ruess committed
228
229
    """

230
231
}

232

233
process versions {
Holly Ruess's avatar
Holly Ruess committed
234
235

  tag "${name}"
236
  module 'python/3.6.1-2-anaconda:cellranger/3.1.0:bcl2fastq/2.19.1:fastqc/0.11.5:pandoc/2.7'
237
238

  input:
239
240
  file versionsScript
  file referencesScript
241
242
  file version_pipeline
  file version_nextflow
243
  file version_python
Gervaise Henry's avatar
Gervaise Henry committed
244
  //file version_pigz
245
246
247
248
  file version_cellranger
  file version_bcl2fastq
  file version_fastqc
  file references
249
250

  output:
Holly Ruess's avatar
Holly Ruess committed
251
    file("*.yaml") into yamlPaths
252
253

  script:
Holly Ruess's avatar
Holly Ruess committed
254
255
    """
    hostname
256
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
257
    ulimit -a
258
259
    python3 generate_versions.py -f version_*.txt -o versions
    python3 generate_references.py -r ${references} -o references
Holly Ruess's avatar
Holly Ruess committed
260
261
    """

262
263
}

Gervaise Henry's avatar
Gervaise Henry committed
264

Gervaise Henry's avatar
Gervaise Henry committed
265
process multiqc {
Holly Ruess's avatar
Holly Ruess committed
266
267
268

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

  input:
272
    file multiqcConf
Holly Ruess's avatar
Holly Ruess committed
273
    file bqc name "bqc/?/*" from bqcPaths.collect()
274
    file fqc name "fqc/?/*" from fqcPaths.collect()
Holly Ruess's avatar
Holly Ruess committed
275
    file yamlPaths
Gervaise Henry's avatar
Gervaise Henry committed
276
277

  output:
Holly Ruess's avatar
Holly Ruess committed
278
    file("multiqc_report.html") into mqcPaths
Gervaise Henry's avatar
Gervaise Henry committed
279
280

  script:
Holly Ruess's avatar
Holly Ruess committed
281
282
    """
    hostname
283
    ulimit -u 16384
Holly Ruess's avatar
Holly Ruess committed
284
    ulimit -a
285
286
    export LC_ALL=C.UTF-8
    export LANG=C.UTF-8
Holly Ruess's avatar
Holly Ruess committed
287
288
289
    multiqc -c ${multiqcConf} .
    """

Gervaise Henry's avatar
Gervaise Henry committed
290
}