AnguloBound

class hmf.core.fits.AnguloBound(*, A=0.265, b=1.9, c=1.4, d=1.675)[source]

The Angulo et al. (2012) mass function of self-bound (SUBFIND) subhaloes.

The same form as Angulo (eq. 3 of the paper), fitted to all SUBFIND self-bound subhaloes, satellites included, rather than FoF groups. The paper notes that the abundance of \(M \sim 10^{15}\,M_\odot\) objects changes by a factor of ~2 between the two definitions (Sec. 2.2).

Parameters:
  • A (float, default 0.265) – The amplitude A.

  • b (float, default 1.9) – The exponent b.

  • c (float, default 1.4) – The exponential cut-off c.

  • d (float, default 1.675) – The scale d of sigma.

Model metadata

alias: ClassVar[str | None] = 'AnguloBound'

The short name the model is registered under, if any. Set by the alias class keyword; never inherited.

calibration_domain: ClassVar[Domain | None] = Domain(bounds=(('m', Interval(lower=73000000.0, upper=7300000000000000.0, unit=Unit("solMass / littleh"), lower_open=False, upper_open=False)), ('z', Interval(lower=0.0, upper=0.0, unit=None, lower_open=False, upper_open=False))), source="Angulo et al. 2012: MXXL + MS + MS-II at z = 0, 'about 8 decades in halo mass', 1e8-1e16 Msun (Fig. 2; Sec. 2.2), i.e. 7.3e7-7.3e15 Msun/h for their h = 0.73. Omega_m = 0.25, sigma_8 = 0.9 (Sec. 2.1). Accuracy better than 5% over most of the range (Sec. 2.2).")

Where the fit was calibrated against simulations, with its source; None for a fit that was not calibrated (e.g. an analytic one).

measured_mass_definition: ClassVar[MeasuredMassDefinition] = MeasuredMassDefinition(kind='self_bound', linking_length=None, overdensity=None, preferred=None, note='Angulo et al. 2012, Sec. 2.2: all SUBFIND self-bound subhaloes.')

The halo mass definition the fit was measured in.

modifies_dndm: ClassVar[bool] = False

Whether modify_dndm_kernel() changes the mass function (see “Post-processing the mass function” in the module documentation); if False, it is the identity.

normalized

Whether \(f\) integrates to 1 over \(\ln\sigma^{-1}\) (all mass in haloes).

parameter_source: ClassVar[str] = 'Angulo et al. 2012 (arXiv v2), eq. 3.'

The exact source (paper, version, table or equation) of the parameter defaults, e.g. “Tinker et al. 2008, ApJ 688, 709 (published), Table 2”.

references: ClassVar[tuple[str, ...]] = ('Angulo, R. E., et al., 2012. MNRAS 426, 2046. https://doi.org/10.1111/j.1365-2966.2012.21830.x',)

References to cite when the model is used, each a formatted citation.

requires: ClassVar[frozenset[str]] = frozenset({})

The inputs (from INPUTS) that fsigma() needs, besides sigma.

simulations: ClassVar[SimulationDetails | None] = SimulationDetails(box_size=<Quantity [3000.] Mpc / littleh>, n_particles=(303464448000,), omega_m=(0.25,), omega_b=(0.045,), sigma_8=(0.9,), h=(0.73,), n_s=None, softening=<Quantity [0.01] Mpc / littleh>, transfer=None, z_start=(63,), initial_conditions=('2LPT',), halo_finder=None, n_min=20, z_range=(0.0, 0.0), names=('MXXL',), notes='The fit combines MXXL with the Millennium and Millennium-II simulations (same cosmology), whose details are not given in this paper. n_s: not stated. Softening 13.7 kpc.', source='Angulo et al. 2012, Secs. 2.1-2.2.')

The simulations the fit was calibrated on (None for a fit to no simulations).

valid_domain: ClassVar[Domain] = Domain(bounds=(('sigma', Interval(lower=0.0, upper=inf, unit=None, lower_open=True, upper_open=True)),), source='sigma > 0.')

