- Push as Docker V2 manifest (no OCI index/attestation) so K8s can pull - Tag as v3 to avoid cached image issues - Fix gender: omit -g flag for 0.5 (both), Synthea only accepts M or F
62 lines
1.7 KiB
Plaintext
62 lines
1.7 KiB
Plaintext
#!/usr/bin/env nextflow
|
|
|
|
nextflow.enable.dsl=2
|
|
|
|
// Default parameters
|
|
params.disease_name = null
|
|
params.outdir = null
|
|
params.population = 10
|
|
params.gender = 0.5
|
|
params.min_age = 0
|
|
params.max_age = 90
|
|
params.seed = null
|
|
|
|
// Validate required parameters
|
|
if (!params.disease_name) {
|
|
error "Disease name is required. Please specify with --disease_name"
|
|
}
|
|
|
|
if (!params.outdir) {
|
|
error "Output directory is required. Please specify with --outdir"
|
|
}
|
|
|
|
// Process to generate synthetic patients
|
|
process generatePatients {
|
|
container 'harbor.cluster.omic.ai/omic/synthea-alldiseases:v3'
|
|
publishDir params.outdir, mode: 'copy'
|
|
|
|
input:
|
|
val diseaseName
|
|
|
|
output:
|
|
path "fhir/*.json", optional: true, emit: fhir_output
|
|
path "run.log", emit: log_file
|
|
|
|
script:
|
|
def moduleBasename = diseaseName.toLowerCase().replaceAll(' ', '_')
|
|
def genderArg = params.gender < 0.5 ? "-g M" : (params.gender > 0.5 ? "-g F" : "")
|
|
def seedArg = params.seed ? "-s ${params.seed}" : ""
|
|
"""
|
|
# Use pre-built jar directly (bypasses Gradle which needs write access to .gradle)
|
|
cd /app && java -jar /app/build/libs/synthea-with-dependencies.jar \
|
|
-p ${params.population} \
|
|
${genderArg} \
|
|
-a ${params.min_age}-${params.max_age} \
|
|
${seedArg} 2>&1 | tee run.log
|
|
|
|
# Collect FHIR output
|
|
mkdir -p fhir
|
|
if [ -d /app/output/fhir ]; then
|
|
cp /app/output/fhir/*.json fhir/ 2>/dev/null || true
|
|
echo "Copied \$(ls fhir/*.json 2>/dev/null | wc -l) FHIR bundles" | tee -a run.log
|
|
else
|
|
echo "Warning: No FHIR output generated" | tee -a run.log
|
|
fi
|
|
"""
|
|
}
|
|
|
|
// Workflow
|
|
workflow {
|
|
generatePatients(params.disease_name)
|
|
}
|