source: sasview/_modules/sas/perspectives/pr/inversion_state.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: 75.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.perspectives.pr.inversion_state &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../../index.html" />
28    <link rel="up" title="Module code" href="../../../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for sas.perspectives.pr.inversion_state</h1><div class="highlight"><pre>
51<span class="sd">&quot;&quot;&quot;</span>
52<span class="sd">    Handling of P(r) inversion states</span>
53<span class="sd">&quot;&quot;&quot;</span>
54<span class="c">################################################################################</span>
55<span class="c">#This software was developed by the University of Tennessee as part of the</span>
56<span class="c">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
57<span class="c">#project funded by the US National Science Foundation. </span>
58<span class="c">#</span>
59<span class="c">#See the license text in license.txt</span>
60<span class="c">#</span>
61<span class="c">#copyright 2009, University of Tennessee</span>
62<span class="c">################################################################################</span>
63
64
65<span class="kn">import</span> <span class="nn">time</span>
66<span class="kn">import</span> <span class="nn">os</span>
67<span class="kn">import</span> <span class="nn">sys</span>
68<span class="kn">import</span> <span class="nn">logging</span>
69<span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
70<span class="kn">from</span> <span class="nn">sas.guiframe.dataFitting</span> <span class="kn">import</span> <span class="n">Data1D</span>
71<span class="kn">from</span> <span class="nn">sas.dataloader.readers.cansas_reader</span> <span class="kn">import</span> <span class="n">Reader</span> <span class="k">as</span> <span class="n">CansasReader</span>
72<span class="kn">from</span> <span class="nn">sas.dataloader.readers.cansas_reader</span> <span class="kn">import</span> <span class="n">get_content</span>
73
74<span class="n">PRNODE_NAME</span> <span class="o">=</span> <span class="s">&#39;pr_inversion&#39;</span>
75<span class="n">CANSAS_NS</span> <span class="o">=</span> <span class="s">&quot;cansas1d/1.0&quot;</span>
76
77<span class="c"># Translation of names between stored and object data</span>
78<span class="c">## List of P(r) inversion inputs </span>
79<span class="n">in_list</span> <span class="o">=</span>  <span class="p">[[</span><span class="s">&quot;nterms&quot;</span><span class="p">,</span>       <span class="s">&quot;nfunc&quot;</span><span class="p">],</span>
80           <span class="p">[</span><span class="s">&quot;d_max&quot;</span><span class="p">,</span>        <span class="s">&quot;d_max&quot;</span><span class="p">],</span>
81           <span class="p">[</span><span class="s">&quot;alpha&quot;</span><span class="p">,</span>        <span class="s">&quot;alpha&quot;</span><span class="p">],</span>
82           <span class="p">[</span><span class="s">&quot;slit_width&quot;</span><span class="p">,</span>   <span class="s">&quot;width&quot;</span><span class="p">],</span>
83           <span class="p">[</span><span class="s">&quot;slit_height&quot;</span><span class="p">,</span>  <span class="s">&quot;height&quot;</span><span class="p">],</span>
84           <span class="p">[</span><span class="s">&quot;qmin&quot;</span><span class="p">,</span>         <span class="s">&quot;qmin&quot;</span><span class="p">],</span>
85           <span class="p">[</span><span class="s">&quot;qmax&quot;</span><span class="p">,</span>         <span class="s">&quot;qmax&quot;</span><span class="p">],</span>
86           <span class="p">[</span><span class="s">&quot;estimate_bck&quot;</span><span class="p">,</span> <span class="s">&quot;estimate_bck&quot;</span><span class="p">]]</span>                     
87
88<span class="c">## List of P(r) inversion outputs</span>
89<span class="n">out_list</span> <span class="o">=</span> <span class="p">[[</span><span class="s">&quot;elapsed&quot;</span><span class="p">,</span> <span class="s">&quot;elapsed&quot;</span><span class="p">],</span>
90           <span class="p">[</span><span class="s">&quot;rg&quot;</span><span class="p">,</span>      <span class="s">&quot;rg&quot;</span><span class="p">],</span>
91           <span class="p">[</span><span class="s">&quot;iq0&quot;</span><span class="p">,</span>     <span class="s">&quot;iq0&quot;</span><span class="p">],</span>
92           <span class="p">[</span><span class="s">&quot;bck&quot;</span><span class="p">,</span>     <span class="s">&quot;bck&quot;</span><span class="p">],</span>
93           <span class="p">[</span><span class="s">&quot;chi2&quot;</span><span class="p">,</span>    <span class="s">&quot;chi2&quot;</span><span class="p">],</span>
94           <span class="p">[</span><span class="s">&quot;osc&quot;</span><span class="p">,</span>     <span class="s">&quot;osc&quot;</span><span class="p">],</span>
95           <span class="p">[</span><span class="s">&quot;pos&quot;</span><span class="p">,</span>     <span class="s">&quot;pos&quot;</span><span class="p">],</span>
96           <span class="p">[</span><span class="s">&quot;pos_err&quot;</span><span class="p">,</span> <span class="s">&quot;pos_err&quot;</span><span class="p">],</span>
97           <span class="p">[</span><span class="s">&quot;alpha_estimate&quot;</span><span class="p">,</span> <span class="s">&quot;alpha_estimate&quot;</span><span class="p">],</span>
98           <span class="p">[</span><span class="s">&quot;nterms_estimate&quot;</span><span class="p">,</span> <span class="s">&quot;nterms_estimate&quot;</span><span class="p">]]</span>
99
100<div class="viewcode-block" id="InversionState"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.InversionState">[docs]</a><span class="k">class</span> <span class="nc">InversionState</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
101    <span class="sd">&quot;&quot;&quot;</span>
102<span class="sd">    Class to hold the state information of the InversionControl panel.</span>
103<span class="sd">    &quot;&quot;&quot;</span>
104    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
105        <span class="sd">&quot;&quot;&quot;</span>
106<span class="sd">        Default values</span>
107<span class="sd">        &quot;&quot;&quot;</span>
108        <span class="c"># Input </span>
109        <span class="bp">self</span><span class="o">.</span><span class="n">file</span>  <span class="o">=</span> <span class="bp">None</span>
110        <span class="bp">self</span><span class="o">.</span><span class="n">estimate_bck</span> <span class="o">=</span> <span class="bp">False</span>
111        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
112       
113        <span class="c"># Inversion parameters</span>
114        <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span> <span class="o">=</span> <span class="bp">None</span>
115        <span class="bp">self</span><span class="o">.</span><span class="n">d_max</span> <span class="o">=</span> <span class="bp">None</span>
116        <span class="bp">self</span><span class="o">.</span><span class="n">alpha</span> <span class="o">=</span> <span class="bp">None</span>
117       
118        <span class="c"># Slit parameters</span>
119        <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">None</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">width</span>  <span class="o">=</span> <span class="bp">None</span>
121       
122        <span class="c"># Q range</span>
123        <span class="bp">self</span><span class="o">.</span><span class="n">qmin</span>  <span class="o">=</span> <span class="bp">None</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">qmax</span>  <span class="o">=</span> <span class="bp">None</span>
125       
126        <span class="c"># Outputs</span>
127        <span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span> <span class="o">=</span> <span class="bp">None</span>
128        <span class="bp">self</span><span class="o">.</span><span class="n">rg</span>    <span class="o">=</span> <span class="bp">None</span>
129        <span class="bp">self</span><span class="o">.</span><span class="n">iq0</span>   <span class="o">=</span> <span class="bp">None</span>
130        <span class="bp">self</span><span class="o">.</span><span class="n">bck</span>   <span class="o">=</span> <span class="bp">None</span>
131        <span class="bp">self</span><span class="o">.</span><span class="n">chi2</span>  <span class="o">=</span> <span class="bp">None</span>
132        <span class="bp">self</span><span class="o">.</span><span class="n">osc</span>   <span class="o">=</span> <span class="bp">None</span>
133        <span class="bp">self</span><span class="o">.</span><span class="n">pos</span>   <span class="o">=</span> <span class="bp">None</span>
134        <span class="bp">self</span><span class="o">.</span><span class="n">pos_err</span> <span class="o">=</span> <span class="bp">None</span>
135       
136        <span class="c"># Estimates</span>
137        <span class="bp">self</span><span class="o">.</span><span class="n">alpha_estimate</span> <span class="o">=</span> <span class="bp">None</span>
138        <span class="bp">self</span><span class="o">.</span><span class="n">nterms_estimate</span> <span class="o">=</span> <span class="bp">None</span>
139       
140        <span class="c"># Data</span>
141        <span class="bp">self</span><span class="o">.</span><span class="n">q</span>       <span class="o">=</span> <span class="bp">None</span>
142        <span class="bp">self</span><span class="o">.</span><span class="n">iq_obs</span>  <span class="o">=</span> <span class="bp">None</span>
143        <span class="bp">self</span><span class="o">.</span><span class="n">iq_calc</span> <span class="o">=</span> <span class="bp">None</span>
144       
145        <span class="c"># Coefficients</span>
146        <span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span> <span class="o">=</span> <span class="bp">None</span>
147        <span class="bp">self</span><span class="o">.</span><span class="n">covariance</span> <span class="o">=</span> <span class="bp">None</span>
148   
149    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
150        <span class="sd">&quot;&quot;&quot;</span>
151<span class="sd">        Pretty print</span>
152<span class="sd">        </span>
153<span class="sd">        :return: string representing the state</span>
154<span class="sd">        </span>
155<span class="sd">        &quot;&quot;&quot;</span>
156        <span class="n">state</span>  <span class="o">=</span> <span class="s">&quot;File:         </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span>
157        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Timestamp:    </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span>
158        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Estimate bck: </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">estimate_bck</span><span class="p">)</span>
159        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;No. terms:    </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">)</span>
160        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;D_max:        </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">d_max</span><span class="p">)</span>
161        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Alpha:        </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">alpha</span><span class="p">)</span>
162       
163        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Slit height:  </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">)</span>
164        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Slit width:   </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">)</span>
165       
166        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Qmin:         </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qmin</span><span class="p">)</span>
167        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;Qmax:         </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">qmax</span><span class="p">)</span>
168       
169        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">Estimates:</span><span class="se">\n</span><span class="s">&quot;</span>
170        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Alpha:      </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">alpha_estimate</span><span class="p">)</span>
171        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Nterms:     </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nterms_estimate</span><span class="p">)</span>
172       
173        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">Outputs:</span><span class="se">\n</span><span class="s">&quot;</span>
174        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Elapsed:    </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">elapsed</span><span class="p">)</span>
175        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Rg:         </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rg</span><span class="p">)</span>
176        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  I(q=0):     </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iq0</span><span class="p">)</span>
177        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Bck:        </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bck</span><span class="p">)</span>
178        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Chi^2:      </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">chi2</span><span class="p">)</span>
179        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Oscillation:</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">osc</span><span class="p">)</span>
180        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  Positive:   </span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pos</span><span class="p">)</span>
181        <span class="n">state</span> <span class="o">+=</span> <span class="s">&quot;  1-sigma pos:</span><span class="si">%s</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pos_err</span><span class="p">)</span>
182       
183        <span class="k">return</span> <span class="n">state</span>
184       
185<div class="viewcode-block" id="InversionState.toXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.InversionState.toXML">[docs]</a>    <span class="k">def</span> <span class="nf">toXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="o">=</span><span class="s">&quot;pr_state.prv&quot;</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">entry_node</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
186        <span class="sd">&quot;&quot;&quot;</span>
187<span class="sd">        Writes the state of the InversionControl panel to file, as XML.</span>
188<span class="sd">        </span>
189<span class="sd">        Compatible with standalone writing, or appending to an</span>
190<span class="sd">        already existing XML document. In that case, the XML document</span>
191<span class="sd">        is required. An optional entry node in the XML document </span>
192<span class="sd">        may also be given.</span>
193<span class="sd">        </span>
194<span class="sd">        :param file: file to write to</span>
195<span class="sd">        :param doc: XML document object [optional]</span>
196<span class="sd">        :param entry_node: XML node within the XML document at which </span>
197<span class="sd">            we will append the data [optional]</span>
198<span class="sd">        </span>
199<span class="sd">        &quot;&quot;&quot;</span>
200        <span class="c">#TODO: Get this to work</span>
201        <span class="kn">from</span> <span class="nn">xml.dom.minidom</span> <span class="kn">import</span> <span class="n">getDOMImplementation</span>
202
203        <span class="c"># Check whether we have to write a standalone XML file</span>
204        <span class="k">if</span> <span class="n">doc</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
205            <span class="n">impl</span> <span class="o">=</span> <span class="n">getDOMImplementation</span><span class="p">()</span>
206       
207            <span class="n">doc_type</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="n">createDocumentType</span><span class="p">(</span><span class="n">PRNODE_NAME</span><span class="p">,</span> <span class="s">&quot;1.0&quot;</span><span class="p">,</span> <span class="s">&quot;1.0&quot;</span><span class="p">)</span>     
208       
209            <span class="n">newdoc</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="n">createDocument</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">PRNODE_NAME</span><span class="p">,</span> <span class="n">doc_type</span><span class="p">)</span>
210            <span class="n">top_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">documentElement</span>
211        <span class="k">else</span><span class="p">:</span>
212            <span class="c"># We are appending to an existing document</span>
213            <span class="n">newdoc</span> <span class="o">=</span> <span class="n">doc</span>
214            <span class="n">top_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="n">PRNODE_NAME</span><span class="p">)</span>
215            <span class="k">if</span> <span class="n">entry_node</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
216                <span class="n">newdoc</span><span class="o">.</span><span class="n">documentElement</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">top_element</span><span class="p">)</span>
217            <span class="k">else</span><span class="p">:</span>
218                <span class="n">entry_node</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">top_element</span><span class="p">)</span>
219           
220        <span class="n">attr</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createAttribute</span><span class="p">(</span><span class="s">&quot;version&quot;</span><span class="p">)</span>
221        <span class="n">attr</span><span class="o">.</span><span class="n">nodeValue</span> <span class="o">=</span> <span class="s">&#39;1.0&#39;</span>
222        <span class="n">top_element</span><span class="o">.</span><span class="n">setAttributeNode</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
223       
224        <span class="c"># File name</span>
225        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;filename&quot;</span><span class="p">)</span>
226        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
227            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="p">)))</span>
228        <span class="k">else</span><span class="p">:</span>
229            <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">file</span><span class="p">)))</span>
230        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
231       
232        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;timestamp&quot;</span><span class="p">)</span>
233        <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)))</span>
234        <span class="n">attr</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createAttribute</span><span class="p">(</span><span class="s">&quot;epoch&quot;</span><span class="p">)</span>
235        <span class="n">attr</span><span class="o">.</span><span class="n">nodeValue</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)</span>
236        <span class="n">element</span><span class="o">.</span><span class="n">setAttributeNode</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
237        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
238       
239        <span class="c"># Inputs</span>
240        <span class="n">inputs</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;inputs&quot;</span><span class="p">)</span>
241        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">inputs</span><span class="p">)</span>
242       
243        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">in_list</span><span class="p">:</span>
244            <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
245            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;element.appendChild(newdoc.createTextNode(str(self.</span><span class="si">%s</span><span class="s">)))&quot;</span>
246            <span class="k">exec</span>  <span class="n">cmd</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
247            <span class="n">inputs</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
248             
249        <span class="c"># Outputs</span>
250        <span class="n">outputs</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;outputs&quot;</span><span class="p">)</span>
251        <span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">outputs</span><span class="p">)</span>
252       
253        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">out_list</span><span class="p">:</span>
254            <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
255            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&quot;element.appendChild(newdoc.createTextNode(str(self.</span><span class="si">%s</span><span class="s">)))&quot;</span>
256            <span class="k">exec</span>  <span class="n">cmd</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
257            <span class="n">outputs</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
258                   
259        <span class="c"># Save output coefficients and its covariance matrix</span>
260        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;coefficients&quot;</span><span class="p">)</span>
261        <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span><span class="p">)))</span>
262        <span class="n">outputs</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
263        <span class="n">element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s">&quot;covariance&quot;</span><span class="p">)</span>
264        <span class="n">element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">covariance</span><span class="p">)))</span>
265        <span class="n">outputs</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
266                   
267        <span class="c"># Save the file</span>
268        <span class="k">if</span> <span class="n">doc</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
269            <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="nb">file</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
270            <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">newdoc</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">())</span>
271            <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
272            <span class="k">return</span> <span class="bp">None</span>
273        <span class="k">else</span><span class="p">:</span>
274            <span class="k">return</span> <span class="n">newdoc</span>
275</div>
276<div class="viewcode-block" id="InversionState.fromXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.InversionState.fromXML">[docs]</a>    <span class="k">def</span> <span class="nf">fromXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">node</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
277        <span class="sd">&quot;&quot;&quot;</span>
278<span class="sd">        Load a P(r) inversion state from a file</span>
279<span class="sd">        </span>
280<span class="sd">        :param file: .prv file</span>
281<span class="sd">        :param node: node of a XML document to read from</span>
282<span class="sd">        </span>
283<span class="sd">        &quot;&quot;&quot;</span>
284        <span class="k">if</span> <span class="nb">file</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
285            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;InversionState no longer supports non-CanSAS&quot;</span>
286            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; format for P(r) files&quot;</span>
287            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
288           
289        <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s">&#39;1.0&#39;</span><span class="p">:</span>
290           
291            <span class="c"># Get file name</span>
292            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:filename&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
293            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
294                <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
295           
296            <span class="c"># Get time stamp</span>
297            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:timestamp&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
298            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">entry</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;epoch&#39;</span><span class="p">):</span>
299                <span class="k">try</span><span class="p">:</span>
300                    <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;epoch&#39;</span><span class="p">))</span>
301                <span class="k">except</span><span class="p">:</span>
302                    <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;InversionState.fromXML: Could not read &quot;</span>
303                    <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;timestamp</span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span>
304                    <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
305           
306            <span class="c"># Parse inversion inputs</span>
307            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:inputs&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
308            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
309                <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">in_list</span><span class="p">:</span>
310                    <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">entry</span><span class="p">)</span>
311                    <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
312                        <span class="k">try</span><span class="p">:</span>
313                            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;self.</span><span class="si">%s</span><span class="s"> = float(input_field.text.strip())&#39;</span> 
314                            <span class="k">exec</span>  <span class="n">cmd</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
315                        <span class="k">except</span><span class="p">:</span>
316                            <span class="k">exec</span> <span class="s">&#39;self.</span><span class="si">%s</span><span class="s"> = None&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
317                <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:estimate_bck&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
318                <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
319                    <span class="k">try</span><span class="p">:</span>
320                        <span class="bp">self</span><span class="o">.</span><span class="n">estimate_bck</span> <span class="o">=</span> <span class="n">input_field</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">==</span><span class="s">&#39;True&#39;</span>
321                    <span class="k">except</span><span class="p">:</span>
322                        <span class="bp">self</span><span class="o">.</span><span class="n">estimate_bck</span> <span class="o">=</span> <span class="bp">False</span>
323                   
324            <span class="c"># Parse inversion outputs</span>
325            <span class="n">entry</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:outputs&#39;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
326            <span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
327                <span class="c"># Output parameters (scalars)</span>
328                <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">out_list</span><span class="p">:</span>
329                    <span class="n">input_field</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">entry</span><span class="p">)</span>
330                    <span class="k">if</span> <span class="n">input_field</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
331                        <span class="k">try</span><span class="p">:</span>
332                            <span class="n">cmd</span> <span class="o">=</span> <span class="s">&#39;self.</span><span class="si">%s</span><span class="s"> = float(input_field.text.strip())&#39;</span>
333                            <span class="k">exec</span>  <span class="n">cmd</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
334                        <span class="k">except</span><span class="p">:</span>
335                            <span class="k">exec</span> <span class="s">&#39;self.</span><span class="si">%s</span><span class="s"> = None&#39;</span> <span class="o">%</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
336           
337                <span class="c"># Look for coefficients</span>
338                <span class="c"># Format is [value, value, value, value]</span>
339                <span class="n">coeff</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:coefficients&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
340                <span class="k">if</span> <span class="n">coeff</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
341                    <span class="c"># Remove brackets</span>
342                    <span class="n">c_values</span> <span class="o">=</span> <span class="n">coeff</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;[&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
343                    <span class="n">c_values</span> <span class="o">=</span> <span class="n">c_values</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;]&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
344                    <span class="n">toks</span> <span class="o">=</span> <span class="n">c_values</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
345                    <span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span> <span class="o">=</span> <span class="p">[]</span>
346                    <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">toks</span><span class="p">:</span>
347                        <span class="k">try</span><span class="p">:</span>
348                            <span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>
349                        <span class="k">except</span><span class="p">:</span>
350                            <span class="c"># Bad data, skip. We will count the number of </span>
351                            <span class="c"># coefficients at the very end and deal with </span>
352                            <span class="c"># inconsistencies then.</span>
353                            <span class="k">pass</span>
354                    <span class="c"># Sanity check</span>
355                    <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">:</span>
356                        <span class="c"># Inconsistent number of coefficients.</span>
357                        <span class="c"># Don&#39;t keep the data.</span>
358                        <span class="n">err_msg</span> <span class="o">=</span> <span class="s">&quot;InversionState.fromXML: inconsistant &quot;</span>
359                        <span class="n">err_msg</span> <span class="o">+=</span> <span class="s">&quot;number of coefficients: &quot;</span>
360                        <span class="n">err_msg</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s"> </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span><span class="p">),</span>
361                                              <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">)</span>
362                        <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err_msg</span><span class="p">)</span>
363                        <span class="bp">self</span><span class="o">.</span><span class="n">coefficients</span> <span class="o">=</span> <span class="bp">None</span>
364               
365                <span class="c"># Look for covariance matrix</span>
366                <span class="c"># Format is [ [value, value], [value, value] ]</span>
367                <span class="n">coeff</span> <span class="o">=</span> <span class="n">get_content</span><span class="p">(</span><span class="s">&#39;ns:covariance&#39;</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
368                <span class="k">if</span> <span class="n">coeff</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
369                    <span class="c"># Parse rows</span>
370                    <span class="n">rows</span> <span class="o">=</span> <span class="n">coeff</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;[&#39;</span><span class="p">)</span>
371                    <span class="bp">self</span><span class="o">.</span><span class="n">covariance</span> <span class="o">=</span> <span class="p">[]</span>
372                    <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
373                        <span class="n">row</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
374                        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">continue</span>
375                        <span class="c"># Remove end bracket</span>
376                        <span class="n">row</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;]&#39;</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
377                        <span class="n">c_values</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
378                        <span class="n">cov_row</span> <span class="o">=</span> <span class="p">[]</span>
379                        <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">c_values</span><span class="p">:</span>
380                            <span class="k">try</span><span class="p">:</span>
381                                <span class="n">cov_row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">c</span><span class="p">))</span>
382                            <span class="k">except</span><span class="p">:</span>
383                                <span class="c"># Bad data, skip. We will count the number of </span>
384                                <span class="c"># coefficients at the very end and deal with </span>
385                                <span class="c"># inconsistencies then.</span>
386                                <span class="k">pass</span>
387                        <span class="c"># Sanity check: check the number of entries in the row</span>
388                        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cov_row</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">:</span>
389                            <span class="bp">self</span><span class="o">.</span><span class="n">covariance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cov_row</span><span class="p">)</span>
390                    <span class="c"># Sanity check: check the number of rows in the covariance</span>
391                    <span class="c"># matrix</span>
392                    <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">covariance</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">:</span>
393                        <span class="c"># Inconsistent dimensions of the covariance matrix.</span>
394                        <span class="c"># Don&#39;t keep the data.</span>
395                        <span class="n">err_msg</span> <span class="o">=</span> <span class="s">&quot;InversionState.fromXML: &quot;</span>
396                        <span class="n">err_msg</span> <span class="o">+=</span> <span class="s">&quot;inconsistant dimensions of the &quot;</span>
397                        <span class="n">err_msg</span> <span class="o">+=</span> <span class="s">&quot; covariance matrix: &quot;</span>
398                        <span class="n">err_msg</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%d</span><span class="s"> </span><span class="si">%d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">covariance</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">nfunc</span><span class="p">)</span>
399                        <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err_msg</span><span class="p">)</span>
400                        <span class="bp">self</span><span class="o">.</span><span class="n">covariance</span> <span class="o">=</span> <span class="bp">None</span>
401    </div></div>
402<div class="viewcode-block" id="Reader"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.Reader">[docs]</a><span class="k">class</span> <span class="nc">Reader</span><span class="p">(</span><span class="n">CansasReader</span><span class="p">):</span>
403    <span class="sd">&quot;&quot;&quot;</span>
404<span class="sd">    Class to load a .prv P(r) inversion file</span>
405<span class="sd">    &quot;&quot;&quot;</span>
406    <span class="c">## File type</span>
407    <span class="n">type_name</span> <span class="o">=</span> <span class="s">&quot;P(r)&quot;</span>
408   
409    <span class="c">## Wildcards</span>
410    <span class="nb">type</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;P(r) files (*.prv)|*.prv&quot;</span><span class="p">,</span>
411            <span class="s">&quot;SASView files (*.svs)|*.svs&quot;</span><span class="p">]</span>
412    <span class="c">## List of allowed extensions</span>
413    <span class="n">ext</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;.prv&#39;</span><span class="p">,</span> <span class="s">&#39;.PRV&#39;</span><span class="p">,</span> <span class="s">&#39;.svs&#39;</span><span class="p">,</span> <span class="s">&#39;.SVS&#39;</span><span class="p">]</span> 
414   
415    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">call_back</span><span class="p">,</span> <span class="n">cansas</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
416        <span class="sd">&quot;&quot;&quot;</span>
417<span class="sd">        Initialize the call-back method to be called</span>
418<span class="sd">        after we load a file</span>
419<span class="sd">        </span>
420<span class="sd">        :param call_back: call-back method</span>
421<span class="sd">        :param cansas:  True = files will be written/read in CanSAS format</span>
422<span class="sd">                        False = write CanSAS format</span>
423<span class="sd">            </span>
424<span class="sd">        &quot;&quot;&quot;</span>
425        <span class="c">## Call back method to be executed after a file is read</span>
426        <span class="bp">self</span><span class="o">.</span><span class="n">call_back</span> <span class="o">=</span> <span class="n">call_back</span>
427        <span class="c">## CanSAS format flag</span>
428        <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span> <span class="o">=</span> <span class="n">cansas</span>
429        <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="bp">None</span>
430       
431<div class="viewcode-block" id="Reader.read"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.Reader.read">[docs]</a>    <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
432        <span class="sd">&quot;&quot;&quot; </span>
433<span class="sd">        Load a new P(r) inversion state from file</span>
434<span class="sd">        </span>
435<span class="sd">        :param path: file path</span>
436<span class="sd">        </span>
437<span class="sd">        :return: None</span>
438<span class="sd">        </span>
439<span class="sd">        &quot;&quot;&quot;</span>
440        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span><span class="o">==</span><span class="bp">True</span><span class="p">:</span>
441            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_cansas</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
442        <span class="k">else</span><span class="p">:</span>
443            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_standalone</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
444        </div>
445    <span class="k">def</span> <span class="nf">_read_standalone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
446        <span class="sd">&quot;&quot;&quot; </span>
447<span class="sd">        Load a new P(r) inversion state from file.</span>
448<span class="sd">        The P(r) node is assumed to be the top element.</span>
449<span class="sd">        </span>
450<span class="sd">        :param path: file path</span>
451<span class="sd">        </span>
452<span class="sd">        :return: None</span>
453<span class="sd">        </span>
454<span class="sd">        &quot;&quot;&quot;</span>
455        <span class="c"># Read the new state from file</span>
456        <span class="n">state</span> <span class="o">=</span> <span class="n">InversionState</span><span class="p">()</span>
457        <span class="n">state</span><span class="o">.</span><span class="n">fromXML</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">path</span><span class="p">)</span>
458       
459        <span class="c"># Call back to post the new state</span>
460        <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">state</span>
461        <span class="c">#self.call_back(state)</span>
462        <span class="k">return</span> <span class="bp">None</span>
463   
464    <span class="k">def</span> <span class="nf">_parse_prstate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entry</span><span class="p">):</span>
465        <span class="sd">&quot;&quot;&quot;</span>
466<span class="sd">        Read a p(r) inversion result from an XML node</span>
467<span class="sd">        </span>
468<span class="sd">        :param entry: XML node to read from </span>
469<span class="sd">        </span>
470<span class="sd">        :return: InversionState object</span>
471<span class="sd">        </span>
472<span class="sd">        &quot;&quot;&quot;</span>
473        <span class="n">state</span> <span class="o">=</span> <span class="bp">None</span>
474       
475        <span class="c"># Locate the P(r) node</span>
476        <span class="k">try</span><span class="p">:</span>
477            <span class="n">nodes</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s">&#39;ns:</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">PRNODE_NAME</span><span class="p">,</span>
478                                <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s">&#39;ns&#39;</span><span class="p">:</span> <span class="n">CANSAS_NS</span><span class="p">})</span>
479            <span class="k">if</span> <span class="n">nodes</span> <span class="o">!=</span><span class="p">[]:</span>
480                <span class="c"># Create an empty state</span>
481                <span class="n">state</span> <span class="o">=</span>  <span class="n">InversionState</span><span class="p">()</span>
482                <span class="n">state</span><span class="o">.</span><span class="n">fromXML</span><span class="p">(</span><span class="n">node</span><span class="o">=</span><span class="n">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
483        <span class="k">except</span><span class="p">:</span>
484            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;XML document does not contain P(r) &quot;</span>
485            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;information.</span><span class="se">\n</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span>
486            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
487           
488        <span class="k">return</span> <span class="n">state</span>
489   
490    <span class="k">def</span> <span class="nf">_read_cansas</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
491        <span class="sd">&quot;&quot;&quot; </span>
492<span class="sd">        Load data and P(r) information from a CanSAS XML file.</span>
493<span class="sd">        </span>
494<span class="sd">        :param path: file path</span>
495<span class="sd">        </span>
496<span class="sd">        :return: Data1D object if a single SASentry was found, </span>
497<span class="sd">                    or a list of Data1D objects if multiple entries were found,</span>
498<span class="sd">                    or None of nothing was found</span>
499<span class="sd">                    </span>
500<span class="sd">        :raise RuntimeError: when the file can&#39;t be opened</span>
501<span class="sd">        :raise ValueError: when the length of the data vectors are inconsistent</span>
502<span class="sd">        </span>
503<span class="sd">        &quot;&quot;&quot;</span>
504        <span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
505       
506        <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
507            <span class="n">basename</span>  <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
508            <span class="n">root</span><span class="p">,</span> <span class="n">extension</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">basename</span><span class="p">)</span>
509            <span class="c">#TODO: eventually remove the check for .xml once</span>
510            <span class="c"># the P(r) writer/reader is truly complete.</span>
511            <span class="k">if</span>  <span class="n">extension</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ext</span> <span class="ow">or</span> <span class="n">extension</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;.xml&#39;</span><span class="p">:</span>
512               
513                <span class="n">tree</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">parser</span><span class="o">=</span><span class="n">etree</span><span class="o">.</span><span class="n">ETCompatXMLParser</span><span class="p">())</span>
514                <span class="c"># Check the format version number</span>
515                <span class="c"># Specifying the namespace will take care of the file </span>
516                <span class="c">#format version </span>
517                <span class="n">root</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
518               
519                <span class="n">entry_list</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">xpath</span><span class="p">(</span><span class="s">&#39;/ns:SASroot/ns:SASentry&#39;</span><span class="p">,</span>
520                                        <span class="n">namespaces</span><span class="o">=</span><span class="p">{</span><span class="s">&#39;ns&#39;</span><span class="p">:</span> <span class="n">CANSAS_NS</span><span class="p">})</span>
521
522                <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entry_list</span><span class="p">:</span>
523                    <span class="n">sas_entry</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_entry</span><span class="p">(</span><span class="n">entry</span><span class="p">)</span>
524                    <span class="n">prstate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_prstate</span><span class="p">(</span><span class="n">entry</span><span class="p">)</span>
525                    <span class="c">#prstate could be None when .svs file is loaded</span>
526                    <span class="c">#in this case, skip appending to output</span>
527                    <span class="k">if</span> <span class="n">prstate</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
528                        <span class="n">sas_entry</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">prstate</span>
529                        <span class="n">sas_entry</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">prstate</span><span class="o">.</span><span class="n">file</span>
530                        <span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sas_entry</span><span class="p">)</span>
531        <span class="k">else</span><span class="p">:</span>
532            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> is not a file&quot;</span> <span class="o">%</span> <span class="n">path</span>
533       
534        <span class="c"># Return output consistent with the loader&#39;s api</span>
535        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
536            <span class="k">return</span> <span class="bp">None</span>
537        <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
538            <span class="c"># Call back to post the new state</span>
539            <span class="bp">self</span><span class="o">.</span><span class="n">call_back</span><span class="p">(</span><span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">meta_data</span><span class="p">[</span><span class="s">&#39;prstate&#39;</span><span class="p">],</span> <span class="n">datainfo</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
540            <span class="c">#self.state = output[0].meta_data[&#39;prstate&#39;]</span>
541            <span class="k">return</span> <span class="n">output</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
542        <span class="k">else</span><span class="p">:</span>
543            <span class="k">return</span> <span class="n">output</span>               
544   
545   
546<div class="viewcode-block" id="Reader.write"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.Reader.write">[docs]</a>    <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">datainfo</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">prstate</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
547        <span class="sd">&quot;&quot;&quot;</span>
548<span class="sd">        Write the content of a Data1D as a CanSAS XML file</span>
549<span class="sd">        </span>
550<span class="sd">        :param filename: name of the file to write</span>
551<span class="sd">        :param datainfo: Data1D object</span>
552<span class="sd">        :param prstate: InversionState object</span>
553<span class="sd">        </span>
554<span class="sd">        &quot;&quot;&quot;</span>
555        <span class="c"># Sanity check</span>
556        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cansas</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
557            <span class="n">doc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">write_toXML</span><span class="p">(</span><span class="n">datainfo</span><span class="p">,</span> <span class="n">prstate</span><span class="p">)</span>       
558            <span class="c"># Write the XML document</span>
559            <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>
560            <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">())</span>
561            <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
562        <span class="k">else</span><span class="p">:</span>
563            <span class="n">prstate</span><span class="o">.</span><span class="n">toXML</span><span class="p">(</span><span class="nb">file</span><span class="o">=</span><span class="n">filename</span><span class="p">)</span>
564        </div>
565<div class="viewcode-block" id="Reader.write_toXML"><a class="viewcode-back" href="../../../../dev/api/sas.perspectives.pr.html#sas.perspectives.pr.inversion_state.Reader.write_toXML">[docs]</a>    <span class="k">def</span> <span class="nf">write_toXML</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">datainfo</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
566        <span class="sd">&quot;&quot;&quot;</span>
567<span class="sd">        Write toXML, a helper for write()</span>
568<span class="sd">        </span>
569<span class="sd">        : return: xml doc</span>
570<span class="sd">        &quot;&quot;&quot;</span>
571        <span class="k">if</span> <span class="n">datainfo</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
572            <span class="n">datainfo</span> <span class="o">=</span> <span class="n">Data1D</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="p">[],</span> <span class="n">y</span><span class="o">=</span><span class="p">[])</span>   
573        <span class="k">elif</span> <span class="ow">not</span> <span class="nb">issubclass</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="n">Data1D</span><span class="p">):</span>
574            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;The cansas writer expects a Data1D &quot;</span>
575            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;instance: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">datainfo</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">)</span>
576            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">msg</span>
577   
578        <span class="c"># Create basic XML document</span>
579        <span class="n">doc</span><span class="p">,</span> <span class="n">sasentry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_xml_doc</span><span class="p">(</span><span class="n">datainfo</span><span class="p">)</span>
580       
581        <span class="c"># Add the invariant information to the XML document</span>
582        <span class="k">if</span> <span class="n">state</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
583            <span class="n">doc</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">toXML</span><span class="p">(</span><span class="n">doc</span><span class="o">=</span><span class="n">doc</span><span class="p">,</span> <span class="n">entry_node</span><span class="o">=</span><span class="n">sasentry</span><span class="p">)</span>
584           
585        <span class="k">return</span> <span class="n">doc</span> 
586    </div></div>
587</pre></div>
588
589          </div>
590        </div>
591      </div>
592      <div class="sphinxsidebar">
593        <div class="sphinxsidebarwrapper">
594<div id="searchbox" style="display: none">
595  <h3>Quick search</h3>
596    <form class="search" action="../../../../search.html" method="get">
597      <input type="text" name="q" />
598      <input type="submit" value="Go" />
599      <input type="hidden" name="check_keywords" value="yes" />
600      <input type="hidden" name="area" value="default" />
601    </form>
602    <p class="searchtip" style="font-size: 90%">
603    Enter search terms or a module, class or function name.
604    </p>
605</div>
606<script type="text/javascript">$('#searchbox').show(0);</script>
607        </div>
608      </div>
609      <div class="clearer"></div>
610    </div>
611    <div class="related">
612      <h3>Navigation</h3>
613      <ul>
614        <li class="right" style="margin-right: 10px">
615          <a href="../../../../genindex.html" title="General Index"
616             >index</a></li>
617        <li class="right" >
618          <a href="../../../../py-modindex.html" title="Python Module Index"
619             >modules</a> |</li>
620        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
621          <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
622      </ul>
623    </div>
624    <div class="footer">
625        &copy; Copyright 2013, The SasView Project.
626      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
627    </div>
628  </body>
629</html>
Note: See TracBrowser for help on using the repository browser.