XSConvolutionKernel

class sherpa.astro.xspec.XSConvolutionKernel(name, pars)[source] [edit on github]

Bases: XSModel

The base class for XSPEC convolution models.

The XSPEC convolution models are listed at [1].

Added in version 4.12.2.

Notes

As these models are applied to the result of other models, this model class isn’t called directly, but creates a wrapper instance (XSConvolutionModel) that is. This wrapping is done by applying the kernel to the model expression using normal function application, that is the following creates a model called mdl which applies the convolution model (in this case XScflux) to the model expression (an absorbed APEC model):

>>> cmdl = XScflux()
>>> src = XSapec()
>>> gal = XSphabs()
>>> mdl = cmdl(gal  * src)

These expressions can then be nested, so for instance you can apply a convolution model to only part of the model expression, as in:

>>> mdl = gal * cmdl(src)

References

Examples

Create an instance of the XSPEC cflux convolution model, and set its parameters:

>>> from sherpa.astro import xspec
>>> cmdl = xspec.XScflux()
>>> cmdl.emin = 0.5
>>> cmdl.emax = 7.0
>>> cmdl.lg10flux = -12.1
>>> print(cmdl)
xscflux
   Param        Type          Value          Min          Max      Units
   -----        ----          -----          ---          ---      -----
   xscflux.Emin frozen          0.5            0        1e+06        keV
   xscflux.Emax frozen           10            0        1e+06        keV
   xscflux.lg10Flux thawed          -12         -100          100        cgs

The convolution models are not evaluated directly. Instead they are applied to a model expression which you specify as the argument to the convolved model. The following creates two different models: mdl1 applies the convolution to the full model expression (absorbed powerlaw), and mdl applies the convolution to the powerlaw component and then multiplies this by the absorption model.

>>> gal = xspec.XSphabs()
>>> pl = xspec.XSpowerlaw()
>>> mdl1 = cmdl(gal * pl)
>>> mdl2 = gal * cmdl(pl)

For the XScflux use case it is important to freeze the normalization parameter of the emission model (i.e. additive component) to 1, to ensure the lg10Flux value is calculated correctly. That is:

>>> pl.norm = 1
>>> pl.norm.freeze()

Attributes Summary

cache

The maximum size of the cache.

lpars

Return any linked parameters.

ndim

A one-dimensional model.

pars

Return the parameters of the model.

thawedparhardmaxes

The hard maximum values for the thawed parameters.

thawedparhardmins

The hard minimum values for the thawed parameters.

thawedparmaxes

The maximum limits of the thawed parameters.

thawedparmins

The minimum limits of the thawed parameters.

thawedpars

The thawed parameters of the model.

version_enabled

Methods Summary

apply(outer, *otherargs, **otherkwargs)

cache_clear()

Clear the cache.

cache_status()

Display the cache status.

calc(pars, rhs, *args, **kwargs)

Evaluate the convolved model.

freeze()

Freeze any thawed parameters of the model.

get_center()

get_thawed_pars()

Return the thawed parameter objects.

guess(dep, *args, **kwargs)

Set an initial guess for the parameter values.

regrid(*args, **kwargs)

The class RegriddableModel1D allows the user to evaluate in the requested space then interpolate onto the data space.

reset()

Reset the parameter values.

set_center(*args, **kwargs)

startup([cache])

Called before a model may be evaluated multiple times.

teardown()

Called after a model may be evaluated multiple times.

thaw()

Thaw any frozen parameters of the model.

Attributes Documentation

cache = 5

The maximum size of the cache.

lpars

Return any linked parameters.

This only returns linked parameters that are not related to the model, and each parameter is not repeated.

Added in version 4.16.1.

See also

pars

Examples

By default there are no linked parameters:

>>> from sherpa.models.basic import Gauss2D
>>> mdl = Gauss2D("mdl")
>>> len(mdl.pars)
6
>>> mdl.lpars
()

Force the model to have identical xpos and ypos parameters. Since the linked parameter value (mdl.xpos) is part of the model it is not included in lpars:

>>> mdl.ypos = mdl.xpos
>>> len(mdl.pars)
6
>>> mdl.lpars
()

Add a link to allow the sigma term to be fit rather than FWHM. Since the linked parameter - here from the Const1D model - is not a part of the model it is included in lpars:

