Source code for irfpy.vels.bible.kfactor
''' Implementation of K-factor. Section 4 of :ref:`vexelsbible`.
This is an energy-averaged k-factor.
'''
import numpy as np
[docs]def kfactors():
''' Return the list of k-factor.
It refers to Table 1 in the bible.
:returns: The k-factors of the specified anode in eV/V
:rtype: ``nparray``
'''
return np.array([10.490, 10.627, 10.824, 10.956, 11.077,
11.192, 11.310, 11.397, 11.315, 11.193,
11.007, 11.808, 10.558, 10.419, 10.355,
10.363])
[docs]def fit_kfactor():
''' Return the function of the k-factor.
It refers to the equation (1) in bible.
:returns: Function of k-factor. The function will take 1 argument specifying anode.
>>> func_kfactor = fit_kfactor() # Return the function of k-factor
>>> k10 = func_kfactor(10) # Return the k-factor of anode 10.
>>> print('%.3f' % k10)
11.012
'''
func = lambda x: (((0.000323 * x - 0.00889) * x + 0.0573) * x + 0.0424 ) * x + 10.518
return func
[docs]def kfactor(anode, src="table"):
''' Return the k-factor of the specified anode.
:param anode: The number of anode.
:keyword src: The source, ``"table"`` or ``"fit"``. ``"table"`` refers to :func:`kfactor` and ``"fit"`` referes to :func:`fit_kfactor`.
>>> print(kfactor(5))
11.192
>>> print("%.3f" % kfactor(5, src="fit"))
11.253
'''
if src == "table":
return kfactors()[anode]
elif src == "fit":
return (fit_kfactor())(anode)
else:
raise ValueError("Unknown source for kfactor")
import unittest,doctest
[docs]def doctests():
return unittest.TestSuite((
doctest.DocTestSuite(),
))
if __name__=='__main__':
unittest.main(defaultTest='doctests')