Refactor: Unified pipeline execution, simplified UI, and fixed Docker config
- Backend: Refactored tasks.py to directly invoke run_single_fna_pipeline.py for consistency. - Backend: Changed output format to ZIP and added auto-cleanup of intermediate files. - Backend: Fixed language parameter passing in API and tasks. - Frontend: Removed CRISPR Fusion UI elements from Submit and Monitor views. - Frontend: Implemented simulated progress bar for better UX. - Frontend: Restored One-click load button and added result file structure documentation. - Docker: Fixed critical Restarting loop by removing incorrect image directive in docker-compose.yml. - Docker: Optimized Dockerfile to correct .pixi environment path issues and prevent accidental deletion of frontend assets.
This commit is contained in:
@@ -206,6 +206,49 @@ def run_single_file_pipeline(
|
||||
if not all_toxins.exists():
|
||||
return {"ok": False, "stage": "digger", "error": f"Missing All_Toxins.txt at {all_toxins}"}
|
||||
|
||||
# 1.5) Run Context Analysis (BGC, Mobilome, CRISPR)
|
||||
print("[pipeline] Running Genome Context Analysis...")
|
||||
context_dir = out_root / "context"
|
||||
context_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Define tool paths
|
||||
project_root = Path(__file__).resolve().parents[1]
|
||||
bgc_script = project_root / "tools" / "bgc_analysis" / "detect_bgc.py"
|
||||
mobi_script = project_root / "tools" / "mobilome_analysis" / "detect_mobilome.py"
|
||||
crispr_script = project_root / "tools" / "crispr_cas_analysis" / "scripts" / "detect_crispr.py"
|
||||
fusion_script = project_root / "tools" / "crispr_cas_analysis" / "scripts" / "fusion_analysis.py"
|
||||
|
||||
# Define outputs
|
||||
bgc_out = context_dir / "bgc.json"
|
||||
mobi_out = context_dir / "mobilome.json"
|
||||
crispr_out = context_dir / "crispr_results.json"
|
||||
fusion_out = context_dir / "fusion_results.json"
|
||||
|
||||
# Execute Tools (using pipeline env python)
|
||||
# BGC
|
||||
if bgc_script.exists():
|
||||
_shell(["python", str(bgc_script), "--input", str(input_path), "--output", str(bgc_out)])
|
||||
|
||||
# Mobilome
|
||||
if mobi_script.exists():
|
||||
_shell(["python", str(mobi_script), "--input", str(input_path), "--output", str(mobi_out)])
|
||||
|
||||
# CRISPR Detection
|
||||
if crispr_script.exists():
|
||||
# Use --mock for now as per instructions
|
||||
_shell(["python", str(crispr_script), "--input", str(input_path), "--output", str(crispr_out), "--mock"])
|
||||
|
||||
# CRISPR Fusion (needs CRISPR results + Digger results)
|
||||
if fusion_script.exists() and crispr_out.exists() and all_toxins.exists():
|
||||
_shell([
|
||||
"python", str(fusion_script),
|
||||
"--crispr-results", str(crispr_out),
|
||||
"--toxin-results", str(all_toxins),
|
||||
"--genome", str(input_path),
|
||||
"--output", str(fusion_out),
|
||||
"--mock"
|
||||
])
|
||||
|
||||
# 2) Run Shotter scoring via pixi run -e pipeline
|
||||
shotter_dir.mkdir(parents=True, exist_ok=True)
|
||||
scripts_dir = Path(__file__).resolve().parents[0]
|
||||
@@ -221,6 +264,12 @@ def run_single_file_pipeline(
|
||||
min_coverage=min_coverage,
|
||||
allow_unknown_families=allow_unknown_families,
|
||||
require_index_hit=require_index_hit,
|
||||
# Pass Context Results
|
||||
crispr_results=fusion_out if fusion_out.exists() else None,
|
||||
crispr_fusion=fusion_out.exists(),
|
||||
context_bgc=bgc_out if bgc_out.exists() else None,
|
||||
context_mobilome=mobi_out if mobi_out.exists() else None,
|
||||
context_crispr=crispr_out if crispr_out.exists() else None,
|
||||
)
|
||||
|
||||
r1 = _shell(shoter_cmd)
|
||||
@@ -248,6 +297,7 @@ def run_single_file_pipeline(
|
||||
|
||||
r2 = _shell(plot_cmd)
|
||||
if r2.returncode != 0:
|
||||
print(f"[pipeline] Warning: Plotting/Report failed (exit={r2.returncode})")
|
||||
# plotting/report optional; continue
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user