Last modified: 18 December 2023

How can I assign XSPEC-style numbering to Sherpa model parameters for use in my script?


Model parameters are identified by names such as "abs1.nH" or "pl.gamma" in Sherpa, but sometimes it is useful to reference them by number instead - e.g., parameters 1, 2, 3, 4 - in order to easily manipulate them within a script. Model parameter names may be replaced by numbers in Sherpa as follows:

sherpa> load_data('pha.fits')
sherpa> set_model(xswabs.wabs1 * xspowerlaw.pow1)

sherpa> show_model()
apply_rmf(apply_arf((3709.22913978 * (xswabs.wabs1 * xspowerlaw.pow1))))
   Param        Type          Value          Min          Max      Units
   -----        ----          -----          ---          ---      -----
   wabs1.nH     thawed            1            0       100000 10^22 atoms / cm^2
   pow1.PhoIndex thawed            1           -2            9           
   pow1.norm    thawed            1            0        1e+24      

sherpa> mdl = get_model()
sherpa> mdl.pars
         
(<Parameter 'nH' of model 'wabs1'>,
 <Parameter 'PhoIndex' of model 'pow1'>,
 <Parameter 'norm' of model 'pow1'>)


sherpa> parnums = (1, 2, 3)
sherpa> for par, parnum in zip(mdl.pars, parnums):
            par.name = parnum

sherpa> mdl.pars

(<Parameter '1' of model 'wabs1'>,
 <Parameter '2' of model 'pow1'>,
 <Parameter '3' of model 'pow1'>)

In this example, the "mdl" model parameters "nH", "PhoIndex", and "norm" are replaced with IDs "1","2", and "3", respectively.