Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,25 @@ name: CI

jobs:
test:
uses: MorePET/github-actions/.github/workflows/ci-python-reusable.yml@main
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install Typst
uses: typst-community/setup-typst@v3
with:
typst-version: 'latest'

- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

- name: Run tests
run: make test
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ All notable changes to this template will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.3.0]

### Added

Expand Down Expand Up @@ -64,6 +64,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Consolidated diagram outputs to project-specific build directories
- Simplified gitignore patterns for build artifacts
- Updated all include paths to reference build directories
- Unified example and main build processes to use same pipeline (colors → diagrams → pdf → html)
- Example project outputs now in dedicated `example/build/` folder

- **Documentation Migration**
- Migrated all documentation from Markdown to Typst format
Expand All @@ -76,6 +78,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- TOC sidebar uses Bootstrap Offcanvas component for better mobile support
- Improved regex patterns for SVG injection to prevent content deletion

- **Typst Library Enhancements**
- Isotope and beta particle notation now uses Unicode superscripts/subscripts in HTML export
- Better accessibility with native Unicode text instead of SVG fragments
- Smaller HTML file sizes with improved text selection and copy/paste support
- PDF export unchanged (still uses physica package for proper typesetting)

### Fixed

- **Table Column Widths**
Expand Down
18 changes: 8 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ THEME_TOGGLE ?= yes
TECH_DOC_SRC = docs/main.typ
TECH_DOC_OUT = build/technical-documentation
EXAMPLE_SRC = example/docs/main.typ
EXAMPLE_OUT = example/build/example-documentation
EXAMPLE_OUT = example/build/technical-documentation

# Default target - builds the technical-documentation project
all: technical-documentation
Expand Down Expand Up @@ -48,17 +48,15 @@ technical-documentation:
@$(MAKE) build-summary OUT=$(TECH_DOC_OUT)
@echo "🌓 Toggle dark mode with the button in top-right"

# Build example project (depends on python-project artifacts)
# Build example project (uses same build process as technical-documentation)
example:
@echo "=================================================="
@echo "🎨 Building Example Project"
@echo "=================================================="
@$(MAKE) python-api
@$(MAKE) python-tests
@$(MAKE) python-diagrams
@$(MAKE) build-project SRC=$(EXAMPLE_SRC) OUT=$(EXAMPLE_OUT) PROJECT=example
@$(MAKE) server-start
@$(MAKE) build-summary OUT=$(EXAMPLE_OUT)
@echo "🌓 Toggle dark mode with the button in top-right"

# Generate color files (CSS and Typst) from colors.json
colors:
Expand Down Expand Up @@ -132,10 +130,10 @@ check:

# Internal: Check that build outputs exist
check-outputs:
@test -f technical-documentation/build/technical-documentation.pdf && echo "✓ Technical doc PDF exists" || echo "❌ Technical doc PDF missing"
@test -f technical-documentation/build/technical-documentation.html && echo "✓ Technical doc HTML exists" || echo "❌ Technical doc HTML missing"
@test -f example/build/example-documentation.pdf && echo "✓ Example PDF exists" || echo "❌ Example PDF missing"
@test -f example/build/example-documentation.html && echo "✓ Example HTML exists" || echo "❌ Example HTML missing"
@test -f build/technical-documentation.pdf && echo "✓ Technical doc PDF exists" || echo "❌ Technical doc PDF missing"
@test -f build/technical-documentation.html && echo "✓ Technical doc HTML exists" || echo "❌ Technical doc HTML missing"
@test -f example/build/technical-documentation.pdf && echo "✓ Example PDF exists" || echo "❌ Example PDF missing"
@test -f example/build/technical-documentation.html && echo "✓ Example HTML exists" || echo "❌ Example HTML missing"
@test -f lib/generated/colors.css && echo "✓ Colors generated" || echo "❌ Colors missing"

# Quick test - compile everything and check outputs exist
Expand All @@ -146,7 +144,7 @@ test: technical-documentation example

