Files
demultiplex/src/runner/main.nf

99 lines
3.5 KiB
Plaintext
Raw Normal View History

def date = new Date().format('yyyyMMdd_hhmmss')
def viash_config = java.nio.file.Paths.get("$projectDir/../../../").toAbsolutePath().normalize().toString() + "/_viash.yaml"
def version = get_version(viash_config)
workflow run_wf {
take:
input_ch
main:
output_ch = input_ch
// Extract the ID from the input.
// If the input is a tarball, strip the suffix.
| map{ id, state ->
def id_with_suffix = state.input.getFileName().toString()
[
id,
state + [ run_id: id_with_suffix - ~/\.(tar.gz|tgz|tar)$/ ]
]
}
| demultiplex.run(
fromState: { id, state ->
def state_to_pass = [
"input": state.input,
"run_information": state.run_information,
"demultiplexer": state.demultiplexer,
"skip_copycomplete_check": state.skip_copycomplete_check,
"output": "$id/fastq",
"output_sample_qc": "$id/qc/fastqc",
"multiqc_output": "$id/qc/multiqc_report.html",
"demultiplexer_logs": "$id/demultiplexer_logs",
]
if (state.run_information) {
state_to_pass += ["output_run_information": state.run_information.getName()]
}
state_to_pass
},
toState: { id, result, state ->
state + result
},
)
| publish.run(
fromState: { id, state ->
println(state.plain_output)
def id1 = (state.plain_output) ? id : "${state.run_id}/${date}"
def id2 = (state.plain_output) ? id : "${id1}_demultiplex_${version}"
def fastq_output_1 = (id2 == "run") ? state.fastq_output : "${id2}/" + state.fastq_output
def sample_qc_output_1 = (id2 == "run") ? state.sample_qc_output : "${id2}/" + state.sample_qc_output
def multiqc_output_1 = (id2 == "run") ? state.multiqc_output : "${id2}/" + state.multiqc_output
def run_information_output_1 = (id2 == "run") ? "${state.output_run_information.getName()}" : "${id2}/${state.output_run_information.getName()}"
def demultiplexer_logs_output = (id2 == "run") ? state.demultiplexer_logs : "${id2}/${state.demultiplexer_logs.getName()}"
if (id2 == "run") {
println("Publising to ${params.publish_dir}")
} else {
println("Publising to ${params.publish_dir}/${id2}")
}
[
input: state.output,
input_sample_qc: state.output_sample_qc,
input_multiqc: state.multiqc_output,
input_run_information: state.output_run_information,
input_demultiplexer_logs: state.demultiplexer_logs,
output: fastq_output_1,
output_sample_qc: sample_qc_output_1,
output_multiqc: multiqc_output_1,
output_run_information: run_information_output_1,
output_demultiplexer_logs: demultiplexer_logs_output,
]
},
toState: { id, result, state -> [:] },
directives: [
publishDir: [
path: "${params.publish_dir}",
overwrite: false,
mode: "copy"
]
]
)
emit:
output_ch
}
def get_version(input) {
def inputFile = file(input)
if (!inputFile.exists()) {
// When executing tests
return "unknown_version"
}
def yamlSlurper = new groovy.yaml.YamlSlurper()
def loaded_viash_config = yamlSlurper.parse(inputFile)
def version = (loaded_viash_config.version) ? loaded_viash_config.version : "unknown_version"
println("Version to be used: ${version}")
return version
}