#!/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:v2' 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 ? "M" : (params.gender > 0.5 ? "F" : "B") 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} \ -g ${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) }