source: sasview/_modules/sas/fit/AbstractFitEngine.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: 93.3 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>sas.fit.AbstractFitEngine &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 sas.fit.AbstractFitEngine</h1><div class="highlight"><pre>
51<span class="kn">import</span>  <span class="nn">copy</span>
52<span class="c">#import logging</span>
53<span class="kn">import</span> <span class="nn">sys</span>
54<span class="kn">import</span> <span class="nn">math</span>
55<span class="kn">import</span> <span class="nn">numpy</span>
56
57<span class="kn">from</span> <span class="nn">sas.dataloader.data_info</span> <span class="kn">import</span> <span class="n">Data1D</span>
58<span class="kn">from</span> <span class="nn">sas.dataloader.data_info</span> <span class="kn">import</span> <span class="n">Data2D</span>
59<span class="n">_SMALLVALUE</span> <span class="o">=</span> <span class="mf">1.0e-10</span>
60
61<span class="c"># Note: duplicated from park</span>
62<span class="k">class</span> <span class="nc">FitHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
63<div class="viewcode-block" id="FitHandler"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
64<span class="sd">    Abstract interface for fit thread handler.</span>
65
66<span class="sd">    The methods in this class are called by the optimizer as the fit</span>
67<span class="sd">    progresses.</span>
68
69<span class="sd">    Note that it is up to the optimizer to call the fit handler correctly,</span>
70<span class="sd">    reporting all status changes and maintaining the &#39;done&#39; flag.</span>
71<span class="sd">    &quot;&quot;&quot;</span>
72    <span class="n">done</span> <span class="o">=</span> <span class="bp">False</span>
73    <span class="sd">&quot;&quot;&quot;True when the fit job is complete&quot;&quot;&quot;</span>
74    <span class="n">result</span> <span class="o">=</span> <span class="bp">None</span>
75    <span class="sd">&quot;&quot;&quot;The current best result of the fit&quot;&quot;&quot;</span>
76
77    <span class="k">def</span> <span class="nf">improvement</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
78<div class="viewcode-block" id="FitHandler.improvement"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.improvement">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
79<span class="sd">        Called when a result is observed which is better than previous</span>
80<span class="sd">        results from the fit.</span>
81
82<span class="sd">        result is a FitResult object, with parameters, #calls and fitness.</span>
83<span class="sd">        &quot;&quot;&quot;</span>
84    <span class="k">def</span> <span class="nf">error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span></div>
85<div class="viewcode-block" id="FitHandler.error"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.error">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
86<span class="sd">        Model had an error; print traceback</span>
87<span class="sd">        &quot;&quot;&quot;</span>
88    <span class="k">def</span> <span class="nf">progress</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">current</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span></div>
89<div class="viewcode-block" id="FitHandler.progress"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.progress">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
90<span class="sd">        Called each cycle of the fit, reporting the current and the</span>
91<span class="sd">        expected amount of work.   The meaning of these values is</span>
92<span class="sd">        optimizer dependent, but they can be converted into a percent</span>
93<span class="sd">        complete using (100*current)//expected.</span>
94
95<span class="sd">        Progress is updated each iteration of the fit, whatever that</span>
96<span class="sd">        means for the particular optimization algorithm.  It is called</span>
97<span class="sd">        after any calls to improvement for the iteration so that the</span>
98<span class="sd">        update handler can control I/O bandwidth by suppressing</span>
99<span class="sd">        intermediate improvements until the fit is complete.</span>
100<span class="sd">        &quot;&quot;&quot;</span>
101    <span class="k">def</span> <span class="nf">finalize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
102<div class="viewcode-block" id="FitHandler.finalize"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.finalize">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
103<span class="sd">        Fit is complete; best results are reported</span>
104<span class="sd">        &quot;&quot;&quot;</span>
105    <span class="k">def</span> <span class="nf">abort</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
106<div class="viewcode-block" id="FitHandler.abort"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.abort">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
107<span class="sd">        Fit was aborted.</span>
108<span class="sd">        &quot;&quot;&quot;</span>
109
110    <span class="c"># TODO: not sure how these are used, but they are needed for running the fit</span>
111    <span class="k">def</span> <span class="nf">update_fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">last</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="k">pass</span></div>
112<div class="viewcode-block" id="FitHandler.update_fit"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.update_fit">[docs]</a>    <span class="k">def</span> <span class="nf">set_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">result</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">result</span></div>
113<div class="viewcode-block" id="FitHandler.set_result"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitHandler.set_result">[docs]</a>
114<span class="k">class</span> <span class="nc">Model</span><span class="p">:</span></div></div>
115<div class="viewcode-block" id="Model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
116<span class="sd">    Fit wrapper for SAS models.</span>
117<span class="sd">    &quot;&quot;&quot;</span>
118    <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">sas_model</span><span class="p">,</span> <span class="n">sas_data</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>
119        <span class="sd">&quot;&quot;&quot;</span>
120<span class="sd">        :param sas_model: the sas model to wrap using park interface</span>
121
122<span class="sd">        &quot;&quot;&quot;</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">sas_model</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">sas_model</span><span class="o">.</span><span class="n">name</span>
125        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">sas_data</span>
126
127    <span class="k">def</span> <span class="nf">get_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fitparams</span><span class="p">):</span>
128<div class="viewcode-block" id="Model.get_params"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model.get_params">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
129<span class="sd">        return a list of value of paramter to fit</span>
130
131<span class="sd">        :param fitparams: list of paramaters name to fit</span>
132
133<span class="sd">        &quot;&quot;&quot;</span>
134        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">getParam</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">fitparams</span><span class="p">]</span>
135
136    <span class="k">def</span> <span class="nf">set_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">paramlist</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span></div>
137<div class="viewcode-block" id="Model.set_params"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model.set_params">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
138<span class="sd">        Set value for parameters to fit</span>
139
140<span class="sd">        :param params: list of value for parameters to fit</span>
141
142<span class="sd">        &quot;&quot;&quot;</span>
143        <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">paramlist</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
144            <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">setParam</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
145
146    <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span></div>
147<div class="viewcode-block" id="Model.set"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model.set">[docs]</a>        <span class="bp">self</span><span class="o">.</span><span class="n">set_params</span><span class="p">(</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">kw</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
148
149    <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></div>
150<div class="viewcode-block" id="Model.eval"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model.eval">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
151<span class="sd">            Override eval method of park model.</span>
152
153<span class="sd">            :param x: the x value used to compute a function</span>
154<span class="sd">        &quot;&quot;&quot;</span>
155        <span class="k">try</span><span class="p">:</span>
156            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">evalDistribution</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
157        <span class="k">except</span><span class="p">:</span>
158            <span class="k">raise</span>
159
160    <span class="k">def</span> <span class="nf">eval_derivs</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="n">pars</span><span class="o">=</span><span class="p">[]):</span></div>
161<div class="viewcode-block" id="Model.eval_derivs"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.Model.eval_derivs">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
162<span class="sd">        Evaluate the model and derivatives wrt pars at x.</span>
163
164<span class="sd">        pars is a list of the names of the parameters for which derivatives</span>
165<span class="sd">        are desired.</span>
166
167<span class="sd">        This method needs to be specialized in the model to evaluate the</span>
168<span class="sd">        model function.  Alternatively, the model can implement is own</span>
169<span class="sd">        version of residuals which calculates the residuals directly</span>
170<span class="sd">        instead of calling eval.</span>
171<span class="sd">        &quot;&quot;&quot;</span>
172        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s">&#39;no derivatives available&#39;</span><span class="p">)</span>
173
174    <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></div>
175        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
176
177<span class="k">class</span> <span class="nc">FitData1D</span><span class="p">(</span><span class="n">Data1D</span><span class="p">):</span></div>
178<div class="viewcode-block" id="FitData1D"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
179<span class="sd">        Wrapper class  for SAS data</span>
180<span class="sd">        FitData1D inherits from DataLoader.data_info.Data1D. Implements</span>
181<span class="sd">        a way to get residuals from data.</span>
182<span class="sd">    &quot;&quot;&quot;</span>
183    <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">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">dx</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">smearer</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
184        <span class="sd">&quot;&quot;&quot;</span>
185<span class="sd">            :param smearer: is an object of class QSmearer or SlitSmearer</span>
186<span class="sd">               that will smear the theory data (slit smearing or resolution</span>
187<span class="sd">               smearing) when set.</span>
188<span class="sd">            </span>
189<span class="sd">            The proper way to set the smearing object would be to</span>
190<span class="sd">            do the following: ::</span>
191<span class="sd">            </span>
192<span class="sd">                from sas.models.qsmearing import smear_selection</span>
193<span class="sd">                smearer = smear_selection(some_data)</span>
194<span class="sd">                fitdata1d = FitData1D( x= [1,3,..,],</span>
195<span class="sd">                                        y= [3,4,..,8],</span>
196<span class="sd">                                        dx=None,</span>
197<span class="sd">                                        dy=[1,2...], smearer= smearer)</span>
198<span class="sd">           </span>
199<span class="sd">            :Note: that some_data _HAS_ to be of</span>
200<span class="sd">                class DataLoader.data_info.Data1D</span>
201<span class="sd">                Setting it back to None will turn smearing off.</span>
202<span class="sd">                </span>
203<span class="sd">        &quot;&quot;&quot;</span>
204        <span class="n">Data1D</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">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">y</span><span class="p">,</span> <span class="n">dx</span><span class="o">=</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="n">dy</span><span class="p">)</span>
205        <span class="bp">self</span><span class="o">.</span><span class="n">num_points</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
206        <span class="bp">self</span><span class="o">.</span><span class="n">sas_data</span> <span class="o">=</span> <span class="n">data</span>
207        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="n">smearer</span>
208        <span class="bp">self</span><span class="o">.</span><span class="n">_first_unsmeared_bin</span> <span class="o">=</span> <span class="bp">None</span>
209        <span class="bp">self</span><span class="o">.</span><span class="n">_last_unsmeared_bin</span> <span class="o">=</span> <span class="bp">None</span>
210        <span class="c"># Check error bar; if no error bar found, set it constant(=1)</span>
211        <span class="c"># TODO: Should provide an option for users to set it like percent,</span>
212        <span class="c"># constant, or dy data</span>
213        <span class="k">if</span> <span class="n">dy</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">dy</span> <span class="o">==</span> <span class="p">[]</span> <span class="ow">or</span> <span class="n">dy</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
214            <span class="bp">self</span><span class="o">.</span><span class="n">dy</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
215        <span class="k">else</span><span class="p">:</span>
216            <span class="bp">self</span><span class="o">.</span><span class="n">dy</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">dy</span><span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
217
218        <span class="c">## Min Q-value</span>
219        <span class="c">#Skip the Q=0 point, especially when y(q=0)=None at x[0].</span>
220        <span class="k">if</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="mf">0.0</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span>\
221                     <span class="ow">not</span> <span class="n">numpy</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
222            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">])</span>
223        <span class="k">else</span><span class="p">:</span>
224            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
225        <span class="c">## Max Q-value</span>
226        <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
227       
228        <span class="c"># Range used for input to smearing</span>
229        <span class="bp">self</span><span class="o">.</span><span class="n">_qmin_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span>
230        <span class="bp">self</span><span class="o">.</span><span class="n">_qmax_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>
231        <span class="c"># Identify the bin range for the unsmeared and smeared spaces</span>
232        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">)</span>
233        <span class="bp">self</span><span class="o">.</span><span class="n">idx_unsmeared</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_qmin_unsmeared</span><span class="p">)</span> \
234                            <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_qmax_unsmeared</span><span class="p">)</span>
235 
236    <span class="k">def</span> <span class="nf">set_fit_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qmin</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">qmax</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
237<div class="viewcode-block" id="FitData1D.set_fit_range"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D.set_fit_range">[docs]</a>        <span class="sd">&quot;&quot;&quot; to set the fit range&quot;&quot;&quot;</span>
238        <span class="c"># Skip Q=0 point, (especially for y(q=0)=None at x[0]).</span>
239        <span class="c"># ToDo: Find better way to do it.</span>
240        <span class="k">if</span> <span class="n">qmin</span> <span class="o">==</span> <span class="mf">0.0</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">numpy</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="n">qmin</span><span class="p">]):</span>
241            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">])</span>
242        <span class="k">elif</span> <span class="n">qmin</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
243            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="n">qmin</span>
244        <span class="k">if</span> <span class="n">qmax</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
245            <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="n">qmax</span>
246        <span class="c"># Determine the range needed in unsmeared-Q to cover</span>
247        <span class="c"># the smeared Q range</span>
248        <span class="bp">self</span><span class="o">.</span><span class="n">_qmin_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span>
249        <span class="bp">self</span><span class="o">.</span><span class="n">_qmax_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>
250       
251        <span class="bp">self</span><span class="o">.</span><span class="n">_first_unsmeared_bin</span> <span class="o">=</span> <span class="mi">0</span>
252        <span class="bp">self</span><span class="o">.</span><span class="n">_last_unsmeared_bin</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
253       
254        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
255            <span class="bp">self</span><span class="o">.</span><span class="n">_first_unsmeared_bin</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_unsmeared_bin</span> <span class="o">=</span> \
256                    <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span><span class="o">.</span><span class="n">get_bin_range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">)</span>
257            <span class="bp">self</span><span class="o">.</span><span class="n">_qmin_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_first_unsmeared_bin</span><span class="p">]</span>
258            <span class="bp">self</span><span class="o">.</span><span class="n">_qmax_unsmeared</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_last_unsmeared_bin</span><span class="p">]</span>
259           
260        <span class="c"># Identify the bin range for the unsmeared and smeared spaces</span>
261        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">)</span>
262        <span class="c">## zero error can not participate for fitting</span>
263        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dy</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span>
264        <span class="bp">self</span><span class="o">.</span><span class="n">idx_unsmeared</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_qmin_unsmeared</span><span class="p">)</span> \
265                            <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_qmax_unsmeared</span><span class="p">)</span>
266
267    <span class="k">def</span> <span class="nf">get_fit_range</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
268<div class="viewcode-block" id="FitData1D.get_fit_range"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D.get_fit_range">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
269<span class="sd">            Return the range of data.x to fit</span>
270<span class="sd">        &quot;&quot;&quot;</span>
271        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>
272
273    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
274<div class="viewcode-block" id="FitData1D.size"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D.size">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
275<span class="sd">        Number of measurement points in data set after masking, etc.</span>
276<span class="sd">        &quot;&quot;&quot;</span>
277        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
278
279    <span class="k">def</span> <span class="nf">residuals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fn</span><span class="p">):</span></div>
280<div class="viewcode-block" id="FitData1D.residuals"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D.residuals">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
281<span class="sd">            Compute residuals.</span>
282<span class="sd">            </span>
283<span class="sd">            If self.smearer has been set, use if to smear</span>
284<span class="sd">            the data before computing chi squared.</span>
285<span class="sd">            </span>
286<span class="sd">            :param fn: function that return model value</span>
287<span class="sd">            </span>
288<span class="sd">            :return: residuals</span>
289<span class="sd">        &quot;&quot;&quot;</span>
290        <span class="c"># Compute theory data f(x)</span>
291        <span class="n">fx</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">))</span>
292        <span class="n">fx</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx_unsmeared</span><span class="p">]</span> <span class="o">=</span> <span class="n">fn</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx_unsmeared</span><span class="p">])</span>
293       
294        <span class="c">## Smear theory data</span>
295        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
296            <span class="n">fx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span><span class="p">(</span><span class="n">fx</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_first_unsmeared_bin</span><span class="p">,</span>
297                              <span class="bp">self</span><span class="o">.</span><span class="n">_last_unsmeared_bin</span><span class="p">)</span>
298        <span class="c">## Sanity check</span>
299        <span class="k">if</span> <span class="n">numpy</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dy</span><span class="p">)</span> <span class="o">!=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fx</span><span class="p">):</span>
300            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;FitData1D: invalid error array &quot;</span>
301            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s"> &lt;&gt; </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">shape</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dy</span><span class="p">),</span> <span class="n">numpy</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fx</span><span class="p">))</span>
302            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
303        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">]</span> <span class="o">-</span> <span class="n">fx</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">])</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">dy</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">],</span> <span class="n">fx</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">]</span>
304           
305    <span class="k">def</span> <span class="nf">residuals_deriv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">pars</span><span class="o">=</span><span class="p">[]):</span></div>
306<div class="viewcode-block" id="FitData1D.residuals_deriv"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData1D.residuals_deriv">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
307<span class="sd">            :return: residuals derivatives .</span>
308<span class="sd">            </span>
309<span class="sd">            :note: in this case just return empty array </span>
310<span class="sd">        &quot;&quot;&quot;</span>
311        <span class="k">return</span> <span class="p">[]</span>
312   
313   
314<span class="k">class</span> <span class="nc">FitData2D</span><span class="p">(</span><span class="n">Data2D</span><span class="p">):</span></div></div>
315<div class="viewcode-block" id="FitData2D"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
316<span class="sd">        Wrapper class  for SAS data</span>
317<span class="sd">    &quot;&quot;&quot;</span>
318    <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">sas_data2d</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">err_data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
319        <span class="n">Data2D</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">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">err_data</span><span class="o">=</span><span class="n">err_data</span><span class="p">)</span>
320        <span class="c"># Data can be initialized with a sas plottable or with vectors.</span>
321        <span class="bp">self</span><span class="o">.</span><span class="n">res_err_image</span> <span class="o">=</span> <span class="p">[]</span>
322        <span class="bp">self</span><span class="o">.</span><span class="n">num_points</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># will be set by set_data</span>
323        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">[]</span>
324        <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="bp">None</span>
325        <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="bp">None</span>
326        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="bp">None</span>
327        <span class="bp">self</span><span class="o">.</span><span class="n">radius</span> <span class="o">=</span> <span class="mi">0</span>
328        <span class="bp">self</span><span class="o">.</span><span class="n">res_err_data</span> <span class="o">=</span> <span class="p">[]</span>
329        <span class="bp">self</span><span class="o">.</span><span class="n">sas_data</span> <span class="o">=</span> <span class="n">sas_data2d</span>
330        <span class="bp">self</span><span class="o">.</span><span class="n">set_data</span><span class="p">(</span><span class="n">sas_data2d</span><span class="p">)</span>
331
332    <span class="k">def</span> <span class="nf">set_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sas_data2d</span><span class="p">,</span> <span class="n">qmin</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">qmax</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
333<div class="viewcode-block" id="FitData2D.set_data"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.set_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
334<span class="sd">            Determine the correct qx_data and qy_data within range to fit</span>
335<span class="sd">        &quot;&quot;&quot;</span>
336        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">sas_data2d</span><span class="o">.</span><span class="n">data</span>
337        <span class="bp">self</span><span class="o">.</span><span class="n">err_data</span> <span class="o">=</span> <span class="n">sas_data2d</span><span class="o">.</span><span class="n">err_data</span>
338        <span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span> <span class="o">=</span> <span class="n">sas_data2d</span><span class="o">.</span><span class="n">qx_data</span>
339        <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span> <span class="o">=</span> <span class="n">sas_data2d</span><span class="o">.</span><span class="n">qy_data</span>
340        <span class="bp">self</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="n">sas_data2d</span><span class="o">.</span><span class="n">mask</span>
341
342        <span class="n">x_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">sas_data2d</span><span class="o">.</span><span class="n">xmin</span><span class="p">),</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">sas_data2d</span><span class="o">.</span><span class="n">xmax</span><span class="p">))</span>
343        <span class="n">y_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">sas_data2d</span><span class="o">.</span><span class="n">ymin</span><span class="p">),</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">sas_data2d</span><span class="o">.</span><span class="n">ymax</span><span class="p">))</span>
344       
345        <span class="c">## fitting range</span>
346        <span class="k">if</span> <span class="n">qmin</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
347            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="mf">1e-16</span>
348        <span class="k">if</span> <span class="n">qmax</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
349            <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">x_max</span> <span class="o">*</span> <span class="n">x_max</span> <span class="o">+</span> <span class="n">y_max</span> <span class="o">*</span> <span class="n">y_max</span><span class="p">)</span>
350        <span class="c">## new error image for fitting purpose</span>
351        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">err_data</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">err_data</span> <span class="o">==</span> <span class="p">[]:</span>
352            <span class="bp">self</span><span class="o">.</span><span class="n">res_err_data</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
353        <span class="k">else</span><span class="p">:</span>
354            <span class="bp">self</span><span class="o">.</span><span class="n">res_err_data</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">err_data</span><span class="p">)</span>
355        <span class="c">#self.res_err_data[self.res_err_data==0]=1</span>
356       
357        <span class="bp">self</span><span class="o">.</span><span class="n">radius</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</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">qy_data</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
358       
359        <span class="c"># Note: mask = True: for MASK while mask = False for NOT to mask</span>
360        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">radius</span><span class="p">)</span> <span class="o">&amp;</span>\
361                            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">radius</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">))</span>
362        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mask</span><span class="p">)</span>
363        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
364        <span class="bp">self</span><span class="o">.</span><span class="n">num_points</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span>
365
366    <span class="k">def</span> <span class="nf">set_smearer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">smearer</span><span class="p">):</span></div>
367<div class="viewcode-block" id="FitData2D.set_smearer"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.set_smearer">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
368<span class="sd">            Set smearer</span>
369<span class="sd">        &quot;&quot;&quot;</span>
370        <span class="k">if</span> <span class="n">smearer</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
371            <span class="k">return</span>
372        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="n">smearer</span>
373        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span><span class="o">.</span><span class="n">set_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span>
374        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span>
375
376    <span class="k">def</span> <span class="nf">set_fit_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qmin</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">qmax</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
377<div class="viewcode-block" id="FitData2D.set_fit_range"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.set_fit_range">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
378<span class="sd">            To set the fit range</span>
379<span class="sd">        &quot;&quot;&quot;</span>
380        <span class="k">if</span> <span class="n">qmin</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">:</span>
381            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="mf">1e-16</span>
382        <span class="k">elif</span> <span class="n">qmin</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
383            <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">=</span> <span class="n">qmin</span>
384        <span class="k">if</span> <span class="n">qmax</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
385            <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="n">qmax</span>
386        <span class="bp">self</span><span class="o">.</span><span class="n">radius</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</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">qy_data</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
387        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">qmin</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">radius</span><span class="p">)</span> <span class="o">&amp;</span>\
388                            <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">radius</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">))</span>
389        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mask</span><span class="p">)</span>
390        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">numpy</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">))</span>
391        <span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">res_err_data</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span>
392
393    <span class="k">def</span> <span class="nf">get_fit_range</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
394<div class="viewcode-block" id="FitData2D.get_fit_range"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.get_fit_range">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
395<span class="sd">        return the range of data.x to fit</span>
396<span class="sd">        &quot;&quot;&quot;</span>
397        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>
398
399    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
400<div class="viewcode-block" id="FitData2D.size"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.size">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
401<span class="sd">        Number of measurement points in data set after masking, etc.</span>
402<span class="sd">        &quot;&quot;&quot;</span>
403        <span class="k">return</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span>
404
405    <span class="k">def</span> <span class="nf">residuals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fn</span><span class="p">):</span></div>
406<div class="viewcode-block" id="FitData2D.residuals"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.residuals">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
407<span class="sd">        return the residuals</span>
408<span class="sd">        &quot;&quot;&quot;</span>
409        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
410            <span class="n">fn</span><span class="o">.</span><span class="n">set_index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">)</span>
411            <span class="c"># Get necessary data from self.data and set the data for smearing</span>
412            <span class="n">fn</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span>
413
414            <span class="n">gn</span> <span class="o">=</span> <span class="n">fn</span><span class="o">.</span><span class="n">get_value</span><span class="p">()</span>
415        <span class="k">else</span><span class="p">:</span>
416            <span class="n">gn</span> <span class="o">=</span> <span class="n">fn</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">],</span>
417                     <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">]])</span>
418        <span class="c"># use only the data point within ROI range</span>
419        <span class="n">res</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">]</span> <span class="o">-</span> <span class="n">gn</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">res_err_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">idx</span><span class="p">]</span>
420
421        <span class="k">return</span> <span class="n">res</span><span class="p">,</span> <span class="n">gn</span>
422       
423    <span class="k">def</span> <span class="nf">residuals_deriv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">pars</span><span class="o">=</span><span class="p">[]):</span></div>
424<div class="viewcode-block" id="FitData2D.residuals_deriv"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitData2D.residuals_deriv">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
425<span class="sd">        :return: residuals derivatives .</span>
426<span class="sd">        </span>
427<span class="sd">        :note: in this case just return empty array</span>
428<span class="sd">        </span>
429<span class="sd">        &quot;&quot;&quot;</span>
430        <span class="k">return</span> <span class="p">[]</span>
431   
432   
433<span class="k">class</span> <span class="nc">FitAbort</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span></div></div>
434<div class="viewcode-block" id="FitAbort"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitAbort">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
435<span class="sd">    Exception raise to stop the fit</span>
436<span class="sd">    &quot;&quot;&quot;</span>
437    <span class="c">#pass</span>
438    <span class="c">#print&quot;Creating fit abort Exception&quot;</span>
439
440
441
442<span class="k">class</span> <span class="nc">FitEngine</span><span class="p">:</span></div>
443<div class="viewcode-block" id="FitEngine"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine">[docs]</a>    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
444        <span class="sd">&quot;&quot;&quot;</span>
445<span class="sd">        Base class for scipy and park fit engine</span>
446<span class="sd">        &quot;&quot;&quot;</span>
447        <span class="c">#Dictionnary of fitArrange element (fit problems)</span>
448        <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span> <span class="o">=</span> <span class="p">{}</span>
449        <span class="bp">self</span><span class="o">.</span><span class="n">fitter_id</span> <span class="o">=</span> <span class="bp">None</span>
450       
451    <span class="k">def</span> <span class="nf">set_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">pars</span><span class="o">=</span><span class="p">[],</span> <span class="n">constraints</span><span class="o">=</span><span class="p">[],</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
452<div class="viewcode-block" id="FitEngine.set_model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.set_model">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
453<span class="sd">        set a model on a given  in the fit engine.</span>
454<span class="sd">        </span>
455<span class="sd">        :param model: sas.models type </span>
456<span class="sd">        :param id: is the key of the fitArrange dictionary where model is saved as a value</span>
457<span class="sd">        :param pars: the list of parameters to fit </span>
458<span class="sd">        :param constraints: list of </span>
459<span class="sd">            tuple (name of parameter, value of parameters)</span>
460<span class="sd">            the value of parameter must be a string to constraint 2 different</span>
461<span class="sd">            parameters.</span>
462<span class="sd">            Example:  </span>
463<span class="sd">            we want to fit 2 model M1 and M2 both have parameters A and B.</span>
464<span class="sd">            constraints can be ``constraints = [(M1.A, M2.B+2), (M1.B= M2.A *5),...,]``</span>
465<span class="sd">            </span>
466<span class="sd">             </span>
467<span class="sd">        :note: pars must contains only name of existing model&#39;s parameters</span>
468<span class="sd">        </span>
469<span class="sd">        &quot;&quot;&quot;</span>
470        <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span>
471            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;no fitting parameters&quot;</span><span class="p">)</span>
472
473        <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
474            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;no model to fit&quot;</span><span class="p">)</span>
475
476        <span class="k">if</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">Model</span><span class="p">):</span>
477            <span class="n">model</span> <span class="o">=</span> <span class="n">Model</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
478
479        <span class="n">sasmodel</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">model</span>
480        <span class="n">available_parameters</span> <span class="o">=</span> <span class="n">sasmodel</span><span class="o">.</span><span class="n">getParamList</span><span class="p">()</span>
481        <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">:</span>
482            <span class="k">if</span> <span class="n">p</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">available_parameters</span><span class="p">:</span>
483                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;parameter </span><span class="si">%s</span><span class="s"> not available in model </span><span class="si">%s</span><span class="s">; use one of [</span><span class="si">%s</span><span class="s">] instead&quot;</span>
484                                 <span class="o">%</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">sasmodel</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">available_parameters</span><span class="p">)))</span>
485
486        <span class="k">if</span> <span class="nb">id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
487            <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span> <span class="o">=</span> <span class="n">FitArrange</span><span class="p">()</span>
488
489        <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">set_model</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
490        <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">pars</span> <span class="o">=</span> <span class="n">pars</span>
491        <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">vals</span> <span class="o">=</span> <span class="p">[</span><span class="n">sasmodel</span><span class="o">.</span><span class="n">getParam</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">pars</span><span class="p">]</span>
492        <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">constraints</span> <span class="o">=</span> <span class="n">constraints</span>
493
494    <span class="k">def</span> <span class="nf">set_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">smearer</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">qmin</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">qmax</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
495<div class="viewcode-block" id="FitEngine.set_data"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.set_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
496<span class="sd">        Receives plottable, creates a list of data to fit,set data</span>
497<span class="sd">        in a FitArrange object and adds that object in a dictionary</span>
498<span class="sd">        with key id.</span>
499<span class="sd">        </span>
500<span class="sd">        :param data: data added</span>
501<span class="sd">        :param id: unique key corresponding to a fitArrange object with data</span>
502<span class="sd">        &quot;&quot;&quot;</span>
503        <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;Data2D&#39;</span><span class="p">:</span>
504            <span class="n">fitdata</span> <span class="o">=</span> <span class="n">FitData2D</span><span class="p">(</span><span class="n">sas_data2d</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">data</span><span class="p">,</span>
505                                 <span class="n">err_data</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">err_data</span><span class="p">)</span>
506        <span class="k">else</span><span class="p">:</span>
507            <span class="n">fitdata</span> <span class="o">=</span> <span class="n">FitData1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">y</span><span class="p">,</span>
508                                 <span class="n">dx</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">dy</span><span class="p">,</span> <span class="n">smearer</span><span class="o">=</span><span class="n">smearer</span><span class="p">)</span>
509        <span class="n">fitdata</span><span class="o">.</span><span class="n">sas_data</span> <span class="o">=</span> <span class="n">data</span>
510       
511        <span class="n">fitdata</span><span class="o">.</span><span class="n">set_fit_range</span><span class="p">(</span><span class="n">qmin</span><span class="o">=</span><span class="n">qmin</span><span class="p">,</span> <span class="n">qmax</span><span class="o">=</span><span class="n">qmax</span><span class="p">)</span>
512        <span class="c">#A fitArrange is already created but contains model only at id</span>
513        <span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
514            <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">add_data</span><span class="p">(</span><span class="n">fitdata</span><span class="p">)</span>
515        <span class="k">else</span><span class="p">:</span>
516        <span class="c">#no fitArrange object has been create with this id</span>
517            <span class="n">fitproblem</span> <span class="o">=</span> <span class="n">FitArrange</span><span class="p">()</span>
518            <span class="n">fitproblem</span><span class="o">.</span><span class="n">add_data</span><span class="p">(</span><span class="n">fitdata</span><span class="p">)</span>
519            <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span> <span class="o">=</span> <span class="n">fitproblem</span>
520   
521    <span class="k">def</span> <span class="nf">get_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span></div>
522<div class="viewcode-block" id="FitEngine.get_model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.get_model">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
523<span class="sd">        :param id: id is key in the dictionary containing the model to return</span>
524<span class="sd">        </span>
525<span class="sd">        :return:  a model at this id or None if no FitArrange element was</span>
526<span class="sd">            created with this id</span>
527<span class="sd">        &quot;&quot;&quot;</span>
528        <span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
529            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">get_model</span><span class="p">()</span>
530        <span class="k">else</span><span class="p">:</span>
531            <span class="k">return</span> <span class="bp">None</span>
532   
533    <span class="k">def</span> <span class="nf">remove_fit_problem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span></div>
534<div class="viewcode-block" id="FitEngine.remove_fit_problem"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.remove_fit_problem">[docs]</a>        <span class="sd">&quot;&quot;&quot;remove   fitarrange in id&quot;&quot;&quot;</span>
535        <span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
536            <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span>
537           
538    <span class="k">def</span> <span class="nf">select_problem_for_fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span></div>
539<div class="viewcode-block" id="FitEngine.select_problem_for_fit"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.select_problem_for_fit">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
540<span class="sd">        select a couple of model and data at the id position in dictionary</span>
541<span class="sd">        and set in self.selected value to value</span>
542<span class="sd">        </span>
543<span class="sd">        :param value: the value to allow fitting.</span>
544<span class="sd">                can only have the value one or zero</span>
545<span class="sd">        &quot;&quot;&quot;</span>
546        <span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
547            <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">set_to_fit</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
548             
549    <span class="k">def</span> <span class="nf">get_problem_to_fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">):</span></div>
550<div class="viewcode-block" id="FitEngine.get_problem_to_fit"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitEngine.get_problem_to_fit">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
551<span class="sd">        return the self.selected value of the fit problem of id</span>
552<span class="sd">        </span>
553<span class="sd">        :param id: the id of the problem</span>
554<span class="sd">        &quot;&quot;&quot;</span>
555        <span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">:</span>
556            <span class="bp">self</span><span class="o">.</span><span class="n">fit_arrange_dict</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span><span class="o">.</span><span class="n">get_to_fit</span><span class="p">()</span>
557   
558   
559<span class="k">class</span> <span class="nc">FitArrange</span><span class="p">:</span></div></div>
560<div class="viewcode-block" id="FitArrange"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange">[docs]</a>    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
561        <span class="sd">&quot;&quot;&quot;</span>
562<span class="sd">        Class FitArrange contains a set of data for a given model</span>
563<span class="sd">        to perform the Fit.FitArrange must contain exactly one model</span>
564<span class="sd">        and at least one data for the fit to be performed.</span>
565<span class="sd">        </span>
566<span class="sd">        model: the model selected by the user</span>
567<span class="sd">        Ldata: a list of data what the user wants to fit</span>
568<span class="sd">            </span>
569<span class="sd">        &quot;&quot;&quot;</span>
570        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="bp">None</span>
571        <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span> <span class="o">=</span> <span class="p">[]</span>
572        <span class="bp">self</span><span class="o">.</span><span class="n">pars</span> <span class="o">=</span> <span class="p">[]</span>
573        <span class="bp">self</span><span class="o">.</span><span class="n">vals</span> <span class="o">=</span> <span class="p">[]</span>
574        <span class="bp">self</span><span class="o">.</span><span class="n">selected</span> <span class="o">=</span> <span class="mi">0</span>
575
576    <span class="k">def</span> <span class="nf">set_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">):</span>
577<div class="viewcode-block" id="FitArrange.set_model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.set_model">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
578<span class="sd">        set_model save a copy of the model</span>
579<span class="sd">        </span>
580<span class="sd">        :param model: the model being set</span>
581<span class="sd">        &quot;&quot;&quot;</span>
582        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">model</span>
583       
584    <span class="k">def</span> <span class="nf">add_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span></div>
585<div class="viewcode-block" id="FitArrange.add_data"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.add_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
586<span class="sd">        add_data fill a self.data_list with data to fit</span>
587<span class="sd">        </span>
588<span class="sd">        :param data: Data to add in the list</span>
589<span class="sd">        &quot;&quot;&quot;</span>
590        <span class="k">if</span> <span class="ow">not</span> <span class="n">data</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span><span class="p">:</span>
591            <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
592           
593    <span class="k">def</span> <span class="nf">get_model</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
594<div class="viewcode-block" id="FitArrange.get_model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.get_model">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
595<span class="sd">        :return: saved model</span>
596<span class="sd">        &quot;&quot;&quot;</span>
597        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span>
598     
599    <span class="k">def</span> <span class="nf">get_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
600<div class="viewcode-block" id="FitArrange.get_data"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.get_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
601<span class="sd">        :return: list of data data_list</span>
602<span class="sd">        &quot;&quot;&quot;</span>
603        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
604     
605    <span class="k">def</span> <span class="nf">remove_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span></div>
606<div class="viewcode-block" id="FitArrange.remove_data"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.remove_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
607<span class="sd">        Remove one element from the list</span>
608<span class="sd">        </span>
609<span class="sd">        :param data: Data to remove from data_list</span>
610<span class="sd">        &quot;&quot;&quot;</span>
611        <span class="k">if</span> <span class="n">data</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span><span class="p">:</span>
612            <span class="bp">self</span><span class="o">.</span><span class="n">data_list</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
613           
614    <span class="k">def</span> <span class="nf">set_to_fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span></div>
615<div class="viewcode-block" id="FitArrange.set_to_fit"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.set_to_fit">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
616<span class="sd">        set self.selected to 0 or 1  for other values raise an exception</span>
617<span class="sd">        </span>
618<span class="sd">        :param value: integer between 0 or 1</span>
619<span class="sd">        &quot;&quot;&quot;</span>
620        <span class="bp">self</span><span class="o">.</span><span class="n">selected</span> <span class="o">=</span> <span class="n">value</span>
621       
622    <span class="k">def</span> <span class="nf">get_to_fit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
623<div class="viewcode-block" id="FitArrange.get_to_fit"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FitArrange.get_to_fit">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
624<span class="sd">        return self.selected value</span>
625<span class="sd">        &quot;&quot;&quot;</span>
626        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">selected</span>
627
628<span class="k">class</span> <span class="nc">FResult</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span></div></div>
629<div class="viewcode-block" id="FResult"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FResult">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
630<span class="sd">    Storing fit result</span>
631<span class="sd">    &quot;&quot;&quot;</span>
632    <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">model</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">param_list</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
633        <span class="bp">self</span><span class="o">.</span><span class="n">calls</span> <span class="o">=</span> <span class="bp">None</span>
634        <span class="bp">self</span><span class="o">.</span><span class="n">fitness</span> <span class="o">=</span> <span class="bp">None</span>
635        <span class="bp">self</span><span class="o">.</span><span class="n">chisqr</span> <span class="o">=</span> <span class="bp">None</span>
636        <span class="bp">self</span><span class="o">.</span><span class="n">pvec</span> <span class="o">=</span> <span class="p">[]</span>
637        <span class="bp">self</span><span class="o">.</span><span class="n">cov</span> <span class="o">=</span> <span class="p">[]</span>
638        <span class="bp">self</span><span class="o">.</span><span class="n">info</span> <span class="o">=</span> <span class="bp">None</span>
639        <span class="bp">self</span><span class="o">.</span><span class="n">mesg</span> <span class="o">=</span> <span class="bp">None</span>
640        <span class="bp">self</span><span class="o">.</span><span class="n">success</span> <span class="o">=</span> <span class="bp">None</span>
641        <span class="bp">self</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">None</span>
642        <span class="bp">self</span><span class="o">.</span><span class="n">residuals</span> <span class="o">=</span> <span class="p">[]</span>
643        <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="p">[]</span>
644        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">model</span>
645        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
646        <span class="bp">self</span><span class="o">.</span><span class="n">theory</span> <span class="o">=</span> <span class="p">[]</span>
647        <span class="bp">self</span><span class="o">.</span><span class="n">param_list</span> <span class="o">=</span> <span class="n">param_list</span>
648        <span class="bp">self</span><span class="o">.</span><span class="n">iterations</span> <span class="o">=</span> <span class="mi">0</span>
649        <span class="bp">self</span><span class="o">.</span><span class="n">inputs</span> <span class="o">=</span> <span class="p">[]</span>
650        <span class="bp">self</span><span class="o">.</span><span class="n">fitter_id</span> <span class="o">=</span> <span class="bp">None</span>
651        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
652            <span class="bp">self</span><span class="o">.</span><span class="n">inputs</span> <span class="o">=</span> <span class="p">[(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">)]</span>
653     
654    <span class="k">def</span> <span class="nf">set_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">):</span>
655<div class="viewcode-block" id="FResult.set_model"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FResult.set_model">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
656<span class="sd">        &quot;&quot;&quot;</span>
657        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">model</span>
658       
659    <span class="k">def</span> <span class="nf">set_fitness</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fitness</span><span class="p">):</span></div>
660<div class="viewcode-block" id="FResult.set_fitness"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FResult.set_fitness">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
661<span class="sd">        &quot;&quot;&quot;</span>
662        <span class="bp">self</span><span class="o">.</span><span class="n">fitness</span> <span class="o">=</span> <span class="n">fitness</span>
663       
664    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
665        <span class="sd">&quot;&quot;&quot;</span>
666<span class="sd">        &quot;&quot;&quot;</span>
667        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pvec</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">param_list</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
668            <span class="k">return</span> <span class="s">&quot;No results&quot;</span>
669
670        <span class="n">sasmodel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">model</span>
671        <span class="n">pars</span> <span class="o">=</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sasmodel</span><span class="o">.</span><span class="n">getParamList</span><span class="p">())</span>
672        <span class="n">msg1</span> <span class="o">=</span> <span class="s">&quot;[Iteration #: </span><span class="si">%s</span><span class="s"> ]&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">iterations</span>
673        <span class="n">msg3</span> <span class="o">=</span> <span class="s">&quot;=== goodness of fit: </span><span class="si">%s</span><span class="s"> ===&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fitness</span><span class="p">))</span>
674        <span class="n">msg2</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;P</span><span class="si">%-3d</span><span class="s">  </span><span class="si">%s</span><span class="s">......|.....</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">sasmodel</span><span class="o">.</span><span class="n">getParam</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
675                <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">pars</span> <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">param_list</span><span class="p">]</span>
676        <span class="n">msg</span> <span class="o">=</span> <span class="p">[</span><span class="n">msg1</span><span class="p">,</span> <span class="n">msg3</span><span class="p">]</span> <span class="o">+</span> <span class="n">msg2</span>
677        <span class="k">return</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
678   
679    <span class="k">def</span> <span class="nf">print_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
680<div class="viewcode-block" id="FResult.print_summary"><a class="viewcode-back" href="../../../dev/api/sas.fit.html#sas.fit.AbstractFitEngine.FResult.print_summary">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
681<span class="sd">        &quot;&quot;&quot;</span>
682        <span class="k">print</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
683</pre></div></div></div>
684
685          </div>
686        </div>
687      </div>
688      <div class="sphinxsidebar">
689        <div class="sphinxsidebarwrapper">
690<div id="searchbox" style="display: none">
691  <h3>Quick search</h3>
692    <form class="search" action="../../../search.html" method="get">
693      <input type="text" name="q" />
694      <input type="submit" value="Go" />
695      <input type="hidden" name="check_keywords" value="yes" />
696      <input type="hidden" name="area" value="default" />
697    </form>
698    <p class="searchtip" style="font-size: 90%">
699    Enter search terms or a module, class or function name.
700    </p>
701</div>
702<script type="text/javascript">$('#searchbox').show(0);</script>
703        </div>
704      </div>
705      <div class="clearer"></div>
706    </div>
707    <div class="related">
708      <h3>Navigation</h3>
709      <ul>
710        <li class="right" style="margin-right: 10px">
711          <a href="../../../genindex.html" title="General Index"
712             >index</a></li>
713        <li class="right" >
714          <a href="../../../py-modindex.html" title="Python Module Index"
715             >modules</a> |</li>
716        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
717          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
718      </ul>
719    </div>
720    <div class="footer">
721        &copy; Copyright 2013, The SasView Project.
722      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
723    </div>
724  </body>
725</html>
Note: See TracBrowser for help on using the repository browser.