Fitting model functions (backends)

01/09/22

As of August 2022, both AF and MF model functions are supported for fitting, and additional models may now readily be added via the self.backends() routine. This notebook briefly demos the functionality.

(For a general fitting demo, see the basic demo notebook.)

Setup

[1]:
# Import fit class
from pemtk.fit.fitClass import pemtkFit

# Init new fit class object
data = pemtkFit(verbose = 2)
*** ePSproc installation not found, setting for local copy.
* Setting plotter defaults with epsproc.basicPlotters.setPlotters(). Run directly to modify, or change options in local env.
* Set Holoviews with bokeh.
C:\Users\femtolab\.conda\envs\ePSdev\lib\site-packages\xyzpy\plot\xyz_cmaps.py:6: MatplotlibDeprecationWarning:
The revcmap function was deprecated in Matplotlib 3.2 and will be removed two minor releases later. Use Colormap.reversed() instead.
  return LinearSegmentedColormap(name, cm.revcmap(cmap._segmentdata))
* Setting fitting backend to 'afblmXprod'

Default model backend

The default backend is set at class init, and the name set in self.backend

[2]:
data.backend
[2]:
'afblmXprod'

For use in fitting, the function corresponding to this name is set in self.fitOpts['backend'].

[3]:
data.fitOpts['backend']
[3]:
<function epsproc.geomFunc.afblmGeom.afblmXprod(matEin, QNs=None, AKQS=None, EPRX=None, p=[0], BLMtable=None, BLMtableResort=None, lambdaTerm=None, polProd=None, AFterm=None, thres=0.01, thresDims='Eke', selDims={'Type': 'L'}, sumDims=['mu', 'mup', 'l', 'lp', 'm', 'mp', 'S-Rp'], sumDimsPol=['P', 'R', 'Rp', 'p'], symSum=True, degenDrop=True, SFflag=False, SFflagRenorm=False, BLMRenorm=1, squeeze=False, phaseConvention='E', basisReturn='BLM', verbose=0, **kwargs)>

Available models

Call self.backends() to get a dictionary of available functions and handles.

[4]:
data.backends()
[4]:
{'af': {'name': 'afblm',
  'afblmXprod': <function epsproc.geomFunc.afblmGeom.afblmXprod(matEin, QNs=None, AKQS=None, EPRX=None, p=[0], BLMtable=None, BLMtableResort=None, lambdaTerm=None, polProd=None, AFterm=None, thres=0.01, thresDims='Eke', selDims={'Type': 'L'}, sumDims=['mu', 'mup', 'l', 'lp', 'm', 'mp', 'S-Rp'], sumDimsPol=['P', 'R', 'Rp', 'p'], symSum=True, degenDrop=True, SFflag=False, SFflagRenorm=False, BLMRenorm=1, squeeze=False, phaseConvention='E', basisReturn='BLM', verbose=0, **kwargs)>,
  'keyDim': 't'},
 'mf': {'name': 'mfblm',
  'mfblmXprod': <function epsproc.geomFunc.mfblmGeom.mfblmXprod(matEin, QNs=None, EPRX=None, p=[0], BLMtable=None, BLMtableResort=None, lambdaTerm=None, RX=None, eulerAngs=None, polProd=None, thres=0.01, thresDims='Eke', selDims={'it': 1, 'Type': 'L'}, sumDims=['mu', 'mup', 'l', 'lp', 'm', 'mp'], sumDimsPol=['P', 'R', 'Rp', 'p'], symSum=True, SFflag=False, squeeze=False, phaseConvention='E', basisReturn='BLM', verbose=0, **kwargs)>,
  'keyDim': 'pol'}}

To change the current model, call .backends() with a supported function name from the list above to set.

