def main(): if not os.path.lexists('grid.cfg'): print ('./grid.cfg file not found, writing an example grid.cfg to ' 'the current directory') write_example_grid_config() sys.exit() cfg = read_config('grid.cfg') print '' print 'Input values:' for k in sorted(cfg): print ' %s: %s' % (k, cfg[k]) print '' if cfg.table is None: fluxname = cfg.prefix + '_temp_uvb.dat' uvb = calc_uvb(cfg.z, cfg.cuba_name, match_fg=True) writetable('cloudy_jnu_HM.tbl', [uvb['energy'], uvb['logjnu']], overwrite=1, units=['Rydbergs', 'log10(erg/s/cm^2/Hz/ster)'], names=['energy', 'jnu']) if cfg.distance_starburst_kpc is not None: wa, F = read_starburst99('starburst.spectrum1') nu, logjnu = calc_local_jnu(wa, F, cfg.distance_starburst_kpc, cfg.fesc) energy = nu * hplanck / Ryd # use HM uvb energy limits cond = between(uvb['energy'], energy[0], energy[-1]) logjnu1 = np.interp(uvb['energy'][cond], energy, logjnu) uvb['logjnu'][cond] = np.log10(10**uvb['logjnu'][cond] + 10**logjnu1) writetable('cloudy_jnu_total.tbl', [uvb['energy'], uvb['logjnu']], overwrite=1, units=['Rydbergs', 'log10(erg/s/cm^2/Hz/ster)'], names=['energy', 'jnu']) write_uvb(fluxname, uvb['energy'], uvb['logjnu'], cfg.overwrite) # Fnu at 1 Rydberg k = np.argmin(np.abs(uvb['energy'] - 1.)) logfnu912 = np.log10(10**uvb['logjnu'][k] * 4 * pi) else: logfnu912 = cfg.logfnu912 fluxname = None write_grid_input(cfg, fnu912=logfnu912, fluxfilename=fluxname, table=cfg.table, abundances=cfg.abundances) if cfg.run_cloudy: run_grid(nproc=cfg.nproc, overwrite=cfg.overwrite) models = parse_grid2(cfg) filename = cfg.prefix + '_grid.sav.gz' print 'Writing to', filename saveobj(filename, models, overwrite=cfg.overwrite)
def main(): if not os.path.lexists('grid.cfg'): print ('./grid.cfg file not found, writing an example grid.cfg to ' 'the current directory') write_example_grid_config() sys.exit() cfg = read_config('grid.cfg') print '' print 'Input values:' for k in sorted(cfg): print ' %s: %s' % (k, cfg[k]) print '' if cfg.table is None: fluxname = cfg.prefix + '_temp_uvb.dat' if cfg.cuba_name is None: cfg.cuba_name = get_data_path() + 'UVB.out' uvb = calc_uvb(cfg.z, cfg.cuba_name, match_fg=False) writetable('cloudy_jnu_HM.tbl', [uvb['energy'], uvb['logjnu']], overwrite=1, units=['Rydbergs', 'erg/s/cm^2/Hz/ster'], names=['energy', 'log10jnu']) if cfg.uvb_tilt is not None: if cfg.distance_starburst_kpc is not None: raise RuntimeError('Must only specify one of uvb_tilt and\ distance_starburst_kpc!') # remember which bits had 1e-30 clow = uvb['logjnu'] == -30 # tilt the UV background between 1 and 10 Rydbergs logjnu = tilt_spec(cfg.uvb_tilt, uvb['energy'], uvb['logjnu'], emin=1, emax=10) logjnu[clow] = -30 print('Tilting UVB using parameter {}'.format(cfg.uvb_tilt)) # now re-normalise to match the photoionization rate of the # default spectrum. gamma_default = find_gamma(uvb['energy'], 10**uvb['logjnu']) mult = gamma_default / find_gamma(uvb['energy'], 10**logjnu) print 'Scaling tilted Jnu by %.3g to match default gamma' % mult logjnu = logjnu + np.log10(mult) writetable('cloudy_jnu_tilted.tbl', [uvb['energy'], logjnu], overwrite=1, units=['Rydbergs', 'erg/s/cm^2/Hz/ster'], names=['energy', 'log10jnu']) uvb['logjnu'] = logjnu elif cfg.distance_starburst_kpc is not None: wa, F = read_starburst99(get_data_path() + 'starburst.spectrum1') nu, logjnu = calc_local_jnu(wa, F, cfg.distance_starburst_kpc, cfg.fesc) energy = nu * hplanck / Ryd # use HM uvb energy limits cond = between(uvb['energy'], energy[0], energy[-1]) logjnu1 = np.interp(uvb['energy'][cond], energy, logjnu) uvb['logjnu'][cond] = np.log10(10**uvb['logjnu'][cond] + 10**logjnu1) writetable('cloudy_jnu_total.tbl', [uvb['energy'], uvb['logjnu']], overwrite=1, units=['Rydbergs', 'erg/s/cm^2/Hz/ster'], names=['energy', 'log10jnu']) write_uvb(fluxname, uvb['energy'], uvb['logjnu'], cfg.overwrite) # Fnu at 1 Rydberg k = np.argmin(np.abs(uvb['energy'] - 1.)) logfnu912 = np.log10(10**uvb['logjnu'][k] * 4 * pi) else: logfnu912 = cfg.logfnu912 fluxname = None write_grid_input(cfg, fnu912=logfnu912, fluxfilename=fluxname, table=cfg.table, abundances=cfg.abundances) if cfg.run_cloudy: run_grid(nproc=cfg.nproc, overwrite=cfg.overwrite) models = parse_grid(cfg) filename = cfg.prefix + '_grid.sav.gz' print 'Writing to', filename saveobj(filename, models, overwrite=cfg.overwrite) savehdf5(filename.replace('.sav.gz', '.hdf5'), models, overwrite=cfg.overwrite)