— jupyter: jupytext: formats: ipynb,md text_representation: extension: .md format_name: markdown format_version: ‘1.2’ jupytext_version: 1.7.1 kernelspec: display_name: Python 3 language: python name: python3 —

Working with XSPEC models

One of the most powerful aspects of XSPEC is a huge modeling community. While in 3ML, we are focused on building a powerful and modular data analysis tool, we cannot neglect the need for many of the models thahat already exist in XSPEC and thus provide support for them via astromodels directly in 3ML.

For details on installing astromodels with XSPEC support, visit the 3ML or astromodels installation page.

Tip: astromodels / 3ML already have ZDust, absorption and APEC models built in!

Let’s explore how we can use XSPEC spectral models in 3ML.

[1]:
import warnings

warnings.simplefilter("ignore")
import numpy as np

np.seterr(all="ignore")
[1]:
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
[2]:
import matplotlib.pyplot as plt
[3]:
%%capture
from threeML import set_threeML_style
from jupyterthemes import jtplot

%matplotlib inline
jtplot.style(context="talk", fscale=1, ticks=True, grid=False)


set_threeML_style()

We do not load the models by default as this takes some time and 3ML should load quickly. However, if you need the XSPEC models, they are imported from astromodels like this:

[4]:
from astromodels.xspec.factory import *
Loading xspec models...Generating code for Xspec model agauss...
Generating code for Xspec model agnsed...
Generating code for Xspec model agnslim...
Generating code for Xspec model apec...
Generating code for Xspec model bapec...
Generating code for Xspec model bcempow...
Generating code for Xspec model bcheb6...
Generating code for Xspec model bcie...
Generating code for Xspec model bcoolflow...
Generating code for Xspec model bcph...
Generating code for Xspec model bequil...
Generating code for Xspec model bexpcheb6...
Generating code for Xspec model bfekblor...
Generating code for Xspec model bfeklor...
Generating code for Xspec model bgadem...
Generating code for Xspec model bgnei...
Generating code for Xspec model bnei...
Generating code for Xspec model bsnapec...
Generating code for Xspec model btapec...
Generating code for Xspec model bbody...
Generating code for Xspec model bbodyrad...
Generating code for Xspec model bexrav...
Generating code for Xspec model bexriv...
Generating code for Xspec model bknpower...
Generating code for Xspec model bkn2pow...
Generating code for Xspec model bmc...
Generating code for Xspec model bnpshock...
Generating code for Xspec model bpshock...
Generating code for Xspec model bremss...
Generating code for Xspec model brnei...
Generating code for Xspec model bsedov...
Generating code for Xspec model bvapec...
Generating code for Xspec model bvcempow...
Generating code for Xspec model bvcheb6...
Generating code for Xspec model bvcie...
Generating code for Xspec model bvcoolflow...
Generating code for Xspec model bvcph...
Generating code for Xspec model bvequil...
Generating code for Xspec model bvexpcheb6...
Generating code for Xspec model bvgadem...
Generating code for Xspec model bvgnei...
Generating code for Xspec model bvnei...
Generating code for Xspec model bvnpshock...
Generating code for Xspec model bvpshock...
Generating code for Xspec model bvrnei...
Generating code for Xspec model bvsedov...
Generating code for Xspec model bvtapec...
Generating code for Xspec model bvvapec...
Generating code for Xspec model bvvcie...
Generating code for Xspec model bvvgadem...
Generating code for Xspec model bvvgnei...
Generating code for Xspec model bvvnei...
Generating code for Xspec model bvvnpshock...
Generating code for Xspec model bvvpshock...
Generating code for Xspec model bvvrnei...
Generating code for Xspec model bvvsedov...
Generating code for Xspec model bvvtapec...
Generating code for Xspec model bvvwdem...
Generating code for Xspec model bvwdem...
Generating code for Xspec model bwdem...
Generating code for Xspec model c6mekl...
Generating code for Xspec model c6pmekl...
Generating code for Xspec model c6pvmkl...
Generating code for Xspec model c6vmekl...
Generating code for Xspec model carbatm...
Generating code for Xspec model cemekl...
Generating code for Xspec model cempow...
Generating code for Xspec model cevmkl...
Generating code for Xspec model cflow...
Generating code for Xspec model cheb6...
Generating code for Xspec model cie...
Generating code for Xspec model compbb...
Generating code for Xspec model compLS...
Generating code for Xspec model compPS...
Generating code for Xspec model compST...
Generating code for Xspec model compth...
Generating code for Xspec model compTT...
Generating code for Xspec model coolflow...
Generating code for Xspec model cph...
Generating code for Xspec model cplinear...
Generating code for Xspec model cutoffpl...
Generating code for Xspec model disk...
Generating code for Xspec model diskir...
Generating code for Xspec model diskbb...
Generating code for Xspec model diskline...
Generating code for Xspec model diskm...
Generating code for Xspec model disko...
Generating code for Xspec model diskpbb...
Generating code for Xspec model diskpn...
Generating code for Xspec model eebremss...
Generating code for Xspec model eplogpar...
Generating code for Xspec model eqpair...
Generating code for Xspec model eqtherm...
Generating code for Xspec model equil...
Generating code for Xspec model expdec...
Generating code for Xspec model expcheb6...
Generating code for Xspec model ezdiskbb...
Generating code for Xspec model fekblor...
Generating code for Xspec model feklor...
Generating code for Xspec model gaussian...
Generating code for Xspec model gadem...
Generating code for Xspec model gnei...
Generating code for Xspec model grad...
Generating code for Xspec model grbm...
Generating code for Xspec model hatm...
Generating code for Xspec model jet...
Generating code for Xspec model kerrbb...
Generating code for Xspec model kerrd...
Generating code for Xspec model kerrdisk...
Generating code for Xspec model kyrline...
Generating code for Xspec model laor...
Generating code for Xspec model laor2...
Generating code for Xspec model logpar...
Generating code for Xspec model lorentz...
Generating code for Xspec model meka...
Generating code for Xspec model mekal...
Generating code for Xspec model mkcflow...
Generating code for Xspec model nei...
Generating code for Xspec model nlapec...
Generating code for Xspec model npshock...
Generating code for Xspec model nsa...
Generating code for Xspec model nsagrav...
Generating code for Xspec model nsatmos...
Generating code for Xspec model nsmax...
Generating code for Xspec model nsmaxg...
Generating code for Xspec model nsx...
Generating code for Xspec model nteea...
Generating code for Xspec model nthComp...
Generating code for Xspec model optxagn...
Generating code for Xspec model optxagnf...
Generating code for Xspec model pegpwrlw...
Generating code for Xspec model pexmon...
Generating code for Xspec model pexrav...
Generating code for Xspec model pexriv...
Generating code for Xspec model plcabs...
Generating code for Xspec model powerlaw...
Generating code for Xspec model posm...
Generating code for Xspec model pshock...
Generating code for Xspec model qsosed...
Generating code for Xspec model raymond...
Generating code for Xspec model redge...
Generating code for Xspec model refsch...
Generating code for Xspec model rsapec...
Generating code for Xspec model rsgaussian...
Generating code for Xspec model rsrnei...
Generating code for Xspec model rsvapec...
Generating code for Xspec model rsvrnei...
Generating code for Xspec model rsvvapec...
Generating code for Xspec model rsvvrnei...
Generating code for Xspec model rnei...
Generating code for Xspec model sedov...
Generating code for Xspec model sirf...
Generating code for Xspec model snapec...
Generating code for Xspec model srcut...
Generating code for Xspec model sresc...
Generating code for Xspec model ssa...
Generating code for Xspec model sssed...
Generating code for Xspec model step...
Generating code for Xspec model tapec...
Generating code for Xspec model vagauss...
Generating code for Xspec model vapec...
Generating code for Xspec model vbremss...
Generating code for Xspec model vcempow...
Generating code for Xspec model vcheb6...
Generating code for Xspec model vcie...
Generating code for Xspec model vcoolflow...
Generating code for Xspec model vcph...
Generating code for Xspec model vexpcheb6...
Generating code for Xspec model vequil...
Generating code for Xspec model vgadem...
Generating code for Xspec model vgaussian...
Generating code for Xspec model vgnei...
Generating code for Xspec model vlorentz...
Generating code for Xspec model vmeka...
Generating code for Xspec model vmekal...
Generating code for Xspec model vmcflow...
Generating code for Xspec model vnei...
Generating code for Xspec model vnpshock...
Generating code for Xspec model voigt...
Generating code for Xspec model vpshock...
Generating code for Xspec model vraymond...
Generating code for Xspec model vrnei...
Generating code for Xspec model vsedov...
Generating code for Xspec model vtapec...
Generating code for Xspec model vvapec...
Generating code for Xspec model vvcie...
Generating code for Xspec model vvgadem...
Generating code for Xspec model vvgnei...
Generating code for Xspec model vvnei...
Generating code for Xspec model vvnpshock...
Generating code for Xspec model vvoigt...
Generating code for Xspec model vvpshock...
Generating code for Xspec model vvrnei...
Generating code for Xspec model vvsedov...
Generating code for Xspec model vvtapec...
Generating code for Xspec model vvwdem...
Generating code for Xspec model vwdem...
Generating code for Xspec model wdem...
Generating code for Xspec model zagauss...
Generating code for Xspec model zbbody...
Generating code for Xspec model zbfekblor...
Generating code for Xspec model zbfeklor...
Generating code for Xspec model zbknpower...
Generating code for Xspec model zbremss...
Generating code for Xspec model zcutoffpl...
Generating code for Xspec model zfekblor...
Generating code for Xspec model zfeklor...
Generating code for Xspec model zgauss...
Generating code for Xspec model zkerrbb...
Generating code for Xspec model zlogpar...
Generating code for Xspec model zlorentz...
Generating code for Xspec model zpowerlw...
Generating code for Xspec model zvlorentz...
Generating code for Xspec model zvoigt...
Generating code for Xspec model zvvoigt...
Generating code for Xspec model absori...
Generating code for Xspec model acisabs...
Generating code for Xspec model constant...
Generating code for Xspec model cabs...
Generating code for Xspec model cyclabs...
Generating code for Xspec model dust...
Generating code for Xspec model edge...
Generating code for Xspec model expabs...
Generating code for Xspec model expfac...
Generating code for Xspec model gabs...
Generating code for Xspec model heilin...
Generating code for Xspec model highecut...
Generating code for Xspec model hrefl...
Generating code for Xspec model logconst...
Generating code for Xspec model log10con...
Generating code for Xspec model lorabs...
Generating code for Xspec model lyman...
Generating code for Xspec model notch...
Generating code for Xspec model pcfabs...
Generating code for Xspec model phabs...
Generating code for Xspec model plabs...
Generating code for Xspec model pwab...
Generating code for Xspec model redden...
Generating code for Xspec model smedge...
Generating code for Xspec model spexpcut...
Generating code for Xspec model spline...
Generating code for Xspec model SSS_ice...
Generating code for Xspec model swind1...
Generating code for Xspec model TBabs...
Generating code for Xspec model TBfeo...
Generating code for Xspec model TBgas...
Generating code for Xspec model TBgrain...
Generating code for Xspec model TBvarabs...
Generating code for Xspec model TBpcf...
Generating code for Xspec model TBrel...
Generating code for Xspec model uvred...
Generating code for Xspec model varabs...
Generating code for Xspec model vgabs...
Generating code for Xspec model vlorabs...
Generating code for Xspec model voigtabs...
Generating code for Xspec model vphabs...
Generating code for Xspec model vvoigtabs...
Generating code for Xspec model wabs...
Generating code for Xspec model wndabs...
Generating code for Xspec model xion...
Generating code for Xspec model xscat...
Generating code for Xspec model zdust...
Generating code for Xspec model zedge...
Generating code for Xspec model zgabs...
Generating code for Xspec model zhighect...
Generating code for Xspec model zigm...
Generating code for Xspec model zlorabs...
Generating code for Xspec model zpcfabs...
Generating code for Xspec model zphabs...
Generating code for Xspec model zvlorabs...
Generating code for Xspec model zvoigtabs...
Generating code for Xspec model zvvoigtabs...
Generating code for Xspec model zxipab...
Generating code for Xspec model zxipcf...
Generating code for Xspec model zredden...
Generating code for Xspec model zsmdust...
Generating code for Xspec model zTBabs...
Generating code for Xspec model zvagauss...
Generating code for Xspec model zvarabs...
Generating code for Xspec model zvfeabs...
Generating code for Xspec model zvgabs...
Generating code for Xspec model zvgaussian...
Generating code for Xspec model zvphabs...
Generating code for Xspec model zwabs...
Generating code for Xspec model zwndabs...
done

