source: sasview/_modules/sas/guiframe/local_perspectives/plotting/AnnulusSlicer.html @ a462c6a

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

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 91.2 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.guiframe.local_perspectives.plotting.AnnulusSlicer &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../../../index.html" />
28    <link rel="up" title="sas.guiframe" href="../../../guiframe.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../../../index.html" >Module code</a> &raquo;</li>
42          <li><a href="../../../guiframe.html" accesskey="U">sas.guiframe</a> &raquo;</li> 
43      </ul>
44    </div> 
45
46    <div class="document">
47      <div class="documentwrapper">
48        <div class="bodywrapper">
49          <div class="body">
50           
51  <h1>Source code for sas.guiframe.local_perspectives.plotting.AnnulusSlicer</h1><div class="highlight"><pre>
52<span class="c">#TODO: the line slicer should listen to all 2DREFRESH events, get the data and slice it</span>
53<span class="c">#      before pushing a new 1D data update.</span>
54
55<span class="c">#</span>
56<span class="c">#TODO: NEED MAJOR REFACTOR</span>
57<span class="c">#</span>
58
59<span class="kn">import</span> <span class="nn">math</span>
60<span class="kn">import</span> <span class="nn">wx</span>
61<span class="c">#from copy import deepcopy </span>
62<span class="c"># Debug printout</span>
63<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">NewPlotEvent</span>
64<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">StatusEvent</span>
65<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">SlicerParameterEvent</span>
66<span class="kn">from</span> <span class="nn">sas.guiframe.events</span> <span class="kn">import</span> <span class="n">EVT_SLICER_PARS</span>
67<span class="kn">from</span> <span class="nn">BaseInteractor</span> <span class="kn">import</span> <span class="n">_BaseInteractor</span>
68<span class="kn">from</span> <span class="nn">sas.guiframe.dataFitting</span> <span class="kn">import</span> <span class="n">Data1D</span>
69
70<div class="viewcode-block" id="AnnulusInteractor"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor">[docs]</a><span class="k">class</span> <span class="nc">AnnulusInteractor</span><span class="p">(</span><span class="n">_BaseInteractor</span><span class="p">):</span>
71    <span class="sd">&quot;&quot;&quot;</span>
72<span class="sd">    Select an annulus through a 2D plot.</span>
73<span class="sd">    This interactor is used to average 2D data  with the region </span>
74<span class="sd">    defined by 2 radius.</span>
75<span class="sd">    this class is defined by 2 Ringinterators.</span>
76<span class="sd">    &quot;&quot;&quot;</span>
77    <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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">&#39;black&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
78       
79        <span class="n">_BaseInteractor</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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
80        <span class="bp">self</span><span class="o">.</span><span class="n">markers</span> <span class="o">=</span> <span class="p">[]</span>
81        <span class="bp">self</span><span class="o">.</span><span class="n">axes</span> <span class="o">=</span> <span class="n">axes</span>
82        <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
83        <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">xmax</span><span class="p">),</span>
84                        <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">xmin</span><span class="p">))</span>  <span class="c">#must be positive</span>
85        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">connect</span>
86   
87        <span class="c">## Number of points on the plot</span>
88        <span class="bp">self</span><span class="o">.</span><span class="n">nbins</span> <span class="o">=</span> <span class="mi">20</span>
89        <span class="c">#Cursor position of Rings (Left(-1) or Right(1))</span>
90        <span class="bp">self</span><span class="o">.</span><span class="n">xmaxd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">xmax</span>
91        <span class="bp">self</span><span class="o">.</span><span class="n">xmind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">xmin</span>
92
93        <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xmaxd</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xmind</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
94            <span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">=</span> <span class="mi">1</span>
95        <span class="k">else</span><span class="p">:</span>
96            <span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
97        <span class="c"># Inner circle</span>
98        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span> <span class="o">=</span> <span class="n">RingInteractor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">subplot</span><span class="p">,</span>
99                                            <span class="n">zorder</span><span class="o">=</span><span class="n">zorder</span><span class="p">,</span>
100                                            <span class="n">r</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="o">/</span><span class="mf">2.0</span><span class="p">,</span> <span class="n">sign</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span><span class="p">)</span>
101        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>
102        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span> <span class="o">=</span> <span class="n">RingInteractor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">subplot</span><span class="p">,</span>
103                                           <span class="n">zorder</span><span class="o">=</span><span class="n">zorder</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">r</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="o">/</span><span class="mf">1.8</span><span class="p">,</span>
104                                           <span class="n">sign</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span><span class="p">)</span>
105        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">*</span> <span class="mf">1.2</span>
106        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
107        <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">()</span>
108       
109        <span class="c"># Bind to slice parameter events</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">EVT_SLICER_PARS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_onEVT_SLICER_PARS</span><span class="p">)</span>
111       
112    <span class="k">def</span> <span class="nf">_onEVT_SLICER_PARS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
113        <span class="sd">&quot;&quot;&quot;</span>
114<span class="sd">        receive an event containing parameters values to reset the slicer</span>
115<span class="sd">        </span>
116<span class="sd">        :param event: event of type SlicerParameterEvent with params as </span>
117<span class="sd">            attribute</span>
118<span class="sd">            </span>
119<span class="sd">        &quot;&quot;&quot;</span>
120        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
121                     <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&quot;AnnulusSlicer._onEVT_SLICER_PARS&quot;</span><span class="p">))</span>
122        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
123        <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">:</span>
124            <span class="bp">self</span><span class="o">.</span><span class="n">set_params</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
125            <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
126
127<div class="viewcode-block" id="AnnulusInteractor.set_layer"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.set_layer">[docs]</a>    <span class="k">def</span> <span class="nf">set_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
128        <span class="sd">&quot;&quot;&quot;</span>
129<span class="sd">        Allow adding plot to the same panel</span>
130<span class="sd">        </span>
131<span class="sd">        :param n: the number of layer</span>
132<span class="sd">        </span>
133<span class="sd">        &quot;&quot;&quot;</span>
134        <span class="bp">self</span><span class="o">.</span><span class="n">layernum</span> <span class="o">=</span> <span class="n">n</span>
135        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
136        </div>
137<div class="viewcode-block" id="AnnulusInteractor.clear"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.clear">[docs]</a>    <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
138        <span class="sd">&quot;&quot;&quot;</span>
139<span class="sd">        Clear the slicer and all connected events related to this slicer</span>
140<span class="sd">        &quot;&quot;&quot;</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">clear_markers</span><span class="p">()</span>
142        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
143        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
144        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">connect</span><span class="o">.</span><span class="n">clearall</span><span class="p">()</span>
145        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">Unbind</span><span class="p">(</span><span class="n">EVT_SLICER_PARS</span><span class="p">)</span>
146        </div>
147<div class="viewcode-block" id="AnnulusInteractor.update"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.update">[docs]</a>    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
148        <span class="sd">&quot;&quot;&quot;</span>
149<span class="sd">        Respond to changes in the model by recalculating the profiles and</span>
150<span class="sd">        resetting the widgets.</span>
151<span class="sd">        &quot;&quot;&quot;</span>
152        <span class="c"># Update locations        </span>
153        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
154        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
155        </div>
156<div class="viewcode-block" id="AnnulusInteractor.save"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
157        <span class="sd">&quot;&quot;&quot;</span>
158<span class="sd">        Remember the roughness for this layer and the next so that we</span>
159<span class="sd">        can restore on Esc.</span>
160<span class="sd">        &quot;&quot;&quot;</span>
161        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">freeze_axes</span><span class="p">()</span>
162        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
163        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
164</div>
165    <span class="k">def</span> <span class="nf">_post_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nbins</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
166        <span class="sd">&quot;&quot;&quot;</span>
167<span class="sd">        Uses annulus parameters to plot averaged data into 1D data.</span>
168<span class="sd">        </span>
169<span class="sd">        :param nbins: the number of points to plot </span>
170<span class="sd">        </span>
171<span class="sd">        &quot;&quot;&quot;</span>
172        <span class="c">#Data to average</span>
173        <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span>
174        <span class="c"># If we have no data, just return</span>
175        <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
176            <span class="k">return</span>
177       
178        <span class="kn">from</span> <span class="nn">sas.dataloader.manipulations</span> <span class="kn">import</span> <span class="n">Ring</span>
179        <span class="n">rmin</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">get_radius</span><span class="p">()),</span>
180                  <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">get_radius</span><span class="p">()))</span>
181        <span class="n">rmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">get_radius</span><span class="p">()),</span>
182                   <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">get_radius</span><span class="p">()))</span>
183        <span class="c">#if the user does not specify the numbers of points to plot </span>
184        <span class="c"># the default number will be nbins= 20</span>
185        <span class="k">if</span> <span class="n">nbins</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
186            <span class="bp">self</span><span class="o">.</span><span class="n">nbins</span> <span class="o">=</span> <span class="mi">20</span>
187        <span class="k">else</span><span class="p">:</span>
188            <span class="bp">self</span><span class="o">.</span><span class="n">nbins</span> <span class="o">=</span> <span class="n">nbins</span>
189        <span class="c">## create the data1D Q average of data2D    </span>
190        <span class="n">sect</span> <span class="o">=</span> <span class="n">Ring</span><span class="p">(</span><span class="n">r_min</span><span class="o">=</span><span class="n">rmin</span><span class="p">,</span> <span class="n">r_max</span><span class="o">=</span><span class="n">rmax</span><span class="p">,</span> <span class="n">nbins</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">nbins</span><span class="p">)</span>
191        <span class="n">sector</span> <span class="o">=</span> <span class="n">sect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="p">)</span>
192   
193        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sector</span><span class="p">,</span> <span class="s">&quot;dxl&quot;</span><span class="p">):</span>
194            <span class="n">dxl</span> <span class="o">=</span> <span class="n">sector</span><span class="o">.</span><span class="n">dxl</span>
195        <span class="k">else</span><span class="p">:</span>
196            <span class="n">dxl</span> <span class="o">=</span> <span class="bp">None</span>
197        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sector</span><span class="p">,</span> <span class="s">&quot;dxw&quot;</span><span class="p">):</span>
198            <span class="n">dxw</span> <span class="o">=</span> <span class="n">sector</span><span class="o">.</span><span class="n">dxw</span>
199        <span class="k">else</span><span class="p">:</span>
200            <span class="n">dxw</span> <span class="o">=</span> <span class="bp">None</span>
201        <span class="n">new_plot</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">(</span><span class="n">sector</span><span class="o">.</span><span class="n">x</span> <span class="o">-</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span> <span class="o">*</span> <span class="mi">180</span><span class="o">/</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span>
202                          <span class="n">y</span><span class="o">=</span><span class="n">sector</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="n">dy</span><span class="o">=</span><span class="n">sector</span><span class="o">.</span><span class="n">dy</span><span class="p">)</span>
203        <span class="n">new_plot</span><span class="o">.</span><span class="n">dxl</span> <span class="o">=</span> <span class="n">dxl</span>
204        <span class="n">new_plot</span><span class="o">.</span><span class="n">dxw</span> <span class="o">=</span> <span class="n">dxw</span>
205        <span class="n">new_plot</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;AnnulusPhi&quot;</span> <span class="o">+</span><span class="s">&quot;(&quot;</span><span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">name</span><span class="o">+</span><span class="s">&quot;)&quot;</span>
206       
207        <span class="n">new_plot</span><span class="o">.</span><span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">source</span>
208        <span class="c">#new_plot.info=self.base.data2D.info</span>
209        <span class="n">new_plot</span><span class="o">.</span><span class="n">interactive</span> <span class="o">=</span> <span class="bp">True</span>
210        <span class="n">new_plot</span><span class="o">.</span><span class="n">detector</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">detector</span>
211        <span class="c"># If the data file does not tell us what the axes are, just assume...</span>
212        <span class="n">new_plot</span><span class="o">.</span><span class="n">xaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{\phi}&quot;</span><span class="p">,</span> <span class="s">&#39;degrees&#39;</span><span class="p">)</span>
213        <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Intensity} &quot;</span><span class="p">,</span> <span class="s">&quot;cm^{-1}&quot;</span><span class="p">)</span>
214        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="s">&quot;scale&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">data</span><span class="o">.</span><span class="n">scale</span> <span class="o">==</span> <span class="s">&#39;linear&#39;</span> <span class="ow">and</span> \
215                <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s">&quot;Residuals&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
216            <span class="n">new_plot</span><span class="o">.</span><span class="n">ytransform</span> <span class="o">=</span> <span class="s">&#39;y&#39;</span>
217            <span class="n">new_plot</span><span class="o">.</span><span class="n">yaxis</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">rm{Residuals} &quot;</span><span class="p">,</span> <span class="s">&quot;/&quot;</span><span class="p">)</span>
218
219        <span class="n">new_plot</span><span class="o">.</span><span class="n">group_id</span> <span class="o">=</span> <span class="s">&quot;AnnulusPhi&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">name</span>
220        <span class="n">new_plot</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="s">&quot;AnnulusPhi&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data2D</span><span class="o">.</span><span class="n">name</span>
221        <span class="n">new_plot</span><span class="o">.</span><span class="n">is_data</span><span class="o">=</span> <span class="bp">True</span>
222        <span class="n">new_plot</span><span class="o">.</span><span class="n">xtransform</span> <span class="o">=</span> <span class="s">&quot;x&quot;</span>
223        <span class="n">new_plot</span><span class="o">.</span><span class="n">ytransform</span> <span class="o">=</span> <span class="s">&quot;y&quot;</span>
224        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">update_theory</span><span class="p">(</span><span class="n">data_id</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">theory</span><span class="o">=</span><span class="n">new_plot</span><span class="p">)</span>
225        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">NewPlotEvent</span><span class="p">(</span><span class="n">plot</span><span class="o">=</span><span class="n">new_plot</span><span class="p">,</span>
226                                                 <span class="n">title</span><span class="o">=</span><span class="s">&quot;AnnulusPhi&quot;</span><span class="p">))</span>
227       
228<div class="viewcode-block" id="AnnulusInteractor.moveend"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.moveend">[docs]</a>    <span class="k">def</span> <span class="nf">moveend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
229        <span class="sd">&quot;&quot;&quot;</span>
230<span class="sd">        Called when any dragging motion ends.</span>
231<span class="sd">        Post an event (type =SlicerParameterEvent)</span>
232<span class="sd">        to plotter 2D with a copy  slicer parameters</span>
233<span class="sd">        Call  _post_data method</span>
234<span class="sd">        &quot;&quot;&quot;</span>
235        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">thaw_axes</span><span class="p">()</span>
236        <span class="c"># Post parameters to plotter 2D</span>
237        <span class="n">event</span> <span class="o">=</span> <span class="n">SlicerParameterEvent</span><span class="p">()</span>
238        <span class="n">event</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span>
239        <span class="n">event</span><span class="o">.</span><span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_params</span><span class="p">()</span>
240        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="p">,</span> <span class="n">event</span><span class="p">)</span>
241        <span class="c"># create a 1D data plot</span>
242        <span class="c">#self._post_data()</span>
243            </div>
244<div class="viewcode-block" id="AnnulusInteractor.restore"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.restore">[docs]</a>    <span class="k">def</span> <span class="nf">restore</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
245        <span class="sd">&quot;&quot;&quot;</span>
246<span class="sd">        Restore the roughness for this layer.</span>
247<span class="sd">        &quot;&quot;&quot;</span>
248        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">restore</span><span class="p">()</span>
249        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">restore</span><span class="p">()</span>
250</div>
251<div class="viewcode-block" id="AnnulusInteractor.move"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.move">[docs]</a>    <span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
252        <span class="sd">&quot;&quot;&quot;</span>
253<span class="sd">        Process move to a new position, making sure that the move is allowed.</span>
254<span class="sd">        &quot;&quot;&quot;</span>
255        <span class="k">pass</span>
256        </div>
257<div class="viewcode-block" id="AnnulusInteractor.set_cursor"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.set_cursor">[docs]</a>    <span class="k">def</span> <span class="nf">set_cursor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
258        <span class="k">pass</span>
259        </div>
260<div class="viewcode-block" id="AnnulusInteractor.get_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.get_params">[docs]</a>    <span class="k">def</span> <span class="nf">get_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
261        <span class="sd">&quot;&quot;&quot;</span>
262<span class="sd">        Store a copy of values of parameters of the slicer into a dictionary.</span>
263<span class="sd">        </span>
264<span class="sd">        :return params: the dictionary created</span>
265<span class="sd">        </span>
266<span class="sd">        &quot;&quot;&quot;</span>
267        <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
268        <span class="n">params</span><span class="p">[</span><span class="s">&quot;inner_radius&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)</span>
269        <span class="n">params</span><span class="p">[</span><span class="s">&quot;outer_radius&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)</span>
270        <span class="n">params</span><span class="p">[</span><span class="s">&quot;nbins&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nbins</span>
271        <span class="k">return</span> <span class="n">params</span>
272    </div>
273<div class="viewcode-block" id="AnnulusInteractor.set_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.set_params">[docs]</a>    <span class="k">def</span> <span class="nf">set_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
274        <span class="sd">&quot;&quot;&quot;</span>
275<span class="sd">        Receive a dictionary and reset the slicer with values contained </span>
276<span class="sd">        in the values of the dictionary.</span>
277<span class="sd">        </span>
278<span class="sd">        :param params: a dictionary containing name of slicer parameters and </span>
279<span class="sd">            values the user assigned to the slicer.</span>
280<span class="sd">            </span>
281<span class="sd">        &quot;&quot;&quot;</span>
282        <span class="n">inner</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s">&quot;inner_radius&quot;</span><span class="p">])</span>
283        <span class="n">outer</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s">&quot;outer_radius&quot;</span><span class="p">])</span>
284        <span class="bp">self</span><span class="o">.</span><span class="n">nbins</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s">&quot;nbins&quot;</span><span class="p">])</span>
285        <span class="c">## Update the picture</span>
286        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">set_cursor</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">_inner_mouse_y</span><span class="p">)</span>
287        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">set_cursor</span><span class="p">(</span><span class="n">outer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">_inner_mouse_y</span><span class="p">)</span>
288        <span class="c">## Post the data given the nbins entered by the user </span>
289        <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nbins</span><span class="p">)</span>
290        </div>
291<div class="viewcode-block" id="AnnulusInteractor.freeze_axes"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.freeze_axes">[docs]</a>    <span class="k">def</span> <span class="nf">freeze_axes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
292        <span class="sd">&quot;&quot;&quot;</span>
293<span class="sd">        &quot;&quot;&quot;</span>
294        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">freeze_axes</span><span class="p">()</span>
295        </div>
296<div class="viewcode-block" id="AnnulusInteractor.thaw_axes"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.thaw_axes">[docs]</a>    <span class="k">def</span> <span class="nf">thaw_axes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
297        <span class="sd">&quot;&quot;&quot;</span>
298<span class="sd">        &quot;&quot;&quot;</span>
299        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">thaw_axes</span><span class="p">()</span>
300</div>
301<div class="viewcode-block" id="AnnulusInteractor.draw"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.AnnulusInteractor.draw">[docs]</a>    <span class="k">def</span> <span class="nf">draw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
302        <span class="sd">&quot;&quot;&quot;</span>
303<span class="sd">        &quot;&quot;&quot;</span>
304        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
305
306        </div></div>
307<div class="viewcode-block" id="RingInteractor"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor">[docs]</a><span class="k">class</span> <span class="nc">RingInteractor</span><span class="p">(</span><span class="n">_BaseInteractor</span><span class="p">):</span>
308    <span class="sd">&quot;&quot;&quot;</span>
309<span class="sd">     Draw a ring Given a radius </span>
310<span class="sd">    &quot;&quot;&quot;</span>
311    <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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">&#39;black&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">r</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">sign</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
312        <span class="sd">&quot;&quot;&quot;</span>
313<span class="sd">        :param: the color of the line that defined the ring</span>
314<span class="sd">        :param r: the radius of the ring</span>
315<span class="sd">        :param sign: the direction of motion the the marker </span>
316<span class="sd">        </span>
317<span class="sd">        &quot;&quot;&quot;</span>
318        <span class="n">_BaseInteractor</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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
319        <span class="bp">self</span><span class="o">.</span><span class="n">markers</span> <span class="o">=</span> <span class="p">[]</span>
320        <span class="bp">self</span><span class="o">.</span><span class="n">axes</span> <span class="o">=</span> <span class="n">axes</span>
321        <span class="c"># Current radius of the ring</span>
322        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span> <span class="o">=</span> <span class="n">r</span>
323        <span class="c">#Value of the center of the ring</span>
324        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_y</span> <span class="o">=</span> <span class="mi">0</span>
325        <span class="c"># previous value of that radius</span>
326        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_x</span>  <span class="o">=</span> <span class="n">r</span>
327        <span class="c">#Save value of the center of the ring</span>
328        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_y</span>  <span class="o">=</span> <span class="mi">0</span>
329        <span class="c">#Class instantiating RingIterator class</span>
330        <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
331        <span class="c">#the direction of the motion of the marker</span>
332        <span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">=</span> <span class="n">sign</span>
333        <span class="c">## Create a marker </span>
334        <span class="k">try</span><span class="p">:</span>
335            <span class="c"># Inner circle marker</span>
336            <span class="n">x_value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)]</span>
337            <span class="bp">self</span><span class="o">.</span><span class="n">inner_marker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_value</span><span class="p">,</span>
338                                               <span class="p">[</span><span class="mi">0</span><span class="p">],</span>
339                                                <span class="n">linestyle</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span>
340                                          <span class="n">marker</span><span class="o">=</span><span class="s">&#39;s&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
341                                          <span class="n">color</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
342                                          <span class="n">pickradius</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s">&quot;pick&quot;</span><span class="p">,</span> 
343                                          <span class="n">zorder</span><span class="o">=</span><span class="n">zorder</span><span class="p">,</span>
344                                          <span class="n">visible</span><span class="o">=</span><span class="bp">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
345        <span class="k">except</span><span class="p">:</span>
346            <span class="n">x_value</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)]</span>
347            <span class="bp">self</span><span class="o">.</span><span class="n">inner_marker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x_value</span><span class="p">,</span>
348                                               <span class="p">[</span><span class="mi">0</span><span class="p">],</span> 
349                                               <span class="n">linestyle</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span>
350                                          <span class="n">marker</span><span class="o">=</span><span class="s">&#39;s&#39;</span><span class="p">,</span> <span class="n">markersize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
351                                          <span class="n">color</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
352                                          <span class="n">label</span><span class="o">=</span><span class="s">&quot;pick&quot;</span><span class="p">,</span> 
353                                          <span class="n">visible</span><span class="o">=</span><span class="bp">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
354            <span class="n">message</span>  <span class="o">=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">THIS PROTOTYPE NEEDS THE LATEST&quot;</span>
355            <span class="n">message</span> <span class="o">+=</span> <span class="s">&quot; VERSION OF MATPLOTLIB</span><span class="se">\n</span><span class="s">&quot;</span>
356            <span class="n">message</span> <span class="o">+=</span> <span class="s">&quot;Get the SVN version that is at &quot;</span>
357            <span class="n">message</span> <span class="o">+=</span> <span class="s">&quot; least as recent as June 1, 2007&quot;</span>
358           
359            <span class="n">owner</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">parent</span>
360            <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="n">owner</span><span class="p">,</span> 
361                         <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&quot;AnnulusSlicer: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">message</span><span class="p">))</span>
362           
363        <span class="c"># Draw a circle </span>
364        <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">plot</span><span class="p">([],</span> <span class="p">[],</span>
365                                      <span class="n">linestyle</span><span class="o">=</span><span class="s">&#39;-&#39;</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span>
366                                      <span class="n">color</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
367        <span class="c"># the number of points that make the ring line</span>
368        <span class="bp">self</span><span class="o">.</span><span class="n">npts</span> <span class="o">=</span> <span class="mi">40</span>
369           
370        <span class="bp">self</span><span class="o">.</span><span class="n">connect_markers</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">inner_marker</span><span class="p">])</span>
371        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
372
373<div class="viewcode-block" id="RingInteractor.set_layer"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.set_layer">[docs]</a>    <span class="k">def</span> <span class="nf">set_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
374        <span class="sd">&quot;&quot;&quot;</span>
375<span class="sd">        Allow adding plot to the same panel</span>
376<span class="sd">         </span>
377<span class="sd">        :param n: the number of layer</span>
378<span class="sd">        </span>
379<span class="sd">        &quot;&quot;&quot;</span>
380        <span class="bp">self</span><span class="o">.</span><span class="n">layernum</span> <span class="o">=</span> <span class="n">n</span>
381        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
382        </div>
383<div class="viewcode-block" id="RingInteractor.clear"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.clear">[docs]</a>    <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
384        <span class="sd">&quot;&quot;&quot;</span>
385<span class="sd">        Clear the slicer and all connected events related to this slicer</span>
386<span class="sd">        &quot;&quot;&quot;</span>
387        <span class="bp">self</span><span class="o">.</span><span class="n">clear_markers</span><span class="p">()</span>
388        <span class="k">try</span><span class="p">:</span>
389            <span class="bp">self</span><span class="o">.</span><span class="n">inner_marker</span><span class="o">.</span><span class="n">remove</span><span class="p">()</span>
390            <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">remove</span><span class="p">()</span>
391        <span class="k">except</span><span class="p">:</span>
392            <span class="c"># Old version of matplotlib</span>
393            <span class="k">for</span> <span class="n">item</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="bp">self</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">lines</span><span class="p">)):</span>
394                <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
395        </div>
396<div class="viewcode-block" id="RingInteractor.get_radius"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.get_radius">[docs]</a>    <span class="k">def</span> <span class="nf">get_radius</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
397        <span class="sd">&quot;&quot;&quot;</span>
398<span class="sd">        :return self._inner_mouse_x: the current radius of the ring</span>
399<span class="sd">        &quot;&quot;&quot;</span>
400        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span>
401        </div>
402<div class="viewcode-block" id="RingInteractor.update"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.update">[docs]</a>    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
403        <span class="sd">&quot;&quot;&quot;</span>
404<span class="sd">        Draw the new roughness on the graph.</span>
405<span class="sd">        &quot;&quot;&quot;</span>
406        <span class="c"># Plot inner circle</span>
407        <span class="n">x</span> <span class="o">=</span> <span class="p">[]</span>
408        <span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
409        <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="bp">self</span><span class="o">.</span><span class="n">npts</span><span class="p">):</span>
410            <span class="n">phi</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">npts</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">i</span>
411           
412            <span class="n">xval</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> 
413            <span class="n">yval</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> 
414           
415            <span class="n">x</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xval</span><span class="p">)</span>
416            <span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">yval</span><span class="p">)</span>
417           
418        <span class="bp">self</span><span class="o">.</span><span class="n">inner_marker</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">xdata</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)],</span>
419                              <span class="n">ydata</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
420        <span class="bp">self</span><span class="o">.</span><span class="n">inner_circle</span><span class="o">.</span><span class="n">set_data</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>       
421</div>
422<div class="viewcode-block" id="RingInteractor.save"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
423        <span class="sd">&quot;&quot;&quot;</span>
424<span class="sd">        Remember the roughness for this layer and the next so that we</span>
425<span class="sd">        can restore on Esc.</span>
426<span class="sd">        &quot;&quot;&quot;</span>
427        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span>
428        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_y</span>
429        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">freeze_axes</span><span class="p">()</span>
430</div>
431<div class="viewcode-block" id="RingInteractor.moveend"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.moveend">[docs]</a>    <span class="k">def</span> <span class="nf">moveend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
432        <span class="sd">&quot;&quot;&quot;</span>
433<span class="sd">        Called after a dragging motion</span>
434<span class="sd">        &quot;&quot;&quot;</span>
435        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">moveend</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
436            </div>
437<div class="viewcode-block" id="RingInteractor.restore"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.restore">[docs]</a>    <span class="k">def</span> <span class="nf">restore</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
438        <span class="sd">&quot;&quot;&quot;</span>
439<span class="sd">        Restore the roughness for this layer.</span>
440<span class="sd">        &quot;&quot;&quot;</span>
441        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_x</span>
442        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_save_y</span>
443</div>
444<div class="viewcode-block" id="RingInteractor.move"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.move">[docs]</a>    <span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
445        <span class="sd">&quot;&quot;&quot;</span>
446<span class="sd">        Process move to a new position, making sure that the move is allowed.</span>
447<span class="sd">        &quot;&quot;&quot;</span>
448        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span> <span class="o">=</span> <span class="n">x</span>
449        <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_y</span> <span class="o">=</span> <span class="n">y</span>
450        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
451        </div>
452<div class="viewcode-block" id="RingInteractor.set_cursor"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.set_cursor">[docs]</a>    <span class="k">def</span> <span class="nf">set_cursor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
453        <span class="sd">&quot;&quot;&quot;</span>
454<span class="sd">        draw the ring given x, y value </span>
455<span class="sd">        &quot;&quot;&quot;</span>
456        <span class="bp">self</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
457        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
458       
459        </div>
460<div class="viewcode-block" id="RingInteractor.get_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.get_params">[docs]</a>    <span class="k">def</span> <span class="nf">get_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
461        <span class="sd">&quot;&quot;&quot;</span>
462<span class="sd">        Store a copy of values of parameters of the slicer into a dictionary.</span>
463<span class="sd">        </span>
464<span class="sd">        :return params: the dictionary created</span>
465<span class="sd">        </span>
466<span class="sd">        &quot;&quot;&quot;</span>
467        <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
468        <span class="n">params</span><span class="p">[</span><span class="s">&quot;radius&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)</span>
469        <span class="k">return</span> <span class="n">params</span>
470    </div>
471<div class="viewcode-block" id="RingInteractor.set_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.RingInteractor.set_params">[docs]</a>    <span class="k">def</span> <span class="nf">set_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
472        <span class="sd">&quot;&quot;&quot;</span>
473<span class="sd">        Receive a dictionary and reset the slicer with values contained </span>
474<span class="sd">        in the values of the dictionary.</span>
475<span class="sd">        </span>
476<span class="sd">        :param params: a dictionary containing name of slicer parameters and </span>
477<span class="sd">            values the user assigned to the slicer.</span>
478<span class="sd">            </span>
479<span class="sd">        &quot;&quot;&quot;</span>
480        <span class="n">x</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="s">&quot;radius&quot;</span><span class="p">]</span> 
481        <span class="bp">self</span><span class="o">.</span><span class="n">set_cursor</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inner_mouse_y</span><span class="p">)</span>
482        </div></div>
483<div class="viewcode-block" id="CircularMask"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask">[docs]</a><span class="k">class</span> <span class="nc">CircularMask</span><span class="p">(</span><span class="n">_BaseInteractor</span><span class="p">):</span>
484    <span class="sd">&quot;&quot;&quot;</span>
485<span class="sd">     Draw a ring Given a radius </span>
486<span class="sd">    &quot;&quot;&quot;</span>
487    <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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">&#39;grey&#39;</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
488        <span class="sd">&quot;&quot;&quot;</span>
489<span class="sd">        </span>
490<span class="sd">        :param: the color of the line that defined the ring</span>
491<span class="sd">        :param r: the radius of the ring</span>
492<span class="sd">        :param sign: the direction of motion the the marker </span>
493<span class="sd">        </span>
494<span class="sd">        &quot;&quot;&quot;</span>
495        <span class="n">_BaseInteractor</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">base</span><span class="p">,</span> <span class="n">axes</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">)</span>
496        <span class="bp">self</span><span class="o">.</span><span class="n">markers</span> <span class="o">=</span> <span class="p">[]</span>
497        <span class="bp">self</span><span class="o">.</span><span class="n">axes</span> <span class="o">=</span> <span class="n">axes</span>
498        <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base</span>
499        <span class="bp">self</span><span class="o">.</span><span class="n">is_inside</span> <span class="o">=</span> <span class="n">side</span>
500        <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">xmax</span><span class="p">),</span>
501                        <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">xmin</span><span class="p">))</span>  <span class="c">#must be positive</span>
502        <span class="bp">self</span><span class="o">.</span><span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">connect</span>
503       
504        <span class="c">#Cursor position of Rings (Left(-1) or Right(1))</span>
505        <span class="bp">self</span><span class="o">.</span><span class="n">xmaxd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">xmax</span>
506        <span class="bp">self</span><span class="o">.</span><span class="n">xmind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">xmin</span>
507
508        <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xmaxd</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xmind</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
509            <span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">=</span> <span class="mi">1</span>
510        <span class="k">else</span><span class="p">:</span>
511            <span class="bp">self</span><span class="o">.</span><span class="n">sign</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
512        <span class="c"># Inner circle</span>
513        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span> <span class="o">=</span> <span class="n">RingInteractor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">subplot</span><span class="p">,</span> <span class="s">&#39;blue&#39;</span><span class="p">,</span>
514                                            <span class="n">zorder</span><span class="o">=</span><span class="n">zorder</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">r</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="o">/</span><span class="mf">1.8</span><span class="p">,</span>
515                                            <span class="n">sign</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sign</span><span class="p">)</span>
516        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">qmax</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span> <span class="o">*</span> <span class="mf">1.2</span>
517        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
518        <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">()</span>
519       
520        <span class="c"># Bind to slice parameter events</span>
521        <span class="c">#self.base.Bind(EVT_SLICER_PARS, self._onEVT_SLICER_PARS)</span>
522       
523    <span class="k">def</span> <span class="nf">_onEVT_SLICER_PARS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
524        <span class="sd">&quot;&quot;&quot;</span>
525<span class="sd">        receive an event containing parameters values to reset the slicer</span>
526<span class="sd">        </span>
527<span class="sd">        :param event: event of type SlicerParameterEvent with params as </span>
528<span class="sd">            attribute</span>
529<span class="sd">        &quot;&quot;&quot;</span>
530        <span class="n">wx</span><span class="o">.</span><span class="n">PostEvent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
531                     <span class="n">StatusEvent</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s">&quot;AnnulusSlicer._onEVT_SLICER_PARS&quot;</span><span class="p">))</span>
532        <span class="n">event</span><span class="o">.</span><span class="n">Skip</span><span class="p">()</span>
533        <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">:</span>
534            <span class="bp">self</span><span class="o">.</span><span class="n">set_params</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">params</span><span class="p">)</span>
535            <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
536
537<div class="viewcode-block" id="CircularMask.set_layer"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.set_layer">[docs]</a>    <span class="k">def</span> <span class="nf">set_layer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
538        <span class="sd">&quot;&quot;&quot;</span>
539<span class="sd">        Allow adding plot to the same panel</span>
540<span class="sd">         </span>
541<span class="sd">        :param n: the number of layer</span>
542<span class="sd">        </span>
543<span class="sd">        &quot;&quot;&quot;</span>
544        <span class="bp">self</span><span class="o">.</span><span class="n">layernum</span> <span class="o">=</span> <span class="n">n</span>
545        <span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
546        </div>
547<div class="viewcode-block" id="CircularMask.clear"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.clear">[docs]</a>    <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
548        <span class="sd">&quot;&quot;&quot;</span>
549<span class="sd">        Clear the slicer and all connected events related to this slicer</span>
550<span class="sd">        &quot;&quot;&quot;</span>
551        <span class="bp">self</span><span class="o">.</span><span class="n">clear_markers</span><span class="p">()</span>
552        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
553        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">connect</span><span class="o">.</span><span class="n">clearall</span><span class="p">()</span>
554        <span class="c">#self.base.Unbind(EVT_SLICER_PARS)</span>
555        </div>
556<div class="viewcode-block" id="CircularMask.update"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.update">[docs]</a>    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
557        <span class="sd">&quot;&quot;&quot;</span>
558<span class="sd">        Respond to changes in the model by recalculating the profiles and</span>
559<span class="sd">        resetting the widgets.</span>
560<span class="sd">        &quot;&quot;&quot;</span>
561        <span class="c"># Update locations        </span>
562        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
563        <span class="c">#if self.is_inside != None:</span>
564        <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">()</span>
565        <span class="k">return</span> <span class="n">out</span>
566</div>
567<div class="viewcode-block" id="CircularMask.save"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
568        <span class="sd">&quot;&quot;&quot;</span>
569<span class="sd">        Remember the roughness for this layer and the next so that we</span>
570<span class="sd">        can restore on Esc.</span>
571<span class="sd">        &quot;&quot;&quot;</span>
572        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">freeze_axes</span><span class="p">()</span>
573        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
574</div>
575    <span class="k">def</span> <span class="nf">_post_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
576        <span class="sd">&quot;&quot;&quot;</span>
577<span class="sd">        Uses annulus parameters to plot averaged data into 1D data.</span>
578<span class="sd">        </span>
579<span class="sd">        :param nbins: the number of points to plot </span>
580<span class="sd">        </span>
581<span class="sd">        &quot;&quot;&quot;</span>
582        <span class="c">#Data to average</span>
583        <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">data</span>
584             
585        <span class="c"># If we have no data, just return</span>
586        <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
587            <span class="k">return</span>
588        <span class="n">mask</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">mask</span> 
589        <span class="kn">from</span> <span class="nn">sas.dataloader.manipulations</span> <span class="kn">import</span> <span class="n">Ringcut</span>
590   
591        <span class="n">rmin</span> <span class="o">=</span> <span class="mi">0</span>
592        <span class="n">rmax</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">get_radius</span><span class="p">())</span>
593
594        <span class="c">## create the data1D Q average of data2D    </span>
595        <span class="n">mask</span> <span class="o">=</span> <span class="n">Ringcut</span><span class="p">(</span><span class="n">r_min</span><span class="o">=</span><span class="n">rmin</span><span class="p">,</span> <span class="n">r_max</span><span class="o">=</span> <span class="n">rmax</span><span class="p">)</span>
596
597        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_inside</span><span class="p">:</span>
598            <span class="n">out</span> <span class="o">=</span> <span class="p">(</span><span class="n">mask</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="bp">False</span><span class="p">)</span>
599        <span class="k">else</span><span class="p">:</span>
600            <span class="n">out</span> <span class="o">=</span> <span class="p">(</span><span class="n">mask</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
601        <span class="c">#self.base.data.mask=out</span>
602        <span class="k">return</span> <span class="n">out</span>                   
603
604         
605<div class="viewcode-block" id="CircularMask.moveend"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.moveend">[docs]</a>    <span class="k">def</span> <span class="nf">moveend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
606        <span class="sd">&quot;&quot;&quot;</span>
607<span class="sd">        Called when any dragging motion ends.</span>
608<span class="sd">        Post an event (type =SlicerParameterEvent)</span>
609<span class="sd">        to plotter 2D with a copy  slicer parameters</span>
610<span class="sd">        Call  _post_data method</span>
611<span class="sd">        &quot;&quot;&quot;</span>
612        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">thaw_axes</span><span class="p">()</span>
613        <span class="c"># create a 1D data plot</span>
614        <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">()</span>
615            </div>
616<div class="viewcode-block" id="CircularMask.restore"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.restore">[docs]</a>    <span class="k">def</span> <span class="nf">restore</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
617        <span class="sd">&quot;&quot;&quot;</span>
618<span class="sd">        Restore the roughness for this layer.</span>
619<span class="sd">        &quot;&quot;&quot;</span>
620        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">restore</span><span class="p">()</span>
621</div>
622<div class="viewcode-block" id="CircularMask.move"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.move">[docs]</a>    <span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">ev</span><span class="p">):</span>
623        <span class="sd">&quot;&quot;&quot;</span>
624<span class="sd">        Process move to a new position, making sure that the move is allowed.</span>
625<span class="sd">        &quot;&quot;&quot;</span>
626        <span class="k">pass</span>
627        </div>
628<div class="viewcode-block" id="CircularMask.set_cursor"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.set_cursor">[docs]</a>    <span class="k">def</span> <span class="nf">set_cursor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
629        <span class="k">pass</span>
630        </div>
631<div class="viewcode-block" id="CircularMask.get_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.get_params">[docs]</a>    <span class="k">def</span> <span class="nf">get_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
632        <span class="sd">&quot;&quot;&quot;</span>
633<span class="sd">        Store a copy of values of parameters of the slicer into a dictionary.</span>
634<span class="sd">        </span>
635<span class="sd">        :return params: the dictionary created</span>
636<span class="sd">        </span>
637<span class="sd">        &quot;&quot;&quot;</span>
638        <span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
639        <span class="n">params</span><span class="p">[</span><span class="s">&quot;outer_radius&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">_inner_mouse_x</span><span class="p">)</span>
640        <span class="k">return</span> <span class="n">params</span>
641    </div>
642<div class="viewcode-block" id="CircularMask.set_params"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.set_params">[docs]</a>    <span class="k">def</span> <span class="nf">set_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
643        <span class="sd">&quot;&quot;&quot;</span>
644<span class="sd">        Receive a dictionary and reset the slicer with values contained </span>
645<span class="sd">        in the values of the dictionary.</span>
646<span class="sd">        </span>
647<span class="sd">        :param params: a dictionary containing name of slicer parameters and </span>
648<span class="sd">            values the user assigned to the slicer.</span>
649<span class="sd">        &quot;&quot;&quot;</span>
650        <span class="n">outer</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">fabs</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s">&quot;outer_radius&quot;</span><span class="p">]</span> <span class="p">)</span>
651        <span class="c">## Update the picture</span>
652        <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">set_cursor</span><span class="p">(</span><span class="n">outer</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outer_circle</span><span class="o">.</span><span class="n">_inner_mouse_y</span><span class="p">)</span>
653        <span class="c">## Post the data given the nbins entered by the user </span>
654        <span class="bp">self</span><span class="o">.</span><span class="n">_post_data</span><span class="p">()</span>
655        </div>
656<div class="viewcode-block" id="CircularMask.freeze_axes"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.freeze_axes">[docs]</a>    <span class="k">def</span> <span class="nf">freeze_axes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
657        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">freeze_axes</span><span class="p">()</span>
658        </div>
659<div class="viewcode-block" id="CircularMask.thaw_axes"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.thaw_axes">[docs]</a>    <span class="k">def</span> <span class="nf">thaw_axes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
660        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">thaw_axes</span><span class="p">()</span>
661</div>
662<div class="viewcode-block" id="CircularMask.draw"><a class="viewcode-back" href="../../../../../dev/api/sas.guiframe.local_perspectives.plotting.html#sas.guiframe.local_perspectives.plotting.AnnulusSlicer.CircularMask.draw">[docs]</a>    <span class="k">def</span> <span class="nf">draw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
663        <span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
664              </div></div>
665</pre></div>
666
667          </div>
668        </div>
669      </div>
670      <div class="sphinxsidebar">
671        <div class="sphinxsidebarwrapper">
672<div id="searchbox" style="display: none">
673  <h3>Quick search</h3>
674    <form class="search" action="../../../../../search.html" method="get">
675      <input type="text" name="q" />
676      <input type="submit" value="Go" />
677      <input type="hidden" name="check_keywords" value="yes" />
678      <input type="hidden" name="area" value="default" />
679    </form>
680    <p class="searchtip" style="font-size: 90%">
681    Enter search terms or a module, class or function name.
682    </p>
683</div>
684<script type="text/javascript">$('#searchbox').show(0);</script>
685        </div>
686      </div>
687      <div class="clearer"></div>
688    </div>
689    <div class="related">
690      <h3>Navigation</h3>
691      <ul>
692        <li class="right" style="margin-right: 10px">
693          <a href="../../../../../genindex.html" title="General Index"
694             >index</a></li>
695        <li class="right" >
696          <a href="../../../../../py-modindex.html" title="Python Module Index"
697             >modules</a> |</li>
698        <li><a href="../../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
699          <li><a href="../../../../index.html" >Module code</a> &raquo;</li>
700          <li><a href="../../../guiframe.html" >sas.guiframe</a> &raquo;</li> 
701      </ul>
702    </div>
703    <div class="footer">
704        &copy; Copyright 2013, The SasView Project.
705      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
706    </div>
707  </body>
708</html>
Note: See TracBrowser for help on using the repository browser.