py21cmfast.wrapper.perturb_field(*, redshift, init_boxes=None, user_params=None, cosmo_params=None, random_seed=None, regenerate=None, write=None, direc=None, hooks: dict[Callable, dict[str, Any]] | None = None, **global_kwargs) PerturbedField[source]

Compute a perturbed field at a given redshift.

  • redshift (float) – The redshift at which to compute the perturbed field.

  • init_boxes (InitialConditions, optional) – If given, these initial conditions boxes will be used, otherwise initial conditions will be generated. If given, the user and cosmo params will be set from this object.

  • user_params (UserParams, optional) – Defines the overall options and parameters of the run.

  • cosmo_params (CosmoParams, optional) – Defines the cosmological parameters used to compute initial conditions.

  • **global_kwargs – Any attributes for GlobalParams. This will temporarily set global attributes for the duration of the function. Note that arguments will be treated as case-insensitive.



Other Parameters:

regenerate, write, direc, random_seed – See docs of initial_conditions() for more information.


The simplest method is just to give a redshift:

>>> field = perturb_field(7.0)
>>> print(field.density)

Doing so will internally call the initial_conditions() function. If initial conditions have already been calculated, this can be avoided by passing them:

>>> init_boxes = initial_conditions()
>>> field7 = perturb_field(7.0, init_boxes)
>>> field8 = perturb_field(8.0, init_boxes)

The user and cosmo parameter structures are by default inferred from the init_boxes, so that the following is consistent:

>>> init_boxes = initial_conditions(user_params= UserParams(HII_DIM=1000))
>>> field7 = perturb_field(7.0, init_boxes)

If init_boxes is not passed, then these parameters can be directly passed:

>>> field7 = perturb_field(7.0, user_params=UserParams(HII_DIM=1000))