Photometry & Metrology

Technical notes on light measurement, photometric file formats, measurement uncertainty and laboratory practice. Written from an ISO 17025 accredited photometry laboratory.

Computing beam half-angles from EULUMDAT files with Python

Characterising the angular spread of a luminaire is one of the most common tasks in photometric analysis. The standard metric is the half-angle at half maximum (HAHM): the angle at which the luminous intensity drops to 50 % of its peak value. It is directly related to the beam angle specified in product datasheets and is used for luminaire classification, glare assessment, and lighting calculation input. eulumdat-analysis is a Python package that computes this and other practical photometric quantities from EULUMDAT .ldt files. This article covers the half_angle function, the first function of the package. ...

April 7, 2026 · 5 min · Vincent B.

Computing UGR catalogue values from EULUMDAT files with Python

Glare is one of the most critical comfort criteria in lighting design. The Unified Glare Rating (UGR) quantifies the discomfort glare perceived by an observer in a room uniformly illuminated by identical luminaires. It is defined by CIE 117-1995 and extended by CIE 190:2010 into a standardised tabular method that produces catalogue values — the four numbers printed on every professional photometric datasheet. eulumdat-ugr is a Python package that computes the full UGR catalogue table from an EULUMDAT .ldt file, conforming to the CIE 117 / CIE 190 methodology and validated against Relux and DIALux reference outputs. ...

April 2, 2026 · 6 min · Vincent B.

Computing luminance tables and polar diagrams from EULUMDAT files with Python

Luminous intensity tells you how much light a luminaire emits in each direction. Luminance tells you how bright it appears from that direction — the quantity directly responsible for glare. Converting from intensity to luminance requires knowing the projected luminous area of the luminaire as seen from each C-plane and γ-angle, which depends on the physical geometry declared in the EULUMDAT header. eulumdat-luminance is a Python package that computes luminance tables (cd/m²) from EULUMDAT files, generates polar luminance diagrams showing all 24 C-planes simultaneously, and provides arbitrary-angle interpolation for downstream UGR calculations. ...

March 27, 2026 · 7 min · Vincent B.

Generating photometric polar diagrams from EULUMDAT files with Python

Every luminaire photometric file contains a candela distribution — a table of intensities indexed by C-plane and γ-angle. Visualising that distribution as a polar diagram is one of the most basic tasks in lighting documentation, yet doing it correctly requires handling several non-trivial details: symmetry expansion, CIE angular conventions, radial autoscaling, and consistent visual presentation. eulumdat-plot is a Python package that handles all of this and produces publication-ready SVG polar diagrams in the style of the Lumtopic software — suitable for product datasheets, PDF documentation, and online publication. ...

March 18, 2026 · 5 min · Vincent B.

Symmetrising EULUMDAT photometric files with Python

EULUMDAT files store luminous intensity distributions as a matrix of C-planes and γ-angles. When a luminaire has a symmetric distribution, the file can declare this via the ISYM field — allowing lighting design software to reconstruct the full distribution from a reduced set of C-planes. In practice, raw goniophotometer measurements are never perfectly symmetric due to measurement noise, lamp positioning tolerances, and minor luminaire asymmetries. Symmetrising the data enforces the intended symmetry by averaging mirror-plane pairs, producing cleaner files that import correctly into DIALux, Relux, and similar tools. ...

March 16, 2026 · 4 min · Vincent B.

The EULUMDAT file format — a complete technical reference

EULUMDAT is the standard file format for luminaire photometric data in Europe. Despite being widely used — every goniophotometer lab produces .ldt files, every lighting simulation tool (DIALux, Relux, AGi32) consumes them — the format is remarkably poorly documented in English. This article is an attempt to fix that. Background The format was defined by the LiTG (Deutsche Lichttechnische Gesellschaft) in 1990. It predates XML, JSON and every modern data format. It is a plain-text, positional file: each piece of data occupies a specific line number, and a single missing or empty line shifts everything that follows, producing a corrupt file. ...

February 25, 2026 · 5 min · Vincent B.