Chandra X-Ray Observatory (CXC)
Skip to the navigation links
Last modified: 11 December 2012

How can I define my own fit statistic in Sherpa?


An interface for adding user-defined statistic functions in Sherpa became available with the CIAO 4.4 release: load_user_stat. This function accommodates user-defined functions for a statistic and statistical errors, in addition to defining a list of model parameters and hyperparameters for prior distributions (if prior desired).

For example, a simple user-defined statistic in Python Sherpa would look like this:

load_user_stat(statname, calc_stat_func, calc_err_func=None, priors={})

sherpa> def my_stat_func(data, model, staterror, syserror=None, weight=None): 
           # A simple function to replicate χ2
	       fvec = ((data - model) / staterror)**2
	       stat = fvec.sum()
	       return (stat, fvec)

sherpa> def my_staterr_func(data):
           # A simple staterror function
           return numpy.sqrt(data)

sherpa> load_user_stat("mystat", my_stat_func, my_staterr_func)

sherpa> set_stat(mystat)

And a more complex user-defined statistic, with prior distributions, would look like this:

sherpa> def my_stat_func(data, model, staterror=None, syserror=None, weight=None):
			...
			return (stat, fvec)

sherpa> load_user_stat("mystat", my_stat_func, priors=dict(mugamma=0.017, ..., gamma=abs1.nh, ... ))

sherpa> set_stat(mystat)

In these examples, 'stat' is a scalar statistic value and 'fvec' is an array of the statistic contributions of each bin. This method caters to both types of optimization methods in Sherpa: levmar expects the statistic contribution per bin, whereas simplex and moncar expect a single scalar statistic value.



Last modified: 11 December 2012
CXC logo

The Chandra X-Ray Center (CXC) is operated for NASA by the Smithsonian Astrophysical Observatory. 60 Garden Street, Cambridge, MA 02138 USA.   Email: cxcweb@head.cfa.harvard.edu Smithsonian Institution, Copyright © 1998-2012. All rights reserved.