source: sasview/_modules/sas/perspectives/pr/explore_dialog.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: 73.3 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.perspectives.pr.explore_dialog &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.explore_dialog</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<span class="sd">&quot;&quot;&quot;</span>
62<span class="sd">Dialog panel to explore the P(r) inversion results for a range</span>
63<span class="sd">of D_max value. User picks a number of points and a range of</span>
64<span class="sd">distances, then can toggle between inversion outputs and see</span>
65<span class="sd">their distribution as a function of D_max.</span>
66<span class="sd">&quot;&quot;&quot;</span>
67   
68
69<span class="kn">import</span> <span class="nn">wx</span>
70<span class="kn">import</span> <span class="nn">numpy</span>
71<span class="kn">import</span> <span class="nn">math</span>
72<span class="kn">import</span> <span class="nn">logging</span>
73<span class="kn">import</span> <span class="nn">sys</span>
74
75<span class="c"># Avoid Matplotlib complaining about the lack of legend on the plot </span>
76<span class="kn">import</span> <span class="nn">warnings</span>
77<span class="n">warnings</span><span class="o">.</span><span class="n">simplefilter</span><span class="p">(</span><span class="s">&quot;ignore&quot;</span><span class="p">)</span>
78
79<span class="c"># Import plotting classes</span>
80<span class="kn">from</span> <span class="nn">sas.plottools.PlotPanel</span> <span class="kn">import</span> <span class="n">PlotPanel</span>
81<span class="kn">from</span> <span class="nn">sas.plottools</span> <span class="kn">import</span> <span class="n">Data1D</span> <span class="k">as</span> <span class="n">Model1D</span>
82<span class="kn">from</span> <span class="nn">sas.guiframe.gui_style</span> <span class="kn">import</span> <span class="n">GUIFRAME_ID</span>
83<span class="kn">from</span> <span class="nn">sas.plottools.plottables</span> <span class="kn">import</span> <span class="n">Graph</span>
84
85<span class="kn">from</span> <span class="nn">pr_widgets</span> <span class="kn">import</span> <span class="n">PrTextCtrl</span>
86
87<span class="c"># Default number of points on the output plot</span>
88<span class="n">DEFAULT_NPTS</span> <span class="o">=</span> <span class="mi">10</span>
89<span class="c"># Default output parameter to plot</span>
90<span class="n">DEFAULT_OUTPUT</span> <span class="o">=</span> <span class="s">&#39;Chi2/dof&#39;</span>
91
92<span class="k">class</span> <span class="nc">OutputPlot</span><span class="p">(</span><span class="n">PlotPanel</span><span class="p">):</span>
93<div class="viewcode-block" id="OutputPlot"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.OutputPlot">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
94<span class="sd">    Plot panel used to show the selected results as a function</span>
95<span class="sd">    of D_max</span>
96<span class="sd">    &quot;&quot;&quot;</span>
97    <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">d_min</span><span class="p">,</span> <span class="n">d_max</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="nb">id</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">color</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>\
98        <span class="n">dpi</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">style</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">NO_FULL_REPAINT_ON_RESIZE</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
99        <span class="sd">&quot;&quot;&quot;</span>
100<span class="sd">        Initialization. The parameters added to PlotPanel are:</span>
101<span class="sd">        </span>
102<span class="sd">        :param d_min: Minimum value of D_max to explore</span>
103<span class="sd">        :param d_max: Maximum value of D_max to explore</span>
104<span class="sd">        </span>
105<span class="sd">        &quot;&quot;&quot;</span>
106        <span class="n">PlotPanel</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">parent</span><span class="p">,</span> <span class="nb">id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">,</span> <span class="n">style</span> <span class="o">=</span> <span class="n">style</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
107
108        <span class="bp">self</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span>
109        <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">=</span> <span class="n">d_min</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">max</span> <span class="o">=</span> <span class="n">d_max</span>
111        <span class="bp">self</span><span class="o">.</span><span class="n">npts</span> <span class="o">=</span> <span class="n">DEFAULT_NPTS</span>
112
113        <span class="n">step</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">max</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">npts</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
114        <span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max</span><span class="o">+</span><span class="n">step</span><span class="o">*</span><span class="mf">0.01</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span>
115        <span class="n">dx</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">))</span>
116        <span class="n">y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">))</span>
117        <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="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">))</span>
118 
119        <span class="c"># Plot area</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">plot</span> <span class="o">=</span> <span class="n">Model1D</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</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">dy</span><span class="p">)</span>
121        <span class="bp">self</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">DEFAULT_OUTPUT</span>
122        <span class="bp">self</span><span class="o">.</span><span class="n">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>
123
124        <span class="c"># Graph        </span>
125        <span class="bp">self</span><span class="o">.</span><span class="n">graph</span> <span class="o">=</span> <span class="n">Graph</span><span class="p">()</span>
126        <span class="bp">self</span><span class="o">.</span><span class="n">graph</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{D_{max}}&quot;</span><span class="p">,</span> <span class="s">&#39;A&#39;</span><span class="p">)</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">graph</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{</span><span class="si">%s</span><span class="s">}&quot;</span> <span class="o">%</span> <span class="n">DEFAULT_OUTPUT</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plot</span><span class="p">)</span>
129        <span class="bp">self</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
130       
131        <span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">DeleteToolByPos</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
132        <span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">DeleteToolByPos</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
133        <span class="bp">self</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">Realize</span><span class="p">()</span>
134
135    <span class="k">def</span> <span class="nf">onContextMenu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
136<div class="viewcode-block" id="OutputPlot.onContextMenu"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.OutputPlot.onContextMenu">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
137<span class="sd">        Default context menu for the plot panel</span>
138<span class="sd">        </span>
139<span class="sd">        :TODO: Would be nice to add printing and log/linear scales.</span>
140<span class="sd">            The current verison of plottools no longer plays well with </span>
141<span class="sd">            plots outside of guiframe. Guiframe team needs to fix this. </span>
142<span class="sd">        &quot;&quot;&quot;</span>
143        <span class="c"># Slicer plot popup menu</span>
144        <span class="nb">id</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">NewId</span><span class="p">()</span>
145        <span class="n">slicerpop</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Menu</span><span class="p">()</span>
146        <span class="n">slicerpop</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="s">&#39;&amp;Save image&#39;</span><span class="p">,</span> <span class="s">&#39;Save image as PNG&#39;</span><span class="p">)</span>
147        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_MENU</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">onSaveImage</span><span class="p">)</span>
148       
149        <span class="nb">id</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">NewId</span><span class="p">()</span>
150        <span class="n">slicerpop</span><span class="o">.</span><span class="n">AppendSeparator</span><span class="p">()</span>
151        <span class="n">slicerpop</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="s">&#39;&amp;Reset Graph&#39;</span><span class="p">)</span>
152        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_MENU</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">onResetGraph</span><span class="p">)</span>
153       
154        <span class="n">pos</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">GetPosition</span><span class="p">()</span>
155        <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ScreenToClient</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
156        <span class="bp">self</span><span class="o">.</span><span class="n">PopupMenu</span><span class="p">(</span><span class="n">slicerpop</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
157
158<span class="k">class</span> <span class="nc">Results</span><span class="p">:</span></div></div>
159<div class="viewcode-block" id="Results"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.Results">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
160<span class="sd">    Class to hold the inversion output parameters</span>
161<span class="sd">    as a function of D_max</span>
162<span class="sd">    &quot;&quot;&quot;</span>
163    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
164        <span class="sd">&quot;&quot;&quot;</span>
165<span class="sd">        Initialization. Create empty arrays</span>
166<span class="sd">        and dictionary of labels.</span>
167<span class="sd">        &quot;&quot;&quot;</span>
168        <span class="c"># Array of output for each inversion</span>
169        <span class="bp">self</span><span class="o">.</span><span class="n">chi2</span> <span class="o">=</span> <span class="p">[]</span>
170        <span class="bp">self</span><span class="o">.</span><span class="n">osc</span> <span class="o">=</span> <span class="p">[]</span>
171        <span class="bp">self</span><span class="o">.</span><span class="n">pos</span> <span class="o">=</span> <span class="p">[]</span>
172        <span class="bp">self</span><span class="o">.</span><span class="n">pos_err</span> <span class="o">=</span> <span class="p">[]</span>
173        <span class="bp">self</span><span class="o">.</span><span class="n">rg</span> <span class="o">=</span> <span class="p">[]</span>
174        <span class="bp">self</span><span class="o">.</span><span class="n">iq0</span> <span class="o">=</span> <span class="p">[]</span>
175        <span class="bp">self</span><span class="o">.</span><span class="n">bck</span> <span class="o">=</span> <span class="p">[]</span>
176        <span class="bp">self</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="p">[]</span>
177       
178        <span class="c"># Dictionary of outputs</span>
179        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span> <span class="o">=</span> <span class="p">{}</span>
180        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;Chi2/dof&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;\chi^2/dof&quot;</span><span class="p">,</span> <span class="s">&quot;a.u.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">chi2</span><span class="p">]</span>   
181        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;Oscillation parameter&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Osc&quot;</span><span class="p">,</span> <span class="s">&quot;a.u.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">osc</span><span class="p">]</span>   
182        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;Positive fraction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;P^+&quot;</span><span class="p">,</span> <span class="s">&quot;a.u.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pos</span><span class="p">]</span>   
183        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;1-sigma positive fraction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;P^+_{1\ \sigma}&quot;</span><span class="p">,</span> 
184                                                     <span class="s">&quot;a.u.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pos_err</span><span class="p">]</span>   
185        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;Rg&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;R_g&quot;</span><span class="p">,</span> <span class="s">&quot;A&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rg</span><span class="p">]</span>   
186        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;I(q=0)&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;I(q=0)&quot;</span><span class="p">,</span> <span class="s">&quot;1/A&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iq0</span><span class="p">]</span>   
187        <span class="bp">self</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="s">&#39;Background&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;Bck&quot;</span><span class="p">,</span> <span class="s">&quot;1/A&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">bck</span><span class="p">]</span> 
188       
189<span class="k">class</span> <span class="nc">ExploreDialog</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Dialog</span><span class="p">):</span></div>
190<div class="viewcode-block" id="ExploreDialog"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.ExploreDialog">[docs]</a>    <span class="sd">&quot;&quot;&quot;</span>
191<span class="sd">    The explorer dialog box. This dialog is meant to be</span>
192<span class="sd">    invoked by the InversionControl class.</span>
193<span class="sd">    &quot;&quot;&quot;</span>
194   
195    <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">pr_state</span><span class="p">,</span> <span class="n">nfunc</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
196        <span class="sd">&quot;&quot;&quot;</span>
197<span class="sd">        Initialization. The parameters added to Dialog are:</span>
198<span class="sd">        </span>
199<span class="sd">        :param pr_state: sas.pr.invertor.Invertor object</span>
200<span class="sd">        :param nfunc: Number of terms in the expansion</span>
201<span class="sd">        </span>
202<span class="sd">        &quot;&quot;&quot;</span>
203        <span class="n">kwds</span><span class="p">[</span><span class="s">&quot;style&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">RESIZE_BORDER</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">DEFAULT_DIALOG_STYLE</span>
204        <span class="n">wx</span><span class="o">.</span><span class="n">Dialog</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
205       
206        <span class="c"># Initialize Results object</span>
207        <span class="bp">self</span><span class="o">.</span><span class="n">results</span> <span class="o">=</span> <span class="n">Results</span><span class="p">()</span>
208       
209        <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span>  <span class="o">=</span> <span class="n">pr_state</span>
210        <span class="bp">self</span><span class="o">.</span><span class="n">_default_min</span> <span class="o">=</span> <span class="mf">0.9</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">d_max</span>
211        <span class="bp">self</span><span class="o">.</span><span class="n">_default_max</span> <span class="o">=</span> <span class="mf">1.1</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">d_max</span>
212        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span>     <span class="o">=</span> <span class="n">nfunc</span>
213       
214        <span class="c"># Control for number of points</span>
215        <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span> <span class="o">=</span> <span class="n">PrTextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">TE_PROCESS_ENTER</span><span class="p">,</span>
216                                   <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span><span class="mi">20</span><span class="p">))</span>
217        <span class="c"># Control for the minimum value of D_max</span>
218        <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span> <span class="o">=</span> <span class="n">PrTextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">TE_PROCESS_ENTER</span><span class="p">,</span>
219                                   <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span><span class="mi">20</span><span class="p">))</span>
220        <span class="c"># Control for the maximum value of D_max</span>
221        <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span> <span class="o">=</span> <span class="n">PrTextCtrl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">TE_PROCESS_ENTER</span><span class="p">,</span>
222                                   <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">60</span><span class="p">,</span><span class="mi">20</span><span class="p">))</span>
223
224        <span class="c"># Output selection box for the y axis</span>
225        <span class="bp">self</span><span class="o">.</span><span class="n">output_box</span> <span class="o">=</span> <span class="bp">None</span>
226
227        <span class="c"># Create the plot object</span>
228        <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span> <span class="o">=</span> <span class="n">OutputPlot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_default_min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default_max</span><span class="p">,</span>
229                                    <span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <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>
230       
231        <span class="c"># Create the layout of the dialog</span>
232        <span class="bp">self</span><span class="o">.</span><span class="n">__do_layout</span><span class="p">()</span>
233        <span class="bp">self</span><span class="o">.</span><span class="n">Fit</span><span class="p">()</span>
234       
235        <span class="c"># Calculate exploration results</span>
236        <span class="bp">self</span><span class="o">.</span><span class="n">_recalc</span><span class="p">()</span>
237        <span class="c"># Graph the default output curve</span>
238        <span class="bp">self</span><span class="o">.</span><span class="n">_plot_output</span><span class="p">()</span>
239       
240    <span class="k">class</span> <span class="nc">Event</span><span class="p">:</span>
241<div class="viewcode-block" id="ExploreDialog.Event"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.ExploreDialog.Event">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
242<span class="sd">        Class that holds the content of the form</span>
243<span class="sd">        &quot;&quot;&quot;</span>
244        <span class="c">## Number of points to be plotted</span>
245        <span class="n">npts</span>   <span class="o">=</span> <span class="mi">0</span>
246        <span class="c">## Minimum value of D_max</span>
247        <span class="n">dmin</span>   <span class="o">=</span> <span class="mi">0</span>
248        <span class="c">## Maximum value of D_max</span>
249        <span class="n">dmax</span>   <span class="o">=</span> <span class="mi">0</span>
250               
251    <span class="k">def</span> <span class="nf">_get_values</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="bp">None</span><span class="p">):</span></div>
252        <span class="sd">&quot;&quot;&quot;</span>
253<span class="sd">        Invoked when the user changes a value of the form.</span>
254<span class="sd">        Check that the values are of the right type.</span>
255<span class="sd">        </span>
256<span class="sd">        :return: ExploreDialog.Event object if the content is good, </span>
257<span class="sd">            None otherwise</span>
258<span class="sd">        &quot;&quot;&quot;</span>
259        <span class="c"># Flag to make sure that all values are good</span>
260        <span class="n">flag</span> <span class="o">=</span> <span class="bp">True</span>
261       
262        <span class="c"># Empty ExploreDialog.Event content</span>
263        <span class="n">content_event</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Event</span><span class="p">()</span>
264       
265        <span class="c"># Read each text control and make sure the type is valid</span>
266        <span class="c"># Let the user know if a type is invalid by changing the</span>
267        <span class="c"># background color of the control.</span>
268        <span class="k">try</span><span class="p">:</span>
269            <span class="n">content_event</span><span class="o">.</span><span class="n">npts</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">npts_ctl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
270            <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">WHITE</span><span class="p">)</span>
271            <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
272        <span class="k">except</span><span class="p">:</span>
273            <span class="n">flag</span> <span class="o">=</span> <span class="bp">False</span>
274            <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&quot;pink&quot;</span><span class="p">)</span>
275            <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
276           
277        <span class="k">try</span><span class="p">:</span>
278            <span class="n">content_event</span><span class="o">.</span><span class="n">dmin</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">dmin_ctl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
279            <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">WHITE</span><span class="p">)</span>
280            <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
281        <span class="k">except</span><span class="p">:</span>
282            <span class="n">flag</span> <span class="o">=</span> <span class="bp">False</span>
283            <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&quot;pink&quot;</span><span class="p">)</span>
284            <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
285       
286        <span class="k">try</span><span class="p">:</span>
287            <span class="n">content_event</span><span class="o">.</span><span class="n">dmax</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">dmax_ctl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">())</span>
288            <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">WHITE</span><span class="p">)</span>
289            <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
290        <span class="k">except</span><span class="p">:</span>
291            <span class="n">flag</span> <span class="o">=</span> <span class="bp">False</span>
292            <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s">&quot;pink&quot;</span><span class="p">)</span>
293            <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
294       
295        <span class="c"># If the content of the form is valid, return the content,</span>
296        <span class="c"># otherwise return None</span>
297        <span class="k">if</span> <span class="n">flag</span><span class="p">:</span>
298            <span class="k">if</span> <span class="n">event</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
299                <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
300            <span class="k">return</span> <span class="n">content_event</span>
301        <span class="k">else</span><span class="p">:</span>
302            <span class="k">return</span> <span class="bp">None</span>
303   
304    <span class="k">def</span> <span class="nf">_plot_output</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="bp">None</span><span class="p">):</span>
305        <span class="sd">&quot;&quot;&quot;</span>
306<span class="sd">        Invoked when a new output type is selected for plotting, </span>
307<span class="sd">        or when a new computation is finished.</span>
308<span class="sd">        &quot;&quot;&quot;</span>
309        <span class="c"># Get the output type selection</span>
310        <span class="n">output_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="o">.</span><span class="n">GetString</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="o">.</span><span class="n">GetSelection</span><span class="p">())</span>
311       
312        <span class="c"># If the selected output type is part of the results ojbect,</span>
313        <span class="c"># display the results. </span>
314        <span class="c"># Note: by design, the output type should always be part of the</span>
315        <span class="c">#       results object.</span>
316        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">outputs</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="n">output_type</span><span class="p">):</span> 
317            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">plot</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">results</span><span class="o">.</span><span class="n">d_max</span>
318            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">plot</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">results</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="n">output_type</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span>
319            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&#39;_nolegend_&#39;</span>
320            <span class="n">y_label</span> <span class="o">=</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{</span><span class="si">%s</span><span class="s">}&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="n">output_type</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
321            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="n">y_label</span><span class="p">,</span>
322                                       <span class="bp">self</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="n">output_type</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
323           
324            <span class="c"># Redraw</span>
325            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">graph</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="p">)</span>
326            <span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="o">.</span><span class="n">subplot</span><span class="o">.</span><span class="n">figure</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">draw_idle</span><span class="p">()</span>
327        <span class="k">else</span><span class="p">:</span>
328            <span class="n">msg</span> <span class="o">=</span>  <span class="s">&quot;ExploreDialog: the Results object&#39;s dictionary &quot;</span>
329            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;does not contain &quot;</span>
330            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;the [</span><span class="si">%s</span><span class="s">] output type. This must be indicative of &quot;</span>
331            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;a change in the &quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">output_type</span><span class="p">)</span>
332            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;ExploreDialog code.&quot;</span>
333            <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
334       
335    <span class="k">def</span> <span class="nf">__do_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
336        <span class="sd">&quot;&quot;&quot;</span>
337<span class="sd">        Do the layout of the dialog</span>
338<span class="sd">        &quot;&quot;&quot;</span>
339        <span class="c"># Dialog box properties</span>
340        <span class="bp">self</span><span class="o">.</span><span class="n">SetTitle</span><span class="p">(</span><span class="s">&quot;D_max Explorer&quot;</span><span class="p">)</span>
341        <span class="bp">self</span><span class="o">.</span><span class="n">SetSize</span><span class="p">((</span><span class="mi">600</span><span class="p">,</span> <span class="mi">595</span><span class="p">))</span>
342       
343        <span class="n">sizer_main</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
344        <span class="n">sizer_button</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
345        <span class="n">sizer_params</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">GridBagSizer</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
346
347        <span class="n">iy</span> <span class="o">=</span> <span class="mi">0</span>
348        <span class="n">ix</span> <span class="o">=</span> <span class="mi">0</span>
349        <span class="n">label_npts</span>  <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Npts&quot;</span><span class="p">)</span>
350        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label_npts</span><span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> 
351                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
352        <span class="n">ix</span> <span class="o">+=</span> <span class="mi">1</span>
353        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="p">,</span>   <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> 
354                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
355        <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%g</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">DEFAULT_NPTS</span><span class="p">)</span>
356        <span class="bp">self</span><span class="o">.</span><span class="n">npts_ctl</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_KILL_FOCUS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_recalc</span><span class="p">)</span>
357       
358        <span class="n">ix</span> <span class="o">+=</span> <span class="mi">1</span>
359        <span class="n">label_dmin</span>   <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Min Distance [A]&quot;</span><span class="p">)</span>
360        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label_dmin</span><span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
361                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
362        <span class="n">ix</span> <span class="o">+=</span> <span class="mi">1</span>
363        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
364                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
365        <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_default_min</span><span class="p">))</span>
366        <span class="bp">self</span><span class="o">.</span><span class="n">dmin_ctl</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_KILL_FOCUS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_recalc</span><span class="p">)</span>
367       
368        <span class="n">ix</span> <span class="o">+=</span> <span class="mi">1</span>
369        <span class="n">label_dmax</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Max Distance [A]&quot;</span><span class="p">)</span>
370        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label_dmax</span><span class="p">,</span> <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
371                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
372        <span class="n">ix</span> <span class="o">+=</span> <span class="mi">1</span>
373        <span class="n">sizer_params</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="p">,</span>   <span class="p">(</span><span class="n">iy</span><span class="p">,</span> <span class="n">ix</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
374                         <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
375        <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_default_max</span><span class="p">))</span>
376        <span class="bp">self</span><span class="o">.</span><span class="n">dmax_ctl</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_KILL_FOCUS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_recalc</span><span class="p">)</span>
377
378
379        <span class="c"># Ouput selection box</span>
380        <span class="n">selection_msg</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticText</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;Select a dependent variable:&quot;</span><span class="p">)</span>
381        <span class="bp">self</span><span class="o">.</span><span class="n">output_box</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">ComboBox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
382        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">outputs</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
383            <span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="o">.</span><span class="n">Append</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
384        <span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="o">.</span><span class="n">SetStringSelection</span><span class="p">(</span><span class="n">DEFAULT_OUTPUT</span><span class="p">)</span>
385       
386        <span class="n">output_sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">GridBagSizer</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
387        <span class="n">output_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">selection_msg</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
388                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
389        <span class="n">output_sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
390                         <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
391       
392        <span class="n">wx</span><span class="o">.</span><span class="n">EVT_COMBOBOX</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_box</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_plot_output</span><span class="p">)</span> 
393        <span class="n">sizer_main</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">output_sizer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span> <span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
394       
395        <span class="n">sizer_main</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span> <span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
396        <span class="n">sizer_main</span><span class="o">.</span><span class="n">SetItemMinSize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">plotpanel</span><span class="p">,</span> <span class="mi">400</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span>
397       
398        <span class="n">sizer_main</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_params</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
399        <span class="n">static_line_3</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StaticLine</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
400        <span class="n">sizer_main</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">static_line_3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
401       
402        <span class="c"># Bottom area with the close button</span>
403        <span class="n">sizer_button</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
404        <span class="n">button_OK</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_OK</span><span class="p">,</span> <span class="s">&quot;Close&quot;</span><span class="p">)</span>
405        <span class="n">sizer_button</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">button_OK</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ADJUST_MINSIZE</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
406       
407        <span class="n">sizer_main</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_button</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">BOTTOM</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
408        <span class="bp">self</span><span class="o">.</span><span class="n">SetAutoLayout</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
409        <span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">sizer_main</span><span class="p">)</span>
410        <span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
411        <span class="bp">self</span><span class="o">.</span><span class="n">Centre</span><span class="p">()</span>
412       
413        <span class="c"># Bind the Enter key to recalculation</span>
414        <span class="bp">self</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">EVT_TEXT_ENTER</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_recalc</span><span class="p">)</span>
415
416    <span class="k">def</span> <span class="nf">set_plot_unfocus</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
417<div class="viewcode-block" id="ExploreDialog.set_plot_unfocus"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.explore_dialog.ExploreDialog.set_plot_unfocus">[docs]</a>        <span class="sd">&quot;&quot;&quot;</span>
418<span class="sd">        Not implemented</span>
419<span class="sd">        &quot;&quot;&quot;</span>
420        <span class="k">pass</span>
421   
422    <span class="k">def</span> <span class="nf">_recalc</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="bp">None</span><span class="p">):</span></div>
423        <span class="sd">&quot;&quot;&quot;</span>
424<span class="sd">        Invoked when the user changed a value on the form.</span>
425<span class="sd">        Process the form and compute the output to be plottted.</span>
426<span class="sd">        &quot;&quot;&quot;</span>
427        <span class="c"># Get the content of the form</span>
428        <span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_values</span><span class="p">()</span>
429        <span class="c"># If the content of the form is invalid, return and do nothing</span>
430        <span class="k">if</span> <span class="n">content</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
431            <span class="k">return</span>
432       
433        <span class="c"># Results object to store the computation outputs.</span>
434        <span class="n">results</span> <span class="o">=</span> <span class="n">Results</span><span class="p">()</span>
435       
436        <span class="c"># Loop over d_max values</span>
437        <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="n">content</span><span class="o">.</span><span class="n">npts</span><span class="p">):</span> 
438            <span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">dmax</span> <span class="o">-</span> <span class="n">content</span><span class="o">.</span><span class="n">dmin</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">npts</span> <span class="o">-</span> <span class="mf">1.0</span><span class="p">)</span>   
439            <span class="n">d</span> <span class="o">=</span> <span class="n">content</span><span class="o">.</span><span class="n">dmin</span> <span class="o">+</span> <span class="n">i</span> <span class="o">*</span> <span class="n">temp</span>
440               
441            <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="n">d</span>
442            <span class="k">try</span><span class="p">:</span>
443                <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_state</span><span class="o">.</span><span class="n">invert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">)</span>   
444           
445                <span class="c"># Store results</span>
446                <span class="n">iq0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">iq0</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
447                <span class="n">rg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">rg</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
448                <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">get_positive</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
449                <span class="n">pos_err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</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>
450                <span class="n">osc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pr_state</span><span class="o">.</span><span class="n">oscillations</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
451           
452                <span class="n">results</span><span class="o">.</span><span class="n">d_max</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">pr_state</span><span class="o">.</span><span class="n">d_max</span><span class="p">)</span>
453                <span class="n">results</span><span class="o">.</span><span class="n">bck</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">pr_state</span><span class="o">.</span><span class="n">background</span><span class="p">)</span>
454                <span class="n">results</span><span class="o">.</span><span class="n">chi2</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">pr_state</span><span class="o">.</span><span class="n">chi2</span><span class="p">)</span>
455                <span class="n">results</span><span class="o">.</span><span class="n">iq0</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">iq0</span><span class="p">)</span>
456                <span class="n">results</span><span class="o">.</span><span class="n">rg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rg</span><span class="p">)</span>
457                <span class="n">results</span><span class="o">.</span><span class="n">pos</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
458                <span class="n">results</span><span class="o">.</span><span class="n">pos_err</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pos_err</span><span class="p">)</span>
459                <span class="n">results</span><span class="o">.</span><span class="n">osc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">osc</span><span class="p">)</span>           
460            <span class="k">except</span><span class="p">:</span>
461                <span class="c"># This inversion failed, skip this D_max value</span>
462                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;ExploreDialog: inversion failed &quot;</span>
463                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;for D_max=</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">d</span><span class="p">),</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
464                <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
465           
466        <span class="bp">self</span><span class="o">.</span><span class="n">results</span> <span class="o">=</span> <span class="n">results</span>           
467         
468        <span class="c"># Plot the selected output</span>
469        <span class="bp">self</span><span class="o">.</span><span class="n">_plot_output</span><span class="p">()</span>   
470           
471<span class="c">##### testing code ############################################################</span>
472<span class="sd">&quot;&quot;&quot;</span></div>
473<span class="sd">Example: ::</span>
474
475<span class="sd">class MyApp(wx.App):</span>
476<span class="sd">    </span>
477<span class="sd">    #Test application used to invoke the ExploreDialog for testing</span>
478<span class="sd">   </span>
479<span class="sd">    def OnInit(self):</span>
480<span class="sd">        from inversion_state import Reader</span>
481<span class="sd">        from sas.pr.invertor import Invertor</span>
482<span class="sd">        wx.InitAllImageHandlers()</span>
483<span class="sd">        </span>
484<span class="sd">        def call_back(state, datainfo=None):</span>
485<span class="sd">            </span>
486<span class="sd">            #Dummy call-back method used by the P(r) </span>
487<span class="sd">            #file reader.</span>
488<span class="sd">            </span>
489<span class="sd">            print state</span>
490<span class="sd">            </span>
491<span class="sd">        # Load test data</span>
492<span class="sd">        # This would normally be loaded by the application </span>
493<span class="sd">        # of the P(r) plug-in.</span>
494<span class="sd">        r = Reader(call_back)</span>
495<span class="sd">        data = r.read(&quot;test_pr_data.prv&quot;)</span>
496<span class="sd">        pr_state = data.meta_data[&#39;prstate&#39;]</span>
497<span class="sd">        </span>
498<span class="sd">        # Create Invertor object for the data</span>
499<span class="sd">        # This would normally be assembled by the P(r) plug-in</span>
500<span class="sd">        pr = Invertor()</span>
501<span class="sd">        pr.d_max = pr_state.d_max</span>
502<span class="sd">        pr.alpha = pr_state.alpha</span>
503<span class="sd">        pr.q_min = pr_state.qmin</span>
504<span class="sd">        pr.q_max = pr_state.qmax</span>
505<span class="sd">        pr.x = data.x</span>
506<span class="sd">        pr.y = data.y</span>
507<span class="sd">        pr.err = data.y*0.1</span>
508<span class="sd">        pr.has_bck = False</span>
509<span class="sd">        pr.slit_height = pr_state.height</span>
510<span class="sd">        pr.slit_width = pr_state.width</span>
511<span class="sd">        </span>
512<span class="sd">        # Create the dialog</span>
513<span class="sd">        dialog = ExploreDialog(pr, 10, None, -1, &quot;&quot;)</span>
514<span class="sd">        self.SetTopWindow(dialog)</span>
515<span class="sd">        dialog.ShowModal()</span>
516<span class="sd">        dialog.Destroy()</span>
517
518<span class="sd">        return 1</span>
519
520<span class="sd">if __name__ == &quot;__main__&quot;:</span>
521<span class="sd">    app = MyApp(0)</span>
522<span class="sd">    app.MainLoop()</span>
523<span class="sd">    </span>
524<span class="sd">&quot;&quot;&quot;</span> 
525</pre></div>
526
527          </div>
528        </div>
529      </div>
530      <div class="sphinxsidebar">
531        <div class="sphinxsidebarwrapper">
532<div id="searchbox" style="display: none">
533  <h3>Quick search</h3>
534    <form class="search" action="../../../../search.html" method="get">
535      <input type="text" name="q" />
536      <input type="submit" value="Go" />
537      <input type="hidden" name="check_keywords" value="yes" />
538      <input type="hidden" name="area" value="default" />
539    </form>
540    <p class="searchtip" style="font-size: 90%">
541    Enter search terms or a module, class or function name.
542    </p>
543</div>
544<script type="text/javascript">$('#searchbox').show(0);</script>
545        </div>
546      </div>
547      <div class="clearer"></div>
548    </div>
549    <div class="related">
550      <h3>Navigation</h3>
551      <ul>
552        <li class="right" style="margin-right: 10px">
553          <a href="../../../../genindex.html" title="General Index"
554             >index</a></li>
555        <li class="right" >
556          <a href="../../../../py-modindex.html" title="Python Module Index"
557             >modules</a> |</li>
558        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
559          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
560      </ul>
561    </div>
562    <div class="footer">
563        &copy; Copyright 2013, The SasView Project.
564      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
565    </div>
566  </body>
567</html>
Note: See TracBrowser for help on using the repository browser.