BaryonForge.Profiles.Thermodynamic module

class BaryonForge.Profiles.Thermodynamic.Pressure(self, gas=None, darkmatterbaryon=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the gas pressure profile in halos.

This class extends SchneiderProfiles to compute the gas pressure profile within halos under the assumption of hydrostatic equilibrium. The gas pressure is derived using a total mass profile and a gas density profile. We define a pressure gradient from the assumption of hydrostatic equilibrium, and integrate to obtain the pressure.

This gives only the total gas pressure. If you want the electron pressure see ElectronPressure, and if you want to only the thermal/non-thermal pressure see NonThermalFrac.

Inherits from

SchneiderProfiles : Base class for halo profiles.

param gas:

An instance of the Gas class defining the gas density profile. If not provided, a default Gas object is created using kwargs.

type gas:

Gas, optional

param darkmatterbaryon:

An instance of the DarkMatterBaryon class defining the combined dark matter and baryonic mass profile. If not provided, a default DarkMatterBaryon object is created using kwargs.

type darkmatterbaryon:

DarkMatterBaryon, optional

param nonthermal_model:

An instance defining a model for non-thermal pressure contributions. Default is None.

type nonthermal_model:

object, optional

param **kwargs:

Additional keyword arguments passed to initialize the Gas, DarkMatterBaryon, and other parameters from SchneiderProfiles.

Notes

  • This class calculates the pressure assuming hydrostatic equilibrium, which gives:

    \[\frac{dP}{dr} = -\frac{GM(<r)\rho_{\text{gas}}(r)}{r^2}\]
    where:
    • ( G ) is the gravitational constant.

    • ( M(<r) ) is the cumulative mass within radius ( r ).

    • ( rho_{text{gas}}(r) ) is the gas density profile.

  • The gas pressure ( P(r) ) is then obtained by integrating ( dP/dr ):

    \[P(r) = \int_r^{\infty} -\frac{GM(<r')\rho_{\text{gas}}(r')}{r'^2} r' d\ln r'\]
  • The integration is performed numerically, and the result is converted to CGS units for practical applications.

  • An exponential cutoff is applied to the profile to prevent numerical overflow at large radii.

_real(cosmo, r, M, a)[source]

Computes the gas pressure profile based on the given cosmology, radii, mass, scale factor, and mass definition.

model_param_names = ['M_c', 'zeta_M_c', 'A', 'epsilon_hydro', 'theta_ej', 'a', 'mu_theta_co', 'theta_inn', 'theta_rg', 'mu_beta', 'nu_delta', 'zeta_eta_delta', 'cdelta', 'mu', 'mu_epsilon_h', 'nu_A', 'zeta_eta', 'Gamma', 'eta_delta', 'nu_eta_delta', 'nu_T_w', 'eps_fsat', 'mu_delta', 'gamma', 'nu_Gamma', 'M_theta_co', 'delta', 'M1_fsat', 'alpha_fsat', 'epsilon_h', 'M_0', 'sigma_star', 'zeta_tau_delta', 'M_gamma', 'zeta_theta_co', 'zeta_A', 'nu_eps1', 'alpha', 'alpha_nt', 'mu_gamma', 'p', 'mu_theta_ej', 'zeta_tau', 'M_theta_ej', 'M_inn', 'theta_co', 'nu_eta', 'zeta_M1', 'eps1', 'M_r', 'gamma_nt', 'nu_nt', 'tau', 'zeta_epsilon_h', 'nu_theta_ej', 'nu_tau', 'proj_cutoff', 'A_nt', 'zeta_theta_ej', 'zeta_gamma', 'nu_A_star', 'M1', 'beta', 'nu_tau_delta', 'zeta_delta', 'M_star', 'theta_out', 'nu_M_star', 'nu_gamma', 'eta_b', 'nu_epsilon_h', 'mean_molecular_weight', 'delta_fsat', 'M_delta', 'nu_theta_co', 'sigma_rg', 'nu_M_c', 'beta_r', 'epsilon', 'n', 'q', 'nu_M1', 'M1_0', 'alpha_g', 'eps2', 'M_epsilon_h', 'A_star', 'gamma_fsat', 'cutoff', 'eta', 'T_w', 'tau_delta']
class BaryonForge.Profiles.Thermodynamic.NonThermalFrac(self, alpha_nt, nu_nt, gamma_nt, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the non-thermal pressure fraction profile in halos.

This class extends SchneiderProfiles to compute the fraction of pressure that is non-thermal within halos. The non-thermal fraction is modelled in a redshift, and radius dependent manner, following Equations 15/16 in Pandey et. al 2025. This can model be applied to any profiles using simple multiplication of the initialized classes,

ThermalPressure = Pressure(**kwargs) * (1 - NonThermalFrac(**kwargs))

The real() method of ThermalPressure will then account for non-thermal pressure effects as well.

Inherits from

SchneiderProfiles : Base class for halo profiles.

param alpha_nt:

Normalization factor for the non-thermal pressure fraction.

type alpha_nt:

float

param nu_nt:

Parameter controlling the redshift dependence of the non-thermal fraction.

type nu_nt:

float

param gamma_nt:

Parameter controlling the radial dependence of the non-thermal fraction.

type gamma_nt:

float

param **kwargs:

Additional keyword arguments passed to initialize other parameters from SchneiderProfiles.

Notes

The NonThermalFrac class is used to compute the non-thermal pressure fraction, which represents the fraction of total pressure that is non-thermal (e.g., due to turbulence or magnetic fields) as a function of radius and redshift. This fraction is used to modify the total pressure profile, accounting for contributions that are not purely thermal.

The non-thermal pressure fraction ( f_{text{nt}}(r, z) ) is calculated using:

\[f_{\text{nt}}(r, z) = \alpha_{\text{nt}} \times f_z \times \left( \frac{r}{R} \right)^{\gamma_{\text{nt}}}\]
where:
  • ( alpha_{text{nt}} ) is the normalization factor.

  • ( f_z ) is the redshift-dependent factor, defined as:

    \[f_z = \min\left[(1 + z)^{\nu_{\text{nt}}}, \left(f_{\text{max}} - 1\right) \tanh\left(\nu_{\text{nt}} z\right) + 1\right]\]
  • ( R ) is the halo radius based on the mass definition.

  • ( gamma_{text{nt}} ) controls the radial dependence.

class BaryonForge.Profiles.Thermodynamic.NonThermalFracGreen20(self, mass_def=<function MassDef200c>, c_M_relation=None, use_fftlog_projection=False, padding_lo_proj=0.1, padding_hi_proj=10, n_per_decade_proj=10, r_min_int=1e-06, r_max_int=1000.0, r_steps=500, xi_mm=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the non-thermal pressure fraction profile using the Green et al. (2020) model.

Notes

The model is based on parameters calibrated to simulations and is specifically defined with respect to ( R_{200m} ), the radius within which the mean density is 200 times the mean matter density of the universe.

The non-thermal pressure fraction ( f_{text{nt}}(r) ) is calculated using:

\[f_{\text{nt}}(r) = 1 - a \left(1 + \exp\left(-\left(\frac{x}{b}\right)^c\right)\right) \left(\frac{\nu_M}{4.1}\right)^{\frac{d}{1 + \left(\frac{x}{e}\right)^f}}\]
where:
  • ( x = frac{r}{R_{200m}} )

  • ( nu_M = frac{1.686}{sigma(M_{200m})} ) is the peak height parameter.

  • ( a, b, c, d, e, f ) are model parameters calibrated to fit simulation data.

There are no free parameters in this model; it is completely specified by the halo mass and redshift.

class BaryonForge.Profiles.Thermodynamic.Temperature(self, thermalpressure=None, gasnumberdensity=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the temperature profile in halos.

The temperature is derived from the thermal pressure and the number density profiles, of a species using the ideal gas law. The temperature profile is important for understanding the thermal state of the intracluster medium and its impact on various astrophysical processes.

For this model to be correct, the input pressure must be the thermal pressure, i.e. the non-thermal pressure must have already been accounted for in the model passed to this class.

Parameters:
  • pressure (Pressure, optional) – An instance of the Pressure class defining the thermal gas pressure profile. If non-thermal pressure is relevant for your problem, it must be included in this profile; see Pressure or NonThermalFrac for more details. If this parameter is not provided, a default Pressure object is created using kwargs.

  • gasnumberdensity (GasNumberDensity, optional) – An instance of the GasNumberDensity class defining the gas number density profile. If not provided, a default GasNumberDensity object is created using kwargs.

  • **kwargs – Additional keyword arguments passed to initialize the Pressure, GasNumberDensity, and other parameters from SchneiderProfiles.

Notes

The Temperature class computes the temperature profile of the gas in halos by dividing the gas pressure by the gas number density and the Boltzmann constant. This calculation assumes the ideal gas law, which relates pressure, number density, and temperature.

The gas temperature ( T ) is calculated using:

\[T(r) = \frac{P}(r)}{n(r) \cdot k_B}\]
where:
  • ( P(r) ) is the Thermal pressure profile of a species.

  • ( n(r) ) is the number density profile of a species.

  • ( k_B ) is the Boltzmann constant (in eV).

projected(cosmo, r, M, a)[source]

Compute the projected temperature profile along the line of sight.

This method calculates the “average temperature” along the line of sight, which is a physically meaningful quantity for comparing with observations such as X-ray or Sunyaev-Zel’dovich measurements. It differs from the “integrated temperature,” which lacks physical relevance in most astrophysical contexts.

Parameters:
  • cosmo (Cosmology) – The cosmology object containing cosmological parameters.

  • r (array_like) – The projected radial distances at which to compute the profile, in units of Mpc/h.

  • M (float) – The halo mass, in units of solar masses.

  • a (float) – The scale factor of the Universe.

Returns:

prof – The projected average temperature profile, in units of eV.

Return type:

array_like

Notes

The projected temperature is computed using the ideal gas law:

\[T_{ ext{proj}}(r) = \frac{P_{ ext{proj}}(r)}{n_{ ext{proj}}(r) \cdot k_B}\]
where:
  • ( P_{ ext{proj}}(r) ) is the projected thermal pressure profile.

  • ( n_{ ext{proj}}(r) ) is the projected number density profile.

  • ( k_B ) is the Boltzmann constant (in eV).

Regions with zero gas density (( n_{ ext{proj}}(r) = 0 )) are assigned a temperature of 0 to avoid division errors, as these regions lack gas to support a meaningful temperature.

class BaryonForge.Profiles.Thermodynamic.ThermalSZ(self, pressure=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the thermal Sunyaev-Zel’dovich (tSZ) effect profile in halos.

This class extends SchneiderProfiles to compute the tSZ effect, which is caused by the inverse Compton scattering of cosmic microwave background (CMB) photons off hot electrons in the intracluster medium of galaxy clusters. The tSZ effect is represented by the Compton-y parameter, which is proportional to the line-of-sight integral of the electron pressure.

In practice, this scale uses the projected method of the input pressure object. It accounts for the right units, to provide a dimensionless compton-y parameter.

Inherits from

SchneiderProfiles : Base class for halo profiles.

param pressure:

An instance of the Pressure class defining the thermal gas pressure profile. If not provided, a default Pressure object is created using kwargs.

type pressure:

Pressure, optional

param **kwargs:

Additional keyword arguments passed to initialize the Pressure profile and other parameters from SchneiderProfiles.

Notes

The ThermalSZ class computes the tSZ effect by calculating the projected electron pressure profile along the line of sight.

  • The tSZ effect is computed by projecting the electron pressure along the line of sight:

\[y(r) = \frac{\sigma_T}{m_e c^2} \int P_{\text{e}}(r') \, dr'\]

where ( P_{text{e}}(r’) ) is the electron pressure profile.

Pgas_to_Pe(cosmo, r, M, a)[source]

Returns the conversion factor from gas pressure to electron pressure.

projected(cosmo, r, M, a)

Computes the projected tSZ profile (Compton-y parameter) based on the given cosmology, radii, mass, scale factor, and mass definition.

real(cosmo, r, M, a)

This computes the real pressure profile scaled by the same constant as the projected one. Generally not to be used unless you know what units you want.

Pgas_to_Pe(cosmo, r, M, a)[source]

Returns the precomputed conversion factor from gas pressure to electron pressure. Can be redefined by user if they wish to use a different (mass-dependent) value for this quantity.

class BaryonForge.Profiles.Thermodynamic.ElectronPressure(self, gas=None, darkmatterbaryon=None, **kwargs)[source]

Bases: Pressure

Class for computing the electron pressure profile in halos.

This class extends the Pressure class to compute the electron pressure profile from the total gas pressure. The conversion factor is ( P_{text{e}} = P_{text{th}} times P_{text{th-to-Pe}} ), where ( P_{text{th-to-Pe}} = (4 - 2Y)/(8 - 5Y), with Y = 0.24).

Inherits from

Pressure : Base class for computing gas pressure profiles in halos.

Notes

The ElectronPressure class is used to compute the electron pressure profile within halos, which is relevant for understanding the thermal Sunyaev-Zel’dovich (tSZ) effect. The conversion is done assuming pressure equilibrium between electrons and protons in a system dominated by hydrogen and helium species (hence the use of Y).

class BaryonForge.Profiles.Thermodynamic.GasNumberDensity(self, gas=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class for computing the gas number density profile in halos.

This class extends SchneiderProfiles to compute the gas number density profile within halos. The number density is derived from the gas density profile by dividing by the mean molecular weight and the mass of the proton, and then converting to proper CGS units.

Inherits from

SchneiderProfiles : Base class for halo profiles.

param gas:

An instance of the Gas class defining the gas density profile. If not provided, a default Gas object is created using kwargs.

type gas:

Gas, optional

param mean_molecular_weight:

Mean molecular weight of the gas. Default is 1.15, which is typical for ionized hydrogen with a small fraction of helium.

type mean_molecular_weight:

float, optional

param **kwargs:

Additional keyword arguments passed to initialize the Gas profile and other parameters from SchneiderProfiles.

Notes

The GasNumberDensity class is used to compute the number density of gas particles in halos, which is relevant for understanding the baryonic content of halos and for modeling various astrophysical processes, such as cooling and star formation.

The gas number density ( n_{text{gas}} ) is calculated by dividing the gas density profile ( rho_{text{gas}} ) by the mean molecular weight and the mass of the proton:

\[n_{\text{gas}}(r) = \frac{\rho_{\text{gas}}(r)}{\mu \cdot m_p}\]
where:
  • ( mu ) is the mean molecular weight of the gas.

  • ( m_p ) is the mass of the proton.

  • The result is converted to the proper units (number per cubic centimeter).

projected(cosmo, r_t, M, a)[source]

Returns the 2D projected profile as a function of cosmology, radius, halo mass and scale factor.

\[\Sigma(R)= \int dr_\parallel\, \rho(\sqrt{r_\parallel^2 + R^2})\]
Parameters:
  • cosmo (Cosmology) – a Cosmology object.

  • r_t (float or array) – transverse comoving radius in Mpc.

  • M (float or array) – halo mass in units of M_sun.

  • a (float) – scale factor.

Returns:

projected profile. The shape of the output will be (N_M, N_r) where N_r and N_m are the sizes of r and M respectively. If r or M are scalars, the corresponding dimension will be squeezed out on output.

Return type:

(float or array)

class BaryonForge.Profiles.Thermodynamic.Emissivity(self, EmissivityTable, temperature=None, metallicity=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class representing the X-ray emissivity profile of halo gas.

This class computes the radial emissivity profile by combining a gas temperature profile, a metallicity profile, and an external emissivity lookup function or table. The emissivity is evaluated as a function of the local gas temperature and metallicity at each radius.

The temperature and metallicity profiles can either be supplied directly or automatically instantiated using the Temperature and Metallicity classes with the provided keyword arguments.

See BaseThermodynamicProfile for more docstring details.

Notes

The emissivity is computed by evaluating an external emissivity function or table:

\[\epsilon(r) = \Lambda(T(r), Z(r), a)\]

where:

  • \(T(r)\) is the gas temperature profile.

  • \(Z(r)\) is the gas metallicity profile.

  • \(a\) is the cosmological scale factor.

  • \(\Lambda\) is the emissivity lookup function provided through EmissivityTable.

The emissivity table is expected to accept temperature, metallicity, and scale factor as inputs and return the corresponding emissivity. This output emissivity is intended to be in photon counts, though there is no problem if the user supplies any quantity they want.

If the temperature profile defines the attribute prof4params (used internally for parameter handling in some profile implementations), this class forwards that attribute to ensure consistent parameter handling.

Parameters:
  • EmissivityTable (callable) –

    Function or lookup table returning emissivity as a function of temperature, metallicity, and scale factor. It must have the form

    EmissivityTable(T, Z, a)

    where T and Z are arrays matching the radial grid.

  • temperature (BaseThermodynamicProfile, optional) – Temperature profile object used to compute \(T(r)\). If not provided, a default Temperature profile is created using the provided kwargs.

  • metallicity (BaseThermodynamicProfile, optional) – Metallicity profile object used to compute \(Z(r)\). If not provided, a default Metallicity profile is created using the provided kwargs.

  • **kwargs – Additional keyword arguments passed to the internally constructed Temperature and Metallicity profiles when they are not supplied.

class BaryonForge.Profiles.Thermodynamic.Metallicity(self, Z_out, Z_core, gamma_Z_core, theta_Z_core, mu_Z_out=0, mu_Z_core=0, mu_theta_Z_core=0, nu_Z_out=0, nu_Z_core=0, nu_theta_Z_core=0, M_Z_core=100000000000000.0, M_Z_out=100000000000000.0, M_theta_Z_core=100000000000000.0, zeta_Z_core=0, zeta_Z_out=0, zeta_theta_Z_core=0, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class representing a radial metallicity profile for halo gas.

This class implements a simple phenomenological metallicity model with an outer metallicity floor and a central enhancement. The metallicity profile transitions smoothly from a core-dominated value at small radii to an outer value at large radii, with optional mass, redshift, and concentration dependence for each component.

The profile is evaluated in real space as a function of comoving radius and halo mass. The characteristic scale of the metallicity core is set relative to the halo radius through theta_Z_core.

See BaseThermodynamicProfile for more docstring details.

Notes

The metallicity profile is given by

\[Z(r) = Z_{\rm out} + \frac{Z_{\rm core}}{1 + x^{\gamma_{Z,\rm core}}},\]

where

\[x = \frac{r}{\theta_{Z,\rm core} R},\]

and \(R\) is the halo radius.

The profile parameters may vary with halo mass, redshift, and concentration as

\[Z_{\rm core}(M, z, c_\Delta) = Z_{\rm core} \left(\frac{M}{M_{Z,\rm core}}\right)^{\mu_{Z,\rm core}} (1+z)^{\nu_{Z,\rm core}} c_\Delta^{\zeta_{Z,\rm core}},\]
\[Z_{\rm out}(M, z, c_\Delta) = Z_{\rm out} \left(\frac{M}{M_{Z,\rm out}}\right)^{\mu_{Z,\rm out}} (1+z)^{\nu_{Z,\rm out}} c_\Delta^{\zeta_{Z,\rm out}},\]
\[\theta_{Z,\rm core}(M, z, c_\Delta) = \theta_{Z,\rm core} \left(\frac{M}{M_{\theta Z,\rm core}}\right)^{\mu_{\theta Z,\rm core}} (1+z)^{\nu_{\theta Z,\rm core}} c_\Delta^{\zeta_{\theta Z,\rm core}}.\]

Here, \(c_\Delta\) is the halo concentration. If self.cdelta is None, this implementation defaults to \(c_\Delta = 1\), effectively disabling any concentration scaling.

Parameters:
  • Z_out (float) – Outer metallicity value approached at large radius.

  • Z_core (float) – Amplitude of the central metallicity enhancement.

  • gamma_Z_core (float) – Slope controlling how sharply the central metallicity enhancement transitions to the outer metallicity.

  • theta_Z_core (float) – Characteristic core size in units of halo radius.

  • mu_Z_out (float, optional) – Power-law mass dependence of Z_out. Default is 0.

  • mu_Z_core (float, optional) – Power-law mass dependence of Z_core. Default is 0.

  • mu_theta_Z_core (float, optional) – Power-law mass dependence of theta_Z_core. Default is 0.

  • nu_Z_out (float, optional) – Power-law redshift dependence of Z_out through \((1+z)\). Default is 0.

  • nu_Z_core (float, optional) – Power-law redshift dependence of Z_core through \((1+z)\). Default is 0.

  • nu_theta_Z_core (float, optional) – Power-law redshift dependence of theta_Z_core through \((1+z)\). Default is 0.

  • M_Z_core (float, optional) – Pivot mass for the scaling of Z_core. Default is 1e14.

  • M_Z_out (float, optional) – Pivot mass for the scaling of Z_out. Default is 1e14.

  • M_theta_Z_core (float, optional) – Pivot mass for the scaling of theta_Z_core. Default is 1e14.

  • zeta_Z_core (float, optional) – Power-law concentration dependence of Z_core. Default is 0.

  • zeta_Z_out (float, optional) – Power-law concentration dependence of Z_out. Default is 0.

  • zeta_theta_Z_core (float, optional) – Power-law concentration dependence of theta_Z_core. Default is 0.

  • **kwargs – Additional keyword arguments passed to BaseThermodynamicProfile.

class BaryonForge.Profiles.Thermodynamic.XrayCounts(self, emissivity, electronnumberdensity=None, hydrogennumberdensity=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class representing the radial X-ray count-rate profile of halo gas.

This class computes the X-ray counts profile by combining an emissivity profile with electron and hydrogen number density profiles. The resulting profile is proportional to the local X-ray emission rate per unit volume, assuming the standard dependence on the product of electron and hydrogen number densities.

The emissivity profile must be supplied explicitly. If the electron or hydrogen number density profiles are not provided, they are constructed automatically using GasNumberDensity. By default, the hydrogen number density is initialized with a mean molecular weight appropriate for hydrogen of X = 0.76. The user can alter this by supplying their own profile.

See BaseThermodynamicProfile for more docstring details.

Notes

The X-ray counts profile is computed as

\[C(r) = n_e(r)\,n_{\rm H}(r)\,\Lambda(r),\]

where:

  • \(n_e(r)\) is the electron number density profile.

  • \(n_{\rm H}(r)\) is the hydrogen number density profile.

  • \(\Lambda(r)\) is the emissivity profile returned by self.Emissivity.

In this implementation, the emissivity profile is produced by an Emissivity object, which itself will depend on gas temperature, metallicity, and scale factor.

Parameters:
  • emissivity (BaseThermodynamicProfile) – Emissivity profile object used to compute \(\Lambda(r)\).

  • electronnumberdensity (BaseThermodynamicProfile, optional) – Electron number density profile object used to compute \(n_e(r)\). If not provided, a default GasNumberDensity profile is constructed from kwargs.

  • hydrogennumberdensity (BaseThermodynamicProfile, optional) – Hydrogen number density profile object used to compute \(n_{\rm H}(r)\). If not provided, a default GasNumberDensity profile is constructed from kwargs, with mean_molecular_weight = 1/X.

  • **kwargs – Additional keyword arguments passed to internally constructed GasNumberDensity profiles.

class BaryonForge.Profiles.Thermodynamic.XraySkyCounts(self, xraycounts=None, **kwargs)[source]

Bases: BaseThermodynamicProfile

Class representing the observable X-ray sky-counts profile of halo gas.

This class converts the intrinsic X-ray volume emissivity/count profile into a profile more directly suited for observed X-ray surface brightness or sky counts. It wraps an XrayCounts profile and applies the appropriate geometric and cosmological conversion factors so that the resulting quantity corresponds to an observed line-of-sight sky signal rather than a purely local volumetric emission rate.

See BaseThermodynamicProfile for more docstring details.

Notes

The underlying XrayCounts profile is first evaluated as a local volumetric quantity proportional to

\[C(r) = n_e(r)\,n_{\rm H}(r)\,\Lambda(r),\]

where \(n_e\) is the electron number density, \(n_{\rm H}\) is the hydrogen number density, and \(\Lambda\) is the emissivity profile.

This class then applies a sequence of conversion factors to obtain a profile appropriate for observable sky counts:

\[C_{\rm sky}(r) = C(r) \times (\mathrm{Mpc \to cm}) \times a^4 \times \frac{1}{4\pi}.\]

These factors account for:

  • Line-of-sight unit conversion: the projected integral is performed in comoving Mpc, but observational X-ray quantities are typically expressed using cgs length units, so the profile is multiplied by the conversion from Mpc to cm.

  • Cosmological surface-brightness dimming: the observed signal is reduced by a factor of \((1+z)^{-4} = a^4\).

  • Solid-angle conversion: the factor \(1/(4\pi)\) converts the isotropically emitted volumetric signal into a per-steradian sky quantity.

The resulting profile is therefore more appropriate for comparison with observed X-ray surface brightness or sky-count measurements than the raw XrayCounts profile.

Parameters:
  • xraycounts (BaseThermodynamicProfile, optional) – Intrinsic X-ray counts profile to be converted into sky counts.

  • **kwargs – Additional keyword arguments passed to BaseThermodynamicProfile and, when needed, to the internally constructed XrayCounts profile.