source: sasview/_modules/park/peaks.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 46.2 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>park.peaks &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../index.html" />
28    <link rel="up" title="Module code" href="../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for park.peaks</h1><div class="highlight"><pre>
51<span class="c"># This program is public domain</span>
52<span class="sd">&quot;&quot;&quot;  </span>
53<span class="sd">A park model implementing a multipeak fitter.</span>
54
55<span class="sd">*** WARNING *** this example was used to inform the design process,</span>
56<span class="sd">and has not yet been updated to correspond to the current implementation.</span>
57<span class="sd">Do not use this as a tutorial.</span>
58
59<span class="sd">This is an example model showing how to put together a multi-part</span>
60<span class="sd">fit objective function.</span>
61
62<span class="sd">:group main: Peaks</span>
63<span class="sd">:group peaks: Gaussian, Lorentzian, Voigt</span>
64<span class="sd">:group backgrounds: Constant, Quadratic, Linear</span>
65<span class="sd">&quot;&quot;&quot;</span>
66<span class="kn">import</span> <span class="nn">numpy</span>
67<span class="kn">import</span> <span class="nn">park</span>
68
69<div class="viewcode-block" id="Peaks"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Peaks">[docs]</a><span class="k">class</span> <span class="nc">Peaks</span><span class="p">(</span><span class="n">park</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span> 
70    <span class="sd">&quot;&quot;&quot;Peak fitter&quot;&quot;&quot;</span>
71    <span class="c"># Increment the minor version when adding new functions</span>
72    <span class="c"># Increment the major version if refactoring the class</span>
73    <span class="n">__version__</span> <span class="o">=</span> <span class="s">&quot;0.9&quot;</span>
74    <span class="n">peak_types</span> <span class="o">=</span> <span class="p">{}</span>
75
76    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datafile</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
77        <span class="sd">&quot;&quot;&quot;</span>
78<span class="sd">        Create a new multipeak model.  If datafile is present it will</span>
79<span class="sd">        be loaded directly.  If not, then it can be set later with</span>
80<span class="sd">        self.data.load(datafile), or replaced with a specialized</span>
81<span class="sd">        data loader for the particular instrument.</span>
82<span class="sd">        &quot;&quot;&quot;</span>
83        <span class="c"># The initializer creates self.parameterset which will hold</span>
84        <span class="c"># the set of fitting parameters for all models.  It will also</span>
85        <span class="c"># define self.data = park.data.Data1D() which computes the</span>
86        <span class="c"># residuals given an eval function.</span>
87        <span class="n">park</span><span class="o">.</span><span class="n">Model</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">filename</span><span class="o">=</span><span class="n">datafile</span><span class="p">)</span>
88        <span class="bp">self</span><span class="o">.</span><span class="n">parameterset</span> <span class="o">=</span> <span class="n">park</span><span class="o">.</span><span class="n">ParameterSet</span><span class="p">()</span>
89        <span class="bp">self</span><span class="o">.</span><span class="n">peaks</span> <span class="o">=</span> <span class="p">{}</span>
90        <span class="bp">self</span><span class="o">.</span><span class="n">peaknum</span> <span class="o">=</span> <span class="mi">0</span>
91
92<div class="viewcode-block" id="Peaks.eval"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Peaks.eval">[docs]</a>    <span class="k">def</span> <span class="nf">eval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
93        <span class="sd">&quot;&quot;&quot;</span>
94<span class="sd">        Returns the raw theory value at x, unconvoluted and unweighted.</span>
95<span class="sd">        </span>
96<span class="sd">        The residuals will be calculated by park.Model.residuals by</span>
97<span class="sd">        calling </span>
98<span class="sd">        &quot;&quot;&quot;</span>
99        <span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
100        <span class="n">y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
101        <span class="k">for</span> <span class="n">name</span><span class="p">,</span><span class="n">peak</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">peaks</span><span class="o">.</span><span class="n">itervalues</span><span class="p">():</span>
102            <span class="n">y</span> <span class="o">+=</span> <span class="n">peak</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
103        <span class="k">return</span> <span class="n">y</span>
104        </div>
105<div class="viewcode-block" id="Peaks.add_peak"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Peaks.add_peak">[docs]</a>    <span class="k">def</span> <span class="nf">add_peak</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
106        <span class="sd">&quot;&quot;&quot; </span>
107<span class="sd">        Add a peak to the model.</span>
108<span class="sd">        </span>
109<span class="sd">        The name of the peak is used to distinguish it from other peaks </span>
110<span class="sd">        in the model, and appears as part of the parameter name in</span>
111<span class="sd">        constraint expressions.  For example, if name is &#39;P3&#39; and this</span>
112<span class="sd">        is part of model &#39;M1&#39; then the sigma parameter of a gaussian</span>
113<span class="sd">        peak would be &#39;M1.P3.sigma&#39;.</span>
114
115<span class="sd">        The peak can be specified either by peak type and initial arguments</span>
116<span class="sd">        or by the peak itself, which is a function of x with a parameters </span>
117<span class="sd">        attribute.</span>
118<span class="sd">        </span>
119<span class="sd">        Available peak types include:</span>
120<span class="sd">            gaussian(scale=1, center=0, sigma=1) </span>
121<span class="sd">                = scale exp ( -0.5 (x-center)**2 / sigma**2 )</span>
122<span class="sd">            lorentzian(scale=1, center=0, gamma=1) </span>
123<span class="sd">                = scale/pi gamma / ((x-center)**2 + gamma**2))</span>
124<span class="sd">            voigt(scale=1, center=0, sigma=1, gamma=1)</span>
125<span class="sd">                = scale (lorentzian(mu,gamma) * gaussian(mu,sigma))(x-center)</span>
126<span class="sd">                where * represents convolution</span>
127<span class="sd">        </span>
128<span class="sd">        Available background functions include:</span>
129<span class="sd">            constant(C=0)</span>
130<span class="sd">                = C</span>
131<span class="sd">            slope(C=0, B=1)</span>
132<span class="sd">                = B x + C</span>
133<span class="sd">            quadratic(A=1, B=0, C=0)</span>
134<span class="sd">                = A x**2 + B x + C</span>
135
136<span class="sd">        Additional peak types can be registered.  The complete dictionary</span>
137<span class="sd">        of available types is in Peaks.peak_types.</span>
138<span class="sd">        &quot;&quot;&quot;</span>
139        <span class="bp">self</span><span class="o">.</span><span class="n">peaknum</span>
140        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span> <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;P&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">peaknum</span><span class="p">)</span>
141        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span><span class="nb">basestring</span><span class="p">):</span>
142            <span class="n">peak</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">peak_types</span><span class="p">[</span><span class="nb">type</span><span class="p">](</span><span class="o">**</span><span class="n">kw</span><span class="p">)</span>
143        <span class="k">else</span><span class="p">:</span>
144            <span class="nb">type</span> <span class="o">=</span> <span class="n">peak</span>
145        <span class="bp">self</span><span class="o">.</span><span class="n">peaks</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">peak</span>
146        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">peak</span><span class="o">.</span><span class="n">parameters</span>
147        <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">name</span><span class="p">,</span><span class="n">peak</span><span class="p">)</span>
148</div>
149<div class="viewcode-block" id="Peaks.remove_peak"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Peaks.remove_peak">[docs]</a>    <span class="k">def</span> <span class="nf">remove_peak</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
150        <span class="sd">&quot;&quot;&quot;</span>
151<span class="sd">        Remove the named peak from the model.</span>
152<span class="sd">        &quot;&quot;&quot;</span>
153        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">peaks</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
154        <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">parameterset</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
155</div>
156    <span class="nd">@classmethod</span>
157<div class="viewcode-block" id="Peaks.register_peak_generator"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Peaks.register_peak_generator">[docs]</a>    <span class="k">def</span> <span class="nf">register_peak_generator</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">factory</span><span class="p">):</span>
158        <span class="sd">&quot;&quot;&quot;</span>
159<span class="sd">        Register a new peak generator.  This will return a callable</span>
160<span class="sd">        object with a parameter set that can be used in the peak</span>
161<span class="sd">        fitting class.</span>
162
163<span class="sd">        The individual peak functions a number of attributes:</span>
164<span class="sd">        </span>
165<span class="sd">        __name__</span>
166<span class="sd">            the name to be displayed in the list of peaks; the</span>
167<span class="sd">            default is __class__.__name__</span>
168<span class="sd">        __factory__</span>
169<span class="sd">            the name of a factory function in the python</span>
170<span class="sd">            namespace which returns a new peak.  These parameters</span>
171<span class="sd">            will be set from the stored parameter list when the</span>
172<span class="sd">            peak model is reloaded.  This can be omitted if it</span>
173<span class="sd">            is simply the module and name of the class.</span>
174<span class="sd">        __doc__</span>
175<span class="sd">            the tool tip to be displayed with the peak</span>
176<span class="sd">        __call__(x)</span>
177<span class="sd">            evaluate the peak function at x</span>
178<span class="sd">        &quot;&quot;&quot;</span>
179        <span class="n">cls</span><span class="o">.</span><span class="n">peak_types</span><span class="p">[</span><span class="nb">type</span><span class="p">]</span><span class="o">=</span><span class="n">factory</span>
180
181
182
183<span class="c"># ================== Peaks and backgrounds ===================</span></div></div>
184<div class="viewcode-block" id="Gaussian"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Gaussian">[docs]</a><span class="k">class</span> <span class="nc">Gaussian</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
185    <span class="sd">&quot;&quot;&quot;Gaussian peak: scale exp ( -0.5 (x-center)**2 / sigma**2 )&quot;&quot;&quot;</span>
186    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mf">1.</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
187        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;scale&#39;</span><span class="p">,</span><span class="s">&#39;center&#39;</span><span class="p">,</span><span class="s">&#39;sigma&#39;</span><span class="p">],</span>
188                               <span class="n">scale</span><span class="o">=</span><span class="n">scale</span><span class="p">,</span><span class="n">center</span><span class="o">=</span><span class="n">center</span><span class="p">,</span><span class="n">sigma</span><span class="o">=</span><span class="n">sigma</span><span class="p">)</span>
189        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;scale&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dscale</span>
190        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;center&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dcenter</span>
191        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;sigma&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dsigma</span>
192    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
193        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span> <span class="o">*</span> <span class="n">numpy</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">((</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">sigma</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
194<div class="viewcode-block" id="Gaussian.dscale"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Gaussian.dscale">[docs]</a>    <span class="k">def</span> <span class="nf">dscale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
195        <span class="k">return</span> <span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">scale</span></div>
196<div class="viewcode-block" id="Gaussian.dcenter"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Gaussian.dcenter">[docs]</a>    <span class="k">def</span> <span class="nf">dcenter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
197        <span class="k">return</span> <span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">sigma</span><span class="o">*</span><span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></div>
198<div class="viewcode-block" id="Gaussian.dsigma"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Gaussian.dsigma">[docs]</a>    <span class="k">def</span> <span class="nf">dsigma</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
199        <span class="k">return</span> <span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">sigma</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
200</div></div>
201<div class="viewcode-block" id="Lorentzian"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Lorentzian">[docs]</a><span class="k">class</span> <span class="nc">Lorentzian</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
202    <span class="sd">&quot;&quot;&quot;Lorentzian peak (HWHM): scale/pi  gamma/((x-center)**2 + gamma**2)&quot;&quot;&quot;</span>
203    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mf">1.</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
204        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;scale&#39;</span><span class="p">,</span><span class="s">&#39;center&#39;</span><span class="p">,</span><span class="s">&#39;gamma&#39;</span><span class="p">],</span>
205                               <span class="n">scale</span><span class="o">=</span><span class="n">scale</span><span class="p">,</span><span class="n">center</span><span class="o">=</span><span class="n">center</span><span class="p">,</span><span class="n">gamma</span><span class="o">=</span><span class="n">gamma</span><span class="p">)</span>
206        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;scale&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dscale</span>
207        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;center&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dcenter</span>
208        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;gamma&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dgamma</span>
209    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
210        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="o">/</span><span class="n">numpy</span><span class="o">.</span><span class="n">pi</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="o">/</span><span class="p">((</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
211<div class="viewcode-block" id="Lorentzian.dscale"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Lorentzian.dscale">[docs]</a>    <span class="k">def</span> <span class="nf">dscale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
212        <span class="k">return</span> <span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">scale</span></div>
213<div class="viewcode-block" id="Lorentzian.dcenter"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Lorentzian.dcenter">[docs]</a>    <span class="k">def</span> <span class="nf">dcenter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
214        <span class="k">return</span> <span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">/</span><span class="p">((</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></div>
215<div class="viewcode-block" id="Lorentzian.dgamma"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Lorentzian.dgamma">[docs]</a>    <span class="k">def</span> <span class="nf">dgamma</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
216        <span class="k">return</span> <span class="bp">self</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">gamma</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="o">/</span><span class="p">((</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="o">**</span><span class="mi">2</span><span class="p">))</span>
217</div></div>
218<div class="viewcode-block" id="Voigt"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Voigt">[docs]</a><span class="k">class</span> <span class="nc">Voigt</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
219    <span class="sd">&quot;&quot;&quot;Voigt peak (HWHM,sigma): A [G(sigma) * L(gamma)](x-center)&quot;&quot;&quot;</span>
220    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">scale</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
221        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;scale&#39;</span><span class="p">,</span><span class="s">&#39;center&#39;</span><span class="p">,</span><span class="s">&#39;sigma&#39;</span><span class="p">,</span><span class="s">&#39;gamma&#39;</span><span class="p">],</span>
222                               <span class="n">scale</span><span class="o">=</span><span class="n">scale</span><span class="p">,</span> <span class="n">center</span><span class="o">=</span><span class="n">center</span><span class="p">,</span> <span class="n">sigma</span><span class="o">=</span><span class="n">sigma</span><span class="p">,</span>
223                               <span class="n">gamma</span><span class="o">=</span><span class="n">gamma</span><span class="p">)</span>
224    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
225        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">scale</span><span class="o">*</span><span class="n">voigt</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">center</span><span class="p">,</span> 
226                                <span class="n">sigma</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sigma</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">gamma</span><span class="p">)</span>
227</div>
228<div class="viewcode-block" id="Quadratic"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Quadratic">[docs]</a><span class="k">class</span> <span class="nc">Quadratic</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
229    <span class="sd">&quot;&quot;&quot;Quadratic background: A x**2 + B x + C&quot;&quot;&quot;</span>
230    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;Background: quadratic&quot;</span>
231    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">A</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
232        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;A&#39;</span><span class="p">,</span> <span class="s">&#39;B&#39;</span><span class="p">,</span> <span class="s">&#39;C&#39;</span><span class="p">],</span> <span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">)</span>
233        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;A&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dA</span>
234        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;B&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dB</span>
235        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;C&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dC</span>
236    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
237        <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">polyval</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">value</span><span class="p">],</span><span class="n">x</span><span class="p">)</span>
238<div class="viewcode-block" id="Quadratic.dA"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Quadratic.dA">[docs]</a>    <span class="k">def</span> <span class="nf">dA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">**</span><span class="mi">2</span></div>
239<div class="viewcode-block" id="Quadratic.dB"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Quadratic.dB">[docs]</a>    <span class="k">def</span> <span class="nf">dB</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span></div>
240<div class="viewcode-block" id="Quadratic.dC"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Quadratic.dC">[docs]</a>    <span class="k">def</span> <span class="nf">dC</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
241</div></div>
242<div class="viewcode-block" id="Linear"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Linear">[docs]</a><span class="k">class</span> <span class="nc">Linear</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
243    <span class="sd">&quot;&quot;&quot;Linear background: B x**2 + C&quot;&quot;&quot;</span>
244    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;Background: linear&quot;</span>
245    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
246        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;B&#39;</span><span class="p">,</span> <span class="s">&#39;C&#39;</span><span class="p">],</span> <span class="n">B</span><span class="o">=</span><span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">)</span>
247        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;B&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dB</span>
248        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;C&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dC</span>
249    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
250        <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">polyval</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">value</span><span class="p">],</span><span class="n">x</span><span class="p">)</span>
251<div class="viewcode-block" id="Linear.dB"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Linear.dB">[docs]</a>    <span class="k">def</span> <span class="nf">dB</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span></div>
252<div class="viewcode-block" id="Linear.dC"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Linear.dC">[docs]</a>    <span class="k">def</span> <span class="nf">dC</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
253</div></div>
254<div class="viewcode-block" id="Constant"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Constant">[docs]</a><span class="k">class</span> <span class="nc">Constant</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
255    <span class="sd">&quot;&quot;&quot;Constant background: C&quot;&quot;&quot;</span>
256    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;Background: constant&quot;</span>
257    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">C</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
258        <span class="n">park</span><span class="o">.</span><span class="n">define_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s">&#39;C&#39;</span><span class="p">],</span> <span class="n">C</span><span class="o">=</span><span class="n">C</span><span class="p">)</span>
259        <span class="bp">self</span><span class="o">.</span><span class="n">parameters</span><span class="p">[</span><span class="s">&#39;C&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">deriv</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dC</span>
260    <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
261        <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">polyval</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">value</span><span class="p">],</span><span class="n">x</span><span class="p">)</span>
262<div class="viewcode-block" id="Constant.dC"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.Constant.dC">[docs]</a>    <span class="k">def</span> <span class="nf">dC</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span>
263
264</div></div>
265<div class="viewcode-block" id="voigt"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.voigt">[docs]</a><span class="k">def</span> <span class="nf">voigt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">gamma</span><span class="p">):</span>
266    <span class="sd">&quot;&quot;&quot;</span>
267<span class="sd">    Return the voigt function, which is the convolution of a Lorentz</span>
268<span class="sd">    function with a Gaussian.</span>
269<span class="sd">    </span>
270<span class="sd">    :Parameters:</span>
271<span class="sd">     gamma : real</span>
272<span class="sd">      The half-width half-maximum of the Lorentzian</span>
273<span class="sd">     sigma : real</span>
274<span class="sd">      The 1-sigma width of the Gaussian, which is one standard deviation.</span>
275
276<span class="sd">    Ref: W.I.F. David, J. Appl. Cryst. (1986). 19, 63-64</span>
277<span class="sd">    </span>
278<span class="sd">    Note: adjusted to use stddev and HWHM rather than FWHM parameters</span>
279<span class="sd">    &quot;&quot;&quot;</span>
280    <span class="c"># wofz function = w(z) = Fad[d][e][y]eva function = exp(-z**2)erfc(-iz)</span>
281    <span class="kn">from</span> <span class="nn">scipy.special</span> <span class="kn">import</span> <span class="n">wofz</span>
282    <span class="n">z</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="mi">1j</span><span class="o">*</span><span class="n">gamma</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">sigma</span><span class="o">*</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span>
283    <span class="n">V</span> <span class="o">=</span> <span class="n">wofz</span><span class="p">(</span><span class="n">z</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="p">)</span><span class="o">*</span><span class="n">sigma</span><span class="p">)</span>
284    <span class="k">return</span> <span class="n">V</span><span class="o">.</span><span class="n">real</span>
285
286</div>
287<div class="viewcode-block" id="init"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.init">[docs]</a><span class="k">def</span> <span class="nf">init</span><span class="p">():</span>
288    <span class="sd">&quot;&quot;&quot;</span>
289<span class="sd">    Register peak types with the Peaks model.</span>
290<span class="sd">    &quot;&quot;&quot;</span>
291    <span class="k">for</span> <span class="n">cls</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Gaussian</span><span class="p">,</span> <span class="n">Lorentzian</span><span class="p">,</span> <span class="n">Voigt</span><span class="p">,</span> <span class="n">Quadratic</span><span class="p">,</span> <span class="n">Linear</span><span class="p">,</span> <span class="n">Constant</span><span class="p">]:</span>
292        <span class="n">Peaks</span><span class="o">.</span><span class="n">register_peak_generator</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span><span class="n">cls</span><span class="p">)</span></div>
293<span class="n">init</span><span class="p">()</span>
294
295<span class="c"># ========================================</span>
296
297<div class="viewcode-block" id="test"><a class="viewcode-back" href="../../dev/api/park.html#park.peaks.test">[docs]</a><span class="k">def</span> <span class="nf">test</span><span class="p">():</span>
298    <span class="n">x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">)</span>
299   
300    <span class="k">pass</span>
301</div>
302<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span> <span class="n">test</span><span class="p">()</span>
303</pre></div>
304
305          </div>
306        </div>
307      </div>
308      <div class="sphinxsidebar">
309        <div class="sphinxsidebarwrapper">
310<div id="searchbox" style="display: none">
311  <h3>Quick search</h3>
312    <form class="search" action="../../search.html" method="get">
313      <input type="text" name="q" />
314      <input type="submit" value="Go" />
315      <input type="hidden" name="check_keywords" value="yes" />
316      <input type="hidden" name="area" value="default" />
317    </form>
318    <p class="searchtip" style="font-size: 90%">
319    Enter search terms or a module, class or function name.
320    </p>
321</div>
322<script type="text/javascript">$('#searchbox').show(0);</script>
323        </div>
324      </div>
325      <div class="clearer"></div>
326    </div>
327    <div class="related">
328      <h3>Navigation</h3>
329      <ul>
330        <li class="right" style="margin-right: 10px">
331          <a href="../../genindex.html" title="General Index"
332             >index</a></li>
333        <li class="right" >
334          <a href="../../py-modindex.html" title="Python Module Index"
335             >modules</a> |</li>
336        <li><a href="../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
337          <li><a href="../index.html" >Module code</a> &raquo;</li> 
338      </ul>
339    </div>
340    <div class="footer">
341        &copy; Copyright 2013, The SasView Project.
342      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
343    </div>
344  </body>
345</html>
Note: See TracBrowser for help on using the repository browser.