This repository turns the microscopic photoelectric differential cross section into a coherent scientific-art sequence: polarized X-rays enter a gas cell, photoelectron directions are sampled, tracks are reconstructed, and the azimuthal modulation reveals polarization.
Created by Davide Fiorina (ORCID 0000-0002-7104-257X).
CrossSectionDescription.md is the physics source
of truth. The production code under src/xpol_art/ implements its normalized
leading-order Sauter K-shell angular kernel for oxygen K-shell absorption and a
separately declared illustrative detector response. Evaluated total/subshell
rates, molecular-edge models, alternative atomic models, and Compton transport
described in the source document are extension guidance, not implemented claims
of this artwork release.
| Direction-space view | Statistical measurement |
|---|---|
![]() |
![]() |
| Brightness reveals favored emission directions at fixed radius. | Sampled tracks become reconstructed angles and a modulation curve. |
The release contains eleven 3840×2160 RGB PNG figures and 24 animations across landscape and vertical orientations. Git ships only 480p30 MP4s and GIFs: 854×480 for landscape and 480×854 for portrait. Native 1080p60 MP4 masters are generated locally and excluded from Git and source distributions.
Every animation carries the small credit “By Davide Fiorina via Local Qwen3.8”. The vertical gallery has no other text, with enlarged tracks-to-modulation visuals. See the animation folder guide and portrait rendering guide.
| Figure | Subject |
|---|---|
| 2 keV DCS sculpture | Low-beta oxygen-K probability volume |
| 10 keV DCS sculpture | Intermediate-energy probability volume |
| 80 keV DCS sculpture | Relativistically forward-focused probability volume |
| Polarized direction globe | EVPA-aligned bright sectors |
| Unpolarized direction globe | Azimuthally uniform directional field |
| Photoelectric interaction | Absorption vertex and sampled photoelectron |
| Gas-cell polarimeter | Detector, tracks, reconstruction, and readout |
| Tracks to modulation | Statistical buildup and angular response |
| Polarization angle | EVPA through modulation phase |
| Polarization degree | Polarization fraction through amplitude |
| Hero illustration | Complete source-to-measurement story |
| Animation | GIF | Duration |
|---|---|---|
| Polarized energy evolution | Preview | 9.0 s |
| Unpolarized energy evolution | Preview | 9.0 s |
| Polarized direction globe | Preview | 9.0 s |
| Unpolarized direction globe | Preview | 9.0 s |
| Photoelectric interactions | Preview | 6.5 s |
| Gas-cell orbit | Preview | 5.0 s |
| Tracks to modulation | Preview | 12.0 s |
| Polarization angle | Preview | 5.5 s |
| Polarization degree | Preview | 5.5 s |
| Track accumulation | Preview | 22.0 s |
| Polarization degree companion | Preview | 12.8 s |
| Polarization angle companion | Preview | 8.0 s |
Use Python 3.11 or newer from the repository root:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install --editable ".[test]"
python -m pytestRendering requires ffmpeg, ffprobe, an FFmpeg build with libx264,
appropriate fonts, and a working VTK off-screen backend. Install
--editable ".[render]" when test dependencies are not needed. See
the rendering guide for Ubuntu/WSL packages, EGL/Xvfb
setup, output routing, and production details.
Draft and smoke output is non-destructive and defaults under ignored
frames/ directories:
python scripts/render_all.py --quality draft --only hero
python scripts/render_companion_animations.py --quality draft --only tracks_accumulationRebuild and verify the canonical release:
python3 scripts/render_all.py --quality production --no-manifest
python3 scripts/render_companion_animations.py --quality production
python3 scripts/render_all.py --format vertical --quality production --no-manifest
python3 scripts/render_companion_animations.py --format vertical --quality production
python3 scripts/export_previews.py --format landscape
python3 scripts/export_previews.py --format vertical
python3 scripts/render_all.py --manifest-only
python3 scripts/verify_release.py --decode-videos --mastersThe renderer streams animation frames directly to FFmpeg. A completed
.part.mp4 is promoted atomically. Previews are derived from native 60 fps
masters; GIF timing alternates 30/40 ms delays to average 30 fps. The root
manifest describes only the distributable files.
- Physics samples use a photon-local right-handed frame with the photon along
+z, EVPA zero along+x, and photoelectric maxima parallel to EVPA. - Artwork rotates those samples into a visible laboratory frame where photons enter from the top, the gas occupies the middle, and the readout is below.
- Energy changes a distribution of polar angles; polarization angle and degree change the phase and amplitude of the azimuthal distribution.
- Microscopic emission, stylized gas transport, detector response, and reconstructed observables remain separate layers.
- The 2 keV oxygen-K frame is a declared low-beta illustrative extrapolation, and no absolute photoelectric interaction rate is visualized.
Equations, conventions, validity limits, reference implementations, and literature are maintained in CrossSectionDescription.md.
src/xpol_art/ validated physics, frames, response, and sampling
visualization/ shared visual components and scenes
scripts/ render, GIF, manifest, and release tools
figures/ canonical final PNG figures only
animations/landscape/480p30/ tracked landscape MP4/GIF previews
animations/vertical/480p30/ tracked portrait MP4/GIF previews
animations/*/1080p60/ ignored local MP4 masters
tests/ physics, renderer-contract, and release tests
docs/ detailed rendering documentation and preview assets
See CONTRIBUTING.md for development and pull requests, and RELEASING.md for the maintainer release checklist.
Source code and tests are MIT licensed. Documentation and media are CC BY 4.0; the exact scopes and suggested attribution are in LICENSES/README.md. Citation metadata is provided in CITATION.cff.


