Skip to content

Latest commit

 

History

61 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TÜBİTAK



███████╗████████╗██╗███╗   ██╗ ██████╗     ██████╗ ███████╗███████╗
██╔════╝╚══██╔══╝██║████╗  ██║██╔════╝     ██╔══██╗██╔════╝██╔════╝
███████╗   ██║   ██║██╔██╗ ██║██║  ███╗    ██║  ██║███████╗███████╗
╚════██║   ██║   ██║██║╚██╗██║██║   ██║    ██║  ██║╚════██║╚════██║
███████║   ██║   ██║██║ ╚████║╚██████╔╝    ██████╔╝███████║███████║
╚══════╝   ╚═╝   ╚═╝╚═╝  ╚═══╝ ╚═════╝     ╚═════╝ ╚══════╝╚══════╝

Drug Repositioning and Synthetic Patient Treatment Decision Support System

for Childhood Acute Lymphoblastic Leukemia

Digital Twin-Oriented Deep Learning · TÜBİTAK 1001 · Project No: 123E383

Live · Documentation · Publications & Data · PI's GitHub · Team


What is STING DSS?

STING DSS is a full-stack clinical research platform that integrates five AI/ML methodologies into a single, sequential decision-support pipeline for pediatric ALL. Starting from raw drug–protein interaction data, the system guides a researcher step-by-step through repurposing candidate identification, patient-specific ODE simulation, genetic algorithm dose optimisation, graph neural network prediction, and population-level synthetic cohort analysis — all in a browser, with no local installation.

Research context: Two repositioned candidates — Copanlisib (PI3Kδ inhibitor, −207.11 kcal/mol against Lamin A/C) and Novobiocin (HSP90 inhibitor) — are pre-integrated throughout the pipeline and were selected from a prediction run over 314,531 ligand–protein pairs drawn from DrugBank, ChEMBL, PubChem, and KIBA.


Screenshots

Login · Bilingual · Light & Dark Login screen

Tab 1 · Drug Repositioning (Bi-LSTM) Tab 1 — Drug Repositioning

Tab 2 · Patient & Treatment Setup Tab 2 — Patient and Treatment Setup

Tab 3 · 250-Day ODE Trajectory Tab 3 — ODE Simulation trajectory chart

Tab 4 · GA Optimal Dose Plan Tab 4 — GA Dose Plan chart

Tab 5 · SHAP XAI Explanations Tab 5 — SHAP feature attributions

Tab 6 · 200 Synthetic Patients (5-Class Risk) Tab 6 — Synthetic patient cohort grid

Patient Card · Intermediate Risk (IR) Patient detail card — IR class

Patient Card · High Risk (HR) with Adverse Genetics Patient detail card — HR class

Patient Card · MRD, PI Advisory & Treatment Protocol Patient detail card — MRD and protocol sections


Pipeline Overview

  ┌─────────────────────────────────────────────────────────────────────────┐
  │                         STING DSS Pipeline                             │
  └─────────────────────────────────────────────────────────────────────────┘

  Tab 1 · Drug Repositioning          Tab 2 · Patient & Treatment Setup
  ┌──────────────────────────┐         ┌──────────────────────────────────┐
  │  Bi-LSTM (2-layer + L2)  │         │  Protocol: COG AALL0331          │
  │  314,531 ligand–protein  │─ top ──▶│           BFM ALL-2009           │
  │  pairs (DrugBank et al.) │ hits    │           Custom (6 phases)      │
  │  PandaDock validation    │         │  Patient: weight, BSA, TPMT,     │
  │  XAI: IntGrad + LIME     │         │  Vit-D, WBC₀, ANC₀, lifestyle   │
  └──────────────────────────┘         └─────────────────┬────────────────┘
                                                          │ parameters
                                                          ▼
  Tab 3 · ODE Simulation              Tab 4 · GA Dose Optimisation
  ┌──────────────────────────┐         ┌──────────────────────────────────┐
  │  TenDrugALLModel         │         │  Genetic Algorithm               │
  │  10 drugs · 4 phases     │─ ±10% ─▶│  Pop: 80 · Generations: 200     │
  │  48-dim state vector     │ sens.   │  4 objectives:                   │
  │  RK45 solver · 250 days  │         │    BRR d8 ≥ 80%                  │
  │  Sensitivity Analysis    │         │    EOI MRD < 0.01                │
  └──────────────────────────┘         │    VIPN ≥ 0.78                   │
                                        │    Cum. DNR < 300 mg/m²         │
                                        └─────────────────┬────────────────┘
                                                          │ optimal plan
                                                          ▼
  Tab 5 · GNN Digital Twin            Tab 6 · Synthetic Cohort (GAN)
  ┌──────────────────────────┐         ┌──────────────────────────────────┐
  │  GCNConv×2 (h=256)       │         │  CTGAN (clean-schema)            │
  │  8 output targets        │         │  30 static features              │
  │  R² median: 0.991        │         │  Post-hoc: MRD, risk, PI, prog.  │
  │  XAI:                    │         │  5-class risk stratification:    │
  │    SHAP KernelExplainer  │         │    LR / SR / IR / HR / VHR       │
  │    Permutation           │         │  COP+NOV repositioning scenario  │
  │    GEMEX v1.2.2          │         │    Lt final → 0.0000 (n=20)      │
  │    Counterfactual        │         │    WBC min +17.5%                │
  └──────────────────────────┘         │    VIPN min +10.5%               │
                                        └──────────────────────────────────┘