[5]:
data.backends('mfblmXprod');
* Setting fitting backend to 'mfblmXprod'
[6]:
data.backend
[6]:
'mfblmXprod'
[7]:
data.fitOpts['backend']
[7]:
<function epsproc.geomFunc.mfblmGeom.mfblmXprod(matEin, QNs=None, EPRX=None, p=[0], BLMtable=None, BLMtableResort=None, lambdaTerm=None, RX=None, eulerAngs=None, polProd=None, thres=0.01, thresDims='Eke', selDims={'it': 1, 'Type': 'L'}, sumDims=['mu', 'mup', 'l', 'lp', 'm', 'mp'], sumDimsPol=['P', 'R', 'Rp', 'p'], symSum=True, SFflag=False, squeeze=False, phaseConvention='E', basisReturn='BLM', verbose=0, **kwargs)>
[8]:
data.backends('afblmXprod');
* Setting fitting backend to 'afblmXprod'
[9]:
data.backend
[9]:
'afblmXprod'

Custom backends

To use alternative backends, just set the function handle to self.fitOpts['backend'], this can also be set at class creation.

[10]:
# Init new fit class object
import numpy as np
data2 = pemtkFit(verbose = 2, backend=np.abs)
* Setting fitting backend to 'absolute'
[11]:
data2.backend
[11]:
'absolute'
[12]:
data2.fitOpts['backend']
[12]:
<ufunc 'absolute'>

Note, however, that this function is currently used by the self.afblmMatEfit, and must return an Xarray of BLM parameters, and a set of basis functions - see the source code for more details.

In future, more general wrappers may be added here.

Versions

[13]:
import scooby
scooby.Report(additional=['epsproc', 'pemtk', 'xarray', 'jupyter'])
[13]:
Thu Sep 01 16:33:26 2022 Eastern Daylight Time
OS Windows CPU(s) 32 Machine AMD64
Architecture 64bit RAM 63.9 GB Environment Jupyter
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)]
epsproc 1.3.2-dev pemtk 0.0.1 xarray 0.15.0
jupyter Version unknown numpy 1.18.1 scipy 1.3.0
IPython 7.12.0 matplotlib 3.3.1 scooby 0.5.6
Intel(R) Math Kernel Library Version 2020.0.0 Product Build 20191125 for Intel(R) 64 architecture applications
[14]:
# Check current Git commit for local ePSproc version
import epsproc as ep
from pathlib import Path
!git -C {Path(ep.__file__).parent} branch
!git -C {Path(ep.__file__).parent} log --format="%H" -n 1
* dev
  master
  numba-tests
815a839f3c8c4995532d6b5f87997b8ba2bb12eb
[15]:
# Check current remote commits
!git ls-remote --heads https://github.com/phockett/ePSproc
# !git ls-remote --heads git://github.com/phockett/epsman
92c661789a7d2927f2b53d7266f57de70b3834fa        refs/heads/dependabot/pip/notes/envs/envs-versioned/mistune-2.0.3
fe1e9540c7b91fe571f60562acd31d8e489d491e        refs/heads/dependabot/pip/notes/envs/envs-versioned/nbconvert-6.5.1
815a839f3c8c4995532d6b5f87997b8ba2bb12eb        refs/heads/dev
1c0b8fd409648f07c85f4f20628b5ea7627e0c4e        refs/heads/master
69cd89ce5bc0ad6d465a4bd8df6fba15d3fd1aee        refs/heads/numba-tests
ea30878c842f09d525fbf39fa269fa2302a13b57        refs/heads/revert-9-master
[16]:
# Check current Git commit for local PEMtk version
import pemtk
from pathlib import Path
!git -C {Path(pemtk.__file__).parent} branch
!git -C {Path(pemtk.__file__).parent} log --format="%H" -n 1
  master
* mfFittingDev
c1be71d7cbb7d000370d9d28dbeaaca48b9e8bb0
[17]:
# Check current remote commits
!git ls-remote --heads https://github.com/phockett/PEMtk
# !git ls-remote --heads git://github.com/phockett/epsman
1059c4ebbd637467c0b6c37a95a51b684be0d298        refs/heads/master
7eda41b192a0b9a214bef2925becc99f716bf59a        refs/heads/mfFittingDev
[18]:
import epsproc as ep
ep.__file__
[18]:
'D:\\code\\github\\ePSproc\\epsproc\\__init__.py'
[ ]: