How technometer/lung-analysis-demo works
Lung Analysis Demo turns LUNA16 pulmonary nodule annotations into an interactive thoracic CT discovery experience. Its principal workflow cleans findings, derives clustering, anomaly scores and PCA coordinates, ingests enriched records into PostgreSQL, then serves spatial findings, cohort summaries and relational graphs to the browser. The frontend supports anatomical and PCA views, filtering, camera focus, finding inspection and study knowledge graphs. API route and UI capabilities are included from the README; their detailed implementations were not sampled.
Main entry points: main.js 3D scene and controls · connection.py DB sessions · main.py FastAPI application · findings.py Spatial findings API
Components 23
Data preparation
- LUNA16 annotations
data/raw/annotations.csv - Cleaning pipeline
src/data/clean_pipeline.py - Clean findings
data/processed/clean_findings.csv
Finding analysis
- Unsupervised baseline
src/models/train_baseline.py - Enriched findings
data/processed/enriched_findings.csv - Fitted models
models
API and storage
- Relational ingestion
src/database/ingest_data.py - DB sessions
src/database/connection.py - Study and finding models
src/database/models.py - PostgreSQL
- FastAPI application
src/api/main.py - API data contracts
src/api/schemas.py - Spatial findings API
src/api/routes/findings.py - Cohort summary API
src/api/routes/clusters.py - Knowledge graph API
src/api/routes/graph.py - Health API
src/api/routes/health.py
Interactive interface
- Browser interface
frontend/index.html - 3D scene and controls
frontend/js/main.js - Finding meshes
frontend/js/particles.js - Anatomical context
frontend/js/anatomicalHull.js - Camera transitions
frontend/js/cameraManager.js - 2D knowledge graph
frontend/js/knowledgeGraph.js
Other components
- Clinical analyst
Connections 35
- Cleaning pipeline → LUNA16 annotations: reads
- Cleaning pipeline → Clean findings: writes
- Unsupervised baseline → Clean findings: reads
- Unsupervised baseline → Enriched findings: writes
- Unsupervised baseline → Fitted models: saves
- Relational ingestion → Enriched findings: reads
- Relational ingestion → DB sessions: uses sessions
- Relational ingestion → Study and finding models: creates records
- Relational ingestion → PostgreSQL: writes
- FastAPI application → Spatial findings API: registers
- FastAPI application → Cohort summary API: registers
- FastAPI application → Knowledge graph API: registers
- FastAPI application → Health API: registers
- FastAPI application → Browser interface: serves
- Spatial findings API → DB sessions: gets sessions
- Cohort summary API → DB sessions: gets sessions
- Knowledge graph API → DB sessions: gets sessions
- Health API → DB sessions: gets sessions
- DB sessions → PostgreSQL: connects
- Spatial findings API → Study and finding models: queries findings
- Cohort summary API → Study and finding models: aggregates findings
- Knowledge graph API → Study and finding models: queries studies and findings
- Health API → PostgreSQL: checks connectivity
- Spatial findings API → API data contracts: serializes response
- Cohort summary API → API data contracts: serializes response
- Knowledge graph API → API data contracts: serializes response
- Clinical analyst → Browser interface: uses
- Browser interface → 3D scene and controls: loads
- 3D scene and controls → Spatial findings API: requests spatial findings
- 3D scene and controls → Cohort summary API: requests cohort metrics
- 3D scene and controls → Finding meshes: creates finding meshes
- 3D scene and controls → Anatomical context: creates anatomy
- 3D scene and controls → Camera transitions: focuses camera
- 3D scene and controls → 2D knowledge graph: opens graph
- 2D knowledge graph → Knowledge graph API: requests study graph