The models are indexed with XS_ before the typical XSPEC model names.

[5]:
plaw = XS_powerlaw()
phabs = XS_phabs()
phabs
[5]:
  • description: The phabs model from XSpec (https://heasarc.gsfc.nasa.gov/xanadu/xspec/manual/XspecModels.html)
  • formula: $n.a.$
  • parameters:
    • nh:
      • value: 1.0
      • desc: (see https://heasarc.gsfc.nasa.gov/xanadu/xspec/manual/XspecModels.html)
      • min_value: 0.0
      • max_value: 1000000.0
      • unit:
      • is_normalization: False
      • delta: 0.001
      • free: True

The spectral models behave just as any other astromodels spectral model and can be used in combination with other astromodels spectral models.

[6]:
from astromodels import Powerlaw

am_plaw = Powerlaw()

plaw_with_abs = am_plaw * phabs


fig, ax = plt.subplots()

energy_grid = np.linspace(0.1, 10.0, 1000)

ax.loglog(energy_grid, plaw_with_abs(energy_grid))
ax.set_xlabel("energy")
ax.set_ylabel("flux")
[6]:
Text(0, 0.5, 'flux')
../_images/notebooks_xspec_models_10_1.png

XSPEC Settings

Many XSPEC models depend on external abundances, cross-sections, and cosmological parameters. We provide an interface to control these directly.

Simply import the XSPEC settings like so:

[7]:
from astromodels.xspec.xspec_settings import *

Calling the functions without arguments simply returns their current settings

[8]:
xspec_abund()
[8]:
'angr'
[9]:
xspec_xsect()
[9]:
'vern'
[10]:
xspec_cosmo()
[10]:
(70.0, 0.0, 0.7300000190734863)

To change the settings for abundance and cross-section, provide strings with the normal XSPEC naming conventions.

[11]:
xspec_abund("wilm")
xspec_abund()
 Solar Abundance Vector set to wilm:  Wilms, J., Allen, A. & McCray, R. ApJ 542 914 (2000) (abundances are set to zero for those elements not included in the paper).
[11]:
'wilm'
[12]:
xspec_xsect("bcmc")
xspec_xsect()
 Cross Section Table set to bcmc:  Balucinska-Church and McCammon, 1998
[12]:
'bcmc'

To alter the cosmological parameters, one passes either the parameters that should be changed, or all three:

[13]:
xspec_cosmo(H0=68.0)
xspec_cosmo()
[13]:
(68.0, 0.0, 0.7300000190734863)
[14]:
xspec_cosmo(H0=68.0, q0=0.1, lambda_0=70.0)
xspec_cosmo()
[14]:
(68.0, 0.10000000149011612, 70.0)