# plt.show() # az.plot_posterior(trace) # plt.show() # -------------------------------------- Test 2 -------------------------------------------------- # Load synthetic observation linesLogAddress = user_folder / f'Teff_LogU_epmGrids_linesLog.txt' simulationData_file = user_folder / f'Teff_LogU_epmGrids_config.txt' # Load simulation parameters objParams = sr.loadConfData(simulationData_file, group_variables=False) # Load emission lines merged_lines = {'O2_3726A_m': 'O2_3726A-O2_3729A', 'O2_7319A_m': 'O2_7319A-O2_7330A'} objLinesDF = sr.import_emission_line_data(linesLogAddress, include_lines=objParams['inference_model_configuration']['input_lines'], exclude_lines=['S3_9069A']) # Establish lines used in photo-ionization model lineLabels = objLinesDF.index.values lines_Grid = np.array(list(gridLineDict.keys())) idx_analysis_lines = np.in1d(lineLabels, lines_Grid) lineFluxes = objLinesDF.obsFlux.values lineErr = objLinesDF.obsFluxErr.values lineWaves = objLinesDF.wavelength.values # Extinction parameters objRed = sr.ExtinctionModel(Rv=objParams['simulation_properties']['R_v'], red_curve=objParams['simulation_properties']['reddenig_curve'], data_folder=objParams['data_location']['external_data_folder']) lineFlambdas = objRed.gasExtincParams(wave=lineWaves)
print(f'- Treating object ({i}): {obj}') objFolder = resultsFolder / f'{obj}' fits_file = dataFolder / f'{obj}_{ext}.fits' objMask = dataFolder / f'{obj}_{ext}_mask.txt' results_file = objFolder / f'{obj}_{ext}_measurements.txt' lineLog_file = objFolder / f'{obj}_{ext}_linesLog_{cycle}.txt' # Declare output files outputDb = objFolder / f'{obj}_{ext}_fitting_{cycle}.db' outputTxt = objFolder / f'{obj}_{ext}_fitting_{cycle}.txt' simConf = dataFolder / f'{obj}_config.txt' # Load data objParams = sr.loadConfData(simConf, group_variables=False) results_dict = sr.loadConfData(results_file, group_variables=False) objLinesDF = sr.import_emission_line_data( lineLog_file, include_lines=objParams[obj]['input_lines']) # Load previous measurements to compare true_values = check_previous_measurements( obj, objParams['inference_model_configuration']['parameter_list'], results_dict, obsData) # Declare extinction properties objRed = sr.ExtinctionModel( Rv=objParams['simulation_properties']['R_v'], red_curve=objParams['simulation_properties']['reddenig_curve'], data_folder=objParams['data_location']['external_data_folder']) # Declare ion properties objIons = sr.IonEmissivity( tempGrid=objParams['simulation_properties']['temp_grid'], denGrid=objParams['simulation_properties']['den_grid'])
objFolder = resultsFolder / f'{obj}' results_file = objFolder / f'{obj}_{ext}_measurements.txt' lineLog_file = objFolder / f'{obj}_{ext}_linesLog_{cycle}.txt' outputDb = objFolder / f'{obj}_{ext}_fitting_{cycle}.db' outputTxt = objFolder / f'{obj}_{ext}_fitting_{cycle}.txt' outputPiDb = objFolder / f'{obj}_{ext}_pI_fitting_{cycle}.db' outputPiTxt = objFolder / f'{obj}_{ext}_pI_fitting_{cycle}.txt' outputDirectHIIchemDb = objFolder / f'{obj}_{ext}_Direct-Teff-logU_{cycle}.db' outputDirectHIIchemTxt = objFolder / f'{obj}_{ext}_Direct-Teff-logU_{cycle}.txt' obj1_model = sr.SpectraSynthesizer() measurements_dict = sr.loadConfData(results_file, group_variables=False) objLinesDF = sr.import_emission_line_data(lineLog_file) fit_pickle = sr.load_MC_fitting(outputDb) pI_pickle = sr.load_MC_fitting(outputPiDb) bayes_plus_PI_pickle = sr.load_MC_fitting(outputDirectHIIchemDb) fit_inputs_dict = sr.loadConfData(outputTxt) pI_inputs_dict = sr.loadConfData(outputPiTxt) bayes_inputs_dict = sr.loadConfData(outputDirectHIIchemTxt) # Recover Direct method Bayesian fitting sr_lineLabels = fit_inputs_dict['Input_data']['lineLabels_list'] inFlux = fit_inputs_dict['Input_data']['inputFlux_array'] inErr = fit_inputs_dict['Input_data']['inputErr_array'] flux_matrix = fit_pickle['trace']['calcFluxes_Op'] mean_line_values = flux_matrix.mean(axis=0)
# Results folder output_folder = Path(r'D:\Dropbox\Astrophysics\Data\CGCG0707_mike') # Conf file chem_conf = output_folder / f'MIKE_CGCG007_chemical_fitting.txt' objParams = load_cfg(chem_conf) for i_night in nights_range: # Declare sampler obj1_model = sr.SpectraSynthesizer() input_lines = objParams['inference_model_configuration']['input_lines'] lines_log_address = output_folder / f'MIKE_CGCG007_linelog_night{i_night}.txt' objLinesDF = sr.import_emission_line_data(lines_log_address, include_lines=input_lines) output_db = output_folder / f'MIKE_CGCG007_db{i_night}' lineLabels = objLinesDF.index.values lineIons = objLinesDF['ion'].values lineFluxes = objLinesDF['intg_flux'].values lineErr = objLinesDF['intg_err'].values # Declare simulation physical properties objRed = sr.ExtinctionModel( Rv=objParams['simulation_properties']['R_v'], red_curve=objParams['simulation_properties']['reddenig_curve'], data_folder=objParams['data_location']['external_data_folder']) objIons = sr.IonEmissivity( tempGrid=objParams['simulation_properties']['temp_grid'],
# linesDF.rename(columns={'wavelength': 'obsWave'}, inplace=True) if ('O2_7319A' in linesDF.index) and ('O2_7330A' in linesDF.index): flux_comb = linesDF.loc[ 'O2_7319A', 'obsFlux'] + linesDF.loc['O2_7330A', 'obsFlux'] err_comb = np.sqrt( linesDF.loc['O2_7319A', 'obsFluxErr']**2 + linesDF.loc['O2_7330A', 'obsFluxErr']**2) linesDF.loc['O2_7319A_b'] = None linesDF.loc['O2_7319A_b', ['wavelength', 'obsFlux', 'obsFluxErr' ]] = 7325, flux_comb, err_comb linesDF.loc['O2_7319A_b', 'ion'] = 'O2' objLinesDF = sr.import_emission_line_data( linesDF=linesDF, include_lines=input_lines) normLine = 'H1_4861A' idcs_lines = (objLinesDF.index != normLine) lineLabels = objLinesDF.loc[idcs_lines].index lineIons = objLinesDF.loc[idcs_lines, 'ion'].values lineFluxes = objLinesDF.loc[idcs_lines, 'obsFlux'].values lineErr = objLinesDF.loc[idcs_lines, 'obsFluxErr'].values # Declare simulation physical properties objRed = sr.ExtinctionModel( Rv=chem_conf['simulation_properties']['R_v'], red_curve=chem_conf['simulation_properties'] ['reddenig_curve'], data_folder=chem_conf['data_location'] ['external_data_folder'])
for idx_obj in range(n_objs): # State the objects to study linesLogAddress = user_folder / f'GridEmiss_region{idx_obj+1}of{n_objs}_linesLog.txt' simulationData_file = user_folder / f'GridEmiss_region{idx_obj+1}of{n_objs}_config.txt' # Load simulation parameters objParams = sr.loadConfData(simulationData_file, group_variables=False) # Load emission lines merged_lines = { 'O2_3726A_m': 'O2_3726A-O2_3729A', 'O2_7319A_m': 'O2_7319A-O2_7330A' } default_lines = objParams['inference_model_configuration']['input_lines'] objLinesDF = sr.import_emission_line_data(linesLogAddress, include_lines=default_lines) normLine = 'H1_4861A' idcs_lines = (objLinesDF.index != normLine) lineLabels = objLinesDF.loc[idcs_lines].index lineIons = objLinesDF.loc[idcs_lines, 'ion'].values lineFluxes = objLinesDF.loc[idcs_lines, 'intg_flux'].values lineErr = objLinesDF.loc[idcs_lines, 'intg_err'].values # Declare simulation physical properties objRed = sr.ExtinctionModel( Rv=objParams['simulation_properties']['R_v'], red_curve=objParams['simulation_properties']['reddenig_curve'], data_folder=objParams['data_location']['external_data_folder']) objIons = sr.IonEmissivity(
'obsFlux'] = lm.linesDF.loc[idcs_blended, 'gauss_flux'] / flux_Hbeta lm.linesDF.loc[idcs_blended, 'obsFluxErr'] = lm.linesDF.loc[idcs_blended, 'gauss_err'] / flux_Hbeta lm.linesDF.loc[~idcs_blended, 'obsFlux'] = lm.linesDF.loc[~idcs_blended, 'intg_flux'] / flux_Hbeta lm.linesDF.loc[~idcs_blended, 'obsFluxErr'] = lm.linesDF.loc[~idcs_blended, 'intg_err'] / flux_Hbeta lm.linesDF.rename(columns={'wavelength': 'obsWave'}, inplace=True) lm.save_lineslog(lm.linesDF, simFolder / inputLinesLog) # Load emission lines objLinesDF = sr.import_emission_line_data( simFolder / inputLinesLog, include_lines=objParams['input_lines']) # Declare simulation physical properties objRed = sr.ExtinctionModel( Rv=objParams['R_v'], red_curve=objParams['reddenig_curve'], data_folder=objParams['external_data_folder']) objIons = sr.IonEmissivity(tempGrid=objParams['temp_grid'], denGrid=objParams['den_grid']) # Generate interpolator from the emissivity grids ionDict = objIons.get_ions_dict(np.unique(objLinesDF.ion.values)) objIons.computeEmissivityGrids( objLinesDF, ionDict,
linesDF['obsFlux'] = linesDF['intg_flux']/flux_Hbeta linesDF['obsFluxErr'] = linesDF['intg_err']/flux_Hbeta linesDF.rename(columns={'wavelength': 'obsWave'}, inplace=True) for ion in ['H1', 'He1', 'He2']: idcs_ions = linesDF.ion == ion linesDF.loc[idcs_ions, 'ion'] = ion + 'r' if ('O2_7319A' in linesDF.index) and ('O2_7330A' in linesDF.index): flux_comb = linesDF.loc['O2_7319A', 'intg_flux'] + linesDF.loc['O2_7330A', 'intg_flux'] err_comb = np.sqrt(linesDF.loc['O2_7319A', 'intg_err']**2 + linesDF.loc['O2_7330A', 'intg_err']**2) linesDF.loc['O2_7319A_b'] = None linesDF.loc['O2_7319A_b', ['obsWave', 'obsFlux', 'obsFluxErr']] = 7325, flux_comb/flux_Hbeta, err_comb/flux_Hbeta linesDF.loc['O2_7319A_b', 'ion'] = 'O2' sr.save_lineslog(linesDF, inputLinesLog) # Load emission lines objLinesDF = sr.import_emission_line_data(inputLinesLog, include_lines=chem_conf['inference_model_configuration']['input_lines']) # Declare simulation physical properties objRed = sr.ExtinctionModel(Rv=chem_conf['simulation_properties']['R_v'], red_curve=chem_conf['simulation_properties']['reddenig_curve'], data_folder=chem_conf['data_location']['external_data_folder']) objIons = sr.IonEmissivity(tempGrid=chem_conf['simulation_properties']['temp_grid'], denGrid=chem_conf['simulation_properties']['den_grid']) # Generate interpolator from the emissivity grids ionDict = objIons.get_ions_dict(np.unique(objLinesDF.ion.values)) objIons.computeEmissivityGrids(objLinesDF, ionDict, linesDb=sr._linesDb, combined_dict={'O2_7319A_b': 'O2_7319A-O2_7330A'})
'Ar4': 5.06, 'err_lines': 0.02} # Declare lines to simulate objParams['input_lines'] = ['H1_4341A', 'H1_6563A', 'O3_4363A', 'O3_4959A', 'O3_5007A', 'N2_6548A', 'N2_6584A', 'S2_6716A', 'S2_6731A', 'S3_6312A', 'S3_9069A', 'S3_9531A'] # We use the default simulation configuration for the remaining settings objParams.update(ss._default_cfg) # We use the default lines database to generate the synthetic emission lines log for this simulation linesLogPath = os.path.join(ss._literatureDataFolder, ss._default_cfg['lines_data_file']) # Prepare dataframe with the observed lines labeled objLinesDF = ss.import_emission_line_data(linesLogPath, include_lines=objParams['input_lines']) # Declare extinction properties objRed = ss.ExtinctionModel(Rv=objParams['R_v'], red_curve=objParams['reddenig_curve'], data_folder=objParams['external_data_folder']) # Compute the flambda value for the input emission lines lineFlambdas = objRed.gasExtincParams(wave=objLinesDF.obsWave.values) lineWaves = objLinesDF.pynebCode.values # Establish atomic data references ftau_file_path = os.path.join(ss._literatureDataFolder, objParams['ftau_file']) objIons = ss.IonEmissivity(ftau_file_path=ftau_file_path, tempGrid=objParams['temp_grid'], denGrid=objParams['den_grid'])
user_folder = Path('D:/AstroModels') output_db = user_folder/f'Teff_LogU_epmGrids_db' # Declare sampler obj1_model = sr.SpectraSynthesizer() # State the objects to study linesLogAddress = user_folder/f'Teff_LogU_epmGrids_linesLog.txt' simulationData_file = user_folder/f'Teff_LogU_epmGrids_config.txt' # Load simulation parameters objParams = sr.loadConfData(simulationData_file, group_variables=False) # Load emission lines inputLines = objParams['inference_model_configuration']['input_lines'] objLinesDF = sr.import_emission_line_data(linesLogAddress, include_lines=inputLines) # Declare simulation physical properties objRed = sr.ExtinctionModel(Rv=objParams['simulation_properties']['R_v'], red_curve=objParams['simulation_properties']['reddenig_curve'], data_folder=objParams['data_location']['external_data_folder']) # Declare region physical model obj1_model.define_region(objLinesDF, extinction_model=objRed) # Declare sampling properties obj1_model.simulation_configuration(objParams['inference_model_configuration']['parameter_list'], prior_conf_dict=objParams['priors_configuration'], photo_ionization_grid=True) # Declare simulation inference model