kT · nₑ · y
Before starting: three quantities
kT is thermal energy per particle (keV); nₑ is electron number density (cm⁻³); y is the dimensionless accumulated scattering weight experienced by CMB photons crossing the hot electrons.
METHOD NOTE · PRELIMINARY · INTRINSIC / UNCONVOLVED
This is a step-by-step, reproducible thermal Compton-y prediction constructed from saved X-ray fits. It is not a direct SZ-map measurement and has not been convolved with an instrument beam or transfer function.
01 · THE FULL CHAIN
The X-ray spectra directly provide projected temperature and projected emission measure. Three-dimensional density, pressure, and y require the explicit geometrical model below.
MOS1/MOS2 are jointly fit from 0.4–7 keV within each region/ObsID and share ICM parameters; primary-annulus points are robust aggregates of accepted ObsID fits.
Because norm is defined per arcmin², the APEC normalization directly becomes the line-of-sight ∫nₑnᴴdl.
A spherical β model fits annulus-averaged projected EM. This is a model assumption, not a direct X-ray inversion.
A smooth temperature proxy is used as the 3-D temperature, and nₑkT is integrated along the line of sight to obtain dimensionless intrinsic y.
02 · REPRODUCIBLE DERIVATION
Every equality maps to a quantity, unit, or assumption in the calculation that produced the displayed result.
kT · nₑ · y
kT is thermal energy per particle (keV); nₑ is electron number density (cm⁻³); y is the dimensionless accumulated scattering weight experienced by CMB photons crossing the hot electrons.
X-RAY DATA
For every region/ObsID: SrcApec kT and K≡norm/arcmin²; primary-annulus values are cross-ObsID aggregates. The spectral model simultaneously handles background, soft protons, and instrumental lines; Z=0.3 Z⊙ and z=0.00475 are fixed.
MODEL ASSUMPTIONS
Spherical β density, a smooth temperature proxy, nₑ=1.2nᴴ, and a line-of-sight continuation. These turn projected X-ray quantities into a 3-D pressure model.
APEC NORMALIZATION
For one annulus, the standard APEC normalization is
K = 10−14 / [4π DA²(1+z)²] · ∫ nenH dV
The integral is over that annulus's three-dimensional volume. The K used here has already been divided by the annular sky area, in arcmin⁻²: it is a surface normalization, not a total-aperture norm.
APEC → PROJECTED EM
Set dV=Dₐ² dΩ dl and divide the preceding equation by one arcmin². Dₐ² cancels exactly, giving
EMproj = ∫ nenH dl = Karcmin² · 4π(1+z)² / [10−14 Ω1 arcmin²]
Ω₁arcmin²=(π/10800)²=8.4616e-8 sr. The output EMproj is in cm⁻⁵: a line-of-sight ∫nₑnᴴdl, not a deprojected shell EM.
EM → DENSITY
Assume fully ionized cosmic-abundance gas, nₑ=1.2nᴴ, and write
ne(r) = n0[1 + (r/rc)²]−3β/2, nH = ne/1.2
The line-of-sight integral has an analytic EMproj(R). The calculation area-averages it in each real annulus, then fits n₀, r_c, and β with unweighted log₁₀ EM residuals.
EMproj(R) = (n0²/1.2) rc√π Γ(3β−1/2)/Γ(3β) · [1+(R/rc)²]1/2−3β
The current best model is n0=9.729e-4 cm⁻³, rc=203.766 kpc, β=0.973062.
The fit RMS is 0.0409 dex and the maximum absolute residual is 0.0855 dex. These are model–data scatter, not error bars.
TEMPERATURE PROXY
The seven strictly matched fixed-Z reference annuli give projected kT. To prevent one projected-temperature fluctuation from creating a spurious pressure kink, the y calculation uses only this robust power law:
kT(θ) = 1.135956 · (θ/30′)-0.224501 keV
Inside 7.91′, T is held at the boundary value (there is no R0–5 spectrum); outside 75.17′ the continuation slope is fixed to 0, so it is again constant. This T(r) is a pressure-projection proxy, not a replacement 3-D spectral fit.
PRESSURE → y
Electron pressure is Pₑ=nₑkT. The thermal-SZ definition is
y(R) = σT/(mec²) · ∫−L+L ne(√(R²+l²)) kT(√(R²+l²)) dl
With kT in keV and nₑdl in cm⁻², σT(1 keV)/(mec²)=1.301015e-27 cm² keV⁻¹. The script uses r²=R²+l² and numerically integrates from −L to +L; L=10000′ is a recorded β-model-tail cutoff, not an observed cluster edge.
CUMULATIVE APERTURE
Integrate y once more in the sky plane:
Ycyl(5′<θ<Θ) = 2π ∫5′Θ y(θ) θrad dθrad
The code computes y from 5′ to the displayed curve edge Θ and applies the trapezoid rule. Thus it is exactly Ycyl(5′<θ<Θ), not total Y inside Θ: R0–5 is intentionally absent because no retained MOS spectrum exists.
03 · NUMBERS ACTUALLY SUBSTITUTED
These values are read from the saved fits and this y calculation, not estimated from the displayed plot.
04 · CURRENT RESULT
The figure compares the fixed-Z reference and radial-Z-conditioned branches. Both use continuous beta density plus a temperature proxy; neither is a direct SZ-map measurement.

