|
| 1 | +## VIASH START |
| 2 | +processed_dir <- "resources_test/openproblems/task_results_v4/processed" |
| 3 | + |
| 4 | +par <- list( |
| 5 | + # Inputs |
| 6 | + input_task_info = paste0(processed_dir, "/task_info.json"), |
| 7 | + input_quality_control = paste0(processed_dir, "/quality_control.json"), |
| 8 | + input_metric_info = paste0(processed_dir, "/metric_info.json"), |
| 9 | + input_method_info = paste0(processed_dir, "/method_info.json"), |
| 10 | + input_dataset_info = paste0(processed_dir, "/dataset_info.json"), |
| 11 | + input_results = paste0(processed_dir, "/results.json"), |
| 12 | + # Outputs |
| 13 | + output = "task_results.json" |
| 14 | +) |
| 15 | +## VIASH END |
| 16 | + |
| 17 | +################################################################################ |
| 18 | +# MAIN SCRIPT |
| 19 | +################################################################################ |
| 20 | + |
| 21 | +cat("====== Combine output ======\n") |
| 22 | + |
| 23 | +cat("\n>>> Reading input files...\n") |
| 24 | +cat("Reading task info from '", par$input_task_info, "'...\n", sep = "") |
| 25 | +task_info <- jsonlite::read_json(par$input_task_info) |
| 26 | + |
| 27 | +cat( |
| 28 | + "Reading quality control from '", |
| 29 | + par$input_quality_control, |
| 30 | + "'...\n", |
| 31 | + sep = "" |
| 32 | +) |
| 33 | +quality_control <- jsonlite::read_json(par$input_quality_control) |
| 34 | + |
| 35 | +cat("Reading metric info from '", par$input_metric_info, "'...\n", sep = "") |
| 36 | +metric_info <- jsonlite::read_json(par$input_metric_info) |
| 37 | + |
| 38 | +cat("Reading method info from '", par$input_method_info, "'...\n", sep = "") |
| 39 | +method_info <- jsonlite::read_json(par$input_method_info) |
| 40 | + |
| 41 | +cat("Reading dataset info from '", par$input_dataset_info, "'...\n", sep = "") |
| 42 | +dataset_info <- jsonlite::read_json(par$input_dataset_info) |
| 43 | + |
| 44 | +cat("Reading results from '", par$input_results, "'...\n", sep = "") |
| 45 | +results <- jsonlite::read_json(par$input_results) |
| 46 | + |
| 47 | +cat("\n>>> Combining outputs...\n") |
| 48 | +# Create combined output according to task_results.json |
| 49 | +combined_output <- list( |
| 50 | + task_info = task_info, |
| 51 | + dataset_info = dataset_info, |
| 52 | + method_info = method_info, |
| 53 | + metric_info = metric_info, |
| 54 | + results = results, |
| 55 | + quality_control = quality_control |
| 56 | +) |
| 57 | + |
| 58 | +cat("\n>>> Writing output file...\n") |
| 59 | +cat("Writing combined output to '", par$output, "'...\n", sep = "") |
| 60 | +jsonlite::write_json( |
| 61 | + combined_output, |
| 62 | + par$output, |
| 63 | + pretty = TRUE, |
| 64 | + null = "null", |
| 65 | + na = "null", |
| 66 | + auto_unbox = TRUE |
| 67 | +) |
| 68 | + |
| 69 | +cat("\n>>> Validating output against schema...\n") |
| 70 | +results_schemas <- file.path(meta$resources_dir, "schemas", "results_v4") |
| 71 | +ajv_args <- paste( |
| 72 | + "validate", |
| 73 | + "--spec draft2020", |
| 74 | + "-s", |
| 75 | + file.path(results_schemas, "combined_output.json"), |
| 76 | + "-r", |
| 77 | + file.path(results_schemas, "task_info.json"), |
| 78 | + "-r", |
| 79 | + file.path(results_schemas, "dataset_info.json"), |
| 80 | + "-r", |
| 81 | + file.path(results_schemas, "method_info.json"), |
| 82 | + "-r", |
| 83 | + file.path(results_schemas, "metric_info.json"), |
| 84 | + "-r", |
| 85 | + file.path(results_schemas, "results.json"), |
| 86 | + "-r", |
| 87 | + file.path(results_schemas, "quality_control.json"), |
| 88 | + "-r", |
| 89 | + file.path(results_schemas, "core.json"), |
| 90 | + "-d", |
| 91 | + par$output |
| 92 | +) |
| 93 | + |
| 94 | +cat("Running validation command:", "ajv", ajv_args, "\n") |
| 95 | +cat("Output:\n") |
| 96 | +validation_result <- system2("ajv", ajv_args) |
| 97 | + |
| 98 | +if (validation_result == 0) { |
| 99 | + cat("JSON validation passed successfully!\n") |
| 100 | +} else { |
| 101 | + cat("JSON validation failed!\n") |
| 102 | + stop("Output JSON does not conform to schema") |
| 103 | +} |
| 104 | + |
| 105 | +cat("\n>>> Done!\n") |
0 commit comments