Source code for TRXASprefitpack.res.parm_bound
'''
param_bound:
submodule for setting default parameter boundary of
irf parameter, time zero and lifetime constant tau
:copyright: 2021-2022 by pistack (Junho Lee).
:license: LGPL3.
'''
from typing import Tuple, Union
import numpy as np
[docs]def set_bound_t0(t0: float, fwhm: Union[float, np.ndarray]) -> Tuple[float, float]:
'''
Setting bound for time zero
Args:
t0: initial guess for time zero
fwhm: initial guess for full width at half maximum of instrumental response function
`float` for gaussian and cauchy shape, `np.ndarray` with two element `(fwhm_G, fwhm_L)` for pseudo voigt shape.
Returns:
Tuple of upper and lower bound of time zero
'''
if not isinstance(fwhm, np.ndarray):
bound = (t0-2*fwhm, t0+2*fwhm)
else:
fwhm_eff = 0.5346*fwhm[1] + \
np.sqrt(0.2166*fwhm[1]**2+fwhm[0]**2)
bound = (t0-2*fwhm_eff, t0+2*fwhm_eff)
return bound
[docs]def set_bound_e0(e0: float, fwhm_G: float, fwhm_L: float) -> Tuple[float, float]:
'''
Setting bound for peak position and edge position
Args:
e0: initial guess for peak position
fwhm_G: initial guess of fwhm_G parameter of voigt component
fwhm_L: initial guess of fwhm_L parameter of voigt component
Returns:
Tuple of upper and lower bound of peak position
'''
if fwhm_G == 0:
bound = (e0-fwhm_L/2, e0+fwhm_L/2)
elif fwhm_L == 0:
bound = (e0-fwhm_G/2, e0+fwhm_G/2)
else:
fwhm_eff = 0.5346*fwhm_L+np.sqrt(0.2166*fwhm_L**2+fwhm_G**2)
bound = (e0-fwhm_eff/2, e0+fwhm_eff/2)
return bound
[docs]def set_bound_tau(tau: float, fwhm: Union[float, np.ndarray]) -> Tuple[float, float]:
'''
Setting bound for lifetime constant
Args:
tau: initial guess for lifetime constant
fwhm: initial guess for full width at half maximum of instrumental response function
`float` for gaussian and cauchy shape, `np.ndarray` with two element `(fwhm_G, fwhm_L)` for pseudo voigt shape.
Returns:
Tuple of upper bound and lower bound of tau
'''
if not isinstance(fwhm, np.ndarray):
fwhm_eff = fwhm
else:
fwhm_eff = 0.5346*fwhm[1] + \
np.sqrt(0.2166*fwhm[1]**2+fwhm[0]**2)
bound = (tau/2, 2*fwhm_eff)
if fwhm_eff <= tau < 4*fwhm_eff:
bound = (fwhm_eff/2, 8*fwhm_eff)
elif 4*fwhm_eff <= tau < 16*fwhm_eff:
bound = (2*fwhm_eff, 32*fwhm_eff)
elif 16*fwhm_eff <= tau < 64*fwhm_eff:
bound = (8*fwhm_eff, 128*fwhm_eff)
elif 64*fwhm_eff <= tau < 256*fwhm_eff:
bound = (32*fwhm_eff, 512*fwhm_eff)
elif 256*fwhm_eff <= tau < 1024*fwhm_eff:
bound = (128*fwhm_eff, 2048*fwhm_eff)
elif 1024*fwhm_eff <= tau < 4096*fwhm_eff:
bound = (512*fwhm_eff, 8192*fwhm_eff)
elif 4096*fwhm_eff <= tau < 16384*fwhm_eff:
bound = (2048*fwhm_eff, 32768*fwhm_eff)
elif 16384*fwhm_eff <= tau < 65536*fwhm_eff:
bound = (8192*fwhm_eff, 131072*fwhm_eff)
elif 65536*fwhm_eff <= tau < 262144*fwhm_eff:
bound = (32768*fwhm_eff, 524288*fwhm_eff)
elif tau >= 262144*fwhm_eff:
bound = (131072*fwhm_eff, 2*tau)
return bound