source: sphinxdocs/build/html/_modules/GSASIIexprGUI.html @ 1709

Last change on this file since 1709 was 1709, checked in by toby, 8 years ago

change sphinx docs links; rebuild & fixing minor formatting

  • Property svn:mime-type set to text/html
File size: 140.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>GSASIIexprGUI &mdash; GSAS-II 0.2.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:     '0.2.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="GSAS-II 0.2.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">GSAS-II 0.2.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 GSASIIexprGUI</h1><div class="highlight"><pre>
51<span class="c"># -*- coding: utf-8 -*-</span>
52<span class="c">#GSASIIexprGUI - Expression Definition and Evaluation</span>
53<span class="c">########### SVN repository information ###################</span>
54<span class="c"># $Date: 2015-01-09 18:33:57 -0600 (Fri, 09 Jan 2015) $</span>
55<span class="c"># $Author: toby $</span>
56<span class="c"># $Revision: 1627 $</span>
57<span class="c"># $URL: https://subversion.xray.aps.anl.gov/pyGSAS/trunk/GSASIIexprGUI.py $</span>
58<span class="c"># $Id: GSASIIexprGUI.py 1627 2015-01-10 00:33:57Z toby $</span>
59<span class="c">########### SVN repository information ###################</span>
60<span class="sd">&#39;&#39;&#39;</span>
61<span class="sd">*GSASIIexprGUI: Expression Handling*</span>
62<span class="sd">-------------------------------------</span>
63
64<span class="sd">This module defines a class for defining an expression in terms of values</span>
65<span class="sd">in a parameter dictionary via a wx.Dialog. The dialog creates a :class:`GSASII.ExpressionObj`</span>
66<span class="sd">which is used to evaluate the expression against a supplied parameter dictionary.</span>
67
68<span class="sd">The expression is parsed to find variables used in the expression and then</span>
69<span class="sd">the user is asked to assign parameters from the dictionary to each variable.</span>
70
71<span class="sd">Default expressions are read from file DefaultExpressions.txt using</span>
72<span class="sd">:func:`GSASIIpath.LoadConfigFile`.</span>
73
74<span class="sd">&#39;&#39;&#39;</span>
75<span class="kn">import</span> <span class="nn">re</span>
76<span class="kn">import</span> <span class="nn">sys</span>
77<span class="kn">import</span> <span class="nn">wx</span>
78<span class="kn">import</span> <span class="nn">os.path</span>
79<span class="kn">import</span> <span class="nn">wx.lib.scrolledpanel</span> <span class="kn">as</span> <span class="nn">wxscroll</span>
80<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
81<span class="kn">import</span> <span class="nn">GSASIIpath</span>
82<span class="n">GSASIIpath</span><span class="o">.</span><span class="n">SetVersionNumber</span><span class="p">(</span><span class="s">&quot;$Revision: 1627 $&quot;</span><span class="p">)</span>
83<span class="kn">import</span> <span class="nn">GSASIIgrid</span> <span class="kn">as</span> <span class="nn">G2gd</span>
84<span class="kn">import</span> <span class="nn">GSASIIctrls</span> <span class="kn">as</span> <span class="nn">G2G</span>
85<span class="kn">import</span> <span class="nn">GSASIIpy3</span> <span class="kn">as</span> <span class="nn">G2py3</span>
86<span class="kn">import</span> <span class="nn">GSASIIobj</span> <span class="kn">as</span> <span class="nn">G2obj</span>
87
88<div class="viewcode-block" id="IndexParmDict"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.IndexParmDict">[docs]</a><span class="k">def</span> <span class="nf">IndexParmDict</span><span class="p">(</span><span class="n">parmDict</span><span class="p">,</span><span class="n">wildcard</span><span class="p">):</span>
89    <span class="sd">&#39;&#39;&#39;Separate the parameters in parmDict into list of keys by parameter</span>
90<span class="sd">    type.</span>
91<span class="sd">    </span>
92<span class="sd">    :param dict parmDict: a dict with GSAS-II parameters</span>
93<span class="sd">    :param bool wildcard: True if wildcard versions of parameters should</span>
94<span class="sd">      be generated and added to the lists</span>
95<span class="sd">    :returns: a dict of lists where key 1 is a list of phase parameters,</span>
96<span class="sd">      2 is histogram/phase parms, 3 is histogram parms and 4 are global parameters</span>
97<span class="sd">    &#39;&#39;&#39;</span>
98    <span class="n">prex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;[0-9]+::.*&#39;</span><span class="p">)</span>
99    <span class="n">hrex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&#39;:[0-9]+:.*&#39;</span><span class="p">)</span>
100    <span class="n">parmLists</span> <span class="o">=</span> <span class="p">{}</span>
101    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">):</span>
102        <span class="n">parmLists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
103    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">parmDict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
104        <span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;::&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">i</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="c"># globals</span>
105            <span class="n">parmLists</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
106        <span class="k">elif</span> <span class="n">prex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
107            <span class="n">parmLists</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
108        <span class="k">elif</span> <span class="n">hrex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
109            <span class="n">parmLists</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
110        <span class="k">else</span><span class="p">:</span>
111            <span class="n">parmLists</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
112    <span class="k">if</span> <span class="n">wildcard</span><span class="p">:</span>
113        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">):</span>
114            <span class="n">parmLists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">GenWildCard</span><span class="p">(</span><span class="n">parmLists</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="c"># generate wildcard versions</span>
115    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">):</span>
116        <span class="n">parmLists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
117    <span class="k">return</span> <span class="n">parmLists</span>
118
119<span class="c">#==========================================================================</span></div>
120<span class="n">defaultExpressions</span> <span class="o">=</span> <span class="bp">None</span>
121<div class="viewcode-block" id="LoadDefaultExpressions"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.LoadDefaultExpressions">[docs]</a><span class="k">def</span> <span class="nf">LoadDefaultExpressions</span><span class="p">():</span>
122    <span class="sd">&#39;&#39;&#39;Read a configuration file with default expressions from all files named</span>
123<span class="sd">    DefaultExpressions.txt found in the path. Duplicates are removed and</span>
124<span class="sd">    expressions are sorted alphabetically</span>
125<span class="sd">    &#39;&#39;&#39;</span>
126    <span class="k">global</span> <span class="n">defaultExpressions</span>
127    <span class="k">if</span> <span class="n">defaultExpressions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="c"># run this routine only once</span>
128    <span class="n">defaultExpressions</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">GSASIIpath</span><span class="o">.</span><span class="n">LoadConfigFile</span><span class="p">(</span><span class="s">&#39;DefaultExpressions.txt&#39;</span><span class="p">))))</span>
129   
130<span class="c">#==========================================================================</span></div>
131<div class="viewcode-block" id="ExpressionDialog"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog">[docs]</a><span class="k">class</span> <span class="nc">ExpressionDialog</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Dialog</span><span class="p">):</span>
132    <span class="sd">&#39;&#39;&#39;A wx.Dialog that allows a user to input an arbitrary expression</span>
133<span class="sd">    to be evaluated and possibly minimized.</span>
134
135<span class="sd">    To do this, the user assigns a new (free) or existing</span>
136<span class="sd">    GSAS-II parameter to each parameter label used in the expression.</span>
137<span class="sd">    The free parameters can optionally be designated to be refined. </span>
138<span class="sd">    For example, is an expression is used such as::</span>
139
140<span class="sd">    &#39;A*np.exp(-B/C)&#39;</span>
141
142<span class="sd">    then A, B and C can each be assigned as Free parameter with a user-selected</span>
143<span class="sd">    value or to any existing GSAS-II variable in the parameter dictionary.</span>
144<span class="sd">    As the expression is entered it is checked for validity.</span>
145
146<span class="sd">    After the :class:`ExpressionDialog` object is created, use :meth:`Show` to</span>
147<span class="sd">    run it and obtain a :class:`GSASIIobj.ExpressionObj` object with the user</span>
148<span class="sd">    input.</span>
149
150<span class="sd">    :param wx.Frame parent: The parent of the Dialog. Can be None,</span>
151<span class="sd">      but better is to provide the name of the Frame where the dialog</span>
152<span class="sd">      is called.</span>
153<span class="sd">    :param dict parmDict: a dict with defined parameters and their values. Each value</span>
154<span class="sd">      may be a list with parameter values and a refine flag or may just contain</span>
155<span class="sd">      the parameter value (non-float/int values in dict are ignored)</span>
156<span class="sd">    :param str exprObj: a :class:`GSASIIobj.ExpressionObj` object with an expression and</span>
157<span class="sd">      label assignments or None (default)</span>
158<span class="sd">    :param str wintitle: String placed on title bar of dialog; </span>
159<span class="sd">      defaults to &quot;Expression Editor&quot;</span>
160<span class="sd">    :param str header: String placed at top of dialog to tell the user</span>
161<span class="sd">      what they will do here; default is &quot;Enter restraint expression here&quot;</span>
162<span class="sd">    :param bool fit: determines if the expression will be used in fitting (default=True).</span>
163<span class="sd">      If set to False, and refinement flags are not shown</span>
164<span class="sd">      and Free parameters are not offered as an assignment option.</span>
165<span class="sd">    :param str VarLabel: an optional variable label to include before the expression</span>
166<span class="sd">      input. Ignored if None (default)</span>
167<span class="sd">    :param list depVarDict: a dict of choices for the dependent variable to be</span>
168<span class="sd">      fitted to the expression and their values. Ignored if None (default).</span>
169<span class="sd">    :param list ExtraButton: a list with two terms that define [0]: the label</span>
170<span class="sd">      for an extra button and [1] the callback routine to be used when the</span>
171<span class="sd">      button is pressed. The button will only be enabled when the OK button can be</span>
172<span class="sd">      used (meaning the equation/expression is valid). The default is None, meaning this</span>
173<span class="sd">      will not be used.</span>
174<span class="sd">    :param list usedVars: defines a list of previously used variable names. These names</span>
175<span class="sd">      will not be reused as defaults for new free variables.</span>
176<span class="sd">      (The default is an empty list). </span>
177<span class="sd">    &#39;&#39;&#39;</span>
178    <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">parent</span><span class="p">,</span> <span class="n">parmDict</span><span class="p">,</span> <span class="n">exprObj</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
179                 <span class="n">header</span><span class="o">=</span><span class="s">&#39;Enter restraint expression here&#39;</span><span class="p">,</span>
180                 <span class="n">wintitle</span><span class="o">=</span><span class="s">&#39;Expression Editor&#39;</span><span class="p">,</span>
181                 <span class="n">fit</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span><span class="n">VarLabel</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">depVarDict</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
182                 <span class="n">ExtraButton</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">usedVars</span><span class="o">=</span><span class="p">[]):</span>
183        <span class="bp">self</span><span class="o">.</span><span class="n">fit</span> <span class="o">=</span> <span class="n">fit</span>
184        <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span> <span class="o">=</span> <span class="n">depVarDict</span>
185        <span class="s">&#39;dict for dependent variables&#39;</span>
186        <span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span> <span class="o">=</span> <span class="p">{}</span>
187        <span class="sd">&#39;&#39;&#39;A copy of the G2 parameter dict (parmDict) except only numerical</span>
188<span class="sd">        values are included and only the value (not the vary flag, if present)</span>
189<span class="sd">        is included.</span>
190<span class="sd">        &#39;&#39;&#39;</span>
191        <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span> <span class="o">=</span> <span class="p">[]</span>
192        <span class="sd">&#39;&#39;&#39;A list containing the variables utilized in the current expression.</span>
193<span class="sd">        Placed into a :class:`GSASIIobj.ExpressionObj` object when the dialog is closed</span>
194<span class="sd">        with &quot;OK&quot;, saving any changes.</span>
195<span class="sd">        &#39;&#39;&#39;</span>
196        <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span> <span class="o">=</span> <span class="p">{}</span>
197        <span class="sd">&#39;&#39;&#39;A dict that shows the variable type for each label</span>
198<span class="sd">        found in the expression.</span>
199
200<span class="sd">        * If the value is None or is not defined, the value is not assigned.</span>
201<span class="sd">        * If the value is 0, then the varible is &quot;free&quot; -- a new refineable</span>
202<span class="sd">          parameter.</span>
203<span class="sd">        * Values above 1 determine what variables will be shown</span>
204<span class="sd">          when the option is selected. </span>
205<span class="sd">        &#39;&#39;&#39;</span>
206        <span class="bp">self</span><span class="o">.</span><span class="n">varName</span> <span class="o">=</span> <span class="p">{}</span>
207        <span class="s">&#39;Name assigned to each variable&#39;</span>
208        <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span> <span class="o">=</span> <span class="p">{}</span>
209        <span class="s">&#39;Value for a variable (Free parameters only)&#39;</span>
210        <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span> <span class="o">=</span> <span class="p">{}</span>
211        <span class="s">&#39;Refinement flag for a variable (Free parameters only)&#39;</span>
212        <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
213        <span class="s">&#39;Expression as a text string&#39;</span>
214        <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span> <span class="o">=</span> <span class="bp">None</span>
215        <span class="s">&#39;name for dependent variable selection, when depVarDict is specified&#39;</span>
216        <span class="bp">self</span><span class="o">.</span><span class="n">usedVars</span> <span class="o">=</span> <span class="n">usedVars</span>
217        <span class="s">&#39;variable names that have been used and should not be reused by default&#39;</span>
218        <span class="n">defSize</span> <span class="o">=</span> <span class="p">(</span><span class="mi">620</span><span class="p">,</span><span class="mi">340</span><span class="p">)</span> <span class="c"># seems like a good size</span>
219        <span class="s">&#39;Starting size for dialog&#39;</span>
220
221        <span class="c"># process dictionary of values and create an index</span>
222        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">parmDict</span><span class="p">:</span>
223            <span class="k">try</span><span class="p">:</span> <span class="c"># deal with values that are in lists</span>
224                <span class="n">val</span> <span class="o">=</span> <span class="n">parmDict</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
225            <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
226                <span class="k">continue</span> <span class="c"># there were dicts in parmDict (should be gone now)</span>
227            <span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span><span class="ne">IndexError</span><span class="p">):</span>
228                <span class="n">val</span> <span class="o">=</span> <span class="n">parmDict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
229            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">):</span> <span class="k">continue</span>
230            <span class="k">try</span><span class="p">:</span>
231                <span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
232            <span class="k">except</span><span class="p">:</span>
233                <span class="k">pass</span>
234        <span class="c"># separate the variables by type</span>
235        <span class="bp">self</span><span class="o">.</span><span class="n">parmLists</span> <span class="o">=</span> <span class="n">IndexParmDict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">fit</span><span class="p">)</span>
236        <span class="bp">self</span><span class="o">.</span><span class="n">timer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Timer</span><span class="p">()</span>
237        <span class="bp">self</span><span class="o">.</span><span class="n">timer</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_TIMER</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">)</span>
238        <span class="n">LoadDefaultExpressions</span><span class="p">()</span>
239        <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">DEFAULT_DIALOG_STYLE</span> <span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">RESIZE_BORDER</span>
240        <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="n">parent</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">wintitle</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="n">size</span><span class="o">=</span><span class="n">defSize</span><span class="p">)</span>
241        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</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>
242        <span class="n">label</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">header</span><span class="p">)</span>
243        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label</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">ALIGN_CENTRE</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">5</span><span class="p">)</span>
244
245        <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</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>
246        <span class="k">if</span> <span class="n">VarLabel</span><span class="p">:</span>
247            <span class="n">label</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">VarLabel</span> <span class="o">+</span> <span class="s">&#39; = &#39;</span><span class="p">)</span>
248            <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label</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">ALL</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">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
249        <span class="k">elif</span> <span class="n">depVarDict</span><span class="p">:</span>
250            <span class="bp">self</span><span class="o">.</span><span class="n">depParmLists</span> <span class="o">=</span> <span class="n">IndexParmDict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">,</span><span class="bp">False</span><span class="p">)</span>
251            <span class="n">choices</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="s">&#39;Phase&#39;</span><span class="p">,</span><span class="s">&#39;Hist./Phase&#39;</span><span class="p">,</span><span class="s">&#39;Hist.&#39;</span><span class="p">,</span><span class="s">&#39;Global&#39;</span><span class="p">]</span>
252            <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="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">choices</span><span class="p">)):</span> <span class="c"># remove empty menus from choice list</span>
253                <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">depParmLists</span><span class="p">[</span><span class="n">i</span><span class="p">]):</span> <span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
254            <span class="bp">self</span><span class="o">.</span><span class="n">depChoices</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <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">choices</span><span class="p">))</span> <span class="k">if</span> <span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
255            <span class="n">choice</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Choice</span><span class="p">(</span>
256                <span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span>
257                <span class="n">choices</span> <span class="o">=</span> <span class="p">[</span><span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">depChoices</span><span class="p">]</span>
258                <span class="p">)</span>
259            <span class="n">choice</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
260            <span class="n">choice</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_CHOICE</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnDepChoice</span><span class="p">)</span>
261            <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">choice</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">ALL</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">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
262            <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span>
263            <span class="bp">self</span><span class="o">.</span><span class="n">depLabel</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s">&#39; &#39;</span><span class="p">)</span>
264            <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</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">depLabel</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">ALL</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">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
265            <span class="n">label</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s">&#39; = &#39;</span><span class="p">)</span>
266            <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">label</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">ALL</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">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
267
268        <span class="c">#self.exCtrl = wx.TextCtrl(self,  wx.ID_ANY, size=(150,-1),style=wx.TE_PROCESS_ENTER)</span>
269        <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="p">(</span><span class="mi">90</span><span class="p">,</span> <span class="mi">50</span><span class="p">),</span> <span class="p">(</span><span class="mi">160</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
270                                  <span class="n">defaultExpressions</span><span class="p">,</span>
271                                  <span class="n">wx</span><span class="o">.</span><span class="n">CB_DROPDOWN</span><span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">TE_PROCESS_ENTER</span>
272                         <span class="p">)</span>
273        <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</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_CHAR</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">OnChar</span><span class="p">)</span>
274        <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</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_COMBOBOX</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">)</span>
275        <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</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">OnValidate</span><span class="p">)</span>
276        <span class="bp">self</span><span class="o">.</span><span class="n">exsizer</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">exCtrl</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">ALL</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">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
277        <span class="c">#self.mainsizer.Add(self.exCtrl, 0, wx.ALL|wx.EXPAND, 5)</span>
278        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</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">exsizer</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
279        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</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">1</span><span class="p">)</span>
280
281        <span class="n">evalSizer</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>
282        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">evalSizer</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">ALL</span><span class="o">|</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>
283        <span class="n">btn</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_ANY</span><span class="p">,</span><span class="s">&quot;Validate&quot;</span><span class="p">)</span>
284        <span class="n">btn</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_BUTTON</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">)</span>
285        <span class="n">evalSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">btn</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="p">,</span><span class="mi">5</span><span class="p">)</span>
286        <span class="bp">self</span><span class="o">.</span><span class="n">result</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="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
287        <span class="n">evalSizer</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">result</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">ALIGN_CENTRE</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">5</span><span class="p">)</span>
288
289        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</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>
290        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</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">varSizer</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
291        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</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">1</span><span class="p">)</span>
292
293        <span class="n">bSizer</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>
294        <span class="n">btnsizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">StdDialogButtonSizer</span><span class="p">()</span>
295        <span class="k">if</span> <span class="n">ExtraButton</span><span class="p">:</span>
296            <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</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_ANY</span><span class="p">,</span> <span class="n">ExtraButton</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
297            <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</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_BUTTON</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnExtra</span><span class="p">)</span>
298            <span class="bp">self</span><span class="o">.</span><span class="n">ExtraCallBack</span> <span class="o">=</span> <span class="n">ExtraButton</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
299            <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
300            <span class="n">bSizer</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">ExtraBtn</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALIGN_CENTER_VERTICAL</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
301        <span class="k">else</span><span class="p">:</span>
302            <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span> <span class="o">=</span> <span class="bp">None</span>
303        <span class="n">bSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</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">ALIGN_CENTER</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</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>
304        <span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</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>
305        <span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</span><span class="o">.</span><span class="n">SetDefault</span><span class="p">()</span>
306        <span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
307        <span class="n">btnsizer</span><span class="o">.</span><span class="n">AddButton</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</span><span class="p">)</span>
308        <span class="n">btn</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_CANCEL</span><span class="p">)</span>
309        <span class="n">btnsizer</span><span class="o">.</span><span class="n">AddButton</span><span class="p">(</span><span class="n">btn</span><span class="p">)</span>
310        <span class="n">btnsizer</span><span class="o">.</span><span class="n">Realize</span><span class="p">()</span>
311        <span class="n">bSizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">btnsizer</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">ALIGN_CENTER_VERTICAL</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">5</span><span class="p">)</span>
312        <span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">bSizer</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">ALIGN_CENTER_VERTICAL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
313        <span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mainsizer</span><span class="p">)</span>
314        <span class="bp">self</span><span class="o">.</span><span class="n">CenterOnParent</span><span class="p">()</span>
315        <span class="k">if</span> <span class="n">exprObj</span><span class="p">:</span>
316            <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">exprObj</span><span class="o">.</span><span class="n">EditExpression</span><span class="p">(</span>
317                <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">,</span>
318                <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">,</span>
319                <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">,</span>
320                <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">,</span>
321                <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">,</span>
322                <span class="p">)</span>
323            <span class="c"># set the initial value for the dependent value</span>
324            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">:</span>
325                <span class="n">var</span> <span class="o">=</span> <span class="n">exprObj</span><span class="o">.</span><span class="n">GetDepVar</span><span class="p">()</span>
326                <span class="k">if</span> <span class="n">var</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">:</span>
327                    <span class="bp">self</span><span class="o">.</span><span class="n">depLabel</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
328                    <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span> <span class="o">=</span> <span class="n">var</span>
329                   
330        <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</span><span class="o">.</span><span class="n">SetValue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">)</span>
331        <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
332        <span class="bp">self</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">(</span><span class="n">defSize</span><span class="p">)</span> 
333        <span class="c">#self.errbox.SetAutoLayout(1)</span>
334        <span class="c">#self.errbox.SetupScrolling()</span>
335        <span class="c">#self.varbox.SetAutoLayout(1)</span>
336        <span class="c">#self.varbox.SetupScrolling()</span>
337        <span class="c">#self.mainsizer.Fit(self)</span>
338
339    <span class="k">def</span> <span class="nf">OnExtra</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
340        <span class="n">exprObj</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">ExpressionObj</span><span class="p">()</span>
341        <span class="n">exprObj</span><span class="o">.</span><span class="n">LoadExpression</span><span class="p">(</span>
342            <span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span>
343            <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">,</span>
344            <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">,</span>
345            <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">,</span>
346            <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">,</span>
347            <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">,</span>
348            <span class="p">)</span>
349        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">:</span>
350            <span class="n">exprObj</span><span class="o">.</span><span class="n">SetDepVar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span><span class="p">)</span>
351        <span class="bp">self</span><span class="o">.</span><span class="n">ExtraCallBack</span><span class="p">(</span><span class="n">exprObj</span><span class="p">)</span>
352        <span class="c"># put results back into displayed dialog</span>
353        <span class="n">resDict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">exprObj</span><span class="o">.</span><span class="n">GetVariedVarVal</span><span class="p">())</span>
354        <span class="k">for</span> <span class="n">v</span><span class="p">,</span><span class="n">var</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
355            <span class="n">varname</span> <span class="o">=</span> <span class="s">&quot;::&quot;</span> <span class="o">+</span> <span class="n">var</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;:&#39;</span><span class="p">,</span><span class="s">&#39;;&#39;</span><span class="p">)</span>
356            <span class="n">val</span> <span class="o">=</span>  <span class="n">resDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">varname</span><span class="p">)</span>
357            <span class="k">if</span> <span class="n">val</span><span class="p">:</span>
358                <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
359        <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">ShowVars</span><span class="p">)</span>
360
361<div class="viewcode-block" id="ExpressionDialog.Show"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.Show">[docs]</a>    <span class="k">def</span> <span class="nf">Show</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">mode</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
362        <span class="sd">&#39;&#39;&#39;Call to use the dialog after it is created.</span>
363
364<span class="sd">        :returns: None (On Cancel) or a new :class:`~GSASIIobj.ExpressionObj`</span>
365<span class="sd">        &#39;&#39;&#39;</span>
366        <span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
367        <span class="c">#self.mainsizer.Fit(self)</span>
368        <span class="bp">self</span><span class="o">.</span><span class="n">SendSizeEvent</span><span class="p">()</span> <span class="c"># force repaint</span>
369        <span class="k">if</span> <span class="bp">self</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>
370            <span class="c"># store the edit results in the object and return it</span>
371            <span class="n">exprObj</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">ExpressionObj</span><span class="p">()</span>
372            <span class="n">exprObj</span><span class="o">.</span><span class="n">LoadExpression</span><span class="p">(</span>
373                <span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span>
374                <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">,</span>
375                <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">,</span>
376                <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">,</span>
377                <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">,</span>
378                <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">,</span>
379                <span class="p">)</span>
380            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">:</span>
381                <span class="n">exprObj</span><span class="o">.</span><span class="n">SetDepVar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span><span class="p">)</span>
382            <span class="k">return</span> <span class="n">exprObj</span>
383        <span class="k">else</span><span class="p">:</span>
384            <span class="k">return</span> <span class="bp">None</span>
385        </div>
386<div class="viewcode-block" id="ExpressionDialog.setEvalResult"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.setEvalResult">[docs]</a>    <span class="k">def</span> <span class="nf">setEvalResult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">msg</span><span class="p">):</span>
387        <span class="s">&#39;Show a string in the expression result area&#39;</span>
388        <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
389</div>
390<div class="viewcode-block" id="ExpressionDialog.RestartTimer"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.RestartTimer">[docs]</a>    <span class="k">def</span> <span class="nf">RestartTimer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
391        <span class="sd">&#39;&#39;&#39;Cancels any running timer and starts a new one.</span>
392<span class="sd">        The timer causes a check of syntax after 2 seconds unless there is further input.</span>
393<span class="sd">        Disables the OK button until a validity check is complete.</span>
394<span class="sd">        &#39;&#39;&#39;</span>
395        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">timer</span><span class="o">.</span><span class="n">IsRunning</span><span class="p">():</span>
396            <span class="bp">self</span><span class="o">.</span><span class="n">timer</span><span class="o">.</span><span class="n">Stop</span><span class="p">()</span>
397        <span class="bp">self</span><span class="o">.</span><span class="n">timer</span><span class="o">.</span><span class="n">Start</span><span class="p">(</span><span class="mi">2000</span><span class="p">,</span><span class="n">oneShot</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
398        </div>
399<div class="viewcode-block" id="ExpressionDialog.OnChar"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.OnChar">[docs]</a>    <span class="k">def</span> <span class="nf">OnChar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
400        <span class="sd">&#39;&#39;&#39;Called as each character is entered. Cancels any running timer</span>
401<span class="sd">        and starts a new one. The timer causes a check of syntax after 2 seconds</span>
402<span class="sd">        without input.</span>
403<span class="sd">        Disables the OK button until a validity check is complete.</span>
404<span class="sd">        &#39;&#39;&#39;</span>
405        <span class="bp">self</span><span class="o">.</span><span class="n">RestartTimer</span><span class="p">()</span>
406        <span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
407        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
408        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
409        <span class="k">return</span>
410    </div>
411<div class="viewcode-block" id="ExpressionDialog.CheckVars"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.CheckVars">[docs]</a>    <span class="k">def</span> <span class="nf">CheckVars</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
412        <span class="sd">&#39;&#39;&#39;Check that appropriate variables are defined for each</span>
413<span class="sd">        symbol used in :data:`self.expr`</span>
414
415<span class="sd">        :returns: a text error message or None if all needed input is present       </span>
416<span class="sd">        &#39;&#39;&#39;</span>
417        <span class="n">invalid</span> <span class="o">=</span> <span class="mi">0</span>
418        <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">:</span>
419            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
420                <span class="n">invalid</span> <span class="o">+=</span> <span class="mi">1</span>
421        <span class="k">if</span> <span class="n">invalid</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span>
422            <span class="k">return</span> <span class="s">&#39;(a variable is not assigned)&#39;</span>
423        <span class="k">elif</span> <span class="n">invalid</span><span class="p">:</span>
424            <span class="k">return</span> <span class="s">&#39;(&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">invalid</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; variables are not assigned)&#39;</span>
425        <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
426        <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">:</span>
427            <span class="n">varname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
428            <span class="k">if</span> <span class="ow">not</span> <span class="n">varname</span><span class="p">:</span>
429                <span class="n">invalid</span> <span class="o">+=</span> <span class="mi">1</span>
430                <span class="k">if</span> <span class="n">msg</span><span class="p">:</span> <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;; &quot;</span>
431                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&#39;No variable for &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
432            <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
433               <span class="k">if</span> <span class="s">&#39;*&#39;</span> <span class="ow">in</span> <span class="n">varname</span><span class="p">:</span>
434                   <span class="n">l</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">LookupWildCard</span><span class="p">(</span><span class="n">varname</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
435                   <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
436                       <span class="n">invalid</span> <span class="o">+=</span> <span class="mi">1</span>
437                       <span class="k">if</span> <span class="n">msg</span><span class="p">:</span> <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;; &quot;</span>
438                       <span class="n">msg</span> <span class="o">+=</span> <span class="s">&#39;No variables match &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">varname</span><span class="p">)</span>
439               <span class="k">elif</span> <span class="n">varname</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
440                   <span class="n">invalid</span> <span class="o">+=</span> <span class="mi">1</span>
441                   <span class="k">if</span> <span class="n">msg</span><span class="p">:</span> <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;; &quot;</span>
442                   <span class="n">msg</span> <span class="o">+=</span> <span class="s">&#39;No variables match &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">varname</span><span class="p">)</span>
443            <span class="k">else</span><span class="p">:</span>
444                <span class="c"># value assignment: this check is likely unneeded</span>
445                <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
446                <span class="k">try</span><span class="p">:</span>
447                    <span class="nb">float</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
448                <span class="k">except</span> <span class="ne">ValueError</span><span class="p">,</span><span class="ne">TypeError</span><span class="p">:</span>
449                    <span class="n">invalid</span> <span class="o">+=</span> <span class="mi">1</span>
450                    <span class="k">if</span> <span class="n">msg</span><span class="p">:</span> <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;; &quot;</span>
451                    <span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
452                        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&#39;No value for &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
453                    <span class="k">else</span><span class="p">:</span>
454                        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&#39;Value &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">)</span><span class="o">+</span><span class="s">&#39; invalid for &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
455        <span class="k">if</span> <span class="n">invalid</span><span class="p">:</span>
456            <span class="k">return</span> <span class="s">&#39;(&#39;</span><span class="o">+</span><span class="n">msg</span><span class="o">+</span><span class="s">&#39;)&#39;</span>       
457        <span class="k">return</span>
458</div>
459    <span class="k">def</span> <span class="nf">ShowVars</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
460        <span class="c"># create widgets to associate vars with labels and/or show messages</span>
461        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</span><span class="o">.</span><span class="n">Clear</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
462        <span class="bp">self</span><span class="o">.</span><span class="n">errbox</span> <span class="o">=</span> <span class="n">wxscroll</span><span class="o">.</span><span class="n">ScrolledPanel</span><span class="p">(</span><span class="bp">self</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">HSCROLL</span><span class="p">)</span>
463        <span class="bp">self</span><span class="o">.</span><span class="n">errbox</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="mi">100</span><span class="p">,</span><span class="mi">130</span><span class="p">))</span>
464        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</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">errbox</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
465        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span> <span class="o">=</span> <span class="n">wxscroll</span><span class="o">.</span><span class="n">ScrolledPanel</span><span class="p">(</span><span class="bp">self</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">HSCROLL</span><span class="p">)</span>
466        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</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">varbox</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
467        <span class="n">Siz</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>
468        <span class="n">Siz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span>
469            <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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span>
470                          <span class="s">&#39;Assignment of variables to labels:&#39;</span><span class="p">),</span>
471            <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">ALIGN_CENTER</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
472        <span class="n">GridSiz</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">FlexGridSizer</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
473        <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span>
474            <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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&#39;label&#39;</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">CENTER</span><span class="p">),</span>
475            <span class="mi">0</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ALIGN_CENTER</span><span class="p">)</span>
476        <span class="n">lbls</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;varib. type</span><span class="se">\n</span><span class="s">selection&#39;</span><span class="p">,</span><span class="s">&#39;variable</span><span class="se">\n</span><span class="s">name&#39;</span><span class="p">,</span><span class="s">&#39;value&#39;</span><span class="p">)</span>
477        <span class="n">choices</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Free&#39;</span><span class="p">,</span><span class="s">&#39;Phase&#39;</span><span class="p">,</span><span class="s">&#39;Hist./Phase&#39;</span><span class="p">,</span><span class="s">&#39;Hist.&#39;</span><span class="p">,</span><span class="s">&#39;Global&#39;</span><span class="p">]</span>
478        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit</span><span class="p">:</span>
479            <span class="n">lbls</span> <span class="o">+=</span> <span class="p">(</span><span class="s">&#39;refine</span><span class="se">\n</span><span class="s">flag&#39;</span><span class="p">,)</span>
480        <span class="k">else</span><span class="p">:</span>
481            <span class="n">lbls</span> <span class="o">+=</span> <span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">,)</span>
482            <span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
483        <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="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">choices</span><span class="p">)):</span> <span class="c"># remove empty menus from choice list</span>
484            <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parmLists</span><span class="p">[</span><span class="n">i</span><span class="p">]):</span> <span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
485        <span class="bp">self</span><span class="o">.</span><span class="n">AllowedChoices</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <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">choices</span><span class="p">))</span> <span class="k">if</span> <span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
486        <span class="k">for</span> <span class="n">lbl</span> <span class="ow">in</span> <span class="n">lbls</span><span class="p">:</span>
487            <span class="n">w</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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="n">lbl</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">CENTER</span><span class="p">)</span>
488            <span class="n">w</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="mi">80</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
489            <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">w</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">ALIGN_CENTER</span><span class="p">)</span>
490
491        <span class="c"># show input for each var in expression.</span>
492        <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">:</span>
493            <span class="c"># label</span>
494            <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="n">v</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">ALIGN_CENTER</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
495            <span class="c"># assignment type</span>
496            <span class="n">ch</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Choice</span><span class="p">(</span>
497                <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span>
498                <span class="n">choices</span> <span class="o">=</span> <span class="p">[</span><span class="n">choices</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AllowedChoices</span><span class="p">]</span>
499                <span class="p">)</span>
500            <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">ch</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">ALIGN_LEFT</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
501            <span class="k">if</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AllowedChoices</span><span class="p">:</span>
502                <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AllowedChoices</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
503                <span class="n">ch</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
504            <span class="k">else</span><span class="p">:</span>
505                <span class="n">ch</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
506            <span class="n">ch</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">v</span>
507            <span class="n">ch</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_CHOICE</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnChoice</span><span class="p">)</span>
508
509            <span class="c"># var name/var assignment</span>
510            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
511                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</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">ALIGN_LEFT</span><span class="o">|</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>
512            <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
513                <span class="n">wid</span> <span class="o">=</span> <span class="n">G2G</span><span class="o">.</span><span class="n">ValidatedTxtCtrl</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">,</span><span class="n">v</span><span class="p">,</span>
514                                            <span class="c">#OnLeave=self.OnTxtLeave,</span>
515                                            <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
516                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="o">|</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>
517            <span class="k">else</span><span class="p">:</span>
518                <span class="n">wid</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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">[</span><span class="n">v</span><span class="p">])</span>
519                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
520
521            <span class="c"># value</span>
522            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
523                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">((</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</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">ALIGN_RIGHT</span><span class="o">|</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>
524            <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
525                <span class="n">wid</span> <span class="o">=</span> <span class="n">G2G</span><span class="o">.</span><span class="n">ValidatedTxtCtrl</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">,</span><span class="n">v</span><span class="p">,</span>
526                                            <span class="c">#OnLeave=self.OnTxtLeave,</span>
527                                            <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">75</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
528                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="o">|</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>
529                <span class="n">wid</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_CHAR</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">OnChar</span><span class="p">)</span>
530            <span class="k">else</span><span class="p">:</span>
531                <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">[</span><span class="n">v</span><span class="p">]</span>
532                <span class="k">if</span> <span class="s">&#39;*&#39;</span> <span class="ow">in</span> <span class="n">var</span><span class="p">:</span>
533                    <span class="c">#[self.parmDict[v] for v in LookupWildCard(var,self.parmDict.keys())]</span>
534                    <span class="c">#print self.varValue[v]</span>
535                    <span class="n">vs</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">LookupWildCard</span><span class="p">(</span><span class="n">var</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
536                    <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;(&#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">vs</span><span class="p">))</span><span class="o">+</span><span class="s">&#39; values)&#39;</span>
537                <span class="k">elif</span> <span class="n">var</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="p">:</span>
538                    <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="p">[</span><span class="n">var</span><span class="p">]</span>
539                    <span class="n">s</span> <span class="o">=</span> <span class="n">G2py3</span><span class="o">.</span><span class="n">FormatSigFigs</span><span class="p">(</span><span class="n">val</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s">&#39;0&#39;</span><span class="p">)</span>
540                <span class="k">else</span><span class="p">:</span>
541                    <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;?&#39;</span>
542                <span class="n">wid</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="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="n">s</span><span class="p">)</span>
543                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
544
545            <span class="c"># show a refine flag for Free Vars only</span>
546            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">fit</span><span class="p">:</span>
547                <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">,</span><span class="bp">True</span><span class="p">)</span>
548                <span class="n">wid</span> <span class="o">=</span> <span class="n">G2G</span><span class="o">.</span><span class="n">G2CheckBox</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
549                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="o">|</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>
550            <span class="k">else</span><span class="p">:</span>
551                <span class="n">wid</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
552                <span class="n">GridSiz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">wid</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">ALIGN_LEFT</span><span class="o">|</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>
553
554        <span class="n">Siz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">GridSiz</span><span class="p">)</span>
555        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">Siz</span><span class="p">,</span><span class="bp">True</span><span class="p">)</span>
556        <span class="n">xwid</span><span class="p">,</span><span class="n">yhgt</span> <span class="o">=</span> <span class="n">Siz</span><span class="o">.</span><span class="n">Fit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="p">)</span>
557        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="n">xwid</span><span class="p">,</span><span class="mi">130</span><span class="p">))</span>
558        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="o">.</span><span class="n">SetAutoLayout</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
559        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="o">.</span><span class="n">SetupScrolling</span><span class="p">()</span>
560        <span class="bp">self</span><span class="o">.</span><span class="n">varbox</span><span class="o">.</span><span class="n">Refresh</span><span class="p">()</span>
561        <span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
562        <span class="c">#self.mainsizer.Fit(self)</span>
563        <span class="bp">self</span><span class="o">.</span><span class="n">SendSizeEvent</span><span class="p">()</span> <span class="c"># force repaint</span>
564        <span class="k">return</span>
565
566<div class="viewcode-block" id="ExpressionDialog.OnDepChoice"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.OnDepChoice">[docs]</a>    <span class="k">def</span> <span class="nf">OnDepChoice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
567        <span class="sd">&#39;&#39;&#39;Respond to a selection of a variable type for a label in</span>
568<span class="sd">        an expression</span>
569<span class="sd">        &#39;&#39;&#39;</span>
570        <span class="n">sel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">depChoices</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span><span class="o">.</span><span class="n">GetSelection</span><span class="p">()]</span>
571        <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SelectG2var</span><span class="p">(</span><span class="n">sel</span><span class="p">,</span><span class="s">&#39;Dependent variable&#39;</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">depParmLists</span><span class="p">[</span><span class="n">sel</span><span class="p">])</span>
572        <span class="k">if</span> <span class="n">var</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
573            <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span> <span class="o">=</span> <span class="bp">None</span>
574            <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
575            <span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span><span class="o">.</span><span class="n">SetSelection</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">NOT_FOUND</span><span class="p">)</span>
576            <span class="k">return</span>
577        <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span> <span class="o">=</span> <span class="n">var</span>
578        <span class="bp">self</span><span class="o">.</span><span class="n">depLabel</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
579        <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
580        <span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
581</div>
582<div class="viewcode-block" id="ExpressionDialog.GetDepVar"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.GetDepVar">[docs]</a>    <span class="k">def</span> <span class="nf">GetDepVar</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
583        <span class="sd">&#39;&#39;&#39;Returns the name of the dependent variable, when depVarDict is used.</span>
584<span class="sd">        &#39;&#39;&#39;</span>
585        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span>
586        </div>
587<div class="viewcode-block" id="ExpressionDialog.OnChoice"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.OnChoice">[docs]</a>    <span class="k">def</span> <span class="nf">OnChoice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
588        <span class="sd">&#39;&#39;&#39;Respond to a selection of a variable type for a label in</span>
589<span class="sd">        an expression</span>
590<span class="sd">        &#39;&#39;&#39;</span>
591        <span class="n">v</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span><span class="o">.</span><span class="n">label</span>
592        <span class="n">sel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AllowedChoices</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">GetEventObject</span><span class="p">()</span><span class="o">.</span><span class="n">GetSelection</span><span class="p">()]</span>
593        <span class="k">if</span> <span class="n">sel</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
594            <span class="n">sv</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">MakeUniqueLabel</span><span class="p">(</span><span class="n">v</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">usedVars</span><span class="p">)</span>
595            <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">sel</span>
596            <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">sv</span>
597            <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
598        <span class="k">else</span><span class="p">:</span>
599            <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SelectG2var</span><span class="p">(</span><span class="n">sel</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">parmLists</span><span class="p">[</span><span class="n">sel</span><span class="p">])</span>
600            <span class="k">if</span> <span class="n">var</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
601                <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
602                <span class="k">return</span>
603            <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">sel</span>
604            <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">var</span>
605        <span class="bp">self</span><span class="o">.</span><span class="n">OnValidate</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
606</div>
607<div class="viewcode-block" id="ExpressionDialog.SelectG2var"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.SelectG2var">[docs]</a>    <span class="k">def</span> <span class="nf">SelectG2var</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">sel</span><span class="p">,</span><span class="n">var</span><span class="p">,</span><span class="n">parmList</span><span class="p">):</span>
608        <span class="sd">&#39;&#39;&#39;Offer a selection of a GSAS-II variable. </span>
609
610<span class="sd">        :param int sel: Determines the type of variable to be selected.</span>
611<span class="sd">          where 1 is used for Phase variables, and 2 for Histogram/Phase vars,</span>
612<span class="sd">          3 for Histogram vars and 4 for Global vars.</span>
613<span class="sd">        :returns: a variable name or None (if Cancel is pressed)</span>
614<span class="sd">        &#39;&#39;&#39;</span>
615        <span class="k">if</span> <span class="ow">not</span> <span class="n">parmList</span><span class="p">:</span>
616            <span class="k">return</span> <span class="bp">None</span>
617        <span class="n">l2</span> <span class="o">=</span> <span class="n">l1</span> <span class="o">=</span> <span class="mi">1</span>
618        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">parmList</span><span class="p">:</span>
619            <span class="n">l1</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">l1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
620            <span class="n">loc</span><span class="p">,</span><span class="n">desc</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">VarDescr</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
621            <span class="n">l2</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">l2</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">loc</span><span class="p">))</span>
622        <span class="n">fmt</span> <span class="o">=</span> <span class="s">u&quot;{:&quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">l1</span><span class="p">)</span><span class="o">+</span><span class="s">&quot;s} {:&quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">l2</span><span class="p">)</span><span class="o">+</span><span class="s">&quot;s} {:s}&quot;</span>
623        <span class="n">varListlbl</span> <span class="o">=</span> <span class="p">[</span><span class="n">fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="o">*</span><span class="n">G2obj</span><span class="o">.</span><span class="n">VarDescr</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">parmList</span><span class="p">]</span>
624
625        <span class="n">dlg</span> <span class="o">=</span> <span class="n">G2gd</span><span class="o">.</span><span class="n">G2SingleChoiceDialog</span><span class="p">(</span>
626            <span class="bp">self</span><span class="p">,</span><span class="s">&#39;Select GSAS-II variable for &#39;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">var</span><span class="p">)</span><span class="o">+</span><span class="s">&#39;:&#39;</span><span class="p">,</span>
627            <span class="s">&#39;Select variable&#39;</span><span class="p">,</span>
628            <span class="n">varListlbl</span><span class="p">,</span><span class="n">monoFont</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
629        <span class="n">dlg</span><span class="o">.</span><span class="n">SetSize</span><span class="p">((</span><span class="mi">625</span><span class="p">,</span><span class="mi">250</span><span class="p">))</span>
630        <span class="n">dlg</span><span class="o">.</span><span class="n">CenterOnParent</span><span class="p">()</span>
631        <span class="n">var</span> <span class="o">=</span> <span class="bp">None</span>
632        <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>
633            <span class="n">i</span> <span class="o">=</span> <span class="n">dlg</span><span class="o">.</span><span class="n">GetSelection</span><span class="p">()</span>
634            <span class="n">var</span> <span class="o">=</span> <span class="n">parmList</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
635        <span class="n">dlg</span><span class="o">.</span><span class="n">Destroy</span><span class="p">()</span>
636        <span class="k">return</span> <span class="n">var</span>
637</div>
638<div class="viewcode-block" id="ExpressionDialog.showError"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.showError">[docs]</a>    <span class="k">def</span> <span class="nf">showError</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">msg1</span><span class="p">,</span><span class="n">msg2</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">msg3</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">):</span>
639        <span class="sd">&#39;&#39;&#39;Show an error message of 1 to 3 sections. The second</span>
640<span class="sd">        section is shown in an equally-spaced font. </span>
641<span class="sd">        </span>
642<span class="sd">        :param str msg1: msg1 is shown in a the standard font</span>
643<span class="sd">        :param str msg2: msg2 is shown in a equally-spaced (wx.MODERN) font</span>
644<span class="sd">        :param str msg3: msg3 is shown in a the standard font</span>
645<span class="sd">        &#39;&#39;&#39;</span>
646        <span class="bp">self</span><span class="o">.</span><span class="n">OKbtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
647        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">ExtraBtn</span><span class="o">.</span><span class="n">Disable</span><span class="p">()</span>
648        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</span><span class="o">.</span><span class="n">Clear</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
649        <span class="bp">self</span><span class="o">.</span><span class="n">errbox</span> <span class="o">=</span> <span class="n">wxscroll</span><span class="o">.</span><span class="n">ScrolledPanel</span><span class="p">(</span><span class="bp">self</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">HSCROLL</span><span class="p">)</span>
650        <span class="bp">self</span><span class="o">.</span><span class="n">errbox</span><span class="o">.</span><span class="n">SetMinSize</span><span class="p">((</span><span class="mi">200</span><span class="p">,</span><span class="mi">130</span><span class="p">))</span>
651        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</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">errbox</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">ALL</span><span class="o">|</span><span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
652        <span class="n">Siz</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>
653        <span class="n">errMsg1</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="o">.</span><span class="n">errbox</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
654        <span class="n">Siz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">errMsg1</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">ALIGN_LEFT</span><span class="o">|</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">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
655        <span class="n">errMsg2</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="o">.</span><span class="n">errbox</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&quot;</span><span class="se">\n\n</span><span class="s">&quot;</span><span class="p">)</span>
656        <span class="n">font1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Font</span><span class="p">(</span><span class="n">errMsg2</span><span class="o">.</span><span class="n">GetFont</span><span class="p">()</span><span class="o">.</span><span class="n">GetPointSize</span><span class="p">(),</span>
657                        <span class="n">wx</span><span class="o">.</span><span class="n">MODERN</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">NORMAL</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">NORMAL</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
658        <span class="n">errMsg2</span><span class="o">.</span><span class="n">SetFont</span><span class="p">(</span><span class="n">font1</span><span class="p">)</span>
659        <span class="n">Siz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">errMsg2</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">ALIGN_LEFT</span><span class="o">|</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">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
660        <span class="n">errMsg3</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="o">.</span><span class="n">errbox</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">)</span>
661        <span class="n">Siz</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">errMsg3</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">ALIGN_LEFT</span><span class="o">|</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">EXPAND</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
662        <span class="bp">self</span><span class="o">.</span><span class="n">errbox</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">Siz</span><span class="p">,</span><span class="bp">True</span><span class="p">)</span>
663        <span class="n">Siz</span><span class="o">.</span><span class="n">Fit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errbox</span><span class="p">)</span>
664        <span class="n">errMsg1</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">msg1</span><span class="p">)</span>
665        <span class="n">errMsg2</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="s">&quot;  &quot;</span><span class="o">+</span><span class="n">msg2</span><span class="p">)</span>
666        <span class="n">errMsg2</span><span class="o">.</span><span class="n">Wrap</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
667        <span class="n">errMsg3</span><span class="o">.</span><span class="n">SetLabel</span><span class="p">(</span><span class="n">msg3</span><span class="p">)</span>
668        <span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
669</div>
670<div class="viewcode-block" id="ExpressionDialog.OnValidate"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.OnValidate">[docs]</a>    <span class="k">def</span> <span class="nf">OnValidate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
671        <span class="sd">&#39;&#39;&#39;Respond to a press of the Validate button or when a variable</span>
672<span class="sd">        is associated with a label (in :meth:`OnChoice`)</span>
673<span class="sd">        &#39;&#39;&#39;</span>
674        <span class="bp">self</span><span class="o">.</span><span class="n">setEvalResult</span><span class="p">(</span><span class="s">&#39;(expression cannot be evaluated)&#39;</span><span class="p">)</span>
675        <span class="bp">self</span><span class="o">.</span><span class="n">timer</span><span class="o">.</span><span class="n">Stop</span><span class="p">()</span>
676        <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">exCtrl</span><span class="o">.</span><span class="n">GetValue</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
677        <span class="bp">self</span><span class="o">.</span><span class="n">varSizer</span><span class="o">.</span><span class="n">Clear</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
678        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">:</span> 
679            <span class="bp">self</span><span class="o">.</span><span class="n">showError</span><span class="p">(</span>
680                <span class="s">&quot;Invalid Expression:&quot;</span><span class="p">,</span><span class="s">&quot;&quot;</span><span class="p">,</span>
681                <span class="s">&quot;(an expression must be entered)&quot;</span><span class="p">)</span>
682            <span class="k">return</span>
683        <span class="n">exprObj</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">ExpressionObj</span><span class="p">()</span>
684        <span class="n">ret</span> <span class="o">=</span> <span class="n">exprObj</span><span class="o">.</span><span class="n">ParseExpression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">)</span>
685        <span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span>
686            <span class="bp">self</span><span class="o">.</span><span class="n">showError</span><span class="p">(</span><span class="o">*</span><span class="n">exprObj</span><span class="o">.</span><span class="n">lastError</span><span class="p">)</span>
687            <span class="k">return</span>
688        <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">,</span><span class="n">pkgdict</span> <span class="o">=</span> <span class="n">ret</span>
689        <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">Repaint</span><span class="p">,</span><span class="n">exprObj</span><span class="p">)</span>
690            </div>
691<div class="viewcode-block" id="ExpressionDialog.Repaint"><a class="viewcode-back" href="../GSASIIGUI.html#GSASIIexprGUI.ExpressionDialog.Repaint">[docs]</a>    <span class="k">def</span> <span class="nf">Repaint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">exprObj</span><span class="p">):</span>
692        <span class="s">&#39;Redisplay the variables and continue the validation&#39;</span>
693        <span class="bp">self</span><span class="o">.</span><span class="n">ShowVars</span><span class="p">()</span> <span class="c"># show widgets to set vars</span>
694        <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">CheckVars</span><span class="p">()</span> 
695        <span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
696            <span class="bp">self</span><span class="o">.</span><span class="n">setEvalResult</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
697            <span class="k">return</span>
698        <span class="n">exprObj</span><span class="o">.</span><span class="n">LoadExpression</span><span class="p">(</span>
699            <span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span>
700            <span class="bp">self</span><span class="o">.</span><span class="n">exprVarLst</span><span class="p">,</span>
701            <span class="bp">self</span><span class="o">.</span><span class="n">varSelect</span><span class="p">,</span>
702            <span class="bp">self</span><span class="o">.</span><span class="n">varName</span><span class="p">,</span>
703            <span class="bp">self</span><span class="o">.</span><span class="n">varValue</span><span class="p">,</span>
704            <span class="bp">self</span><span class="o">.</span><span class="n">varRefflag</span><span class="p">,</span>
705            <span class="p">)</span>
706        <span class="k">try</span><span class="p">:</span>
707            <span class="n">calcobj</span> <span class="o">=</span> <span class="n">G2obj</span><span class="o">.</span><span class="n">ExpressionCalcObj</span><span class="p">(</span><span class="n">exprObj</span><span class="p">)</span>
708            <span class="n">calcobj</span><span class="o">.</span><span class="n">SetupCalc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">parmDict</span><span class="p">)</span>
709            <span class="n">val</span> <span class="o">=</span> <span class="n">calcobj</span><span class="o">.</span><span class="n">EvalExpression</span><span class="p">()</span>
710        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">msg</span><span class="p">:</span>
711            <span class="bp">self</span><span class="o">.</span><span class="n">setEvalResult</span><span class="p">(</span><span class="s">&quot;Error in evaluation: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
712            <span class="k">return</span>
713        <span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
714            <span class="bp">self</span><span class="o">.</span><span class="n">setEvalResult</span><span class="p">(</span><span class="s">&quot;Expression value is infinite or out-of-bounds&quot;</span><span class="p">)</span>
715            <span class="k">return</span>
716        <span class="n">s</span> <span class="o">=</span> <span class="n">G2py3</span><span class="o">.</span><span class="n">FormatSigFigs</span><span class="p">(</span><span class="n">val</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s">&#39;0&#39;</span><span class="p">)</span>
717        <span class="n">depVal</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
718        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="p">:</span>
719            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span><span class="p">:</span>
720                <span class="bp">self</span><span class="o">.</span><span class="n">setEvalResult</span><span class="p">(</span><span class="s">&quot;A dependent variable must be selected.&quot;</span><span class="p">)</span>
721                <span class="k">return</span>
722            <span class="n">depVal</span> <span class="o">=</span> <span class="s">&#39;; Variable &quot;&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">dependentVar</span> <span class="o">+</span> <span class="s">&#39;&quot; = &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span>
723                <span class="bp">self</span><span class="o">.</span><span class="n">depVarDict</span><span class="o">.</span><span class="n">get</span><span