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
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'
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'
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))
# ------ [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))