Skip to content

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:

  • AbstractProcessDefinition
  • AbstractModelDefinition
  • AbstractPhaseSpaceLayout

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_momenta method 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, and RayleighPhaseSpace conform to QEDbase.jl interfaces
  • 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.