Changeset 1709 for sphinxdocs/build/html/_modules/GSASIImath.html
- Timestamp:
- Mar 14, 2015 5:35:03 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sphinxdocs/build/html/_modules/GSASIImath.html
r1513 r1709 52 52 <span class="c">#GSASIImath - major mathematics routines</span> 53 53 <span class="c">########### SVN repository information ###################</span> 54 <span class="c"># $Date: 201 4-09-26 09:41:33 -0500 (Fri, 26 Sep 2014) $</span>54 <span class="c"># $Date: 2015-02-28 18:24:48 -0600 (Sat, 28 Feb 2015) $</span> 55 55 <span class="c"># $Author: vondreele $</span> 56 <span class="c"># $Revision: 1 506$</span>56 <span class="c"># $Revision: 1683 $</span> 57 57 <span class="c"># $URL: https://subversion.xray.aps.anl.gov/pyGSAS/trunk/GSASIImath.py $</span> 58 <span class="c"># $Id: GSASIImath.py 1 506 2014-09-26 14:41:33Z vondreele $</span>58 <span class="c"># $Id: GSASIImath.py 1683 2015-03-01 00:24:48Z vondreele $</span> 59 59 <span class="c">########### SVN repository information ###################</span> 60 60 <span class="sd">'''</span> … … 77 77 <span class="kn">import</span> <span class="nn">copy</span> 78 78 <span class="kn">import</span> <span class="nn">GSASIIpath</span> 79 <span class="n">GSASIIpath</span><span class="o">.</span><span class="n">SetVersionNumber</span><span class="p">(</span><span class="s">"$Revision: 1 506$"</span><span class="p">)</span>79 <span class="n">GSASIIpath</span><span class="o">.</span><span class="n">SetVersionNumber</span><span class="p">(</span><span class="s">"$Revision: 1683 $"</span><span class="p">)</span> 80 80 <span class="kn">import</span> <span class="nn">GSASIIElem</span> <span class="kn">as</span> <span class="nn">G2el</span> 81 81 <span class="kn">import</span> <span class="nn">GSASIIlattice</span> <span class="kn">as</span> <span class="nn">G2lat</span> … … 92 92 <span class="n">atand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="mf">180.</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">arctan</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span> 93 93 <span class="n">atan2d</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">y</span><span class="p">,</span><span class="n">x</span><span class="p">:</span> <span class="mf">180.</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">arctan2</span><span class="p">(</span><span class="n">y</span><span class="p">,</span><span class="n">x</span><span class="p">)</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span> 94 <span class="n">twopi</span> <span class="o">=</span> <span class="mf">2.0</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span> 95 <span class="n">twopisq</span> <span class="o">=</span> <span class="mf">2.0</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">**</span><span class="mi">2</span> 96 97 <span class="c">################################################################################</span> 98 <span class="c">##### Hessian least-squares Levenberg-Marquardt routine</span> 99 <span class="c">################################################################################</span> 94 100 95 101 <div class="viewcode-block" id="HessianLSQ"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.HessianLSQ">[docs]</a><span class="k">def</span> <span class="nf">HessianLSQ</span><span class="p">(</span><span class="n">func</span><span class="p">,</span><span class="n">x0</span><span class="p">,</span><span class="n">Hess</span><span class="p">,</span><span class="n">args</span><span class="o">=</span><span class="p">(),</span><span class="n">ftol</span><span class="o">=</span><span class="mf">1.49012e-8</span><span class="p">,</span><span class="n">xtol</span><span class="o">=</span><span class="mf">1.49012e-8</span><span class="p">,</span> <span class="n">maxcyc</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">Print</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> … … 195 201 <span class="n">deltaChi2</span> <span class="o">=</span> <span class="p">(</span><span class="n">chisq0</span><span class="o">-</span><span class="n">chisq1</span><span class="p">)</span><span class="o">/</span><span class="n">chisq0</span> 196 202 <span class="k">if</span> <span class="n">Print</span><span class="p">:</span> 197 <span class="k">print</span> <span class="s">' Cycle: </span><span class="si">%d</span><span class="s">, Time: </span><span class="si">%.2f</span><span class="s">s, Chi**2: </span><span class="si">%. 3g</span><span class="s">, Lambda: </span><span class="si">%.3g</span><span class="s">, Delta: </span><span class="si">%.3g</span><span class="s">'</span><span class="o">%</span><span class="p">(</span>203 <span class="k">print</span> <span class="s">' Cycle: </span><span class="si">%d</span><span class="s">, Time: </span><span class="si">%.2f</span><span class="s">s, Chi**2: </span><span class="si">%.5g</span><span class="s">, Lambda: </span><span class="si">%.3g</span><span class="s">, Delta: </span><span class="si">%.3g</span><span class="s">'</span><span class="o">%</span><span class="p">(</span> 198 204 <span class="n">icycle</span><span class="p">,</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">time0</span><span class="p">,</span><span class="n">chisq1</span><span class="p">,</span><span class="n">lam</span><span class="p">,</span><span class="n">deltaChi2</span><span class="p">)</span> 199 205 <span class="k">if</span> <span class="n">deltaChi2</span> <span class="o"><</span> <span class="n">ftol</span><span class="p">:</span> … … 238 244 <span class="n">vcov</span><span class="p">[</span><span class="n">i1</span><span class="p">][</span><span class="n">i2</span><span class="p">]</span> <span class="o">=</span> <span class="n">covMatrix</span><span class="p">[</span><span class="n">varyList</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">name1</span><span class="p">)][</span><span class="n">varyList</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">name2</span><span class="p">)]</span> 239 245 <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> 240 <span class="k">if</span> <span class="n">i1</span> <span class="o">==</span> <span class="n">i2</span><span class="p">:</span> 241 <span class="n">vcov</span><span class="p">[</span><span class="n">i1</span><span class="p">][</span><span class="n">i2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">1.0</span> 242 <span class="k">else</span><span class="p">:</span> 243 <span class="n">vcov</span><span class="p">[</span><span class="n">i1</span><span class="p">][</span><span class="n">i2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.0</span> 246 <span class="n">vcov</span><span class="p">[</span><span class="n">i1</span><span class="p">][</span><span class="n">i2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.0</span> 247 <span class="c"># if i1 == i2:</span> 248 <span class="c"># vcov[i1][i2] = 1e-20</span> 249 <span class="c"># else: </span> 250 <span class="c"># vcov[i1][i2] = 0.0</span> 244 251 <span class="k">return</span> <span class="n">vcov</span> 252 253 <span class="c">################################################################################</span> 254 <span class="c">##### Atom manipulations</span> 255 <span class="c">################################################################################</span> 245 256 </div> 257 <span class="k">def</span> <span class="nf">FindMolecule</span><span class="p">(</span><span class="n">ind</span><span class="p">,</span><span class="n">generalData</span><span class="p">,</span><span class="n">atomData</span><span class="p">):</span> <span class="c">#uses numpy & masks - very fast even for proteins!</span> 258 259 <span class="k">def</span> <span class="nf">getNeighbors</span><span class="p">(</span><span class="n">atom</span><span class="p">,</span><span class="n">radius</span><span class="p">):</span> 260 <span class="n">neighList</span> <span class="o">=</span> <span class="p">[]</span> 261 <span class="n">Dx</span> <span class="o">=</span> <span class="n">UAtoms</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">atom</span><span class="p">[</span><span class="n">cx</span><span class="p">:</span><span class="n">cx</span><span class="o">+</span><span class="mi">3</span><span class="p">])</span> 262 <span class="n">dist</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">masked_less</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">Dx</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)),</span><span class="mf">0.5</span><span class="p">)</span> <span class="c">#gets rid of disorder "bonds" < 0.5A</span> 263 <span class="n">sumR</span> <span class="o">=</span> <span class="n">Radii</span><span class="o">+</span><span class="n">radius</span> 264 <span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">masked_greater</span><span class="p">(</span><span class="n">dist</span><span class="o">-</span><span class="n">factor</span><span class="o">*</span><span class="n">sumR</span><span class="p">,</span><span class="mf">0.</span><span class="p">))[</span><span class="mi">0</span><span class="p">])</span> <span class="c">#get indices of bonded atoms</span> 265 266 <span class="kn">import</span> <span class="nn">numpy.ma</span> <span class="kn">as</span> <span class="nn">ma</span> 267 <span class="n">indices</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> 268 <span class="n">Units</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">]</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">indices</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">indices</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">indices</span><span class="p">],</span><span class="n">dtype</span><span class="o">=</span><span class="s">'f'</span><span class="p">)</span> 269 <span class="n">cx</span><span class="p">,</span><span class="n">ct</span><span class="p">,</span><span class="n">cs</span><span class="p">,</span><span class="n">ci</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'AtomPtrs'</span><span class="p">]</span> 270 <span class="n">DisAglCtls</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'DisAglCtls'</span><span class="p">]</span> 271 <span class="n">SGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SGData'</span><span class="p">]</span> 272 <span class="n">Amat</span><span class="p">,</span><span class="n">Bmat</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">cell2AB</span><span class="p">(</span><span class="n">generalData</span><span class="p">[</span><span class="s">'Cell'</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="mi">7</span><span class="p">])</span> 273 <span class="n">radii</span> <span class="o">=</span> <span class="n">DisAglCtls</span><span class="p">[</span><span class="s">'BondRadii'</span><span class="p">]</span> 274 <span class="n">atomTypes</span> <span class="o">=</span> <span class="n">DisAglCtls</span><span class="p">[</span><span class="s">'AtomTypes'</span><span class="p">]</span> 275 <span class="n">factor</span> <span class="o">=</span> <span class="n">DisAglCtls</span><span class="p">[</span><span class="s">'Factors'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> 276 <span class="n">unit</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> 277 <span class="k">try</span><span class="p">:</span> 278 <span class="n">indH</span> <span class="o">=</span> <span class="n">atomTypes</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s">'H'</span><span class="p">)</span> 279 <span class="n">radii</span><span class="p">[</span><span class="n">indH</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.5</span> 280 <span class="k">except</span><span class="p">:</span> 281 <span class="k">pass</span> 282 <span class="n">nAtom</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">atomData</span><span class="p">)</span> 283 <span class="n">Indx</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">nAtom</span><span class="p">)</span> 284 <span class="n">UAtoms</span> <span class="o">=</span> <span class="p">[]</span> 285 <span class="n">Radii</span> <span class="o">=</span> <span class="p">[]</span> 286 <span class="k">for</span> <span class="n">atom</span> <span class="ow">in</span> <span class="n">atomData</span><span class="p">:</span> 287 <span class="n">UAtoms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">atom</span><span class="p">[</span><span class="n">cx</span><span class="p">:</span><span class="n">cx</span><span class="o">+</span><span class="mi">3</span><span class="p">]))</span> 288 <span class="n">Radii</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">radii</span><span class="p">[</span><span class="n">atomTypes</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">atom</span><span class="p">[</span><span class="n">ct</span><span class="p">])])</span> 289 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">UAtoms</span><span class="p">)</span> 290 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Radii</span><span class="p">)</span> 291 <span class="k">for</span> <span class="n">nOp</span><span class="p">,</span><span class="n">Op</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">SGData</span><span class="p">[</span><span class="s">'SGOps'</span><span class="p">][</span><span class="mi">1</span><span class="p">:]):</span> 292 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">UAtoms</span><span class="p">,(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Op</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">UAtoms</span><span class="p">[:</span><span class="n">nAtom</span><span class="p">])</span><span class="o">.</span><span class="n">T</span><span class="o">+</span><span class="n">Op</span><span class="p">[</span><span class="mi">1</span><span class="p">])))</span> 293 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Radii</span><span class="p">,</span><span class="n">Radii</span><span class="p">[:</span><span class="n">nAtom</span><span class="p">]))</span> 294 <span class="n">Indx</span> <span class="o">+=</span> <span class="n">Indx</span><span class="p">[:</span><span class="n">nAtom</span><span class="p">]</span> 295 <span class="k">for</span> <span class="n">icen</span><span class="p">,</span><span class="n">cen</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">SGData</span><span class="p">[</span><span class="s">'SGCen'</span><span class="p">][</span><span class="mi">1</span><span class="p">:]):</span> 296 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">UAtoms</span><span class="p">,(</span><span class="n">UAtoms</span><span class="o">+</span><span class="n">cen</span><span class="p">)))</span> 297 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Radii</span><span class="p">,</span><span class="n">Radii</span><span class="p">))</span> 298 <span class="n">Indx</span> <span class="o">+=</span> <span class="n">Indx</span><span class="p">[:</span><span class="n">nAtom</span><span class="p">]</span> 299 <span class="k">if</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGInv'</span><span class="p">]:</span> 300 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">UAtoms</span><span class="p">,</span><span class="o">-</span><span class="n">UAtoms</span><span class="p">))</span> 301 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Radii</span><span class="p">,</span><span class="n">Radii</span><span class="p">))</span> 302 <span class="n">Indx</span> <span class="o">+=</span> <span class="n">Indx</span> 303 <span class="n">UAtoms</span> <span class="o">%=</span> <span class="mf">1.</span> 304 <span class="n">mAtoms</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">UAtoms</span><span class="p">)</span> 305 <span class="k">for</span> <span class="n">unit</span> <span class="ow">in</span> <span class="n">Units</span><span class="p">:</span> 306 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">unit</span><span class="p">):</span> <span class="c">#skip origin cell</span> 307 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">UAtoms</span><span class="p">,</span><span class="n">UAtoms</span><span class="p">[:</span><span class="n">mAtoms</span><span class="p">]</span><span class="o">+</span><span class="n">unit</span><span class="p">))</span> 308 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Radii</span><span class="p">,</span><span class="n">Radii</span><span class="p">[:</span><span class="n">mAtoms</span><span class="p">]))</span> 309 <span class="n">Indx</span> <span class="o">+=</span> <span class="n">Indx</span><span class="p">[:</span><span class="n">mAtoms</span><span class="p">]</span> 310 <span class="n">UAtoms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">UAtoms</span><span class="p">)</span> 311 <span class="n">Radii</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Radii</span><span class="p">)</span> 312 <span class="n">newAtoms</span> <span class="o">=</span> <span class="p">[</span><span class="n">atomData</span><span class="p">[</span><span class="n">ind</span><span class="p">],]</span> 313 <span class="n">atomData</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="o">=</span> <span class="bp">None</span> 314 <span class="n">radius</span> <span class="o">=</span> <span class="n">Radii</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> 315 <span class="n">IndB</span> <span class="o">=</span> <span class="n">getNeighbors</span><span class="p">(</span><span class="n">newAtoms</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span><span class="n">radius</span><span class="p">)</span> 316 <span class="k">while</span> <span class="bp">True</span><span class="p">:</span> 317 <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">IndB</span><span class="p">):</span> 318 <span class="k">break</span> 319 <span class="n">indb</span> <span class="o">=</span> <span class="n">IndB</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> 320 <span class="k">if</span> <span class="n">atomData</span><span class="p">[</span><span class="n">Indx</span><span class="p">[</span><span class="n">indb</span><span class="p">]]</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span> 321 <span class="k">continue</span> 322 <span class="k">while</span> <span class="bp">True</span><span class="p">:</span> 323 <span class="k">try</span><span class="p">:</span> 324 <span class="n">jndb</span> <span class="o">=</span> <span class="n">Indb</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">indb</span><span class="p">)</span> 325 <span class="n">Indb</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">jndb</span><span class="p">)</span> 326 <span class="k">except</span><span class="p">:</span> 327 <span class="k">break</span> 328 <span class="n">newAtom</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">atomData</span><span class="p">[</span><span class="n">Indx</span><span class="p">[</span><span class="n">indb</span><span class="p">]])</span> 329 <span class="n">newAtom</span><span class="p">[</span><span class="n">cx</span><span class="p">:</span><span class="n">cx</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">UAtoms</span><span class="p">[</span><span class="n">indb</span><span class="p">]</span> <span class="c">#NB: thermal Uij, etc. not transformed!</span> 330 <span class="n">newAtoms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newAtom</span><span class="p">)</span> 331 <span class="n">atomData</span><span class="p">[</span><span class="n">Indx</span><span class="p">[</span><span class="n">indb</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">None</span> 332 <span class="n">IndB</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">IndB</span><span class="p">)</span><span class="o">+</span><span class="nb">list</span><span class="p">(</span><span class="n">getNeighbors</span><span class="p">(</span><span class="n">newAtoms</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span><span class="n">radius</span><span class="p">)))</span> 333 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">IndB</span><span class="p">)</span> <span class="o">></span> <span class="n">nAtom</span><span class="p">:</span> 334 <span class="k">return</span> <span class="s">'Assemble molecule cannot be used on extended structures'</span> 335 <span class="k">for</span> <span class="n">atom</span> <span class="ow">in</span> <span class="n">atomData</span><span class="p">:</span> 336 <span class="k">if</span> <span class="n">atom</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span> 337 <span class="n">newAtoms</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">atom</span><span class="p">)</span> 338 <span class="k">return</span> <span class="n">newAtoms</span> 339 246 340 <div class="viewcode-block" id="FindAtomIndexByIDs"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.FindAtomIndexByIDs">[docs]</a><span class="k">def</span> <span class="nf">FindAtomIndexByIDs</span><span class="p">(</span><span class="n">atomData</span><span class="p">,</span><span class="n">IDs</span><span class="p">,</span><span class="n">Draw</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span> 247 341 <span class="sd">'''finds the set of atom array indices for a list of atom IDs. Will search </span> … … 264 358 <span class="k">return</span> <span class="n">indx</span> 265 359 </div> 266 <div class="viewcode-block" id="FillAtomLookUp"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.FillAtomLookUp">[docs]</a><span class="k">def</span> <span class="nf">FillAtomLookUp</span><span class="p">(</span><span class="n">atomData</span><span class="p"> ):</span>360 <div class="viewcode-block" id="FillAtomLookUp"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.FillAtomLookUp">[docs]</a><span class="k">def</span> <span class="nf">FillAtomLookUp</span><span class="p">(</span><span class="n">atomData</span><span class="p">,</span><span class="n">indx</span><span class="p">):</span> 267 361 <span class="sd">'''create a dictionary of atom indexes with atom IDs as keys</span> 268 362 <span class="sd"> </span> … … 274 368 <span class="n">atomLookUp</span> <span class="o">=</span> <span class="p">{}</span> 275 369 <span class="k">for</span> <span class="n">iatm</span><span class="p">,</span><span class="n">atom</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">atomData</span><span class="p">):</span> 276 <span class="n">atomLookUp</span><span class="p">[</span><span class="n">atom</span><span class="p">[</span><span class=" o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">iatm</span>370 <span class="n">atomLookUp</span><span class="p">[</span><span class="n">atom</span><span class="p">[</span><span class="n">indx</span><span class="p">]]</span> <span class="o">=</span> <span class="n">iatm</span> 277 371 <span class="k">return</span> <span class="n">atomLookUp</span> 278 372 </div> … … 746 840 <span class="k">return</span> <span class="n">Xanom</span> 747 841 842 <span class="k">def</span> <span class="nf">Modulation</span><span class="p">(</span><span class="n">waveTypes</span><span class="p">,</span><span class="n">SSUniq</span><span class="p">,</span><span class="n">SSPhi</span><span class="p">,</span><span class="n">FSSdata</span><span class="p">,</span><span class="n">XSSdata</span><span class="p">,</span><span class="n">USSdata</span><span class="p">):</span> 843 <span class="kn">import</span> <span class="nn">scipy.special</span> <span class="kn">as</span> <span class="nn">sp</span> 844 <span class="kn">import</span> <span class="nn">scipy.integrate</span> <span class="kn">as</span> <span class="nn">si</span> 845 <span class="n">m</span> <span class="o">=</span> <span class="n">SSUniq</span><span class="o">.</span><span class="n">T</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> 846 <span class="n">nh</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 847 <span class="k">if</span> <span class="n">XSSdata</span><span class="o">.</span><span class="n">ndim</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span> 848 <span class="n">nh</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">XSSdata</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> 849 <span class="n">M</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">m</span><span class="o">></span><span class="mi">0</span><span class="p">,</span><span class="n">m</span><span class="o">+</span><span class="n">nh</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span><span class="n">m</span><span class="o">-</span><span class="n">nh</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">])</span> 850 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">XSSdata</span><span class="p">[:</span><span class="mi">3</span><span class="p">])</span> 851 <span class="n">B</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">XSSdata</span><span class="p">[</span><span class="mi">3</span><span class="p">:])</span> 852 <span class="n">HdotA</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">A</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">SSUniq</span><span class="o">.</span><span class="n">T</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">T</span><span class="p">)</span><span class="o">+</span><span class="n">SSPhi</span><span class="p">)</span> 853 <span class="n">HdotB</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">B</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">SSUniq</span><span class="o">.</span><span class="n">T</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">T</span><span class="p">)</span><span class="o">+</span><span class="n">SSPhi</span><span class="p">)</span> 854 <span class="n">GpA</span> <span class="o">=</span> <span class="n">sp</span><span class="o">.</span><span class="n">jn</span><span class="p">(</span><span class="n">M</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span><span class="n">twopi</span><span class="o">*</span><span class="n">HdotA</span><span class="p">)</span> 855 <span class="n">GpB</span> <span class="o">=</span> <span class="n">sp</span><span class="o">.</span><span class="n">jn</span><span class="p">(</span><span class="n">M</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span><span class="n">twopi</span><span class="o">*</span><span class="n">HdotB</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mf">1.j</span><span class="p">)</span><span class="o">**</span><span class="n">M</span> 856 <span class="n">Gp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">GpA</span><span class="o">+</span><span class="n">GpB</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> 857 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">Gp</span><span class="p">)</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">imag</span><span class="p">(</span><span class="n">Gp</span><span class="p">)</span><span class="o">.</span><span class="n">T</span> 858 859 <span class="k">def</span> <span class="nf">ModulationDerv</span><span class="p">(</span><span class="n">waveTypes</span><span class="p">,</span><span class="n">SSUniq</span><span class="p">,</span><span class="n">SSPhi</span><span class="p">,</span><span class="n">FSSdata</span><span class="p">,</span><span class="n">XSSdata</span><span class="p">,</span><span class="n">USSdata</span><span class="p">):</span> 860 <span class="kn">import</span> <span class="nn">scipy.special</span> <span class="kn">as</span> <span class="nn">sp</span> 861 <span class="n">m</span> <span class="o">=</span> <span class="n">SSUniq</span><span class="o">.</span><span class="n">T</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> 862 <span class="n">nh</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> 863 <span class="k">if</span> <span class="n">XSSdata</span><span class="o">.</span><span class="n">ndim</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span> 864 <span class="n">nh</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">XSSdata</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> 865 <span class="n">M</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">m</span><span class="o">></span><span class="mi">0</span><span class="p">,</span><span class="n">m</span><span class="o">+</span><span class="n">nh</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span><span class="n">m</span><span class="o">-</span><span class="n">nh</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">])</span> 866 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">]</span> <span class="k">for</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">XSSdata</span><span class="p">[:</span><span class="mi">3</span><span class="p">],</span><span class="n">XSSdata</span><span class="p">[</span><span class="mi">3</span><span class="p">:])])</span> 867 <span class="n">HdotA</span> <span class="o">=</span> <span class="n">twopi</span><span class="o">*</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">SSUniq</span><span class="o">.</span><span class="n">T</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">A</span><span class="o">.</span><span class="n">T</span><span class="p">)</span><span class="o">+</span><span class="n">SSPhi</span><span class="p">)</span> 868 <span class="n">Gpm</span> <span class="o">=</span> <span class="n">sp</span><span class="o">.</span><span class="n">jn</span><span class="p">(</span><span class="n">M</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,:]</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="n">HdotA</span><span class="p">)</span> 869 <span class="n">Gpp</span> <span class="o">=</span> <span class="n">sp</span><span class="o">.</span><span class="n">jn</span><span class="p">(</span><span class="n">M</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,:]</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="n">HdotA</span><span class="p">)</span> 870 <span class="k">if</span> <span class="n">Gpm</span><span class="o">.</span><span class="n">ndim</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span> <span class="c">#sum over multiple harmonics</span> 871 <span class="n">Gpm</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">Gpm</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> 872 <span class="n">Gpp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">Gpp</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> 873 <span class="n">dGpdk</span> <span class="o">=</span> <span class="mf">0.5</span><span class="o">*</span><span class="p">(</span><span class="n">Gpm</span><span class="o">+</span><span class="n">Gpp</span><span class="p">)</span> 874 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">dGpdk</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">imag</span><span class="p">(</span><span class="n">dGpdk</span><span class="p">)</span> 875 876 <span class="k">def</span> <span class="nf">posFourier</span><span class="p">(</span><span class="n">tau</span><span class="p">,</span><span class="n">psin</span><span class="p">,</span><span class="n">pcos</span><span class="p">):</span> 877 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ps</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">tau</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">ps</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">psin</span><span class="p">)])</span> 878 <span class="n">B</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">pc</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">tau</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">pc</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">pcos</span><span class="p">)])</span> 879 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">A</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> 880 881 <span class="k">def</span> <span class="nf">posSawtooth</span><span class="p">(</span><span class="n">tau</span><span class="p">,</span><span class="n">Toff</span><span class="p">,</span><span class="n">slopes</span><span class="p">):</span> 882 <span class="n">Tau</span> <span class="o">=</span> <span class="p">(</span><span class="n">tau</span><span class="o">-</span><span class="n">Toff</span><span class="p">)</span><span class="o">%</span><span class="mf">1.</span> 883 <span class="n">A</span> <span class="o">=</span> <span class="n">slopes</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">Tau</span> 884 <span class="k">return</span> <span class="n">A</span> 885 886 <span class="k">def</span> <span class="nf">posZigZag</span><span class="p">(</span><span class="n">tau</span><span class="p">,</span><span class="n">Toff</span><span class="p">,</span><span class="n">slopes</span><span class="p">):</span> 887 <span class="n">Tau</span> <span class="o">=</span> <span class="p">(</span><span class="n">tau</span><span class="o">-</span><span class="n">Toff</span><span class="p">)</span><span class="o">%</span><span class="mf">1.</span> 888 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">Tau</span> <span class="o"><=</span> <span class="mf">0.5</span><span class="p">,</span><span class="n">slopes</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">Tau</span><span class="p">,</span><span class="n">slopes</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="mf">1.</span><span class="o">-</span><span class="n">Tau</span><span class="p">))</span> 889 <span class="k">return</span> <span class="n">A</span> 890 891 <span class="k">def</span> <span class="nf">fracCrenel</span><span class="p">(</span><span class="n">tau</span><span class="p">,</span><span class="n">Toff</span><span class="p">,</span><span class="n">Twid</span><span class="p">):</span> 892 <span class="n">Tau</span> <span class="o">=</span> <span class="p">(</span><span class="n">tau</span><span class="o">-</span><span class="n">Toff</span><span class="p">)</span><span class="o">%</span><span class="mf">1.</span> 893 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">Tau</span><span class="o"><</span><span class="n">Twid</span><span class="p">,</span><span class="mf">1.</span><span class="p">,</span><span class="mf">0.</span><span class="p">)</span> 894 <span class="k">return</span> <span class="n">A</span> 895 896 <span class="k">def</span> <span class="nf">fracFourier</span><span class="p">(</span><span class="n">tau</span><span class="p">,</span><span class="n">fsin</span><span class="p">,</span><span class="n">fcos</span><span class="p">):</span> 897 <span class="n">A</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">fs</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="mf">2.</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">tau</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">fs</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">fsin</span><span class="p">)])</span> 898 <span class="n">B</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">fc</span><span class="p">[:,</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="mf">2.</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="n">tau</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">fc</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">fcos</span><span class="p">)])</span> 899 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">A</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> 748 900 749 901 <span class="c">################################################################################</span> 750 <span class="c">##### distance, angle, planes, torsion stuff stuff</span>902 <span class="c">##### distance, angle, planes, torsion stuff </span> 751 903 <span class="c">################################################################################</span> 752 904 … … 1071 1223 <span class="sd"> '''</span> 1072 1224 <span class="k">def</span> <span class="nf">calcVec</span><span class="p">(</span><span class="n">Ox</span><span class="p">,</span><span class="n">Tx</span><span class="p">,</span><span class="n">U</span><span class="p">,</span><span class="n">inv</span><span class="p">,</span><span class="n">C</span><span class="p">,</span><span class="n">M</span><span class="p">,</span><span class="n">T</span><span class="p">,</span><span class="n">Amat</span><span class="p">):</span> 1073 <span class="n">TxT</span> <span class="o">=</span> <span class="n">inv</span><span class="o">*</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">M</span><span class="p">,</span><span class="n">Tx</span><span class="p">)</span><span class="o">+</span><span class="n">T</span><span class="p">)</span><span class="o">+</span><span class="n">C</span> 1074 <span class="n">TxT</span> <span class="o">=</span> <span class="n">G2spc</span><span class="o">.</span><span class="n">MoveToUnitCell</span><span class="p">(</span><span class="n">TxT</span><span class="p">)</span><span class="o">+</span><span class="n">U</span> 1225 <span class="n">TxT</span> <span class="o">=</span> <span class="n">inv</span><span class="o">*</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">M</span><span class="p">,</span><span class="n">Tx</span><span class="p">)</span><span class="o">+</span><span class="n">T</span><span class="p">)</span><span class="o">+</span><span class="n">C</span><span class="o">+</span><span class="n">U</span> 1075 1226 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,(</span><span class="n">TxT</span><span class="o">-</span><span class="n">Ox</span><span class="p">))</span> 1076 1227 … … 1439 1590 <span class="sd"> '''</span> 1440 1591 <span class="c"># Note: this routine is Python 3 compatible -- I think</span> 1592 <span class="n">cutoff</span> <span class="o">=</span> <span class="mf">3.16228</span> <span class="c">#=(sqrt(10); same as old GSAS was 1.95</span> 1441 1593 <span class="k">if</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">):</span> <span class="c"># invalid value, bail out</span> 1442 1594 <span class="k">return</span> <span class="s">'?'</span> … … 1446 1598 <span class="k">elif</span> <span class="n">esd</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> 1447 1599 <span class="c"># transform the esd to a one or two digit integer</span> 1448 <span class="n">l</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">esd</span><span class="p">))</span> <span class="o">%</span> <span class="mi">1</span> 1449 <span class="c"># cut off of 19 1.9==>(19) but 1.95==>(2) N.B. log10(1.95) = 0.2900...</span> 1450 <span class="k">if</span> <span class="n">l</span> <span class="o"><</span> <span class="mf">0.290034611362518</span><span class="p">:</span> <span class="n">l</span><span class="o">+=</span> <span class="mf">1.</span> 1600 <span class="n">l</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">esd</span><span class="p">))</span> <span class="o">%</span> <span class="mf">1.</span> 1601 <span class="k">if</span> <span class="n">l</span> <span class="o"><</span> <span class="n">math</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">cutoff</span><span class="p">):</span> <span class="n">l</span><span class="o">+=</span> <span class="mf">1.</span> 1451 1602 <span class="n">intesd</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="mi">10</span><span class="o">**</span><span class="n">l</span><span class="p">))</span> <span class="c"># esd as integer</span> 1452 1603 <span class="c"># determine the number of digits offset for the esd</span> … … 1501 1652 <span class="sd"> '''</span> 1502 1653 <span class="k">if</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGLaue'</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'3'</span><span class="p">,</span><span class="s">'3m1'</span><span class="p">,</span><span class="s">'31m'</span><span class="p">,</span><span class="s">'6/m'</span><span class="p">,</span><span class="s">'6/mmm'</span><span class="p">]:</span> 1503 <span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">6</span><span class="p">)</span><span class="o">*</span><span class="mi">6</span>1504 <span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span><span class="mi">6</span><span class="p">)</span><span class="o">*</span><span class="mi">6</span>1505 <span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span>1654 <span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="mf">6.</span><span class="p">))</span><span class="o">*</span><span class="mi">6</span> 1655 <span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="mf">6.</span><span class="p">))</span><span class="o">*</span><span class="mi">6</span> 1656 <span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">/</span><span class="mf">4.</span><span class="p">))</span><span class="o">*</span><span class="mi">4</span> 1506 1657 <span class="k">else</span><span class="p">:</span> 1507 <span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span>1508 <span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span>1509 <span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class=" p">((</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span>1658 <span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="mf">4.</span><span class="p">))</span><span class="o">*</span><span class="mi">4</span> 1659 <span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="mf">4.</span><span class="p">))</span><span class="o">*</span><span class="mi">4</span> 1660 <span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">Hmax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">/</span><span class="mf">4.</span><span class="p">))</span><span class="o">*</span><span class="mi">4</span> 1510 1661 </div> 1511 1662 <div class="viewcode-block" id="OmitMap"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.OmitMap">[docs]</a><span class="k">def</span> <span class="nf">OmitMap</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">reflDict</span><span class="p">,</span><span class="n">pgbar</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> … … 1573 1724 <span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">rho_omit</span><span class="p">)</span><span class="o">/</span><span class="n">cell</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> 1574 1725 <span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 1726 <span class="n">mapData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 1575 1727 <span class="k">print</span> <span class="s">'Omit map time: </span><span class="si">%.4f</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">time0</span><span class="p">),</span><span class="s">'no. elements: </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">Fhkl</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> 1728 <span class="k">return</span> <span class="n">mapData</span> 1729 </div> 1730 <div class="viewcode-block" id="Fourier4DMap"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.Fourier4DMap">[docs]</a><span class="k">def</span> <span class="nf">Fourier4DMap</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">reflDict</span><span class="p">):</span> 1731 <span class="sd">'''default doc string</span> 1732 <span class="sd"> </span> 1733 <span class="sd"> :param type name: description</span> 1734 <span class="sd"> </span> 1735 <span class="sd"> :returns: type name: description</span> 1736 <span class="sd"> </span> 1737 <span class="sd"> '''</span> 1738 <span class="n">generalData</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">'General'</span><span class="p">]</span> 1739 <span class="n">mapData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'4DmapData'</span><span class="p">]</span> 1740 <span class="n">dmin</span> <span class="o">=</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'Resolution'</span><span class="p">]</span> 1741 <span class="n">SGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SGData'</span><span class="p">]</span> 1742 <span class="n">SSGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SSGData'</span><span class="p">]</span> 1743 <span class="n">SSGMT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">T</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 1744 <span class="n">SSGT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 1745 <span class="n">cell</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Cell'</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> 1746 <span class="n">A</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">cell2A</span><span class="p">(</span><span class="n">cell</span><span class="p">[:</span><span class="mi">6</span><span class="p">])</span> 1747 <span class="n">maxM</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SuperVec'</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> 1748 <span class="n">Hmax</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">getHKLmax</span><span class="p">(</span><span class="n">dmin</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">A</span><span class="p">)</span><span class="o">+</span><span class="p">[</span><span class="n">maxM</span><span class="p">,]</span> 1749 <span class="n">adjHKLmax</span><span class="p">(</span><span class="n">SGData</span><span class="p">,</span><span class="n">Hmax</span><span class="p">)</span> 1750 <span class="n">Hmax</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">Hmax</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span> 1751 <span class="n">Fhkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="n">Hmax</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'c16'</span><span class="p">)</span> 1752 <span class="n">time0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> 1753 <span class="k">for</span> <span class="n">iref</span><span class="p">,</span><span class="n">ref</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">reflDict</span><span class="p">[</span><span class="s">'RefList'</span><span class="p">]):</span> 1754 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">></span> <span class="n">dmin</span><span class="p">:</span> 1755 <span class="n">Fosq</span><span class="p">,</span><span class="n">Fcsq</span><span class="p">,</span><span class="n">ph</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">9</span><span class="p">:</span><span class="mi">12</span><span class="p">]</span> 1756 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">ref</span><span class="p">[:</span><span class="mi">4</span><span class="p">],</span><span class="n">SSGMT</span><span class="p">)</span> 1757 <span class="n">Phi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">ref</span><span class="p">[:</span><span class="mi">4</span><span class="p">],</span><span class="n">SSGT</span><span class="p">)</span> 1758 <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">hkl</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">Uniq</span><span class="p">):</span> <span class="c">#uses uniq</span> 1759 <span class="n">hkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">hkl</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span> 1760 <span class="n">dp</span> <span class="o">=</span> <span class="mf">360.</span><span class="o">*</span><span class="n">Phi</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="c">#and phi</span> 1761 <span class="n">a</span> <span class="o">=</span> <span class="n">cosd</span><span class="p">(</span><span class="n">ph</span><span class="o">+</span><span class="n">dp</span><span class="p">)</span> 1762 <span class="n">b</span> <span class="o">=</span> <span class="n">sind</span><span class="p">(</span><span class="n">ph</span><span class="o">+</span><span class="n">dp</span><span class="p">)</span> 1763 <span class="n">phasep</span> <span class="o">=</span> <span class="nb">complex</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span> 1764 <span class="n">phasem</span> <span class="o">=</span> <span class="nb">complex</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="o">-</span><span class="n">b</span><span class="p">)</span> 1765 <span class="k">if</span> <span class="s">'Fobs'</span> <span class="ow">in</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'MapType'</span><span class="p">]:</span> 1766 <span class="n">F</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">Fosq</span><span class="o">></span><span class="mf">0.</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">Fosq</span><span class="p">),</span><span class="mf">0.</span><span class="p">)</span> 1767 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="n">hkl</span><span class="o">+</span><span class="n">Hmax</span> 1768 <span class="n">Fhkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">F</span><span class="o">*</span><span class="n">phasep</span> 1769 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="o">-</span><span class="n">hkl</span><span class="o">+</span><span class="n">Hmax</span> 1770 <span class="n">Fhkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">F</span><span class="o">*</span><span class="n">phasem</span> 1771 <span class="k">elif</span> <span class="s">'delt-F'</span> <span class="ow">in</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'MapType'</span><span class="p">]:</span> 1772 <span class="n">dF</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">Fosq</span><span class="o">></span><span class="mf">0.</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">Fosq</span><span class="p">),</span><span class="mf">0.</span><span class="p">)</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">Fcsq</span><span class="p">)</span> 1773 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="n">hkl</span><span class="o">+</span><span class="n">Hmax</span> 1774 <span class="n">Fhkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">dF</span><span class="o">*</span><span class="n">phasep</span> 1775 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="o">-</span><span class="n">hkl</span><span class="o">+</span><span class="n">Hmax</span> 1776 <span class="n">Fhkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">dF</span><span class="o">*</span><span class="n">phasem</span> 1777 <span class="n">rho</span> <span class="o">=</span> <span class="n">fft</span><span class="o">.</span><span class="n">fftn</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">Fhkl</span><span class="p">))</span><span class="o">/</span><span class="n">cell</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> 1778 <span class="k">print</span> <span class="s">'Fourier map time: </span><span class="si">%.4f</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">time0</span><span class="p">),</span><span class="s">'no. elements: </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">Fhkl</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> 1779 <span class="n">mapData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">reflDict</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> 1780 <span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">rho</span><span class="p">)</span> 1781 <span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 1782 <span class="n">mapData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 1576 1783 <span class="k">return</span> <span class="n">mapData</span> 1577 1784 </div> … … 1585 1792 <span class="sd"> '''</span> 1586 1793 <span class="n">generalData</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">'General'</span><span class="p">]</span> 1587 <span class="k">if</span> <span class="ow">not</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Map'</span><span class="p">][</span><span class="s">'MapType'</span><span class="p">]:</span>1588 <span class="k">print</span> <span class="s">'**** ERROR - Fourier map not defined'</span>1589 <span class="k">return</span>1590 1794 <span class="n">mapData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Map'</span><span class="p">]</span> 1591 1795 <span class="n">dmin</span> <span class="o">=</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'Resolution'</span><span class="p">]</span> … … 1601 1805 <span class="n">time0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> 1602 1806 <span class="k">for</span> <span class="n">iref</span><span class="p">,</span><span class="n">ref</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">reflDict</span><span class="p">[</span><span class="s">'RefList'</span><span class="p">]):</span> 1603 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">> =</span> <span class="n">dmin</span><span class="p">:</span>1807 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">></span> <span class="n">dmin</span><span class="p">:</span> 1604 1808 <span class="n">Fosq</span><span class="p">,</span><span class="n">Fcsq</span><span class="p">,</span><span class="n">ph</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">11</span><span class="p">]</span> 1605 1809 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">ref</span><span class="p">[:</span><span class="mi">3</span><span class="p">],</span><span class="n">SGMT</span><span class="p">)</span> … … 1643 1847 <span class="n">rho</span> <span class="o">=</span> <span class="n">fft</span><span class="o">.</span><span class="n">fftn</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">Fhkl</span><span class="p">))</span><span class="o">/</span><span class="n">cell</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> 1644 1848 <span class="k">print</span> <span class="s">'Fourier map time: </span><span class="si">%.4f</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">time0</span><span class="p">),</span><span class="s">'no. elements: </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">Fhkl</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> 1849 <span class="n">mapData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">reflDict</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> 1645 1850 <span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">rho</span><span class="p">)</span> 1646 1851 <span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 1852 <span class="n">mapData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 1647 1853 <span class="k">return</span> <span class="n">mapData</span> 1648 1854 … … 1706 1912 <span class="n">DH</span> <span class="o">=</span> <span class="p">[]</span> 1707 1913 <span class="n">Dphi</span> <span class="o">=</span> <span class="p">[]</span> 1914 <span class="n">SGMT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">T</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGOps'</span><span class="p">]])</span> 1915 <span class="n">SGT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGOps'</span><span class="p">]])</span> 1708 1916 <span class="n">Hmax</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">G2lat</span><span class="o">.</span><span class="n">getHKLmax</span><span class="p">(</span><span class="mf">3.5</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">A</span><span class="p">),</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span> 1709 1917 <span class="k">for</span> <span class="n">F</span> <span class="ow">in</span> <span class="n">Flist</span><span class="p">:</span> 1710 1918 <span class="n">hkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">unravel_index</span><span class="p">(</span><span class="n">Fdict</span><span class="p">[</span><span class="n">F</span><span class="p">],</span><span class="n">hklShape</span><span class="p">)</span> 1919 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">hkl</span><span class="o">-</span><span class="n">hklHalf</span><span class="p">)</span><span class="o">-</span><span class="n">Hmax</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> 1920 <span class="k">continue</span> 1711 1921 <span class="n">iabsnt</span><span class="p">,</span><span class="n">mulp</span><span class="p">,</span><span class="n">Uniq</span><span class="p">,</span><span class="n">Phi</span> <span class="o">=</span> <span class="n">G2spc</span><span class="o">.</span><span class="n">GenHKLf</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">hkl</span><span class="o">-</span><span class="n">hklHalf</span><span class="p">),</span><span class="n">SGData</span><span class="p">)</span> 1712 1922 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Uniq</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span> … … 1720 1930 <span class="n">dH</span> <span class="o">=</span> <span class="n">H</span><span class="o">-</span><span class="n">hkl</span> 1721 1931 <span class="n">dang</span> <span class="o">=</span> <span class="n">ang</span><span class="o">-</span><span class="n">ang0</span> 1722 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">dH</span><span class="p">)</span><span class="o">-</span> <span class="n">Hmax</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> <span class="c">#keep low order DHs</span>1723 <span class="k">continue</span>1724 1932 <span class="n">DH</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dH</span><span class="p">)</span> 1725 1933 <span class="n">Dphi</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">dang</span><span class="o">+.</span><span class="mi">5</span><span class="p">)</span> <span class="o">%</span> <span class="mf">1.0</span><span class="p">)</span> … … 1769 1977 <span class="n">A</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">cell2A</span><span class="p">(</span><span class="n">cell</span><span class="p">[:</span><span class="mi">6</span><span class="p">])</span> 1770 1978 <span class="n">Vol</span> <span class="o">=</span> <span class="n">cell</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> 1979 <span class="n">im</span> <span class="o">=</span> <span class="mi">0</span> 1980 <span class="k">if</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'modulated'</span><span class="p">,</span><span class="s">'magnetic'</span><span class="p">,]:</span> 1981 <span class="n">im</span> <span class="o">=</span> <span class="mi">1</span> 1771 1982 <span class="n">Hmax</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">G2lat</span><span class="o">.</span><span class="n">getHKLmax</span><span class="p">(</span><span class="n">dmin</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">A</span><span class="p">),</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span> 1772 1983 <span class="n">adjHKLmax</span><span class="p">(</span><span class="n">SGData</span><span class="p">,</span><span class="n">Hmax</span><span class="p">)</span> … … 1774 1985 <span class="n">time0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> 1775 1986 <span class="k">for</span> <span class="n">iref</span><span class="p">,</span><span class="n">ref</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">reflDict</span><span class="p">[</span><span class="s">'RefList'</span><span class="p">]):</span> 1776 <span class="n">dsp</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> 1777 <span class="k">if</span> <span class="n">dsp</span> <span class="o">>=</span> <span class="n">dmin</span><span class="p">:</span> 1987 <span class="n">dsp</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">4</span><span class="o">+</span><span class="n">im</span><span class="p">]</span> 1988 <span class="k">if</span> <span class="n">im</span> <span class="ow">and</span> <span class="n">ref</span><span class="p">[</span><span class="mi">3</span><span class="p">]:</span> <span class="c">#skip super lattice reflections - result is 3D projection</span> 1989 <span class="k">continue</span> 1990 <span class="k">if</span> <span class="n">dsp</span> <span class="o">></span> <span class="n">dmin</span><span class="p">:</span> 1778 1991 <span class="n">ff</span> <span class="o">=</span> <span class="mf">0.1</span><span class="o">*</span><span class="n">Vol</span> <span class="c">#est. no. atoms for ~10A**3/atom</span> 1779 1992 <span class="k">if</span> <span class="n">FFtable</span><span class="p">:</span> 1780 1993 <span class="n">SQ</span> <span class="o">=</span> <span class="mf">0.25</span><span class="o">/</span><span class="n">dsp</span><span class="o">**</span><span class="mi">2</span> 1781 1994 <span class="n">ff</span> <span class="o">*=</span> <span class="n">G2el</span><span class="o">.</span><span class="n">ScatFac</span><span class="p">(</span><span class="n">FFtable</span><span class="p">,</span><span class="n">SQ</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 1782 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">8</span><span class=" p">]</span> <span class="o">></span> <span class="mf">0.</span><span class="p">:</span> <span class="c">#use only +ve Fobs**2</span>1783 <span class="n">E</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">ref</span><span class="p">[</span><span class="mi">8</span><span class=" p">])</span><span class="o">/</span><span class="n">ff</span>1995 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">8</span><span class="o">+</span><span class="n">im</span><span class="p">]</span> <span class="o">></span> <span class="mf">0.</span><span class="p">:</span> <span class="c">#use only +ve Fobs**2</span> 1996 <span class="n">E</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">ref</span><span class="p">[</span><span class="mi">8</span><span class="o">+</span><span class="n">im</span><span class="p">])</span><span class="o">/</span><span class="n">ff</span> 1784 1997 <span class="k">else</span><span class="p">:</span> 1785 1998 <span class="n">E</span> <span class="o">=</span> <span class="mf">0.</span> … … 1833 2046 <span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">CErho</span><span class="p">,</span><span class="n">roll</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> 1834 2047 <span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 1835 <span class="n">mapData</span><span class="p">[</span><span class="s">'rollMap'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> 2048 <span class="n">mapData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 2049 <span class="n">mapData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">reflDict</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> 1836 2050 <span class="k">return</span> <span class="n">mapData</span> 1837 2051 </div> 1838 <div class="viewcode-block" id="SearchMap"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.SearchMap">[docs]</a><span class="k">def</span> <span class="nf">SearchMap</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> 2052 <div class="viewcode-block" id="findSSOffset"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.findSSOffset">[docs]</a><span class="k">def</span> <span class="nf">findSSOffset</span><span class="p">(</span><span class="n">SGData</span><span class="p">,</span><span class="n">SSGData</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">Fhklm</span><span class="p">):</span> 2053 <span class="sd">'''default doc string</span> 2054 <span class="sd"> </span> 2055 <span class="sd"> :param type name: description</span> 2056 <span class="sd"> </span> 2057 <span class="sd"> :returns: type name: description</span> 2058 <span class="sd"> </span> 2059 <span class="sd"> '''</span> 2060 <span class="k">if</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SpGrp'</span><span class="p">]</span> <span class="o">==</span> <span class="s">'P 1'</span><span class="p">:</span> 2061 <span class="k">return</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> 2062 <span class="n">hklmShape</span> <span class="o">=</span> <span class="n">Fhklm</span><span class="o">.</span><span class="n">shape</span> 2063 <span class="n">hklmHalf</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">hklmShape</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> 2064 <span class="n">sortHKLM</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="n">Fhklm</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span> 2065 <span class="n">Fdict</span> <span class="o">=</span> <span class="p">{}</span> 2066 <span class="k">for</span> <span class="n">hklm</span> <span class="ow">in</span> <span class="n">sortHKLM</span><span class="p">:</span> 2067 <span class="n">HKLM</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">unravel_index</span><span class="p">(</span><span class="n">hklm</span><span class="p">,</span><span class="n">hklmShape</span><span class="p">)</span> 2068 <span class="n">F</span> <span class="o">=</span> <span class="n">Fhklm</span><span class="p">[</span><span class="n">HKLM</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="n">HKLM</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">HKLM</span><span class="p">[</span><span class="mi">2</span><span class="p">]][</span><span class="n">HKLM</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span> 2069 <span class="k">if</span> <span class="n">F</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">:</span> 2070 <span class="k">break</span> 2071 <span class="n">Fdict</span><span class="p">[</span><span class="s">'</span><span class="si">%.6f</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">F</span><span class="p">))]</span> <span class="o">=</span> <span class="n">hklm</span> 2072 <span class="n">Flist</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">flipud</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">Fdict</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> 2073 <span class="n">F</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="mf">1.e6</span><span class="p">)</span> 2074 <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> 2075 <span class="n">DH</span> <span class="o">=</span> <span class="p">[]</span> 2076 <span class="n">Dphi</span> <span class="o">=</span> <span class="p">[]</span> 2077 <span class="n">SSGMT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">T</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 2078 <span class="n">SSGT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 2079 <span class="n">Hmax</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">G2lat</span><span class="o">.</span><span class="n">getHKLmax</span><span class="p">(</span><span class="mf">3.5</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">A</span><span class="p">),</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span> 2080 <span class="k">for</span> <span class="n">F</span> <span class="ow">in</span> <span class="n">Flist</span><span class="p">:</span> 2081 <span class="n">hklm</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">unravel_index</span><span class="p">(</span><span class="n">Fdict</span><span class="p">[</span><span class="n">F</span><span class="p">],</span><span class="n">hklmShape</span><span class="p">)</span> 2082 <span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">hklm</span><span class="o">-</span><span class="n">hklmHalf</span><span class="p">)[:</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">Hmax</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> 2083 <span class="k">continue</span> 2084 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">hklm</span><span class="o">-</span><span class="n">hklmHalf</span><span class="p">,</span><span class="n">SSGMT</span><span class="p">)</span> 2085 <span class="n">Phi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">hklm</span><span class="o">-</span><span class="n">hklmHalf</span><span class="p">,</span><span class="n">SSGT</span><span class="p">)</span> 2086 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Uniq</span><span class="p">,</span><span class="o">-</span><span class="n">Uniq</span><span class="p">))</span><span class="o">+</span><span class="n">hklmHalf</span> <span class="c"># put in Friedel pairs & make as index to Farray</span> 2087 <span class="n">Phi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">Phi</span><span class="p">,</span><span class="o">-</span><span class="n">Phi</span><span class="p">))</span> <span class="c"># and their phase shifts</span> 2088 <span class="n">Fh0</span> <span class="o">=</span> <span class="n">Fhklm</span><span class="p">[</span><span class="n">hklm</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">hklm</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">hklm</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">hklm</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span> 2089 <span class="n">ang0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">angle</span><span class="p">(</span><span class="n">Fh0</span><span class="p">,</span><span class="n">deg</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span><span class="o">/</span><span class="mf">360.</span> 2090 <span class="k">for</span> <span class="n">H</span><span class="p">,</span><span class="n">phi</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">Uniq</span><span class="p">,</span><span class="n">Phi</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]:</span> 2091 <span class="n">ang</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">angle</span><span class="p">(</span><span class="n">Fhklm</span><span class="p">[</span><span class="n">H</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">H</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">H</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">H</span><span class="p">[</span><span class="mi">3</span><span class="p">]],</span><span class="n">deg</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span><span class="o">/</span><span class="mf">360.</span><span class="o">-</span><span class="n">phi</span><span class="p">)</span> 2092 <span class="n">dH</span> <span class="o">=</span> <span class="n">H</span><span class="o">-</span><span class="n">hklm</span> 2093 <span class="n">dang</span> <span class="o">=</span> <span class="n">ang</span><span class="o">-</span><span class="n">ang0</span> 2094 <span class="n">DH</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dH</span><span class="p">)</span> 2095 <span class="n">Dphi</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">dang</span><span class="o">+.</span><span class="mi">5</span><span class="p">)</span> <span class="o">%</span> <span class="mf">1.0</span><span class="p">)</span> 2096 <span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="mi">20</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">DH</span><span class="p">)</span> <span class="o">></span> <span class="mi">30</span><span class="p">:</span> 2097 <span class="k">break</span> 2098 <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span> 2099 <span class="n">DH</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">DH</span><span class="p">)</span> 2100 <span class="k">print</span> <span class="s">' map offset no.of terms: </span><span class="si">%d</span><span class="s"> from </span><span class="si">%d</span><span class="s"> reflections'</span><span class="o">%</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">DH</span><span class="p">),</span><span class="nb">len</span><span class="p">(</span><span class="n">Flist</span><span class="p">))</span> 2101 <span class="n">Dphi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Dphi</span><span class="p">)</span> 2102 <span class="n">steps</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">hklmShape</span><span class="p">)</span> 2103 <span class="n">X</span><span class="p">,</span><span class="n">Y</span><span class="p">,</span><span class="n">Z</span><span class="p">,</span><span class="n">T</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mgrid</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span><span class="mf">1.</span><span class="o">/</span><span class="n">steps</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span><span class="mf">1.</span><span class="o">/</span><span class="n">steps</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span><span class="mf">1.</span><span class="o">/</span><span class="n">steps</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span><span class="mf">1.</span><span class="o">/</span><span class="n">steps</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span> 2104 <span class="n">XYZT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span><span class="n">Y</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span><span class="n">Z</span><span class="o">.</span><span class="n">flatten</span><span class="p">(),</span><span class="n">T</span><span class="o">.</span><span class="n">flatten</span><span class="p">()))</span> 2105 <span class="n">Dang</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">XYZT</span><span class="p">,</span><span class="n">DH</span><span class="o">.</span><span class="n">T</span><span class="p">)</span><span class="o">+.</span><span class="mi">5</span><span class="p">)</span><span class="o">%</span><span class="mf">1.</span><span class="o">-</span><span class="n">Dphi</span> 2106 <span class="n">Mmap</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">((</span><span class="n">Dang</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span><span class="n">newshape</span><span class="o">=</span><span class="n">steps</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">DH</span><span class="p">)</span> 2107 <span class="n">hist</span><span class="p">,</span><span class="n">bins</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">Mmap</span><span class="p">,</span><span class="n">bins</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span> 2108 <span class="c"># for i,item in enumerate(hist[:10]):</span> 2109 <span class="c"># print item,bins[i]</span> 2110 <span class="n">chisq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">Mmap</span><span class="p">)</span> 2111 <span class="n">DX</span> <span class="o">=</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">unravel_index</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">argmin</span><span class="p">(</span><span class="n">Mmap</span><span class="p">),</span><span class="n">Mmap</span><span class="o">.</span><span class="n">shape</span><span class="p">))</span> 2112 <span class="k">print</span> <span class="s">' map offset chi**2: </span><span class="si">%.3f</span><span class="s">, map offset: </span><span class="si">%d</span><span class="s"> </span><span class="si">%d</span><span class="s"> </span><span class="si">%d</span><span class="s"> </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">chisq</span><span class="p">,</span><span class="n">DX</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">DX</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">DX</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">DX</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> 2113 <span class="c"># print (np.dot(DX,DH.T)+.5)%1.-Dphi</span> 2114 <span class="k">return</span> <span class="n">DX</span> 2115 </div> 2116 <div class="viewcode-block" id="SSChargeFlip"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.SSChargeFlip">[docs]</a><span class="k">def</span> <span class="nf">SSChargeFlip</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">reflDict</span><span class="p">,</span><span class="n">pgbar</span><span class="p">):</span> 2117 <span class="sd">'''default doc string</span> 2118 <span class="sd"> </span> 2119 <span class="sd"> :param type name: description</span> 2120 <span class="sd"> </span> 2121 <span class="sd"> :returns: type name: description</span> 2122 <span class="sd"> </span> 2123 <span class="sd"> '''</span> 2124 <span class="n">generalData</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">'General'</span><span class="p">]</span> 2125 <span class="n">mapData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Map'</span><span class="p">]</span> 2126 <span class="n">map4DData</span> <span class="o">=</span> <span class="p">{}</span> 2127 <span class="n">flipData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Flip'</span><span class="p">]</span> 2128 <span class="n">FFtable</span> <span class="o">=</span> <span class="p">{}</span> 2129 <span class="k">if</span> <span class="s">'None'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">flipData</span><span class="p">[</span><span class="s">'Norm element'</span><span class="p">]:</span> 2130 <span class="n">normElem</span> <span class="o">=</span> <span class="n">flipData</span><span class="p">[</span><span class="s">'Norm element'</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> 2131 <span class="n">FFs</span> <span class="o">=</span> <span class="n">G2el</span><span class="o">.</span><span class="n">GetFormFactorCoeff</span><span class="p">(</span><span class="n">normElem</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'+'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'-'</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span> 2132 <span class="k">for</span> <span class="n">ff</span> <span class="ow">in</span> <span class="n">FFs</span><span class="p">:</span> 2133 <span class="k">if</span> <span class="n">ff</span><span class="p">[</span><span class="s">'Symbol'</span><span class="p">]</span> <span class="o">==</span> <span class="n">normElem</span><span class="p">:</span> 2134 <span class="n">FFtable</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">ff</span><span class="p">)</span> 2135 <span class="n">dmin</span> <span class="o">=</span> <span class="n">flipData</span><span class="p">[</span><span class="s">'Resolution'</span><span class="p">]</span> 2136 <span class="n">SGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SGData'</span><span class="p">]</span> 2137 <span class="n">SSGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SSGData'</span><span class="p">]</span> 2138 <span class="n">SGMT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">T</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGOps'</span><span class="p">]])</span> 2139 <span class="n">SGT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGOps'</span><span class="p">]])</span> 2140 <span class="n">SSGMT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">T</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 2141 <span class="n">SSGT</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ops</span> <span class="ow">in</span> <span class="n">SSGData</span><span class="p">[</span><span class="s">'SSGOps'</span><span class="p">]])</span> 2142 <span class="n">cell</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Cell'</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> 2143 <span class="n">A</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">cell2A</span><span class="p">(</span><span class="n">cell</span><span class="p">[:</span><span class="mi">6</span><span class="p">])</span> 2144 <span class="n">Vol</span> <span class="o">=</span> <span class="n">cell</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> 2145 <span class="n">maxM</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SuperVec'</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> 2146 <span class="n">Hmax</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">G2lat</span><span class="o">.</span><span class="n">getHKLmax</span><span class="p">(</span><span class="n">dmin</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">A</span><span class="p">)</span><span class="o">+</span><span class="p">[</span><span class="n">maxM</span><span class="p">,],</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span> 2147 <span class="n">adjHKLmax</span><span class="p">(</span><span class="n">SGData</span><span class="p">,</span><span class="n">Hmax</span><span class="p">)</span> 2148 <span class="n">Ehkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="n">Hmax</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'c16'</span><span class="p">)</span> <span class="c">#2X64bits per complex no.</span> 2149 <span class="n">time0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> 2150 <span class="k">for</span> <span class="n">iref</span><span class="p">,</span><span class="n">ref</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">reflDict</span><span class="p">[</span><span class="s">'RefList'</span><span class="p">]):</span> 2151 <span class="n">dsp</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> 2152 <span class="k">if</span> <span class="n">dsp</span> <span class="o">></span> <span class="n">dmin</span><span class="p">:</span> 2153 <span class="n">ff</span> <span class="o">=</span> <span class="mf">0.1</span><span class="o">*</span><span class="n">Vol</span> <span class="c">#est. no. atoms for ~10A**3/atom</span> 2154 <span class="k">if</span> <span class="n">FFtable</span><span class="p">:</span> 2155 <span class="n">SQ</span> <span class="o">=</span> <span class="mf">0.25</span><span class="o">/</span><span class="n">dsp</span><span class="o">**</span><span class="mi">2</span> 2156 <span class="n">ff</span> <span class="o">*=</span> <span class="n">G2el</span><span class="o">.</span><span class="n">ScatFac</span><span class="p">(</span><span class="n">FFtable</span><span class="p">,</span><span class="n">SQ</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 2157 <span class="k">if</span> <span class="n">ref</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">></span> <span class="mf">0.</span><span class="p">:</span> <span class="c">#use only +ve Fobs**2</span> 2158 <span class="n">E</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">ref</span><span class="p">[</span><span class="mi">9</span><span class="p">])</span><span class="o">/</span><span class="n">ff</span> 2159 <span class="k">else</span><span class="p">:</span> 2160 <span class="n">E</span> <span class="o">=</span> <span class="mf">0.</span> 2161 <span class="n">ph</span> <span class="o">=</span> <span class="n">ref</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span> 2162 <span class="n">ph</span> <span class="o">=</span> <span class="n">rn</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="mf">0.</span><span class="p">,</span><span class="mf">360.</span><span class="p">)</span> 2163 <span class="n">Uniq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">ref</span><span class="p">[:</span><span class="mi">4</span><span class="p">],</span><span class="n">SSGMT</span><span class="p">)</span> 2164 <span class="n">Phi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">ref</span><span class="p">[:</span><span class="mi">4</span><span class="p">],</span><span class="n">SSGT</span><span class="p">)</span> 2165 <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">hklm</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">Uniq</span><span class="p">):</span> <span class="c">#uses uniq</span> 2166 <span class="n">hklm</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">hklm</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s">'i'</span><span class="p">)</span> 2167 <span class="n">dp</span> <span class="o">=</span> <span class="mf">360.</span><span class="o">*</span><span class="n">Phi</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="c">#and phi</span> 2168 <span class="n">a</span> <span class="o">=</span> <span class="n">cosd</span><span class="p">(</span><span class="n">ph</span><span class="o">+</span><span class="n">dp</span><span class="p">)</span> 2169 <span class="n">b</span> <span class="o">=</span> <span class="n">sind</span><span class="p">(</span><span class="n">ph</span><span class="o">+</span><span class="n">dp</span><span class="p">)</span> 2170 <span class="n">phasep</span> <span class="o">=</span> <span class="nb">complex</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span> 2171 <span class="n">phasem</span> <span class="o">=</span> <span class="nb">complex</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="o">-</span><span class="n">b</span><span class="p">)</span> 2172 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="n">hklm</span><span class="o">+</span><span class="n">Hmax</span> 2173 <span class="n">Ehkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">E</span><span class="o">*</span><span class="n">phasep</span> 2174 <span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span> <span class="o">=</span> <span class="o">-</span><span class="n">hklm</span><span class="o">+</span><span class="n">Hmax</span> <span class="c">#Friedel pair refl.</span> 2175 <span class="n">Ehkl</span><span class="p">[</span><span class="n">h</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">E</span><span class="o">*</span><span class="n">phasem</span> 2176 <span class="c"># Ehkl[Hmax] = 0.00001 #this to preserve F[0,0,0]</span> 2177 <span class="n">CEhkl</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">Ehkl</span><span class="p">)</span> 2178 <span class="n">MEhkl</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">Ehkl</span><span class="p">,</span><span class="n">mask</span><span class="o">=</span><span class="p">(</span><span class="n">Ehkl</span><span class="o">==</span><span class="mf">0.0</span><span class="p">))</span> 2179 <span class="n">Emask</span> <span class="o">=</span> <span class="n">ma</span><span class="o">.</span><span class="n">getmask</span><span class="p">(</span><span class="n">MEhkl</span><span class="p">)</span> 2180 <span class="n">sumE</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">CEhkl</span><span class="p">),</span><span class="n">mask</span><span class="o">=</span><span class="n">Emask</span><span class="p">))</span> 2181 <span class="n">Ncyc</span> <span class="o">=</span> <span class="mi">0</span> 2182 <span class="n">old</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">seterr</span><span class="p">(</span><span class="nb">all</span><span class="o">=</span><span class="s">'raise'</span><span class="p">)</span> 2183 <span class="k">while</span> <span class="bp">True</span><span class="p">:</span> 2184 <span class="n">CErho</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftn</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">CEhkl</span><span class="p">)))</span><span class="o">*</span><span class="p">(</span><span class="mf">1.</span><span class="o">+</span><span class="mi">0j</span><span class="p">)</span> 2185 <span class="n">CEsig</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">CErho</span><span class="p">)</span> 2186 <span class="n">CFrho</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">CErho</span><span class="p">)</span> <span class="o">>=</span> <span class="n">flipData</span><span class="p">[</span><span class="s">'k-factor'</span><span class="p">]</span><span class="o">*</span><span class="n">CEsig</span><span class="p">,</span><span class="n">CErho</span><span class="p">,</span><span class="o">-</span><span class="n">CErho</span><span class="p">)</span> 2187 <span class="n">CFrho</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">CErho</span><span class="p">)</span> <span class="o"><=</span> <span class="n">flipData</span><span class="p">[</span><span class="s">'k-Max'</span><span class="p">]</span><span class="o">*</span><span class="n">CEsig</span><span class="p">,</span><span class="n">CFrho</span><span class="p">,</span><span class="o">-</span><span class="n">CFrho</span><span class="p">)</span> <span class="c">#solves U atom problem!</span> 2188 <span class="n">CFhkl</span> <span class="o">=</span> <span class="n">fft</span><span class="o">.</span><span class="n">ifftshift</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">ifftn</span><span class="p">(</span><span class="n">CFrho</span><span class="p">))</span> 2189 <span class="n">CFhkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">CFhkl</span><span class="p">,</span><span class="n">CFhkl</span><span class="p">,</span><span class="mf">1.0</span><span class="p">)</span> <span class="c">#avoid divide by zero</span> 2190 <span class="n">phase</span> <span class="o">=</span> <span class="n">CFhkl</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">CFhkl</span><span class="p">)</span> 2191 <span class="n">CEhkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">Ehkl</span><span class="p">)</span><span class="o">*</span><span class="n">phase</span> 2192 <span class="n">Ncyc</span> <span class="o">+=</span> <span class="mi">1</span> 2193 <span class="n">sumCF</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">CFhkl</span><span class="p">),</span><span class="n">mask</span><span class="o">=</span><span class="n">Emask</span><span class="p">))</span> 2194 <span class="n">DEhkl</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">Ehkl</span><span class="p">)</span><span class="o">/</span><span class="n">sumE</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">absolute</span><span class="p">(</span><span class="n">CFhkl</span><span class="p">)</span><span class="o">/</span><span class="n">sumCF</span><span class="p">)</span> 2195 <span class="n">Rcf</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mf">100.</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">ma</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">DEhkl</span><span class="p">,</span><span class="n">mask</span><span class="o">=</span><span class="n">Emask</span><span class="p">)</span><span class="o">*</span><span class="mf">100.</span><span class="p">))</span> 2196 <span class="k">if</span> <span class="n">Rcf</span> <span class="o"><</span> <span class="mf">5.</span><span class="p">:</span> 2197 <span class="k">break</span> 2198 <span class="n">GoOn</span> <span class="o">=</span> <span class="n">pgbar</span><span class="o">.</span><span class="n">Update</span><span class="p">(</span><span class="n">Rcf</span><span class="p">,</span><span class="n">newmsg</span><span class="o">=</span><span class="s">'</span><span class="si">%s%8.3f%s</span><span class="se">\n</span><span class="si">%s</span><span class="s"> </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="s">'Residual Rcf ='</span><span class="p">,</span><span class="n">Rcf</span><span class="p">,</span><span class="s">'%'</span><span class="p">,</span><span class="s">'No.cycles = '</span><span class="p">,</span><span class="n">Ncyc</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> 2199 <span class="k">if</span> <span class="ow">not</span> <span class="n">GoOn</span> <span class="ow">or</span> <span class="n">Ncyc</span> <span class="o">></span> <span class="mi">10000</span><span class="p">:</span> 2200 <span class="k">break</span> 2201 <span class="n">np</span><span class="o">.</span><span class="n">seterr</span><span class="p">(</span><span class="o">**</span><span class="n">old</span><span class="p">)</span> 2202 <span class="k">print</span> <span class="s">' Charge flip time: </span><span class="si">%.4f</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">time0</span><span class="p">),</span><span class="s">'no. elements: </span><span class="si">%d</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">Ehkl</span><span class="o">.</span><span class="n">size</span><span class="p">)</span> 2203 <span class="n">CErho</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftn</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">CEhkl</span><span class="p">[:,:,:,</span><span class="n">maxM</span><span class="o">+</span><span class="mi">1</span><span class="p">])))</span> 2204 <span class="n">SSrho</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftn</span><span class="p">(</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">CEhkl</span><span class="p">)))</span> 2205 <span class="k">print</span> <span class="s">' No.cycles = '</span><span class="p">,</span><span class="n">Ncyc</span><span class="p">,</span><span class="s">'Residual Rcf =</span><span class="si">%8.3f%s</span><span class="s">'</span><span class="o">%</span><span class="p">(</span><span class="n">Rcf</span><span class="p">,</span><span class="s">'%'</span><span class="p">)</span><span class="o">+</span><span class="s">' Map size:'</span><span class="p">,</span><span class="n">CErho</span><span class="o">.</span><span class="n">shape</span> 2206 <span class="n">roll</span> <span class="o">=</span> <span class="n">findSSOffset</span><span class="p">(</span><span class="n">SGData</span><span class="p">,</span><span class="n">SSGData</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="n">CEhkl</span><span class="p">)</span> <span class="c">#CEhkl needs to be just the observed set, not the full set!</span> 2207 2208 <span class="n">mapData</span><span class="p">[</span><span class="s">'Rcf'</span><span class="p">]</span> <span class="o">=</span> <span class="n">Rcf</span> 2209 <span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">CErho</span><span class="p">,</span><span class="n">roll</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span> 2210 <span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 2211 <span class="n">mapData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 2212 <span class="n">mapData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">reflDict</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> 2213 2214 <span class="n">map4DData</span><span class="p">[</span><span class="s">'Rcf'</span><span class="p">]</span> <span class="o">=</span> <span class="n">Rcf</span> 2215 <span class="n">map4DData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">real</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">SSrho</span><span class="p">,</span><span class="n">roll</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">),</span><span class="n">roll</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span><span class="n">axis</span><span class="o">=</span><span class="mi">3</span><span class="p">))</span> 2216 <span class="n">map4DData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">map4DData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">map4DData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]))</span> 2217 <span class="n">map4DData</span><span class="p">[</span><span class="s">'minmax'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">map4DData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">map4DData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])]</span> 2218 <span class="n">map4DData</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> <span class="o">=</span> <span class="n">reflDict</span><span class="p">[</span><span class="s">'Type'</span><span class="p">]</span> 2219 <span class="k">return</span> <span class="n">mapData</span><span class="p">,</span><span class="n">map4DData</span> 2220 </div> 2221 <div class="viewcode-block" id="SearchMap"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.SearchMap">[docs]</a><span class="k">def</span> <span class="nf">SearchMap</span><span class="p">(</span><span class="n">generalData</span><span class="p">,</span><span class="n">drawingData</span><span class="p">,</span><span class="n">Neg</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> 1839 2222 <span class="sd">'''Does a search of a density map for peaks meeting the criterion of peak</span> 1840 2223 <span class="sd"> height is greater than mapData['cutOff']/100 of mapData['rhoMax'] where </span> 1841 2224 <span class="sd"> mapData is data['General']['mapData']; the map is also in mapData.</span> 1842 2225 1843 <span class="sd"> :param data: the phase data structure</span> 2226 <span class="sd"> :param generalData: the phase data structure; includes the map</span> 2227 <span class="sd"> :param drawingData: the drawing data structure</span> 2228 <span class="sd"> :param Neg: if True then search for negative peaks (i.e. H-atoms & neutron data)</span> 1844 2229 1845 2230 <span class="sd"> :returns: (peaks,mags,dzeros) where</span> … … 1851 2236 <span class="sd"> * dzeros : ndarray</span> 1852 2237 <span class="sd"> the distance of the peaks from the unit cell origin</span> 2238 <span class="sd"> * dcent : ndarray</span> 2239 <span class="sd"> the distance of the peaks from the unit cell center</span> 1853 2240 1854 2241 <span class="sd"> '''</span> … … 1905 2292 <span class="k">return</span> <span class="n">Vec</span><span class="p">,</span><span class="n">Hess</span> 1906 2293 1907 <span class="n">generalData</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">'General'</span><span class="p">]</span>1908 2294 <span class="n">phaseName</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Name'</span><span class="p">]</span> 1909 2295 <span class="n">SGData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'SGData'</span><span class="p">]</span> 1910 2296 <span class="n">Amat</span><span class="p">,</span><span class="n">Bmat</span> <span class="o">=</span> <span class="n">G2lat</span><span class="o">.</span><span class="n">cell2AB</span><span class="p">(</span><span class="n">generalData</span><span class="p">[</span><span class="s">'Cell'</span><span class="p">][</span><span class="mi">1</span><span class="p">:</span><span class="mi">7</span><span class="p">])</span> 1911 <span class="n">drawingData</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s">'Drawing'</span><span class="p">]</span>1912 2297 <span class="n">peaks</span> <span class="o">=</span> <span class="p">[]</span> 1913 2298 <span class="n">mags</span> <span class="o">=</span> <span class="p">[]</span> 1914 2299 <span class="n">dzeros</span> <span class="o">=</span> <span class="p">[]</span> 2300 <span class="n">dcent</span> <span class="o">=</span> <span class="p">[]</span> 1915 2301 <span class="k">try</span><span class="p">:</span> 1916 2302 <span class="n">mapData</span> <span class="o">=</span> <span class="n">generalData</span><span class="p">[</span><span class="s">'Map'</span><span class="p">]</span> 1917 2303 <span class="n">contLevel</span> <span class="o">=</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'cutOff'</span><span class="p">]</span><span class="o">*</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rhoMax'</span><span class="p">]</span><span class="o">/</span><span class="mf">100.</span> 1918 <span class="n">rho</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])</span> <span class="c">#don't mess up original</span> 2304 <span class="k">if</span> <span class="n">Neg</span><span class="p">:</span> 2305 <span class="n">rho</span> <span class="o">=</span> <span class="o">-</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])</span> <span class="c">#flip +/-</span> 2306 <span class="k">else</span><span class="p">:</span> 2307 <span class="n">rho</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">mapData</span><span class="p">[</span><span class="s">'rho'</span><span class="p">])</span> <span class="c">#don't mess up original</span> 1919 2308 <span class="n">mapHalf</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">rho</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span> 1920 2309 <span class="n">res</span> <span class="o">=</span> <span class="n">mapData</span><span class="p">[</span><span class="s">'Resolution'</span><span class="p">]</span> … … 1949 2338 <span class="n">peak</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">x1</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">4</span><span class="p">])</span><span class="o">-</span><span class="n">ind</span><span class="p">)</span><span class="o">/</span><span class="n">incre</span> 1950 2339 <span class="n">peak</span> <span class="o">=</span> <span class="n">fixSpecialPos</span><span class="p">(</span><span class="n">peak</span><span class="p">,</span><span class="n">SGData</span><span class="p">,</span><span class="n">Amat</span><span class="p">)</span> 1951 <span class="n">rho</span> <span class="o">=</span> <span class="n">rollMap</span><span class="p">(</span><span class="n">rho</span><span class="p">,</span><span class="o">-</span><span class="n">ind</span><span class="p">)</span> 2340 <span class="n">rho</span> <span class="o">=</span> <span class="n">rollMap</span><span class="p">(</span><span class="n">rho</span><span class="p">,</span><span class="o">-</span><span class="n">ind</span><span class="p">)</span> 2341 <span class="n">cent</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">*.</span><span class="mi">5</span> 1952 2342 <span class="n">dzeros</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">peaks</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span> 1953 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">peaks</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">mags</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">dzeros</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span> 2343 <span class="n">dcent</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">peaks</span><span class="o">-</span><span class="n">cent</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">,</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span> 2344 <span class="k">if</span> <span class="n">Neg</span><span class="p">:</span> <span class="c">#want negative magnitudes for negative peaks</span> 2345 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">peaks</span><span class="p">),</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">mags</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">dzeros</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">dcent</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span> 2346 <span class="k">else</span><span class="p">:</span> 2347 <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">peaks</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">mags</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">dzeros</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">dcent</span><span class="p">,])</span><span class="o">.</span><span class="n">T</span> 1954 2348 </div> 1955 2349 <div class="viewcode-block" id="sortArray"><a class="viewcode-back" href="../GSASIImath.html#GSASIImath.sortArray">[docs]</a><span class="k">def</span> <span class="nf">sortArray</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="n">pos</span><span class="p">,</span><span class="n">reverse</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> … … 1959 2353 <span class="n">T</span> <span class="o">=</span> <span class="p">[]</span> 1960 2354 <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">M</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> 1961 <span class="n">T</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">M</span><span class="p">[</span><span class="n">pos</span><span class="p">],</span><span class="n">i</span><span class="p">))</span> 2355 <span class="k">try</span><span class="p">:</span> 2356 <span class="n">T</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">M</span><span class="p">[</span><span class="n">pos</span><span class="p">],</span><span class="n">i</span><span class="p">))</span> 2357 <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> 2358 <span class="k">return</span> <span class="n">data</span> 1962 2359 <span class="n">D</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="n">data</span><span class="p">))</span> 1963 2360 <span class="n">T</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> … … 2015 2412 2016 2413 <span class="k">def</span> <span class="nf">noDuplicate</span><span class="p">(</span><span class="n">xyz</span><span class="p">,</span><span class="n">peaks</span><span class="p">,</span><span class="n">Amat</span><span class="p">):</span> 2017 <span class="k">if</span> <span class="bp">True</span> <span class="ow">in</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">allclose</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">xyz</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">peak</span><span class="p">),</span><span class="n">atol</span><span class="o">=</span><span class="mf"> 1.0</span><span class="p">)</span> <span class="k">for</span> <span class="n">peak</span> <span class="ow">in</span> <span class="n">peaks</span><span class="p">]:</span>2414 <span class="k">if</span> <span class="bp">True</span> <span class="ow">in</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">allclose</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">xyz</span><span class="p">),</span><span class="n">np</span><span class="o">.</span><span class="n">inner</span><span class="p">(</span><span class="n">Amat</span><span class="p">,</span><span class="n">peak</span><span class="p">),</span><span class="n">atol</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span> <span class="k">for</span> <span class="n">peak</span> <span class="ow">in</span> <span class="n">peaks</span><span class="p">]:</span> 2018 2415 <span class="k">return</span> <span class="bp">False</span> 2019 2416 <span class="k">return</span> <span class="bp">True</span> … … 2677 3074 <span class="sd"> '''</span> 2678 3075 2679 <span class="n">twopi</span> <span class="o">=</span> <span class="mf">2.0</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span>2680 3076 <span class="k">global</span> <span class="n">tsum</span> 2681 3077 <span class="n">tsum</span> <span class="o">=</span> <span class="mf">0.</span> … … 3027 3423 <span class="n">x0</span> <span class="o">=</span> <span class="p">[</span><span class="n">parmDict</span><span class="p">[</span><span class="n">val</span><span class="p">]</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">varyList</span><span class="p">]</span> 3028 3424 <span class="n">ifInv</span> <span class="o">=</span> <span class="n">SGData</span><span class="p">[</span><span class="s">'SGInv'</span><span class="p">]</span> 3425 <span class="c"># consider replacing anneal with scipy.optimize.basinhopping</span> 3029 3426 <span class="n">results</span> <span class="o">=</span> <span class="n">anneal</span><span class="p">(</span><span class="n">mcsaCalc</span><span class="p">,</span><span class="n">x0</span><span class="p">,</span><span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">refs</span><span class="p">,</span><span class="n">rcov</span><span class="p">,</span><span class="n">cosTable</span><span class="p">,</span><span class="n">ifInv</span><span class="p">,</span><span class="n">allFF</span><span class="p">,</span><span class="n">RBdata</span><span class="p">,</span><span class="n">varyList</span><span class="p">,</span><span class="n">parmDict</span><span class="p">),</span> 3030 3427 <span class="n">schedule</span><span class="o">=</span><span class="n">MCSA</span><span class="p">[</span><span class="s">'Algorithm'</span><span class="p">],</span> <span class="n">full_output</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
Note: See TracChangeset
for help on using the changeset viewer.