# Internal: Remove PDF and HTML outputs
clean-outputs:
@rm -rf technical-documentation/build/
@rm -rf build/
@rm -rf example/build/
@rm -rf example/python-project/build/
@rm -f *_temp*.html
Expand Down
93 changes: 45 additions & 48 deletions docs/main.typ
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
#strong[Intended Purpose] \
The DUPLET / EXOPET system is intended to perform simultaneous
dual-tracer Positron Emission Tomography (PET) imaging using
radiopharmaceuticals that emit β⁺ particles, enabling non-invasive in
radiopharmaceuticals that emit #betaplus particles, enabling non-invasive in
vivo detection, spatial localization, and functional characterization of
cancer lesions with high spatial and temporal resolution. It aims to
improve diagnosis and therapy planning by resolving intralesional and
Expand Down Expand Up @@ -89,8 +89,8 @@ analyzing #strong[list-mode PET data];, enabling:
- Capture of full photon energy and timestamp data for each detection
event.
- Identification of #strong[triplet events];: two 511 keV annihilation
photons and an additional prompt nuclear gamma (e.g., from 68Ga or
44Sc decay).
photons and an additional prompt nuclear gamma (e.g., from #Ga68 or
#Sc44 decay).
- Separation of signals from multiple tracers in one scan by applying
#strong[energy-time discrimination];, positron lifetime analysis, and
ML-supported pattern recognition.
Expand All @@ -117,15 +117,15 @@ analyzing #strong[list-mode PET data];, enabling:
algorithms using MVA/BDT, supervised learning, and domain-adapted
image reconstruction (CASTOR, STIR, Geant4/GATE).],
[Radiotracers and Isotopes], [Dual-tracer combinations, typically
\[18F\]-FDG and \[68Ga\]-PSMA or \[44Sc\]-FAPI.],
#FDG and #Ga68PSMA or #Sc44FAPI().],
[Image Analysis Workstation], [GPU-supported server platform
integrated with BioMedIT/Leonhard Med.],
table.hline(),
)
==== Accessories
<accessories>
- Phantom sets for validation and calibration
- Cyclotron-based isotope production (e.g., \[44Sc\] via Ca(p,n)Sc)
- Cyclotron-based isotope production (e.g., #Sc44 via Ca(p,n)Sc)
- Dose calibrators, gamma spectrometers, and QA tools
- Clinical interface (graphical front-end for acquisition and
processing)
Expand Down Expand Up @@ -314,7 +314,7 @@ analyzing #strong[list-mode PET data];, enabling:
oncology to bridge human and veterinary diagnostics.],
[Radiopharmacists / Radiochemists], [Experts responsible for the
production, radiolabeling, quality control, and dosing of PET
tracers such as \[¹⁸F\]FDG and \[⁴⁴Sc\]-FAPI-04 under GMP or
tracers such as #FDG and #Sc44FAPI04 under GMP or
equivalent standards.],
[Software Developers / Data Scientists], [Personnel developing and
maintaining the reconstruction, dual-tracer separation, and ML
Expand Down Expand Up @@ -449,53 +449,50 @@ analyzing #strong[list-mode PET data];, enabling:
table.hline(),
)

