<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5023557879394463438</id><updated>2012-01-22T18:10:43.329-08:00</updated><category term='logging'/><category term='model'/><category term='utility'/><title type='text'>SherpaBlog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-6563370194095914244</id><published>2011-12-15T12:33:00.000-08:00</published><updated>2011-12-15T12:33:55.305-08:00</updated><title type='text'>New version of Sherpa was Released Today</title><content type='html'>The new version of Sherpa was released today. There are some nice cool new feature included in this version. Bayesian Analysis package pyblocxs has been integrated into Sherpa, we added several new models including a new interface to user template models&lt;br /&gt;and we improved things. Check it out!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cxc.cfa.harvard.edu/sherpa/"&gt;http://cxc.cfa.harvard.edu/sherpa/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-6563370194095914244?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/6563370194095914244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2011/12/new-version-of-sherpa-was-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6563370194095914244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6563370194095914244'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2011/12/new-version-of-sherpa-was-released.html' title='New version of Sherpa was Released Today'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-4501514790278338741</id><published>2011-08-06T19:37:00.000-07:00</published><updated>2011-08-06T19:51:13.578-07:00</updated><title type='text'>Sherpa Talk at SciPy 2011</title><content type='html'>I gave a talk on Sherpa's methods for calculating parameter confidence last month at &lt;a href="http://www.archive.org/details/Wednesday-204-9-SherpaMethodsForCalculatingConfidenceLimitsOfModel"&gt;SciPy 2011&lt;/a&gt;.  This presentation is formatted as a sphinx generated web page similar to python4astronomers.  The page includes a benchmark fitting example, complete with Python code that describes Sherpa's confidence method, simulations, and MCMC methods uing &lt;a href="http://hea-www.harvard.edu/AstroStat/pyBLoCXS/"&gt;pyBLoCXS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;http://cxc.cfa.harvard.edu/contrib/sherpa/scipy11/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-4501514790278338741?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cxc.cfa.harvard.edu/contrib/sherpa/scipy11/' title='Sherpa Talk at SciPy 2011'/><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/4501514790278338741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2011/08/sherpa-talk-at-scipy-2011.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/4501514790278338741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/4501514790278338741'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2011/08/sherpa-talk-at-scipy-2011.html' title='Sherpa Talk at SciPy 2011'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-8988236110794643088</id><published>2011-08-06T08:21:00.000-07:00</published><updated>2011-08-06T08:27:15.270-07:00</updated><title type='text'>Advanced Sherpa and Python - talk at CIAO Workshop</title><content type='html'>Tom is giving an "Advanced Sherpa" talk at CIAO Workshop. Talk contains a lot of good hints on using Sherpa Python.&lt;br /&gt;&lt;a href="http://cxc.harvard.edu/ciao/workshop/aug11/index.html#schedule"&gt;http://cxc.harvard.edu/ciao/workshop/aug11/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-8988236110794643088?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/8988236110794643088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2011/08/advanced-sherpa-and-python-talk-at-ciao.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8988236110794643088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8988236110794643088'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2011/08/advanced-sherpa-and-python-talk-at-ciao.html' title='Advanced Sherpa and Python - talk at CIAO Workshop'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-2307083694734692986</id><published>2011-05-29T18:23:00.000-07:00</published><updated>2011-05-29T18:23:22.378-07:00</updated><title type='text'>First Quantum Computer</title><content type='html'>The first quantum computer will support Python, C++ and Java. Sherpa should be able to run on this new system and we can get the fitting results faster. Not sure when can we actually get access to this new system and check the software.&lt;br /&gt;&lt;a href="http://www.hpcwire.com/hpcwire/2011-05-26/d-wave_sells_first_quantum_computer.html?featured=top"&gt;http://www.hpcwire.com/hpcwire/2011-05-26/d-wave_sells_first_quantum_computer.html?featured=top&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-2307083694734692986?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.hpcwire.com/hpcwire/2011-05-26/d-wave_sells_first_quantum_computer.html?featured=top' title='First Quantum Computer'/><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/2307083694734692986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2011/05/first-quantum-computer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/2307083694734692986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/2307083694734692986'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2011/05/first-quantum-computer.html' title='First Quantum Computer'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-601641557364678751</id><published>2011-05-25T12:45:00.000-07:00</published><updated>2011-05-25T12:53:04.485-07:00</updated><title type='text'>Python Tutorial for Astronomers</title><content type='html'>On Monday, a group of CfA astronomers (Tom Aldcroft, Tom Robitaille, Gus Muench) and myself announced the availability of a web tutorial aimed at teaching Python to astronomers through a series of interactive workshops:&lt;br /&gt;&lt;a href="http://python4astronomers.github.com/"&gt;&lt;br /&gt;http://python4astronomers.github.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Practical Python for Astronomers is a series of hands-on workshops to explore the Python language and the analysis tools it provides. The emphasis is on using Python to solve real-world problems that astronomers are likely to encounter in research. Some features:&lt;br /&gt;&lt;br /&gt; * Workshops immediately use plotting, analysis, and file reading tools.&lt;br /&gt; * Along the way elements of the Python language are introduced.&lt;br /&gt; * Workshops are interactive using examples run by participants on their laptops.&lt;br /&gt; * Comprehensive instructions a given for installing a full Python environment.&lt;br /&gt;&lt;br /&gt;There are two goals. First is to provide tutorials suitable for self-study by those wishing to learn Python for astronomy. The greater goal is for those knowledgeable in Python to teach the workshop series at their local institutions, adapting the content as desired. To that end we have developed the content in Sphinx RestructuredText and hosted the source on github at &lt;a href="https://github.com/python4astronomers/"&gt;https://github.com/python4astronomers/&lt;/a&gt;. Anyone interested can clone the repository or download a tarball and make modifications needed to present the material locally. We would also welcome comments, fixes, or suggestions for improvement. This can be done as a Github issue or pull request, or by sending email to &lt;a href="mailto:aldcroft@head.cfa.harvard.edu"&gt;Tom Aldcroft&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The workshop material here was presented in the Spring of 2011 at the Harvard / Smithsonian Center for Astrophysics. A range of about 25 to 50 people participated in the different workshops, which were 1.5 hours in duration. One key accomplishment was installing a working Python with NumPy, SciPy, and IPython on over 50 laptops (MacOS, linux, and Windows) during a single session.&lt;br /&gt;&lt;br /&gt;Feedback and suggestions are welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-601641557364678751?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://python4astronomers.github.com/' title='Python Tutorial for Astronomers'/><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/601641557364678751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2011/05/python-tutorial-for-astronomers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/601641557364678751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/601641557364678751'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2011/05/python-tutorial-for-astronomers.html' title='Python Tutorial for Astronomers'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1320225651815391354</id><published>2010-12-16T12:52:00.000-08:00</published><updated>2010-12-16T12:54:32.991-08:00</updated><title type='text'>pyBLoCS is now on GitHub</title><content type='html'>The pyBLoCXS code base now has a proper home on GitHub!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1320225651815391354?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://github.com/brefsdal/pyblocxs' title='pyBLoCS is now on GitHub'/><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1320225651815391354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/12/pyblocs-is-now-on-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1320225651815391354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1320225651815391354'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/12/pyblocs-is-now-on-github.html' title='pyBLoCS is now on GitHub'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-5057123042054050327</id><published>2010-12-14T19:56:00.000-08:00</published><updated>2010-12-14T19:57:41.292-08:00</updated><title type='text'>External Python Packages in Sherpa</title><content type='html'>Tom just posted a nice tutorial on using Python packages in Sherpa on&lt;br /&gt;&lt;a href="http://www.astropython.org/tutorial/2010/12/External-Python-packages-in-CIAO-or-Sherpa-analysis"&gt; Astropython &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-5057123042054050327?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/5057123042054050327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/12/external-python-packages-in-sherpa.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/5057123042054050327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/5057123042054050327'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/12/external-python-packages-in-sherpa.html' title='External Python Packages in Sherpa'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-6040165151082747981</id><published>2010-11-08T13:30:00.000-08:00</published><updated>2010-11-08T13:34:32.236-08:00</updated><title type='text'>pyblocxs in Sherpa</title><content type='html'>pyblocxs: It is a Python Sherpa Extension for Bayesian Low Counts X-ray Spectral Analysis. It provides MCMC methods to explore a model parameter space and summarized the full posterior or profile posterior distributions. Computed parameter uncertainties can include calibration errors. It simulates replicate data from the posterior predictive distributions. It can test for added spectral components by computing the Likelihood Ratio Statistic on replicate data and the ppp-value.&lt;br /&gt;It has two samplers: &lt;br /&gt;(1) Metropolis-Hastings: centered on the best fit values&lt;br /&gt;(2) Metropolis-Hastings mixed with Metropolis jumping rule: centered on the current draw of parameters with the prior scale specfied as a scalar multiple of the Sherpa covar() output.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hea-www.harvard.edu/AstroStat/pyBLoCXS/index.html"&gt;http://hea-www.harvard.edu/AstroStat/pyBLoCXS/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-6040165151082747981?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/6040165151082747981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/11/pyblocxs-in-sherpa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6040165151082747981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6040165151082747981'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/11/pyblocxs-in-sherpa.html' title='pyblocxs in Sherpa'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-6361067632627839696</id><published>2010-11-06T13:03:00.000-07:00</published><updated>2011-01-14T07:09:51.579-08:00</updated><title type='text'>User-defined Model and Fit Statistic</title><content type='html'>&lt;b:skin&gt;&lt;style type="text/css"&gt;@import url(http://cxc.harvard.edu/contrib/sherpa/python-emacs.css);&lt;/style&gt;&lt;/b:skin&gt;An advanced demo for ADASS 2010 illustrating a script that incorporates a user-defined model and a user-defined fit statistic with a prior into an X-ray spectral fit.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sherpa.astro.ui&lt;/span&gt; &lt;span class="kn"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sherpa&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sherpa.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ArithmeticModel&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sherpa.stats&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;truncation_value&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyPowerLaw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ArithmeticModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;    &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    Class to characterize a power-law function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    f(x) = ampl (x/ref) ^ (-gamma)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;mypowerlaw&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gamma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;gamma&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ref&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;alwaysfrozen&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ampl&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="n"&gt;ArithmeticModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                                 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        Params&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `p`   list of ordered parameter values.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `x`   ndarray of domain values, bin midpoints or lower&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;              bin edges.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `xhi` ndarray of upper bin edges.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;        returns ndarray of calculated function values.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;xhi&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;integrated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;                                         / x_i  \(-p[0])&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;         point version, f_i(x_i) =  p[2] |------|&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;                                         \ p[1] /&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;        Params&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `p`  list of ordered parameter values.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `x`  ndarray of bin midpoints.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        returns ndarray of calculated function values at&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;                bin midpoints&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;xhi&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;integrated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xlo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;         integrated form from lower bin edge to upper edge &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;         ⌠ xhi_i              p[2]    /    /xhi \ (-p[0])     /xlo \ (-p[0]) \&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;         |      f_i(x_i) dx = ----- * |xhi |----|       - xlo |----|         |&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;         ⌡ xlo_i              1-p[0]  \    \p[1]/             \p[1]/         /&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        Params&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `p`   list of ordered parameter values.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `xlo` ndarray of lower bin edges.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        `xhi` ndarray of upper bin edges.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;        returns ndarray of integrated function values over &lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;                lower and upper bin edges.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xlo&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="n"&gt;p1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xlo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;br /&gt;        &lt;span class="n"&gt;p2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;br /&gt;        &lt;span class="k"&gt;return&lt;/span&gt;  &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;logNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sigma&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;    &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    Compute natural log of Normal distribution PDF analytically&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    Params&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `x`      x&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `mu`     mean&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `sigma`  standard deviation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    returns ln(f_X(x; mu, sigma))&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;sigma_sqr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sigma&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;sigma&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;sigma_sqr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;br /&gt;             &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mu&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sigma_sqr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# stat interface instancemethod&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calc_stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;staterror&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;              &lt;span class="n"&gt;syserror&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;    &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    Calculate the fit statistic value and an array of statistic&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    value contributions per bin.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    Params&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `data`   ndarray of observed data points&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `model`  ndarray of predicted data points&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `staterror`  ndarray of statistical error on observed data points&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `syserror`   ndarray of systematic error on observed data points&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    `weight`     ndarray of statistic weights&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sd"&gt;    returns a tuple of the fit statistic value and array of&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;            stat contributions per bin.&lt;/span&gt;&lt;br /&gt;&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;gamma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;             &lt;span class="c"&gt;# nH (abs1.nh)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;beta&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;              &lt;span class="c"&gt;# powerlaw index (p1.gamma)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;xi&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# log powerlaw norm (p1.ampl)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="n"&gt;phigamma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mugamma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;siggamma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;phibeta&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mubeta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sigbeta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;phixi&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logNormal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;muxi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sigxi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="c"&gt;# truncation_value used as an approximation for&lt;/span&gt;&lt;br /&gt;    &lt;span class="c"&gt;# non-positive values in model&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;truncation_value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;truncation_value&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="c"&gt;# Poisson log-likelihood summation&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;likelihood&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="c"&gt;# Add the prior to log-likelihood&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;prior&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phigamma&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;phibeta&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;phixi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;stat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;likelihood&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;prior&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="c"&gt;# reverse sign to minimize log-likelihood!&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ones_like&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load_pha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;3c273.pi&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyPowerLaw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xsphabs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;abs1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;mypowerlaw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load_user_stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;stat&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;calc_stat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;               &lt;span class="n"&gt;priors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mugamma&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.017&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# hyperparameters&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;mubeta&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;muxi&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mf"&gt;8.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;siggamma&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;sigbeta&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;sigxi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;abs1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nh&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# fit parameters&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br /&gt;                           &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;stat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;neldermead&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_fit_delchi&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-6361067632627839696?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/6361067632627839696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/11/user-defined-model-and-fit-statistic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6361067632627839696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6361067632627839696'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/11/user-defined-model-and-fit-statistic.html' title='User-defined Model and Fit Statistic'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1722899260350271550</id><published>2010-11-06T12:57:00.000-07:00</published><updated>2011-01-14T07:10:27.986-08:00</updated><title type='text'>Estimate Flux Errors</title><content type='html'>&lt;b:skin&gt;&lt;style type="text/css"&gt;@import url(http://cxc.harvard.edu/contrib/sherpa/python-emacs.css);&lt;/style&gt;&lt;/b:skin&gt;A demo for ADASS 2010 to estimate the integrated flux from an X-ray spectral fit using simulations.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sherpa.astro.ui&lt;/span&gt; &lt;span class="kn"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sherpa&lt;/span&gt;&lt;br /&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# load the data and fit with an absorbed power-law&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load_pha&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;3c273.pi&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;chi2datavar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xsphabs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;abs1&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xspowerlaw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;abs1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nh&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.07&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abs1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# simulate fluxes by sampling model parameters for 100 iterations.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;flux100&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sample_energy_flux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;7.&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# slice the flux column from simulation table.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flux100&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Mean:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Median:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Std Dev:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# determine 95% and 50% quantiles using numpy array sorting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;95% quantile:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;50% quantile:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fluxes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# run 7.5e3 flux simulations and bin a histogram using the result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_energy_flux_hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;7.&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;7500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;histo_prefs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;linecolor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_energy_flux&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recalc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# fit a Gaussian to the histogram&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load_arrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data1DInt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gauss1d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;integrate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_stat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;leastsq&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;overplot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# calculate sigma instead of FWHM&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;# FWHM = sigma * sqrt(8 ln 2)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;fac0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fwhm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fac0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Sigma: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Position: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;g0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# write binned histogram arrays to file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save_arrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;hist.dat&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xhi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;br /&gt;                   &lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xlo&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;xhi&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;clobber&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1722899260350271550?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1722899260350271550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/11/estimate-flux-errors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1722899260350271550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1722899260350271550'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/11/estimate-flux-errors.html' title='Estimate Flux Errors'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-3200816374676316914</id><published>2010-11-05T13:51:00.000-07:00</published><updated>2011-01-14T07:10:44.793-08:00</updated><title type='text'>Simple Simulation</title><content type='html'>&lt;b:skin&gt;&lt;style type="text/css"&gt;@import url(http://cxc.harvard.edu/contrib/sherpa/python-emacs.css);&lt;/style&gt;&lt;/b:skin&gt;A simple demo for ADASS 2010 to fake data with Poisson noise and fit.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sherpa.astro.ui&lt;/span&gt; &lt;span class="kn"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sherpa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# create simple grid [0.1, 10] with a bin size of 0.01&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dataspace1d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dstype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data1D&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# shorthand for normgauss1d model&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;gauss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normgauss1d&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# define reference model as sum of two normalized gaussians&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gauss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ref1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;gauss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ref2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# initialize parameter values&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;ref1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;ref1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fwhm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# define area under curve ref1&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;ref1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;ref2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;ref2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fwhm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# define area under curve ref2&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;ref2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ampl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_model&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# evaluate the model, add poisson noise, and populate the dataspace&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fake&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# plot faked data as 1D line plot with errorbars&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# fit the faked data with new instances of normgauss1d&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gauss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;gauss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# narrow the parameter space boundaries according to data&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;g1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;g2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thaw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_fit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Run confidence to estimate limits of best-fit parameter values&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Overplot reference model to show goodness-of-fit&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;# The reference model is show in orange compared to fitted model in red.&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ref1&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ref2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_model_plot_prefs&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s"&gt;'linecolor'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'aquamarine'&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;sherpa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;overplot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# &amp;lt;demo&amp;gt; stop&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-3200816374676316914?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/3200816374676316914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/11/simple-simulation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3200816374676316914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3200816374676316914'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/11/simple-simulation.html' title='Simple Simulation'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-8503801170446548439</id><published>2010-09-15T10:02:00.000-07:00</published><updated>2010-09-15T13:23:58.968-07:00</updated><title type='text'>Sherpa Mac Disk Image</title><content type='html'>I'm happy to announce a new deployment option for Sherpa.  The latest version of Sherpa, 4.2.2, built as a Mac disk image for OSX 10.5 Leopard using native (meaning Non-CIAO) python.org 2.6 and NumPy installations.  This experimental build is an effort to minimize the difficulties in building Sherpa's dependencies.  This build includes XSPEC 12.6.0 models (why it's so large), CIAO region file support (including FITS), CIAO dynamic grouping, and WCS support using WCSSUBS.  The user is still responsible for optional packages such as DS9, XPA, matplotlib, and pyFITS.  The goal of this project is to utilize the Mac simple GUI installer and install Sherpa as easily as the SciPy and NumPy disk images.&lt;br /&gt;&lt;br /&gt;We are currently working on a Snow Leopard/universal version with upgrades to Python 2.7 and NumPy 1.5.0.&lt;br /&gt;&lt;br /&gt;http://cxc.harvard.edu/contrib/sherpa/downloads/sherpa-4.2.3-py2.6-python.org-macosx10.5-i386.dmg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-8503801170446548439?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cxc.harvard.edu/contrib/sherpa/downloads/' title='Sherpa Mac Disk Image'/><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/8503801170446548439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/09/sherpa-mac-disk-image.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8503801170446548439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8503801170446548439'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/09/sherpa-mac-disk-image.html' title='Sherpa Mac Disk Image'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-3445558758952236065</id><published>2010-07-19T11:44:00.000-07:00</published><updated>2010-07-19T11:44:40.854-07:00</updated><title type='text'>New Sherpa Released!</title><content type='html'>New version of Sherpa was released today! &lt;br /&gt;&lt;br /&gt;The standard CIAO version is available on  &lt;a href="http://cxc.harvard.edu/sherpa/"&gt; Sherpa CIAO web page &lt;/a&gt;. The standalone version for Python users is available &lt;a href="http://cxc.harvard.edu/contrib/sherpa/"&gt; on Sherpa v2 page &lt;/a&gt;&lt;br /&gt;Many enhancements include user interface to models including the support for combination of convolved and non-convolved model expressions, advanced user models, working with PSFs and table models.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-3445558758952236065?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/3445558758952236065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/07/new-sherpa-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3445558758952236065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3445558758952236065'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/07/new-sherpa-released.html' title='New Sherpa Released!'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-3601008609103042700</id><published>2010-06-10T19:35:00.000-07:00</published><updated>2010-06-10T19:35:22.005-07:00</updated><title type='text'>Vinay's Cheat Sheet</title><content type='html'>Vinay has been writing a Sherpa &lt;a href="http://groundtruth.info/AstroStat/slog/2010/sherpa-cheat-sheet/#more-204"&gt;Cheat Sheet&lt;/a&gt; on &lt;a href="http://groundtruth.info/AstroStat/slog/"&gt;AstroStat Slog&lt;/a&gt;. This is a good list of basic "how to" tutorials for Sherpa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-3601008609103042700?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/3601008609103042700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/06/vinays-cheat-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3601008609103042700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/3601008609103042700'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/06/vinays-cheat-sheet.html' title='Vinay&apos;s Cheat Sheet'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-678897917055459422</id><published>2010-06-10T13:19:00.000-07:00</published><updated>2011-01-14T07:11:44.040-08:00</updated><title type='text'>User-defined Sherpa model types using Python Classes</title><content type='html'>Here is a quick example of a native Sherpa model (logparlaw1d) defined as a Python class.  This class can then be registered as Sherpa model type using the add_model() function (found in Sherpa 4.2.2).  The class attribute, name, can then be used as a model type within a standard Sherpa model expression.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To python users, instantiation of this class is obscured within the Sherpa model expression syntax.  The add_model() function simply adds this class to Sherpa's function factory for creating model instances.  The variable, mylogparlaw, in the local namespace is actually the Sherpa function factory.  This variable's __getattr__() method has been overloaded to create instances of MyLogParLaw using the name of the attribute requested.  Think of the following declarations as comparable.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;lp1 = mylogparlaw.lp1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;versus&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;lp1 = MyLogParLaw('lp1')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See the script below for more details&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;from sherpa.astro.ui import *&lt;br /&gt;from sherpa.models import ArithmeticModel, Parameter&lt;br /&gt;import numpy as np&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class MyLogParaLaw(ArithmeticModel):&lt;br /&gt;   """&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;               /  x \ - p[1] - p[2] * log10(x/p[0])&lt;br /&gt;   f(x) = p[3] |----|&lt;br /&gt;               \p[0]/&lt;br /&gt;&lt;br /&gt;   """&lt;br /&gt;   def __init__(self, name='mylogparlaw'):&lt;br /&gt;       # p[0]&lt;br /&gt;       self.ref = Parameter(name, 'ref', 1, alwaysfrozen=True)&lt;br /&gt;&lt;br /&gt;       # p[1]&lt;br /&gt;       self.c1 = Parameter(name, 'c1', 1)&lt;br /&gt;&lt;br /&gt;       # p[2]&lt;br /&gt;       self.c2 = Parameter(name, 'c2', 1)&lt;br /&gt;&lt;br /&gt;       # p[3]&lt;br /&gt;       self.ampl = Parameter(name, 'ampl', 1, 0)&lt;br /&gt;&lt;br /&gt;       ArithmeticModel.__init__(self, name, (self.ref,self.c1,&lt;br /&gt;                                             self.c2,self.ampl))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   def calc(self, p, xlo, xhi=None, *args, **kwargs):&lt;br /&gt;       frac = (xlo/p[0])&lt;br /&gt;       exponent = -p[1] - p[2] * np.log10(frac)&lt;br /&gt;       return p[3] * np.power(frac, exponent)&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&lt;br /&gt;   # register the class MyLogParLaw as a Sherpa model type&lt;br /&gt;   add_model(MyLogParLaw)&lt;br /&gt;&lt;br /&gt;   # Set the Sherpa model expression as the sum of MyLogParLaw&lt;br /&gt;   # and Const1D&lt;br /&gt;   set_model(mylogparlaw.lp1+const1d.c1)&lt;br /&gt;&lt;br /&gt;   # Initialize the parameter values&lt;br /&gt;   c1.c0 = 10&lt;br /&gt;   lp1.ampl = 75&lt;br /&gt;   lp1.c1 = 0.5&lt;br /&gt;   lp1.c2 = 1.75&lt;br /&gt;   lp1.ref = 2.1&lt;br /&gt;   print lp1&lt;br /&gt;&lt;br /&gt;   # Define a data space grid to be from [0.1, 10] in intervals&lt;br /&gt;   # of 0.01&lt;br /&gt;   dataspace1d(0.1,10,0.01, dstype=Data1D)&lt;br /&gt;&lt;br /&gt;   # Evaluate the model over set of initialized parameters, add&lt;br /&gt;   # poisson noise, and set as data space values.&lt;br /&gt;   fake()&lt;br /&gt;&lt;br /&gt;   # Use Chi2 with data variance as fit statistic&lt;br /&gt;   set_stat('chi2datavar')&lt;br /&gt;&lt;br /&gt;   # Set the statistical error of data space as 10% of faked&lt;br /&gt;   # data values&lt;br /&gt;   set_staterror(0.1, fractional=True)&lt;br /&gt;&lt;br /&gt;   # Plot faked data space values with statistical errorbars&lt;br /&gt;   plot_data()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jAr_Ss4apWg/TBFKz10RHJI/AAAAAAAAALg/VlLblJrLLyw/s1600/logparabola.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_jAr_Ss4apWg/TBFKz10RHJI/AAAAAAAAALg/VlLblJrLLyw/s320/logparabola.png" alt="" id="BLOGGER_PHOTO_ID_5481244475966692498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The plot of faked data should look something like the image above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-678897917055459422?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/678897917055459422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/06/user-defined-sherpa-model-types-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/678897917055459422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/678897917055459422'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/06/user-defined-sherpa-model-types-using.html' title='User-defined Sherpa model types using Python Classes'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jAr_Ss4apWg/TBFKz10RHJI/AAAAAAAAALg/VlLblJrLLyw/s72-c/logparabola.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1689094952431772934</id><published>2010-05-21T12:20:00.000-07:00</published><updated>2010-05-21T12:25:14.841-07:00</updated><title type='text'>Using a private DS9 Session in Sherpa</title><content type='html'>Currently, Sherpa uses the default DS9 session 'ds9' and this can potentially conflict with other open DS9 windows that are unrelated to Sherpa analysis.  To enable private DS9 sessions in Sherpa, consider the following work-around.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;import&lt;/span&gt; sherpa.image&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;sherpa.image.backend.DS9._DefTemplate=&lt;span style="color: rgb(255, 204, 153);"&gt;"sherpa"&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1689094952431772934?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1689094952431772934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/using-private-ds9-session-in-sherpa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1689094952431772934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1689094952431772934'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/using-private-ds9-session-in-sherpa.html' title='Using a private DS9 Session in Sherpa'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-6812731714877251157</id><published>2010-05-21T11:29:00.000-07:00</published><updated>2010-05-21T12:12:15.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='model'/><title type='text'>A very quick note on 2D user models</title><content type='html'>Our documentation currently doesn't help people out who want to create a 2D user model in Sherpa. Here's a quick run example of using &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;load_user_model()&lt;/span&gt;&lt;/span&gt; to create a flat model in Python (so a replacement for Sherpa's &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;const2d&lt;/span&gt;&lt;/span&gt; model).&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial, serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;% sherpa&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;-----------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Welcome to Sherpa: CXC's Modeling and Fitting Package&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;-----------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;CIAO 4.2 Monday, November 30, 2009&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-1&gt; def flatmod(params, x, y):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;              print("Lower left = {0},{1}".format(x[0],y[0]))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;              print("Upper right = {0},{1}".format(x[-1],y[-1]))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;              return x*0 + params[0]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-2&gt; load_user_model(flatmod, "reallyflat")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new', serif; color: rgb(51, 102, 255); "&gt;sherpa-3&gt; add_user_pars("reallyflat", ["ampl"])&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-4&gt; print(reallyflat)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;usermodel.reallyflat&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;   Param        Type          Value          Min          Max      Units&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;   -----        ----          -----          ---          ---      -----&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;   reallyflat.ampl thawed            0 -3.40282e+38  3.40282e+38           &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-5&gt; reallyflat.ampl = 2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial, serif;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;&lt;span&gt;&lt;span&gt;So here I have created the mode&lt;/span&gt;&lt;/span&gt;l &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;reallyflat&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt; which sets every pixel to the value of 2 (i.e. it ignores the coordinates of the input). As a side effect it prints out the first and last coordinate sent to it (which will be the bottom-left and top-right pixels if there are no image filters). I created the model on the fly from within Sherpa for demonstration purposes; in normal use I would write the model definition in an external file and load it in using&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;execfile()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt; or &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;import&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Now we load in an image and use the model:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-6&gt; load_data("img.fits")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-7&gt; set_source(reallyflat)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-8&gt; image_data()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-9&gt; image_model()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 1.0,1.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 421.0,367.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;&lt;div&gt;Displaying the model causes it to be evaluated, as shown above. If we use &lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;image_source()&lt;/span&gt;&lt;/span&gt; we see the same result (we have no PSF set up so there is no actual difference between the source and model views in this case).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-10&gt; image_source()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 1.0,1.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 421.0,367.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;&lt;div&gt;The default coordinate system is "logical", which matches the FITS convention, where (1,1) is the center of the bottom-left pixel and each pixel is square with a width of 1. Below we change to the "physical" system, which uses the ACIS SKY coordinates (as this is an ACIS image). Note that the coordinate values sent to the model have changed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-11&gt; set_coord("physical")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-12&gt; image_source()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 4064.0,3511.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 4484.0,3877.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-13&gt; image_model()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 4064.0,3511.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 4484.0,3877.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new', serif; color: rgb(51, 102, 255); "&gt;sherpa-14&gt; image_fit()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 4064.0,3511.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 4484.0,3877.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Lower left = 4064.0,3511.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Upper right = 4484.0,3877.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'courier new', serif;color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial, serif;color:#3366FF;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt;The &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;image_fit()&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; "&gt; &lt;span&gt;&lt;span&gt;output above shows that the model is evaluated twice; once for the model display and once to create the residual image.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An example of a slightly-more complex 2D model would be:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;def mygauss2d(pars,x,y):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;    "My version of a gaussian"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;    (sigma, ampl, xpos, ypos) = pars&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;    r2 = (x - xpos)**2 + (y - ypos)**2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;    return ampl * np.exp(-r2/(sigma*sigma))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;load_user_model(mygauss2d, "g2d")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;add_user_pars("g2d",&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;  ["sigma", "ampl", "xpos", "ypos"],&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;  [5,1,1,1], [0.1,0,0,0])&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;where I use the optional third and fourth arguments of &lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;add_user_pars()&lt;/span&gt;&lt;/span&gt; to set up both the starting and minimum values of the parameters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-6812731714877251157?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/6812731714877251157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/very-quick-note-on-2d-user-models.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6812731714877251157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6812731714877251157'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/very-quick-note-on-2d-user-models.html' title='A very quick note on 2D user models'/><author><name>Doug</name><uri>http://www.blogger.com/profile/07604199782513245179</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-5430630151265026978</id><published>2010-05-21T11:09:00.000-07:00</published><updated>2010-06-10T12:33:28.608-07:00</updated><title type='text'>Simple user-defined models using a function</title><content type='html'>Typically, users have a particular model in mind for use in Sherpa.  Here is a simple user-model example of creating a gaussian plus a constant.&lt;br /&gt;&lt;br /&gt;I define a function 'mymodel' that accepts a Python list of parameter values and a Numpy ndarray of x values.  It calculates and returns the sum of a gaussian and constant as a NumPy ndarray.&lt;br /&gt;&lt;br /&gt;I define a 1D dataspace from [0.1, 10] with a bin size of 0.01 and load the user-model function identified as 'mdl'.  Using the identifier, I populate the parameter names and initial values.&lt;br /&gt;&lt;br /&gt;Setup the model, fake the data, and plot!&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;#!/usr/bin/env python&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;&lt;br /&gt;from&lt;/span&gt; sherpa.astro.ui &lt;span style="color: rgb(204, 102, 204);"&gt;import&lt;/span&gt; *&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;import&lt;/span&gt; numpy &lt;span style="color: rgb(204, 102, 204);"&gt;as&lt;/span&gt; np&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def&lt;/span&gt; mymodel(pars, x, *args, **kwargs):&lt;/span&gt;&lt;span style="color: rgb(255, 204, 153);font-family:courier new;" &gt;&lt;br /&gt;    """&lt;/span&gt;&lt;span style="color: rgb(255, 204, 153);font-family:courier new;" &gt;&lt;br /&gt;    Evaluate a 1D Gaussian plus constant&lt;/span&gt;&lt;span style="color: rgb(255, 204, 153);font-family:courier new;" &gt;&lt;br /&gt;    pars = { fwhm, pos, ampl, const }&lt;/span&gt; &lt;span style="color: rgb(255, 204, 153);font-family:courier new;" &gt;&lt;br /&gt;    """&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;    gfactor = 4.0*np.log(2.0)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    ratio = (x - pars[1])/pars[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;    return&lt;/span&gt; pars[2] * np.exp(-gfactor * ratio * ratio) + pars[3]&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# create simple grid [0.1, 10] with a bin size of 0.01&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;dataspace1d(0.1,10,0.01,dstype=Data1D)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# load the user-model mymodel() with parameter names into&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# variable 'mdl'&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;load_user_model(mymodel,&lt;span style="color: rgb(255, 204, 153);"&gt;'mdl'&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;add_user_pars(&lt;span style="color: rgb(255, 204, 153);"&gt;'mdl'&lt;/span&gt;,[&lt;span style="color: rgb(255, 204, 153);"&gt;'fwhm'&lt;/span&gt;, &lt;span style="color: rgb(255, 204, 153);"&gt;'pos'&lt;/span&gt;, &lt;span style="color: rgb(255, 204, 153);"&gt;'ampl'&lt;/span&gt;, &lt;span style="color: rgb(255, 204, 153);"&gt;'const'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# initialize parameter values&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mdl.pos = 5.0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mdl.fwhm = 2.5&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mdl.ampl = 75&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mdl.const = 0.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# set the identifier as the associated model&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;set_model(mdl)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# evaluate, add poisson noise,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt; and populate the&lt;br /&gt;# dataspace&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;fake()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&lt;br /&gt;# plot faked data&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;plot_data()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-5430630151265026978?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/5430630151265026978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/simple-user-defined-models-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/5430630151265026978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/5430630151265026978'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/simple-user-defined-models-using.html' title='Simple user-defined models using a function'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1014193548337589408</id><published>2010-05-21T11:02:00.000-07:00</published><updated>2010-05-21T11:26:55.525-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>So, can I shut Sherpa up?</title><content type='html'>Say you want to run a bunch of Sherpa commands (maybe in a script, or in an interactive session) but don't want to see the output from the commands. What should you do?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well you can take advantage of the not-yet-documented-in-CIAO-but-really-should-be Python logging infrastructure used by Sherpa. Start with&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;import logging&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;logger = logging.getLogger("sherpa")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and then you turn off the output using one of&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;logger.setLevel(logging.WARN)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;logger.setLevel(logging.ERROR)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and turn it back on again with&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;logger.setLevel(logging.INFO)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The argument determines what severity of messages are displayed (so &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;logging.WARN&lt;/span&gt;&lt;/span&gt; means warning and above, which excludes the INFO level used for most output from Sherpa).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an example, compare the screen output for the three &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;load_data()&lt;/span&gt;&lt;/span&gt; calls below:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;% sherpa&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;-----------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;Welcome to Sherpa: CXC's Modeling and Fitting Package&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;-----------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;CIAO 4.2 Monday, November 30, 2009&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-1&gt; import logging&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-2&gt; logger = logging.getLogger("sherpa")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-3&gt; load_pha("3c273.pi")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;WARNING: systematic errors were not found in file '3c273.pi'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;statistical errors were found in file '3c273.pi' but not used; to use them, re-read with use_errors=True&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;read ARF file 3c273.arf&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;read RMF file 3c273.rmf&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;WARNING: systematic errors were not found in file '3c273_bg.pi' &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;statistical errors were found in file '3c273_bg.pi' but not used; to use them, re-read with use_errors=True&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;read background file 3c273_bg.pi&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-4&gt; logger.setLevel(logging.WARN)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-5&gt; load_pha("3c273.pi")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;WARNING: systematic errors were not found in file '3c273.pi'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;WARNING: systematic errors were not found in file '3c273_bg.pi'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-6&gt; logger.setLevel(logging.ERROR)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-7&gt; load_pha("3c273.pi")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;sherpa-8&gt; logger.setLevel(logging.INFO)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;This can be particularly useful for hiding the on-screen results of a call to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;fit()&lt;/span&gt;&lt;/span&gt; or one of the error routines such as &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;conf()&lt;/span&gt;&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;proj()&lt;/span&gt;&lt;/span&gt;; if you do this though you will probably want to use the corresponding &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;get_xxx_results &lt;/span&gt;&lt;/span&gt;routine to get at the calculated data!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can do a lot more with this "logger" object, such as re-directing the output to a file (or even to both the screen and a file). See '&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;a href="http://docs.python.org/library/logging.html"&gt;help logging&lt;/a&gt;&lt;/span&gt;' or this &lt;a href="http://plumberjack.blogspot.com/2009/09/python-logging-101.html"&gt;logging tutorial&lt;/a&gt; (one of many that are out there for you intrepid readers) for more information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1014193548337589408?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1014193548337589408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/so-can-i-shut-sherpa-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1014193548337589408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1014193548337589408'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/so-can-i-shut-sherpa-up.html' title='So, can I shut Sherpa up?'/><author><name>Doug</name><uri>http://www.blogger.com/profile/07604199782513245179</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-8802056899185237221</id><published>2010-05-21T10:12:00.000-07:00</published><updated>2010-05-21T10:57:03.887-07:00</updated><title type='text'>Fake data FAST!</title><content type='html'>Sometimes, users just what to simulate a simple model and plot.  This can be done quickly with five easy steps.  Define the grid, the model, the initial model parameter values, add noise, and plot.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(255, 102, 0);"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;&lt;br /&gt;from&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;sherpa.astro.ui &lt;span style="color: rgb(204, 102, 204);"&gt;import&lt;/span&gt; *&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;# create simple grid [0.1, 10] with a&lt;br /&gt;# bin size of 0.01&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;dataspace1d(0.1,10,0.01, dstype=Data1D)&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;br /&gt;&lt;br /&gt;# define a gaussian model plus a constant&lt;/span&gt;&lt;br /&gt;set_model(gauss1d.g1+const1d.c1)&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;br /&gt;&lt;br /&gt;# initialize parameter values&lt;/span&gt;&lt;br /&gt;g1.pos = 5&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;g1.fwhm = 2.5&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;g1.ampl = 75&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;c1.c0 = 0.1&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;# evaluate the model, add poisson noise,&lt;br /&gt;# and populate the dataspace&lt;/span&gt;&lt;br /&gt;fake()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;# plot faked data&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;plot_data()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-8802056899185237221?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/8802056899185237221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/fake-data-fast.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8802056899185237221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/8802056899185237221'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/fake-data-fast.html' title='Fake data FAST!'/><author><name>Brian</name><uri>http://www.blogger.com/profile/08101527164173303870</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1400765739219238398</id><published>2010-05-12T19:31:00.000-07:00</published><updated>2010-05-12T19:31:39.248-07:00</updated><title type='text'>New Sherpa this Summer</title><content type='html'>It looks like we will be releasing a new Sherpa version this summer. Standby for updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1400765739219238398?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1400765739219238398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/new-sherpa-this-summer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1400765739219238398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1400765739219238398'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/new-sherpa-this-summer.html' title='New Sherpa this Summer'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1149141756575293572</id><published>2010-05-11T13:48:00.000-07:00</published><updated>2010-05-11T13:48:23.895-07:00</updated><title type='text'>Installing Standalone Sherpa for Python.</title><content type='html'>Tom has put&lt;a href="http://www.astropython.org/tutorial/2010/1/Installing-Sherpa-standalone-for-X-ray-analysis"&gt; Instructions on Astropython&amp;nbsp;&lt;/a&gt; to install standalone &lt;i&gt;Sherpa&lt;/i&gt; for X-ray analysis. Note that this is mainly useful for Python users who want to import &lt;i&gt;Sherpa&lt;/i&gt; to their Python environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1149141756575293572?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1149141756575293572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/installing-standalone-sherpa-for-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1149141756575293572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1149141756575293572'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/installing-standalone-sherpa-for-python.html' title='Installing Standalone Sherpa for Python.'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-6535500990504148845</id><published>2010-05-10T15:19:00.000-07:00</published><updated>2010-05-11T04:24:02.833-07:00</updated><title type='text'>Combine Sherpa Models with Deprojected Models in Sherpa</title><content type='html'>Yesterday, I used a nice trick in Sherpa to combine &lt;i&gt;standard &lt;/i&gt;models&lt;i&gt; &lt;/i&gt;and&lt;i&gt; deprojected &lt;/i&gt;models. Using&amp;nbsp; &lt;a href="http://cxc.harvard.edu/contrib/deproject/"&gt;Deproject&lt;/a&gt; Python package in Sherpa one can fit the emission models to X-ray clusters accounting for the 3D to 2D projection effects in the data (standard "onion-peeling" technique described by Fabian et al 1981, and Kriss et al 1983). This allows for obtaining &lt;i&gt;deprojected&lt;/i&gt; temperature, density and entropy distributions in the cluster. Sometimes, a combination of &lt;i&gt;deprojected &lt;/i&gt;and &lt;i&gt;standard&lt;/i&gt; model components needs to be used and&amp;nbsp; I could use &lt;span style="color: blue; font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;get_source()&lt;/span&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt; &lt;/span&gt;and &lt;span style="color: blue; font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;set_source()&lt;/span&gt; to make such combinations. The trick was to setup the &lt;i&gt;deprojected&lt;/i&gt; model components first and then &lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;use&lt;/span&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt; get_source()&lt;/span&gt;&lt;/span&gt; to parse the model expression into &lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;a new&lt;/span&gt; &lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;set_source()&lt;/span&gt; &lt;span style="color: black;"&gt;expression where I&lt;/span&gt;&lt;span style="color: black;"&gt; added an extra model component.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;dep.set_source("xsmekal")&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_source(0,get_source(0)+powlaw1d.p1)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_source(1,get_source(1)+powlaw1d.p1)&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_source(2,get_source(2)+powlaw1d.p2)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_source(3,get_source(3)+powlaw1d.p2)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;This is a part of my script where I insert the expression for each data set by hand. Of course there must be a nicer way to do this with loops etc.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The &lt;i&gt;deprojected&lt;/i&gt; source expression is set by &lt;span style="color: blue; font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;dep.set_source()&lt;/span&gt; for all data sets as explained in the &lt;a href="http://cxc.harvard.edu/contrib/deproject/"&gt;Deproject&lt;/a&gt; documentation. Here I used just a standard XSPEC &lt;i&gt;mekal &lt;/i&gt;model.&amp;nbsp; &lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;Note that there are 2 annuli and each of them has 2 data sets. I add the same power law model component (p1 and p2) to each annulus.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;get_model()&lt;/span&gt; &lt;span style="color: black;"&gt;allows you to inspect the full model expression. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;nestedmodel ((((((((((0.00091="" (0.00125="" *&amp;nbsp;="" *="" +="" apply_rmf(apply_arf((75141.22="" instance="" model="" powlaw1d.p1)="" xsapec.xsapec_0)="" xsapec.xsapec_2))=""&gt;&lt;/nestedmodel&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-6535500990504148845?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/6535500990504148845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/05/combine-sherpa-models-with-deprojected.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6535500990504148845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/6535500990504148845'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/05/combine-sherpa-models-with-deprojected.html' title='Combine Sherpa Models with Deprojected Models in Sherpa'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-1202715635958178033</id><published>2010-04-29T15:07:00.000-07:00</published><updated>2010-04-29T18:17:30.703-07:00</updated><title type='text'>Define parameter grid and calculate statistics - steppar functionality in Sherpa</title><content type='html'>It is trivial to define a grid in Sherpa Python and then calculate the statistic values for set of par1, par2 parameters:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;low_lim1=0.1&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;up_lim1=2.0&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;nstep1=10&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;low_lim2=1.5&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;up_lim2=3.0&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;nstep2=20&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;par1_grid=numpy.linspace(low_lim1, up_lim1, nstep1)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;par2_grid=numpy.linspace(low_lim2, up_lim2, nstep2)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br style="color: blue;" /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;#Now calculate the statistics for all the parameters on the grid&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br style="color: blue;" /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;stat_vals=numpy.zeros((nstep1, nstep2))&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br style="color: blue;" /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;for i, parval1 in enumerate(par1_grid):&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_par(par1, parval1)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for j, parval2 in enumerate(par2_grid):&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_par(par2, parval2)&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stat_vals[i,j] = calc_stat()&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print '%d %.3f %d %.3f %f' % (i, parval1, j, parval2, stat_vals[i, j])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-1202715635958178033?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/1202715635958178033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/04/define-parameter-grid-and-calculated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1202715635958178033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/1202715635958178033'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/04/define-parameter-grid-and-calculated.html' title='Define parameter grid and calculate statistics - steppar functionality in Sherpa'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5023557879394463438.post-265509245503891605</id><published>2010-04-29T14:50:00.000-07:00</published><updated>2010-04-29T16:10:32.502-07:00</updated><title type='text'>Probing Parameter Space using Sampler in Sherpa</title><content type='html'>There is no fully Bayesian sampler inside Sherpa yet, however, there is a way to sample parameter space after the fit converged. The main assumption is that sampling starts from the best fit parameter values, the free parameters have Normal distributions with the scales&amp;nbsp; based on the covariance matrix with the off-diagonal elements to account for correlations.&amp;nbsp; The function "sample_energy_flux()" returns an array with sampled parameters and calculated flux for these parameters. &lt;br /&gt;&lt;br /&gt;The thread&amp;nbsp;&amp;nbsp; &lt;a href="http://cxc.harvard.edu/sherpa/threads/flux_dist/index.py.html"&gt;http://cxc.harvard.edu/sherpa/threads/flux_dist/index.py.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;describes how to use the functions to calculate the flux errors.&lt;br /&gt;&lt;br /&gt;For the parameter errors it is easy to check the distribution of parameters returned by the sample_energy_flux()&lt;br /&gt;&lt;br /&gt;Example: &lt;br /&gt;&lt;div style="background-color: white; color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;sample100=sample_energy_flux(0.5,2.,num=1000)&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="background-color: white; color: blue;"&gt;print sample100&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;[...&lt;/span&gt;&lt;/div&gt;&lt;div style="color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;[&amp;nbsp; 2.90602963e-10&amp;nbsp;&amp;nbsp; 1.10100135e+00&amp;nbsp;&amp;nbsp; 8.39761377e-01&amp;nbsp;&amp;nbsp; 7.01873798e-01&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2.35626905e+00&amp;nbsp;&amp;nbsp; 1.03667988e+00]...&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The first column contains the flux value for all the parameters in the other columns.&lt;br /&gt;&lt;br /&gt;We can easily calculate 95% bounds for a given parameter:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-100&amp;gt; print sample100[:,1]&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;----------&amp;gt; print(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;[ 1.10121073&amp;nbsp; 1.1011715&amp;nbsp;&amp;nbsp; 1.10100135&amp;nbsp; 1.10191317&amp;nbsp; 1.10233657&amp;nbsp; 1.10103386&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; 1.10360142&amp;nbsp; 1.09774949&amp;nbsp; 1.0984214&amp;nbsp;&amp;nbsp; 1.09927707&amp;nbsp; 1.10041681&amp;nbsp; 1.09919926&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-102&amp;gt; min(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0972469907219351&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-103&amp;gt; max(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.1065345259787218&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;We can&amp;nbsp; use numpy to obtain the properties of the parameter distribution:&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-104&amp;gt; numpy.median(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.1015496488552339&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-105&amp;gt; numpy.mean(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.1015685708445886&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sherpa-106&amp;gt; numpy.std(sample100[:,1])&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0015635753706038143&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;We can also sort and make a histogram and plot the distribution:&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="color: blue;"&gt;sort_par=numpy.sort(sample100[:,1])&lt;br /&gt;sort_par[0.99*len(sample100[:,1])-1]&lt;br /&gt;&lt;br /&gt;# make a histogram of parameter value and plot:&lt;br /&gt;xspace=numpy.linspace(min(sample100[:,1]),max(sample100[:,1]),30)&lt;br /&gt;xlo=xspace[:-1]&lt;br /&gt;xhi=xspace[1:]&lt;br /&gt;parhist=histogram1d(sample100[:,1],xlo,xhi)&lt;br /&gt;parhist100=parhist/1000.&lt;br /&gt;add_histogram(xlo,parhist100)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: blue; font-family: Arial,Helvetica,sans-serif;"&gt;print_window("hist.png")&lt;/div&gt;&lt;br /&gt;The histogram can be saved, but I could not place the figure into the Blogger - a known issue with the Google Blogger editor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5023557879394463438-265509245503891605?l=pysherpa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pysherpa.blogspot.com/feeds/265509245503891605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pysherpa.blogspot.com/2010/04/probing-parameter-space-using-sampler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/265509245503891605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5023557879394463438/posts/default/265509245503891605'/><link rel='alternate' type='text/html' href='http://pysherpa.blogspot.com/2010/04/probing-parameter-space-using-sampler.html' title='Probing Parameter Space using Sampler in Sherpa'/><author><name>Aneta</name><uri>http://www.blogger.com/profile/11594182568640569171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