Key Results

Module Metric Value
Bi-LSTM prediction Top candidate binding energy −207.11 kcal/mol (Copanlisib · P02545)
ODE simulation Sensitivity — Vitamin D impact on WBC min 48.1%
GA optimisation BRR d8 (protoype patient) 99.64%
GA optimisation EOI MRD 3.3 × 10⁻⁵
GNN digital twin Median R² (8 targets) 0.991
GNN digital twin In-distribution rate 87% (131/150)
CTGAN MIA AUC (membership inference) 0.530 (≈ random → privacy preserved)
CTGAN Clinical violation rate 0%
CTGAN VHR–genetics concordance 100%
COP+NOV scenario Lt final (cohort, n=20) 0.0000 (full elimination)
COP+NOV scenario WBC min improvement +17.5%
COP+NOV scenario VIPN min improvement +10.5%
COP+NOV scenario GNN validation pass rate 20/20 ✓

Tech Stack

Backend                     Frontend                   Infrastructure
─────────────────────────   ────────────────────────   ─────────────────────
FastAPI 0.110               React 18 + Vite            Docker Compose
Python 3.10+                Recharts                   Nginx (reverse proxy)
PyTorch (GNN v2)            D3.js                      Redis + Celery
SDV / CTGAN                 Tailwind CSS               JWT authentication
SciPy (RK45 ODE)            i18n (TR / EN)             bcrypt + slowapi
SHAP + GEMEX v1.2.2         Light / Dark themes        Rate limiting
scikit-learn                                           Production: Ubuntu 24

Repository Structure

