#!/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}" : "" """ set +e WORKDIR=\$(pwd) # 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 \${WORKDIR}/run.log JAVA_EXIT=\${PIPESTATUS[0]} # Collect FHIR output back into Nextflow work dir cd \${WORKDIR} mkdir -p fhir if [ -d /app/output/fhir ]; then cp /app/output/fhir/*.json fhir/ 2>/dev/null || true FHIR_COUNT=\$(ls fhir/*.json 2>/dev/null | wc -l) echo "Copied \${FHIR_COUNT} FHIR bundles" | tee -a run.log else echo "Warning: No FHIR output directory found" | tee -a run.log fi # Exit 0 if we got FHIR output, regardless of java exit code if [ -n "\$(ls fhir/*.json 2>/dev/null)" ]; then exit 0 else exit \${JAVA_EXIT} fi """ } // Workflow workflow { generatePatients(params.disease_name) }