region_mask = region_mask.astype(bool)
        idcs_voxels = np.argwhere(region_mask)

        # Simulation time estimation
        n_voxels = idcs_voxels.shape[0]
        print(
            f'\nTreating {region_label} consisting of {n_voxels}. The estimated time is {(n_voxels*1.85)/60:0.1f} hrs'
        )

        # Region chemical configuration
        chem_conf_file = dataFolder / f'{obj}_chemical_model_region_{idx_region}.txt'
        chem_conf = sr.loadConfData(chem_conf_file, group_variables=False)

        # Load emission lines
        input_lines = chem_conf['inference_model_configuration']['input_lines']
        ion_array, wave_array, latex_array = lime.label_decomposition(
            input_lines)

        objIons = sr.IonEmissivity(
            tempGrid=chem_conf['simulation_properties']['temp_grid'],
            denGrid=chem_conf['simulation_properties']['den_grid'])

        ionDict = objIons.get_ions_dict(ion_array)

        # Generate interpolator from the emissivity grids
        objIons.computeEmissivityGrids(input_lines,
                                       ionDict,
                                       combined_dict=merge_dict)

        for idx_voxel, idx_pair in enumerate(idcs_voxels):

            idx_j, idx_i = idx_pair
예제 #2
0
i = 0
obj = 'CGCG007'
voxel_cords = (167, 167)
lineLabels = np.array([
    'Ar4_4740A', 'H1_4861A', 'O3_4959A', 'He1_4922A', 'Fe3_4987A', 'O3_5007A',
    'N1_5200A', 'Cl3_5518A', 'Cl3_5538A', 'He1_5876A', 'O1_6300A', 'S3_6312A',
    'O1_6364A', 'H1_6563A', 'N2_6548A', 'N2_6584A', 'He1_6678A', 'S2_6716A',
    'S2_6731A', 'He1_7065A', 'Ar3_7136A', 'He1_7281A', 'O2_7320A', 'O2_7330A',
    'S3_9069A', 'H1_8204A', 'H1_9229A', 'H1_9015A', 'H1_8863A', 'H1_8750A'
])

uniq, count = np.unique(lineLabels, return_counts=True)
np.any(count > 1)

lineIons, lineWaves, lineLatex = lime.label_decomposition(lineLabels)

labels_dict = {
    'H1_8204A': 'Paschen\nJump',
    'H1_6563A': r'$H\alpha$',
    'H1_4861A': r'$H\beta$'
}
for old_label, new_label in labels_dict.items():
    idx = np.where(lineLabels == old_label)
    lineLatex[idx] = new_label

# Data location
cube_address = fitsFolder / fileList[i]
objFolder = resultsFolder / obj
voxelFolder = resultsFolder / obj / 'voxel_data'
db_addresss = objFolder / f'{obj}_database.fits'
예제 #3
0
objList = obsData['data_location']['object_list']
fileList = obsData['data_location']['file_list']
fitsFolder = Path(obsData['data_location']['fits_folder'])
dataFolder = Path(obsData['data_location']['data_folder'])
resultsFolder = Path(obsData['data_location']['results_folder'])
voxel_grid_size = obsData['sample_data']['grid_shape_array']
coordinates_keys_list = obsData['data_location']['wcs_key_list']

# Store emissivity ratios at standard conditions
H1 = pn.RecAtom('H', 1)
temp, den = 10000.0, 100.0
background_color = np.array((43, 43, 43)) / 255.0

theoEmis_dict = {}
for chemLabel, plotLabel in label_Conver.items():
    ion, wave, latexLabel = lm.label_decomposition(chemLabel,
                                                   scalar_output=True)
    dict_label = f'{plotLabel}/Hbeta'
    theoRatio = H1.getEmissivity(temp, den, wave=wave) / H1.getEmissivity(
        temp, den, wave=4861)
    theoEmis_dict[dict_label] = theoRatio

# regions_to_treat = [0, 1]
regions_to_treat = [0, 1, 2, 3, 4, 5]

for i, obj in enumerate(objList):

    # Data location
    cube_address = fitsFolder / fileList[i]
    objFolder = resultsFolder / obj
    voxelFolder = resultsFolder / obj / 'voxel_data'
    db_address = objFolder / f'{obj}_database.fits'
예제 #4
0
    new_hdul.append(hdu_table)
    for key in coordinates_keys_list:
        if key in hdr:
            new_hdul[1].header[key] = hdr[key]
    new_hdul[1].header['NPIXWAVE'] = hdr['NAXIS3']

    # Get line regions data
    idcs_Halpha = np.searchsorted(wave, line_regions['H1_6563A'])
    Halpha_flux = flux[idcs_Halpha[0]:idcs_Halpha[1], :, :].sum(axis=0)
    levelContoursHalpha = np.nanpercentile(Halpha_flux, percentil_array)

    # Create flux maps for the main lines:
    for lineLabel, lineLimits in line_regions.items():

        plot_image_file = objFolder/f'{obj}_{lineLabel}_contours.png'
        ion, wavelength, latexLabel = lm.label_decomposition(lineLabel, scalar_output=True)

        # Extract cube slice using mpdaf defult tools.
        idcs_line = np.searchsorted(wave, lineLimits)
        lineMap = flux[idcs_line[0]:idcs_line[1], :, :].sum(axis=0)
        levelContours = np.nanpercentile(lineMap, percentil_array)

        # Store fluxes and contours
        hdu_image = fits.ImageHDU(name=f'{lineLabel}_flux', data=lineMap, ver=1)
        for idx, level in enumerate(levelContours):
            level_label = f'hierarch P{int(percentil_array[idx]*100)}'
            hdu_image.header[level_label] = level
        new_hdul.append(hdu_image)

        # Plot the image:
        fig = plt.figure(figsize=(10, 10))
예제 #5
0
# ------ [OIII] line ratios

for i, obj in enumerate(objList):

    # Data location
    cube_address = fitsFolder / fileList[i]
    objFolder = resultsFolder / obj
    db_address = objFolder / f'{obj}_database.fits'
    maskFits_address = objFolder / f'{obj}_masks.fits'

    parameter_fits = objFolder / 'intg_flux.fits'
    O3_4959A = fits.getdata(parameter_fits, 'O3_4959A')
    O3_5007A = fits.getdata(parameter_fits, 'O3_5007A')
    hdr_plot = fits.getheader(parameter_fits, 'O3_5007A')

    ion_array, wave_array, latex_array = lime.label_decomposition(
        ['O3_4959A', 'O3_5007A'])

    # coeff_im = O3_5007A/O3_4959A
    #
    # divnorm = colors.TwoSlopeNorm(vmin=2.0,
    #                               vcenter=2.984,
    #                               vmax=4.0)
    # cbar_label = f'Line ratio, theoretical value ({2.984}) white'

    coeff_im = (O3_5007A / O3_4959A - 2.984) * 100

    divnorm = colors.TwoSlopeNorm(vmin=-75.0, vcenter=0, vmax=75.0)

    cbar_label = f'Line ratio discrepancy %'

    fig = plt.figure(figsize=(10, 10))