STING_DSS/
├── backend/
│   ├── app/
│   │   ├── api/
│   │   │   ├── router.py
│   │   │   └── endpoints/
│   │   │       ├── auth.py                      # JWT authentication
│   │   │       ├── admin.py                     # User management, activity logs, surveys
│   │   │       ├── repurposing.py               # Tab 1 — Bi-LSTM inference & docking
│   │   │       ├── training.py                  # Tab 1 — Model training
│   │   │       ├── ode.py                       # Tab 3 — ODE simulation
│   │   │       ├── ode_sensitivity.py           # Tab 3 — Sensitivity analysis
│   │   │       ├── pipeline.py                  # Tab 3 — Pipeline orchestration
│   │   │       ├── ga_optimization.py           # Tab 4 — GA dose optimisation
│   │   │       ├── gnn_v2_endpoint.py           # Tab 5 — GNN v2 prediction
│   │   │       ├── gnn_xai.py                   # Tab 5 — SHAP / GEMEX / Counterfactual / Permutation
│   │   │       ├── gan_v2_endpoint.py           # Tab 6 — Synthetic patient generation & COP+NOV scenario
│   │   │       └── gan_v2_train_endpoint.py     # Tab 6 — GAN training pipeline
│   │   ├── core/
│   │   │   ├── config.py                        # App settings & environment variables
│   │   │   ├── database.py                      # SQLite user/session store
│   │   │   └── security.py                      # JWT auth, bcrypt, rate limiting
│   │   ├── modules/
│   │   │   ├── repurposing/
│   │   │   │   ├── bilstm_model.py              # Bi-LSTM architecture (2-layer + L2)
│   │   │   │   ├── bilstm_trainer.py            # Training loop & HPO
│   │   │   │   ├── data_loader.py               # DrugBank / ChEMBL / PubChem / KIBA loader
│   │   │   │   └── xai_explainer.py             # Integrated Gradients + LIME
│   │   │   ├── ode/
│   │   │   │   ├── all_drugs.py                 # Drug parameter definitions (10 drugs)
│   │   │   │   ├── equations_daily.py           # Daily ODE equations
│   │   │   │   ├── full_drug_engine.py          # TenDrugALLModel — 48-dim state vector, RK45
│   │   │   │   ├── full_drug_adapter.py         # Protocol → ODE parameter adapter
│   │   │   │   ├── full_drug_ga.py              # GA fitness function (ODE-coupled)
│   │   │   │   ├── genetic_algorithms.py        # GA core (pop=80, gen=200)
│   │   │   │   ├── ode_simulator.py             # ODE runner & sensitivity analysis
│   │   │   │   ├── peg_simulator.py             # PEG-Asparaginase depletion model
│   │   │   │   ├── runner_triple.py             # Multi-phase ODE orchestration
│   │   │   │   └── plot_functions.py            # Trajectory chart data builders
│   │   │   ├── gnn/
│   │   │   │   ├── gnn_v2_model.py              # GCNConv×2 (h=256, dropout=0.2), 8 targets
│   │   │   │   ├── gnn_dataset_v2.py            # Heterogeneous patient graph, k=3 lag
│   │   │   │   └── training_pool.py             # GA pool → GNN training dataset
│   │   │   └── gan_v2/
│   │   │       ├── ctgan_base.py                # CTGAN clean-schema wrapper
│   │   │       ├── drug10_config.py             # 10-drug GAN feature schema
│   │   │       ├── clinical_enrichment.py       # Post-hoc MRD / PI / prognosis pipeline
│   │   │       ├── risk_stratification.py       # 5-class unified risk ontology (LR→VHR)
│   │   │       ├── risk_covariate_augmentation.py  # GA pool → GAN training pool
│   │   │       ├── posthoc_ode.py               # COP+NOV ODE repositioning scenario
│   │   │       ├── consistency_rules.py         # Clinical constraint enforcement
│   │   │       ├── reference_lookup.py          # Post-hoc reference CSV lookups
│   │   │       └── gan_pool.py                  # GAN training pool management
│   │   ├── schemas/
│   │   │   └── user.py                          # Pydantic user schemas
│   │   ├── main.py                              # FastAPI app entry point
│   │   └── worker.py                            # Celery async task worker
│   ├── data/
│   │   ├── models/
│   │   │   ├── alldrugs_gnn_scaler.json         # ✅ included — GNN normalisation params
│   │   │   ├── trained_alldrugs_gnn_model.pth   # ⛔ not included — request access
│   │   │   ├── bilstm_l2_bilstm_l2_hpoo.h5     # ⛔ not included — request access
│   │   │   ├── ctgan_drug10.pkl                 # ⛔ not included — request access
│   │   │   └── synthetic_drug10.csv             # ⛔ not included — request access
│   │   ├── ga_results/                          # ⛔ runtime data — not included
│   │   ├── gnn_training_pool/                   # ⛔ runtime data — not included
│   │   ├── gan_training_pool/                   # ⛔ runtime data — not included
│   │   ├── gan_v2_results/                      # ⛔ runtime data — not included
│   │   └── ode_results/                         # ⛔ runtime data — not included
│   ├── requirements.txt
│   ├── Dockerfile
│   └── .env.example
├── frontend/
│   ├── src/
│   │   ├── components/
│   │   │   ├── tabs/
│   │   │   │   ├── Tab1Repurposing.jsx
│   │   │   │   ├── Tab2Parameters.jsx
│   │   │   │   ├── Tab3ODE.jsx
│   │   │   │   ├── Tab4GA.jsx
│   │   │   │   ├── Tab5GNN.jsx
│   │   │   │   ├── Tab6GAN.jsx
│   │   │   │   └── TabAdmin.jsx
│   │   │   └── ui/
│   │   │       ├── AboutModal.jsx
│   │   │       ├── DockingPanel.jsx
│   │   │       ├── HowToUse.jsx
│   │   │       ├── ModelStatusPanel.jsx
│   │   │       ├── SurveyModal.jsx
│   │   │       ├── TrainingPanel.jsx
│   │   │       └── WizardGuide.jsx
│   │   ├── i18n/
│   │   │   ├── translations.js                  # TR / EN bilingual strings
│   │   │   └── LangContext.jsx
│   │   ├── services/
│   │   │   └── api.js                           # Axios API client
│   │   ├── hooks/
│   │   │   └── useProject.js                    # Session management hook
│   │   ├── constants/
│   │   │   └── drugConfig.js                    # Drug parameter constants
│   │   ├── App.jsx
│   │   └── main.jsx
│   ├── public/
│   │   └── logo.jpg
│   ├── nginx.conf
│   ├── Dockerfile
│   ├── index.html
│   ├── package.json
│   ├── vite.config.js
│   └── tailwind.config.js
├── docker/
│   └── docker-compose.yml                       # Development
├── scripts/
│   └── save_tokenizers.py                       # Tokenizer export utility
├── docs/
│   ├── images/                                  # README screenshots
│   ├── user_guide_en.pdf
│   └── user_guide_tr.pdf
├── .gitignore
├── LICENSE                                      # Apache 2.0
└── README.md

