PhD Aljoscha Sander - Code Basis
  • Jupyter Notebook 98.4%
  • Python 1.6%
Find a file
2026-06-09 23:40:40 +02:00
.opencode/plans completed restructuring and updated documentation 2026-02-18 23:15:22 +01:00
docs added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
examples/structd implemented NGSolve 3D FEM 2026-03-02 08:28:15 +01:00
notebooks added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
results added 2-DoF and 3-DoF model to structd 2026-02-08 22:17:17 +01:00
scripts added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
src added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
tests added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
.cookiecutter.json initial commit 2025-12-08 21:11:31 -05:00
.editorconfig initial commit 2025-12-08 21:11:31 -05:00
.gitattributes initial commit 2025-12-08 21:11:31 -05:00
.gitignore restructured tests 2026-02-08 00:44:35 +01:00
.pre-commit-config.yaml removed old .md files and upadte ruff pre-commit 2026-01-29 14:00:24 -05:00
AGENTS.md added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
CHANGELOG.md added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
CODE_OF_CONDUCT.md initial commit 2025-12-08 21:11:31 -05:00
coverage.json thanks, claude (#1) 2025-12-11 01:36:38 +00:00
LICENSE initial commit 2025-12-08 21:11:31 -05:00
Makefile fix/gps-installation-times (#6) 2026-01-28 02:52:08 +00:00
mkdocs.yml Docs D4: architecture + API refresh; add droptower & consolidate ispy 2026-06-09 19:24:47 +02:00
package-lock.json final run of ruff 2025-12-13 11:21:30 -05:00
package.json final run of ruff 2025-12-13 11:21:30 -05:00
pyproject.toml added droptower dataset to codebase 2026-06-09 23:40:40 +02:00
README.md updated README 2026-06-09 19:55:41 +02:00
test.toml fixed wmb-sued ingestion issue 2026-02-07 17:07:22 +01:00
test_beam_analytical_verification.png completed restructuring and updated documentation 2026-02-18 23:15:22 +01:00
test_data.db updated notebook examples 2025-12-16 15:15:00 -05:00
uv.lock added droptower dataset to codebase 2026-06-09 23:40:40 +02:00

phdsan — Weird Structural Responses of Offshore Wind Turbines under Installation conditions

Python 3.13+ Tests Code style: ruff

phdsan is a Python monorepo for my (Aljoscha Sander) PhD research on structural structural dynamics and fluid-strucutre interaction of offshore wind turbines during installation. It provides tools for processing sensor data, performing advanced signal analysis and extracting structural parameters from vibration measurements collected during installation operations.

Features

  • Data Management — DuckDB-based storage with multi-sensor support and reproducibility tracking
  • Signal Processing — Butterworth filtering, double integration with drift correction, coordinate transformations
  • Advanced Analysis — Stochastic methods, nonlinear dynamics, fatigue analysis, time-frequency analysis
  • Structural Dynamics — 2-DOF and 3-DOF eccentric mass oscillator models with FEM beam solver (structd)
  • AIS Tracking — Vessel-track clustering, windfarm matching, installation-event extraction to estimate real-world installation performance(ispy)
  • Environmental Correlation — ERA5 integration, wave / wind / structure correlation

Quick start

# Clone and install
git clone https://github.com/flucto-gmbh/phdsan.git
cd phdsan
make install

# Run tests
uv run pytest

# Start Jupyter Lab
uv run jupyter lab

Library-first workflow

phdsan is a library, not a CLI. Batch tasks are run via small tyro-based scripts under scripts/ and interactive analyses live in notebooks/.

Example: rebuild a twbii database from raw data

uv run python -m scripts.db.rebuild \
    --data-dir data_twbii \
    --primary databases/data.db \
    --installation-excel data_twbii/installation_log.xlsx \
    --workers 8 --verbose

Example: use the library directly

from twbii.db.connection import DatabaseConnection
from twbii.processing.pipeline import process_acceleration_data
from twbii.db.models import get_tom_data
from analysis.config import FilterConfig, IntegrationConfig
from analysis.fatigue.rainflow import analyze_rainflow

with DatabaseConnection("turbine_data.db", read_only=True) as conn:
    raw = get_tom_data(conn, turbine_id="20_BW27", location="helihoist-1")

deflection_df = process_acceleration_data(
    raw,
    resample_interval="40ms",
    filter_config=FilterConfig(lowcut_hz=0.05, highcut_hz=1.0),
    integration_config=IntegrationConfig(),
)
rainflow = analyze_rainflow(deflection_df["deflection"])

See docs/user-guide/scripts-reference.md for the full list of batch scripts.

Documentation

Full documentation is available at the documentation site or can be built locally:

uv run mkdocs serve

Package layout

Six packages, no CLI entry points:

  • core — Shared infrastructure (config, types, exceptions, validation, DDL fragments)
  • analysis — Generic analysis algorithms (filters, fatigue, nonlinear, stochastic, wavelets, DTW)
  • twbii — Offshore wind installation-monitoring toolkit (database, I/O, processing pipelines, analysis)
  • ispy — AIS vessel tracking & windfarm matching
  • structd — Beam FEM solver and reduced-order oscillator models
  • droptower — Drop-tower experiment skeleton (work-in-progress)
phdsan/
├── src/
│   ├── core/           # Shared infrastructure
│   ├── analysis/       # Generic analysis algorithms
│   ├── twbii/          # Installation-monitoring toolkit
│   ├── ispy/           # AIS vessel tracking
│   ├── structd/        # Beam FEM solver
│   └── droptower/      # Drop-tower experiment (skeleton)
├── tests/              # Test suite (mirrors src/)
├── scripts/            # tyro-based batch entry points
├── notebooks/          # Jupyter notebooks
└── docs/               # MkDocs documentation

Per-experiment database split: each package owns its own DuckDB file(s); no cross-database joins. See docs/architecture/database-schema.md.

Development

# Install with dev dependencies
make install

# Run tests
make test

# Code quality
uv run ruff check --fix
uv run ty check src/

# Build documentation
make docs

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}
}

Project Status: Active development