>>> import numpy as np
>>> from sherpa.models.basic import Const1D
>>> sigma = Const1D("sigma")
>>> mdl.fwhm = 2 * np.sqrt(2 * np.log(2)) * sigma.c0
>>> len(mdl.pars)
6
>>> mdl.lpars
(<Parameter 'c0' of model 'sigma'>,)
ndim: int | None = 1

A one-dimensional model.

pars

Return the parameters of the model.

This does not include any linked parameters.

Changed in version 4.16.1: The pars field can no-longer be set directly. Individual elements can still be changed.

See also

lpars

thawedparhardmaxes

The hard maximum values for the thawed parameters.

The minimum and maximum range of the parameters can be changed with thawedparmins and thawedparmaxes but only within the range given by thawedparhardmins to thawparhardmaxes.

thawedparhardmins

The hard minimum values for the thawed parameters.

The minimum and maximum range of the parameters can be changed with thawedparmins and thawedparmaxes but only within the range given by thawedparhardmins to thawparhardmaxes.

thawedparmaxes

The maximum limits of the thawed parameters.

Get or set the maximum limits of the thawed parameters of the model as a list of numbers. If there are no thawed parameters then [] is used. The ordering matches that of the pars attribute.

See also

thawedpars, thawedarhardmaxes, thawedparmins

thawedparmins

The minimum limits of the thawed parameters.

Get or set the minimum limits of the thawed parameters of the model as a list of numbers. If there are no thawed parameters then [] is used. The ordering matches that of the pars attribute.

See also

thawedpars, thawedarhardmins, thawedparmaxes

thawedpars

The thawed parameters of the model.

Get or set the thawed parameters of the model as a list of numbers. If there are no thawed parameters then [] is used. The ordering matches that of the pars attribute.

version_enabled = True

Methods Documentation

apply(outer, *otherargs, **otherkwargs) [edit on github]
cache_clear() None [edit on github]

Clear the cache.

cache_status() None [edit on github]

Display the cache status.

Information on the cache - the number of “hits”, “misses”, and “requests” - is displayed at the INFO logging level.

Examples

>>> pl.cache_status()
 powlaw1d.pl                size:    5  hits:   633  misses:   240  check=  873
calc(pars, rhs, *args, **kwargs)[source] [edit on github]

Evaluate the convolved model.

Note that this method is not cached by sherpa.models.modelCacher1d (may change in the future).

Parameters:
  • pars (sequence of numbers) – The parameters of the convolved model. The first npars parameters (where npars is the length of the objects pars attribute) are applied to the convolution model, and the remaining are passed to the rhs model.

  • rhs (sherpa.models.model.ArithmeticModel) – The model that is being convolved.

  • *args – The model grid. There should be two arrays (the low and high edges of the bin) to make sure the wrapped model is evaluated correctly.

  • **kwargs – At present all additional keyword arguments are dropped.

freeze() None [edit on github]

Freeze any thawed parameters of the model.

get_center() [edit on github]
get_thawed_pars() list[Parameter] [edit on github]

Return the thawed parameter objects.

This includes linked parameters, which complicates the min/max settings, since the range on the components of a linked parameter does not match that of the original parameter, which is an issue when the limits are exceeded.

Added in version 4.16.1.

guess(dep, *args, **kwargs) [edit on github]

Set an initial guess for the parameter values.

Attempt to set the parameter values, and ranges, for the model to match the data values. This is intended as a rough guess, so it is expected that the model is only evaluated a small number of times, if at all.

regrid(*args, **kwargs) [edit on github]

The class RegriddableModel1D allows the user to evaluate in the requested space then interpolate onto the data space. An optional argument ‘interp’ enables the user to change the interpolation method.

Examples

>>> import numpy as np
>>> from sherpa.models.basic import Box1D
>>> from sherpa.utils import linear_interp
>>> mybox = Box1D()
>>> request_space = np.arange(1, 10, 0.1)
>>> regrid_model = mybox.regrid(request_space, interp=linear_interp)
reset() None [edit on github]

Reset the parameter values.

Restores each parameter to the last value it was set to. This allows the parameters to be easily reset after a fit.

set_center(*args, **kwargs) [edit on github]
startup(cache: bool = False) None [edit on github]

Called before a model may be evaluated multiple times.

Parameters:

cache (bool, optional) – Should a cache be used when evaluating the models.

See also

teardown

teardown() None [edit on github]

Called after a model may be evaluated multiple times.

See also

startup

thaw() None [edit on github]

Thaw any frozen parameters of the model.

Those parameters that are marked as “always frozen” are skipped.