import json import os from pathlib import Path import shutil import luigi from engine.utils import ensure_dir class ImageWriter(luigi.Task): artifacts_dir = luigi.Parameter(default="artifacts") def requires(self): from engine.tasks_radiomics import FeatureExtraction return FeatureExtraction(artifacts_dir=self.artifacts_dir) def output(self): return luigi.LocalTarget(os.path.join(self.artifacts_dir, "final_output.json")) def run(self): # Copy Excel file generated by PySERA to artifacts/radiomics3d excel_src = Path(self.artifacts_dir) / "Radiomics_Results.xlsx" if excel_src.exists(): dst_dir = ensure_dir(Path(self.artifacts_dir) / "radiomics3d") excel_dst = dst_dir / "Radiomics_Results.xlsx" shutil.copy2(excel_src, excel_dst) # Load summary JSON from FeatureExtraction with self.requires().output().open("r") as f: summary = json.load(f) # Write final summary JSON with self.output().open("w") as f: json.dump(summary, f, indent=2, ensure_ascii=False)