Implement Rayleigh Scattering Process
Summary
This task involves implementing Rayleigh scattering as a new interaction process in the codebase, using the architectural abstractions provided by QEDbase.jl, specifically:
AbstractProcessDefinitionAbstractModelDefinitionAbstractPhaseSpaceLayout
Rayleigh scattering is a coherent elastic scattering process where photons scatter off bound electrons without energy loss, but with a direction change influenced by the structure factor (Rayleigh form factor).
Motivation
Rayleigh scattering is important in low-energy photon transport. Including this process allows us to simulate forward-peaked elastic scatter and material-dependent effects more accurately. It also lays the groundwork for implementing energy- and material-specific angular scattering models.
Tasks
Interface Implementation
-
Create a new RayleighProcess <: AbstractProcessDefinition -
Implement RayleighPhaseSpace <: AbstractPhaseSpaceLayout-
Describes phase space sampling strategy (e.g., angle only, no energy change) -
Provides _build_momentamethod returning respective momenta
-
Structure Factor ("Rayleigh Weight")
-
Implement material-dependent structure factor S(q, Z): -
May be tabulated or approximated analytically
-
-
Allow plugging in tabulated or parametric data from known sources (e.g., NIST, xraylib)
Acceptance Criteria
-
RayleighProcess, andRayleighPhaseSpaceconform toQEDbase.jlinterfaces -
Direction is updated correctly; energy is conserved -
Structure factor correctly influences the angular distribution -
Sampling matches known physics in the low-energy photon regime -
Unit tests confirm correct behavior for various incident photon energies and materials
Related / Future Work
-
Support for tabulated form factors from external libraries (e.g., xraylib)
Notes
The implementation should be modular and enable swapping out structure factor models easily (e.g., analytic vs. table-based). This could be done using the DifferentialCrossSection setup.