source: sasview/_modules/sas/perspectives/pr/pr.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: 210.0 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.perspectives.pr.pr &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.perspectives.pr.pr</h1><div class="highlight"><pre>
51<span class="c">################################################################################</span>
52<span class="c">#This software was developed by the University of Tennessee as part of the</span>
53<span class="c">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
54<span class="c">#project funded by the US National Science Foundation. </span>
55<span class="c">#</span>
56<span class="c">#See the license text in license.txt</span>
57<span class="c">#</span>
58<span class="c">#copyright 2009, University of Tennessee</span>
59<span class="c">################################################################################</span>
60
61
62<span class="c"># Make sure the option of saving each curve is available </span>
63<span class="c"># Use the I(q) curve as input and compare the output to P(r)</span>
64
65<span class="kn">import</span> <span class="nn">os</span>
66<span class="kn">import</span> <span class="nn">sys</span>
67<span class="kn">import</span> <span class="nn">wx</span>
68<span class="kn">import</span> <span class="nn">logging</span>
69<span class="kn">import</span> <span class="nn">time</span>
70<span class="kn">import</span> <span class="nn">math</span>
71<span class="kn">import</span> <span class="nn">numpy</span>
72<span class="kn">import</span> <span class="nn">pylab</span>
73<span class="kn">from</span> <span class="nn">sas.guiframe.gui_manager</span> <span class="kn">import</span> <span class="n">MDIFrame</span>
74<span class="kn">from</span> <span class="nn">sas.guiframe.dataFitting</span> <span class="kn">import</span> <span class="n">Data1D</span>
75<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">NewPlotEvent</span>
76<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">StatusEvent</span> 
77<span class="kn">from</span> <span class="nn">sas.guiframe.gui_style</span> <span class="kn">import</span> <span class="n">GUIFRAME_ID</span>   
78<span class="kn">from</span> <span class="nn">sas.pr.invertor</span> <span class="kn">import</span> <span class="n">Invertor</span>
79<span class="kn">from</span> <span class="nn">sas.dataloader.loader</span> <span class="kn">import</span> <span class="n">Loader</span>
80<span class="kn">import</span> <span class="nn">sas.dataloader</span>
81
82<span class="kn">from</span> <span class="nn">pr_widgets</span> <span class="kn">import</span> <span class="n">load_error</span> 
83<span class="kn">from</span> <span class="nn">sas.guiframe.plugin_base</span> <span class="kn">import</span> <span class="n">PluginBase</span>
84
85
86<span class="n">PR_FIT_LABEL</span>       <span class="o">=</span> <span class="s">r&quot;$P_{fit}(r)$&quot;</span>
87<span class="n">PR_LOADED_LABEL</span>    <span class="o">=</span> <span class="s">r&quot;$P_{loaded}(r)$&quot;</span>
88<span class="n">IQ_DATA_LABEL</span>      <span class="o">=</span> <span class="s">r&quot;$I_{obs}(q)$&quot;</span>
89<span class="n">IQ_FIT_LABEL</span>       <span class="o">=</span> <span class="s">r&quot;$I_{fit}(q)$&quot;</span>
90<span class="n">IQ_SMEARED_LABEL</span>   <span class="o">=</span> <span class="s">r&quot;$I_{smeared}(q)$&quot;</span>
91<span class="n">GROUP_ID_IQ_DATA</span> <span class="o">=</span> <span class="s">r&quot;$I_{obs}(q)$&quot;</span>
92<span class="n">GROUP_ID_PR_FIT</span> <span class="o">=</span> <span class="s">r&quot;$P_{fit}(r)$&quot;</span>
93
94
95
96<span class="k">class</span> <span class="nc">Plugin</span><span class="p">(</span><span class="n">PluginBase</span><span class="p">):</span>
97<div class="viewcode-block" id="Plugin"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
98<span class="sd">        P(r) inversion perspective</span>
99<span class="sd">    &quot;&quot;&quot;</span>
100    <span class="n">DEFAULT_ALPHA</span> <span class="o">=</span> <span class="mf">0.0001</span>
101    <span class="n">DEFAULT_NFUNC</span> <span class="o">=</span> <span class="mi">10</span>
102    <span class="n">DEFAULT_DMAX</span>  <span class="o">=</span> <span class="mf">140.0</span>
103   
104    <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">standalone</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
105        <span class="n">PluginBase</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">name</span><span class="o">=</span><span class="s">&quot;Pr Inversion&quot;</span><span class="p">,</span> <span class="n">standalone</span><span class="o">=</span><span class="n">standalone</span><span class="p">)</span>
106        <span class="c">## Simulation window manager</span>
107        <span class="bp">self</span><span class="o">.</span><span class="n">simview</span> <span class="o">=</span> <span class="bp">None</span>
108       
109        <span class="c">## State data</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>      <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_ALPHA</span>
111        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span>      <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_NFUNC</span>
112        <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_DMAX</span>
113        <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span>      <span class="o">=</span> <span class="bp">None</span>
114        <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span>      <span class="o">=</span> <span class="bp">None</span>
115        <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span>    <span class="o">=</span> <span class="bp">False</span>
116        <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="mi">0</span>
117        <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="mi">0</span>
118        <span class="c">## Remember last plottable processed</span>
119        <span class="bp">self</span><span class="o">.</span><span class="n">last_data</span>  <span class="o">=</span> <span class="s">&quot;sphere_60_q0_2.txt&quot;</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span> <span class="o">=</span> <span class="bp">None</span>
121        <span class="c">## Time elapsed for last computation [sec]</span>
122        <span class="c"># Start with a good default</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="mf">0.022</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">iq_data_shown</span> <span class="o">=</span> <span class="bp">False</span>
125       
126        <span class="c">## Current invertor</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">invertor</span>    <span class="o">=</span> <span class="bp">None</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">pr</span>          <span class="o">=</span> <span class="bp">None</span>
129        <span class="bp">self</span><span class="o">.</span><span class="n">data_id</span> <span class="o">=</span> <span class="n">IQ_DATA_LABEL</span> 
130        <span class="c"># Copy of the last result in case we need to display it.</span>
131        <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span>    <span class="o">=</span> <span class="bp">None</span>
132        <span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span>   <span class="o">=</span> <span class="bp">None</span>
133        <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span>   <span class="o">=</span> <span class="bp">None</span>
134        <span class="c">## Calculation thread</span>
135        <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</span> <span class="o">=</span> <span class="bp">None</span>
136        <span class="c">## Estimation thread</span>
137        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span> <span class="o">=</span> <span class="bp">None</span>
138        <span class="c">## Result panel</span>
139        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span> <span class="o">=</span> <span class="bp">None</span>
140        <span class="c">## Currently views plottable</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span> <span class="o">=</span> <span class="bp">None</span>
142        <span class="c">## Number of P(r) points to display on the output plot</span>
143        <span class="bp">self</span><span class="o">.</span><span class="n">_pr_npts</span> <span class="o">=</span> <span class="mi">51</span>
144        <span class="c">## Flag to let the plug-in know that it is running standalone</span>
145        <span class="bp">self</span><span class="o">.</span><span class="n">standalone</span> <span class="o">=</span> <span class="n">standalone</span>
146        <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span> <span class="o">=</span> <span class="bp">False</span>
147        <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span> <span class="o">=</span> <span class="bp">False</span>
148       
149        <span class="c">## List of added P(r) plots</span>
150        <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span> <span class="o">=</span> <span class="p">{}</span>
151        <span class="bp">self</span><span class="o">.</span><span class="n">_default_Iq</span>  <span class="o">=</span> <span class="p">{}</span>
152        <span class="bp">self</span><span class="o">.</span><span class="n">list_plot_id</span> <span class="o">=</span> <span class="p">[]</span>
153       
154        <span class="c"># Associate the inversion state reader with .prv files</span>
155        <span class="kn">from</span> <span class="nn">inversion_state</span> <span class="kn">import</span> <span class="n">Reader</span>
156         
157        <span class="c"># Create a CanSAS/Pr reader</span>
158        <span class="bp">self</span><span class="o">.</span><span class="n">state_reader</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">)</span>
159        <span class="bp">self</span><span class="o">.</span><span class="n">_extensions</span> <span class="o">=</span> <span class="s">&#39;.prv&#39;</span>
160        <span class="n">l</span> <span class="o">=</span> <span class="n">Loader</span><span class="p">()</span>
161        <span class="n">l</span><span class="o">.</span><span class="n">associate_file_reader</span><span class="p">(</span><span class="s">&#39;.prv&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">state_reader</span><span class="p">)</span>
162        <span class="c">#l.associate_file_reader(&quot;.svs&quot;, self.state_reader)</span>
163               
164        <span class="c"># Log startup</span>
165        <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Pr(r) plug-in started&quot;</span><span class="p">)</span>
166       
167    <span class="k">def</span> <span class="nf">delete_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_id</span><span class="p">):</span>
168<div class="viewcode-block" id="Plugin.delete_data"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.delete_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
169<span class="sd">        delete the data association with prview</span>
170<span class="sd">        &quot;&quot;&quot;</span>
171        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">clear_panel</span><span class="p">()</span>
172       
173    <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>
174<div class="viewcode-block" id="Plugin.get_data"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.get_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
175<span class="sd">            Returns the current data</span>
176<span class="sd">        &quot;&quot;&quot;</span>
177        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span>
178   
179    <span class="k">def</span> <span class="nf">set_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">datainfo</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
180<div class="viewcode-block" id="Plugin.set_state"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.set_state">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
181<span class="sd">        Call-back method for the inversion state reader.</span>
182<span class="sd">        This method is called when a .prv file is loaded.</span>
183<span class="sd">        </span>
184<span class="sd">        :param state: InversionState object</span>
185<span class="sd">        :param datainfo: Data1D object [optional]</span>
186<span class="sd">        </span>
187<span class="sd">        &quot;&quot;&quot;</span>
188        <span class="k">try</span><span class="p">:</span>
189            <span class="k">if</span> <span class="n">datainfo</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;list&#39;</span><span class="p">:</span>
190                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">datainfo</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">1</span><span class="p">:</span>
191                    <span class="n">data</span> <span class="o">=</span> <span class="n">datainfo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
192                <span class="k">else</span><span class="p">:</span>
193                    <span class="n">data</span> <span class="o">=</span> <span class="bp">None</span>
194            <span class="k">else</span><span class="p">:</span>
195                <span class="n">data</span> <span class="o">=</span> <span class="n">datainfo</span>
196            <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
197                <span class="n">msg</span> <span class="o">=</span>  <span class="s">&quot;Pr.set_state: datainfo parameter cannot &quot;</span>
198                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;be None in standalone mode&quot;</span>
199                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
200           
201            <span class="c"># Ensuring that plots are coordinated correctly</span>
202            <span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)</span>
203            <span class="n">time_str</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&quot;%b </span><span class="si">%d</span><span class="s"> %H:%M&quot;</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
204           
205            <span class="c"># Check that no time stamp is already appended</span>
206            <span class="n">max_char</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;[&quot;</span><span class="p">)</span>
207            <span class="k">if</span> <span class="n">max_char</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
208                <span class="n">max_char</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span><span class="p">)</span>
209           
210            <span class="n">datainfo</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span>\
211                <span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">max_char</span><span class="p">]</span>\
212                <span class="o">+</span> <span class="s">&#39; [&#39;</span> <span class="o">+</span> <span class="n">time_str</span> <span class="o">+</span> <span class="s">&#39;]&#39;</span>
213           
214            <span class="n">data</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span>
215            <span class="c"># TODO:</span>
216            <span class="c">#remove this call when state save all information about the gui data</span>
217            <span class="c"># such as ID , Group_ID, etc...</span>
218            <span class="c">#make self.current_plottable = datainfo directly</span>
219            <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">create_gui_data</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
220            <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">file</span>
221           
222            <span class="c"># Make sure the user sees the P(r) panel after loading</span>
223            <span class="c">#self.parent.set_perspective(self.perspective)  </span>
224            <span class="bp">self</span><span class="o">.</span><span class="n">on_perspective</span><span class="p">(</span><span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>   
225            <span class="c"># Load the P(r) results</span>
226            <span class="c">#state = self.state_reader.get_state()</span>
227            <span class="n">data_dict</span> <span class="o">=</span> <span class="p">{</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">id</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="p">}</span>
228            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">add_data</span><span class="p">(</span><span class="n">data_list</span><span class="o">=</span><span class="n">data_dict</span><span class="p">)</span>
229            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="p">,</span>
230                                        <span class="n">title</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">title</span><span class="p">))</span>
231            <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
232        <span class="k">except</span><span class="p">:</span>
233            <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;prview.set_state: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
234
235 
236    <span class="k">def</span> <span class="nf">help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span></div>
237<div class="viewcode-block" id="Plugin.help"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.help">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
238<span class="sd">        Show a general help dialog. </span>
239<span class="sd">        </span>
240<span class="sd">        :TODO: replace the text with a nice image</span>
241<span class="sd">        </span>
242<span class="sd">        &quot;&quot;&quot;</span>
243        <span class="kn">from</span> <span class="nn">inversion_panel</span> <span class="kn">import</span> <span class="n">HelpDialog</span>
244        <span class="n">dialog</span> <span class="o">=</span> <span class="n">HelpDialog</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
245        <span class="k">if</span> <span class="n">dialog</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span> <span class="o">==</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">:</span>
246            <span class="n">dialog</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
247        <span class="k">else</span><span class="p">:</span>
248            <span class="n">dialog</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
249   
250    <span class="k">def</span> <span class="nf">_fit_pr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span></div>
251        <span class="sd">&quot;&quot;&quot;</span>
252<span class="sd">        &quot;&quot;&quot;</span>
253        <span class="c"># Generate P(r) for sphere</span>
254        <span class="n">radius</span> <span class="o">=</span> <span class="mf">60.0</span>
255        <span class="n">d_max</span>  <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">radius</span>
256       
257        <span class="n">r</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.01</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> <span class="n">d_max</span><span class="o">/</span><span class="mf">51.0</span><span class="p">)</span>
258        <span class="n">M</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
259        <span class="n">y</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="n">M</span><span class="p">)</span>
260        <span class="n">pr_err</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="n">M</span><span class="p">)</span>
261       
262        <span class="nb">sum</span> <span class="o">=</span> <span class="mf">0.0</span>
263        <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">M</span><span class="p">):</span>
264            <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_theory</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="n">j</span><span class="p">],</span> <span class="n">radius</span><span class="p">)</span>
265            <span class="nb">sum</span> <span class="o">+=</span> <span class="n">value</span>
266            <span class="n">y</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
267            <span class="n">pr_err</span><span class="p">[</span><span class="n">j</span><span class="p">]</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">y</span><span class="p">[</span><span class="n">j</span><span class="p">])</span>
268
269        <span class="n">y</span> <span class="o">=</span> <span class="n">y</span><span class="o">/</span><span class="nb">sum</span><span class="o">*</span><span class="n">d_max</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
270
271        <span class="c"># Perform fit</span>
272        <span class="n">pr</span> <span class="o">=</span> <span class="n">Invertor</span><span class="p">()</span>
273        <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="n">d_max</span>
274        <span class="n">pr</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="mi">0</span>
275        <span class="n">pr</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">r</span>
276        <span class="n">pr</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
277        <span class="n">pr</span><span class="o">.</span><span class="n">err</span> <span class="o">=</span> <span class="n">pr_err</span>
278        <span class="n">out</span><span class="p">,</span> <span class="n">cov</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">pr_fit</span><span class="p">()</span>
279        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="p">)):</span>
280            <span class="k">print</span> <span class="s">&quot;</span><span class="si">%g</span><span class="s"> +- </span><span class="si">%g</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">out</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">cov</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="p">]))</span>
281       
282        <span class="c"># Show input P(r)</span>
283        <span class="n">title</span> <span class="o">=</span> <span class="s">&quot;Pr&quot;</span>
284        <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">pr</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">pr</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="n">pr</span><span class="o">.</span><span class="n">err</span><span class="p">)</span>
285        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;P_{obs}(r)&quot;</span>
286        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{r}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
287        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{P(r)} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-3}&quot;</span><span class="p">)</span>
288        <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="s">&quot;P_{obs}(r)&quot;</span>
289        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="s">&quot;P_{obs}(r)&quot;</span>
290        <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
291        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span>  <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>
292        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">))</span>
293
294        <span class="c"># Show P(r) fit</span>
295        <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">pr</span><span class="p">)</span>
296       
297        <span class="c"># Show I(q) fit</span>
298        <span class="n">q</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.001</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.01</span><span class="o">/</span><span class="mf">51.0</span><span class="p">)</span>
299        <span class="bp">self</span><span class="o">.</span><span class="n">show_iq</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">q</span><span class="p">)</span>
300       
301    <span class="k">def</span> <span class="nf">show_shpere</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">radius</span><span class="o">=</span><span class="mf">70.0</span><span class="p">,</span> <span class="n">x_range</span><span class="o">=</span><span class="mf">70.0</span><span class="p">):</span>
302<div class="viewcode-block" id="Plugin.show_shpere"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.show_shpere">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
303<span class="sd">        &quot;&quot;&quot;</span>
304        <span class="c"># Show P(r)</span>
305        <span class="n">y_true</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="n">x</span><span class="p">))</span>
306
307        <span class="n">sum_true</span> <span class="o">=</span> <span class="mf">0.0</span>
308        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
309            <span class="n">y_true</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_theory</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">radius</span><span class="p">)</span>           
310            <span class="n">sum_true</span> <span class="o">+=</span> <span class="n">y_true</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
311           
312        <span class="n">y_true</span> <span class="o">=</span> <span class="n">y_true</span><span class="o">/</span><span class="n">sum_true</span><span class="o">*</span><span class="n">x_range</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
313       
314        <span class="c"># Show the theory P(r)</span>
315        <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y_true</span><span class="p">)</span>
316        <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
317        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;P_{true}(r)&quot;</span>
318        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{r}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
319        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{P(r)} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-3}&quot;</span><span class="p">)</span>
320        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="s">&quot;P_{true}(r)&quot;</span>
321        <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="s">&quot;P_{true}(r)&quot;</span>
322        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>
323        <span class="c">#Put this call in plottables/guitools    </span>
324        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span>
325                                                <span class="n">title</span><span class="o">=</span><span class="s">&quot;Sphere P(r)&quot;</span><span class="p">))</span>
326       
327       
328    <span class="k">def</span> <span class="nf">get_npts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
329<div class="viewcode-block" id="Plugin.get_npts"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.get_npts">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
330<span class="sd">        Returns the number of points in the I(q) data</span>
331<span class="sd">        &quot;&quot;&quot;</span>
332        <span class="k">try</span><span class="p">:</span>
333            <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">pr</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
334        <span class="k">except</span><span class="p">:</span>
335            <span class="k">return</span> <span class="mi">0</span>
336       
337    <span class="k">def</span> <span class="nf">show_iq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
338<div class="viewcode-block" id="Plugin.show_iq"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.show_iq">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
339<span class="sd">        &quot;&quot;&quot;</span> 
340        <span class="n">qtemp</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">x</span>
341        <span class="k">if</span> <span class="ow">not</span> <span class="n">q</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
342            <span class="n">qtemp</span> <span class="o">=</span> <span class="n">q</span>
343
344        <span class="c"># Make a plot</span>
345        <span class="n">maxq</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
346        <span class="k">for</span> <span class="n">q_i</span> <span class="ow">in</span> <span class="n">qtemp</span><span class="p">:</span>
347            <span class="k">if</span> <span class="n">q_i</span><span class="o">&gt;</span><span class="n">maxq</span><span class="p">:</span>
348                <span class="n">maxq</span><span class="o">=</span><span class="n">q_i</span>
349               
350        <span class="n">minq</span> <span class="o">=</span> <span class="mf">0.001</span>
351       
352        <span class="c"># Check for user min/max</span>
353        <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span><span class="o">.</span><span class="n">q_min</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
354            <span class="n">minq</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">q_min</span>
355        <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span><span class="o">.</span><span class="n">q_max</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
356            <span class="n">maxq</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">q_max</span>
357               
358        <span class="n">x</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">minq</span><span class="p">,</span> <span class="n">maxq</span><span class="p">,</span> <span class="n">maxq</span><span class="o">/</span><span class="mf">301.0</span><span class="p">)</span>
359        <span class="n">y</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="n">x</span><span class="p">))</span>
360        <span class="n">err</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="n">x</span><span class="p">))</span>
361        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
362            <span class="n">value</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">iq</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
363            <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
364            <span class="k">try</span><span class="p">:</span>
365                <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</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">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
366            <span class="k">except</span><span class="p">:</span>
367                <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.0</span>
368                <span class="k">print</span> <span class="s">&quot;Error getting error&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
369               
370        <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
371        <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
372        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">IQ_FIT_LABEL</span>
373        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Q}&quot;</span><span class="p">,</span> <span class="s">&#39;A^{-1}&#39;</span><span class="p">)</span>
374        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Intensity} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-1}&quot;</span><span class="p">)</span>
375        <span class="n">title</span> <span class="o">=</span> <span class="s">&quot;I(q)&quot;</span>
376        <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
377       
378        <span class="c"># If we have a group ID, use it</span>
379        <span class="k">if</span> <span class="n">pr</span><span class="o">.</span><span class="n">info</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&quot;plot_group_id&quot;</span><span class="p">):</span>
380            <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">info</span><span class="p">[</span><span class="s">&quot;plot_group_id&quot;</span><span class="p">]</span>
381        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">IQ_FIT_LABEL</span>
382        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>
383       
384        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">))</span>
385       
386        <span class="c"># If we have used slit smearing, plot the smeared I(q) too</span>
387        <span class="k">if</span> <span class="n">pr</span><span class="o">.</span><span class="n">slit_width</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">pr</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
388            <span class="n">x</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">minq</span><span class="p">,</span> <span class="n">maxq</span><span class="p">,</span> <span class="n">maxq</span><span class="o">/</span><span class="mf">301.0</span><span class="p">)</span>
389            <span class="n">y</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="n">x</span><span class="p">))</span>
390            <span class="n">err</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="n">x</span><span class="p">))</span>
391            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
392                <span class="n">value</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">iq_smeared</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
393                <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
394                <span class="k">try</span><span class="p">:</span>
395                    <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</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">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
396                <span class="k">except</span><span class="p">:</span>
397                    <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.0</span>
398                    <span class="k">print</span> <span class="s">&quot;Error getting error&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
399                   
400            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
401            <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
402            <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">IQ_SMEARED_LABEL</span>
403            <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Q}&quot;</span><span class="p">,</span> <span class="s">&#39;A^{-1}&#39;</span><span class="p">)</span>
404            <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Intensity} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-1}&quot;</span><span class="p">)</span>
405            <span class="c"># If we have a group ID, use it</span>
406            <span class="k">if</span> <span class="n">pr</span><span class="o">.</span><span class="n">info</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&quot;plot_group_id&quot;</span><span class="p">):</span>
407              <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">info</span><span class="p">[</span><span class="s">&quot;plot_group_id&quot;</span><span class="p">]</span>
408            <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">IQ_SMEARED_LABEL</span>
409            <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
410            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>
411            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="n">title</span><span class="p">))</span>
412       
413    <span class="k">def</span> <span class="nf">_on_pr_npts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span></div>
414        <span class="sd">&quot;&quot;&quot;</span>
415<span class="sd">        Redisplay P(r) with a different number of points</span>
416<span class="sd">        &quot;&quot;&quot;</span>   
417        <span class="kn">from</span> <span class="nn">inversion_panel</span> <span class="kn">import</span> <span class="n">PrDistDialog</span>
418        <span class="n">dialog</span> <span class="o">=</span> <span class="n">PrDistDialog</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
419        <span class="n">dialog</span><span class="o">.</span><span class="n">set_content</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_pr_npts</span><span class="p">)</span>
420        <span class="k">if</span> <span class="n">dialog</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span> <span class="o">==</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">:</span>
421            <span class="bp">self</span><span class="o">.</span><span class="n">_pr_npts</span><span class="o">=</span> <span class="n">dialog</span><span class="o">.</span><span class="n">get_content</span><span class="p">()</span>
422            <span class="n">dialog</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
423            <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span><span class="p">)</span>
424        <span class="k">else</span><span class="p">:</span>
425            <span class="n">dialog</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
426       
427       
428    <span class="k">def</span> <span class="nf">show_pr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">cov</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
429<div class="viewcode-block" id="Plugin.show_pr"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.show_pr">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
430<span class="sd">        &quot;&quot;&quot;</span>     
431        <span class="c"># Show P(r)</span>
432        <span class="n">x</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span><span class="p">,</span> <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">_pr_npts</span><span class="p">)</span>
433   
434        <span class="n">y</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="n">x</span><span class="p">))</span>
435        <span class="n">dy</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="n">x</span><span class="p">))</span>
436        <span class="n">y_true</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="n">x</span><span class="p">))</span>
437
438        <span class="nb">sum</span> <span class="o">=</span> <span class="mf">0.0</span>
439        <span class="n">pmax</span> <span class="o">=</span> <span class="mf">0.0</span>
440        <span class="n">cov2</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ascontiguousarray</span><span class="p">(</span><span class="n">cov</span><span class="p">)</span>
441       
442        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
443            <span class="k">if</span> <span class="n">cov2</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
444                <span class="n">value</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">pr</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
445            <span class="k">else</span><span class="p">:</span>
446                <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">dy</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">pr_err</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">cov2</span><span class="p">,</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
447            <span class="nb">sum</span> <span class="o">+=</span> <span class="n">value</span><span class="o">*</span><span class="n">pr</span><span class="o">.</span><span class="n">d_max</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
448           
449            <span class="c"># keep track of the maximum P(r) value</span>
450            <span class="k">if</span> <span class="n">value</span><span class="o">&gt;</span><span class="n">pmax</span><span class="p">:</span>
451                <span class="n">pmax</span> <span class="o">=</span> <span class="n">value</span>
452               
453            <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
454               
455        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span><span class="o">==</span><span class="bp">True</span><span class="p">:</span>
456            <span class="n">y</span> <span class="o">=</span> <span class="n">y</span><span class="o">/</span><span class="nb">sum</span>
457            <span class="n">dy</span> <span class="o">=</span> <span class="n">dy</span><span class="o">/</span><span class="nb">sum</span>
458        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span><span class="o">==</span><span class="bp">True</span><span class="p">:</span>
459            <span class="n">y</span> <span class="o">=</span> <span class="n">y</span><span class="o">/</span><span class="n">pmax</span>
460            <span class="n">dy</span> <span class="o">=</span> <span class="n">dy</span><span class="o">/</span><span class="n">pmax</span>
461       
462        <span class="k">if</span> <span class="n">cov2</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
463            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
464            <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
465        <span class="k">else</span><span class="p">:</span>
466            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</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">dy</span><span class="o">=</span><span class="n">dy</span><span class="p">)</span>
467        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">PR_FIT_LABEL</span>
468        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{r}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
469        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{P(r)} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-3}&quot;</span><span class="p">)</span>
470        <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s">&quot;P(r) fit&quot;</span>
471        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">PR_FIT_LABEL</span>
472        <span class="c"># Make sure that the plot is linear</span>
473        <span class="n">new_plot</span><span class="o">.</span><span class="n">xtransform</span> <span class="o">=</span> <span class="s">&quot;x&quot;</span>
474        <span class="n">new_plot</span><span class="o">.</span><span class="n">ytransform</span> <span class="o">=</span> <span class="s">&quot;y&quot;</span> 
475        <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="n">GROUP_ID_PR_FIT</span>
476        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>   
477        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&quot;P(r) fit&quot;</span><span class="p">))</span>
478        <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span>
479         
480    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span></div>
481<div class="viewcode-block" id="Plugin.load"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.load">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
482<span class="sd">        Load data. This will eventually be replaced</span>
483<span class="sd">        by our standard DataLoader class.</span>
484<span class="sd">        &quot;&quot;&quot;</span>
485        <span class="k">class</span> <span class="nc">FileData</span><span class="p">:</span>
486            <span class="n">x</span> <span class="o">=</span> <span class="bp">None</span>
487            <span class="n">y</span> <span class="o">=</span> <span class="bp">None</span>
488            <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span>
489            <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
490           
491            <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">path</span><span class="p">):</span>
492                <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
493               
494        <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span> <span class="o">=</span> <span class="n">FileData</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
495       
496        <span class="c"># Use data loader to load file</span>
497        <span class="c">#dataread = Loader().load(path)</span>
498        <span class="n">dataread</span> <span class="o">=</span> <span class="n">data</span>
499        <span class="c"># Notify the user if we could not read the file</span>
500        <span class="k">if</span> <span class="n">dataread</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
501            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Invalid data&quot;</span>
502           
503        <span class="n">x</span> <span class="o">=</span> <span class="bp">None</span>
504        <span class="n">y</span> <span class="o">=</span> <span class="bp">None</span>
505        <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span>
506        <span class="k">if</span> <span class="n">dataread</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;Data1D&#39;</span><span class="p">:</span>
507            <span class="n">x</span> <span class="o">=</span> <span class="n">dataread</span><span class="o">.</span><span class="n">x</span>
508            <span class="n">y</span> <span class="o">=</span> <span class="n">dataread</span><span class="o">.</span><span class="n">y</span>
509            <span class="n">err</span> <span class="o">=</span> <span class="n">dataread</span><span class="o">.</span><span class="n">dy</span>
510        <span class="k">else</span><span class="p">:</span>
511            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataread</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">dataread</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">0</span><span class="p">:</span>
512                <span class="n">x</span> <span class="o">=</span> <span class="n">dataread</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">x</span>
513                <span class="n">y</span> <span class="o">=</span> <span class="n">dataread</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">y</span>
514                <span class="n">err</span> <span class="o">=</span> <span class="n">dataread</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">dy</span>
515                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PrView only allows a single data set at a time. &quot;</span>
516                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;Only the first data set was loaded.&quot;</span> 
517                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">))</span>
518            <span class="k">else</span><span class="p">:</span>
519                <span class="k">if</span> <span class="n">dataread</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
520                    <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">err</span>
521                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;This tool can only read 1D data&quot;</span>
522       
523        <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
524        <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
525        <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">err</span> <span class="o">=</span> <span class="n">err</span>
526        <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">err</span>
527               
528    <span class="k">def</span> <span class="nf">load_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="s">&quot;sphere_60_q0_2.txt&quot;</span><span class="p">):</span></div>
529<div class="viewcode-block" id="Plugin.load_columns"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.load_columns">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
530<span class="sd">        Load 2- or 3- column ascii</span>
531<span class="sd">        &quot;&quot;&quot;</span>
532        <span class="c"># Read the data from the data file</span>
533        <span class="n">data_x</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="mi">0</span><span class="p">)</span>
534        <span class="n">data_y</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="mi">0</span><span class="p">)</span>
535        <span class="n">data_err</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="mi">0</span><span class="p">)</span>
536        <span class="n">scale</span>    <span class="o">=</span> <span class="bp">None</span>
537        <span class="n">min_err</span>  <span class="o">=</span> <span class="mf">0.0</span>
538        <span class="k">if</span> <span class="ow">not</span> <span class="n">path</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
539            <span class="n">input_f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
540            <span class="n">buff</span>    <span class="o">=</span> <span class="n">input_f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
541            <span class="n">lines</span>   <span class="o">=</span> <span class="n">buff</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
542            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
543                <span class="k">try</span><span class="p">:</span>
544                    <span class="n">toks</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
545                    <span class="n">x</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
546                    <span class="n">y</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
547                    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">toks</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">2</span><span class="p">:</span>
548                        <span class="n">err</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
549                    <span class="k">else</span><span class="p">:</span>
550                        <span class="k">if</span> <span class="n">scale</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
551                            <span class="n">scale</span> <span class="o">=</span> <span class="mf">0.05</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">y</span><span class="p">)</span>
552                            <span class="c">#scale = 0.05/math.sqrt(y)</span>
553                            <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.01</span><span class="o">*</span><span class="n">y</span>
554                        <span class="n">err</span> <span class="o">=</span> <span class="n">scale</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">y</span><span class="p">)</span><span class="o">+</span><span class="n">min_err</span>
555                        <span class="c">#err = 0</span>
556                       
557                    <span class="n">data_x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
558                    <span class="n">data_y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_y</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
559                    <span class="n">data_err</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_err</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
560                <span class="k">except</span><span class="p">:</span>
561                    <span class="k">pass</span>
562                   
563        <span class="k">if</span> <span class="ow">not</span> <span class="n">scale</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
564            <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;The loaded file had no error bars, statistical errors are assumed.&quot;</span>
565            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">message</span><span class="p">))</span>
566        <span class="k">else</span><span class="p">:</span>
567            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">))</span>
568                       
569        <span class="k">return</span> <span class="n">data_x</span><span class="p">,</span> <span class="n">data_y</span><span class="p">,</span> <span class="n">data_err</span>     
570       
571    <span class="k">def</span> <span class="nf">load_abs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span></div>
572<div class="viewcode-block" id="Plugin.load_abs"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.load_abs">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
573<span class="sd">        Load an IGOR .ABS reduced file</span>
574<span class="sd">        </span>
575<span class="sd">        :param path: file path</span>
576<span class="sd">        </span>
577<span class="sd">        :return: x, y, err vectors</span>
578<span class="sd">        </span>
579<span class="sd">        &quot;&quot;&quot;</span>
580        <span class="c"># Read the data from the data file</span>
581        <span class="n">data_x</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="mi">0</span><span class="p">)</span>
582        <span class="n">data_y</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="mi">0</span><span class="p">)</span>
583        <span class="n">data_err</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="mi">0</span><span class="p">)</span>
584        <span class="n">scale</span>    <span class="o">=</span> <span class="bp">None</span>
585        <span class="n">min_err</span>  <span class="o">=</span> <span class="mf">0.0</span>
586       
587        <span class="n">data_started</span> <span class="o">=</span> <span class="bp">False</span>
588        <span class="k">if</span> <span class="ow">not</span> <span class="n">path</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
589            <span class="n">input_f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
590            <span class="n">buff</span>    <span class="o">=</span> <span class="n">input_f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
591            <span class="n">lines</span>   <span class="o">=</span> <span class="n">buff</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
592            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
593                <span class="k">if</span> <span class="n">data_started</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
594                    <span class="k">try</span><span class="p">:</span>
595                        <span class="n">toks</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
596                        <span class="n">x</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
597                        <span class="n">y</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
598                        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">toks</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">2</span><span class="p">:</span>
599                            <span class="n">err</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
600                        <span class="k">else</span><span class="p">:</span>
601                            <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
602                                <span class="n">scale</span> <span class="o">=</span> <span class="mf">0.05</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">y</span><span class="p">)</span>
603                                <span class="c">#scale = 0.05/math.sqrt(y)</span>
604                                <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.01</span><span class="o">*</span><span class="n">y</span>
605                            <span class="n">err</span> <span class="o">=</span> <span class="n">scale</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">y</span><span class="p">)</span><span class="o">+</span><span class="n">min_err</span>
606                            <span class="c">#err = 0</span>
607                           
608                        <span class="n">data_x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
609                        <span class="n">data_y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_y</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
610                        <span class="n">data_err</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data_err</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span>
611                    <span class="k">except</span><span class="p">:</span>
612                        <span class="k">pass</span>
613                <span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&quot;The 6 columns&quot;</span><span class="p">)</span><span class="o">&gt;=</span><span class="mi">0</span><span class="p">:</span>
614                    <span class="n">data_started</span> <span class="o">=</span> <span class="bp">True</span>     
615                   
616        <span class="k">if</span> <span class="ow">not</span> <span class="n">scale</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
617            <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;The loaded file had no error bars, statistical errors are assumed.&quot;</span>
618            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">message</span><span class="p">))</span>
619        <span class="k">else</span><span class="p">:</span>
620            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">))</span>
621                       
622        <span class="k">return</span> <span class="n">data_x</span><span class="p">,</span> <span class="n">data_y</span><span class="p">,</span> <span class="n">data_err</span>     
623       
624    <span class="k">def</span> <span class="nf">pr_theory</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">):</span></div>
625<div class="viewcode-block" id="Plugin.pr_theory"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.pr_theory">[docs]</a>        <span class="sd">&quot;&quot;&quot;  </span>
626<span class="sd">            Return P(r) of a sphere for a given R </span>
627<span class="sd">            For test purposes</span>
628<span class="sd">        &quot;&quot;&quot;</span>
629        <span class="k">if</span> <span class="n">r</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="o">*</span><span class="n">R</span><span class="p">:</span>
630            <span class="k">return</span> <span class="mf">12.0</span><span class="o">*</span> <span class="p">((</span><span class="mf">0.5</span><span class="o">*</span><span class="n">r</span><span class="o">/</span><span class="n">R</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="p">((</span><span class="mf">1.0</span><span class="o">-</span><span class="mf">0.5</span><span class="o">*</span><span class="n">r</span><span class="o">/</span><span class="n">R</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span> <span class="mf">2.0</span> <span class="o">+</span> <span class="mf">0.5</span><span class="o">*</span><span class="n">r</span><span class="o">/</span><span class="n">R</span> <span class="p">)</span>
631        <span class="k">else</span><span class="p">:</span>
632            <span class="k">return</span> <span class="mf">0.0</span>
633
634    <span class="k">def</span> <span class="nf">get_context_menu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plotpanel</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
635<div class="viewcode-block" id="Plugin.get_context_menu"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.get_context_menu">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
636<span class="sd">        Get the context menu items available for P(r)</span>
637<span class="sd">        </span>
638<span class="sd">        :param graph: the Graph object to which we attach the context menu</span>
639<span class="sd">        </span>
640<span class="sd">        :return: a list of menu items with call-back function</span>
641<span class="sd">        </span>
642<span class="sd">        &quot;&quot;&quot;</span>
643        <span class="n">graph</span> <span class="o">=</span> <span class="n">plotpanel</span><span class="o">.</span><span class="n">graph</span>
644        <span class="c"># Look whether this Graph contains P(r) data</span>
645        <span class="k">if</span> <span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">plotpanel</span><span class="o">.</span><span class="n">plots</span><span class="p">:</span>
646            <span class="k">return</span> <span class="p">[]</span>
647        <span class="n">item</span> <span class="o">=</span> <span class="n">plotpanel</span><span class="o">.</span><span class="n">plots</span><span class="p">[</span><span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span><span class="p">]</span>
648        <span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">PR_FIT_LABEL</span><span class="p">:</span>
649            <span class="c">#add_data_hint = &quot;Load a data file and display it on this plot&quot;</span>
650            <span class="c">#[&quot;Add P(r) data&quot;,add_data_hint , self._on_add_data],</span>
651            <span class="n">change_n_hint</span> <span class="o">=</span> <span class="s">&quot;Change the number of&quot;</span>
652            <span class="n">change_n_hint</span> <span class="o">+=</span> <span class="s">&quot; points on the P(r) output&quot;</span>
653            <span class="n">change_n_label</span> <span class="o">=</span> <span class="s">&quot;Change number of P(r) points&quot;</span>
654            <span class="n">m_list</span> <span class="o">=</span> <span class="p">[[</span><span class="n">change_n_label</span><span class="p">,</span> <span class="n">change_n_hint</span> <span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_pr_npts</span><span class="p">]]</span>
655
656            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span><span class="p">:</span>
657                <span class="n">hint</span> <span class="o">=</span> <span class="s">&quot;Let the output P(r) keep the scale of the data&quot;</span>
658                <span class="n">m_list</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="s">&quot;Disable P(r) scaling&quot;</span><span class="p">,</span> <span class="n">hint</span><span class="p">,</span> 
659                               <span class="bp">self</span><span class="o">.</span><span class="n">_on_disable_scaling</span><span class="p">])</span>
660            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span><span class="p">:</span>
661                <span class="n">m_list</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="s">&quot;Scale P_max(r) to unity&quot;</span><span class="p">,</span> 
662                               <span class="s">&quot;Scale P(r) so that its maximum is 1&quot;</span><span class="p">,</span> 
663                               <span class="bp">self</span><span class="o">.</span><span class="n">_on_scale_unity</span><span class="p">])</span>
664            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span><span class="p">:</span>
665                <span class="n">m_list</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="s">&quot;Normalize P(r) to unity&quot;</span><span class="p">,</span> 
666                               <span class="s">&quot;Normalize the integral of P(r) to 1&quot;</span><span class="p">,</span> 
667                               <span class="bp">self</span><span class="o">.</span><span class="n">_on_normalize</span><span class="p">])</span>
668               
669            <span class="k">return</span> <span class="n">m_list</span>
670             
671        <span class="k">elif</span> <span class="n">item</span><span class="o">.</span><span class="n">id</span> <span class="ow">in</span> <span class="p">[</span><span class="n">PR_LOADED_LABEL</span><span class="p">,</span> <span class="n">IQ_DATA_LABEL</span><span class="p">,</span> <span class="n">IQ_FIT_LABEL</span><span class="p">,</span>
672                          <span class="n">IQ_SMEARED_LABEL</span><span class="p">]:</span>
673            <span class="k">return</span> <span class="p">[]</span>
674        <span class="k">elif</span> <span class="n">item</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span><span class="p">:</span>
675           <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">standalone</span> <span class="ow">and</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">Data1D</span><span class="p">):</span>
676                <span class="k">return</span> <span class="p">[[</span><span class="s">&quot;Compute P(r)&quot;</span><span class="p">,</span> 
677                             <span class="s">&quot;Compute P(r) from distribution&quot;</span><span class="p">,</span> 
678                             <span class="bp">self</span><span class="o">.</span><span class="n">_on_context_inversion</span><span class="p">]]</span>     
679               
680        <span class="k">return</span> <span class="p">[]</span>
681
682    <span class="k">def</span> <span class="nf">_on_disable_scaling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span></div>
683        <span class="sd">&quot;&quot;&quot;</span>
684<span class="sd">        Disable P(r) scaling</span>
685<span class="sd">            </span>
686<span class="sd">        :param evt: Menu event</span>
687<span class="sd">        </span>
688<span class="sd">        &quot;&quot;&quot;</span>
689        <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span> <span class="o">=</span> <span class="bp">False</span>
690        <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span> <span class="o">=</span> <span class="bp">False</span>
691        <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span><span class="p">)</span>
692       
693        <span class="c"># Now replot the original added data</span>
694        <span class="k">for</span> <span class="n">plot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">:</span>
695            <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_default_Iq</span><span class="p">[</span><span class="n">plot</span><span class="p">])</span>
696            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
697                         <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">],</span> 
698                                      <span class="n">title</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
699                                                   <span class="n">update</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>       
700       
701        <span class="c"># Need the update flag in the NewPlotEvent to protect against</span>
702        <span class="c"># the plot no longer being there...</span>
703       
704    <span class="k">def</span> <span class="nf">_on_normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span>
705        <span class="sd">&quot;&quot;&quot;</span>
706<span class="sd">        Normalize the area under the P(r) curve to 1.</span>
707<span class="sd">        This operation is done for all displayed plots.</span>
708<span class="sd">        </span>
709<span class="sd">        :param evt: Menu event</span>
710<span class="sd">        </span>
711<span class="sd">        &quot;&quot;&quot;</span>
712        <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span> <span class="o">=</span> <span class="bp">True</span>
713        <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span> <span class="o">=</span> <span class="bp">False</span>
714           
715        <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span><span class="p">)</span>
716       
717        <span class="c"># Now scale the added plots too</span>
718        <span class="k">for</span> <span class="n">plot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">:</span>
719            <span class="nb">sum</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">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
720            <span class="n">npts</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">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
721            <span class="nb">sum</span> <span class="o">*=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">x</span><span class="p">[</span><span class="n">npts</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">npts</span>
722            <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">y</span><span class="o">/</span><span class="nb">sum</span>
723           
724            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
725            <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
726            <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">group_id</span>
727            <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">id</span>
728            <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">title</span>
729            <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
730            <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{r}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
731            <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{P(r)} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-3}&quot;</span><span class="p">)</span>
732            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>       
733            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
734                         <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
735                                         <span class="n">title</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
736       
737    <span class="k">def</span> <span class="nf">_on_scale_unity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span>
738        <span class="sd">&quot;&quot;&quot;</span>
739<span class="sd">        Scale the maximum P(r) value on each displayed plot to 1.</span>
740<span class="sd">        </span>
741<span class="sd">        :param evt: Menu event</span>
742<span class="sd">        </span>
743<span class="sd">        &quot;&quot;&quot;</span>
744        <span class="bp">self</span><span class="o">.</span><span class="n">_scale_output_unity</span> <span class="o">=</span> <span class="bp">True</span>
745        <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_output</span> <span class="o">=</span> <span class="bp">False</span>
746           
747        <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span><span class="p">)</span>
748       
749        <span class="c"># Now scale the added plots too</span>
750        <span class="k">for</span> <span class="n">plot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">:</span>
751            <span class="n">_max</span> <span class="o">=</span> <span class="mi">0</span>
752            <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">y</span><span class="p">:</span>
753                <span class="k">if</span> <span class="n">y</span><span class="o">&gt;</span><span class="n">_max</span><span class="p">:</span> 
754                    <span class="n">_max</span> <span class="o">=</span> <span class="n">y</span>
755            <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">y</span><span class="o">/</span><span class="n">_max</span>
756           
757            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
758            <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
759            <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
760            <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{r}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
761            <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{P(r)} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-3}&quot;</span><span class="p">)</span>
762            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">,</span><span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>       
763            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
764                         <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
765                                <span class="n">title</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_added_plots</span><span class="p">[</span><span class="n">plot</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>       
766               
767    <span class="k">def</span> <span class="nf">start_thread</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
768<div class="viewcode-block" id="Plugin.start_thread"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.start_thread">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
769<span class="sd">        &quot;&quot;&quot;</span>
770        <span class="kn">from</span> <span class="nn">pr_thread</span> <span class="kn">import</span> <span class="n">CalcPr</span>
771       
772        <span class="c"># If a thread is already started, stop it</span>
773        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</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">calc_thread</span><span class="o">.</span><span class="n">isrunning</span><span class="p">():</span>
774            <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
775            <span class="c">## stop just raises the flag -- the thread is supposed to </span>
776            <span class="c">## then kill itself. In August 2014 it was shown that this is</span>
777            <span class="c">## incorrectly handled by fitting.py and a fix implemented. </span>
778            <span class="c">## It is not clear whether it is properly used here, but the</span>
779            <span class="c">## &quot;fix&quot; of waiting for the previous thread to end breaks the</span>
780            <span class="c">## pr perspective completely as it causes an infinite loop.</span>
781            <span class="c">## Thus it is likely the threading is bing properly handled.</span>
782            <span class="c">## While the &quot;fix&quot; is no longer implemented the comment is</span>
783            <span class="c">## left here till somebody ascertains that in fact the threads</span>
784            <span class="c">## are being properly handled.</span>
785            <span class="c">##</span>
786            <span class="c">##    -PDB January 25, 2015                  </span>
787               
788        <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">clone</span><span class="p">()</span>
789        <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</span> <span class="o">=</span> <span class="n">CalcPr</span><span class="p">(</span><span class="n">pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">,</span>
790                                   <span class="n">error_func</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_thread_error</span><span class="p">,</span> 
791                                   <span class="n">completefn</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_completed</span><span class="p">,</span> <span class="n">updatefn</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
792        <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</span><span class="o">.</span><span class="n">queue</span><span class="p">()</span>
793        <span class="bp">self</span><span class="o">.</span><span class="n">calc_thread</span><span class="o">.</span><span class="n">ready</span><span class="p">(</span><span class="mf">2.5</span><span class="p">)</span>
794   
795    <span class="k">def</span> <span class="nf">_thread_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span></div>
796        <span class="sd">&quot;&quot;&quot;</span>
797<span class="sd">        &quot;&quot;&quot;</span>
798        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">error</span><span class="p">))</span>
799   
800    <span class="k">def</span> <span class="nf">_estimate_completed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
801        <span class="sd">&quot;&quot;&quot;</span>
802<span class="sd">        Parameter estimation completed, </span>
803<span class="sd">        display the results to the user</span>
804<span class="sd">        </span>
805<span class="sd">        :param alpha: estimated best alpha</span>
806<span class="sd">        :param elapsed: computation time</span>
807<span class="sd">        </span>
808<span class="sd">        &quot;&quot;&quot;</span>
809        <span class="c"># Save useful info</span>
810        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="n">elapsed</span>
811        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha_estimate</span> <span class="o">=</span> <span class="n">alpha</span>
812        <span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
813            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">)))</span>
814        <span class="bp">self</span><span class="o">.</span><span class="n">perform_estimateNT</span><span class="p">()</span>
815   
816    <span class="k">def</span> <span class="nf">_estimateNT_completed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nterms</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
817        <span class="sd">&quot;&quot;&quot;</span>
818<span class="sd">        Parameter estimation completed, </span>
819<span class="sd">        display the results to the user</span>
820<span class="sd">        </span>
821<span class="sd">        :param alpha: estimated best alpha</span>
822<span class="sd">        :param nterms: estimated number of terms</span>
823<span class="sd">        :param elapsed: computation time</span>
824<span class="sd">        </span>
825<span class="sd">        &quot;&quot;&quot;</span>
826        <span class="c"># Save useful info</span>
827        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="n">elapsed</span>
828        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">nterms_estimate</span> <span class="o">=</span> <span class="n">nterms</span>
829        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha_estimate</span> <span class="o">=</span> <span class="n">alpha</span>
830        <span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
831            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">)))</span>
832   
833    <span class="k">def</span> <span class="nf">_completed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">cov</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
834        <span class="sd">&quot;&quot;&quot;</span>
835<span class="sd">        wxCallAfter Method called with the results when the inversion</span>
836<span class="sd">        is done</span>
837<span class="sd">        </span>
838<span class="sd">        :param out: output coefficient for the base functions</span>
839<span class="sd">        :param cov: covariance matrix</span>
840<span class="sd">        :param pr: Invertor instance</span>
841<span class="sd">        :param elapsed: time spent computing</span>
842<span class="sd">        &quot;&quot;&quot;</span>
843        <span class="c"># Ensure hat you have all inputs are ready at the time call happens:</span>
844        <span class="c"># Without CallAfter, it will freeze with wx &gt;= 2.9.</span>
845        <span class="n">wx</span><span class="o">.</span><span class="n">CallAfter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_completed_call</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">cov</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">)</span>
846       
847    <span class="k">def</span> <span class="nf">_completed_call</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">cov</span><span class="p">,</span> <span class="n">pr</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
848        <span class="sd">&quot;&quot;&quot;</span>
849<span class="sd">        Method called with the results when the inversion</span>
850<span class="sd">        is done</span>
851<span class="sd">        </span>
852<span class="sd">        :param out: output coefficient for the base functions</span>
853<span class="sd">        :param cov: covariance matrix</span>
854<span class="sd">        :param pr: Invertor instance</span>
855<span class="sd">        :param elapsed: time spent computing</span>
856<span class="sd">        </span>
857<span class="sd">        &quot;&quot;&quot;</span>
858        <span class="c"># Save useful info</span>
859        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="n">elapsed</span>
860        <span class="c"># Keep a copy of the last result</span>
861        <span class="bp">self</span><span class="o">.</span><span class="n">_last_pr</span>  <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">clone</span><span class="p">()</span>
862        <span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span> <span class="o">=</span> <span class="n">out</span>
863        <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span> <span class="o">=</span> <span class="n">cov</span>
864       
865        <span class="c"># Save Pr invertor</span>
866        <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
867       
868        <span class="c">#message = &quot;Computation completed in&quot;</span>
869        <span class="c">#message +=  %g seconds [chi2=%g]&quot; % (elapsed, pr.chi2)</span>
870        <span class="c">#wx.PostEvent(self.parent, StatusEvent(status=message))</span>
871
872        <span class="n">cov</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ascontiguousarray</span><span class="p">(</span><span class="n">cov</span><span class="p">)</span>
873
874        <span class="c"># Show result on control panel</span>
875        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">chi2</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">chi2</span>
876        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="n">elapsed</span>
877        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">oscillation</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">oscillations</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
878        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">positive</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">get_positive</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
879        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">pos_err</span>  <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">get_pos_err</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">cov</span><span class="p">)</span>
880        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">rg</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">rg</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
881        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">iq0</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">iq0</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
882        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">bck</span> <span class="o">=</span> <span class="n">pr</span><span class="o">.</span><span class="n">background</span>
883                       
884        <span class="c"># Show I(q) fit</span>
885        <span class="bp">self</span><span class="o">.</span><span class="n">show_iq</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="p">)</span>
886       
887        <span class="c"># Show P(r) fit</span>
888        <span class="n">x_values</span><span class="p">,</span> <span class="n">x_range</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="p">,</span> <span class="n">cov</span><span class="p">)</span> 
889               
890    <span class="k">def</span> <span class="nf">show_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</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> <span class="n">reset</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
891<div class="viewcode-block" id="Plugin.show_data"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.show_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
892<span class="sd">        Show data read from a file</span>
893<span class="sd">        </span>
894<span class="sd">        :param path: file path</span>
895<span class="sd">        :param reset: if True all other plottables will be cleared</span>
896<span class="sd">        </span>
897<span class="sd">        &quot;&quot;&quot;</span>
898        <span class="c">#if path is not None:</span>
899        <span class="k">if</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>
900            <span class="k">try</span><span class="p">:</span>
901                <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_file_pr</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
902            <span class="k">except</span><span class="p">:</span>
903                <span class="n">status</span> <span class="o">=</span> <span class="s">&quot;Problem reading data: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span>
904                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">))</span>
905                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">status</span>
906               
907            <span class="c"># If the file contains nothing, just return</span>
908            <span class="k">if</span> <span class="n">pr</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
909                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;Loaded data is invalid&quot;</span>
910           
911            <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
912       
913        <span class="c"># Make a plot of I(q) data</span>
914        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">err</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
915            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pr</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">pr</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
916            <span class="n">new_plot</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">GUIFRAME_ID</span><span class="o">.</span><span class="n">CURVE_SYMBOL_NUM</span>
917        <span class="k">else</span><span class="p">:</span>
918            <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pr</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">pr</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">err</span><span class="p">)</span>
919        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">IQ_DATA_LABEL</span>
920        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Q}&quot;</span><span class="p">,</span> <span class="s">&#39;A^{-1}&#39;</span><span class="p">)</span>
921        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Intensity} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-1}&quot;</span><span class="p">)</span>
922        <span class="n">new_plot</span><span class="o">.</span><span class="n">interactive</span> <span class="o">=</span> <span class="bp">True</span>
923        <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="n">GROUP_ID_IQ_DATA</span>
924        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_id</span>
925        <span class="n">new_plot</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s">&quot;I(q)&quot;</span>   
926        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
927                     <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&quot;I(q)&quot;</span><span class="p">,</span> <span class="n">reset</span><span class="o">=</span><span class="n">reset</span><span class="p">))</span>
928       
929        <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span> <span class="o">=</span> <span class="n">new_plot</span>
930        <span class="c"># Get Q range</span>
931        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">q_min</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">pr</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
932        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">q_max</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">pr</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
933           
934    <span class="k">def</span> <span class="nf">save_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filepath</span><span class="p">,</span> <span class="n">prstate</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
935<div class="viewcode-block" id="Plugin.save_data"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.save_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
936<span class="sd">        Save data in provided state object.</span>
937<span class="sd">        </span>
938<span class="sd">        :TODO: move the state code away from inversion_panel and move it here. </span>
939<span class="sd">                Then remove the &quot;prstate&quot; input and make this method private.</span>
940<span class="sd">                </span>
941<span class="sd">        :param filepath: path of file to write to</span>
942<span class="sd">        :param prstate: P(r) inversion state </span>
943<span class="sd">        </span>
944<span class="sd">        &quot;&quot;&quot;</span>
945        <span class="c">#TODO: do we need this or can we use DataLoader.loader.save directly?</span>
946       
947        <span class="c"># Add output data and coefficients to state</span>
948        <span class="n">prstate</span><span class="o">.</span><span class="n">coefficients</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_out</span>
949        <span class="n">prstate</span><span class="o">.</span><span class="n">covariance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_last_cov</span>
950       
951        <span class="c"># Write the output to file</span>
952        <span class="c"># First, check that the data is of the right type</span>
953        <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span>
954                       <span class="n">sas</span><span class="o">.</span><span class="n">dataloader</span><span class="o">.</span><span class="n">data_info</span><span class="o">.</span><span class="n">Data1D</span><span class="p">):</span>
955            <span class="bp">self</span><span class="o">.</span><span class="n">state_reader</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="p">,</span> <span class="n">prstate</span><span class="p">)</span>
956        <span class="k">else</span><span class="p">:</span>
957            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;pr.save_data: the data being saved is not a&quot;</span>
958            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; sas.data_info.Data1D object&quot;</span> 
959            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
960       
961       
962    <span class="k">def</span> <span class="nf">setup_plot_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">nfunc</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> <span class="n">q_min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_max</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> </div>
963<div class="viewcode-block" id="Plugin.setup_plot_inversion"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.setup_plot_inversion">[docs]</a>                             <span class="n">bck</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
964        <span class="sd">&quot;&quot;&quot;</span>
965<span class="sd">        &quot;&quot;&quot;</span>
966        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">alpha</span>
967        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="n">nfunc</span>
968        <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="n">d_max</span>
969        <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="n">q_min</span>
970        <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="n">q_max</span>
971        <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="n">bck</span>
972        <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="n">height</span>
973        <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="n">width</span>
974       
975        <span class="k">try</span><span class="p">:</span>
976            <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_plot_pr</span><span class="p">()</span>
977            <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
978                <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
979                <span class="bp">self</span><span class="o">.</span><span class="n">perform_inversion</span><span class="p">()</span>
980        <span class="k">except</span><span class="p">:</span>
981            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">))</span>
982
983    <span class="k">def</span> <span class="nf">estimate_plot_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">nfunc</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> </div>
984<div class="viewcode-block" id="Plugin.estimate_plot_inversion"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.estimate_plot_inversion">[docs]</a>                                <span class="n">q_min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_max</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> 
985                                <span class="n">bck</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
986        <span class="sd">&quot;&quot;&quot;</span>
987<span class="sd">        &quot;&quot;&quot;</span>
988        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">alpha</span>
989        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="n">nfunc</span>
990        <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="n">d_max</span>
991        <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="n">q_min</span>
992        <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="n">q_max</span>
993        <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="n">bck</span>
994        <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="n">height</span>
995        <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="n">width</span>
996       
997        <span class="k">try</span><span class="p">:</span>
998            <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_plot_pr</span><span class="p">()</span>
999            <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
1000                <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
1001                <span class="bp">self</span><span class="o">.</span><span class="n">perform_estimate</span><span class="p">()</span>
1002        <span class="k">except</span><span class="p">:</span>
1003            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">))</span>           
1004
1005    <span class="k">def</span> <span class="nf">_create_plot_pr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">estimate</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span></div>
1006        <span class="sd">&quot;&quot;&quot;</span>
1007<span class="sd">        Create and prepare invertor instance from</span>
1008<span class="sd">        a plottable data set.</span>
1009<span class="sd">        </span>
1010<span class="sd">        :param path: path of the file to read in </span>
1011<span class="sd">        </span>
1012<span class="sd">        &quot;&quot;&quot;</span>
1013        <span class="c"># Sanity check</span>
1014        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
1015            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Please load a valid data set before proceeding.&quot;</span>
1016            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">))</span> 
1017            <span class="k">return</span> <span class="bp">None</span>   
1018       
1019        <span class="c"># Get the data from the chosen data set and perform inversion</span>
1020        <span class="n">pr</span> <span class="o">=</span> <span class="n">Invertor</span><span class="p">()</span>
1021        <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span>
1022        <span class="n">pr</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>
1023        <span class="n">pr</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span>
1024        <span class="n">pr</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span>
1025        <span class="n">pr</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">x</span>
1026        <span class="n">pr</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">y</span>
1027        <span class="n">pr</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span>
1028        <span class="n">pr</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span>
1029        <span class="n">pr</span><span class="o">.</span><span class="n">slit_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>
1030       
1031        <span class="c"># Keep track of the plot window title to ensure that</span>
1032        <span class="c"># we can overlay the plots</span>
1033        <span class="n">pr</span><span class="o">.</span><span class="n">info</span><span class="p">[</span><span class="s">&quot;plot_group_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">group_id</span>
1034       
1035        <span class="c"># Fill in errors if none were provided</span>
1036        <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="o">.</span><span class="n">dy</span>
1037        <span class="n">all_zeros</span> <span class="o">=</span> <span class="bp">True</span>
1038        <span class="k">if</span> <span class="n">err</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
1039            <span class="n">err</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="n">pr</span><span class="o">.</span><span class="n">y</span><span class="p">))</span> 
1040        <span class="k">else</span><span class="p">:</span>   
1041            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">err</span><span class="p">)):</span>
1042                <span class="k">if</span> <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">&gt;</span><span class="mi">0</span><span class="p">:</span>
1043                    <span class="n">all_zeros</span> <span class="o">=</span> <span class="bp">False</span>
1044       
1045        <span class="k">if</span> <span class="n">all_zeros</span><span class="p">:</span>       
1046            <span class="n">scale</span> <span class="o">=</span> <span class="bp">None</span>
1047            <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.0</span>
1048            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">pr</span><span class="o">.</span><span class="n">y</span><span class="p">)):</span>
1049                <span class="c"># Scale the error so that we can fit over several decades of Q</span>
1050                <span class="k">if</span> <span class="n">scale</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
1051                    <span class="n">scale</span> <span class="o">=</span> <span class="mf">0.05</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">pr</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
1052                    <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.01</span><span class="o">*</span><span class="n">pr</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
1053                <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">scale</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">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">pr</span><span class="o">.</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span> <span class="o">+</span> <span class="n">min_err</span>
1054            <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;The loaded file had no error bars, &quot;</span>
1055            <span class="n">message</span> <span class="o">+=</span> <span class="s">&quot;statistical errors are assumed.&quot;</span>
1056            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">message</span><span class="p">))</span>
1057
1058        <span class="n">pr</span><span class="o">.</span><span class="n">err</span> <span class="o">=</span> <span class="n">err</span>
1059       
1060        <span class="k">return</span> <span class="n">pr</span>
1061
1062         
1063    <span class="k">def</span> <span class="nf">setup_file_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">nfunc</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span>
1064<div class="viewcode-block" id="Plugin.setup_file_inversion"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.setup_file_inversion">[docs]</a>                             <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_max</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> 
1065                             <span class="n">bck</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
1066        <span class="sd">&quot;&quot;&quot;</span>
1067<span class="sd">        &quot;&quot;&quot;</span>
1068        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">alpha</span>
1069        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="n">nfunc</span>
1070        <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="n">d_max</span>
1071        <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="n">q_min</span>
1072        <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="n">q_max</span>
1073        <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="n">bck</span>
1074        <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="n">height</span>
1075        <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="n">width</span>
1076       
1077        <span class="k">try</span><span class="p">:</span>
1078            <span class="c">#pr = self._create_file_pr(path)</span>
1079            <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_file_pr</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
1080            <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
1081                <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
1082                <span class="bp">self</span><span class="o">.</span><span class="n">perform_inversion</span><span class="p">()</span>
1083        <span class="k">except</span><span class="p">:</span>
1084            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">))</span>
1085         
1086    <span class="k">def</span> <span class="nf">estimate_file_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha</span><span class="p">,</span> <span class="n">nfunc</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span></div>
1087<div class="viewcode-block" id="Plugin.estimate_file_inversion"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.estimate_file_inversion">[docs]</a>                                <span class="n">path</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_min</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">q_max</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> 
1088                                <span class="n">bck</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
1089        <span class="sd">&quot;&quot;&quot;</span>
1090<span class="sd">        &quot;&quot;&quot;</span>
1091        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">alpha</span>
1092        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="n">nfunc</span>
1093        <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span> <span class="o">=</span> <span class="n">d_max</span>
1094        <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="n">q_min</span>
1095        <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="n">q_max</span>
1096        <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="n">bck</span>
1097        <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="n">height</span>
1098        <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="n">width</span>
1099       
1100        <span class="k">try</span><span class="p">:</span>
1101            <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_file_pr</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
1102            <span class="c">#pr = self._create_file_pr(path)</span>
1103            <span class="k">if</span> <span class="ow">not</span> <span class="n">pr</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
1104                <span class="bp">self</span><span class="o">.</span><span class="n">pr</span> <span class="o">=</span> <span class="n">pr</span>
1105                <span class="bp">self</span><span class="o">.</span><span class="n">perform_estimate</span><span class="p">()</span>
1106        <span class="k">except</span><span class="p">:</span>
1107            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">))</span>
1108               
1109         
1110    <span class="k">def</span> <span class="nf">_create_file_pr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span></div>
1111        <span class="sd">&quot;&quot;&quot;</span>
1112<span class="sd">        Create and prepare invertor instance from</span>
1113<span class="sd">        a file data set.</span>
1114<span class="sd">        </span>
1115<span class="sd">        :param path: path of the file to read in </span>
1116<span class="sd">        </span>
1117<span class="sd">        &quot;&quot;&quot;</span>
1118        <span class="c"># Load data</span>
1119        <span class="c">#if os.path.isfile(path):</span>
1120        <span class="sd">&quot;&quot;&quot;    </span>
1121<span class="sd">        if self._current_file_data is not None \</span>
1122<span class="sd">            and self._current_file_data.path==path:</span>
1123<span class="sd">            # Protect against corrupted data from </span>
1124<span class="sd">            # previous failed load attempt</span>
1125<span class="sd">            if self._current_file_data.x is None:</span>
1126<span class="sd">                return None</span>
1127<span class="sd">            x = self._current_file_data.x</span>
1128<span class="sd">            y = self._current_file_data.y</span>
1129<span class="sd">            err = self._current_file_data.err</span>
1130<span class="sd">            </span>
1131<span class="sd">            message = &quot;The data from this file has already been loaded.&quot;</span>
1132<span class="sd">            wx.PostEvent(self.parent, StatusEvent(status=message))</span>
1133<span class="sd">        else:</span>
1134<span class="sd">        &quot;&quot;&quot;</span>
1135        <span class="c"># Reset the status bar so that we don&#39;t get mixed up</span>
1136        <span class="c"># with old messages. </span>
1137        <span class="c">#TODO: refactor this into a proper status handling</span>
1138        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">))</span>
1139        <span class="k">try</span><span class="p">:</span>
1140            <span class="k">class</span> <span class="nc">FileData</span><span class="p">:</span>
1141                <span class="n">x</span> <span class="o">=</span> <span class="bp">None</span>
1142                <span class="n">y</span> <span class="o">=</span> <span class="bp">None</span>
1143                <span class="n">err</span> <span class="o">=</span> <span class="bp">None</span>
1144                <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
1145                <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">path</span><span class="p">):</span>
1146                    <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="o">=</span> <span class="n">path</span>
1147               
1148            <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span> <span class="o">=</span> <span class="n">FileData</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
1149            <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">x</span>
1150            <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">y</span>
1151            <span class="bp">self</span><span class="o">.</span><span class="n">_current_file_data</span><span class="o">.</span><span class="n">err</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">dy</span>
1152            <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">err</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">data</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">dy</span>
1153        <span class="k">except</span><span class="p">:</span>
1154            <span class="n">load_error</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
1155            <span class="k">return</span> <span class="bp">None</span>
1156       
1157        <span class="c"># If the file contains no data, just return</span>
1158        <span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1159            <span class="n">load_error</span><span class="p">(</span><span class="s">&quot;The loaded file contains no data&quot;</span><span class="p">)</span>
1160            <span class="k">return</span> <span class="bp">None</span>
1161
1162        <span class="c"># If we have not errors, add statistical errors</span>
1163        <span class="k">if</span> <span class="n">y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
1164            <span class="k">if</span> <span class="n">err</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">numpy</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">err</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1165                <span class="n">err</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="n">y</span><span class="p">))</span>
1166                <span class="n">scale</span> <span class="o">=</span> <span class="bp">None</span>
1167                <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.0</span>
1168                <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)):</span>
1169                    <span class="c"># Scale the error so that we can fit over several decades of Q</span>
1170                    <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
1171                        <span class="n">scale</span> <span class="o">=</span> <span class="mf">0.05</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">y</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
1172                        <span class="n">min_err</span> <span class="o">=</span> <span class="mf">0.01</span> <span class="o">*</span> <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
1173                    <span class="n">err</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">scale</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">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="o">+</span> <span class="n">min_err</span>
1174                <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;The loaded file had no error bars, &quot;</span>
1175                <span class="n">message</span> <span class="o">+=</span> <span class="s">&quot;statistical errors are assumed.&quot;</span>
1176                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">message</span><span class="p">))</span>
1177       
1178        <span class="k">try</span><span class="p">:</span>
1179            <span class="c"># Get the data from the chosen data set and perform inversion</span>
1180            <span class="n">pr</span> <span class="o">=</span> <span class="n">Invertor</span><span class="p">()</span>
1181            <span class="n">pr</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span>
1182            <span class="n">pr</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>
1183            <span class="n">pr</span><span class="o">.</span><span class="n">q_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">q_min</span>
1184            <span class="n">pr</span><span class="o">.</span><span class="n">q_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">q_max</span>
1185            <span class="n">pr</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
1186            <span class="n">pr</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
1187            <span class="n">pr</span><span class="o">.</span><span class="n">err</span> <span class="o">=</span> <span class="n">err</span>
1188            <span class="n">pr</span><span class="o">.</span><span class="n">has_bck</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_bck</span>
1189            <span class="n">pr</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">slit_height</span>
1190            <span class="n">pr</span><span class="o">.</span><span class="n">slit_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">slit_width</span>
1191            <span class="k">return</span> <span class="n">pr</span>
1192        <span class="k">except</span><span class="p">:</span>
1193            <span class="n">load_error</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
1194        <span class="k">return</span> <span class="bp">None</span>
1195       
1196    <span class="k">def</span> <span class="nf">perform_estimate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1197<div class="viewcode-block" id="Plugin.perform_estimate"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.perform_estimate">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1198<span class="sd">        &quot;&quot;&quot;</span>
1199        <span class="kn">from</span> <span class="nn">pr_thread</span> <span class="kn">import</span> <span class="n">EstimatePr</span>
1200        <span class="kn">from</span> <span class="nn">copy</span> <span class="kn">import</span> <span class="n">deepcopy</span>
1201       
1202        <span class="c"># If a thread is already started, stop it</span>
1203        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span> <span class="o">!=</span> <span class="bp">None</span> <span class="ow">and</span> \
1204            <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">isrunning</span><span class="p">():</span>
1205            <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
1206            <span class="c">## stop just raises the flag -- the thread is supposed to </span>
1207            <span class="c">## then kill itself. In August 2014 it was shown that this is</span>
1208            <span class="c">## incorrectly handled by fitting.py and a fix implemented. </span>
1209            <span class="c">## It is not clear whether it is properly used here, but the</span>
1210            <span class="c">## &quot;fix&quot; of waiting for the previous thread to end breaks the</span>
1211            <span class="c">## pr perspective completely as it causes an infinite loop.</span>
1212            <span class="c">## Thus it is likely the threading is bing properly handled.</span>
1213            <span class="c">## While the &quot;fix&quot; is no longer implemented the comment is</span>
1214            <span class="c">## left here till somebody ascertains that in fact the threads</span>
1215            <span class="c">## are being properly handled.</span>
1216            <span class="c">##</span>
1217            <span class="c">##    -PDB January 25, 2015                  </span>
1218               
1219               
1220        <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">clone</span><span class="p">()</span>
1221        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span> <span class="o">=</span> <span class="n">EstimatePr</span><span class="p">(</span><span class="n">pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">,</span>
1222                                             <span class="n">error_func</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_thread_error</span><span class="p">,</span> 
1223                                         <span class="n">completefn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_estimate_completed</span><span class="p">,</span> 
1224                                            <span class="n">updatefn</span>   <span class="o">=</span> <span class="bp">None</span><span class="p">)</span>
1225        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">queue</span><span class="p">()</span>
1226        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">ready</span><span class="p">(</span><span class="mf">2.5</span><span class="p">)</span>
1227   
1228    <span class="k">def</span> <span class="nf">perform_estimateNT</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
1229<div class="viewcode-block" id="Plugin.perform_estimateNT"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.perform_estimateNT">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1230<span class="sd">        &quot;&quot;&quot;</span>
1231        <span class="kn">from</span> <span class="nn">pr_thread</span> <span class="kn">import</span> <span class="n">EstimateNT</span>
1232        <span class="kn">from</span> <span class="nn">copy</span> <span class="kn">import</span> <span class="n">deepcopy</span>
1233       
1234        <span class="c"># If a thread is already started, stop it</span>
1235        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</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">estimation_thread</span><span class="o">.</span><span class="n">isrunning</span><span class="p">():</span>
1236            <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
1237            <span class="c">## stop just raises the flag -- the thread is supposed to </span>
1238            <span class="c">## then kill itself. In August 2014 it was shown that this is</span>
1239            <span class="c">## incorrectly handled by fitting.py and a fix implemented. </span>
1240            <span class="c">## It is not clear whether it is properly used here, but the</span>
1241            <span class="c">## &quot;fix&quot; of waiting for the previous thread to end breaks the</span>
1242            <span class="c">## pr perspective completely as it causes an infinite loop.</span>
1243            <span class="c">## Thus it is likely the threading is bing properly handled.</span>
1244            <span class="c">## While the &quot;fix&quot; is no longer implemented the comment is</span>
1245            <span class="c">## left here till somebody ascertains that in fact the threads</span>
1246            <span class="c">## are being properly handled.</span>
1247            <span class="c">##</span>
1248            <span class="c">##    -PDB January 25, 2015                  </span>
1249                               
1250        <span class="n">pr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">clone</span><span class="p">()</span>
1251        <span class="c"># Skip the slit settings for the estimation</span>
1252        <span class="c"># It slows down the application and it doesn&#39;t change the estimates</span>
1253        <span class="n">pr</span><span class="o">.</span><span class="n">slit_height</span> <span class="o">=</span> <span class="mf">0.0</span>
1254        <span class="n">pr</span><span class="o">.</span><span class="n">slit_width</span>  <span class="o">=</span> <span class="mf">0.0</span>
1255        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span> <span class="o">=</span> <span class="n">EstimateNT</span><span class="p">(</span><span class="n">pr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">,</span> 
1256                                            <span class="n">error_func</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_thread_error</span><span class="p">,</span> 
1257                                        <span class="n">completefn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_estimateNT_completed</span><span class="p">,</span> 
1258                                            <span class="n">updatefn</span>   <span class="o">=</span> <span class="bp">None</span><span class="p">)</span>
1259        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">queue</span><span class="p">()</span>
1260        <span class="bp">self</span><span class="o">.</span><span class="n">estimation_thread</span><span class="o">.</span><span class="n">ready</span><span class="p">(</span><span class="mf">2.5</span><span class="p">)</span>
1261       
1262    <span class="k">def</span> <span class="nf">perform_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
1263<div class="viewcode-block" id="Plugin.perform_inversion"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.perform_inversion">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1264<span class="sd">        &quot;&quot;&quot;</span>
1265        <span class="c"># Time estimate</span>
1266        <span class="c">#estimated = self.elapsed*self.nfunc**2</span>
1267        <span class="c">#message = &quot;Computation time may take up to %g seconds&quot; % self.elapsed</span>
1268        <span class="c">#wx.PostEvent(self.parent, StatusEvent(status=message))</span>
1269       
1270        <span class="c"># Start inversion thread</span>
1271        <span class="bp">self</span><span class="o">.</span><span class="n">start_thread</span><span class="p">()</span>
1272        <span class="k">return</span>
1273       
1274        <span class="n">out</span><span class="p">,</span> <span class="n">cov</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">lstsq</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">)</span>
1275       
1276        <span class="c"># Save useful info</span>
1277        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">elapsed</span>
1278       
1279        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="p">)):</span>
1280            <span class="k">try</span><span class="p">:</span>
1281                <span class="k">print</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s">: </span><span class="si">%g</span><span class="s"> +- </span><span class="si">%g</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">out</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
1282                                         <span class="n">math</span><span class="o">.</span><span class="n">sqrt</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">cov</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="p">])))</span>
1283            <span class="k">except</span><span class="p">:</span> 
1284                <span class="k">print</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s">: </span><span class="si">%g</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">out</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>       
1285       
1286        <span class="c"># Make a plot of I(q) data</span>
1287        <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pr</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">pr</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="o">.</span><span class="n">err</span><span class="p">)</span>
1288        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;I_{obs}(q)&quot;</span>
1289        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Q}&quot;</span><span class="p">,</span> <span class="s">&#39;A^{-1}&#39;</span><span class="p">)</span>
1290        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Intensity} &quot;</span><span class="p">,</span><span class="s">&quot;cm^{-1}&quot;</span><span class="p">)</span>
1291        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">&quot;Iq&quot;</span><span class="p">))</span>
1292        <span class="c"># Show I(q) fit</span>
1293        <span class="bp">self</span><span class="o">.</span><span class="n">show_iq</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="p">)</span>
1294        <span class="c"># Show P(r) fit</span>
1295        <span class="n">x_values</span><span class="p">,</span> <span class="n">x_range</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">show_pr</span><span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr</span><span class="p">,</span> <span class="n">cov</span><span class="o">=</span><span class="n">cov</span><span class="p">)</span>
1296       
1297    <span class="k">def</span> <span class="nf">_on_context_inversion</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span></div>
1298        <span class="sd">&quot;&quot;&quot;</span>
1299<span class="sd">        &quot;&quot;&quot;</span>
1300        <span class="n">panel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span>
1301        <span class="n">Plugin</span><span class="o">.</span><span class="n">on_perspective</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="n">event</span><span class="p">)</span>
1302
1303        <span class="c"># If we have more than one displayed plot, make the user choose</span>
1304        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">panel</span><span class="o">.</span><span class="n">plots</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">1</span> <span class="ow">and</span> \
1305            <span class="n">panel</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span> <span class="ow">in</span> <span class="n">panel</span><span class="o">.</span><span class="n">plots</span><span class="p">:</span>
1306            <span class="n">dataset</span> <span class="o">=</span> <span class="n">panel</span><span class="o">.</span><span class="n">plots</span><span class="p">[</span><span class="n">panel</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
1307        <span class="k">else</span><span class="p">:</span>
1308            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Prview Error: No data is available&quot;</span><span class="p">)</span>
1309            <span class="k">return</span>
1310       
1311        <span class="c"># Store a reference to the current plottable</span>
1312        <span class="c"># If we have a suggested value, use it.</span>
1313        <span class="k">try</span><span class="p">:</span>
1314            <span class="n">estimate</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha_estimate</span><span class="p">)</span>
1315            <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="n">estimate</span>
1316        <span class="k">except</span><span class="p">:</span>
1317            <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>
1318            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Prview :Alpha Not estimate yet&quot;</span><span class="p">)</span>
1319            <span class="k">pass</span>
1320        <span class="k">try</span><span class="p">:</span>
1321            <span class="n">estimate</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">nterms_estimate</span><span class="p">)</span>
1322            <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="n">estimate</span>
1323        <span class="k">except</span><span class="p">:</span>
1324            <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span>
1325            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Prview : ntemrs Not estimate yet&quot;</span><span class="p">)</span>
1326            <span class="k">pass</span>
1327       
1328        <span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span> <span class="o">=</span> <span class="n">panel</span><span class="o">.</span><span class="n">plots</span><span class="p">[</span><span class="n">panel</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">selected_plottable</span><span class="p">]</span>
1329        <span class="bp">self</span><span class="o">.</span><span class="n">set_data</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">current_plottable</span><span class="p">])</span>
1330        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">plotname</span> <span class="o">=</span> <span class="n">dataset</span>
1331        <span class="c">#self.control_panel.nfunc = self.nfunc</span>
1332        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span>
1333        <span class="c">#self.parent.set_perspective(self.perspective)</span>
1334        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">_on_invert</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
1335           
1336    <span class="k">def</span> <span class="nf">get_panels</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>
1337<div class="viewcode-block" id="Plugin.get_panels"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.get_panels">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1338<span class="sd">            Create and return a list of panel objects</span>
1339<span class="sd">        &quot;&quot;&quot;</span>
1340        <span class="kn">from</span> <span class="nn">inversion_panel</span> <span class="kn">import</span> <span class="n">InversionControl</span>
1341       
1342        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
1343        <span class="bp">self</span><span class="o">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">MDIFrame</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="s">&#39;None&#39;</span><span class="p">,</span> <span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>     
1344        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span> <span class="o">=</span> <span class="n">InversionControl</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> 
1345                                              <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">RAISED_BORDER</span><span class="p">,</span>
1346                                              <span class="n">standalone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">standalone</span><span class="p">)</span>
1347        <span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">set_panel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="p">)</span>
1348        <span class="bp">self</span><span class="o">.</span><span class="n">_frame_set_helper</span><span class="p">()</span>
1349        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">set_manager</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
1350        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span>
1351        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_length</span>
1352        <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span>
1353        <span class="bp">self</span><span class="o">.</span><span class="n">perspective</span> <span class="o">=</span> <span class="p">[]</span>
1354        <span class="bp">self</span><span class="o">.</span><span class="n">perspective</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">window_name</span><span class="p">)</span>
1355     
1356        <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="p">]</span>
1357       
1358    <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_list</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></div>
1359<div class="viewcode-block" id="Plugin.set_data"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.set_data">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1360<span class="sd">        receive a list of data to compute pr</span>
1361<span class="sd">        &quot;&quot;&quot;</span>
1362        <span class="k">if</span> <span class="n">data_list</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
1363            <span class="n">data_list</span> <span class="o">=</span> <span class="p">[]</span>
1364        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_list</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">1</span><span class="p">:</span>
1365            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_list</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
1366                <span class="n">data</span> <span class="o">=</span> <span class="n">data_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1367            <span class="k">else</span><span class="p">:</span>
1368                <span class="n">data_1d_list</span> <span class="o">=</span> <span class="p">[]</span>
1369                <span class="n">data_2d_list</span> <span class="o">=</span> <span class="p">[]</span>
1370                <span class="n">error_msg</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
1371                <span class="c"># separate data into data1d and data2d list</span>
1372                <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">data_list</span><span class="p">:</span>
1373                    <span class="k">if</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>
1374                        <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">Data1D</span><span class="p">):</span>
1375                            <span class="n">data_1d_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
1376                        <span class="k">else</span><span class="p">:</span>
1377                            <span class="n">error_msg</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s">  type </span><span class="si">%s</span><span class="s"> </span><span class="se">\n</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="n">data</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
1378                                             <span class="nb">str</span><span class="p">(</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="p">))</span>
1379                            <span class="n">data_2d_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
1380                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_2d_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1381                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;PrView does not support the following data types:</span><span class="se">\n</span><span class="s">&quot;</span>
1382                    <span class="n">msg</span> <span class="o">+=</span> <span class="n">error_msg</span>
1383                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_1d_list</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1384                    <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
1385                    <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="s">&#39;error&#39;</span><span class="p">))</span>
1386                    <span class="k">return</span>
1387                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;Prview does not allow multiple data!</span><span class="se">\n</span><span class="s">&quot;</span>
1388                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;Please select one.</span><span class="se">\n</span><span class="s">&quot;</span>
1389                <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
1390                    <span class="kn">from</span> <span class="nn">pr_widgets</span> <span class="kn">import</span> <span class="n">DataDialog</span>
1391                    <span class="n">dlg</span> <span class="o">=</span> <span class="n">DataDialog</span><span class="p">(</span><span class="n">data_list</span><span class="o">=</span><span class="n">data_1d_list</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="n">msg</span><span class="p">)</span>
1392                    <span class="k">if</span> <span class="n">dlg</span><span class="o">.</span><span class="n">ShowModal</span><span class="p">()</span> <span class="o">==</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">:</span>
1393                        <span class="n">data</span> <span class="o">=</span> <span class="n">dlg</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span>
1394                    <span class="k">else</span><span class="p">:</span>
1395                        <span class="n">data</span> <span class="o">=</span> <span class="bp">None</span>
1396                    <span class="n">dlg</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
1397            <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
1398                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;PrView receives no data. </span><span class="se">\n</span><span class="s">&quot;</span>
1399                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
1400                     <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="s">&#39;error&#39;</span><span class="p">))</span>
1401                <span class="k">return</span>
1402            <span class="k">if</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">Data1D</span><span class="p">):</span>
1403                <span class="k">try</span><span class="p">:</span>
1404                    <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="s">&#39;remove&#39;</span><span class="p">,</span>
1405                                                <span class="n">group_id</span><span class="o">=</span><span class="n">GROUP_ID_IQ_DATA</span><span class="p">,</span> 
1406                                                <span class="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">data_id</span><span class="p">))</span>
1407                                             
1408                    <span class="bp">self</span><span class="o">.</span><span class="n">data_id</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">id</span>
1409                    <span class="bp">self</span><span class="o">.</span><span class="n">control_panel</span><span class="o">.</span><span class="n">_change_file</span><span class="p">(</span><span class="n">evt</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="n">data</span><span class="p">)</span>
1410                <span class="k">except</span><span class="p">:</span>
1411                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Prview Set_data: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
1412                    <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span>
1413                                                            <span class="n">info</span><span class="o">=</span><span class="s">&quot;error&quot;</span><span class="p">))</span>
1414            <span class="k">else</span><span class="p">:</span>   
1415                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Pr cannot be computed for data of &quot;</span>
1416                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;type </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">data_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">)</span>
1417                <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> 
1418                         <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="s">&#39;error&#39;</span><span class="p">))</span>
1419        <span class="k">else</span><span class="p">:</span>
1420            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Pr contain no data&quot;</span>
1421            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">msg</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="s">&#39;warning&#39;</span><span class="p">))</span>
1422           
1423    <span class="k">def</span> <span class="nf">post_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
1424<div class="viewcode-block" id="Plugin.post_init"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.pr.Plugin.post_init">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
1425<span class="sd">            Post initialization call back to close the loose ends</span>
1426<span class="sd">            [Somehow openGL needs this call]</span>
1427<span class="sd">        &quot;&quot;&quot;</span>
1428        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">standalone</span><span class="p">:</span>
1429            <span class="bp">self</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">set_perspective</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">perspective</span><span class="p">)</span>
1430 
1431<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></div></div>
1432    <span class="n">i</span> <span class="o">=</span> <span class="n">Plugin</span><span class="p">()</span>
1433    <span class="k">print</span> <span class="n">i</span><span class="o">.</span><span class="n">perform_estimateNT</span><span class="p">()</span>
1434   
1435   
1436   
1437   
1438</pre></div>
1439
1440          </div>
1441        </div>
1442      </div>
1443      <div class="sphinxsidebar">
1444        <div class="sphinxsidebarwrapper">
1445<div id="searchbox" style="display: none">
1446  <h3>Quick search</h3>
1447    <form class="search" action="../../../../search.html" method="get">
1448      <input type="text" name="q" />
1449      <input type="submit" value="Go" />
1450      <input type="hidden" name="check_keywords" value="yes" />
1451      <input type="hidden" name="area" value="default" />
1452    </form>
1453    <p class="searchtip" style="font-size: 90%">
1454    Enter search terms or a module, class or function name.
1455    </p>
1456</div>
1457<script type="text/javascript">$('#searchbox').show(0);</script>
1458        </div>
1459      </div>
1460      <div class="clearer"></div>
1461    </div>
1462    <div class="related">
1463      <h3>Navigation</h3>
1464      <ul>
1465        <li class="right" style="margin-right: 10px">
1466          <a href="../../../../genindex.html" title="General Index"
1467             >index</a></li>
1468        <li class="right" >
1469          <a href="../../../../py-modindex.html" title="Python Module Index"
1470             >modules</a> |</li>
1471        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
1472          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
1473      </ul>
1474    </div>
1475    <div class="footer">
1476        &copy; Copyright 2013, The SasView Project.
1477      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
1478    </div>
1479  </body>
1480</html>
Note: See TracBrowser for help on using the repository browser.