예제 #1
0
def spec_generator(folder_data, obj_list, flux_norm, idx_start=0):

    for idx_obj, obj_name in enumerate(obj_list[idx_start:]):
        wave, data, hdrs = sr.import_fits_data(folder_data /
                                               f'{obj_name}.fits',
                                               instrument='SDSS')
        flux = data['flux'] * flux_norm
        z_i = hdrs[1]["z"][0]
        lm = sr.LineMesurer(wave,
                            flux,
                            redshift=z_i,
                            normFlux=normFlux,
                            crop_waves=(1 + z_i) *
                            np.array([4685 - 100, 5100]))
        yield idx_obj, obj_name, lm.wave, lm.flux
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt, rcParams
from pathlib import Path
import src.specsiser as ss

linesFile = Path(
    'D:/Pycharm Projects/spectra-synthesizer/src/specsiser/literature_data/lines_data.xlsx'
)
linesDb = pd.read_excel(linesFile, sheet_name=0, header=0, index_col=0)
data_folder = Path('D:/Dropbox/Astrophysics/Data/WHT-Ricardo/')
fileList = ['COMBINED_blue.0001.fits', 'combined_red.0001.fits']
addressList = list(data_folder / file for file in fileList)

# Get the fits file data
wave_blue, flux_blue, header_blue = ss.import_fits_data(addressList[0], 0)
wave_red, flux_red, header_red = ss.import_fits_data(addressList[1], 0)

# Redshift correction
redshift, blue_limits = 1.1735, (3600, 5100)
wave_blue = wave_blue / redshift
wave_red = wave_red / redshift

# Trim the observation
idcs_limit = (blue_limits[0] <= wave_blue) & (wave_blue <= blue_limits[1])
wave_blue, flux_blue = wave_blue[idcs_limit], flux_blue[idcs_limit]

lm = ss.EmissionFitting(wave_blue, flux_blue)

# Remove the continuum
flux_noContinuum = lm.continuum_remover(noiseWaveLim=(4150, 4300))
flux_norm = obsData['sample_data']['norm_flux']

i_obj = 2
obj = objList[i_obj]
ext = '_BR'
cycle = 'c2'

