PhD Aljoscha Sander - Code Basis
- Jupyter Notebook 99.1%
- Python 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .opencode/plans | ||
| docs | ||
| notebooks | ||
| scripts | ||
| sql | ||
| src | ||
| tests | ||
| .cookiecutter.json | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| ARCHIVE.md | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| LICENSE | ||
| Makefile | ||
| mkdocs.yml | ||
| pyproject.toml | ||
| README.md | ||
| test.toml | ||
| uv.lock | ||
phdsan — Weird Structural Responses of Offshore Wind Turbines under Installation Conditions
phdsan is the code for my (Aljoscha Sander) PhD research on the structural dynamics and fluid-structure interaction of offshore wind turbines during installation: measurements of the TWB II installation campaign, a drop-tower measurement campaign, and structural models.
raw files ──sql/*.sql──▶ DuckDB ──▶ Python analysis ──▶ notebooks / thesis
Quick start
make install # uv sync + pre-commit hooks
uv run pytest # default test run (slow tests: -m slow)
# build the databases from raw data (needs the duckdb CLI and fish)
scripts/build_twbii.fish /path/to/trianel-II twbii.duckdb
scripts/build_droptower.fish /path/to/zarm droptower.duckdb
uv run jupyter lab # notebooks/
from core.db.connection import DatabaseConnection
from twbii.db import get_acc_data
with DatabaseConnection("twbii.duckdb", read_only=True) as conn:
acc = get_acc_data(conn, turbine_id="08_BW57", location="helihoist-1")
conn.sql("SELECT * FROM data_inventory").show()
Layout
sql/twbii/, sql/droptower/ schema + one ingestion SQL file per data source
scripts/ build_*.fish, convert_to_parquet.py, gps_detect_periods.py,
process_acceleration.py, structd/
src/core/ DuckDB connection, config base, shared types, exceptions
src/analysis/ filters, integration, stochastic methods, wavelets,
orbit geometry, GPS lift detection, lag correlation
src/twbii/ database read helpers, processing pipeline, workflows, plotting
src/structd/ beam FEM solver and oscillator models
notebooks/ thesis notebooks (ch*) and self-contained examples
tests/ mirrors src/; SQL ingestion tested on synthetic raw files
docs/ MkDocs documentation (`make docs` / `uv run mkdocs serve`)
DuckDB is the only data interface: raw data is loaded by plain SQL
(docs/user-guide/data-ingestion.md), and the databases are rebuildable
artefacts without migrations (docs/architecture/database.md).
Code that is no longer used lives on the archive branch; ARCHIVE.md lists
what was moved there and how to restore it.
Development
uv run ruff check --fix && uv run ruff format
uv run ty check src scripts
uv run pytest -n 4
uv run mkdocs build
License
MIT License — see LICENSE for details.
Citation
@software{phdsan2026,
title = {phdsan: Structural Health Monitoring of Offshore Wind Turbine Installations},
author = {Sander, Aljoscha},
year = {2026},
url = {https://git.flucto.tech/aljoscha/phdsan}
}