04B · DIRECT SZ-PLOT HANDOFF
Everything below is intrinsic (unconvolved) Compton-y. Convolve either model in the beam/transfer-function space of the SZ map before comparison; do not treat the unconvolved curve as a map-space profile.
INTRINSIC y(θ)
Set R=Dₐθ, r²=R²+l², and θᵣ=r/Dₐ. θᵣ in the temperature proxy is clamped to the measured-input interval, so temperature is constant inside 7.906′ and beyond 75.166′. Density has neither an additional R₅₀₀ nor a transverse cutoff. L is the numerical LOS limit.
y(θ) = 1.301015e-27 · ∫−L+L ne(r) kT(θr) dl
ne(r)=n0[1+(r/rc)²]−3β/2; kT(θr)=T30(θ̃r/30′)B
DA=20.0 Mpc = 5.81776 kpc arcmin⁻¹; L=10000′ = 58.178 Mpc.
NO FORMAL y CI
The min–max columns are a controlled abundance-condition sensitivity envelope from switching fixed-Z and radial-Z-conditioned models on the same spectra; they are not a 68% or 90% statistical error. No publishable y(θ) or Ycyl confidence interval yet exists: per-ObsID Sherpa covariance and correlated propagation through beta, temperature, and LOS integration are absent. Joel may compare the two solid model branches, but must not shade the space between them as a statistical error band.
Fixed Z=0.30 reference branch
Radial-Z-conditioned branch
PLOT TABLE · 5′–160′
The table linearly interpolates the public dense curve to standard θ; the downloadable CSV retains every point on the original calculation grid. Beyond 80′, this is only the mathematical continuation of beta density plus constant outer temperature, not direct X-ray constraint.
Download the full plotting CSV → linear interpolation in theta from the downloadable stored y-curve grid.
| θ | R | y: fixed Z=0.30 | y: radial-Z conditioned | branch min–max | conditional branch change | Ycyl fixed [sr] | Ycyl radial-Z [sr] |
|---|---|---|---|---|---|---|---|
| 5′ | 29.09 kpc | 1.97776e-6 | 2.13172e-6 | 1.97776e-6 – 2.13172e-6 | +7.8% | 0.00000e+0 | 0.00000e+0 |
| 10′ | 58.18 kpc | 1.80524e-6 | 1.85468e-6 | 1.80524e-6 – 1.85468e-6 | +2.7% | 3.77066e-11 | 3.96511e-11 |
| 20′ | 116.36 kpc | 1.37525e-6 | 1.29658e-6 | 1.29658e-6 – 1.37525e-6 | -5.7% | 1.62561e-10 | 1.61629e-10 |
| 30′ | 174.53 kpc | 1.00368e-6 | 9.30101e-7 | 9.30101e-7 – 1.00368e-6 | -7.3% | 3.17949e-10 | 3.06027e-10 |
| 40′ | 232.71 kpc | 7.30908e-7 | 7.03072e-7 | 7.03072e-7 – 7.30908e-7 | -3.8% | 4.76616e-10 | 4.55331e-10 |
| 50′ | 290.89 kpc | 5.42237e-7 | 5.56973e-7 | 5.42237e-7 – 5.56973e-7 | +2.7% | 6.26647e-10 | 6.04204e-10 |
| 60′ | 349.07 kpc | 4.13051e-7 | 4.58209e-7 | 4.13051e-7 – 4.58209e-7 | +10.9% | 7.64543e-10 | 7.51301e-10 |
| 70′ | 407.24 kpc | 3.23610e-7 | 3.88524e-7 | 3.23610e-7 – 3.88524e-7 | +20.1% | 8.90487e-10 | 8.96620e-10 |
| 80′ | 465.42 kpc | 2.61347e-7 | 3.38422e-7 | 2.61347e-7 – 3.38422e-7 | +29.5% | 1.00609e-9 | 1.04079e-9 |
| 100′ | 581.78 kpc | 1.80343e-7 | 2.68721e-7 | 1.80343e-7 – 2.68721e-7 | +49.0% | 1.21253e-9 | 1.32765e-9 |
| 120′ | 698.13 kpc | 1.31295e-7 | 2.21894e-7 | 1.31295e-7 – 2.21894e-7 | +69.0% | 1.39169e-9 | 1.61208e-9 |
| 160′ | 930.84 kpc | 7.81545e-8 | 1.63413e-7 | 7.81545e-8 – 1.63413e-7 | +109.1% | 1.68966e-9 | 2.17313e-9 |
PYTHON / MATPLOTLIB
The code downloads the tabulated public curve directly; it neither refits spectra nor recomputes y. The grey region means the difference between abundance-conditioned models only.
import numpy as np
import matplotlib.pyplot as plt
from io import StringIO
from urllib.request import Request, urlopen
url = "https://fornax-cluster-xmm.pages.dev/assets/sz/fornax_intrinsic_y_originlab_wide_v1.csv"
request = Request(url, headers={"User-Agent": "Mozilla/5.0"})
csv_text = urlopen(request).read().decode("utf-8")
d = np.genfromtxt(StringIO(csv_text), delimiter=",", names=True)
fig, ax = plt.subplots(figsize=(6.2, 4.4))
ax.plot(d["theta_arcmin"], d["y_fixed_z0p3"], lw=2.2, label="X-ray model: fixed Z=0.30")
ax.plot(d["theta_arcmin"], d["y_profilez_conditioned"], lw=2.2, label="X-ray model: radial-Z conditioned")
ax.fill_between(d["theta_arcmin"], d["y_branch_min_conditional"], d["y_branch_max_conditional"],
color="0.5", alpha=0.16, label="model-branch sensitivity (not a statistical CI)")
ax.set(xscale="log", yscale="log", xlim=(5, 160),
xlabel=r"$\theta$ [arcmin]", ylabel="intrinsic Compton y")
ax.grid(which="both", alpha=0.25)
ax.legend(frameon=False, fontsize=8)
fig.tight_layout()
plt.show()ORIGINLAB
Download the CSV, then use Data → Import from File → Text/CSV in Origin. Assign theta_arcmin as X and y_fixed_z0p3 plus y_profilez_conditioned as Y.
y_branch_min_conditional and y_branch_max_conditional are model-branch min–max only; do not assign them as Y error bars.
05 · ACTUAL X-RAY INPUTS
kT raw is the fixed-Z=0.30 aggregate over the same matched ObsID pairs; kT smooth is the proxy passed to Step 4. The radial-Z branch appears alongside it on the home-page four-panel figure and in the reproducible CSV products.
| region | radius | effective R | MOS spectra | kT raw / smooth | projected EM | annular y |
|---|---|---|---|---|---|---|
| R5-10 | 5–10′ | 46.0 kpc | 2 / 1 ObsIDs | 1.467 / 1.532 keV | 6.08e+17 cm⁻⁵ | 1.89e-6 |
| R10-20 | 10–20′ | 92.0 kpc | 13 / 7 ObsIDs | 1.370 / 1.312 keV | 3.16e+17 cm⁻⁵ | 1.57e-6 |
| R20-30 | 20–30′ | 148.3 kpc | 17 / 9 ObsIDs | 1.219 / 1.178 keV | 2.21e+17 cm⁻⁵ | 1.17e-6 |
| R30-40 | 30–40′ | 205.7 kpc | 8 / 4 ObsIDs | 1.085 / 1.095 keV | 1.15e+17 cm⁻⁵ | 8.53e-7 |
| R40-50 | 40–50′ | 263.4 kpc | 6 / 3 ObsIDs | 1.024 / 1.036 keV | 5.77e+16 cm⁻⁵ | 6.27e-7 |
| R60-70 | 60–70′ | 379.3 kpc | 2 / 1 ObsIDs | 0.999 / 0.954 keV | 1.68e+16 cm⁻⁵ | 3.64e-7 |
| R70-80 | 70–80′ | 437.3 kpc | 2 / 1 ObsIDs | 0.856 / 0.924 keV | 9.01e+15 cm⁻⁵ | 2.90e-7 |
06 · MINIMUM REPRODUCTION CHECKLIST
No PHA or event files are needed for this mathematical reproduction: use the tabulated K, kT, and the stated model convention.
Read K=SrcApec norm/arcmin² and kT for every annulus from the table.
Use Step 2 to calculate EMproj; retain the cm⁻⁵ units.
Set R=Dₐθ and fit the annulus-averaged β model to EMproj.
Use the Step-4 log–log power law for T(r), including its inner and outer continuation rules.
For each sky radius R, numerically integrate y=σT/(mec²)·2∫₀ᴸnₑ(r)kT(r)dl.
Multiply y(θ) by 2πθdθ, with θ in radians, and accumulate to get Ycyl in sr.
07 · UNCERTAINTY AND BOUNDARY
The following distinguishes future statistical propagation from systematics that need separate investigation.
The profile has been rebuilt from scalar-skyarea-corrected per-ObsID fits. The 16th–84th between-ObsID EM/kT spread is shown when available, but has not been propagated to y/Y and no full Sherpa covariance is yet quoted.
For every primary annulus, derive a full Sherpa-Hessian covariance C over every thawed parameter (including per-spectrum SP and instrumental lines). Select the marginal SrcApec (kT,norm) 2×2 block, draw correlated realizations, refit β density and smooth T, then perform the LOS integral for each draw. The 16th/84th percentiles of y form the conditional 68.27% statistical band; Ycyl is computed from every draw as well.
pj(m) ∼ N[p̂j, Cj], y68%(θ) = [P16{y(m)}, P84{y(m)}]
Uncertainty from frozen sky/SP backgrounds, azimuthal scatter and clumping, multi-temperature/projection bias, distance/spherical-geometry/outer-tail assumptions, and SZ beam/transfer function. These require separate refits or physical-sensitivity branches and must not be silently folded into the statistical band.
SCOPE AND NEXT GATE
Before comparison with an SZ map, export covariance from the corrected per-ObsID sessions, propagate a statistical band, and run explicit foreground/background, thermal-structure, and geometry systematic branches. Any map comparison must additionally include that map's beam and transfer function.