for i_obj, obj in enumerate(objList):
    if i_obj < 3:
        print(f'Treating: {obj}')
        objFolder = resultsFolder / f'{obj}'
        lineLog_file = objFolder / f'{obj}{ext}_linesLog_{cycle}.txt'
        linesDF = sr.lineslogFile_to_DF(lineLog_file)

        fits_file = dataFolder / f'{obj}{ext}.fits'
        wave, flux, header = sr.import_fits_data(fits_file,
                                                 instrument='OSIRIS')
        lm = sr.LineMesurer(wave,
                            flux,
                            redshift=z_objs[i_obj],
                            normFlux=flux_norm,
                            crop_waves=(wmin_array[i_obj], wmax_array[i_obj]))

        fits_blue_file = dataFolder / f'{obj}_B.fits'
        wave_b, flux, header_b = sr.import_fits_data(fits_blue_file,
                                                     instrument='OSIRIS')
        flux_b = flux[idx_band][0]
        lm_b = sr.LineMesurer(wave_b,
                              flux_b,
                              redshift=z_objs[i_obj],
                              normFlux=flux_norm,
                              crop_waves=(wmin_array[i_obj],
예제 #4
0
    # Inputs location
    print(f'\n- Treating {obj} ({i}/{len(objList)})')
    fits_address = fits_folder / f'{obj}.fits'
    objFolder = results_folder / 'line_measurements' / obj
    local_mask = objFolder / f'mask_{obj}.txt'

    # Outputs location
    local_lineslog = objFolder / f'lineslog_{obj}.txt'
    pdf_lineslog = objFolder / f'tablelog_{obj}'

    # Make folder if not available
    objFolder.mkdir(parents=True, exist_ok=True)

    # Read the spectrum
    wave, data, hdrs = sr.import_fits_data(fits_address, instrument='SDSS')
    flux = data['flux'] * normFlux
    z_i = hdrs[1]["z"][0]

    # Measure the emission lines
    lm = sr.LineMesurer(wave, flux, redshift=z_i, normFlux=normFlux)
    # if local_mask.is_file():
    #     objMaskDF = sr.lineslogFile_to_DF(local_mask)
    #     for i, lineLabel in enumerate(objMaskDF.index.values):
    #         wave_regions = objMaskDF.loc[lineLabel, 'w1':'w6'].values
    #         try:
    #             lm.fit_from_wavelengths(lineLabel, wave_regions)
    #         except:
    #             print(f'- Failure at: {lineLabel}')
    #
    # # Check Extinction
]

# Analyse the spectrum
for i, file_address in enumerate(addressList):

    print(f'- Treating: {file_address}')

    # Open lineslog
    linesLogAddress = str(file_address).replace('.fits',
                                                '_treatedlinesLog.txt')
    tableLogAddress = str(file_address).replace('.fits', '_treatedlinesLog')
    figureLogAddress = str(file_address).replace('.fits',
                                                 '_treatedlinesLog.png')

    # Set and crop the wavelength
    wave_rest, flux, header = sr.import_fits_data(file_address,
                                                  instrument='SDSS')
    idx_wave = (wave_rest >= obsData['sample_data']['wmin_array']) & (
        wave_rest <= obsData['sample_data']['wmax_array'])

    # Load line measurer object
    lm = sr.LineMesurer(wave_rest[idx_wave],
                        flux[idx_wave] / fluxNorm,
                        linesDF_address=linesLogAddress)
    pdf = PdfPrinter()

    # Measure line fluxes
    idcs_lines = ~lm.linesDF.index.str.contains('_b')
    obsLines = lm.linesDF.loc[idcs_lines].index.values

    pdf.create_pdfDoc(tableLogAddress, pdf_type='table')
    pdf.pdf_insert_table(tableHeaders)
for i, obj in enumerate(objList):

    print(f'\n-- Treating: {obj}{ext}.fits')

    # Declare input files
    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_it3.txt'

    # output spectrum
    spectrum_ssp = objFolder / f'{obj}_starlight_spectrum.txt'

    # Load the data
    wave, flux_array, header = sr.import_fits_data(fits_file,
                                                   instrument='OSIRIS')
    flux = flux_array[idx_band][0] if ext in ('_B', '_R') else flux_array
    lm = sr.LineMesurer(wave,
                        flux,
                        redshift=z_array[i],
                        crop_waves=(wmin_array[i], wmax_array[i]))
    linesDF = sr.lineslogFile_to_DF(lineLog_file)

    # Add new masks
    linesDF = sr.lineslogFile_to_DF(lineLog_file)
    ini_mask, end_points = obsData[obj]['ini_mask_array'], obsData[obj][
        'end_mask_array']
    labels = ['cont_mask_' + str(int(x)) for x in ini_mask]
    for j, label_mask in enumerate(labels):
        linesDF.loc[labels[j], ['w3', 'w4']] = ini_mask[j], end_points[j]
예제 #7
0
# Import the observation data
obsData = sr.loadConfData(
    '../../../papers/gtc_greenpeas/gtc_greenpeas_data.ini',
    group_variables=False)
linesFile = Path(
    'D:/Pycharm Projects/spectra-synthesizer/src/specsiser/literature_data/lines_data.xlsx'
)
data_folder = Path(obsData['file_information']['data_folder'])
file_list = obsData['file_information']['files_list']
addressList = list(data_folder / file for file in file_list)

# Analyse the spectrum
for i, file_address in enumerate(addressList):

    # Get fits data
    wave, flux, header = sr.import_fits_data(file_address, instrument='OSIRIS')
    z_mean = obsData['sample_data']['z_array'][i]
    wmin_array, wmax_array = obsData['sample_data']['wmin_array'], obsData[
        'sample_data']['wmax_array']

    # Define wave and flux ranges
    wave_rest = wave / (1 + z_mean)
    idx_wave = (wave_rest >= wmin_array[i]) & (wave_rest <= wmax_array[i])

    # Open lineslog
    fitsFolder, fitsFile = file_address.parent, file_address.name
    logFolder, logFile = fitsFolder / 'pre_analysis', fitsFile.replace(
        '.fits', '_rawlinesLog.txt')

    # Load line measurer object
    lm = sr.LineMesurer(wave_rest[idx_wave], flux[idx_wave],
import numpy as np
import src.specsiser as sr
from pathlib import Path
from astropy import units as u
import pysynphot as pys
import matplotlib.pyplot as plt

def specPerAngs_to_specPerHz(spec_flux):
    return

# Original spectrum from xshooter
fitsFileAddress = Path('D:/Downloads/ADP.2019-02-11T15_41_46.691.fits')
wave_nm, flux_array, headers = sr.import_fits_data(fitsFileAddress, instrument='xshooter')
wave_nm_pysyn, flux_array_pysyn, headers_pysyn = sr.import_fits_data(fitsFileAddress, instrument='xshooter')

# Wavelength conversion to angstroms
wave, flux = wave_nm * 10, flux_array[1]
wave_pysyn, flux_pysyn =wave_nm_pysyn * 10, flux_array_pysyn[1]

# Conversion from gemini page
fitsFileAddress_gemini = Path('D:/Downloads/ADP.2019-02-11T15_41_46.691_conversion.txt')
wave_gem, flux_gemn = np.loadtxt(fitsFileAddress_gemini, unpack=True)

# ---- Using pysynphot
spec = pys.spectrum.ArraySourceSpectrum(wave=wave_pysyn, flux=flux_pysyn, waveunits='angstroms', fluxunits='flam',
                                        keepneg=True)
spec.convert('mjy')
spec.convert('micron')

# Manual conversion
wave_nm
예제 #9
0
conf_file_address = '../sampleHeII.ini'
obsData = sr.loadConfData(conf_file_address)

dataFolder = pathlib.Path(obsData['data_location']['data_folder'])
treatmentFolder = pathlib.Path(obsData['data_location']['treatment_folder'])
resultsFolder = pathlib.Path(obsData['data_location']['results_folder'])

sampleFiles = tuple(dataFolder.iterdir())
sampleObj = tuple([x.name[x.name.find('-')+1:x.name.find('-')+8] for x in sampleFiles])
normFlux = obsData['sample_data']['norm_flux']

for i, obj in enumerate(sampleObj):

    # Load the data
    wave, data, hdrs = sr.import_fits_data(sampleFiles[i], instrument='SDSS')
    flux = data['flux'] * normFlux
    z_i = hdrs[1]["z"][0]

    #Output files
    specPlotAddress = f'{obj}_SDSS_spectrum.png'

    print(f'\nGalaxy {obj}')
    lineLabels = ['He_II 4685', 'H_beta', 'H_alpha', '[O_III] 4959', '[O_III] 5007']
    lineWaves = [4685.0, 4861.0, 5007]
    for lineRef in lineLabels:
        idx_line = np.where(hdrs[2]['LINENAME'] == lineRef)[0][0]
        lineArea, lineAreaErr = hdrs[2]['LINEAREA'][idx_line], hdrs[2]['LINEAREA_ERR'][idx_line]
        print(f'{lineRef} linea area : {lineArea:.2f}+/-{lineAreaErr:.2f}')

    lm = sr.LineMesurer(wave, flux, redshift=z_i, normFlux=normFlux, crop_waves=(1+z_i) * np.array([4685-100, 5100]))
예제 #10
0
import pandas as pd
import src.specsiser as sr
from pathlib import Path
import matplotlib.pyplot as plt

conf_file_address = 'gtc_greenpeas_data.ini'
obsData = sr.loadConfData(conf_file_address, objList_check=True, group_variables=False)
dataFolder = Path(obsData['file_information']['data_folder'])

files_dict = dict(spec_mio = dataFolder/'gp004054_BR.fits',
                    spec_ric = dataFolder/'GP004054_comb_new_clean.fits',
                    spec_ric_resf = dataFolder/'GP004054_comb_new_rf_clean.fits')

z = 0.283232

wave1, flux_array1, header1 = sr.import_fits_data(files_dict['spec_mio'], instrument='OSIRIS')
wave2, flux_array2, header2 = sr.import_fits_data(files_dict['spec_ric'], instrument='OSIRIS')
wave3, flux_array3, header3 = sr.import_fits_data(files_dict['spec_ric_resf'], instrument='OSIRIS')

fig, ax = plt.subplots()
ax.step(wave2 * 1/(1+z), flux_array2, label='spec_mio')
ax.step(wave3, flux_array3, label='spec_ric_resf', linestyle=':')
ax.legend()
plt.show()
ric_idx_max = np.argmax(flux_array2)
mio_idx_max = np.argmax(flux_array3)
print(flux_array2[ric_idx_max])
print(flux_array3[mio_idx_max])

print(flux_array1/flux_array2)
print((flux_array1-flux_array2).sum())
예제 #11
0
# fileList_B = obsData['file_information']['filesB_list']
# objList_R = obsData['file_information']['objectR_list']
# fileList_R = obsData['file_information']['filesR_list']
z_objs = obsData['sample_data']['z_array']
idx_band = int(obsData['file_information']['band_flux'])

for i, obj in enumerate(objList):

    fileList_B = dataFolder / fileList[i].replace('_BR', '_B')
    fileList_R = dataFolder / fileList[i].replace('_BR', '_R')

    file_BR, file_blue, file_red = dataFolder / fileList[
        i], dataFolder / fileList_B, dataFolder / fileList_R

    # Set and crop the wavelength
    rest_wave, flux, header = sr.import_fits_data(file_BR, instrument='OSIRIS')
    rest_waveB, fluxB, headerB = sr.import_fits_data(file_blue,
                                                     instrument='OSIRIS')
    rest_waveR, fluxR, headerR = sr.import_fits_data(file_red,
                                                     instrument='OSIRIS')

    z = z_objs[i]
    rest_wave, rest_waveB, rest_waveR = rest_wave / (1 + z), rest_waveB / (
        1 + z), rest_waveR / (1 + z)

    # Plot Configuration
    defaultConf = STANDARD_PLOT.copy()
    rcParams.update(defaultConf)

    # Plot the spectra
    fig = plt.figure(figsize=(16, 9))
    spec = gridspec.GridSpec(ncols=2, nrows=1, width_ratios=[16, 9])
    ax0 = fig.add_subplot(spec[0])
    ax1 = fig.add_subplot(spec[1])

    for ext in ('_BR', '_B', '_R', '_SDSS'):

        # Declare files location
        dataFolder = dataFolder
        objFolder = resultsFolder / f'{obj}'
        fits_file = f'{obj}{ext}.fits'

        # Load spectrum
        print(f'\n-- Treating {counter} :{fits_file}')
        if ext != '_SDSS':
            wave, flux_array, header = sr.import_fits_data(dataFolder /
                                                           fits_file,
                                                           instrument='OSIRIS')
            flux = flux_array[idx_band][0] if ext in ('_B',
                                                      '_R') else flux_array
            lm = sr.LineMesurer(wave,
                                flux,
                                redshift=z,
                                normFlux=flux_norm,
                                crop_waves=(wmin, wmax))
        else:
            wave, flux, header = sr.import_fits_data(dataFolder / fits_file,
                                                     instrument='SDSS')
            lm = sr.LineMesurer(wave, flux, normFlux=flux_norm)

        # Load line measurer object
        print(f'-- Pixel width: {np.diff(lm.wave).mean()}')
예제 #13
0
from pathlib import Path
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import src.specsiser as sr
import pyneb as pn

# spec_address = '/home/vital/Astro-data/Observations/IZW18_Blue_cr_f_t_w_e__test1_fglobal.fits'
#
# wave, data, header = sr.import_fits_data(spec_address, instrument='ISIS', frame_idx=0)
# norm_flux = 1e-17
# z_obj = 0.0
#
# lm = sr.LineMesurer(wave, data[0], normFlux=norm_flux, redshift=z_obj)
# lm.plot_spectrum(specLabel='IZwicky18 Blue arm ISIS spectrum')

spec_address = '/home/vital/Dropbox/Astrophysics/Seminars/LzLCS/spec-0266-51630-0100.fits'

wave, data, header = sr.import_fits_data(spec_address,
                                         instrument='SDSS',
                                         frame_idx=0)
norm_flux = 1e-17
z_obj = 0.0

lm = sr.LineMesurer(wave,
                    data['flux'] * norm_flux,
                    normFlux=norm_flux,
                    redshift=z_obj)
lm.plot_spectrum(specLabel='CGCG007-025 SLOAN spectrum')
예제 #14
0
objDF['z'] = np.nan
for szLabel, sdssLabel in lineConversion.items():
    objDF[szLabel] = np.nan
    objDF[f'{szLabel}_err'] = np.nan
objDF['Comment'] = 'None'

for idx, obj in enumerate(objDF.index.values):

    # Object indexing
    plate, mjd, fiber = objDF.iloc[idx]['plate':'fiber']
    objLabel = f'{plate}-{mjd}-{fiber}'
    spec_name = f'{objLabel}.fits'
    output_file = fits_folder/spec_name
    print(f'- Obj {idx}/{n_objs}')

    with fits.open(output_file) as hdu_list:
        wave, data, hdrs = sr.import_fits_data(output_file, instrument='SDSS')
        dataProp = hdrs[1]
        dataLines = hdrs[2]
        objDF.loc[objLabel, 'z'] = dataProp['z'][0]

        for szLabel, sdssLabel in lineConversion.items():
            idx_line = np.where(dataLines['LINENAME'] == sdssLabel)[0][0]
            objDF.loc[objLabel, szLabel] = dataLines['LINEAREA'][idx_line]
            objDF.loc[objLabel, f'{szLabel}_err'] = dataLines['LINEAREA_ERR'][idx_line]

df_file = data_folder/f'AVO_dataframe.txt'
with open(df_file, 'wb') as output_file:
    string_DF = objDF.to_string()
    output_file.write(string_DF.encode('UTF-8'))
예제 #15
0
pdf.create_pdfDoc(sampleFolder / tableName, pdf_type='table')
pdf.pdf_insert_table(tableHeaders)

# Analyse the spectrum
for i, file_address in enumerate(addressList):

    # Open lineslog
    fitsFolder, fitsFile = file_address.parent, file_address.name
    lineLogFolder, lineLogFile = fitsFolder/'flux_analysis', fitsFile.replace('.fits', '_linesLog.txt')
    pdfLogFolder, pdfLogFile = fitsFolder / 'flux_analysis', fitsFile.replace('.fits', '_linesLog')

    objName = fitsFile.replace('.fits', '')
    print(f'- {i}: {objName}')

    # Set and crop the wavelength
    wave_rest, flux, header = sr.import_fits_data(fitsFolder/fitsFile, instrument='SDSS')
    idx_wave = (wave_rest >= obsData['sample_data']['wmin_array']) & (wave_rest <= obsData['sample_data']['wmax_array'])

    # Load line measurer object
    lm = sr.LineMesurer(wave_rest[idx_wave], flux[idx_wave], lineLogFolder / lineLogFile, normFlux=flux_norm)

    # Measure line fluxes
    idcs_lines = ~lm.linesDF.index.str.contains('_b')
    obsLines = lm.linesDF.loc[idcs_lines].index.values

    # Equivalent width Hbeta
    eqw_Hbeta, eqwErr_Hbeta = lm.linesDF.loc['H1_4861A', 'eqw'], lm.linesDF.loc['H1_4861A', 'eqw_err']
    eqw_entry = r'${:0.2f}$ $\pm$ ${:0.2f}$'.format(eqw_Hbeta, eqwErr_Hbeta)

    # Normalizing flux
    flux_Halpha = lm.linesDF.loc['H1_6563A', 'gauss_flux']
verbose = True

for i, objName in enumerate(objRef_list):

    # Input data
    spec_file, sigm_file = data_folder / objfile_list[
        i], data_folder / sigmafile_list[i]

    # Output data
    lineslog_file = results_folder / f'{objName}_linesLog.txt'
    lineslog_table = results_folder / f'{objName}_flux_table'

    # Load inputs
    wave, flux, header = sr.import_fits_data(spec_file,
                                             instrument='xshooter',
                                             frame_idx=0)
    wave_sigma, sigma, header_sigma = sr.import_fits_data(
        sigm_file, instrument='xshooter', frame_idx=0)

    lm = sr.LineMesurer(wave,
                        flux,
                        crop_waves=[wmin_array[i], wmax_array[i]],
                        input_err=sigma,
                        normFlux=norm_flux,
                        redshift=z_obj)

    # lm.plot_spectrum(obsLinesTable=obsLinesTable, matchedLinesDF=maskLinesDF, specLabel=f'{objName}')
    mask_local = data_folder / f'{objName}_mask'
    mask_local_df = sr.lineslogFile_to_DF(mask_local)
예제 #17
0
from pathlib import Path
import src.specsiser as sr

# Declare the data location
obsFitsFile = Path('./sample_data/gp121903_BR.fits')
lineMaskFile = Path('./sample_data/gp121903_BR_mask.txt')
cfgFile = Path('./sample_data/gtc_greenpeas_data.ini')

# Load the data
obsConf = sr.loadConfData(cfgFile, objList_check=True, group_variables=False)
maskDF = sr.lineslogFile_to_DF(lineMaskFile)
wave, flux, header = sr.import_fits_data(obsFitsFile, instrument='OSIRIS')
user_conf = obsConf['gp121903_line_fitting']

# Declare line measuring object
lm = sr.LineMesurer(wave,
                    flux,
                    redshift=obsConf['sample_data']['z_array'][2],
                    normFlux=obsConf['sample_data']['norm_flux'])
lm.plot_spectrum()

# Find lines
norm_spec = lm.continuum_remover(
    noiseRegionLims=obsConf['sample_data']['noiseRegion_array'])
obsLinesTable = lm.line_finder(
    norm_spec,
    noiseWaveLim=obsConf['sample_data']['noiseRegion_array'],
    intLineThreshold=3)
matchedDF = lm.match_lines(obsLinesTable, maskDF)
lm.plot_spectrum(obsLinesTable=obsLinesTable,
                 matchedLinesDF=matchedDF,
for i, obj in enumerate(objList):

    print(f'\n- Treating {i} :{obj}_{ext}.fits')

    # Declare input files
    objFolder = resultsFolder / f'{obj}'
    fits_file = dataFolder / f'{obj}_{ext}.fits'
    objMask = dataFolder / f'{obj}_{ext}_mask.txt'  # Declare input files

    # Declare output files
    lineLog_file = objFolder / f'{obj}_{ext}_linesLog_{cycle}.txt'
    lineGrid_file = objFolder / f'{obj}_{ext}_lineGrid_{cycle}.png'

    # Load data
    wave, flux_dict, header = sr.import_fits_data(fits_file, instrument='SDSS')
    flux, err = flux_dict['flux'], flux_dict['ivar']
    maskDF = pd.read_csv(objMask, delim_whitespace=True, header=0, index_col=0)

    # Create line measurer object
    lm = sr.LineMesurer(wave,
                        flux,
                        redshift=z_objs[i],
                        normFlux=flux_norm,
                        crop_waves=(wmin_array[i], wmax_array[i]))
    # lm.plot_spectrum_components(matchedLinesDF=maskDF)

    # # Fit and check the regions
    obsLines = maskDF.index.values
    for j, lineLabel in enumerate(obsLines):
    print(obj)
    if i == 5:

        # Declare input files
        objFolder = resultsFolder / f'{obj}'
        results_file = objFolder / f'{obj}_{ext}_measurements.txt'
        fits_file = dataFolder / f'{obj}_{ext}.fits'
        ext_fit = '1D'
        fado_file = f'{obj}_FD.cxt.FADO_{ext_fit}.fits'
        previousCycle = cycle.replace('3', '2')
        stellarFluxFile = objFolder / f'{obj}_{ext}_stellarFlux_{previousCycle}.txt'
        nebCompFile = objFolder / f'{obj}_{ext}_nebFlux_{previousCycle}.txt'

        # Load Fado data
        data, header = sr.import_fits_data(papaderos_fittings_folder /
                                           fado_file,
                                           instrument=None,
                                           frame_idx=0)
        wave_fado = np.arange(start=int(header['LAMBDA_I']),
                              stop=int(header['LAMBDA_F']) + 1)
        normF_fado = np.power(10, header["FLUXUNIT"]) * header["GALSNORM"]

        # Load observed spectrm
        wave, flux_array, header = sr.import_fits_data(fits_file,
                                                       instrument='OSIRIS')
        flux = flux_array[idx_band][0] if ext in ('_B', '_R') else flux_array
        wave_star, flux_star = np.loadtxt(stellarFluxFile, unpack=True)
        lm = sr.LineMesurer(wave,
                            flux,
                            redshift=z_objs[i],
                            normFlux=normF_fado,
                            crop_waves=(wmin_array[i], wmax_array[i]))
예제 #20
0
obsData = sr.loadConfData(conf_file_address, group_variables=False)
fits_1 = 'cgcg007025_HBIN024_FDres2_2DnebSED.fits'
fits_2 = 'cgcg007025_HBIN024_FDres2_2DnoNEB.fits'
fits_3 = 'cgcg007025_HBIN024_FDres2_3DnebSED.fits'
fits_4 = 'cgcg007025_HBIN024_FDres2_3DnoNEB.fits'
fits_5 = 'cgcg007025_HBIN024_FDres2_3DOBS.fits'
fits_6 = 'cgcg007025_HBIN024_FDres2_3DstelFIT.fits'
fits_7 = 'cgcg007025_HBIN024_FDres2_2DnebSED.fits'
fits_8 = 'red_cgcg007025_3D_SLres_HBIN024_RY.fits'
fits_9 = 'red_cgcg007025_HBIN024_FDres2.fits'

coord = (170, 170)

file_path = Path(r'S:\Astro_data\Observations\MUSE - Amorin\CGCG007.fits')
wave, cube, header = sr.import_fits_data(file_path, instrument='MUSE')
z_obj = 0.004691
norm_flux = 1e-16

file_address, ext = fits_folder / fits_1, 0
with fits.open(file_address) as hdu_list:
    data1 = hdu_list[ext].data
    hdr1 = hdu_list[ext].header

file_address, ext = fits_folder / fits_2, 0
with fits.open(file_address) as hdu_list:
    data2 = hdu_list[ext].data
    hdr2 = hdu_list[ext].header

file_address, ext = fits_folder / fits_3, 0
with fits.open(file_address) as hdu_list:
예제 #21
0
defaultConf.update(labelsDict)
rcParams.update({})

for i, obj in enumerate(objList):

    if i == 0:

        # Data location
        objFolder = resultsFolder
        cube_address_i = fitsFolder / fileList[i]
        mask_address = dataFolder / obsConf['data_location']['mask_global']
        db_address = objFolder / f'{obj}_database.fits'

        # Load the data
        wave, data, header = sr.import_fits_data(cube_address_i,
                                                 instrument='fits-cube',
                                                 frame_idx=0)
        mask_global_DF = sr.lineslogFile_to_DF(mask_address)

        # Declare voxels to analyse
        flux5007_image = fits.getdata(db_address,
                                      f'{ref_flux_line}_flux',
                                      ver=1)
        flux5007_levels = np.nanpercentile(flux5007_image, percentil_array)
        ion, wavelength, latexLabel = sr.label_decomposition(
            ref_flux_line, scalar_output=True)

        for idx_level, flux_level in enumerate(flux5007_levels):

            if idx_level + 1 < len(flux5007_levels):
예제 #22
0
dict_nan_values = {}

verbose = False

idx_pair = (145, 120)
i = 0
obj = objList[i]

# Data location
cube_address = fitsFolder / fileList[i]
objFolder = resultsFolder / obj
voxelFolder = resultsFolder / obj / 'voxel_data'
db_addresss = objFolder / f'{obj}_database.fits'

# Load data
wave, cube, header = sr.import_fits_data(cube_address, instrument='MUSE')
wave_rest = wave / (1 + z_objs[i])

# Loop throught the line regions
idx_region = 2

# Fitelp dictionary
example_object = RegionParameters(
    region_name='CGCG07-025',
    blue_spec_file=None,  #fits file path of the blue spectrum
    red_spec_file=None,  #fits file path of the red spectrum
    blue_spec_error_file=None,  #fits file path of the blue spectrum error
    red_spec_error_file=None,  #fits file path of the red spectrum error
    scale_flux=1e20,  # Scales the fluxes
    center_list={'low': [3649.11211, 3661.84195, 3648.06497]
                 },  # Center values of the Gaussian components for each zone
import src.specsiser as sr
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np

# data_folder = Path('D:/Dropbox/Astrophysics/Data/J083843/blue')
# file_name = 'combined_2d_apall.fits'

data_folder = Path('D:/Dropbox/')
file_name = 'J0838_blue_apall.fits'

wave, flux_array, header = sr.import_fits_data(data_folder / file_name,
                                               instrument='ISIS',
                                               frame_idx=0)

print(header)

labelsDict = {
    'xlabel': r'Wavelength $(\AA)$',
    'ylabel': r'Flux $(erg\,cm^{-2} s^{-1} \AA^{-1})$',
    'title': f'Galaxy J083843 extracted blue arm'
}

print(np.sum(flux_array[0][0]))

# Plot spectra components
fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(wave, flux_array[2][0], label='Object flux')
ax.update(labelsDict)
ax.legend()
plt.show()
import numpy as np
from pathlib import Path
import src.specsiser as sr

spec_address = Path(
    '/home/vital/Dropbox/Astrophysics/Papers/gtc_greenpeas/data/gp030321_B.fits'
)
wave, flux_array, header = sr.import_fits_data(spec_address,
                                               instrument='OSIRIS')
flux, err, normFlux = flux_array[0][0], flux_array[3][0], 1e-17
lm_osiris = sr.LineMesurer(wave, flux, input_err=err, normFlux=normFlux)
lm_osiris.plot_spectrum(continuumFlux=lm_osiris.errFlux,
                        log_scale=True,
                        axConf={'title': 'OSIRIS spectrum'})
lineWaves = np.array([5600.0, 5635.0, 5651.0, 5675.0, 5697.0, 5729.0])
lm_osiris.fit_from_wavelengths('H1_4861A', lineWaves)
lm_osiris.print_results(show_plot=True)
#
spec_address = Path(
    '/home/vital/Astro-data/Observations/MUSE - Amorin/CGCG007.fits'
)  #D:/Google drive/Astrophysics/Datos/MUSE - Amorin/CGCG007.fits')
wave, cube, header = sr.import_fits_data(spec_address, instrument='MUSE')
idx_j, idx_i = 171, 171
flux_voxel = cube[:, idx_j, idx_i].data.data
flux_err = cube[:, idx_j, idx_i].var.data
lm_muse = sr.LineMesurer(wave, flux_voxel, input_err=flux_err)
lm_muse.plot_spectrum(continuumFlux=lm_muse.errFlux,
                      log_scale=True,
                      axConf={'title': 'MUSE spectrum'})
lineWaves = np.array([4835.0, 4868.0, 4877.0, 4891.0, 4913.0, 4941.0])
lm_muse.fit_from_wavelengths('H1_4861A', lineWaves)
예제 #25
0
# Reading parameters from four libraries
for i, obj in enumerate(objList):

    # Declare input files
    objFolder = resultsFolder / f'{obj}'
    results_file = objFolder / f'{obj}_{ext}_measurements.txt'

    # Results container
    fado_measurements = {}

    for ext_fit, list_params in params_per_ext.items():

        ssp_lib = f'{obj}_FD.cxt.FADO_{ext_fit}.fits'
        fits_address = papaderos_fittings_folder / ssp_lib
        data, header = sr.import_fits_data(fits_address,
                                           instrument=None,
                                           frame_idx=0)

        for param in list_params:
            # print(f'{param} = {header[param]}')
            fado_measurements[param] = header[param]

        # for param in header:
        #     print(f'{param} = {header[param]}')

    # Store the results
    section_label = f'Large_FADO_fit'
    sr.parseConfDict(results_file,
                     fado_measurements,
                     section_label,
                     clear_section=True)