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']) # Generate interpolator from the emissivity grids ionDict = objIons.get_ions_dict(np.unique(objLinesDF.ion.values)) objIons.computeEmissivityGrids(objLinesDF, ionDict, combined_dict=combined_line_dict) # Declare chemical model objChem = sr.DirectMethod( linesDF=objLinesDF, highTempIons=objParams['simulation_properties'] ['high_temp_ions_list']) # Declare region physical model obj1_model = sr.SpectraSynthesizer() # obj1_model.define_region(objLinesDF, objIons, objRed, objChem) # # # Replace the flamda values # idcs_lines = objLinesDF.index.isin(obj1_model.lineLabels) # 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)
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']) # Declare chemical model objChem = sr.DirectMethod( lineLabels, highTempIons=chem_conf['simulation_properties'] ['high_temp_ions_list']) # Prepare simulation obj1_model = sr.SpectraSynthesizer() obj1_model.define_region(lineLabels, lineFluxes, lineErr, objIons, objRed, objChem) obj1_model.simulation_configuration( chem_conf['inference_model_configuration'] ['parameter_list'], prior_conf_dict=chem_conf['priors_configuration'], photo_ionization_grid=False) obj1_model.simulation_configuration(
# Declare input files 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) objLinesDF = sr.import_emission_line_data( lineLog_file, include_lines=objParams[obj]['input_lines']) # Plot the results objChem = sr.DirectMethod() table_file = objFolder / f'{obj}_elementalabundances' objChem.abundances_from_db(outputDb, save_results_address=table_file) mean_abund_dict = {} for element, trace in objChem.element_traces.items(): mean_abund_dict[element] = np.array([trace.mean(), trace.std()]) sr.parseConfDict(results_file, mean_abund_dict, f'Elemental_abundances_{cycle}', clear_section=True)
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, linesDb=sr._linesDb, combined_dict={'O2_3726A': 'O2_3726A-O2_3729A'}) # Declare chemical model objChem = sr.DirectMethod( linesDF=objLinesDF, highTempIons=objParams['high_temp_ions_list']) # 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)
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']) # Define the dictionary with the pyneb ion objects ionDict = objIons.get_ions_dict(np.unique(objLinesDF.ion.values)) # Compute the emissivity surfaces for the observed emission lines # TODO this database is not necesary since we duplicate the logs objIons.computeEmissivityGrid(objLinesDF, ionDict, linesDb=ss._linesDb) # Declare the paradigm for the chemical composition measurement objChem = ss.DirectMethod() # Tag the emission features for the chemical model implementation objChem.label_ion_features(linesDF=objLinesDF, highTempIons=objParams['high_temp_ions_list']) # Declare a dictionary with the synthetic abundances abundDict = {} for ion in objChem.obsAtoms: abundDict[ion] = objParams['true_values'][ion] # We generate an object with the tensor emission functions emtt = ss.EmissionTensors() # Array with the equation labels eqLabelArray = ss.assignFluxEq2Label(objLinesDF.index.values, objLinesDF.ion.values)