Exemplo n.º 1
0
def lum(
    num,
    data,
    kappa,
    z,
    BC_fac,
    cent,
    campos,
    IMF='Chabrier_300',
    filters=('FAKE.TH.FUV', ),
    Type='Total',
    log10t_BC=7.,
    extinction='default',
):

    kinp = np.load(
        '/cosma7/data/dp004/dc-payy1/my_files/'
        'los/kernel_sph-anarchy.npz',
        allow_pickle=True)
    lkernel = kinp['kernel']
    header = kinp['header']
    kbins = header.item()['bins']

    S_mass_ini = data.stars.initial_masses.value
    S_Z = data.stars.metal_mass_fractions.value
    S_age = util.calc_ages(z, data.stars.birth_scale_factors.value)
    G_Z = data.gas.metal_mass_fractions.value
    S_sml = data.stars.smoothing_lengths.value
    G_sml = data.gas.smoothing_lengths.value
    G_mass = data.gas.masses.value * 10**10
    S_coords = data.stars.coordinates.value - cent
    G_coords = data.gas.coordinates.value - cent
    S_mass = data.stars.masses.value * 10**10

    if S_sml.max() == 0.0:
        print("Ill-defined smoothing lengths")

        last_snap = "%04d" % (num - 1)

        # Define path
        path = '/cosma/home/dp004/dc-rope1/cosma7/SWIFT/hydro_1380_data/ani_hydro_' + last_snap + ".hdf5"

        olddata = load(path)
        old_hsmls = olddata.stars.smoothing_lengths.value
        S_sml[:old_hsmls.size] = old_hsmls
        S_sml[old_hsmls.size:] = np.median(old_hsmls)

    Lums = {f: np.zeros(len(S_mass), dtype=np.float64) for f in filters}

    model = models.define_model(
        F'BPASSv2.2.1.binary/{IMF}')  # DEFINE SED GRID -
    if extinction == 'default':
        model.dust_ISM = ('simple', {
            'slope': -1.
        })  # Define dust curve for ISM
        model.dust_BC = ('simple', {
            'slope': -1.
        })  # Define dust curve for birth cloud component
    elif extinction == 'Calzetti':
        model.dust_ISM = ('Starburst_Calzetti2000', {''})
        model.dust_BC = ('Starburst_Calzetti2000', {''})
    elif extinction == 'SMC':
        model.dust_ISM = ('SMC_Pei92', {''})
        model.dust_BC = ('SMC_Pei92', {''})
    elif extinction == 'MW':
        model.dust_ISM = ('MW_Pei92', {''})
        model.dust_BC = ('MW_Pei92', {''})
    elif extinction == 'N18':
        model.dust_ISM = ('MW_N18', {''})
        model.dust_BC = ('MW_N18', {''})
    else:
        ValueError("Extinction type not recognised")

    # Convert coordinates to physical
    S_coords = S_coords / (1 + z)
    G_coords = G_coords / (1 + z)

    # --- create rest-frame luminosities
    F = FLARE.filters.add_filters(filters, new_lam=model.lam)
    model.create_Lnu_grid(
        F)  # --- create new L grid for each filter. In units of erg/s/Hz

    okinds = G_coords[:, 2] * (1 + z) < campos

    MetSurfaceDensities = util.get_Z_LOS(S_coords, G_coords[okinds, :],
                                         G_mass[okinds], G_Z[okinds],
                                         G_sml[okinds], (0, 1, 2), lkernel,
                                         kbins)

    Mage = np.nansum(S_mass_ini * S_age) / np.nansum(S_mass_ini)
    Z = np.nanmean(G_Z[okinds])

    MetSurfaceDensities = DTM_fit(Z, Mage) * MetSurfaceDensities

    if Type == 'Total':
        # --- calculate V-band (550nm) optical depth for each star particle
        tauVs_ISM = kappa * MetSurfaceDensities
        tauVs_BC = BC_fac * (S_Z / 0.01)
        fesc = 0.0

    elif Type == 'Pure-stellar':
        tauVs_ISM = np.zeros(len(S_mass_ini))
        tauVs_BC = np.zeros(len(S_mass_ini))
        fesc = 1.0

    elif Type == 'Intrinsic':
        tauVs_ISM = np.zeros(len(S_mass_ini))
        tauVs_BC = np.zeros(len(S_mass_ini))
        fesc = 0.0

    elif Type == 'Only-BC':
        tauVs_ISM = np.zeros(len(S_mass_ini))
        tauVs_BC = BC_fac * (S_Z / 0.01)
        fesc = 0.0

    else:
        tauVs_ISM = None
        tauVs_BC = None
        fesc = None
        ValueError(F"Undefined Type {Type}")

    # --- calculate rest-frame Luminosity. In units of erg/s/Hz
    for f in filters:
        Lnu = models.generate_Lnu_array(model,
                                        S_mass_ini,
                                        S_age,
                                        S_Z,
                                        tauVs_ISM,
                                        tauVs_BC,
                                        F,
                                        f,
                                        fesc=fesc,
                                        log10t_BC=log10t_BC)
        Lums[f] = Lnu

    return Lums
