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:
The columns of M carry everything structural:
site symmetry – each allowed multipole function and each allowed ADP direction is one column (
O1.P20;Ti1.P40withP44+ = 0.7404536 P40folded in;O1.U22meaningU22 = 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_jholds exactly for everyx.
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¶
Refinement switches for one site. |
|
|
Functions¶
|
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 with1 <= l <= lmaxof the spec,[]for none, or a list of leading labels (['P20', 'P40']) to pick from the allowed ones.P00is 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 atx = 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 anextraone.
- 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 getSiteRefine()– 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