Biomedical AI platform for genomic subtype discovery and classification. Developed by KBU-MedLab.
HealthPython · JavaScriptGitHub @abdullaaskar34-techOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
HELIXA — Turning Genomics into Decisions. Biomedical AI platform for glioblastoma molecular subtyping. KBU-MedLab.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
HELIXA is a biomedical AI platform for glioblastoma molecular subtyping and biomarker
discovery. It takes raw TCGA/GDC RNA-seq data, removes the technical artefacts that would
otherwise corrupt the result, discovers molecular subtypes, classifies new patients against
those subtypes, validates every conclusion against independent published literature — and,
for each subtype, surfaces the genes that both mark it in real patients and that a
glioblastoma cell cannot survive without, checked one at a time against the published
literature and tiered by how actionable they actually are.Read the full README ↗KBU-MedLab · TEKNOFEST Oncology 3T Competition
HELIXA is a biomedical AI platform for glioblastoma molecular subtyping and biomarker discovery. It takes raw TCGA/GDC RNA-seq data, removes the technical artefacts that would otherwise corrupt the result, discovers molecular subtypes, classifies new patients against those subtypes, validates every conclusion against independent published literature — and, for each subtype, surfaces the genes that both mark it in real patients and that a glioblastoma cell cannot survive without, checked one at a time against the published literature and tiered by how actionable they actually are.
It is a working system, not a mock-up. Every number the web interface displays is read from a file produced by the analysis pipeline in this repository, and the "Analyze Patient" workflow runs the actual frozen model. When a patient is classified, the site now also shows the biomarker/drug-target panel for the predicted subtype, and a one-click, self-contained Patient Molecular Report (logo, classification, biomarkers, technical appendix) that the browser turns into a PDF with no server involved.
Cohort: 328 glioblastoma patients · Subtypes discovered: 6 · Classifier: 97.9% leave-one-out agreement across all 328 patients, with calibrated subtype-stability probabilities · Biomarker candidates: 61 literature-checked genes across the 6 subtypes, 17 of them tier-1 actionable.
Raw GDC RNA-seq (60,660 gene loci)
↓ 01 Data ingestion
Expression matrix (log2 TPM+1)
↓ 02 QC / low-expression filter → 27,777 genes
↓ 03 Protocol detection + batch correction → 25,738 genes, batch signal 11.07 → 0.0000
↓ 04 Feature selection (MAD) → 1,000 signature genes
↓ 05 Dimensionality reduction (PCA) → 5 components
↓ 06 Consensus clustering (1,000 resamples) → k = 6, PAC = 0.2105
↓ 07 Classification (multinomial logistic regression)
↓ 08 Confidence & uncertainty → core / boundary
↓ 09 Biological validation → 4 independent published sources
Subtype · confidence · markers · pathway profile · therapeutic context
↓ 10 Biomarker discovery (independent second pipeline, see below)
Per-subtype drug-target panel · tiered by literature evidence · with sources
The strongest signal in the uncorrected cohort was not tumour biology — it was library preparation protocol. Two protocols were mixed: poly(A)-selected libraries contained 0.42% non-polyadenylated RNA, total-RNA libraries contained 55.45% — a 170× difference, and a single threshold separated them with 100% accuracy.
Left uncorrected, the pipeline would have "discovered" the sequencing protocol and presented it as a molecular subtype. A three-layer correction (gene-space filter → re-normalisation → within-batch standardisation) removes it to a residual ARI of -0.0044.
| # | Subtype | n | Verhaak identity | Independent verdict |
|---|---|---|---|---|
| 0 | MTC — Mitochondrial / OXPHOS | 40 | Mixed (Neural-leaning) | Confirmed (moderate) · 2.15× |
| 1 | PN — Proneural / Progenitor | 49 | Proneural-like | Confirmed (strong) · 2.69× |
| 2 | CL — Classical / EGFR | 65 | Classical-like | Partially supported · 1.96× |
| 3 | MES — Mesenchymal / Immune | 63 | Mesenchymal-like | Confirmed (strong) · 2.84× |
| 4 | INT — Intermediate / Mixed | 67 | Mixed | Partially supported · 1.36× |
| 5 | OLIGO — Oligodendrocytic / Myelin | 44 | Mixed (Proneural-leaning) | Confirmed (strong) · 2.32× |
cluster_0 (MTC) independently matches the mitochondrial subtype published in Nature Cancer 2021 at 72.5% (2.9× chance, p = 2.7 × 10⁻¹¹) — a subtype reported to carry the most favourable prognosis and selective vulnerability to OXPHOS inhibitors.
Classifying a patient answers "which subtype is this?" A second, independent pipeline — the HELIXA biomarker engine — answers the question a classifier cannot: for this subtype, what could actually be drugged, and how sure are we?
It is deliberately built to avoid the mistake an earlier attempt made: taking a subtype's marker genes and asking a dependency database "is this gene essential?" without checking essential compared to what. That approach returned ten genes — mostly RNA-polymerase subunits and ribosomal proteins that every human cell needs equally — and left one subtype (MTC) with nothing at all.
The three gates a gene has to pass, in order:
Final tiers, shown on the site and in every patient report:
| Tier | Meaning |
|---|---|
| Tier 1 · Actionable | passes both data gates, published support, a drug against it already exists (possibly for another cancer) |
| Tier 2 · Credible | passes both data gates, published support, nothing built against it yet |
| Tier 3 · Hypothesis | passes both data gates, but the literature is thin — a real finding, unproven |
| Excluded | the gene is a tumour suppressor, or its biology otherwise points the wrong way |
Result: 359 genes pass both statistical gates; 61 of the strongest were checked against the literature; 17 are tier-1 actionable, 18 tier-2 credible, 21 tier-3 hypotheses, and 5 were excluded. Two of the tier-1 targets already have drugs approved in other cancers (FGFR1 → pemigatinib, PTK2 → defactinib); two others already failed glioblastoma trials (ITGB5 → cilengitide, phase III CENTRIC; CDK6 → palbociclib, terminated for futility) — that failure is recorded on the same row rather than left out.
The full six-stage pipeline — patient-side differential expression, DepMap dependency
screening, intersection & scoring, literature evidence collection, evidence integration, and
the reporting figures — with every intermediate table and every literature source, lives in
BIOMARKER_ENGINE/ in this repository. EXPLANATION_STEP_BY_STEP.txt
there is the narrative walkthrough; 05_Tables/final_targets.csv is the exact file the
website's data/biomarkers.json (and every biomarker table on the site) is generated from.
On the site: after a patient is classified, a "Biomarkers & drug targets for <subtype>"
panel appears automatically underneath the result, and a Download / Print Patient Report
button generates a self-contained report (see below) for that patient and subtype.
Same caveat as the classifier, stated plainly: these are computational candidates from an unpublished research pipeline, not treatments. Nothing on this list has been tested in a laboratory by this project. The dependency evidence comes from cell lines, not patients — cell lines lack an immune system, a blood-brain barrier and a tumour microenvironment, which is a specific reason the MES (immune-infiltrated) panel may be understated.
Every classified patient can be turned into a one-click, fully self-contained report — the HELIXA logo, the patient/sample label, the predicted subtype and confidence, all six probabilities, the genes that drove the decision, and the full biomarker/drug-target table for that subtype, with a plain disclaimer that this is a research prototype and not a diagnosis.
There is no PDF library and no server involved: Download / Print Patient Report opens the
report as a normal page in a new browser tab (website/frontend/js/report.js), built from
the exact same result object the on-page card already rendered and the exact same
data/biomarkers.json dataset, so the report can never disagree with what the page showed.
The tab's own "Print / Save as PDF" button (or the browser's native Ctrl/Cmd + P) hands the
page to the browser's print engine, which is how the patient/clinician saves it as a PDF —
the same mechanism a normal web page uses to become a PDF, with no upload and no third-party
service anywhere in the path.
The classifier was rebuilt in September 2026. Version 2 is trained on all 328
patients against the consensus profile — the fraction of 1,000 resampled
clusterings in which a tumour co-clusters with each subtype — rather than on the
273 clean patients against hard labels. See
prediction_model/ for the full write-up.
| Metric | Value |
|---|---|
| Leave-one-out agreement, all 328 patients | 97.87% |
| on CORE (n = 273) | 99.63% |
| on BOUNDARY (n = 55) | 89.09% |
| Agreement with the consensus profile (out-of-sample, 328 × 6 cells) | r = 0.9656 |
| Profile RMSE | 0.0766 |
| Mean absolute error on the reported percentage | ± 0.113 |
| Median reported probability | 0.7370 |
| Permutation null test (300 shuffles) | real 99.63% vs 19.30% random, p = 0.005 |
| Protocol detector | 99.695% (327/328) |
Twelve model families were compared out-of-fold against the consensus profile — polynomial expansions, kNN at four neighbourhood sizes, RandomForest and ExtraTrees. The plain linear model beat all eleven alternatives, so the residual error is irreducible with five principal components rather than a failure to fit.
v1 reported a median confidence of 0.9993, with 178 of 328 patients at ≥ 99.9%. It was trained only on the 273 CORE patients — the subset the clustering had already separated cleanly — which are nearly linearly separable in 5-PC space, so the softmax saturated. The 55 intermediate tumours were excluded entirely and the model had never seen ambiguity.
| v1 | v2 | |
|---|---|---|
| trained on | 273 CORE | 328 (all) |
| median probability | 0.9993 | 0.7370 |
| patients at ≥ 99.9% | 178 / 328 | 1 / 328 |
| mean probability on BOUNDARY tumours | 0.774 | 0.474 |
The percentage now means subtype stability: "73% CL" means this expression profile co-clusters with Classical in about 73% of resampled clusterings. It is not a diagnostic probability.
HELIXA/
├── NEW_START_RESULTS/ the clustering/classification project (unmodified)
│ ├── 01_Data_Preparation_extra/
│ ├── 02_Batch_Diagnosis/ the library-prep artefact, diagnosed
│ ├── 03_Clustering_Sweep/ 726 configurations evaluated
│ ├── 04_Consensus_Clustering/ final assignments + embedding
│ ├── 05_Clusters/ one folder per subtype, with its patients
│ ├── 06_Biological_Validation/ marker genes, signature & pathway scores
│ ├── 07_Plots/ 23 original figures
│ ├── 08_Evaluation_Report/ global metrics + master workbook
│ ├── 09_Scripts/ every analysis script
│ ├── 10_Prediction_Model/ frozen model + predict_new_patient.py
│ └── 11_Evaluation_From_Internet/ independent literature validation
│
├── BIOMARKER_ENGINE/ the biomarker/drug-target discovery project
│ ├── EXPLANATION_STEP_BY_STEP.txt narrative walkthrough, start here
│ ├── 01_Engine/ the 5 scripts, run in order (01 → 05)
│ ├── 03_Evidence/ literature_evidence.{csv,json} — every source URL
│ ├── 04_Plots/ the 10 official reporting figures
│ └── 05_Tables/ candidates_all.csv, final_targets.csv (the
│ exact file website/frontend/data/biomarkers.json
│ is generated from), dependency_side_depmap.csv
│
├── website/
│ ├── backend/ Starlette API wrapping the real model
│ │ ├── app.py
│ │ ├── helixa_engine.py thin wrapper over the frozen artifacts
│ │ ├── export_static_data.py results (+ BIOMARKER_ENGINE) → JSON for the frontend
│ │ └── requirements.txt
│ └── frontend/ zero-dependency SPA (no build step)
│ ├── index.html
│ ├── css/helixa.css
│ ├── js/ router, data layer, SVG charts, views,
│ │ report.js — the Patient Molecular Report
│ ├── data/ 17 JSON datasets, incl. biomarkers.json
│ └── assets/ logos + 27 scientific figures
│
└── .github/workflows/deploy.yml GitHub Pages deployment
cd website/frontend
python3 -m http.server 5173
# open http://127.0.0.1:5173
No build step, no npm install — the frontend is native ES modules and hand-written CSS.
cd website/backend
pip install -r requirements.txt
uvicorn app:app --port 8000
Reload the site. It auto-detects the API at 127.0.0.1:8000 and the upload workflow
becomes active. Override the base URL with ?api=http://host:port or the field on the
Analyze page.
cd NEW_START_RESULTS/10_Prediction_Model
pip install scikit-learn joblib pandas numpy
python3 predict_new_patient.py /path/to/patient.rna_seq.augmented_star_gene_counts.tsv
cd website/backend
HELIXA_RESULTS=../../NEW_START_RESULTS \
HELIXA_BIOMARKER_ENGINE=../../BIOMARKER_ENGINE \
python3 export_static_data.py
This regenerates every JSON in website/frontend/data/, including biomarkers.json from
BIOMARKER_ENGINE/05_Tables/final_targets.csv. If HELIXA_BIOMARKER_ENGINE does not point
to a real final_targets.csv, the script skips that one file and says so — it never
fabricates biomarker data.
Browser ── HELIXA frontend (static, GitHub Pages)
│
├── /data/*.json ........ recorded results, always available
│ including biomarkers.json (from BIOMARKER_ENGINE/05_Tables/final_targets.csv)
│
├── /model/*.bin ........ frozen classifier weights, fetched once
│ └── js/engine.js — the classifier's forward pass, in the browser
│
├── js/report.js ........ builds the Patient Molecular Report
│ (new tab, browser print-to-PDF — no server, no PDF library)
│
└── HTTP ── Starlette API (local) ── helixa_engine.py
│
model_artifacts.joblib
(frozen PCA + classifier +
batch means + gene masks)
│
real prediction
The scientific pipeline is never embedded in the UI. The frontend renders; the backend
delegates to the frozen artifacts; the artifacts came from the scripts in
NEW_START_RESULTS/09_Scripts/.
GitHub Pages serves static files only, so the Python model cannot run there. The frontend detects this and says so plainly — it never fakes a prediction. All cohort data, evaluations and figures remain fully available; only the upload workflow requires the local API.
| Variable | Default | Purpose |
|---|---|---|
HELIXA_RESULTS | ../../NEW_START_RESULTS | Where the scientific outputs live |
HELIXA_CORS | localhost:5173,127.0.0.1:5173 | Allowed browser origins |
HELIXA_DATA | ../frontend/data | JSON dataset directory |
Copy website/backend/.env.example to .env and edit. Never commit .env.
These are stated on the platform itself, not buried here.
Next step that would matter most: link these subtypes to survival data from GDC and run a Kaplan-Meier analysis; and, for the biomarker panel, download DepMap's cell-line expression data to classify the 53 glioblastoma lines into the 6 subtypes directly, turning "selective to glioblastoma" into "selective to this exact subtype."
BIOMARKER_ENGINE/03_Evidence/literature_evidence.json and in every patient report.| Abdulla ASKAR — Team Leader | B.Sc. Biomedical Engineering — KBÜ · B.Sc. Electrical and Electronics Engineering — KBÜ · M.Sc. Computer Science — İTÜ |
| Mohammad Alsagher — Literature | Medical Engineering |
| Leyan Mamou — Algorithms & Technical Development | Computer Engineering |
| Alı ALTHAHER — Algorithms & Other Technical Development | B.Sc. Biomedical Engineering — KBÜ |
| Mariam Mariam — Media & Other Contributions | Medical Engineering |
Contact · [email protected] · 0 538 314 9253
HELIXA — Turning Genomics into Decisions KBU-MedLab