Files
Radiuma_RnD/Dagster/Dagster_Op/app/engine/dagster_runner.py
T
2026-02-08 04:38:10 +03:30

80 lines
2.4 KiB
Python

import os
import pysera
from app.engine import radiuma_assets
from app.engine.dagster_builder import radiuma_job
from dagster import materialize, FilesystemIOManager
# Main workflow runner for Radiuma using PySERA and Dagster
def run_workflow():
# Define input image and mask paths
image_path = os.path.normpath("data/images/CT_pitch.nii.gz")
mask_path = os.path.normpath("data/masks/CT_pitch_mask.nii.gz")
output_dir = os.path.normpath("./results")
# Run PySERA radiomics workflow
# Changed dimensions from "3d" to "1st,2D"
result = pysera.process_batch(
image_input=image_path,
mask_input=mask_path,
output_path=output_dir,
categories="all",
dimensions="1st,2D", # <-- only change applied here
apply_preprocessing=True,
)
print("✅ PySERA workflow finished." if result.get("success") else "❌ PySERA workflow failed.")
def run_pipeline():
# Run Dagster job with sample configuration
result = radiuma_job.execute_in_process(
run_config={
"ops": {
"load_image": {"inputs": {"filename": {"value": "CT_pitch.nii.gz"}}},
"load_mask": {"inputs": {"filename": {"value": "CT_pitch_mask.nii.gz"}}},
}
}
)
print("✅ Dagster job finished.")
print(result)
def run_assets():
# Ensure artifacts directory exists
base_dir = os.path.normpath("app/storage/artifacts")
os.makedirs(base_dir, exist_ok=True)
# Use FilesystemIOManager for asset storage
io_manager = FilesystemIOManager(base_dir=base_dir)
# Materialize all assets defined in radiuma_assets
result = materialize(
[
radiuma_assets.raw_image,
radiuma_assets.raw_mask,
radiuma_assets.registered_image,
radiuma_assets.fused_image,
radiuma_assets.features,
],
resources={"io_manager": io_manager},
)
if result.success:
print("✅ Assets materialized successfully.")
print(f"Storage base_dir: {base_dir}")
# Print all materialized asset keys
for event in result.get_asset_materialization_events():
print(f"Asset built: {event.asset_key}")
else:
print("❌ Asset execution failed.")
print(result)
if __name__ == "__main__":
print("🚀 Starting Radiuma unified run...\n")
run_workflow()
run_pipeline()
run_assets()
print("\n🎯 All workflows completed in one run.")