Modifier#
- class BooleanMask(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseApplies a modifier only to bins selected by a boolean mask.
- Parameters:
mask – Boolean array indicating which bins receive the modifier.
modifier – Modifier that provides the offsets and scales.
Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> hist = jnp.array([5, 20, 30]) >>> syst = evm.NormalParameter(value=0.1) >>> norm = syst.scale_log_asymmetric(up=1.1, down=0.9) >>> mask = jnp.array([True, False, True]) >>> modifier = evm.modifier.BooleanMask(mask, norm) >>> modifier(hist) Array([ 5.049494, 20. , 30.296963], dtype=float32)
- class Compose(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseCombines multiple modifiers and applies them sequentially.
- Parameters:
*modifiers – Modifiers to compose. They are flattened if nested
Composeinstances are provided.
Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> mu = evm.Parameter(value=1.1) >>> syst = evm.NormalParameter(value=0.1) >>> hist = jnp.array([10, 20, 30]) >>> composition = evm.modifier.Compose( ... mu.scale(offset=0, slope=1), ... syst.scale_log_asymmetric(up=1.1, down=0.9), ... ) >>> composition(hist) Array([11.155, 22.237, 33.318], dtype=float32)
- class Modifier(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBasePairs a parameter with an effect to build a modifier.
- Parameters:
parameter – Parameter instance that provides the nuisance strength.
effect – Effect describing how the histogram is altered.
Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> modifier = evm.Modifier( ... value=1.1, ... effect=evm.effect.Linear(offset=0.0, slope=1.0), ... ) >>> modifier(jnp.array([10, 20, 30])) Array([11., 22., 33.], dtype=float32)
- class ModifierBase(*args: Any, **kwargs: Any)[source]#
Bases:
ModuleBase class for modules that modify histogram templates.
Subclasses implement
offset_and_scale()and automatically gain a callable interface as well as support for composition via the matrix multiplication operator.Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> modifier = evm.Parameter(1.0).scale() >>> modifier(jnp.array([10.0, 20.0])) Array([10., 20.], dtype=float32)
- class Transform(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseApplies a transformation to both offset and scale of a modifier.
- Parameters:
transform_fn – Callable applied to each leaf of the offset and scale.
modifier – Modifier supplying the original offset and scale values.
Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> hist = jnp.array([5, 20, 30]) >>> syst = evm.NormalParameter(value=0.1) >>> norm = syst.scale_log_asymmetric(up=1.1, down=0.9) >>> transformed_norm = evm.modifier.Transform(jnp.sqrt, norm) >>> transformed_norm(hist) Array([ 5.024686, 20.098743, 30.148115], dtype=float32)
- class TransformOffset(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseTransforms only the offset component of another modifier.
- Parameters:
transform_fn – Callable applied to the offset leaves.
modifier – Modifier providing the original offset values.
- class TransformScale(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseTransforms only the multiplicative scale component of another modifier.
- Parameters:
transform_fn – Callable applied to the scale leaves.
modifier – Modifier providing the original scale values.
- class Where(*args: Any, **kwargs: Any)[source]#
Bases:
ModifierBaseChooses between two modifiers based on a boolean condition.
- Parameters:
condition – Boolean array indicating where to apply
modifier_true.modifier_true – Modifier evaluated where
conditionisTrue.modifier_false – Modifier evaluated where
conditionisFalse.
Examples
>>> import jax.numpy as jnp >>> import evermore as evm >>> hist = jnp.array([5, 20, 30]) >>> syst = evm.NormalParameter(value=0.1) >>> norm = syst.scale_log_asymmetric(up=jnp.array([1.1]), down=jnp.array([0.9])) >>> shape = syst.morphing( ... up_template=jnp.array([7, 22, 31]), ... down_template=jnp.array([4, 16, 27]), ... ) >>> modifier = evm.modifier.Where(hist < 10, norm, shape) >>> modifier(hist) Array([ 5.049494, 20.281374, 30.181376], dtype=float32)