Exemplo n.º 2
0
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

import SynthObs
from SynthObs.SED import models

import FLARE
import FLARE.filters

import matplotlib.pyplot as plt




model = models.define_model('BPASSv2.2.1.binary/ModSalpeter_300') # DEFINE SED GRID - 
model.dust = {'A': 5.2, 'slope': -1.0} # DEFINE DUST MODEL - these are the calibrated z=8 values for the dust model




# --- read in test data

test = SynthObs.test_data() # --- read in some test data


# --- create rest-frame luminosities

filters = ['FAKE.FAKE.'+f for f in ['1500','2500']] # --- define the filters. FAKE.FAKE are just top-hat filters using for extracting rest-frame quantities.

F = FLARE.filters.add_filters(filters, new_lam = model.lam) 
Exemplo n.º 3
0
def lum_from_stars(MetSurfaceDensities,
                   Masses,
                   Ages,
                   Metallicities,
                   DTM,
                   kappa=0.0795,
                   BC_fac=1.0,
                   IMF='Chabrier_300',
                   filters=['FAKE.TH.FUV'],
                   Type='Total',
                   log10t_BC=7.,
                   extinction='default'):

    model = models.define_model(
        F'BPASSv2.2.1.binary/{IMF}')  # DEFINE SED GRID -
    if extinction == 'default':
        model.dust_ISM = ('simple', {'slope': -1.})  #Define dust curve for ISM
        model.dust_BC = ('simple', {
            'slope': -1.
        })  #Define dust curve for birth cloud component
    elif extinction == 'Calzetti':
        model.dust_ISM = ('Starburst_Calzetti2000', {''})
        model.dust_BC = ('Starburst_Calzetti2000', {''})
    elif extinction == 'SMC':
        model.dust_ISM = ('SMC_Pei92', {''})
        model.dust_BC = ('SMC_Pei92', {''})
    elif extinction == 'MW':
        model.dust_ISM = ('MW_Pei92', {''})
        model.dust_BC = ('MW_Pei92', {''})
    elif extinction == 'N18':
        model.dust_ISM = ('MW_N18', {''})
        model.dust_BC = ('MW_N18', {''})
    else:
        ValueError("Extinction type not recognised")

    # --- create rest-frame luminosities
    F = FLARE.filters.add_filters(filters, new_lam=model.lam)
    model.create_Lnu_grid(
        F)  # --- create new L grid for each filter. In units of erg/s/Hz

    DustSurfaceDensities = DTM * MetSurfaceDensities

    if Type == 'Total':
        tauVs_ISM = kappa * DustSurfaceDensities  # --- calculate V-band (550nm) optical depth for each star particle
        tauVs_BC = BC_fac * (Metallicities / 0.01)
        fesc = 0.0

    elif Type == 'Pure-stellar':
        tauVs_ISM = np.zeros(len(Masses))
        tauVs_BC = np.zeros(len(Masses))
        fesc = 1.0

    elif Type == 'Intrinsic':
        tauVs_ISM = np.zeros(len(Masses))
        tauVs_BC = np.zeros(len(Masses))
        fesc = 0.0

    elif Type == 'Only-BC':
        tauVs_ISM = np.zeros(len(Masses))
        tauVs_BC = BC_fac * (Metallicities / 0.01)
        fesc = 0.0

    else:
        ValueError(F"Undefined Type {Type}")

    Lnu = {
        f: models.generate_Lnu_array(model,
                                     Masses,
                                     Ages,
                                     Metallicities,
                                     tauVs_ISM,
                                     tauVs_BC,
                                     F,
                                     f,
                                     fesc=fesc)
        for f in filters
    }  # --- calculate rest-frame Luminosity. In units of erg/s/Hz
    Lums = list(Lnu.values())

    return Lums