fsigma() raises outside it.

Type:

Where the formula is defined or sensible

Methods

check_required(x: FitInputs) → None

Raise if an input needed to evaluate the fit is missing from x.

Raises:

ValueError – If an input in requires (or needed to check valid_domain) is missing.

check_valid(x: FitInputs) → None

Raise if any input is outside valid_domain.

Raises:

DomainError – Always, if any value is outside the valid domain: this does not depend on any policy.

classmethod coerce(value: object) → Self

Convert a value to a model of this kind: the converter of a model field.

Parameters:

value – An instance of cls, which is returned as it is; or a name, import path or class that get() accepts, which is looked up and instantiated with its default parameters.

Returns:

An instance of cls.

Return type:

Model

Raises:
  • ModelNotFoundError – If value is a name that no model of this kind is known by.

  • TypeError – If value is of any other type, or names a class that is not a concrete subclass of cls.

Examples

>>> from hmf.core.filters import Filter, TopHat
>>> Filter.coerce("TopHat") == TopHat()
True
classmethod domain_inputs() → frozenset[str]

The inputs (besides sigma) needed to evaluate the fit and check both domains.

classmethod fields_info() → tuple[FieldInfo, ...]

Describe this class’s fields, without creating an instance.

Returns:

The name, type, default and documentation of each field.

Return type:

tuple of FieldInfo

fsigma(sigma: ArrayLike, *, z: ArrayLike | None = None, omega_m_z: ArrayLike | None = None, delta_halo: ArrayLike | None = None, delta_c: ArrayLike | None = None, n_eff: ArrayLike | None = None, m: ArrayLike | None = None) → ndarray[tuple[Any, ...], dtype[float64]]

The multiplicity function, \(f(\sigma) = \nu f(\nu)\).

m must be a Quantity (see hmf.core.units); every other input is dimensionless. Code that already has plain arrays in canonical units calls fsigma_kernel() or evaluate_fsigma() instead (see “Evaluating a fit” in the module documentation). It applies no calibration policy (see evaluate_fsigma() for that), but always checks valid_domain.

Parameters:
  • sigma – \(\sigma(m, z)\).

  • z – Redshift.

  • omega_m_z – \(\Omega_m(z)\).

  • delta_halo – The halo overdensity relative to the mean density.

  • delta_c – The critical overdensity for collapse.

  • n_eff – The effective spectral index.

  • m – The halo mass, a Quantity (e.g. in Msun_h).

Returns:

\(f(\sigma)\) (dimensionless), broadcast over the inputs.

Return type:

numpy.ndarray

Raises:
  • ValueError – If an input the fit requires is not given.

  • UnitBoundaryError – If m is not a Quantity.

  • DomainError – If any input is outside valid_domain, or makes the fit’s parameters unphysical.

fsigma_kernel(x: FitInputs) → ndarray[tuple[Any, ...], dtype[float64]]

fsigma() at kernel level, from inputs that are plain arrays.

The inputs are in canonical units (the mass in Msun/h); see hmf.core._kernels. It checks the valid domain, as fsigma() does, and applies no calibration policy (see evaluate_fsigma()).

Parameters:

x – The inputs.

Return type:

numpy.ndarray

Raises:
  • ValueError – If an input the fit requires is not in x.

  • DomainError – As for fsigma().

classmethod get(name: str | type[Model]) → type[Self]

Look up a model of this kind.

Parameters:

name – An alias ("Tinker08"), a qualified name ("hmf.core.fits:Tinker08"), an import path to a class not yet imported ("pkg.mod:Cls" or "pkg.mod.Cls"), or a class.

Returns:

The model class (not an instance). It is always a subclass of cls.

Return type:

type

Raises:
  • ModelNotFoundError – If no model of this kind is known by name, even after loading the hmf.models entry points and trying name as an import path.

  • TypeError – If name resolves to something that is not a concrete subclass of cls.

