Files
htrnaseq/src/workflows/parallel_map_wf/main.nf
CI 1d3c6a62e0 Build branch fix_20 with version fix_20 (7ae6be6)
Build pipeline: viash-hub.htrnaseq.fix-20-jv9qq

Source commit: 7ae6be67bd

Source message: Update CHANGELOG.md
2024-12-18 13:19:28 +00:00

74 lines
2.3 KiB
Plaintext

workflow run_wf {
take:
input_ch
main:
pool_ch = input_ch
| groupWells.run(
fromState: [
"input_r1": "input_r1",
"input_r2": "input_r2",
"well": "barcode",
"pool": "pool",
],
toState: [
"wells": "wells",
"input_r1": "output_r1",
"input_r2": "output_r2",
]
)
| parallel_map.run(
fromState: { id, state ->
[
"input_r1": state.input_r1,
"input_r2": state.input_r2,
"genomeDir": state.genomeDir,
"barcodes": state.wells,
"pool": state.pool,
"wellBarcodesLength": 10,
"umiLength": 10,
"output": state.output,
]
},
toState: ["output": "output"],
directives: ["label": ["highmem", "lowcpu"]],
)
| setState(["output", "pool"])
// input_ch is on pool level, while parallel_map
// outputs multiple events per pool.
// Join the results back to pool level
input_join_ch = input_ch
| map {id, state ->
def newEvent = [state.pool, id, state]
return newEvent
}
output_ch = input_join_ch.combine(pool_ch, by: 0)
| map {pool, well_id, state_well, state_pool ->
def well_output = state_pool.output.findAll{star_output_dir ->
def barcodes_list = []
// Get the barcode from the STAR file.
// One STAR output contains the results for one
// well barcode. We can look for the barcode in
// the 'Solo.out/Gene/raw/barcode.tsv' file.
def barcodes_files = files("${star_output_dir}/Solo.out/Gene/raw/barcodes.tsv")
assert barcodes_files.size() == 1, \
"Exactly one file should have matched the barcodes files (found: $barcodes_files)."
def barcode
barcodes_files.each{ it ->
assert it.countLines() == 1,
"Expected only one barcode in a single STAR output."
barcode = it.text.trim()
}
return barcode == state_well.barcode
}
assert well_output.size() == 1, \
"Two or more outputs from the mapping seemed to have processed barcode '$barcode'."
[well_id, ["output": well_output[0]]]
}
emit:
output_ch
}