Source code for TRXASprefitpack.thy.broad

'''
broad:
submodule for broading theoritical spectrum

:copyright: 2021 by pistack (Junho Lee).
:license: LGPL3
'''

from typing import Optional
import numpy as np
from scipy.special import voigt_profile


[docs]def gen_theory_data(e: np.ndarray, peaks: np.ndarray, A: float, fwhm_G: float, fwhm_L: float, peak_shift: float, out: Optional[str] = None) -> np.ndarray: ''' voigt broadening theoretically calculated lineshape spectrum Args: e: energy (unit: eV) A: scaling parameter fwhm_G: full width at half maximum of gaussian shape (unit: eV) fwhm_L: full width at half maximum of lorenzian shape (unit: eV) peak_shift: discrepency of peak position between expt data and theoretically broadened spectrum out: prefix for output txt file [optional] Returns: numpy ndarray of voigt broadened theoritical lineshape spectrum Note: If out is not none, It will makes 1. out_thy.txt: txt file for rescaled and boroadend calc spectrum 2. out_thy_stk.txt: txt file for rescaled and shifted calc peaks ''' num_e = e.shape[0] num_peaks = peaks.shape[0] v_matrix = np.zeros((num_e, num_peaks)) for i in range(num_peaks): v_matrix[:, i] = voigt_profile(e-(peaks[i, 0]-peak_shift), fwhm_G/(2*np.sqrt(2*np.log(2))), fwhm_L/2) broadened_theory = A * v_matrix @ peaks[:, 1].reshape((num_peaks, 1)) broadened_theory = broadened_theory.flatten() if out is not None: save_thy = np.vstack((e, broadened_theory)) np.savetxt(out+'_thy'+'.txt', save_thy.T, fmt=['%.2f', '%.8e'], header='energy \t abs_thy', newline='\n', delimiter='\t') np.savetxt(out+'_stk_rescaled'+'.txt', np.vstack((peaks[:, 0]-peak_shift, A*peaks[:, 1])).T, fmt=['%.2f', '%.8e'], header='energy \t abs_thy', newline='\n', delimiter='\t') return broadened_theory