===== Systemkomponentenübersicht – DUPLET / EXOPET
<systemkomponentenübersicht-duplet-exopet>
===== System Components Overview – DUPLET / EXOPET
<system-components-overview-duplet-exopet>
#table(
columns: (5cm, auto),
align: (left,auto,),
table.hline(),
[Systemkomponente], [Definition und Zweck],
[System Component], [Definition and Purpose],
table.hline(),
[PET-Detektorhardware (EXOPET-Ring)], [Modularer Ring aus
LYSO-Kristallen und SiPMs zur Detektion von β⁺-Annihilations- und
nuklearen Gammastrahlen (z. B. von ⁶⁸Ga oder ⁴⁴Sc). Ermöglicht
simultane Multi-Tracer-Bildgebung mit hoher räumlicher und
zeitlicher Auflösung.],
[Akquisitionselektronik & DAQ-System], [FPGA-basierte Zeitstempelung
und Digitalisierung aller Detektionsereignisse im List-Mode (inkl.
Energie & Zeit). Hohe Datenrate und Echtzeit-Speicherung zur
ML-gestützten Ereignisanalyse.],
[Bildverarbeitungssoftware & ML-Pipeline], [Software-Framework zur
Tracer-Diskriminierung (z. B. ⁶⁸Ga vs.~¹⁸F), basierend auf
Zeit-Energie-Korrelationen und ML-Algorithmen. Unterstützt
quantitative Bildrekonstruktion (z. B. SUV-Berechnung) und
Positronen-Lifetime-Analyse.],
[Benutzeroberfläche & Workflow-Software], [Touchscreen-gesteuerte
Bedienoberfläche zur Steuerung von Injektionen, Start/Stop des
Scans, Logging, Patientensicherheit und Positionierung.
Workflowführung zur Sicherstellung von Dual-Tracer-Kompatibilität.],
[Radiopharmazeutische Schnittstelle], [Eingabemodule für
Tracerinformationen (z. B. Aktivität, Injektionszeitpunkt,
Halbwertszeit), automatisierte Zerfallskorrektur und Verknüpfung mit
Dosimetriealgorithmen. GMP-konform.],
[Gehäuse & Mechanik], [Clamp-On-Ringstruktur zur Nachrüstung
bestehender PET/CT-Geräte. Wartungsfreundliches, modulares Design
mit Schnellzugriff auf Komponenten für Servicezwecke.],
[Datenexport & PACS-Integration], [HL7- und DICOM-kompatibler Export
an klinische IT-Systeme (PACS/RIS). Absicherung der Datenübertragung
durch AES-Verschlüsselung, Audit-Trail und BioMedIT-Anbindung.],
[Kalibrierung & QA-Zubehör], [NEMA-NU2-konforme Phantome (z. B. IEC
Body Phantom), automatische Kalibrierungsroutinen,
Tageskontrollfunktionen für Energie, Zeitauflösung und
Sensitivität.],
[Tierbildgebungsschnittstelle], [Spezielle Aufnahmeeinsätze und
Immobilisierungshilfen zur PET/CT-Diagnostik bei Hunden (z. B. für
komparative Onkologie). Anpassbar für Kleintiere.],
[IT-Sicherheit & Datenmanagement], [Sichere Speicherung und
Verarbeitung von Rohdaten und Patientendaten. DSGVO/HFG-konforme
Pseudonymisierung, rollenbasiertes Benutzer-Login, Datenübertragung
über BioMedIT/Leonhard Med.],
[PET Detector Hardware (EXOPET Ring)], [Modular ring of LYSO
crystals and SiPMs for detection of #betaplus annihilation and nuclear
gamma rays (e.g., from #Ga68 or #Sc44). Enables simultaneous
multi-tracer imaging with high spatial and temporal resolution.],
[Acquisition Electronics & DAQ System], [FPGA-based timestamping and
digitization of all detection events in list mode (incl. energy &
time). High data rate and real-time storage for ML-supported event
analysis.],
[Image Processing Software & ML Pipeline], [Software framework for
tracer discrimination (e.g., #Ga68 vs.~#F18), based on time-energy
correlations and ML algorithms. Supports quantitative image
reconstruction (e.g., SUV calculation) and positron lifetime
analysis.],
[User Interface & Workflow Software], [Touchscreen-controlled
interface for managing injections, scan start/stop, logging, patient
safety, and positioning. Workflow guidance to ensure dual-tracer
compatibility.],
[Radiopharmaceutical Interface], [Input modules for tracer
information (e.g., activity, injection time, half-life), automated
decay correction, and integration with dosimetry algorithms.
GMP-compliant.],
[Housing & Mechanics], [Clamp-on ring structure for retrofitting
existing PET/CT devices. Maintenance-friendly, modular design with
quick access to components for service purposes.],
[Data Export & PACS Integration], [HL7 and DICOM-compatible export
to clinical IT systems (PACS/RIS). Data transmission secured through
AES encryption, audit trail, and BioMedIT integration.],
[Calibration & QA Accessories], [NEMA NU-2 compliant phantoms (e.g.,
IEC Body Phantom), automatic calibration routines, daily quality
control functions for energy, time resolution, and sensitivity.],
[Animal Imaging Interface], [Special imaging inserts and
immobilization aids for PET/CT diagnostics in dogs (e.g., for
comparative oncology). Adaptable for small animals.],
[IT Security & Data Management], [Secure storage and processing of
raw data and patient data. GDPR/HFG-compliant pseudonymization,
role-based user login, data transmission via BioMedIT/Leonhard Med.],
table.hline(),
)
=== Verification and Validation (V&V)
Expand Down
Loading
Loading