source: sasview/_modules/sas/models/smearing_2d.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: 43.8 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.models.smearing_2d &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.models" href="../models.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="../models.html" accesskey="U">sas.models</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.models.smearing_2d</h1><div class="highlight"><pre>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">#This software was developed by the University of Tennessee as part of the</span>
54<span class="sd">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
55<span class="sd">#project funded by the US National Science Foundation. </span>
56<span class="sd">#See the license text in license.txt</span>
57<span class="sd">&quot;&quot;&quot;</span>
58<span class="kn">import</span> <span class="nn">numpy</span>
59<span class="kn">import</span> <span class="nn">math</span>
60
61<span class="c">## Singular point</span>
62<span class="n">SIGMA_ZERO</span> <span class="o">=</span> <span class="mf">1.0e-010</span>
63<span class="c">## Limit of how many sigmas to be covered for the Gaussian smearing</span>
64<span class="c"># default: 2.5 to cover 98.7% of Gaussian</span>
65<span class="n">LIMIT</span> <span class="o">=</span> <span class="mf">3.0</span>
66<span class="c">## Defaults</span>
67<span class="n">R_BIN</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;Xhigh&#39;</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span> <span class="s">&#39;High&#39;</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span> <span class="s">&#39;Med&#39;</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span> <span class="s">&#39;Low&#39;</span><span class="p">:</span><span class="mi">3</span><span class="p">}</span>
68<span class="n">PHI_BIN</span> <span class="o">=</span><span class="p">{</span><span class="s">&#39;Xhigh&#39;</span><span class="p">:</span><span class="mi">20</span><span class="p">,</span> <span class="s">&#39;High&#39;</span><span class="p">:</span><span class="mi">12</span><span class="p">,</span> <span class="s">&#39;Med&#39;</span><span class="p">:</span><span class="mi">6</span><span class="p">,</span> <span class="s">&#39;Low&#39;</span><span class="p">:</span><span class="mi">4</span><span class="p">}</span>   
69
70<div class="viewcode-block" id="Smearer2D"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D">[docs]</a><span class="k">class</span> <span class="nc">Smearer2D</span><span class="p">:</span>
71    <span class="sd">&quot;&quot;&quot;</span>
72<span class="sd">    Gaussian Q smearing class for SAS 2d data</span>
73<span class="sd">    &quot;&quot;&quot;</span>
74     
75    <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">data</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> 
76                 <span class="n">limit</span><span class="o">=</span><span class="n">LIMIT</span><span class="p">,</span> <span class="n">accuracy</span><span class="o">=</span><span class="s">&#39;Low&#39;</span><span class="p">,</span> <span class="n">coords</span><span class="o">=</span><span class="s">&#39;polar&#39;</span><span class="p">,</span> <span class="n">engine</span><span class="o">=</span><span class="s">&#39;c&#39;</span><span class="p">):</span>
77        <span class="sd">&quot;&quot;&quot;</span>
78<span class="sd">        Assumption: equally spaced bins in dq_r, dq_phi space.</span>
79<span class="sd">        </span>
80<span class="sd">        :param data: 2d data used to set the smearing parameters</span>
81<span class="sd">        :param model: model function</span>
82<span class="sd">        :param index: 1d array with len(data) to define the range </span>
83<span class="sd">         of the calculation: elements are given as True or False</span>
84<span class="sd">        :param nr: number of bins in dq_r-axis</span>
85<span class="sd">        :param nphi: number of bins in dq_phi-axis</span>
86<span class="sd">        :param coord: coordinates [string], &#39;polar&#39; or &#39;cartesian&#39;</span>
87<span class="sd">        :param engine: engine name [string]; &#39;c&#39; or &#39;numpy&#39;</span>
88<span class="sd">        &quot;&quot;&quot;</span>
89        <span class="c">## data</span>
90        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
91        <span class="c">## model</span>
92        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">model</span>
93        <span class="c">## Accuracy: Higher stands for more sampling points in both directions </span>
94        <span class="c">## of r and phi.</span>
95        <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">accuracy</span>
96        <span class="c">## number of bins in r axis for over-sampling </span>
97        <span class="bp">self</span><span class="o">.</span><span class="n">nr</span> <span class="o">=</span> <span class="n">R_BIN</span>
98        <span class="c">## number of bins in phi axis for over-sampling </span>
99        <span class="bp">self</span><span class="o">.</span><span class="n">nphi</span> <span class="o">=</span> <span class="n">PHI_BIN</span>
100        <span class="c">## maximum nsigmas</span>
101        <span class="bp">self</span><span class="o">.</span><span class="n">limit</span> <span class="o">=</span> <span class="n">limit</span>
102        <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">index</span>
103        <span class="bp">self</span><span class="o">.</span><span class="n">coords</span> <span class="o">=</span> <span class="n">coords</span>
104        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="bp">True</span>
105        <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span> <span class="o">=</span> <span class="n">engine</span>
106        <span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span> <span class="o">=</span> <span class="bp">None</span>
107        <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span> <span class="o">=</span> <span class="bp">None</span>
108        <span class="bp">self</span><span class="o">.</span><span class="n">q_data</span> <span class="o">=</span> <span class="bp">None</span>
109        <span class="c"># dqx and dqy mean dq_parr and dq_perp</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span> <span class="o">=</span> <span class="bp">None</span>
111        <span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span> <span class="o">=</span> <span class="bp">None</span>
112        <span class="bp">self</span><span class="o">.</span><span class="n">phi_data</span> <span class="o">=</span> <span class="bp">None</span>
113       
114<div class="viewcode-block" id="Smearer2D.get_data"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.get_data">[docs]</a>    <span class="k">def</span> <span class="nf">get_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>   
115        <span class="sd">&quot;&quot;&quot;</span>
116<span class="sd">        Get qx_data, qy_data, dqx_data,dqy_data,</span>
117<span class="sd">        and calculate phi_data=arctan(qx_data/qy_data)</span>
118<span class="sd">        &quot;&quot;&quot;</span>
119        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;Data1D&#39;</span><span class="p">:</span>
120            <span class="k">return</span> <span class="bp">None</span>
121        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">dqx_data</span> <span class="o">==</span> <span class="bp">None</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">dqy_data</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
122            <span class="k">return</span> <span class="bp">None</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">qx_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">qy_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span>
125        <span class="bp">self</span><span class="o">.</span><span class="n">q_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">q_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span>
126        <span class="c"># Here dqx and dqy mean dq_parr and dq_perp</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">dqx_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">dqy_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">index</span><span class="p">]</span>
129        <span class="bp">self</span><span class="o">.</span><span class="n">phi_data</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arctan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span><span class="p">)</span>
130        <span class="c">## Remove singular points if exists</span>
131        <span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span> <span class="o">&lt;</span> <span class="n">SIGMA_ZERO</span><span class="p">]</span> <span class="o">=</span> <span class="n">SIGMA_ZERO</span>
132        <span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span> <span class="o">&lt;</span> <span class="n">SIGMA_ZERO</span><span class="p">]</span> <span class="o">=</span> <span class="n">SIGMA_ZERO</span>
133        <span class="k">return</span> <span class="bp">True</span>
134    </div>
135<div class="viewcode-block" id="Smearer2D.set_accuracy"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.set_accuracy">[docs]</a>    <span class="k">def</span> <span class="nf">set_accuracy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">accuracy</span><span class="o">=</span><span class="s">&#39;Low&#39;</span><span class="p">):</span>   
136        <span class="sd">&quot;&quot;&quot;</span>
137<span class="sd">        Set accuracy.</span>
138<span class="sd">        </span>
139<span class="sd">        :param accuracy:  string</span>
140<span class="sd">        &quot;&quot;&quot;</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span> <span class="o">=</span> <span class="n">accuracy</span>
142</div>
143<div class="viewcode-block" id="Smearer2D.set_smearer"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.set_smearer">[docs]</a>    <span class="k">def</span> <span class="nf">set_smearer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">smearer</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
144        <span class="sd">&quot;&quot;&quot;</span>
145<span class="sd">        Set whether or not smearer will be used</span>
146<span class="sd">        </span>
147<span class="sd">        :param smearer: smear object</span>
148<span class="sd">        </span>
149<span class="sd">        &quot;&quot;&quot;</span>
150        <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="n">smearer</span>
151        </div>
152<div class="viewcode-block" id="Smearer2D.set_data"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.set_data">[docs]</a>    <span class="k">def</span> <span class="nf">set_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>   
153        <span class="sd">&quot;&quot;&quot;</span>
154<span class="sd">        Set data.</span>
155<span class="sd">        </span>
156<span class="sd">        :param data: DataLoader.Data_info type</span>
157<span class="sd">        &quot;&quot;&quot;</span>
158        <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span>
159 
160            </div>
161<div class="viewcode-block" id="Smearer2D.set_model"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.set_model">[docs]</a>    <span class="k">def</span> <span class="nf">set_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>   
162        <span class="sd">&quot;&quot;&quot;</span>
163<span class="sd">        Set model.</span>
164<span class="sd">        </span>
165<span class="sd">        :param model: sas.models instance</span>
166<span class="sd">        &quot;&quot;&quot;</span>
167        <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="o">=</span> <span class="n">model</span> 
168           </div>
169<div class="viewcode-block" id="Smearer2D.set_index"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.set_index">[docs]</a>    <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>   
170        <span class="sd">&quot;&quot;&quot;</span>
171<span class="sd">        Set index.</span>
172<span class="sd">        </span>
173<span class="sd">        :param index: 1d arrays</span>
174<span class="sd">        &quot;&quot;&quot;</span>
175        <span class="bp">self</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="n">index</span>       
176    </div>
177<div class="viewcode-block" id="Smearer2D.get_value"><a class="viewcode-back" href="../../../dev/api/sas.models.html#sas.models.smearing_2d.Smearer2D.get_value">[docs]</a>    <span class="k">def</span> <span class="nf">get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
178        <span class="sd">&quot;&quot;&quot;</span>
179<span class="sd">        Over sampling of r_nbins times phi_nbins, calculate Gaussian weights, </span>
180<span class="sd">        then find smeared intensity</span>
181<span class="sd">        &quot;&quot;&quot;</span>   
182        <span class="n">valid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_data</span><span class="p">()</span>
183        <span class="k">if</span> <span class="n">valid</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
184            <span class="k">return</span> <span class="n">valid</span>
185        <span class="c"># all zero values of dq</span>
186        <span class="k">if</span> <span class="n">numpy</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">numpy</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">dqx_data</span> <span class="o">&lt;=</span> <span class="mf">1.1e-10</span><span class="p">))</span> <span class="ow">and</span> \
187                        <span class="n">numpy</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">numpy</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">dqy_data</span> <span class="o">&lt;=</span> <span class="mf">1.1e-10</span><span class="p">)):</span>
188            <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">=</span> <span class="bp">False</span>
189 
190        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">smearer</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span>
191            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">evalDistribution</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span><span class="p">])</span> 
192
193        <span class="n">nr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nr</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span><span class="p">]</span>
194        <span class="n">nphi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nphi</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">accuracy</span><span class="p">]</span>
195        <span class="c"># Number of bins in the dqr direction (polar coordinate of dqx and dqy)</span>
196        <span class="n">bin_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">limit</span> <span class="o">/</span> <span class="n">nr</span>
197        <span class="c"># Total number of bins = # of bins </span>
198        <span class="c"># in dq_r-direction times # of bins in dq_phi-direction</span>
199        <span class="n">n_bins</span> <span class="o">=</span> <span class="n">nr</span> <span class="o">*</span> <span class="n">nphi</span>
200        <span class="c"># data length in the range of self.index</span>
201        <span class="n">len_data</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span><span class="p">)</span>
202        <span class="c">#len_datay = len(self.qy_data)</span>
203        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_engine</span> <span class="o">==</span> <span class="s">&#39;c&#39;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">coords</span> <span class="o">==</span> <span class="s">&#39;polar&#39;</span><span class="p">:</span>
204            <span class="k">try</span><span class="p">:</span>
205                <span class="kn">import</span> <span class="nn">sas.models.sas_extension.smearer2d_helper</span> <span class="kn">as</span> <span class="nn">smearer2dc</span>
206                <span class="n">smearc</span> <span class="o">=</span> <span class="n">smearer2dc</span><span class="o">.</span><span class="n">new_Smearer_helper</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span><span class="p">,</span> 
207                                              <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span><span class="p">,</span>
208                                              <span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span><span class="p">,</span>
209                                              <span class="bp">self</span><span class="o">.</span><span class="n">limit</span><span class="p">,</span> <span class="n">nr</span><span class="p">,</span> <span class="n">nphi</span><span class="p">,</span> 
210                                              <span class="nb">int</span><span class="p">(</span><span class="n">len_data</span><span class="p">))</span>
211                <span class="n">weight_res</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">nr</span> <span class="o">*</span> <span class="n">nphi</span> <span class="p">)</span>
212                <span class="n">qx_res</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">nr</span> <span class="o">*</span> <span class="n">nphi</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">len_data</span><span class="p">))</span>
213                <span class="n">qy_res</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">nr</span> <span class="o">*</span> <span class="n">nphi</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">len_data</span><span class="p">))</span>
214                <span class="n">smearer2dc</span><span class="o">.</span><span class="n">smearer2d_helper</span><span class="p">(</span><span class="n">smearc</span><span class="p">,</span> <span class="n">weight_res</span><span class="p">,</span> <span class="n">qx_res</span><span class="p">,</span> <span class="n">qy_res</span><span class="p">)</span>
215            <span class="k">except</span><span class="p">:</span>
216                <span class="k">raise</span> 
217        <span class="k">else</span><span class="p">:</span>
218            <span class="c"># Mean values of dqr at each bins </span>
219            <span class="c"># starting from the half of bin size</span>
220            <span class="n">r</span> <span class="o">=</span> <span class="n">bin_size</span> <span class="o">/</span> <span class="mf">2.0</span> <span class="o">+</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">nr</span><span class="p">)</span> <span class="o">*</span> <span class="n">bin_size</span>
221            <span class="c"># mean values of qphi at each bines</span>
222            <span class="n">phi</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">nphi</span><span class="p">)</span>
223            <span class="n">dphi</span> <span class="o">=</span> <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="n">nphi</span>
224            <span class="n">dphi</span> <span class="o">=</span> <span class="n">dphi</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">nr</span><span class="p">)</span>
225   
226            <span class="c">## Transform to polar coordinate, </span>
227            <span class="c">#  and set dphi at each data points ; 1d array</span>
228            <span class="n">dphi</span> <span class="o">=</span> <span class="n">dphi</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">len_data</span><span class="p">)</span>
229            <span class="n">q_phi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span>
230           
231            <span class="c"># Starting angle is different between polar </span>
232            <span class="c">#  and cartesian coordinates.</span>
233            <span class="c">#if self.coords != &#39;polar&#39;:</span>
234            <span class="c">#    dphi += numpy.arctan( q_phi * self.dqx_data/ \</span>
235            <span class="c">#                  self.dqy_data).repeat(n_bins).reshape(len_data,\</span>
236            <span class="c">#                                n_bins).transpose().flatten()</span>
237   
238            <span class="c"># The angle (phi) of the original q point</span>
239            <span class="n">q_phi</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arctan</span><span class="p">(</span><span class="n">q_phi</span><span class="p">)</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">len_data</span><span class="p">,</span>\
240                                                <span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
241            <span class="c">## Find Gaussian weight for each dq bins: The weight depends only </span>
242            <span class="c">#  on r-direction (The integration may not need)</span>
243            <span class="n">weight_res</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span> <span class="o">*</span> <span class="p">((</span><span class="n">r</span> <span class="o">-</span> <span class="n">bin_size</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">)</span> <span class="o">*</span> \
244                                    <span class="p">(</span><span class="n">r</span> <span class="o">-</span> <span class="n">bin_size</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">)))</span><span class="o">-</span> \
245                                    <span class="n">numpy</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span> <span class="o">*</span> <span class="p">((</span><span class="n">r</span> <span class="o">+</span> <span class="n">bin_size</span> <span class="o">/</span> <span class="mf">2.0</span> <span class="p">)</span> <span class="o">*</span>\
246                                    <span class="p">(</span><span class="n">r</span> <span class="o">+</span> <span class="n">bin_size</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">)))</span>
247            <span class="c"># No needs of normalization here.</span>
248            <span class="c">#weight_res /= numpy.sum(weight_res)</span>
249            <span class="n">weight_res</span> <span class="o">=</span> <span class="n">weight_res</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">nphi</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">nr</span><span class="p">,</span> <span class="n">nphi</span><span class="p">)</span>
250   
251            <span class="n">weight_res</span> <span class="o">=</span> <span class="n">weight_res</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
252           
253            <span class="c">## Set dr for all dq bins for averaging</span>
254            <span class="n">dr</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">nphi</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">nr</span><span class="p">,</span> <span class="n">nphi</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
255            <span class="c">## Set dqr for all data points</span>
256            <span class="n">dqx</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">outer</span><span class="p">(</span><span class="n">dr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dqx_data</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
257            <span class="n">dqy</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">outer</span><span class="p">(</span><span class="n">dr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dqy_data</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
258   
259            <span class="n">qx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_data</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">len_data</span><span class="p">,</span> \
260                                                 <span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
261            <span class="n">qy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_data</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">len_data</span><span class="p">,</span> \
262                                                 <span class="n">n_bins</span><span class="p">)</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
263   
264            <span class="c"># The polar needs rotation by -q_phi</span>
265            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">coords</span> <span class="o">==</span> <span class="s">&#39;polar&#39;</span><span class="p">:</span>
266                <span class="n">q_r</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">qx</span> <span class="o">*</span> <span class="n">qx</span> <span class="o">+</span> <span class="n">qy</span> <span class="o">*</span> <span class="n">qy</span><span class="p">)</span>
267                <span class="n">qx_res</span> <span class="o">=</span> <span class="p">((</span><span class="n">dqx</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span> <span class="o">+</span> <span class="n">q_r</span><span class="p">)</span> <span class="o">*</span> <span class="n">numpy</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="o">-</span><span class="n">q_phi</span><span class="p">)</span> <span class="o">+</span>\
268                               <span class="n">dqy</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span> <span class="o">*</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="o">-</span><span class="n">q_phi</span><span class="p">))</span>
269                <span class="n">qy_res</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="p">(</span><span class="n">dqx</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span> <span class="o">+</span> <span class="n">q_r</span><span class="p">)</span> <span class="o">*</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="o">-</span><span class="n">q_phi</span><span class="p">)</span> <span class="o">+</span>\
270                               <span class="n">dqy</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span> <span class="o">*</span> <span class="n">numpy</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="o">-</span><span class="n">q_phi</span><span class="p">))</span>
271            <span class="k">else</span><span class="p">:</span>
272                <span class="n">qx_res</span> <span class="o">=</span> <span class="n">qx</span> <span class="o">+</span>  <span class="n">dqx</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span>
273                <span class="n">qy_res</span> <span class="o">=</span> <span class="n">qy</span> <span class="o">+</span>  <span class="n">dqy</span><span class="o">*</span><span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">dphi</span><span class="p">)</span>
274           
275        <span class="c">## Evaluate all points</span>
276        <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">evalDistribution</span><span class="p">([</span><span class="n">qx_res</span><span class="p">,</span> <span class="n">qy_res</span><span class="p">])</span> 
277        <span class="c">## Reshape into 2d array to use numpy weighted averaging</span>
278        <span class="n">value_res</span><span class="o">=</span> <span class="n">val</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">n_bins</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">qx_data</span><span class="p">))</span>
279        <span class="c">## Averaging with Gaussian weighting: normalization included.</span>
280        <span class="n">value</span> <span class="o">=</span><span class="n">numpy</span><span class="o">.</span><span class="n">average</span><span class="p">(</span><span class="n">value_res</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">weights</span><span class="o">=</span><span class="n">weight_res</span><span class="p">)</span>
281        <span class="c">## Return the smeared values in the range of self.index</span>
282        <span class="k">return</span> <span class="n">value</span></div></div>
283<span class="sd">&quot;&quot;&quot;    </span>
284<span class="sd">if __name__ == &#39;__main__&#39;:</span>
285<span class="sd">    ## Test w/ 2D linear function</span>
286<span class="sd">    x = 0.001*numpy.arange(1, 11)</span>
287<span class="sd">    dx = numpy.ones(len(x))*0.0003</span>
288<span class="sd">    y = 0.001*numpy.arange(1, 11)</span>
289<span class="sd">    dy = numpy.ones(len(x))*0.001</span>
290<span class="sd">    z = numpy.ones(10)</span>
291<span class="sd">    dz = numpy.sqrt(z)</span>
292<span class="sd">    </span>
293<span class="sd">    from sas.dataloader import Data2D</span>
294<span class="sd">    #for i in range(10): print i, 0.001 + i*0.008/9.0 </span>
295<span class="sd">    #for i in range(100): print i, int(math.floor( (i/ (100/9.0)) )) </span>
296<span class="sd">    out = Data2D()</span>
297<span class="sd">    out.data = z</span>
298<span class="sd">    out.qx_data = x</span>
299<span class="sd">    out.qy_data = y</span>
300<span class="sd">    out.dqx_data = dx</span>
301<span class="sd">    out.dqy_data = dy</span>
302<span class="sd">    out.q_data = numpy.sqrt(dx * dx + dy * dy)</span>
303<span class="sd">    index = numpy.ones(len(x), dtype = bool)</span>
304<span class="sd">    out.mask = index</span>
305<span class="sd">    from sas.models.LineModel import LineModel</span>
306<span class="sd">    model = LineModel()</span>
307<span class="sd">    model.setParam(&quot;A&quot;, 0)</span>
308
309<span class="sd">    smear = Smearer2D(out, model, index)</span>
310<span class="sd">    #smear.set_accuracy(&#39;Xhigh&#39;)</span>
311<span class="sd">    value = smear.get_value()</span>
312<span class="sd">    ## All data are ones, so the smeared should also be ones.</span>
313<span class="sd">    print &quot;Data length =&quot;, len(value)</span>
314<span class="sd">    print &quot; 2D linear function, I = 0 + 1*qy&quot;</span>
315<span class="sd">    text = &quot; Gaussian weighted averaging on a 2D linear function will &quot;</span>
316<span class="sd">    text += &quot;provides the results same as without the averaging.&quot;</span>
317<span class="sd">    print text</span>
318<span class="sd">    print &quot;qx_data&quot;, &quot;qy_data&quot;, &quot;I_nonsmear&quot;, &quot;I_smeared&quot;</span>
319<span class="sd">    for ind in range(len(value)):</span>
320<span class="sd">        print x[ind], y[ind], model.evalDistribution([x, y])[ind], value[ind]</span>
321<span class="sd">        </span>
322<span class="sd">  </span>
323<span class="sd">if __name__ == &#39;__main__&#39;:</span>
324<span class="sd">    ## Another Test w/ constant function</span>
325<span class="sd">    x = 0.001*numpy.arange(1,11)</span>
326<span class="sd">    dx = numpy.ones(len(x))*0.001</span>
327<span class="sd">    y = 0.001*numpy.arange(1,11)</span>
328<span class="sd">    dy = numpy.ones(len(x))*0.001</span>
329<span class="sd">    z = numpy.ones(10)</span>
330<span class="sd">    dz = numpy.sqrt(z)</span>
331<span class="sd">    </span>
332<span class="sd">    from DataLoader import Data2D</span>
333<span class="sd">    #for i in range(10): print i, 0.001 + i*0.008/9.0 </span>
334<span class="sd">    #for i in range(100): print i, int(math.floor( (i/ (100/9.0)) )) </span>
335<span class="sd">    out = Data2D()</span>
336<span class="sd">    out.data = z</span>
337<span class="sd">    out.qx_data = x</span>
338<span class="sd">    out.qy_data = y</span>
339<span class="sd">    out.dqx_data = dx</span>
340<span class="sd">    out.dqy_data = dy</span>
341<span class="sd">    index = numpy.ones(len(x), dtype = bool)</span>
342<span class="sd">    out.mask = index</span>
343<span class="sd">    from sas.models.Constant import Constant</span>
344<span class="sd">    model = Constant()</span>
345
346<span class="sd">    value = Smearer2D(out,model,index).get_value()</span>
347<span class="sd">    ## All data are ones, so the smeared values should also be ones.</span>
348<span class="sd">    print &quot;Data length =&quot;,len(value), &quot;, Data=&quot;,value</span>
349<span class="sd">&quot;&quot;&quot;</span>   
350</pre></div>
351
352          </div>
353        </div>
354      </div>
355      <div class="sphinxsidebar">
356        <div class="sphinxsidebarwrapper">
357<div id="searchbox" style="display: none">
358  <h3>Quick search</h3>
359    <form class="search" action="../../../search.html" method="get">
360      <input type="text" name="q" />
361      <input type="submit" value="Go" />
362      <input type="hidden" name="check_keywords" value="yes" />
363      <input type="hidden" name="area" value="default" />
364    </form>
365    <p class="searchtip" style="font-size: 90%">
366    Enter search terms or a module, class or function name.
367    </p>
368</div>
369<script type="text/javascript">$('#searchbox').show(0);</script>
370        </div>
371      </div>
372      <div class="clearer"></div>
373    </div>
374    <div class="related">
375      <h3>Navigation</h3>
376      <ul>
377        <li class="right" style="margin-right: 10px">
378          <a href="../../../genindex.html" title="General Index"
379             >index</a></li>
380        <li class="right" >
381          <a href="../../../py-modindex.html" title="Python Module Index"
382             >modules</a> |</li>
383        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
384          <li><a href="../../index.html" >Module code</a> &raquo;</li>
385          <li><a href="../models.html" >sas.models</a> &raquo;</li> 
386      </ul>
387    </div>
388    <div class="footer">
389        &copy; Copyright 2013, The SasView Project.
390      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
391    </div>
392  </body>
393</html>
Note: See TracBrowser for help on using the repository browser.