— 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 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 bremss...
Generating code for Xspec model brnei...
Generating code for Xspec model bvapec...
Generating code for Xspec model bvrnei...
Generating code for Xspec model bvtapec...
Generating code for Xspec model bvvapec...
Generating code for Xspec model bvvrnei...
Generating code for Xspec model bvvtapec...
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 cevmkl...
Generating code for Xspec model cflow...
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 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 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 ezdiskbb...
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 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 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 step...
Generating code for Xspec model tapec...
Generating code for Xspec model vapec...
Generating code for Xspec model vbremss...
Generating code for Xspec model vcph...
Generating code for Xspec model vequil...
Generating code for Xspec model vgadem...
Generating code for Xspec model vgnei...
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 vvgnei...
Generating code for Xspec model vvnei...
Generating code for Xspec model vvnpshock...
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 zbknpower...
Generating code for Xspec model zbremss...
Generating code for Xspec model zcutoffpl...
Generating code for Xspec model zgauss...
Generating code for Xspec model zkerrbb...
Generating code for Xspec model zlogpar...
Generating code for Xspec model zpowerlw...
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 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 vphabs...
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 zhighect...
Generating code for Xspec model zigm...
Generating code for Xspec model zpcfabs...
Generating code for Xspec model zphabs...
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 zvarabs...
Generating code for Xspec model zvfeabs...
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)