Quick Start

Prerequisites

  • Docker ≥ 24 and Docker Compose ≥ 2.20
  • 16 GB RAM recommended (32 GB for GAN training)
  • Pre-trained model files (see Model Files)

1. Clone and configure

git clone https://github.com/tubitaksting/STING-DSS.git
cd STING_DSS

# Copy and edit the environment file
cp backend/.env.example backend/.env
# → Set SECRET_KEY (32-byte hex), ALLOWED_ORIGINS, and FIRST_ADMIN_PASSWORD

2. Place model files

# Required files in backend/data/models/
backend/data/models/
├── bilstm_model.h5                    # Bi-LSTM drug repositioning model
├── trained_alldrugs_gnn_model.pth     # GNN v2 digital twin
├── alldrugs_gnn_scaler.json           # GNN feature scaler
├── ctgan_drug10.pkl                   # Pre-trained CTGAN model
└── synthetic_drug10.csv               # Reference cohort CSV

Model files are not included in this repository. Contact the PI if you want to use them.

3. Launch

# Development
cd docker
docker compose up --build

# Production (with rate limiting, closed API docs, nginx hardening)
docker compose -f docker-compose.prod.yml up --build -d

The frontend is available at http://localhost:8091 and the backend API at http://localhost:8092.

4. First login

The system creates a default admin account on first startup using FIRST_ADMIN_PASSWORD from .env. Log in, then create additional users from the Admin Panel.


The Five-Layer Methodology

Layer 1 — Bi-LSTM Drug Repositioning (Tab 1)

A two-layer Bi-LSTM network with L2 regularisation, selected after benchmarking five architectures on drug–target interaction data for ALL. Input: SMILES strings (ligands) + protein sequences. Output: ranked binding affinity scores. Top candidates are validated with PandaDock (MM-GBSA-inspired) molecular docking. XAI via Integrated Gradients and LIME highlights which SMILES sub-structures drive each prediction.

Layer 2 — ODE Pharmacokinetic/Pharmacodynamic Simulation (Tab 3)

TenDrugALLModel encodes 10 drugs (6-MP, MTX, VCR, DNR, PEG-ASP, CS, Ara-C, CPM, 6-TG, COP/NOV) across 4 treatment phases in a 48-dimensional state vector. The RK45 adaptive solver integrates over 250 days. Patient-specific variables include BSA, TPMT genotype, Vitamin D, diet/exercise scores, initial WBC/ANC, and infection status. A built-in sensitivity analysis perturbs each parameter ±10% to rank clinical impact.

Layer 3 — Multi-Objective Genetic Algorithm Dose Optimisation (Tab 4)

A GA (population 80, generations 200, tournament selection, uniform crossover) simultaneously optimises four clinical objectives: BRR d8 ≥ 80%, EOI MRD < 0.01, VIPN ≥ 0.78, and cumulative DNR < 300 mg/m². Each candidate solution is evaluated by running the full ODE simulation. A dose contribution analysis shows, per drug, where the optimal dose sits within the search range — a model-agnostic explanation of GA behaviour.

Layer 4 — GNN Digital Twin + XAI (Tab 5)

A two-layer GCNConv network (hidden = 256, dropout = 0.2) trained on GA pool records. The heterogeneous patient graph encodes time-lagged features (k=3 lag). The model predicts 8 ODE outputs in real time as an ODE surrogate (median R² = 0.991). Four XAI methods are integrated:

Method Approach Computation
SHAP KernelExplainer Shapley value attribution ~30s
Permutation Importance Feature shuffling ~60s
GEMEX v1.2.2 Geodesic Sensitivity Field on Riemannian manifold ~20s
Counterfactual Greedy coordinate search toward clinical targets ~20s

GEMEX is a library developed within this project (pip install gemex). It captures non-linear feature interactions via geodesic arc length and manifold curvature (κ) that SHAP's linear assumption misses.

Layer 5 — CTGAN Synthetic Patient Generation (Tab 6)

A clean-schema CTGAN trains on 30 static patient features only — no derived risk labels, MRD, or prognosis. Post-hoc calculation chains (risk stratification, PI Advisory, MRD, prognosis) are applied after generation. This architecture eliminates label leakage (GAN-label concordance = 0.41%) and mode collapse, while preserving realistic distributional properties (MMD = 0.069, MIA AUC = 0.530, clinical violation rate = 0%).