classmethod get_aliases() → Mapping[str, str]

Return a read-only mapping from alias to qualified name, for this kind.

classmethod get_models() → Mapping[str, type[Self]]

Return the registered models of this kind, by qualified name.

Plugins advertised in the hmf.models entry-point group are loaded first.

Returns:

A read-only mapping from qualified name to class. Called on a kind, it is a live view of the registry. Called on a non-kind subclass, it holds only the models that subclass it.

Return type:

Mapping

in_calibration_domain(x: FitInputs) → bool | ndarray[tuple[Any, ...], dtype[bool]]

Whether each input is inside calibration_domain.

Parameters:

x – The inputs, from inputs().

Returns:

A bool if every input is a scalar, else the broadcast array. True if the fit has no calibration domain (it is None).

Return type:

bool or numpy.ndarray of bool

Raises:

ValueError – If an input needed to check the domain was not given.

inputs(sigma: ArrayLike, *, z: ArrayLike | None = None, omega_m_z: ArrayLike | None = None, delta_halo: ArrayLike | None = None, delta_c: ArrayLike | None = None, n_eff: ArrayLike | None = None, m: ArrayLike | None = None) → FitInputs

Collect the inputs, checking that the required ones are given.

Parameters are as for fsigma() (m is a Quantity). Code that already has plain arrays in canonical units builds FitInputs directly (see “Evaluating a fit” in the module documentation).

Returns:

The inputs as plain arrays, in canonical units.

Return type:

FitInputs

Raises:

ValueError – If an input in requires (or needed to check valid_domain) is missing.

modify_dndm(m: Any, dndm: Any, *, z: ArrayLike, ngtm: Any, H0: Any, omega_m0: ArrayLike) → Any

Map the mass function computed from fsigma() to the fit’s.

The identity unless modifies_dndm (see “Post-processing the mass function” in the module documentation). Every fit takes the same arguments, whether it uses them or not. This method converts them and calls modify_dndm_kernel(), which a mass-function Stage calls directly.

Parameters:
  • m – Halo masses, a Quantity: in h-units, or physical units (converted with H0).

  • dndm – The mass function from fsigma(), a Quantity (number density per mass).

  • z – Redshift.

  • ngtm – The cumulative mass function n(>m) from fsigma(), a Quantity.

  • H0 – The Hubble constant, a scalar Quantity (e.g. 70 * H0_unit). It converts physical units, and gives h to fits whose formula is in physical units.

  • omega_m0 – The density parameter of CDM + baryons today.

Returns:

The fit’s mass function, in dndm_unit.

Return type:

Quantity

modify_dndm_kernel(m: ArrayLike, dndm: ArrayLike, *, z: ArrayLike, ngtm: ArrayLike, h: ArrayLike, omega_m0: ArrayLike) → ndarray[tuple[Any, ...], dtype[float64]]

modify_dndm() at kernel level, on plain arrays.

A pure kernel in canonical units (see hmf.core._kernels): the identity, unless the fit sets modifies_dndm (its class documentation describes the correction). All arguments broadcast. It checks the arguments that say where the mass function is evaluated (m, z, h, omega_m0), from their extent; dndm and ngtm are values it maps, and may be NaN (e.g. masked by a domain policy).

Parameters:
  • m – Halo masses, in Msun/h.

  • dndm – The mass function from fsigma(), in h^4 / (Msun Mpc^3).

  • z – Redshift.

  • ngtm – The cumulative mass function n(>m) from fsigma(), in h^3 / Mpc^3.

  • h – The dimensionless Hubble parameter, H0 / (100 km/s/Mpc).

  • omega_m0 – The density parameter of CDM + baryons today.

Returns:

The fit’s mass function, in h^4 / (Msun Mpc^3).

Return type:

numpy.ndarray

Raises:

DomainError – If an m, h or omega_m0 is not finite and > 0, or a z is not finite and >= 0.

classmethod qualified_name() → str

Return this class’s qualified name, package.module:Class.