pyextal.jaxMultipole.params

Which physical parameters are refined, and how they are tied.

The model evaluates a full physical vector p (jaxMultipole.model.Layout). A refinement varies a much smaller vector x, mapped linearly:

\[\mathbf p = \mathbf p_0 + M \mathbf x .\]

The columns of M carry everything structural:

  • site symmetry – each allowed multipole function and each allowed ADP direction is one column (O1.P20; Ti1.P40 with P44+ = 0.7404536 P40 folded in; O1.U22 meaning U22 = U33), so the refinement cannot leave the symmetry-allowed subspace;

  • freezing – a parameter without a column stays at p0;

  • electroneutrality – one valence population is made dependent, so that sum_j occ_j mult_j (P_c + P_v + P00) = sum_j occ_j mult_j Z_j holds exactly for every x.

Each column is named after the leading coefficient of its basis vector, so the refined values read as ordinary P_lm and U_ij. Covariances map back as M C_x M^T.

d-orbital populations

On a cubic transition-metal site (m-3m, -43m, …) the d shell’s population and its cubic hexadecapole can be refined as the electrons per eg and per t2g orbital instead (SiteRefine(dpop=True); Holladay, Leung & Coppens 1983):

Pv(d) = 2 n_eg + 3 n_t2g, P40 = 0.214942 (2 n_eg - 2 n_t2g),

with P44+ = 0.7404536 P40. Bounds keep both populations between 0 and 2, so a fit can no longer reach the negative orbital populations an unconstrained P40 produces on weak data. The two columns are named <site>.n_eg and <site>.n_t2g; their values are ParameterMap.extra[name] + x.

Classes

SiteRefine

Refinement switches for one site.

ParameterMap

p = p0 + M x.

Functions

build_parameter_map(model[, refine, neutral, ...])

Assembles the free parameters of a refinement.

Module Contents

class pyextal.jaxMultipole.params.SiteRefine

Refinement switches for one site.

Variables:
  • Pv (bool | list) – Refine the valence population(s); a list of names (['Pv_3d']) refines only those shells.

  • kappa (bool) – Refine kappa.

  • kappa_p (bool) – Refine kappa’.

  • multipoles (str | list) – 'allowed' for every symmetry-allowed function with 1 <= l <= lmax of the spec, [] for none, or a list of leading labels (['P20', 'P40']) to pick from the allowed ones. P00 is only refined when named explicitly.

  • U (bool) – Refine the symmetry-allowed U_ij.

  • dpop (bool) – Refine the d shell as eg / t2g orbital populations (cubic sites only; replaces that shell’s Pv and the l = 4 function).

Pv: bool = True
kappa: bool = True
kappa_p: bool = False
multipoles: object = 'allowed'
U: bool = True
dpop: bool = False
class pyextal.jaxMultipole.params.ParameterMap

p = p0 + M x.

Variables:
  • names (list[str]) – Free-parameter names, one per column of M.

  • p0 (np.ndarray) – Physical starting vector.

  • M (np.ndarray) – (len(p0), len(names)).

  • upper (lower,) – Box bounds on x.

  • x0 (np.ndarray) – Starting x (zeros unless the start was shifted).

  • dependent (str | None) – The population eliminated by neutrality.

  • layout (Layout) – The model’s layout, for name look-ups.

  • extra (dict) – Free parameters that are not themselves physical layout entries (n_eg, n_t2g) -> their value at x = 0.

names: list
p0: numpy.ndarray
M: numpy.ndarray
lower: numpy.ndarray
upper: numpy.ndarray
x0: numpy.ndarray
dependent: str = None
layout: object = None
extra: dict
__len__()
p(x)
p_cov(cov_x)
value(x, name)

A physical parameter, e.g. 'O1.U33' or 'Sr1.Pv', or an extra one.

pyextal.jaxMultipole.params.build_parameter_map(model, refine=None, neutral=True, dependent=None, start=None)

Assembles the free parameters of a refinement.

Parameters:
  • model (MultipoleModel) – The model.

  • refine (dict, optional) – site label -> SiteRefine (or a dict of its fields). Sites not listed get SiteRefine() – everything allowed, except kappa’ – while 'cm' sites refine their ADPs only.

  • neutral (bool) – Enforce electroneutrality.

  • dependent (str, optional) – The population to eliminate, e.g. 'O1.Pv'; the last refined one by default.

  • start (dict, optional) – Physical starting values overriding the model’s p0 ({'O1.Pv': 6.4, 'Ti1.kappa': 1.02}).

Returns:

ParameterMap