Exemplo n.º 1
0
        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)
        std_line_values = flux_matrix.std(axis=0)
        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'
        figure_file = objFolder/f'{obj}_DirectMethod_posteriors.png'
        figure_file_flux = objFolder/f'{obj}_DirectMethod_ObsVsFitFluxes.png'
        table_file_fluxes = objFolder/f'{obj}_DirectMethod_ObsVsFitFluxes'
        print(outputDb)
        print(figure_file)

        # Load the results
        fit_pickle = sr.load_MC_fitting(outputDb)
        fit_inputs_dict = sr.loadConfData(outputTxt)
        obj1_model = sr.SpectraSynthesizer()

        # Format outputs from old storing container
        inLines = fit_inputs_dict['Input_data']['lineLabels_list']
        inFluxes, inErr = fit_inputs_dict['Input_data']['inputFlux_array'], fit_inputs_dict['Input_data']['inputErr_array']
        inParameters = np.array(['T_high', 'n_e', 'Ar3', 'Ar4', 'Fe3', 'He1', 'He2', 'N2', 'Ne3', 'O2', 'O3', 'S2', 'S3', 'cHbeta'])
        traces_dict = {param: fit_pickle['trace'][param] for param in inParameters}
        for i, lineLabel in enumerate(inLines):
            traces_dict[lineLabel] = fit_pickle['trace']['calcFluxes_Op'][:, i]

        # Printint results
        # obj1_model.tracesPosteriorPlot(figure_file, inParameters, traces_dict, dark_mode=False)
        # obj1_model.fluxes_distribution(figure_file_flux, inLines, inFluxes, inErr, traces_dict)
        obj1_model.table_line_fluxes(table_file_fluxes, inLines, inFluxes, inErr, traces_dict)
Exemplo n.º 3
0
        # flambda_new = objLinesDF.loc[idcs_lines, 'f_lambda']
        # obj1_model.lineFlambda = flambda_new
        #
        # # Declare sampling properties
        # obj1_model.simulation_configuration(objParams['inference_model_configuration']['parameter_list'],
        #                                     prior_conf_dict=objParams['priors_configuration'],
        #                                     photo_ionization_grid=False)
        #
        # # Declare simulation inference model
        # obj1_model.inference_model(fit_T_low=False)
        #
        # # Run the simulation
        # obj1_model.run_sampler(objFolder/outputDb, 5000, 2000, njobs=1)

        # Plot the results
        fit_results = sr.load_MC_fitting(outputDb)

        # print('-- Model parameters table')
        # figure_file = objFolder/f'{obj}_MeanOutputs'
        # obj1_model.table_mean_outputs(figure_file, fit_results, true_values=true_values)
        #
        # print('-- Flux values table')
        # figure_file = objFolder/f'{obj}_FluxComparison'
        # obj1_model.table_line_fluxes(figure_file, fit_results, combined_dict=combined_line_dict)
        #
        # print('-- Model parameters posterior diagram')
        # figure_file = objFolder/f'{obj}_ParamsPosteriors.png'
        # fig_conf = {'figure.figsize': (5, 10), 'axes.titlesize': 8, 'axes.labelsize': 8, 'legend.fontsize': 8}
        # obj1_model.tracesPosteriorPlot(None, fit_results, true_values=None)

        print('-- Line flux posteriors')
Exemplo n.º 4
0
        # Declare region physical model
        obj1_model.define_region(objLinesDF, objIons, objRed, objChem)

        # Declare sampling properties
        obj1_model.simulation_configuration(objParams['parameter_list'],
                                            prior_conf_dict=objParams)

        # Declare simulation inference model
        obj1_model.inference_model(
            include_Thigh_prior=objParams['T_high_check'])

        # Run the simulation
        obj1_model.run_sampler(simFolder / outputDb, 5000, 2000, njobs=1)

        # Plot the results
        fit_results = sr.load_MC_fitting(simFolder / outputDb)

        print('-- Model parameters table')
        figure_file = simFolder / f'{objName}_MeanOutputs'
        obj1_model.table_mean_outputs(figure_file, fit_results)

        print('-- Flux values table')
        figure_file = simFolder / f'{objName}_FluxComparison'
        obj1_model.table_line_fluxes(figure_file, fit_results)

        print('-- Model parameters posterior diagram')
        figure_file = simFolder / f'{objName}_ParamsPosteriors.png'
        obj1_model.tracesPosteriorPlot(figure_file, fit_results)

        print('-- Line flux posteriors')
        figure_file = simFolder / f'{objName}_lineFluxPosteriors.png'
Exemplo n.º 5
0
        row_data[2] = param_entry

        # Planar fitting HII-CHI-mistry
        grid_file = 'C17_bb_Teff_30-90_pp.dat'
        section_label = f'HII_Tef_fit_{grid_file}_{cycle}_sed'
        param_value = results_dict[section_label][param]
        if param == 'Teff':
            param_entry = r'${:.0f}\pm{:.0f}$'.format(param_value[0],
                                                      param_value[1])
        else:
            param_entry = r'${:.2f}\pm{:.2f}$'.format(param_value[0],
                                                      param_value[1])
        row_data[3] = param_entry

        # Bayesian HII-CHI-mistry
        model_fit = sr.load_MC_fitting(outputPiDb)
        trace = model_fit['trace'][param]
        param_value = (np.mean(trace), np.std(trace))
        if param == 'Teff':
            param_entry = r'${:.0f}\pm{:.0f}$'.format(param_value[0],
                                                      param_value[1])
        else:
            param_entry = r'${:.2f}\pm{:.2f}$'.format(param_value[0],
                                                      param_value[1])
        row_data[4] = param_entry

        # Bayesian Direct method + HII-CHI-mistry
        if outputDirectHIIchemDb.is_file():
            model_fit = sr.load_MC_fitting(outputDirectHIIchemDb)
            trace = model_fit['trace'][param]
            param_value = (np.mean(trace), np.std(trace))
