source: sasview/_modules/sas/calculator/resolution_calculator.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: 161.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.calculator.resolution_calculator &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../index.html" />
28    <link rel="up" title="Module code" href="../../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for sas.calculator.resolution_calculator</h1><div class="highlight"><pre>
51<span class="sd">&quot;&quot;&quot;</span>
52<span class="sd">This object is a small tool to allow user to quickly</span>
53<span class="sd">determine the variance in q  from the</span>
54<span class="sd">instrumental parameters.</span>
55<span class="sd">&quot;&quot;&quot;</span>
56<span class="kn">from</span> <span class="nn">instrument</span> <span class="kn">import</span> <span class="n">Sample</span>
57<span class="kn">from</span> <span class="nn">instrument</span> <span class="kn">import</span> <span class="n">Detector</span>
58<span class="kn">from</span> <span class="nn">instrument</span> <span class="kn">import</span> <span class="n">TOF</span> <span class="k">as</span> <span class="n">Neutron</span>
59<span class="kn">from</span> <span class="nn">instrument</span> <span class="kn">import</span> <span class="n">Aperture</span>
60<span class="c"># import math stuffs</span>
61<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">pi</span>
62<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sqrt</span>
63<span class="kn">import</span> <span class="nn">math</span>
64<span class="kn">import</span> <span class="nn">numpy</span>
65
66<span class="c">#Plank&#39;s constant in cgs unit</span>
67<span class="n">_PLANK_H</span> <span class="o">=</span> <span class="mf">6.62606896E-27</span>
68<span class="c">#Gravitational acc. in cgs unit</span>
69<span class="n">_GRAVITY</span> <span class="o">=</span> <span class="mf">981.0</span>
70
71
72<div class="viewcode-block" id="ResolutionCalculator"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator">[docs]</a><span class="k">class</span> <span class="nc">ResolutionCalculator</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
73    <span class="sd">&quot;&quot;&quot;</span>
74<span class="sd">    compute resolution in 2D</span>
75<span class="sd">    &quot;&quot;&quot;</span>
76    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
77       
78        <span class="c"># wavelength</span>
79        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span> <span class="o">=</span> <span class="n">Neutron</span><span class="p">()</span>
80        <span class="c"># sample</span>
81        <span class="bp">self</span><span class="o">.</span><span class="n">sample</span> <span class="o">=</span> <span class="n">Sample</span><span class="p">()</span>
82        <span class="c"># aperture</span>
83        <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span> <span class="o">=</span> <span class="n">Aperture</span><span class="p">()</span>
84        <span class="c"># detector</span>
85        <span class="bp">self</span><span class="o">.</span><span class="n">detector</span> <span class="o">=</span> <span class="n">Detector</span><span class="p">()</span>
86        <span class="c"># 2d image of the resolution</span>
87        <span class="bp">self</span><span class="o">.</span><span class="n">image</span> <span class="o">=</span> <span class="p">[]</span>
88        <span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span> <span class="o">=</span> <span class="p">[]</span>
89        <span class="c"># resolutions</span>
90        <span class="c"># lamda in r-direction</span>
91        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_lamd</span> <span class="o">=</span> <span class="mi">0</span>
92        <span class="c"># x-dir (no lamda)</span>
93        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1</span> <span class="o">=</span> <span class="mi">0</span>
94        <span class="c">#y-dir (no lamda)</span>
95        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_2</span> <span class="o">=</span> <span class="mi">0</span>
96        <span class="c"># 1D total</span>
97        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1d</span> <span class="o">=</span> <span class="mi">0</span>
98        <span class="bp">self</span><span class="o">.</span><span class="n">gravity_phi</span> <span class="o">=</span> <span class="bp">None</span>
99        <span class="c"># q min and max</span>
100        <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.3</span>
101        <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span> <span class="o">=</span> <span class="mf">0.3</span>
102        <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.3</span>
103        <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span> <span class="o">=</span> <span class="mf">0.3</span>
104        <span class="c"># q min and max of the detector</span>
105        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_min</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.3</span>
106        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_max</span> <span class="o">=</span> <span class="mf">0.3</span>
107        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_min</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.3</span>
108        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_max</span> <span class="o">=</span> <span class="mf">0.3</span>
109        <span class="c"># possible max qrange</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">qxmin_limit</span> <span class="o">=</span> <span class="mi">0</span>
111        <span class="bp">self</span><span class="o">.</span><span class="n">qxmax_limit</span> <span class="o">=</span> <span class="mi">0</span>
112        <span class="bp">self</span><span class="o">.</span><span class="n">qymin_limit</span> <span class="o">=</span> <span class="mi">0</span>
113        <span class="bp">self</span><span class="o">.</span><span class="n">qymax_limit</span> <span class="o">=</span> <span class="mi">0</span>
114
115        <span class="c"># plots</span>
116        <span class="bp">self</span><span class="o">.</span><span class="n">plot</span> <span class="o">=</span> <span class="bp">None</span>
117        <span class="c"># instrumental params defaults</span>
118        <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">=</span> <span class="mi">0</span>
119        <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span> <span class="o">=</span> <span class="mi">0</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">wavelength</span> <span class="o">=</span> <span class="mi">0</span>
121        <span class="bp">self</span><span class="o">.</span><span class="n">wavelength_spread</span> <span class="o">=</span> <span class="mi">0</span>
122        <span class="bp">self</span><span class="o">.</span><span class="n">source_aperture_size</span> <span class="o">=</span> <span class="p">[]</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">source2sample_distance</span> <span class="o">=</span> <span class="p">[]</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">sample2sample_distance</span> <span class="o">=</span> <span class="p">[]</span>
125        <span class="bp">self</span><span class="o">.</span><span class="n">sample_aperture_size</span> <span class="o">=</span> <span class="p">[]</span>
126        <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span> <span class="o">=</span> <span class="p">[]</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">detector_pix_size</span> <span class="o">=</span> <span class="p">[]</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">detector_size</span> <span class="o">=</span> <span class="p">[]</span>
129        <span class="c"># get all the values of the instrumental parameters</span>
130        <span class="c">#self.intensity = self.get_intensity()</span>
131        <span class="c">#self.wavelength = self.get_wavelength()</span>
132        <span class="c">#self.wavelength_spread = self.get_wavelength_spread()</span>
133        <span class="bp">self</span><span class="o">.</span><span class="n">get_all_instrument_params</span><span class="p">()</span>
134        <span class="c"># max q range for all lambdas</span>
135        <span class="bp">self</span><span class="o">.</span><span class="n">qxrange</span> <span class="o">=</span> <span class="p">[]</span>
136        <span class="bp">self</span><span class="o">.</span><span class="n">qyrange</span> <span class="o">=</span> <span class="p">[]</span>
137       
138<div class="viewcode-block" id="ResolutionCalculator.compute_and_plot"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.compute_and_plot">[docs]</a>    <span class="k">def</span> <span class="nf">compute_and_plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span>
139                          <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">,</span> <span class="n">coord</span><span class="o">=</span><span class="s">&#39;cartesian&#39;</span><span class="p">):</span>
140        <span class="sd">&quot;&quot;&quot;</span>
141<span class="sd">        Compute the resolution</span>
142<span class="sd">        : qx_value: x component of q</span>
143<span class="sd">        : qy_value: y component of q</span>
144<span class="sd">        &quot;&quot;&quot;</span>
145        <span class="c"># make sure to update all the variables need.</span>
146        <span class="c"># except lambda, dlambda, and intensity</span>
147        <span class="bp">self</span><span class="o">.</span><span class="n">get_all_instrument_params</span><span class="p">()</span>
148        <span class="c"># wavelength etc.</span>
149        <span class="n">lamda_list</span><span class="p">,</span> <span class="n">dlamb_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_wave_list</span><span class="p">()</span>
150        <span class="n">intens_list</span> <span class="o">=</span> <span class="p">[]</span>
151        <span class="n">sig1_list</span> <span class="o">=</span> <span class="p">[]</span>
152        <span class="n">sig2_list</span> <span class="o">=</span> <span class="p">[]</span>
153        <span class="n">sigr_list</span> <span class="o">=</span> <span class="p">[]</span>
154        <span class="n">sigma1d_list</span> <span class="o">=</span> <span class="p">[]</span>
155        <span class="n">num_lamda</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lamda_list</span><span class="p">)</span>
156        <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_lamda</span><span class="p">):</span>
157            <span class="n">lam</span> <span class="o">=</span> <span class="n">lamda_list</span><span class="p">[</span><span class="n">num</span><span class="p">]</span>
158            <span class="c"># wavelength spread</span>
159            <span class="n">dlam</span> <span class="o">=</span> <span class="n">dlamb_list</span><span class="p">[</span><span class="n">num</span><span class="p">]</span>
160            <span class="n">intens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">setup_tof</span><span class="p">(</span><span class="n">lam</span><span class="p">,</span> <span class="n">dlam</span><span class="p">)</span>
161            <span class="n">intens_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">intens</span><span class="p">)</span>
162            <span class="c"># cehck if tof</span>
163            <span class="k">if</span> <span class="n">num_lamda</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
164                <span class="n">tof</span> <span class="o">=</span> <span class="bp">True</span>
165            <span class="k">else</span><span class="p">:</span>
166                <span class="n">tof</span> <span class="o">=</span> <span class="bp">False</span>
167            <span class="c"># compute 2d resolution</span>
168            <span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">,</span> <span class="n">sigma1d</span> <span class="o">=</span> \
169                        <span class="bp">self</span><span class="o">.</span><span class="n">compute</span><span class="p">(</span><span class="n">lam</span><span class="p">,</span> <span class="n">dlam</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">coord</span><span class="p">,</span> <span class="n">tof</span><span class="p">)</span>
170            <span class="c"># make image</span>
171            <span class="n">image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_image</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span>
172                            <span class="n">sigma_r</span><span class="p">,</span> <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">,</span>
173                            <span class="n">coord</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
174           
175            <span class="c"># Non tof mode to be speed up</span>
176            <span class="c">#if num_lamda &lt; 2:</span>
177            <span class="c">#    return self.plot_image(image)</span>
178           
179            <span class="k">if</span> <span class="n">qx_min</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span><span class="p">:</span>
180                <span class="n">qx_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span>
181            <span class="k">if</span> <span class="n">qx_max</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span><span class="p">:</span>
182                <span class="n">qx_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span>
183            <span class="k">if</span> <span class="n">qy_min</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span><span class="p">:</span>
184                <span class="n">qy_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span>
185            <span class="k">if</span> <span class="n">qy_max</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span><span class="p">:</span>
186                <span class="n">qy_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span>
187               
188            <span class="c"># set max qranges</span>
189            <span class="bp">self</span><span class="o">.</span><span class="n">qxrange</span> <span class="o">=</span> <span class="p">[</span><span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">]</span>
190            <span class="bp">self</span><span class="o">.</span><span class="n">qyrange</span> <span class="o">=</span> <span class="p">[</span><span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">]</span>
191            <span class="n">sig1_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sigma_1</span><span class="p">)</span>
192            <span class="n">sig2_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sigma_2</span><span class="p">)</span>
193            <span class="n">sigr_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sigma_r</span><span class="p">)</span>
194            <span class="n">sigma1d_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sigma1d</span><span class="p">)</span>
195        <span class="c"># redraw image in global 2d q-space.</span>
196        <span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span> <span class="o">=</span> <span class="p">[]</span>
197        <span class="n">total_intensity</span> <span class="o">=</span> <span class="mi">0</span>
198        <span class="n">sigma_1</span> <span class="o">=</span> <span class="mi">0</span>
199        <span class="n">sigma_r</span> <span class="o">=</span> <span class="mi">0</span>
200        <span class="n">sigma_2</span> <span class="o">=</span> <span class="mi">0</span>
201        <span class="n">sigma1d</span> <span class="o">=</span> <span class="mi">0</span>
202        <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_lamda</span><span class="p">):</span>
203            <span class="n">lam</span> <span class="o">=</span> <span class="n">lamda_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
204            <span class="n">dlam</span> <span class="o">=</span> <span class="n">dlamb_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span>
205            <span class="n">intens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">setup_tof</span><span class="p">(</span><span class="n">lam</span><span class="p">,</span> <span class="n">dlam</span><span class="p">)</span>
206            <span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_image</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">sig1_list</span><span class="p">[</span><span class="n">ind</span><span class="p">],</span>
207                                   <span class="n">sig2_list</span><span class="p">[</span><span class="n">ind</span><span class="p">],</span> <span class="n">sigr_list</span><span class="p">[</span><span class="n">ind</span><span class="p">],</span>
208                                   <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">,</span> <span class="n">coord</span><span class="p">)</span>
209            <span class="c"># this is the case of q being outside the detector</span>
210            <span class="c">#if numpy.all(out==0.0):</span>
211            <span class="c">#    continue</span>
212            <span class="n">image</span> <span class="o">=</span> <span class="n">out</span>
213            <span class="c"># set variance as sigmas</span>
214            <span class="n">sigma_1</span> <span class="o">+=</span> <span class="n">sig1_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="n">sig1_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
215            <span class="n">sigma_r</span> <span class="o">+=</span> <span class="n">sigr_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="n">sigr_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
216            <span class="n">sigma_2</span> <span class="o">+=</span> <span class="n">sig2_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="n">sig2_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
217            <span class="n">sigma1d</span> <span class="o">+=</span> <span class="n">sigma1d_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="n">sigma1d_list</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
218            <span class="n">total_intensity</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
219       
220        <span class="k">if</span> <span class="n">total_intensity</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
221            <span class="c"># average variance</span>
222            <span class="n">image_out</span> <span class="o">=</span> <span class="n">image</span> <span class="o">/</span> <span class="n">total_intensity</span>
223            <span class="n">sigma_1</span> <span class="o">=</span> <span class="n">sigma_1</span> <span class="o">/</span> <span class="n">total_intensity</span>
224            <span class="n">sigma_r</span> <span class="o">=</span> <span class="n">sigma_r</span> <span class="o">/</span> <span class="n">total_intensity</span>
225            <span class="n">sigma_2</span> <span class="o">=</span> <span class="n">sigma_2</span> <span class="o">/</span> <span class="n">total_intensity</span>
226            <span class="n">sigma1d</span> <span class="o">=</span> <span class="n">sigma1d</span> <span class="o">/</span> <span class="n">total_intensity</span>
227            <span class="c"># set sigmas</span>
228            <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_1</span><span class="p">)</span>
229            <span class="bp">self</span><span class="o">.</span><span class="n">sigma_lamd</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_r</span><span class="p">)</span>
230            <span class="bp">self</span><span class="o">.</span><span class="n">sigma_2</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_2</span><span class="p">)</span>
231            <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1d</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma1d</span><span class="p">)</span>
232            <span class="c"># rescale</span>
233            <span class="n">max_im_val</span> <span class="o">=</span> <span class="mi">1</span>
234            <span class="k">if</span> <span class="n">max_im_val</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
235                <span class="n">image_out</span> <span class="o">/=</span> <span class="n">max_im_val</span>
236        <span class="k">else</span><span class="p">:</span>
237            <span class="n">image_out</span> <span class="o">=</span> <span class="n">image</span> <span class="o">*</span> <span class="mf">0.0</span>
238            <span class="c"># Don&#39;t calculate sigmas nor set self.sigmas!</span>
239            <span class="n">sigma_1</span> <span class="o">=</span> <span class="mi">0</span>
240            <span class="n">sigma_r</span> <span class="o">=</span> <span class="mi">0</span>
241            <span class="n">sigma_2</span> <span class="o">=</span> <span class="mi">0</span>
242            <span class="n">sigma1d</span> <span class="o">=</span> <span class="mi">0</span>
243        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">image</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
244            <span class="bp">self</span><span class="o">.</span><span class="n">image</span> <span class="o">+=</span> <span class="n">image_out</span>
245        <span class="k">else</span><span class="p">:</span>
246            <span class="bp">self</span><span class="o">.</span><span class="n">image</span> <span class="o">=</span> <span class="n">image_out</span>
247       
248        <span class="c"># plot image</span>
249        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">plot_image</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">image</span><span class="p">)</span>
250    </div>
251<div class="viewcode-block" id="ResolutionCalculator.setup_tof"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.setup_tof">[docs]</a>    <span class="k">def</span> <span class="nf">setup_tof</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">,</span> <span class="n">wavelength_spread</span><span class="p">):</span>
252        <span class="sd">&quot;&quot;&quot;</span>
253<span class="sd">        Setup all parameters in instrument</span>
254<span class="sd">        </span>
255<span class="sd">        : param ind: index of lambda, etc</span>
256<span class="sd">        &quot;&quot;&quot;</span>
257
258        <span class="c"># set wave.wavelength</span>
259        <span class="bp">self</span><span class="o">.</span><span class="n">set_wavelength</span><span class="p">(</span><span class="n">wavelength</span><span class="p">)</span>
260        <span class="bp">self</span><span class="o">.</span><span class="n">set_wavelength_spread</span><span class="p">(</span><span class="n">wavelength_spread</span><span class="p">)</span>
261        <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">get_intensity</span><span class="p">()</span>
262       
263        <span class="k">if</span> <span class="n">wavelength</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
264            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Can&#39;t compute the resolution: the wavelength is zero...&quot;</span>
265            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
266        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
267        </div>
268<div class="viewcode-block" id="ResolutionCalculator.compute"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.compute">[docs]</a>    <span class="k">def</span> <span class="nf">compute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">,</span> <span class="n">wavelength_spread</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span>
269                <span class="n">coord</span><span class="o">=</span><span class="s">&#39;cartesian&#39;</span><span class="p">,</span> <span class="n">tof</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
270        <span class="sd">&quot;&quot;&quot;</span>
271<span class="sd">        Compute the Q resoltuion in || and + direction of 2D</span>
272<span class="sd">        : qx_value: x component of q</span>
273<span class="sd">        : qy_value: y component of q</span>
274<span class="sd">        &quot;&quot;&quot;</span>
275        <span class="n">coord</span> <span class="o">=</span> <span class="s">&#39;cartesian&#39;</span>
276        <span class="n">lamb</span> <span class="o">=</span> <span class="n">wavelength</span>
277        <span class="n">lamb_spread</span> <span class="o">=</span> <span class="n">wavelength_spread</span>
278        <span class="c"># the shape of wavelength distribution</span>
279
280        <span class="k">if</span> <span class="n">tof</span><span class="p">:</span>
281            <span class="c"># rectangular</span>
282            <span class="n">tof_factor</span> <span class="o">=</span> <span class="mi">2</span>
283        <span class="k">else</span><span class="p">:</span>
284            <span class="c"># triangular</span>
285            <span class="n">tof_factor</span> <span class="o">=</span> <span class="mi">1</span>
286        <span class="c"># Find polar values</span>
287        <span class="n">qr_value</span><span class="p">,</span> <span class="n">phi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_polar_value</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">)</span>
288        <span class="c"># vacuum wave transfer</span>
289        <span class="n">knot</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="o">/</span><span class="n">lamb</span>
290        <span class="c"># scattering angle theta; always true for plane detector</span>
291        <span class="c"># aligned vertically to the ko direction</span>
292        <span class="k">if</span> <span class="n">qr_value</span> <span class="o">&gt;</span> <span class="n">knot</span><span class="p">:</span>
293            <span class="n">theta</span> <span class="o">=</span> <span class="n">pi</span><span class="o">/</span><span class="mi">2</span>
294        <span class="k">else</span><span class="p">:</span>
295            <span class="n">theta</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">asin</span><span class="p">(</span><span class="n">qr_value</span><span class="o">/</span><span class="n">knot</span><span class="p">)</span>
296        <span class="c"># source aperture size</span>
297        <span class="n">rone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">source_aperture_size</span>
298        <span class="c"># sample aperture size</span>
299        <span class="n">rtwo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample_aperture_size</span>
300        <span class="c"># detector pixel size</span>
301        <span class="n">rthree</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_pix_size</span>
302        <span class="c"># source to sample(aperture) distance</span>
303        <span class="n">l_ssa</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">source2sample_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
304        <span class="c"># sample(aperture) to detector distance</span>
305        <span class="n">l_sad</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
306        <span class="c"># sample (aperture) to sample distance</span>
307        <span class="n">l_sas</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2sample_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
308        <span class="c"># source to sample distance</span>
309        <span class="n">l_one</span> <span class="o">=</span> <span class="n">l_ssa</span> <span class="o">+</span> <span class="n">l_sas</span>
310        <span class="c"># sample to detector distance</span>
311        <span class="n">l_two</span> <span class="o">=</span> <span class="n">l_sad</span> <span class="o">-</span> <span class="n">l_sas</span>
312       
313        <span class="c"># Sample offset correction for l_one and Lp on variance calculation</span>
314        <span class="n">l1_cor</span> <span class="o">=</span> <span class="p">(</span><span class="n">l_ssa</span> <span class="o">*</span> <span class="n">l_two</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">l_sas</span> <span class="o">+</span> <span class="n">l_two</span><span class="p">)</span>
315        <span class="n">lp_cor</span> <span class="o">=</span> <span class="p">(</span><span class="n">l_ssa</span> <span class="o">*</span> <span class="n">l_two</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">l_one</span> <span class="o">+</span> <span class="n">l_two</span><span class="p">)</span>
316        <span class="c"># the radial distance to the pixel from the center of the detector</span>
317        <span class="n">radius</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="n">l_two</span>
318        <span class="c">#Lp = l_one*l_two/(l_one+l_two)</span>
319        <span class="c"># default polar coordinate</span>
320        <span class="n">comp1</span> <span class="o">=</span> <span class="s">&#39;radial&#39;</span>
321        <span class="n">comp2</span> <span class="o">=</span> <span class="s">&#39;phi&#39;</span>
322        <span class="c"># in the case of the cartesian coordinate</span>
323        <span class="k">if</span> <span class="n">coord</span> <span class="o">==</span> <span class="s">&#39;cartesian&#39;</span><span class="p">:</span>
324            <span class="n">comp1</span> <span class="o">=</span> <span class="s">&#39;x&#39;</span>
325            <span class="n">comp2</span> <span class="o">=</span> <span class="s">&#39;y&#39;</span>
326
327        <span class="c"># sigma in the radial/x direction</span>
328        <span class="c"># for source aperture</span>
329        <span class="n">sigma_1</span>  <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rone</span><span class="p">,</span> <span class="n">l1_cor</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp1</span><span class="p">)</span>
330        <span class="c"># for sample apperture</span>
331        <span class="n">sigma_1</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rtwo</span><span class="p">,</span> <span class="n">lp_cor</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp1</span><span class="p">)</span>
332        <span class="c"># for detector pix</span>
333        <span class="n">sigma_1</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rthree</span><span class="p">,</span> <span class="n">l_two</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp1</span><span class="p">)</span>
334        <span class="c"># for gravity term for 1d</span>
335        <span class="n">sigma_1grav1d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance_gravity</span><span class="p">(</span><span class="n">l_ssa</span><span class="p">,</span> <span class="n">l_sad</span><span class="p">,</span> <span class="n">lamb</span><span class="p">,</span>
336                            <span class="n">lamb_spread</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp1</span><span class="p">,</span> <span class="s">&#39;on&#39;</span><span class="p">)</span> <span class="o">/</span> <span class="n">tof_factor</span>
337        <span class="c"># for wavelength spread</span>
338        <span class="c"># reserve for 1d calculation</span>
339        <span class="n">A_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cal_A_value</span><span class="p">(</span><span class="n">lamb</span><span class="p">,</span> <span class="n">l_ssa</span><span class="p">,</span> <span class="n">l_sad</span><span class="p">)</span>
340        <span class="n">sigma_wave_1</span><span class="p">,</span> <span class="n">sigma_wave_1_1d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance_wave</span><span class="p">(</span><span class="n">A_value</span><span class="p">,</span>
341                                          <span class="n">radius</span><span class="p">,</span> <span class="n">l_two</span><span class="p">,</span> <span class="n">lamb_spread</span><span class="p">,</span>
342                                          <span class="n">phi</span><span class="p">,</span> <span class="s">&#39;radial&#39;</span><span class="p">,</span> <span class="s">&#39;on&#39;</span><span class="p">)</span>
343        <span class="n">sigma_wave_1</span> <span class="o">/=</span> <span class="n">tof_factor</span>
344        <span class="n">sigma_wave_1_1d</span> <span class="o">/=</span> <span class="n">tof_factor</span>
345        <span class="c"># for 1d</span>
346        <span class="n">variance_1d_1</span> <span class="o">=</span> <span class="p">(</span><span class="n">sigma_1</span> <span class="o">+</span> <span class="n">sigma_1grav1d</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> <span class="o">+</span> <span class="n">sigma_wave_1_1d</span>
347        <span class="c"># normalize</span>
348        <span class="n">variance_1d_1</span> <span class="o">=</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">variance_1d_1</span> <span class="o">/</span> <span class="mi">12</span>
349       
350        <span class="c"># for 2d</span>
351        <span class="c">#sigma_1 += sigma_wave_1</span>
352        <span class="c"># normalize</span>
353        <span class="n">sigma_1</span> <span class="o">=</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_1</span> <span class="o">/</span> <span class="mi">12</span><span class="p">)</span>
354        <span class="n">sigma_r</span> <span class="o">=</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_wave_1</span> <span class="o">/</span> <span class="p">(</span><span class="n">tof_factor</span> <span class="o">*</span><span class="mi">12</span><span class="p">))</span>
355        <span class="c"># sigma in the phi/y direction</span>
356        <span class="c"># for source apperture</span>
357        <span class="n">sigma_2</span>  <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rone</span><span class="p">,</span> <span class="n">l1_cor</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp2</span><span class="p">)</span>
358
359        <span class="c"># for sample apperture</span>
360        <span class="n">sigma_2</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rtwo</span><span class="p">,</span> <span class="n">lp_cor</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp2</span><span class="p">)</span>
361
362        <span class="c"># for detector pix</span>
363        <span class="n">sigma_2</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance</span><span class="p">(</span><span class="n">rthree</span><span class="p">,</span> <span class="n">l_two</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp2</span><span class="p">)</span>
364
365        <span class="c"># for gravity term for 1d</span>
366        <span class="n">sigma_2grav1d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance_gravity</span><span class="p">(</span><span class="n">l_ssa</span><span class="p">,</span> <span class="n">l_sad</span><span class="p">,</span> <span class="n">lamb</span><span class="p">,</span>
367                                <span class="n">lamb_spread</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">comp2</span><span class="p">,</span> <span class="s">&#39;on&#39;</span><span class="p">)</span> <span class="o">/</span> <span class="n">tof_factor</span>
368
369        <span class="c"># for wavelength spread</span>
370        <span class="c"># reserve for 1d calculation</span>
371        <span class="n">sigma_wave_2</span><span class="p">,</span> <span class="n">sigma_wave_2_1d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_variance_wave</span><span class="p">(</span><span class="n">A_value</span><span class="p">,</span>
372                                          <span class="n">radius</span><span class="p">,</span> <span class="n">l_two</span><span class="p">,</span> <span class="n">lamb_spread</span><span class="p">,</span>
373                                          <span class="n">phi</span><span class="p">,</span> <span class="s">&#39;phi&#39;</span><span class="p">,</span> <span class="s">&#39;on&#39;</span><span class="p">)</span>
374        <span class="n">sigma_wave_2</span> <span class="o">/=</span> <span class="n">tof_factor</span>
375        <span class="n">sigma_wave_2_1d</span> <span class="o">/=</span> <span class="n">tof_factor</span>
376        <span class="c"># for 1d</span>
377        <span class="n">variance_1d_2</span> <span class="o">=</span> <span class="p">(</span><span class="n">sigma_2</span> <span class="o">+</span> <span class="n">sigma_2grav1d</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> <span class="o">+</span> <span class="n">sigma_wave_2_1d</span>
378        <span class="c"># normalize</span>
379        <span class="n">variance_1d_2</span> <span class="o">=</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">variance_1d_2</span> <span class="o">/</span> <span class="mi">12</span>
380       
381        <span class="c"># for 2d</span>
382        <span class="c">#sigma_2 =  knot*sqrt(sigma_2/12)</span>
383        <span class="c">#sigma_2 += sigma_wave_2</span>
384        <span class="c"># normalize</span>
385        <span class="n">sigma_2</span> <span class="o">=</span> <span class="n">knot</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_2</span> <span class="o">/</span> <span class="mi">12</span><span class="p">)</span>
386        <span class="n">sigma1d</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">variance_1d_1</span> <span class="o">+</span> <span class="n">variance_1d_2</span><span class="p">)</span>
387        <span class="c"># set sigmas</span>
388        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1</span> <span class="o">=</span> <span class="n">sigma_1</span>
389        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_lamd</span> <span class="o">=</span> <span class="n">sigma_r</span>
390        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_2</span> <span class="o">=</span> <span class="n">sigma_2</span>
391        <span class="bp">self</span><span class="o">.</span><span class="n">sigma_1d</span> <span class="o">=</span> <span class="n">sigma1d</span>
392        <span class="k">return</span> <span class="n">qr_value</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span> <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">,</span> <span class="n">sigma1d</span>
393    </div>
394    <span class="k">def</span> <span class="nf">_within_detector_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">):</span>
395        <span class="sd">&quot;&quot;&quot;</span>
396<span class="sd">        check if qvalues are within detector range</span>
397<span class="sd">        &quot;&quot;&quot;</span>
398        <span class="c"># detector range</span>
399        <span class="n">detector_qx_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_min</span>
400        <span class="n">detector_qx_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_max</span>
401        <span class="n">detector_qy_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_min</span>
402        <span class="n">detector_qy_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_max</span>
403        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">qxmin_limit</span> <span class="o">&gt;</span> <span class="n">detector_qx_min</span><span class="p">:</span>
404            <span class="bp">self</span><span class="o">.</span><span class="n">qxmin_limit</span> <span class="o">=</span> <span class="n">detector_qx_min</span>
405        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">qxmax_limit</span> <span class="o">&lt;</span> <span class="n">detector_qx_max</span><span class="p">:</span>
406            <span class="bp">self</span><span class="o">.</span><span class="n">qxmax_limit</span> <span class="o">=</span> <span class="n">detector_qx_max</span>
407        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">qymin_limit</span> <span class="o">&gt;</span> <span class="n">detector_qy_min</span><span class="p">:</span>
408            <span class="bp">self</span><span class="o">.</span><span class="n">qymin_limit</span> <span class="o">=</span> <span class="n">detector_qy_min</span>
409        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">qymax_limit</span> <span class="o">&lt;</span> <span class="n">detector_qy_max</span><span class="p">:</span>
410            <span class="bp">self</span><span class="o">.</span><span class="n">qymax_limit</span> <span class="o">=</span> <span class="n">detector_qy_max</span>
411        <span class="k">if</span> <span class="n">qx_value</span> <span class="o">&lt;</span> <span class="n">detector_qx_min</span> <span class="ow">or</span> <span class="n">qx_value</span> <span class="o">&gt;</span> <span class="n">detector_qx_max</span><span class="p">:</span>
412            <span class="k">return</span> <span class="bp">False</span>
413        <span class="k">if</span> <span class="n">qy_value</span> <span class="o">&lt;</span> <span class="n">detector_qy_min</span> <span class="ow">or</span> <span class="n">qy_value</span> <span class="o">&gt;</span> <span class="n">detector_qy_max</span><span class="p">:</span>
414            <span class="k">return</span> <span class="bp">False</span>
415        <span class="k">return</span> <span class="bp">True</span>
416   
417<div class="viewcode-block" id="ResolutionCalculator.get_image"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_image">[docs]</a>    <span class="k">def</span> <span class="nf">get_image</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">,</span>
418                  <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">,</span>
419                  <span class="n">coord</span><span class="o">=</span><span class="s">&#39;cartesian&#39;</span><span class="p">,</span> <span class="n">full_cal</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
420        <span class="sd">&quot;&quot;&quot;</span>
421<span class="sd">        Get the resolution in polar coordinate ready to plot</span>
422<span class="sd">        : qx_value: qx_value value</span>
423<span class="sd">        : qy_value: qy_value value</span>
424<span class="sd">        : sigma_1: variance in r direction</span>
425<span class="sd">        : sigma_2: variance in phi direction</span>
426<span class="sd">        : coord: coordinate system of image, &#39;polar&#39; or &#39;cartesian&#39;</span>
427<span class="sd">        &quot;&quot;&quot;</span>
428        <span class="c"># Get  qx_max and qy_max...</span>
429        <span class="bp">self</span><span class="o">.</span><span class="n">_get_detector_qxqy_pixels</span><span class="p">()</span>
430       
431        <span class="n">qr_value</span><span class="p">,</span> <span class="n">phi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_polar_value</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">)</span>
432
433        <span class="c"># Check whether the q value is within the detector range</span>
434        <span class="c">#msg = &quot;Invalid input: Q value out of the detector range...&quot;</span>
435        <span class="k">if</span> <span class="n">qx_min</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span><span class="p">:</span>
436            <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span> <span class="o">=</span> <span class="n">qx_min</span>
437            <span class="c">#raise ValueError, msg</span>
438        <span class="k">if</span> <span class="n">qx_max</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span><span class="p">:</span>
439            <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span> <span class="o">=</span> <span class="n">qx_max</span>
440            <span class="c">#raise ValueError, msg</span>
441        <span class="k">if</span> <span class="n">qy_min</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span><span class="p">:</span>
442            <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span> <span class="o">=</span> <span class="n">qy_min</span>
443            <span class="c">#raise ValueError, msg</span>
444        <span class="k">if</span> <span class="n">qy_max</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span><span class="p">:</span>
445            <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span> <span class="o">=</span> <span class="n">qy_max</span>
446            <span class="c">#raise ValueError, msg</span>
447        <span class="k">if</span> <span class="ow">not</span> <span class="n">full_cal</span><span class="p">:</span>
448            <span class="k">return</span> <span class="bp">None</span>
449 
450        <span class="c"># Make an empty graph in the detector scale</span>
451        <span class="n">dx_size</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1000</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
452        <span class="n">dy_size</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1000</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
453        <span class="n">x_val</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span><span class="p">,</span> <span class="n">dx_size</span><span class="p">)</span>
454        <span class="n">y_val</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span><span class="p">,</span> <span class="o">-</span><span class="n">dy_size</span><span class="p">)</span>
455        <span class="n">q_1</span><span class="p">,</span> <span class="n">q_2</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">meshgrid</span><span class="p">(</span><span class="n">x_val</span><span class="p">,</span> <span class="n">y_val</span><span class="p">)</span>
456        <span class="c">#q_phi = numpy.arctan(q_1,q_2)</span>
457        <span class="c"># check whether polar or cartesian</span>
458        <span class="k">if</span> <span class="n">coord</span> <span class="o">==</span> <span class="s">&#39;polar&#39;</span><span class="p">:</span>
459            <span class="c"># Find polar values</span>
460            <span class="n">qr_value</span><span class="p">,</span> <span class="n">phi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_polar_value</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">)</span>
461            <span class="n">q_1</span><span class="p">,</span> <span class="n">q_2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rotate_z</span><span class="p">(</span><span class="n">q_1</span><span class="p">,</span> <span class="n">q_2</span><span class="p">,</span> <span class="n">phi</span><span class="p">)</span>
462            <span class="n">qc_1</span> <span class="o">=</span> <span class="n">qr_value</span>
463            <span class="n">qc_2</span> <span class="o">=</span> <span class="mf">0.0</span>
464            <span class="c"># Calculate the 2D Gaussian distribution image</span>
465            <span class="n">image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gaussian2d_polar</span><span class="p">(</span><span class="n">q_1</span><span class="p">,</span> <span class="n">q_2</span><span class="p">,</span> <span class="n">qc_1</span><span class="p">,</span> <span class="n">qc_2</span><span class="p">,</span>
466                                 <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">)</span>
467        <span class="k">else</span><span class="p">:</span>
468            <span class="c"># catesian coordinate</span>
469            <span class="c"># qx_center</span>
470            <span class="n">qc_1</span> <span class="o">=</span> <span class="n">qx_value</span>
471            <span class="c"># qy_center</span>
472            <span class="n">qc_2</span> <span class="o">=</span> <span class="n">qy_value</span>
473           
474            <span class="c"># Calculate the 2D Gaussian distribution image</span>
475            <span class="n">image</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gaussian2d</span><span class="p">(</span><span class="n">q_1</span><span class="p">,</span> <span class="n">q_2</span><span class="p">,</span> <span class="n">qc_1</span><span class="p">,</span> <span class="n">qc_2</span><span class="p">,</span>
476                                     <span class="n">sigma_1</span><span class="p">,</span> <span class="n">sigma_2</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">)</span>
477        <span class="c"># out side of detector</span>
478        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_within_detector_range</span><span class="p">(</span><span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">):</span>
479            <span class="n">image</span> <span class="o">*=</span> <span class="mf">0.0</span>
480            <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span> <span class="o">=</span> <span class="mf">0.0</span>
481            <span class="c">#return self.image</span>
482
483        <span class="c"># Add it if there are more than one inputs.</span>
484        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
485            <span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span> <span class="o">+=</span> <span class="n">image</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
486        <span class="k">else</span><span class="p">:</span>
487            <span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span> <span class="o">=</span> <span class="n">image</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">intensity</span>
488       
489        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_lam</span>
490    </div>
491<div class="viewcode-block" id="ResolutionCalculator.plot_image"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.plot_image">[docs]</a>    <span class="k">def</span> <span class="nf">plot_image</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image</span><span class="p">):</span>
492        <span class="sd">&quot;&quot;&quot;</span>
493<span class="sd">        Plot image using pyplot</span>
494<span class="sd">        : image: 2d resolution image</span>
495<span class="sd">        </span>
496<span class="sd">        : return plt: pylab object</span>
497<span class="sd">        &quot;&quot;&quot;</span>
498        <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
499
500        <span class="bp">self</span><span class="o">.</span><span class="n">plot</span> <span class="o">=</span> <span class="n">plt</span>
501        <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s">&#39;$</span><span class="se">\\</span><span class="s">rm{Q}_{x} [A^{-1}]$&#39;</span><span class="p">)</span>
502        <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s">&#39;$</span><span class="se">\\</span><span class="s">rm{Q}_{y} [A^{-1}]$&#39;</span><span class="p">)</span>
503        <span class="c"># Max value of the image</span>
504        <span class="c"># max = numpy.max(image)</span>
505        <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_detector_qrange</span><span class="p">()</span>
506
507        <span class="c"># Image</span>
508        <span class="n">im</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">image</span><span class="p">,</span>
509                <span class="n">extent</span><span class="o">=</span><span class="p">[</span><span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span><span class="p">])</span>
510
511        <span class="c"># bilinear interpolation to make it smoother</span>
512        <span class="n">im</span><span class="o">.</span><span class="n">set_interpolation</span><span class="p">(</span><span class="s">&#39;bilinear&#39;</span><span class="p">)</span>
513
514        <span class="k">return</span> <span class="n">plt</span>
515    </div>
516<div class="viewcode-block" id="ResolutionCalculator.reset_image"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.reset_image">[docs]</a>    <span class="k">def</span> <span class="nf">reset_image</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
517        <span class="sd">&quot;&quot;&quot;</span>
518<span class="sd">        Reset image to default (=[])</span>
519<span class="sd">        &quot;&quot;&quot;</span>
520        <span class="bp">self</span><span class="o">.</span><span class="n">image</span> <span class="o">=</span> <span class="p">[]</span>
521        </div>
522<div class="viewcode-block" id="ResolutionCalculator.get_variance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_variance">[docs]</a>    <span class="k">def</span> <span class="nf">get_variance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">[],</span> <span class="n">distance</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">comp</span><span class="o">=</span><span class="s">&#39;radial&#39;</span><span class="p">):</span>
523        <span class="sd">&quot;&quot;&quot;</span>
524<span class="sd">        Get the variance when the slit/pinhole size is given</span>
525<span class="sd">        : size: list that can be one(diameter for circular) or two components(lengths for rectangular)</span>
526<span class="sd">        : distance: [z, x] where z along the incident beam, x // qx_value</span>
527<span class="sd">        : comp: direction of the sigma; can be &#39;phi&#39;, &#39;y&#39;, &#39;x&#39;, and &#39;radial&#39;</span>
528<span class="sd">        </span>
529<span class="sd">        : return variance: sigma^2</span>
530<span class="sd">        &quot;&quot;&quot;</span>
531        <span class="c"># check the length of size (list)</span>
532        <span class="n">len_size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
533       
534        <span class="c"># define sigma component direction</span>
535        <span class="k">if</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;radial&#39;</span><span class="p">:</span>
536            <span class="n">phi_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>
537            <span class="n">phi_y</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>
538        <span class="k">elif</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;phi&#39;</span><span class="p">:</span>
539            <span class="n">phi_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>
540            <span class="n">phi_y</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>
541        <span class="k">elif</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;x&#39;</span><span class="p">:</span>
542            <span class="n">phi_x</span> <span class="o">=</span> <span class="mi">1</span>
543            <span class="n">phi_y</span> <span class="o">=</span> <span class="mi">0</span>
544        <span class="k">elif</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;y&#39;</span><span class="p">:</span>
545            <span class="n">phi_x</span> <span class="o">=</span> <span class="mi">0</span>
546            <span class="n">phi_y</span> <span class="o">=</span> <span class="mi">1</span>
547        <span class="k">else</span><span class="p">:</span>
548            <span class="n">phi_x</span> <span class="o">=</span> <span class="mi">0</span>
549            <span class="n">phi_y</span> <span class="o">=</span> <span class="mi">0</span>
550        <span class="c"># calculate each component</span>
551        <span class="c"># for pinhole w/ radius = size[0]/2</span>
552        <span class="k">if</span> <span class="n">len_size</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
553            <span class="n">x_comp</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">*</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
554            <span class="n">y_comp</span> <span class="o">=</span> <span class="mi">0</span>
555        <span class="c"># for rectangular slit</span>
556        <span class="k">elif</span> <span class="n">len_size</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
557            <span class="n">x_comp</span> <span class="o">=</span> <span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">phi_x</span>
558            <span class="n">y_comp</span> <span class="o">=</span> <span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="n">phi_y</span>
559        <span class="c"># otherwise</span>
560        <span class="k">else</span><span class="p">:</span>
561            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot; Improper input...&quot;</span>
562        <span class="c"># get them squared</span>
563        <span class="n">sigma</span>  <span class="o">=</span> <span class="n">x_comp</span> <span class="o">*</span> <span class="n">x_comp</span>
564        <span class="n">sigma</span> <span class="o">+=</span> <span class="n">y_comp</span> <span class="o">*</span> <span class="n">y_comp</span>
565        <span class="c"># normalize by distance</span>
566        <span class="n">sigma</span> <span class="o">/=</span> <span class="p">(</span><span class="n">distance</span> <span class="o">*</span> <span class="n">distance</span><span class="p">)</span>
567
568        <span class="k">return</span> <span class="n">sigma</span>
569</div>
570<div class="viewcode-block" id="ResolutionCalculator.get_variance_wave"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_variance_wave">[docs]</a>    <span class="k">def</span> <span class="nf">get_variance_wave</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A_value</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">distance</span><span class="p">,</span> <span class="n">spread</span><span class="p">,</span> <span class="n">phi</span><span class="p">,</span>
571                          <span class="n">comp</span><span class="o">=</span><span class="s">&#39;radial&#39;</span><span class="p">,</span> <span class="n">switch</span><span class="o">=</span><span class="s">&#39;on&#39;</span><span class="p">):</span>
572        <span class="sd">&quot;&quot;&quot;</span>
573<span class="sd">        Get the variance when the wavelength spread is given</span>
574<span class="sd">        </span>
575<span class="sd">        : radius: the radial distance from the beam center to the pix of q</span>
576<span class="sd">        : distance: sample to detector distance</span>
577<span class="sd">        : spread: wavelength spread (ratio)</span>
578<span class="sd">        : comp: direction of the sigma; can be &#39;phi&#39;, &#39;y&#39;, &#39;x&#39;, and &#39;radial&#39;</span>
579<span class="sd">        </span>
580<span class="sd">        : return variance: sigma^2 for 2d, sigma^2 for 1d [tuple]</span>
581<span class="sd">        &quot;&quot;&quot;</span>
582        <span class="k">if</span> <span class="n">switch</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;off&#39;</span><span class="p">:</span>
583            <span class="k">return</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
584        <span class="c"># check the singular point</span>
585        <span class="k">if</span> <span class="n">distance</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;phi&#39;</span><span class="p">:</span>
586            <span class="k">return</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
587        <span class="k">else</span><span class="p">:</span>
588            <span class="c"># calculate sigma^2 for 1d</span>
589            <span class="n">sigma1d</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">radius</span><span class="o">/</span><span class="n">distance</span><span class="o">*</span><span class="n">spread</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
590            <span class="k">if</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;x&#39;</span><span class="p">:</span>
591                <span class="n">sigma1d</span> <span class="o">*=</span> <span class="p">(</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><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>
592            <span class="k">elif</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;y&#39;</span><span class="p">:</span>
593                <span class="n">sigma1d</span> <span class="o">*=</span> <span class="p">(</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><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>
594            <span class="k">else</span><span class="p">:</span>
595                <span class="n">sigma1d</span> <span class="o">*=</span> <span class="mi">1</span>
596            <span class="c"># sigma^2 for 2d</span>
597            <span class="c"># shift the coordinate due to the gravitational shift</span>
598            <span class="n">rad_x</span> <span class="o">=</span> <span class="n">radius</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>
599            <span class="n">rad_y</span> <span class="o">=</span> <span class="n">A_value</span> <span class="o">-</span> <span class="n">radius</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>
600            <span class="n">radius</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">rad_x</span> <span class="o">*</span> <span class="n">rad_x</span> <span class="o">+</span> <span class="n">rad_y</span> <span class="o">*</span> <span class="n">rad_y</span><span class="p">)</span>
601            <span class="c"># new phi</span>
602            <span class="n">phi</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">-</span><span class="n">rad_y</span><span class="p">,</span> <span class="n">rad_x</span><span class="p">)</span>
603            <span class="bp">self</span><span class="o">.</span><span class="n">gravity_phi</span> <span class="o">=</span> <span class="n">phi</span>
604            <span class="c"># calculate sigma^2</span>
605            <span class="n">sigma</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">radius</span><span class="o">/</span><span class="n">distance</span><span class="o">*</span><span class="n">spread</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
606            <span class="k">if</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;x&#39;</span><span class="p">:</span>
607                <span class="n">sigma</span> <span class="o">*=</span> <span class="p">(</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><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>
608            <span class="k">elif</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;y&#39;</span><span class="p">:</span>
609                <span class="n">sigma</span> <span class="o">*=</span> <span class="p">(</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><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>
610            <span class="k">else</span><span class="p">:</span>
611                <span class="n">sigma</span> <span class="o">*=</span> <span class="mi">1</span>
612               
613            <span class="k">return</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">sigma1d</span>
614</div>
615<div class="viewcode-block" id="ResolutionCalculator.get_variance_gravity"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_variance_gravity">[docs]</a>    <span class="k">def</span> <span class="nf">get_variance_gravity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s_distance</span><span class="p">,</span> <span class="n">d_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">,</span> <span class="n">spread</span><span class="p">,</span>
616                             <span class="n">phi</span><span class="p">,</span> <span class="n">comp</span><span class="o">=</span><span class="s">&#39;radial&#39;</span><span class="p">,</span> <span class="n">switch</span><span class="o">=</span><span class="s">&#39;on&#39;</span><span class="p">):</span>
617        <span class="sd">&quot;&quot;&quot;</span>
618<span class="sd">        Get the variance from gravity when the wavelength spread is given</span>
619<span class="sd">        </span>
620<span class="sd">        : s_distance: source to sample distance</span>
621<span class="sd">        : d_distance: sample to detector distance</span>
622<span class="sd">        : wavelength: wavelength</span>
623<span class="sd">        : spread: wavelength spread (ratio)</span>
624<span class="sd">        : comp: direction of the sigma; can be &#39;phi&#39;, &#39;y&#39;, &#39;x&#39;, and &#39;radial&#39;</span>
625<span class="sd">        </span>
626<span class="sd">        : return variance: sigma^2</span>
627<span class="sd">        &quot;&quot;&quot;</span>
628        <span class="k">if</span> <span class="n">switch</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;off&#39;</span><span class="p">:</span>
629            <span class="k">return</span> <span class="mi">0</span>
630        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">:</span>
631            <span class="k">return</span> <span class="mi">0</span>
632        <span class="c"># check the singular point</span>
633        <span class="k">if</span> <span class="n">d_distance</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">comp</span> <span class="o">==</span> <span class="s">&#39;x&#39;</span><span class="p">:</span>
634            <span class="k">return</span> <span class="mi">0</span>
635        <span class="k">else</span><span class="p">:</span>
636            <span class="n">a_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cal_A_value</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">s_distance</span><span class="p">,</span> <span class="n">d_distance</span><span class="p">)</span>
637            <span class="c"># calculate sigma^2</span>
638            <span class="n">sigma</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">a_value</span> <span class="o">/</span> <span class="n">d_distance</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
639            <span class="n">sigma</span> <span class="o">*=</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">wavelength</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
640            <span class="n">sigma</span> <span class="o">*=</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">spread</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
641            <span class="n">sigma</span> <span class="o">*=</span> <span class="mi">8</span>
642           
643            <span class="c"># only for the polar coordinate</span>
644            <span class="c">#if comp == &#39;radial&#39;:</span>
645            <span class="c">#    sigma *= (math.sin(phi) * math.sin(phi))</span>
646            <span class="c">#elif comp == &#39;phi&#39;:</span>
647            <span class="c">#    sigma *= (math.cos(phi) * math.cos(phi))</span>
648           
649            <span class="k">return</span> <span class="n">sigma</span>
650    </div>
651    <span class="k">def</span> <span class="nf">_cal_A_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lamda</span><span class="p">,</span> <span class="n">s_distance</span><span class="p">,</span> <span class="n">d_distance</span><span class="p">):</span>
652        <span class="sd">&quot;&quot;&quot;</span>
653<span class="sd">        Calculate A value for gravity</span>
654<span class="sd">        </span>
655<span class="sd">        : s_distance: source to sample distance</span>
656<span class="sd">        : d_distance: sample to detector distance</span>
657<span class="sd">        &quot;&quot;&quot;</span>
658        <span class="c"># neutron mass in cgs unit</span>
659        <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_neutron_mass</span><span class="p">()</span>
660        <span class="c"># plank constant in cgs unit</span>
661        <span class="n">h_constant</span> <span class="o">=</span> <span class="n">_PLANK_H</span>
662        <span class="c"># gravity in cgs unit</span>
663        <span class="n">gravy</span> <span class="o">=</span> <span class="n">_GRAVITY</span>
664        <span class="c"># m/h</span>
665        <span class="n">m_over_h</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">/</span> <span class="n">h_constant</span>
666        <span class="c"># A value</span>
667        <span class="n">a_value</span> <span class="o">=</span> <span class="n">d_distance</span> <span class="o">*</span> <span class="p">(</span><span class="n">s_distance</span> <span class="o">+</span> <span class="n">d_distance</span><span class="p">)</span>
668        <span class="n">a_value</span> <span class="o">*=</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">m_over_h</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
669        <span class="n">a_value</span> <span class="o">*=</span> <span class="n">gravy</span>
670        <span class="c"># unit correction (1/cm to 1/A) for A and d_distance below</span>
671        <span class="n">a_value</span> <span class="o">*=</span> <span class="mf">1.0E-16</span>
672        <span class="c"># if lamda is give (broad meanning of A)  return 2* lamda^2 * A</span>
673        <span class="k">if</span> <span class="n">lamda</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
674            <span class="n">a_value</span> <span class="o">*=</span> <span class="p">(</span><span class="mi">4</span> <span class="o">*</span> <span class="n">lamda</span> <span class="o">*</span> <span class="n">lamda</span><span class="p">)</span>
675        <span class="k">return</span> <span class="n">a_value</span>
676   
677<div class="viewcode-block" id="ResolutionCalculator.get_intensity"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_intensity">[docs]</a>    <span class="k">def</span> <span class="nf">get_intensity</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
678        <span class="sd">&quot;&quot;&quot;</span>
679<span class="sd">        Get intensity</span>
680<span class="sd">        &quot;&quot;&quot;</span>
681        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">intensity</span>
682</div>
683<div class="viewcode-block" id="ResolutionCalculator.get_wavelength"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_wavelength">[docs]</a>    <span class="k">def</span> <span class="nf">get_wavelength</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
684        <span class="sd">&quot;&quot;&quot;</span>
685<span class="sd">        Get wavelength</span>
686<span class="sd">        &quot;&quot;&quot;</span>
687        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">wavelength</span>
688   
689    <span class="c">#TODO: why was this method duplicated?</span>
690    <span class="c">#def get_spectrum(self):</span>
691    <span class="c">#    &quot;&quot;&quot;</span>
692    <span class="c">#    Get spectrum</span>
693    <span class="c">#    &quot;&quot;&quot;</span>
694    <span class="c">#    return self.wave.spectrum</span>
695    </div>
696<div class="viewcode-block" id="ResolutionCalculator.get_default_spectrum"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_default_spectrum">[docs]</a>    <span class="k">def</span> <span class="nf">get_default_spectrum</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
697        <span class="sd">&quot;&quot;&quot;</span>
698<span class="sd">        Get default_spectrum</span>
699<span class="sd">        &quot;&quot;&quot;</span>
700        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">get_default_spectrum</span><span class="p">()</span>
701    </div>
702<div class="viewcode-block" id="ResolutionCalculator.get_spectrum"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_spectrum">[docs]</a>    <span class="k">def</span> <span class="nf">get_spectrum</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
703        <span class="sd">&quot;&quot;&quot;</span>
704<span class="sd">        Get _spectrum</span>
705<span class="sd">        &quot;&quot;&quot;</span>
706        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">get_spectrum</span><span class="p">()</span>
707         </div>
708<div class="viewcode-block" id="ResolutionCalculator.get_wavelength_spread"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_wavelength_spread">[docs]</a>    <span class="k">def</span> <span class="nf">get_wavelength_spread</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
709        <span class="sd">&quot;&quot;&quot;</span>
710<span class="sd">        Get wavelength spread</span>
711<span class="sd">        &quot;&quot;&quot;</span>
712        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">wavelength_spread</span>
713    </div>
714<div class="viewcode-block" id="ResolutionCalculator.get_neutron_mass"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_neutron_mass">[docs]</a>    <span class="k">def</span> <span class="nf">get_neutron_mass</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
715        <span class="sd">&quot;&quot;&quot;</span>
716<span class="sd">        Get Neutron mass</span>
717<span class="sd">        &quot;&quot;&quot;</span>
718        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">mass</span>
719    </div>
720<div class="viewcode-block" id="ResolutionCalculator.get_source_aperture_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_source_aperture_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_source_aperture_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
721        <span class="sd">&quot;&quot;&quot;</span>
722<span class="sd">        Get source aperture size</span>
723<span class="sd">        &quot;&quot;&quot;</span>
724        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">source_size</span>
725    </div>
726<div class="viewcode-block" id="ResolutionCalculator.get_sample_aperture_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_sample_aperture_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_sample_aperture_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
727        <span class="sd">&quot;&quot;&quot;</span>
728<span class="sd">        Get sample aperture size</span>
729<span class="sd">        &quot;&quot;&quot;</span>
730        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">sample_size</span>
731    </div>
732<div class="viewcode-block" id="ResolutionCalculator.get_detector_pix_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_detector_pix_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_detector_pix_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
733        <span class="sd">&quot;&quot;&quot;</span>
734<span class="sd">        Get detector pixel size</span>
735<span class="sd">        &quot;&quot;&quot;</span>
736        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">pix_size</span>
737       </div>
738<div class="viewcode-block" id="ResolutionCalculator.get_detector_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_detector_size">[docs]</a>    <span class="k">def</span> <span class="nf">get_detector_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
739        <span class="sd">&quot;&quot;&quot;</span>
740<span class="sd">        Get detector size</span>
741<span class="sd">        &quot;&quot;&quot;</span>
742        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">size</span>
743     </div>
744<div class="viewcode-block" id="ResolutionCalculator.get_source2sample_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_source2sample_distance">[docs]</a>    <span class="k">def</span> <span class="nf">get_source2sample_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
745        <span class="sd">&quot;&quot;&quot;</span>
746<span class="sd">        Get detector source2sample_distance</span>
747<span class="sd">        &quot;&quot;&quot;</span>
748        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">sample_distance</span>
749    </div>
750<div class="viewcode-block" id="ResolutionCalculator.get_sample2sample_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_sample2sample_distance">[docs]</a>    <span class="k">def</span> <span class="nf">get_sample2sample_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
751        <span class="sd">&quot;&quot;&quot;</span>
752<span class="sd">        Get detector sampleslitsample_distance</span>
753<span class="sd">        &quot;&quot;&quot;</span>
754        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample</span><span class="o">.</span><span class="n">distance</span>
755    </div>
756<div class="viewcode-block" id="ResolutionCalculator.get_sample2detector_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_sample2detector_distance">[docs]</a>    <span class="k">def</span> <span class="nf">get_sample2detector_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
757        <span class="sd">&quot;&quot;&quot;</span>
758<span class="sd">        Get detector sample2detector_distance</span>
759<span class="sd">        &quot;&quot;&quot;</span>
760        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">distance</span>
761    </div>
762<div class="viewcode-block" id="ResolutionCalculator.set_intensity"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_intensity">[docs]</a>    <span class="k">def</span> <span class="nf">set_intensity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intensity</span><span class="p">):</span>
763        <span class="sd">&quot;&quot;&quot;</span>
764<span class="sd">        Set intensity</span>
765<span class="sd">        &quot;&quot;&quot;</span>
766        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_intensity</span><span class="p">(</span><span class="n">intensity</span><span class="p">)</span>
767        </div>
768<div class="viewcode-block" id="ResolutionCalculator.set_wave"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_wave">[docs]</a>    <span class="k">def</span> <span class="nf">set_wave</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">):</span>
769        <span class="sd">&quot;&quot;&quot;</span>
770<span class="sd">        Set wavelength list or wavelength</span>
771<span class="sd">        &quot;&quot;&quot;</span>
772        <span class="k">if</span> <span class="n">wavelength</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;list&#39;</span><span class="p">:</span>
773            <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_list</span><span class="p">(</span><span class="n">wavelength</span><span class="p">)</span>
774        <span class="k">elif</span> <span class="n">wavelength</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;float&#39;</span><span class="p">:</span>
775            <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_list</span><span class="p">([</span><span class="n">wavelength</span><span class="p">])</span>
776            <span class="c">#self.set_wavelength(wavelength)</span>
777        <span class="k">else</span><span class="p">:</span>
778            <span class="k">raise</span>
779    </div>
780<div class="viewcode-block" id="ResolutionCalculator.set_wave_spread"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_wave_spread">[docs]</a>    <span class="k">def</span> <span class="nf">set_wave_spread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength_spread</span><span class="p">):</span>
781        <span class="sd">&quot;&quot;&quot;</span>
782<span class="sd">        Set wavelength spread  or wavelength spread</span>
783<span class="sd">        &quot;&quot;&quot;</span>
784        <span class="k">if</span> <span class="n">wavelength_spread</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;list&#39;</span><span class="p">:</span>
785            <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_spread_list</span><span class="p">(</span><span class="n">wavelength_spread</span><span class="p">)</span>
786        <span class="k">elif</span> <span class="n">wavelength_spread</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;float&#39;</span><span class="p">:</span>
787            <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_spread_list</span><span class="p">([</span><span class="n">wavelength_spread</span><span class="p">])</span>
788            <span class="c">#self.set_wavelength_spread(wavelength_spread)</span>
789        <span class="k">else</span><span class="p">:</span>
790            <span class="k">raise</span>
791        </div>
792<div class="viewcode-block" id="ResolutionCalculator.set_wavelength"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_wavelength">[docs]</a>    <span class="k">def</span> <span class="nf">set_wavelength</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">):</span>
793        <span class="sd">&quot;&quot;&quot;</span>
794<span class="sd">        Set wavelength</span>
795<span class="sd">        &quot;&quot;&quot;</span>
796        <span class="bp">self</span><span class="o">.</span><span class="n">wavelength</span> <span class="o">=</span> <span class="n">wavelength</span>
797        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wavelength</span><span class="p">(</span><span class="n">wavelength</span><span class="p">)</span>
798        </div>
799<div class="viewcode-block" id="ResolutionCalculator.set_spectrum"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_spectrum">[docs]</a>    <span class="k">def</span> <span class="nf">set_spectrum</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spectrum</span><span class="p">):</span>
800        <span class="sd">&quot;&quot;&quot;</span>
801<span class="sd">        Set spectrum</span>
802<span class="sd">        &quot;&quot;&quot;</span>
803        <span class="bp">self</span><span class="o">.</span><span class="n">spectrum</span> <span class="o">=</span> <span class="n">spectrum</span>
804        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_spectrum</span><span class="p">(</span><span class="n">spectrum</span><span class="p">)</span>
805          </div>
806<div class="viewcode-block" id="ResolutionCalculator.set_wavelength_spread"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_wavelength_spread">[docs]</a>    <span class="k">def</span> <span class="nf">set_wavelength_spread</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength_spread</span><span class="p">):</span>
807        <span class="sd">&quot;&quot;&quot;</span>
808<span class="sd">        Set wavelength spread</span>
809<span class="sd">        &quot;&quot;&quot;</span>
810        <span class="bp">self</span><span class="o">.</span><span class="n">wavelength_spread</span> <span class="o">=</span> <span class="n">wavelength_spread</span>
811        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wavelength_spread</span><span class="p">(</span><span class="n">wavelength_spread</span><span class="p">)</span>
812        </div>
813<div class="viewcode-block" id="ResolutionCalculator.set_wave_list"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_wave_list">[docs]</a>    <span class="k">def</span> <span class="nf">set_wave_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wavelength_list</span><span class="p">,</span> <span class="n">wavelengthspread_list</span><span class="p">):</span>
814        <span class="sd">&quot;&quot;&quot;</span>
815<span class="sd">        Set wavelength and its spread list</span>
816<span class="sd">        &quot;&quot;&quot;</span>
817        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_list</span><span class="p">(</span><span class="n">wavelength_list</span><span class="p">)</span>
818        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_wave_spread_list</span><span class="p">(</span><span class="n">wavelengthspread_list</span><span class="p">)</span>
819    </div>
820<div class="viewcode-block" id="ResolutionCalculator.get_wave_list"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_wave_list">[docs]</a>    <span class="k">def</span> <span class="nf">get_wave_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
821        <span class="sd">&quot;&quot;&quot;</span>
822<span class="sd">        Set wavelength spread</span>
823<span class="sd">        &quot;&quot;&quot;</span>
824        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">get_wave_list</span><span class="p">()</span>
825    </div>
826<div class="viewcode-block" id="ResolutionCalculator.get_intensity_list"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_intensity_list">[docs]</a>    <span class="k">def</span> <span class="nf">get_intensity_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
827        <span class="sd">&quot;&quot;&quot;</span>
828<span class="sd">        Set wavelength spread</span>
829<span class="sd">        &quot;&quot;&quot;</span>
830        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">get_intensity_list</span><span class="p">()</span>
831           </div>
832<div class="viewcode-block" id="ResolutionCalculator.set_source_aperture_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_source_aperture_size">[docs]</a>    <span class="k">def</span> <span class="nf">set_source_aperture_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
833        <span class="sd">&quot;&quot;&quot;</span>
834<span class="sd">        Set source aperture size</span>
835<span class="sd">        </span>
836<span class="sd">        : param size: [dia_value] or [x_value, y_value]</span>
837<span class="sd">        &quot;&quot;&quot;</span>
838        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
839            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;The length of the size must be one or two.&quot;</span>
840        <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">set_source_size</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
841        </div>
842<div class="viewcode-block" id="ResolutionCalculator.set_neutron_mass"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_neutron_mass">[docs]</a>    <span class="k">def</span> <span class="nf">set_neutron_mass</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mass</span><span class="p">):</span>
843        <span class="sd">&quot;&quot;&quot;</span>
844<span class="sd">        Set Neutron mass</span>
845<span class="sd">        &quot;&quot;&quot;</span>
846        <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">set_mass</span><span class="p">(</span><span class="n">mass</span><span class="p">)</span>
847        <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">=</span> <span class="n">mass</span>
848        </div>
849<div class="viewcode-block" id="ResolutionCalculator.set_sample_aperture_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_sample_aperture_size">[docs]</a>    <span class="k">def</span> <span class="nf">set_sample_aperture_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
850        <span class="sd">&quot;&quot;&quot;</span>
851<span class="sd">        Set sample aperture size</span>
852<span class="sd">        </span>
853<span class="sd">        : param size: [dia_value] or [xheight_value, yheight_value]</span>
854<span class="sd">        &quot;&quot;&quot;</span>
855        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">size</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
856            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;The length of the size must be one or two.&quot;</span>
857        <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">set_sample_size</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
858    </div>
859<div class="viewcode-block" id="ResolutionCalculator.set_detector_pix_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_detector_pix_size">[docs]</a>    <span class="k">def</span> <span class="nf">set_detector_pix_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
860        <span class="sd">&quot;&quot;&quot;</span>
861<span class="sd">        Set detector pixel size</span>
862<span class="sd">        &quot;&quot;&quot;</span>
863        <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">set_pix_size</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
864        </div>
865<div class="viewcode-block" id="ResolutionCalculator.set_detector_size"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_detector_size">[docs]</a>    <span class="k">def</span> <span class="nf">set_detector_size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
866        <span class="sd">&quot;&quot;&quot;</span>
867<span class="sd">        Set detector size in number of pixels</span>
868<span class="sd">        : param size: [pixel_nums] or [x_pix_num, yx_pix_num]</span>
869<span class="sd">        &quot;&quot;&quot;</span>
870        <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">set_size</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
871        </div>
872<div class="viewcode-block" id="ResolutionCalculator.set_source2sample_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_source2sample_distance">[docs]</a>    <span class="k">def</span> <span class="nf">set_source2sample_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distance</span><span class="p">):</span>
873        <span class="sd">&quot;&quot;&quot;</span>
874<span class="sd">        Set detector source2sample_distance</span>
875<span class="sd">        </span>
876<span class="sd">        : param distance: [distance, x_offset]</span>
877<span class="sd">        &quot;&quot;&quot;</span>
878        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
879            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;The length of the size must be one or two.&quot;</span>
880        <span class="bp">self</span><span class="o">.</span><span class="n">aperture</span><span class="o">.</span><span class="n">set_sample_distance</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span>
881</div>
882<div class="viewcode-block" id="ResolutionCalculator.set_sample2sample_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_sample2sample_distance">[docs]</a>    <span class="k">def</span> <span class="nf">set_sample2sample_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distance</span><span class="p">):</span>
883        <span class="sd">&quot;&quot;&quot;</span>
884<span class="sd">        Set detector sample_slit2sample_distance</span>
885<span class="sd">        </span>
886<span class="sd">        : param distance: [distance, x_offset]</span>
887<span class="sd">        &quot;&quot;&quot;</span>
888        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
889            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;The length of the size must be one or two.&quot;</span>
890        <span class="bp">self</span><span class="o">.</span><span class="n">sample</span><span class="o">.</span><span class="n">set_distance</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span>
891   </div>
892<div class="viewcode-block" id="ResolutionCalculator.set_sample2detector_distance"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.set_sample2detector_distance">[docs]</a>    <span class="k">def</span> <span class="nf">set_sample2detector_distance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distance</span><span class="p">):</span>
893        <span class="sd">&quot;&quot;&quot;</span>
894<span class="sd">        Set detector sample2detector_distance</span>
895<span class="sd">        </span>
896<span class="sd">        : param distance: [distance, x_offset]</span>
897<span class="sd">        &quot;&quot;&quot;</span>
898        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
899            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;The length of the size must be one or two.&quot;</span>
900        <span class="bp">self</span><span class="o">.</span><span class="n">detector</span><span class="o">.</span><span class="n">set_distance</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span>
901        </div>
902<div class="viewcode-block" id="ResolutionCalculator.get_all_instrument_params"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_all_instrument_params">[docs]</a>    <span class="k">def</span> <span class="nf">get_all_instrument_params</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
903        <span class="sd">&quot;&quot;&quot;</span>
904<span class="sd">        Get all instrumental parameters</span>
905<span class="sd">        &quot;&quot;&quot;</span>
906        <span class="c">#self.intensity = self.get_intensity()</span>
907        <span class="c">#self.wavelength = self.get_wavelength()</span>
908        <span class="c">#self.wavelength_spread = self.get_wavelength_spread()</span>
909        <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_neutron_mass</span><span class="p">()</span>
910        <span class="bp">self</span><span class="o">.</span><span class="n">spectrum</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_spectrum</span><span class="p">()</span>
911        <span class="bp">self</span><span class="o">.</span><span class="n">source_aperture_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source_aperture_size</span><span class="p">()</span>
912        <span class="bp">self</span><span class="o">.</span><span class="n">sample_aperture_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sample_aperture_size</span><span class="p">()</span>
913        <span class="bp">self</span><span class="o">.</span><span class="n">detector_pix_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_detector_pix_size</span><span class="p">()</span>
914        <span class="bp">self</span><span class="o">.</span><span class="n">detector_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_detector_size</span><span class="p">()</span>
915        <span class="bp">self</span><span class="o">.</span><span class="n">source2sample_distance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source2sample_distance</span><span class="p">()</span>
916        <span class="bp">self</span><span class="o">.</span><span class="n">sample2sample_distance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sample2sample_distance</span><span class="p">()</span>
917        <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sample2detector_distance</span><span class="p">()</span>
918    </div>
919<div class="viewcode-block" id="ResolutionCalculator.get_detector_qrange"><a class="viewcode-back" href="../../../dev/api/sas.calculator.html#sas.calculator.resolution_calculator.ResolutionCalculator.get_detector_qrange">[docs]</a>    <span class="k">def</span> <span class="nf">get_detector_qrange</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
920        <span class="sd">&quot;&quot;&quot;</span>
921<span class="sd">        get max detector q ranges</span>
922<span class="sd">        </span>
923<span class="sd">        : return: qx_min, qx_max, qy_min, qy_max tuple</span>
924<span class="sd">        &quot;&quot;&quot;</span>
925        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qxrange</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qyrange</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
926            <span class="k">return</span> <span class="bp">None</span>
927        <span class="n">qx_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qxrange</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
928        <span class="n">qx_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qxrange</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
929        <span class="n">qy_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qyrange</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
930        <span class="n">qy_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qyrange</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
931       
932        <span class="k">return</span> <span class="n">qx_min</span><span class="p">,</span> <span class="n">qx_max</span><span class="p">,</span> <span class="n">qy_min</span><span class="p">,</span> <span class="n">qy_max</span>
933    </div>
934    <span class="k">def</span> <span class="nf">_rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x_value</span><span class="p">,</span> <span class="n">y_value</span><span class="p">,</span> <span class="n">theta</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span>
935        <span class="sd">&quot;&quot;&quot;</span>
936<span class="sd">        Rotate x-y cordinate around z-axis by theta</span>
937<span class="sd">        : x_value: numpy array of x values</span>
938<span class="sd">        : y_value: numpy array of y values</span>
939<span class="sd">        : theta: angle to rotate by in rad</span>
940<span class="sd">        </span>
941<span class="sd">        :return: x_prime, y-prime</span>
942<span class="sd">        &quot;&quot;&quot;</span>       
943        <span class="c"># rotate by theta</span>
944        <span class="n">x_prime</span> <span class="o">=</span> <span class="n">x_value</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">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">y_value</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">theta</span><span class="p">)</span>
945        <span class="n">y_prime</span> <span class="o">=</span> <span class="o">-</span><span class="n">x_value</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">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">y_value</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">theta</span><span class="p">)</span>
946   
947        <span class="k">return</span> <span class="n">x_prime</span><span class="p">,</span> <span class="n">y_prime</span>
948   
949    <span class="k">def</span> <span class="nf">_gaussian2d</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x_val</span><span class="p">,</span> <span class="n">y_val</span><span class="p">,</span> <span class="n">x0_val</span><span class="p">,</span> <span class="n">y0_val</span><span class="p">,</span>
950                    <span class="n">sigma_x</span><span class="p">,</span> <span class="n">sigma_y</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">):</span>
951        <span class="sd">&quot;&quot;&quot;</span>
952<span class="sd">        Calculate 2D Gaussian distribution</span>
953<span class="sd">        : x_val: x value</span>
954<span class="sd">        : y_val: y value</span>
955<span class="sd">        : x0_val: mean value in x-axis</span>
956<span class="sd">        : y0_val: mean value in y-axis</span>
957<span class="sd">        : sigma_x: variance in x-direction</span>
958<span class="sd">        : sigma_y: variance in y-direction</span>
959<span class="sd">        </span>
960<span class="sd">        : return: gaussian (value)</span>
961<span class="sd">        &quot;&quot;&quot;</span>
962        <span class="c"># phi values at each points (not at the center)</span>
963        <span class="n">x_value</span> <span class="o">=</span> <span class="n">x_val</span> <span class="o">-</span> <span class="n">x0_val</span>
964        <span class="n">y_value</span> <span class="o">=</span> <span class="n">y_val</span> <span class="o">-</span> <span class="n">y0_val</span>
965        <span class="n">phi_i</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arctan2</span><span class="p">(</span><span class="n">y_val</span><span class="p">,</span> <span class="n">x_val</span><span class="p">)</span>
966       
967        <span class="c"># phi correction due to the gravity shift (in phi)</span>
968        <span class="n">phi_0</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">y0_val</span><span class="p">,</span> <span class="n">x0_val</span><span class="p">)</span>
969        <span class="n">phi_i</span> <span class="o">=</span> <span class="n">phi_i</span> <span class="o">-</span> <span class="n">phi_0</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">gravity_phi</span>
970
971        <span class="n">sin_phi</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="bp">self</span><span class="o">.</span><span class="n">gravity_phi</span><span class="p">)</span>
972        <span class="n">cos_phi</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="bp">self</span><span class="o">.</span><span class="n">gravity_phi</span><span class="p">)</span>
973       
974        <span class="n">x_p</span> <span class="o">=</span> <span class="n">x_value</span> <span class="o">*</span> <span class="n">cos_phi</span> <span class="o">+</span> <span class="n">y_value</span> <span class="o">*</span> <span class="n">sin_phi</span>
975        <span class="n">y_p</span> <span class="o">=</span> <span class="o">-</span><span class="n">x_value</span> <span class="o">*</span> <span class="n">sin_phi</span> <span class="o">+</span> <span class="n">y_value</span> <span class="o">*</span> <span class="n">cos_phi</span>
976       
977        <span class="n">new_sig_x</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_r</span> <span class="o">*</span> <span class="n">sigma_r</span> <span class="o">/</span> <span class="p">(</span><span class="n">sigma_x</span> <span class="o">*</span> <span class="n">sigma_x</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
978        <span class="n">new_sig_y</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_r</span> <span class="o">*</span> <span class="n">sigma_r</span> <span class="o">/</span> <span class="p">(</span><span class="n">sigma_y</span> <span class="o">*</span> <span class="n">sigma_y</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
979        <span class="n">new_x</span> <span class="o">=</span> <span class="n">x_p</span> <span class="o">*</span> <span class="n">cos_phi</span> <span class="o">/</span> <span class="n">new_sig_x</span> <span class="o">-</span> <span class="n">y_p</span> <span class="o">*</span> <span class="n">sin_phi</span>
980        <span class="n">new_x</span> <span class="o">/=</span> <span class="n">sigma_x</span>
981        <span class="n">new_y</span> <span class="o">=</span> <span class="n">x_p</span> <span class="o">*</span> <span class="n">sin_phi</span> <span class="o">/</span> <span class="n">new_sig_y</span> <span class="o">+</span> <span class="n">y_p</span> <span class="o">*</span> <span class="n">cos_phi</span>
982        <span class="n">new_y</span> <span class="o">/=</span> <span class="n">sigma_y</span>
983
984        <span class="n">nu_value</span> <span class="o">=</span> <span class="o">-</span><span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="n">new_x</span> <span class="o">*</span> <span class="n">new_x</span> <span class="o">+</span> <span class="n">new_y</span> <span class="o">*</span> <span class="n">new_y</span><span class="p">)</span>
985
986        <span class="n">gaussian</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="n">nu_value</span><span class="p">)</span>
987        <span class="c"># normalizing factor correction</span>
988        <span class="n">gaussian</span> <span class="o">/=</span> <span class="n">gaussian</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
989
990        <span class="k">return</span> <span class="n">gaussian</span>
991
992    <span class="k">def</span> <span class="nf">_gaussian2d_polar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x_val</span><span class="p">,</span> <span class="n">y_val</span><span class="p">,</span> <span class="n">x0_val</span><span class="p">,</span> <span class="n">y0_val</span><span class="p">,</span>
993                        <span class="n">sigma_x</span><span class="p">,</span> <span class="n">sigma_y</span><span class="p">,</span> <span class="n">sigma_r</span><span class="p">):</span>
994        <span class="sd">&quot;&quot;&quot;</span>
995<span class="sd">        Calculate 2D Gaussian distribution for polar coodinate</span>
996<span class="sd">        : x_val: x value</span>
997<span class="sd">        : y_val: y value</span>
998<span class="sd">        : x0_val: mean value in x-axis</span>
999<span class="sd">        : y0_val: mean value in y-axis</span>
1000<span class="sd">        : sigma_x: variance in r-direction</span>
1001<span class="sd">        : sigma_y: variance in phi-direction</span>
1002<span class="sd">        : sigma_r: wavelength variance in r-direction</span>
1003<span class="sd">        </span>
1004<span class="sd">        : return: gaussian (value)</span>
1005<span class="sd">        &quot;&quot;&quot;</span>
1006        <span class="n">sigma_x</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">sigma_x</span> <span class="o">*</span> <span class="n">sigma_x</span> <span class="o">+</span> <span class="n">sigma_r</span> <span class="o">*</span> <span class="n">sigma_r</span><span class="p">)</span>
1007        <span class="c"># call gaussian1d</span>
1008        <span class="n">gaussian</span>  <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gaussian1d</span><span class="p">(</span><span class="n">x_val</span><span class="p">,</span> <span class="n">x0_val</span><span class="p">,</span> <span class="n">sigma_x</span><span class="p">)</span>
1009        <span class="n">gaussian</span> <span class="o">*=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gaussian1d</span><span class="p">(</span><span class="n">y_val</span><span class="p">,</span> <span class="n">y0_val</span><span class="p">,</span> <span class="n">sigma_y</span><span class="p">)</span>
1010 
1011        <span class="c"># normalizing factor correction</span>
1012        <span class="k">if</span> <span class="n">sigma_x</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">sigma_y</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
1013            <span class="n">gaussian</span> <span class="o">*=</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">pi</span><span class="p">)</span>
1014        <span class="k">return</span> <span class="n">gaussian</span>
1015   
1016    <span class="k">def</span> <span class="nf">_gaussian1d</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">mean</span><span class="p">,</span> <span class="n">sigma</span><span class="p">):</span>
1017        <span class="sd">&quot;&quot;&quot;</span>
1018<span class="sd">        Calculate 1D Gaussian distribution</span>
1019<span class="sd">        : value: value</span>
1020<span class="sd">        : mean: mean value</span>
1021<span class="sd">        : sigma: variance</span>
1022<span class="sd">        </span>
1023<span class="sd">        : return: gaussian (value)</span>
1024<span class="sd">        &quot;&quot;&quot;</span>
1025        <span class="c"># default</span>
1026        <span class="n">gaussian</span> <span class="o">=</span> <span class="mf">1.0</span>
1027        <span class="k">if</span> <span class="n">sigma</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
1028            <span class="c"># get exponent</span>
1029            <span class="n">nu_value</span> <span class="o">=</span> <span class="p">(</span><span class="n">value</span> <span class="o">-</span> <span class="n">mean</span><span class="p">)</span> <span class="o">/</span> <span class="n">sigma</span>
1030            <span class="n">nu_value</span> <span class="o">*=</span> <span class="n">nu_value</span>
1031            <span class="n">nu_value</span> <span class="o">*=</span> <span class="o">-</span><span class="mf">0.5</span>
1032            <span class="n">gaussian</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="n">nu_value</span><span class="p">)</span>
1033            <span class="n">gaussian</span> <span class="o">/=</span> <span class="n">sigma</span>
1034            <span class="c"># normalize</span>
1035            <span class="n">gaussian</span> <span class="o">/=</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">pi</span><span class="p">)</span>
1036           
1037        <span class="k">return</span> <span class="n">gaussian</span>
1038   
1039    <span class="k">def</span> <span class="nf">_atan_phi</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">):</span>
1040        <span class="sd">&quot;&quot;&quot;</span>
1041<span class="sd">        Find the angle phi of q on the detector plane for qx_value, qy_value given</span>
1042<span class="sd">        : qx_value: x component of q</span>
1043<span class="sd">        : qy_value: y component of q</span>
1044<span class="sd">        </span>
1045<span class="sd">        : return phi: the azimuthal angle of q on x-y plane</span>
1046<span class="sd">        &quot;&quot;&quot;</span>
1047        <span class="n">phi</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">qy_value</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">)</span>
1048        <span class="k">return</span> <span class="n">phi</span>
1049        <span class="c"># default</span>
1050        <span class="n">phi</span> <span class="o">=</span> <span class="mi">0</span>
1051        <span class="c"># ToDo: This is misterious - sign???</span>
1052        <span class="c">#qy_value = -qy_value</span>
1053        <span class="c"># Take care of the singular point</span>
1054        <span class="k">if</span> <span class="n">qx_value</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1055            <span class="k">if</span> <span class="n">qy_value</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1056                <span class="n">phi</span> <span class="o">=</span> <span class="n">pi</span> <span class="o">/</span> <span class="mi">2</span>
1057            <span class="k">elif</span> <span class="n">qy_value</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
1058                <span class="n">phi</span> <span class="o">=</span> <span class="o">-</span><span class="n">pi</span> <span class="o">/</span> <span class="mi">2</span>
1059            <span class="k">else</span><span class="p">:</span>
1060                <span class="n">phi</span> <span class="o">=</span> <span class="mi">0</span>
1061        <span class="k">else</span><span class="p">:</span>
1062            <span class="c"># the angle</span>
1063            <span class="n">phi</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">qy_value</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">)</span>
1064
1065        <span class="k">return</span> <span class="n">phi</span>
1066
1067    <span class="k">def</span> <span class="nf">_get_detector_qxqy_pixels</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1068        <span class="sd">&quot;&quot;&quot;</span>
1069<span class="sd">        Get the pixel positions of the detector in the qx_value-qy_value space</span>
1070<span class="sd">        &quot;&quot;&quot;</span>
1071       
1072        <span class="c"># update all param values</span>
1073        <span class="bp">self</span><span class="o">.</span><span class="n">get_all_instrument_params</span><span class="p">()</span>
1074       
1075        <span class="c"># wavelength</span>
1076        <span class="n">wavelength</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">wavelength</span>
1077        <span class="c"># Gavity correction</span>
1078        <span class="n">delta_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_beamcenter_drop</span><span class="p">()</span>  <span class="c"># in cm</span>
1079       
1080        <span class="c"># detector_pix size</span>
1081        <span class="n">detector_pix_size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_pix_size</span>
1082        <span class="c"># Square or circular pixel</span>
1083        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">detector_pix_size</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
1084            <span class="n">pix_x_size</span> <span class="o">=</span> <span class="n">detector_pix_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1085            <span class="n">pix_y_size</span> <span class="o">=</span> <span class="n">detector_pix_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1086        <span class="c"># rectangular pixel pixel</span>
1087        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">detector_pix_size</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
1088            <span class="n">pix_x_size</span> <span class="o">=</span> <span class="n">detector_pix_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1089            <span class="n">pix_y_size</span> <span class="o">=</span> <span class="n">detector_pix_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
1090        <span class="k">else</span><span class="p">:</span>
1091            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot; Input value format error...&quot;</span>
1092        <span class="c"># Sample to detector distance = sample slit to detector</span>
1093        <span class="c"># minus sample offset</span>
1094        <span class="n">sample2detector_distance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> \
1095                                    <span class="bp">self</span><span class="o">.</span><span class="n">sample2sample_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1096        <span class="c"># detector offset in x-direction</span>
1097        <span class="n">detector_offset</span> <span class="o">=</span> <span class="mi">0</span>
1098        <span class="k">try</span><span class="p">:</span>
1099            <span class="n">detector_offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
1100        <span class="k">except</span><span class="p">:</span>
1101            <span class="k">pass</span>
1102       
1103        <span class="c"># detector size in [no of pix_x,no of pix_y]</span>
1104        <span class="n">detector_pix_nums_x</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1105       
1106        <span class="c"># get pix_y if it exists, otherwse take it from [0]</span>
1107        <span class="k">try</span><span class="p">:</span>
1108            <span class="n">detector_pix_nums_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
1109        <span class="k">except</span><span class="p">:</span>
1110            <span class="n">detector_pix_nums_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detector_size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1111       
1112        <span class="c"># detector offset in pix number</span>
1113        <span class="n">offset_x</span> <span class="o">=</span> <span class="n">detector_offset</span> <span class="o">/</span> <span class="n">pix_x_size</span>
1114        <span class="n">offset_y</span> <span class="o">=</span> <span class="n">delta_y</span> <span class="o">/</span> <span class="n">pix_y_size</span>
1115       
1116        <span class="c"># beam center position in pix number (start from 0)</span>
1117        <span class="n">center_x</span><span class="p">,</span> <span class="n">center_y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_beamcenter_position</span><span class="p">(</span><span class="n">detector_pix_nums_x</span><span class="p">,</span>
1118                                    <span class="n">detector_pix_nums_y</span><span class="p">,</span> <span class="n">offset_x</span><span class="p">,</span> <span class="n">offset_y</span><span class="p">)</span>
1119        <span class="c"># distance [cm] from the beam center on detector plane</span>
1120        <span class="n">detector_ind_x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">detector_pix_nums_x</span><span class="p">)</span>
1121        <span class="n">detector_ind_y</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">detector_pix_nums_y</span><span class="p">)</span>
1122
1123        <span class="c"># shif 0.5 pixel so that pix position is at the center of the pixel</span>
1124        <span class="n">detector_ind_x</span> <span class="o">=</span> <span class="n">detector_ind_x</span> <span class="o">+</span> <span class="mf">0.5</span>
1125        <span class="n">detector_ind_y</span> <span class="o">=</span> <span class="n">detector_ind_y</span> <span class="o">+</span> <span class="mf">0.5</span>
1126
1127        <span class="c"># the relative postion from the beam center</span>
1128        <span class="n">detector_ind_x</span> <span class="o">=</span> <span class="n">detector_ind_x</span> <span class="o">-</span> <span class="n">center_x</span>
1129        <span class="n">detector_ind_y</span> <span class="o">=</span> <span class="n">detector_ind_y</span> <span class="o">-</span> <span class="n">center_y</span>
1130       
1131        <span class="c"># unit correction in cm</span>
1132        <span class="n">detector_ind_x</span> <span class="o">=</span> <span class="n">detector_ind_x</span> <span class="o">*</span> <span class="n">pix_x_size</span>
1133        <span class="n">detector_ind_y</span> <span class="o">=</span> <span class="n">detector_ind_y</span> <span class="o">*</span> <span class="n">pix_y_size</span>
1134       
1135        <span class="n">qx_value</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">detector_ind_x</span><span class="p">))</span>
1136        <span class="n">qy_value</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">detector_ind_y</span><span class="p">))</span>
1137        <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
1138
1139        <span class="k">for</span> <span class="n">indx</span> <span class="ow">in</span> <span class="n">detector_ind_x</span><span class="p">:</span>
1140            <span class="n">qx_value</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="n">indx</span><span class="p">,</span> <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1141            <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
1142        <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
1143        <span class="k">for</span> <span class="n">indy</span> <span class="ow">in</span> <span class="n">detector_ind_y</span><span class="p">:</span>
1144            <span class="n">qy_value</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="n">indy</span><span class="p">,</span> <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1145            <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
1146           
1147        <span class="c"># qx_value and qy_value values in array</span>
1148        <span class="n">qx_value</span> <span class="o">=</span> <span class="n">qx_value</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">detector_pix_nums_y</span><span class="p">)</span>
1149        <span class="n">qx_value</span> <span class="o">=</span> <span class="n">qx_value</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">detector_pix_nums_x</span><span class="p">,</span> <span class="n">detector_pix_nums_y</span><span class="p">)</span>
1150        <span class="n">qy_value</span> <span class="o">=</span> <span class="n">qy_value</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="n">detector_pix_nums_x</span><span class="p">)</span>
1151        <span class="n">qy_value</span> <span class="o">=</span> <span class="n">qy_value</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">detector_pix_nums_y</span><span class="p">,</span> <span class="n">detector_pix_nums_x</span><span class="p">)</span>
1152        <span class="n">qy_value</span> <span class="o">=</span> <span class="n">qy_value</span><span class="o">.</span><span class="n">transpose</span><span class="p">()</span>
1153
1154        <span class="c"># p min and max values among the center of pixels</span>
1155        <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">qx_value</span><span class="p">)</span>
1156        <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">qx_value</span><span class="p">)</span>
1157        <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">qy_value</span><span class="p">)</span>
1158        <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">qy_value</span><span class="p">)</span>
1159               
1160        <span class="c"># Appr. min and max values of the detector display limits</span>
1161        <span class="c"># i.e., edges of the last pixels.</span>
1162        <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">pix_y_size</span><span class="p">,</span>
1163                                <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1164        <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">pix_y_size</span><span class="p">,</span>
1165                                <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1166        <span class="c">#if self.qx_min == self.qx_max:</span>
1167        <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">pix_x_size</span><span class="p">,</span>
1168                                <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1169        <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_qx</span><span class="p">(</span><span class="mf">0.5</span> <span class="o">*</span> <span class="n">pix_x_size</span><span class="p">,</span>
1170                                    <span class="n">sample2detector_distance</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">)</span>
1171       
1172        <span class="c"># min and max values of detecter</span>
1173        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_min</span>
1174        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qx_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qx_max</span>
1175        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_min</span>
1176        <span class="bp">self</span><span class="o">.</span><span class="n">detector_qy_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">qy_max</span>
1177       
1178        <span class="c"># try to set it as a Data2D otherwise pass (not required for now)</span>
1179        <span class="k">try</span><span class="p">:</span>
1180            <span class="kn">from</span> <span class="nn">sas.dataloader.data_info</span> <span class="kn">import</span> <span class="n">Data2D</span>
1181            <span class="n">output</span> <span class="o">=</span> <span class="n">Data2D</span><span class="p">()</span>
1182            <span class="n">inten</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">zeros_like</span><span class="p">(</span><span class="n">qx_value</span><span class="p">)</span>
1183            <span class="n">output</span><span class="o">.</span><span class="n">data</span>    <span class="o">=</span> <span class="n">inten</span>
1184            <span class="n">output</span><span class="o">.</span><span class="n">qx_data</span> <span class="o">=</span> <span class="n">qx_value</span>
1185            <span class="n">output</span><span class="o">.</span><span class="n">qy_data</span> <span class="o">=</span> <span class="n">qy_value</span>
1186        <span class="k">except</span><span class="p">:</span>
1187            <span class="k">pass</span>
1188       
1189        <span class="k">return</span> <span class="n">output</span>
1190       
1191    <span class="k">def</span> <span class="nf">_get_qx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dx_size</span><span class="p">,</span> <span class="n">det_dist</span><span class="p">,</span> <span class="n">wavelength</span><span class="p">):</span>
1192        <span class="sd">&quot;&quot;&quot;</span>
1193<span class="sd">        :param dx_size: x-distance from beam center [cm]</span>
1194<span class="sd">        :param det_dist: sample to detector distance [cm]</span>
1195<span class="sd">        </span>
1196<span class="sd">        :return: q-value at the given position</span>
1197<span class="sd">        &quot;&quot;&quot;</span>
1198        <span class="c"># Distance from beam center in the plane of detector</span>
1199        <span class="n">plane_dist</span> <span class="o">=</span> <span class="n">dx_size</span>
1200        <span class="c"># full scattering angle on the x-axis</span>
1201        <span class="n">theta</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">plane_dist</span> <span class="o">/</span> <span class="n">det_dist</span><span class="p">)</span>
1202        <span class="n">qx_value</span> <span class="o">=</span> <span class="p">(</span><span class="mf">2.0</span> <span class="o">*</span> <span class="n">pi</span> <span class="o">/</span> <span class="n">wavelength</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="n">theta</span><span class="p">)</span>
1203        <span class="k">return</span> <span class="n">qx_value</span>
1204   
1205    <span class="k">def</span> <span class="nf">_get_polar_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">,</span> <span class="n">qy_value</span><span class="p">):</span>
1206        <span class="sd">&quot;&quot;&quot;</span>
1207<span class="sd">        Find qr_value and phi from qx_value and qy_value values</span>
1208<span class="sd">        </span>
1209<span class="sd">        : return qr_value, phi</span>
1210<span class="sd">        &quot;&quot;&quot;</span>
1211        <span class="c"># find |q| on detector plane</span>
1212        <span class="n">qr_value</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">qx_value</span><span class="o">*</span><span class="n">qx_value</span> <span class="o">+</span> <span class="n">qy_value</span><span class="o">*</span><span class="n">qy_value</span><span class="p">)</span>
1213        <span class="c"># find angle phi</span>
1214        <span class="n">phi</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_atan_phi</span><span class="p">(</span><span class="n">qy_value</span><span class="p">,</span> <span class="n">qx_value</span><span class="p">)</span>
1215       
1216        <span class="k">return</span> <span class="n">qr_value</span><span class="p">,</span> <span class="n">phi</span>
1217   
1218    <span class="k">def</span> <span class="nf">_get_beamcenter_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">num_x</span><span class="p">,</span> <span class="n">num_y</span><span class="p">,</span> <span class="n">offset_x</span><span class="p">,</span> <span class="n">offset_y</span><span class="p">):</span>
1219        <span class="sd">&quot;&quot;&quot;</span>
1220<span class="sd">        :param num_x: number of pixel in x-direction</span>
1221<span class="sd">        :param num_y: number of pixel in y-direction</span>
1222<span class="sd">        :param offset: detector offset in x-direction in pix number</span>
1223<span class="sd">        </span>
1224<span class="sd">        :return: pix number; pos_x, pos_y in pix index</span>
1225<span class="sd">        &quot;&quot;&quot;</span>
1226        <span class="c"># beam center position</span>
1227        <span class="n">pos_x</span> <span class="o">=</span> <span class="n">num_x</span> <span class="o">/</span> <span class="mi">2</span>
1228        <span class="n">pos_y</span> <span class="o">=</span> <span class="n">num_y</span> <span class="o">/</span> <span class="mi">2</span>
1229
1230        <span class="c"># correction for offset</span>
1231        <span class="n">pos_x</span> <span class="o">+=</span> <span class="n">offset_x</span>
1232        <span class="c"># correction for gravity that is always negative</span>
1233        <span class="n">pos_y</span> <span class="o">-=</span> <span class="n">offset_y</span>
1234
1235        <span class="k">return</span> <span class="n">pos_x</span><span class="p">,</span> <span class="n">pos_y</span>
1236
1237    <span class="k">def</span> <span class="nf">_get_beamcenter_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1238        <span class="sd">&quot;&quot;&quot;</span>
1239<span class="sd">        Get the beam center drop (delta y) in y diection due to gravity</span>
1240<span class="sd">        </span>
1241<span class="sd">        :return delta y: the beam center drop in cm</span>
1242<span class="sd">        &quot;&quot;&quot;</span>
1243        <span class="c"># Check if mass == 0 (X-ray).</span>
1244        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
1245            <span class="k">return</span> <span class="mi">0</span>
1246        <span class="c"># Covert unit from A to cm</span>
1247        <span class="n">unit_cm</span> <span class="o">=</span> <span class="mf">1e-08</span>
1248        <span class="c"># Velocity of neutron in horizontal direction (~ actual velocity)</span>
1249        <span class="n">velocity</span> <span class="o">=</span> <span class="n">_PLANK_H</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mass</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">wave</span><span class="o">.</span><span class="n">wavelength</span> <span class="o">*</span> <span class="n">unit_cm</span><span class="p">)</span>
1250        <span class="c"># Compute delta y</span>
1251        <span class="n">delta_y</span> <span class="o">=</span> <span class="mf">0.5</span>
1252        <span class="n">delta_y</span> <span class="o">*=</span> <span class="n">_GRAVITY</span>
1253        <span class="n">sampletodetector</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> \
1254                                    <span class="bp">self</span><span class="o">.</span><span class="n">sample2sample_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1255        <span class="n">delta_y</span> <span class="o">*=</span> <span class="n">sampletodetector</span>
1256        <span class="n">delta_y</span> <span class="o">*=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">source2sample_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">sample2detector_distance</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
1257        <span class="n">delta_y</span> <span class="o">/=</span> <span class="p">(</span><span class="n">velocity</span> <span class="o">*</span> <span class="n">velocity</span><span class="p">)</span>
1258
1259        <span class="k">return</span> <span class="n">delta_y</span></div>
1260</pre></div>
1261
1262          </div>
1263        </div>
1264      </div>
1265      <div class="sphinxsidebar">
1266        <div class="sphinxsidebarwrapper">
1267<div id="searchbox" style="display: none">
1268  <h3>Quick search</h3>
1269    <form class="search" action="../../../search.html" method="get">
1270      <input type="text" name="q" />
1271      <input type="submit" value="Go" />
1272      <input type="hidden" name="check_keywords" value="yes" />
1273      <input type="hidden" name="area" value="default" />
1274    </form>
1275    <p class="searchtip" style="font-size: 90%">
1276    Enter search terms or a module, class or function name.
1277    </p>
1278</div>
1279<script type="text/javascript">$('#searchbox').show(0);</script>
1280        </div>
1281      </div>
1282      <div class="clearer"></div>
1283    </div>
1284    <div class="related">
1285      <h3>Navigation</h3>
1286      <ul>
1287        <li class="right" style="margin-right: 10px">
1288          <a href="../../../genindex.html" title="General Index"
1289             >index</a></li>
1290        <li class="right" >
1291          <a href="../../../py-modindex.html" title="Python Module Index"
1292             >modules</a> |</li>
1293        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
1294          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
1295      </ul>
1296    </div>
1297    <div class="footer">
1298        &copy; Copyright 2013, The SasView Project.
1299      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
1300    </div>
1301  </body>
1302</html>
Note: See TracBrowser for help on using the repository browser.