Python library for reading and writing EULUMDAT (.ldt) photometric files
Project description
pyldt
A Python library for reading and writing EULUMDAT (.ldt) photometric files — the standard format for luminaire intensity distribution data used in lighting design and photometric testing.
Developed in an ISO 17025 accredited photometry laboratory.
Features
- Parse any valid EULUMDAT file into a clean Python object model
- Full symmetry expansion (ISYM 0–4) into a complete
[mc × ng]intensity matrix - Edit header fields (luminaire name, lamp data, photometric factors, geometry, …)
- Save back to a valid EULUMDAT file with correct ISO-8859-1 encoding
- Optional symmetry compression on write
- Safe file naming: auto-increments filename (
_1,_2, …) if destination exists - No dependencies beyond the Python standard library
Installation
pip install eulumdat-py
For development or to access the examples:
git clone https://github.com/123VincentB/pyldt.git cd pyldt pip install -e .
Quick start
from pyldt import LdtReader, LdtWriter
# Read
ldt = LdtReader.read("luminaire.ldt")
print(ldt.header.luminaire_name)
print(f"I(C=0°, γ=0°) = {ldt.intensities[0][0]:.1f} cd/klm")
# Edit a header field
ldt.header.date_user = "2026-01-01 / modified"
# Save (adds _1 suffix if file already exists)
saved = LdtWriter.write(ldt, "luminaire_modified.ldt")
print(f"Saved to: {saved}")
Examples
| File | Description |
|---|---|
examples/01_basic_usage.md |
Accessing header fields, lamp data and intensity values |
examples/01_basic_usage.py |
Runnable script for the above |
examples/02_polar_diagram.md |
Plotting the polar intensity diagram (4 C-planes) |
examples/02_polar_diagram.py |
Runnable script for the above (requires matplotlib) |
Run any example from the repository root:
python examples/01_basic_usage.py
python examples/02_polar_diagram.py
Project structure
pyldt/
├── pyldt/
│ ├── __init__.py ← Public API
│ ├── model.py ← LdtHeader, Ldt dataclasses
│ ├── parser.py ← LdtReader
│ └── writer.py ← LdtWriter
├── examples/
│ ├── 01_basic_usage.md
│ ├── 01_basic_usage.py
│ ├── 02_polar_diagram.md
│ └── 02_polar_diagram.py
├── tests/
│ ├── test_parser.py
│ └── samples/ ← .ldt test files (10 real manufacturer files)
├── docs/
│ └── eulumdat_format.md
├── CHANGELOG.md
├── LICENSE
└── README.md
EULUMDAT format
EULUMDAT is the standard file format for luminaire photometric data, defined by the LiTG (Deutsche Lichttechnische Gesellschaft, 1990). It is widely used in Europe alongside IES files (North America).
Key concepts:
- C-planes: vertical planes through the luminaire vertical axis (azimuth, 0–360°)
- γ-angles: elevation angles within each C-plane (0° = nadir, 90° = horizontal, 180° = zenith)
- ISYM: symmetry code that allows the file to store only a subset of C-planes
- Intensities: tabulated in cd/klm (candela per kilolumen of lamp flux)
See docs/eulumdat_format.md for a detailed field-by-field description.
Symmetry types (ISYM)
| ISYM | Description | C-planes stored |
|---|---|---|
| 0 | No symmetry | All mc planes |
| 1 | Full rotational symmetry | 1 plane |
| 2 | Symmetry about C0–C180 | mc/2 + 1 planes |
| 3 | Symmetry about C90–C270 | mc/2 + 1 planes |
| 4 | Quadrant symmetry | mc/4 + 1 planes |
LdtReader.read() always returns a fully expanded matrix regardless of ISYM.
License
MIT — see LICENSE.
Context
This library was developed as a practical tool in the context of ISO 17025 accredited photometric testing. It is shared as open-source in the hope that it will be useful to others working with EULUMDAT files in Python.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eulumdat_py-0.1.4.tar.gz.
File metadata
- Download URL: eulumdat_py-0.1.4.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef081e9e83ad6e613ee3f949cc5232afc0eced4397af5ad956ff330005823e93
|
|
| MD5 |
a16ba0ee846f05bbbd728817d56831ed
|
|
| BLAKE2b-256 |
4271b8537a1699d48bb3fb537379ef8046d20b46e6711bba9ec0d7acb2bd0f07
|
File details
Details for the file eulumdat_py-0.1.4-py3-none-any.whl.
File metadata
- Download URL: eulumdat_py-0.1.4-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df63e74a4bb9c6677ccf0369001866918bdb9aa90908fa5e78e8ab381c0493d3
|
|
| MD5 |
04cd785da57e75cc1ef6cf54dd9011f6
|
|
| BLAKE2b-256 |
7069add44b0c21ebbccf41604a2b30f0a3ab5269a987af6123bccfb8332b050d
|