for i, obj in enumerate(objList):

    if i < 3:

        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'
        outputPiDb = objFolder / f'{obj}_{ext}_pI_fitting_{cycle}.db'
        outputDirectHIIchemDb = objFolder / f'{obj}_{ext}_Direct-Teff-logU_{cycle}.db'

        obj1_model = sr.SpectraSynthesizer()

        measurements_dict = sr.loadConfData(results_file, group_variables=False)
        objLinesDF = sr.import_emission_line_data(lineLog_file)
        pI_results = sr.load_MC_fitting(outputPiDb)
        fit_results = sr.load_MC_fitting(outputDb)
        bayes_plus_PI_results = sr.load_MC_fitting(outputDirectHIIchemDb)

        # Recover Direct method Bayesian fitting
        sr_lineLabels = fit_results['Input_data']['lineLabels_list']
        inFlux = fit_results['Input_data']['inputFlux_array']
        inErr = fit_results['Input_data']['inputErr_array']
        flux_matrix = fit_results['trace']['calcFluxes_Op']
        mean_line_values = flux_matrix.mean(axis=0)
        std_line_values = flux_matrix.std(axis=0)

        # Recover Direct method + HIIchem fitting
        srPlus_lineLabels = bayes_plus_PI_results['Input_data']['lineLabels_list']
        inFluxPlus = bayes_plus_PI_results['Input_data']['inputFlux_array']
        inErrPlus = bayes_plus_PI_results['Input_data']['inputErr_array']
Exemplo n.º 7
0
    displaySimulationData(inferenModel)

    # Run the model
    trace = pymc3.sample(5000, tune=2000, chains=2, cores=1)

# Save the database
with open(output_db, 'wb') as trace_pickle:
    pickle.dump({'model': inferenModel, 'trace': trace}, trace_pickle)

# Load the .db file
with open(output_db, 'rb') as trace_restored:
    db = pickle.load(trace_restored)

# Restore parameters data
inferenModel, trace = db['model'], db['trace']
traces_dict = ss.load_MC_fitting(output_db)

# Declare sampler
obj1_model = ss.SpectraSynthesizer()

modelParams = list(traces_dict.keys())
modelParams.remove('calcFluxes_Op')

# Traces and Posteriors
print('-- Model parameters posterior diagram')
figure_file = f'{user_folder}interPolationTesting_ParamsPosteriors.txt'
obj1_model.tracesPosteriorPlot(modelParams, traces_dict, true_values=objParams)
obj1_model.savefig(figure_file, resolution=200)

# # Traces and Posteriors
# print('-- Model parameters corner diagram')
Exemplo n.º 8
0
            obj1_model.define_region(lineLabels, lineFluxes, lineErr, extinction_model=objRed)

            # Declare region physical model
            obj1_model.simulation_configuration(model_parameters=conf_fit['inference_model_configuration']['parameter_list'],
                                                prior_conf_dict=conf_fit['priors_configuration'],
                                                grid_interpolator=grid_interpolators)
            obj1_model.photoionization_sampling(conf_fit['inference_model_configuration']['parameter_list'])

            obj1_model.run_sampler(1000, 3000, nchains=8, njobs=4, init='advi')

            # obj1_model.save_fit(outputCfg, cord_label, output_format='cfg')
            obj1_model.save_fit(outputDb, cord_label, output_format='pickle')
            # obj1_model.save_fit(outputFits, cord_label, output_format='fits', user_header=header_params)

            # Plot the results
            fit_pickle = sr.load_MC_fitting(outputDb, output_format='pickle')
            inLines, inParameters = fit_pickle['inputs']['line_list'], fit_pickle['inputs']['parameter_list']
            inFlux, inErr = fit_pickle['inputs']['line_fluxes'].astype(float), fit_pickle['inputs']['line_err'].astype(float)
            traces_dict = fit_pickle['outputs']

            # Load the results
            # fit_fits = sr.load_MC_fitting(outputFits, output_format='fits')
            # in_header, out_header, trace_header = fit_fits['inputs'][1], fit_fits['outputs'][1], fit_fits['traces'][1]
            # inLines, inParameters = fit_fits['inputs'][0]['line_list'], fit_fits['outputs'][0]['parameters_list']
            # inFlux, inErr = fit_fits['inputs'][0]['line_fluxes'], fit_fits['inputs'][0]['line_err']
            # traces_dict = fit_fits['traces'][0]

            # print('-- Model parameters table')
            figure_file = objFolder / f'{cord_label}_pI_fitting_MeanOutputs'
            obj1_model.table_mean_outputs(figure_file, inParameters, traces_dict, true_values=header_params)