def process(sigma, field, name): # output folder folder = 'data/' + name if not os.path.exists(folder): os.makedirs(folder) # tabulated energies, limit to energies where the interaction is possible Emin = getEmin(sigma, field) E = np.logspace(10, 23, 261) * eV E = E[E > Emin] # ------------------------------------------- # calculate interaction rates # ------------------------------------------- # tabulated values of s_kin = s - mc^2 # Note: integration method (Romberg) requires 2^n + 1 log-spaced tabulation points s_kin = np.logspace(6, 23, 2049) * eV**2 xs = getTabulatedXS(sigma, s_kin) rate = interactionRate.calc_rate_s(s_kin, xs, E, field) # save fname = folder + '/rate_%s.txt' % field.name data = np.c_[np.log10(E / eV), rate] fmt = '%.2f\t%.6g' header = '%s interaction rates\nphoton field: %s\nlog10(E/eV), 1/lambda [1/Mpc]' % (name, field.info) np.savetxt(fname, data, fmt=fmt, header=header) # ------------------------------------------- # calculate cumulative differential interaction rates for sampling s values # ------------------------------------------- # find minimum value of s_kin skin1 = getSmin(sigma) # s threshold for interaction skin2 = 4 * field.getEmin() * E[0] # minimum achievable s in collision with background photon (at any tabulated E) skin_min = max(skin1, skin2) # tabulated values of s_kin = s - mc^2, limit to relevant range # Note: use higher resolution and then downsample skin = np.logspace(6.2, 23, 1680 + 1) * eV**2 skin = skin[skin > skin_min] xs = getTabulatedXS(sigma, skin) rate = interactionRate.calc_rate_s(skin, xs, E, field, cdf=True) # downsample skin_save = np.logspace(6.2, 23, 168 + 1) * eV**2 skin_save = skin_save[skin_save > skin_min] rate_save = np.array([np.interp(skin_save, skin, r) for r in rate]) # save data = np.c_[np.log10(E / eV), rate_save] # prepend log10(E/eV) as first column row0 = np.r_[0, np.log10(skin_save / eV**2)][np.newaxis] data = np.r_[row0, data] # prepend log10(s_kin/eV^2) as first row fname = folder + '/cdf_%s.txt' % field.name fmt = '%.2f' + '\t%.6g' * np.shape(rate_save)[1] header = '%s cumulative differential rate\nphoton field: %s\nlog10(E/eV), d(1/lambda)/ds_kin [1/Mpc/eV^2] for log10(s_kin/eV^2) as given in first row' % (name, field.info) np.savetxt(fname, data, fmt=fmt, header=header)
def process(sigma, field, name): # output folder folder = 'data/' + name if not os.path.exists(folder): os.makedirs(folder) # tabulated energies, limit to energies where the interaction is possible Emin = getEmin(sigma, field) E = np.logspace(10, 23, 261) * eV E = E[E > Emin] # ------------------------------------------- # calculate interaction rates # ------------------------------------------- # tabulated values of s_kin = s - mc^2 # Note: integration method (Romberg) requires 2^n + 1 log-spaced tabulation points s_kin = np.logspace(6, 23, 2049) * eV**2 xs = getTabulatedXS(sigma, s_kin) rate = interactionRate.calc_rate_s(s_kin, xs, E, field) # save fname = folder + '/rate_%s.txt' % field.name data = np.c_[np.log10(E / eV), rate] fmt = '%.2f\t%.6g' header = '%s interaction rates\nphoton field: %s\nlog10(E/eV), 1/lambda [1/Mpc]' % ( name, field.info) np.savetxt(fname, data, fmt=fmt, header=header) # ------------------------------------------- # calculate cumulative differential interaction rates for sampling s values # ------------------------------------------- # find minimum value of s_kin skin1 = getSmin(sigma) # s threshold for interaction skin2 = 4 * field.getEmin() * E[ 0] # minimum achievable s in collision with background photon (at any tabulated E) skin_min = max(skin1, skin2) # tabulated values of s_kin = s - mc^2, limit to relevant range # Note: use higher resolution and then downsample skin = np.logspace(6.2, 23, 1680 + 1) * eV**2 skin = skin[skin > skin_min] xs = getTabulatedXS(sigma, skin) rate = interactionRate.calc_rate_s(skin, xs, E, field, cdf=True) # downsample skin_save = np.logspace(6.2, 23, 168 + 1) * eV**2 skin_save = skin_save[skin_save > skin_min] rate_save = np.array([np.interp(skin_save, skin, r) for r in rate]) # save data = np.c_[np.log10(E / eV), rate_save] # prepend log10(E/eV) as first column row0 = np.r_[0, np.log10(skin_save / eV**2)][np.newaxis] data = np.r_[row0, data] # prepend log10(s_kin/eV^2) as first row fname = folder + '/cdf_%s.txt' % field.name fmt = '%.2f' + '\t%.6g' * np.shape(rate_save)[1] header = '%s cumulative differential rate\nphoton field: %s\nlog10(E/eV), d(1/lambda)/ds_kin [1/Mpc/eV^2] for log10(s_kin/eV^2) as given in first row' % ( name, field.info) np.savetxt(fname, data, fmt=fmt, header=header)