The 5-class unified risk ontology (LR / SR / IR / HR / VHR) harmonises NCI, COG, BFM, and SJCRH criteria into a single consistent framework published in:

Köse, U., Ceylan, O., & Sürücü, E. B. (2026). A Unified Prognostic Data Architecture for Risk Stratification in Pediatric Acute Lymphoblastic Leukemia. 4th Cognitive Models and AI Conference (IEEE AICCONF), Prague.

The COP+NOV repositioning scenario re-runs the ODE for every generated patient with Copanlisib and Novobiocin added, providing cohort-level pharmacodynamic evidence for the two repositioned drugs entirely through the mechanistic ODE layer — not GAN interpolation.


Security

The production deployment includes:

  • JWT tokens with configurable expiry
  • bcrypt password hashing (cost factor 12)
  • slowapi rate limiting: 200 req/min global, 10 req/min on /auth/token
  • API documentation endpoints (/docs, /redoc, /openapi.json) disabled in production
  • Nginx upload limit and proxy timeout hardening
  • Environment-variable-based secret management (no hardcoded credentials)

Configuration

Key environment variables in backend/.env:

SECRET_KEY=<32-byte-hex>                  # JWT signing key
ALLOWED_ORIGINS=http://your-server:8091   # CORS whitelist
FIRST_ADMIN_PASSWORD=<strong-password>    # Initial admin account
DATA_DIR=/app/data                        # Model and results directory

Model Files

File Description Size (approx.)
bilstm_model.h5 Bi-LSTM drug repositioning ~45 MB
trained_alldrugs_gnn_model.pth GNN v2 digital twin ~12 MB
alldrugs_gnn_scaler.json GNN feature normalisation < 1 MB
ctgan_drug10.pkl CTGAN generative model ~8 MB
synthetic_drug10.csv Reference cohort (500 patients) ~2 MB

Documentation

Document Language Description
docs/user_guide_en.pdf English Full user guide with step-by-step screenshots
docs/user_guide_tr.pdf Turkish Türkçe kullanım kılavuzu

API Reference (Selected Endpoints)

POST /api/v1/auth/token              Login → JWT
GET  /api/v1/ode/simulate            Run ODE simulation
POST /api/v1/ga/run                  Start GA optimisation
GET  /api/v1/ga/results              List GA pool records
POST /api/v1/gnn/v2/predict          GNN prediction
POST /api/v1/gnn/xai/shap            SHAP analysis
POST /api/v1/gnn/xai/gemex           GEMEX analysis
POST /api/v1/gnn/xai/counterfactual  Counterfactual XAI
POST /api/v1/gan/v2/generate         Generate synthetic patients
POST /api/v1/gan/v2/train/start      Start GAN training
GET  /api/v1/gan/v2/repo_scenario    Run COP+NOV scenario
POST /api/v1/admin/users             User management (admin only)

Full API documentation is available when running in development mode at http://localhost:8092/docs.


Citing This Work

For an up-to-date list of publications, datasets, and other citable outputs associated with this project, please visit:

https://sting.sdu.edu.tr

New outputs (publications, datasets) are regularly added. The project website is the authoritative source for citation information and data access requests.


Team

Name Role Affiliation Links
Prof. Dr. Utku Köse Principal Investigator / Developer Süleyman Demirel University, Turkey / University of North Dakota, USA / VelTech, India / Universidad Panamericana, Mexico GitHub · Web · ORCID
Prof. Dr. Gözde Özkan Tükel Researcher / Developer Süleyman Demirel University, Turkey
Assist. Prof. Dr. İlhan Uysal Researcher / Developer Burdur Mehmet Akif Ersoy University, Turkey
Lect. Osman Ceylan Researcher / Developer Isparta Applied Sciences University, Turkey
Lect. Emine Betül Sürücü Researcher / Developer Süleyman Demirel University, Turkey

Funding

This work was supported by the Scientific and Technological Research Council of Turkey (TÜBİTAK) under the 1001 — Scientific and Technological Research Projects Funding Program, Project No: 123E383 (2023–2026).


Disclaimer

STING DSS is a research prototype. Synthetic patients and simulation outputs have not been validated against real clinical outcome data. The system must not be used as a clinical decision-making tool. All clinical decisions must be made under the supervision of a qualified oncologist.


License

This project is licensed under the Apache License 2.0. See LICENSE for details.


STING DSS · TÜBİTAK 1001 · Project No: 123E383 · Süleyman Demirel University · 2026

github.com/tubitaksting · sting.sdu.edu.tr

Advancing pediatric leukemia research through digital twin-oriented deep learning.