Problem
The ARTS 2-D electron susceptibility is inconsistent with the 1-D implementation in two independent ways.
1. Imaginary sign
The 1-D path uses
chiEI = -jnp.pi / (klde**2) * 1j * df
at tsadar/core/physics/form_factor.py:316, while the 2-D helper returns +pi / klde^2 * dfe at line 631 and inserts it as +1j * chiEI at line 820.
For an isotropic Maxwellian, matched projections at normalized phase velocities 0.5, 1, and 2 give matching projected EDF and real principal-value susceptibility, but Im(chi_2D) / Im(chi_1D) is approximately -1 at all three points. The 1-D sign was intentionally corrected in Avi-authored commit 242e4ed0; the 2-D path was missed.
This sign bug is real but is not by itself the small-angle resonance fix: conjugating an electron-only epsilon leaves |epsilon|^2 unchanged.
2. Drift-dependent projection geometry
At form_factor.py:809-818, the 2-D path constructs (omega * k / k^2 - ud) / vTe, replaces the signed resonance coordinate by its magnitude, and derives beta from that drift-shifted vector using atan(y/x).
For longitudinal susceptibility, the projection direction should remain khat; drift enters the signed scalar resonance
xi = (omega / |k| - ue dot khat) / vTe
A drift component perpendicular to k must not rotate the Radon projection. atan(y/x) also has an undefined 0/0 origin and NaN gradients on an axis; use atan2 where an angle is required and define the zero-vector limit.
The current project docstring says beta is the k-vector angle, which conflicts with its caller. The Va and ud frame semantics also differ between the 1-D and 2-D paths.
Acceptance criteria
Related: #124.
Problem
The ARTS 2-D electron susceptibility is inconsistent with the 1-D implementation in two independent ways.
1. Imaginary sign
The 1-D path uses
at
tsadar/core/physics/form_factor.py:316, while the 2-D helper returns+pi / klde^2 * dfeat line 631 and inserts it as+1j * chiEIat line 820.For an isotropic Maxwellian, matched projections at normalized phase velocities 0.5, 1, and 2 give matching projected EDF and real principal-value susceptibility, but
Im(chi_2D) / Im(chi_1D)is approximately-1at all three points. The 1-D sign was intentionally corrected in Avi-authored commit242e4ed0; the 2-D path was missed.This sign bug is real but is not by itself the small-angle resonance fix: conjugating an electron-only
epsilonleaves|epsilon|^2unchanged.2. Drift-dependent projection geometry
At
form_factor.py:809-818, the 2-D path constructs(omega * k / k^2 - ud) / vTe, replaces the signed resonance coordinate by its magnitude, and derivesbetafrom that drift-shifted vector usingatan(y/x).For longitudinal susceptibility, the projection direction should remain
khat; drift enters the signed scalar resonanceA drift component perpendicular to
kmust not rotate the Radon projection.atan(y/x)also has an undefined0/0origin and NaN gradients on an axis; useatan2where an angle is required and define the zero-vector limit.The current
projectdocstring saysbetais the k-vector angle, which conflicts with its caller. TheVaandudframe semantics also differ between the 1-D and 2-D paths.Acceptance criteria
khatwithatan2and retain a signedxi.k,xi=0, and finite gradients.Va/udframe convention, including multi-ion cases, so 1-D and 2-D use the same Galilean transformation.Related: #124.