Esempio n. 1
0
def get_luminosity_and_flux(tbdata, xmm=False):
    #
    ### Extract magnitude table and error table ###
    flux = vari_funcs.flux5_stacks(tbdata)
    flux, tbdata = vari_funcs.noneg(flux, tbdata)
    flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata)

    ### Normalise ###
    fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr)

    ### Find luminosity distance ###
    z = tbdata['z_spec']  #[mask]
    z[z == -1] = tbdata['z_p'][z == -1]
    DL = cosmo.luminosity_distance(z)
    DL = DL.to(u.cm)

    ### Calculate luminosity ###
    if xmm == True:
        xrayF = tbdata['CR(S)'] * 0.171 * (10**(-14)
                                           )  #conversion into ergs/s/cm2
    else:
        xrayF = tbdata['Soft_flux']  #no conversion required in chandra
    xrayL = xrayF * 4 * np.pi * (DL.value**2)

    return tbdata, xrayL, fluxnorm, fluxerrnorm
Esempio n. 2
0
def get_luminosity_and_flux(tbdata, xmm=False):
    #
    ### Extract magnitude table and error table ###
    flux = vari_funcs.flux5_stacks(tbdata)
    flux, tbdata = vari_funcs.noneg(flux, tbdata)
    #    tbdata = tbdata[np.nanmean(flux,axis=1)>1e4]
    flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata)

    ### Normalise ###
    fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr)

    ### Find luminosity distance ###
    z = tbdata['z_spec']  #[mask]
    z[z == -1] = tbdata['z_p'][z == -1]
    DL = cosmo.luminosity_distance(z)
    DL = DL.to(u.m)

    ### Get AB magnitude ###
    abmag = tbdata['KMAG_20']

    ### Convert to luminosity using formula worked out in lab book ###
    L = 10**(-abmag / 2.5) * 3631 * 1e-26 * (3e8 / 0.34e-6) * 4 * np.pi * (
        DL.value**2)  # gives luminosity in W

    return tbdata, L, fluxnorm, fluxerrnorm
Esempio n. 3
0
def make_ensemble(tbdata, xrayL, binedge):

    ### Extract magnitude table and error table ###
    flux = vari_funcs.flux5_stacks(tbdata)
    flux, tbdata = vari_funcs.noneg(flux, tbdata)
    flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata)

    ### Normalise ###
    fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr)

    ### Create dicts to save data into ###
    enflux = {}
    enfluxerr = {}
    enXrayL = {}

    ### loop over bins ###
    for m, enmin in enumerate(binedge):
        ### Isolate data needed ###
        mask1 = xrayL >= enmin
        if m != len(binedge) - 1:
            mask2 = xrayL < binedge[m + 1]
        else:
            mask2 = np.ones(len(mask1))
        enmask = mask1 * mask2.astype(bool)
        enflux[m] = fluxnorm[enmask]
        enfluxerr[m] = fluxerrnorm[enmask]
        enXrayL[m] = xrayL[enmask]

    return enflux, enfluxerr, enXrayL
Esempio n. 4
0
def extract_flux(band, binlen, tbdata):
    ### first get the flux and error values for each stack
    binarr = range(binlen)
    shortflux = np.empty(len(binarr))
    shortfluxerr = np.empty(len(binarr))
    for n in binarr:
        seout = fits.open('SE_outputs_shortstacks/08B_' + str(band) +
                          '_output_cam1_' + str(binlen) + 'bin_' + str(n) +
                          '.fits')[1].data
        if band == 'J':
            seout = seout[seout['NUMBER'] == 13363]
        elif band == 'K':
            seout = seout[seout['NUMBER'] == 15100]
        elif band == 'H':
            seout = seout[seout['NUMBER'] == 11900]
        shortflux[n] = seout['FLUX_APER'][:, 4]
        shortfluxerr[n] = seout['FLUXERR_APER'][:, 4]

    ### Average non-flare flux ###
    if band == 'J':
        flux = vari_funcs.jflux5_stacks(tbdata).reshape(4)
        fluxerr = vari_funcs.jfluxerr5_stacks(tbdata).reshape(4)
        flux[3] = np.nan
        fluxerr[3] = np.nan
    elif band == 'K':
        flux = vari_funcs.flux5_stacks(tbdata).reshape(7)
        fluxerr = vari_funcs.fluxerr5_stacks(tbdata).reshape(7)
        flux[2] = np.nan
        fluxerr[2] = np.nan
    elif band == 'H':
        flux = vari_funcs.hflux5_stacks(tbdata).reshape(7)
        fluxerr = vari_funcs.hfluxerr5_stacks(tbdata).reshape(7)
        flux[2] = np.nan
        fluxerr[2] = np.nan

    meanflux = np.nanmean(flux)

    ### get flare flux ###
    flareflux = shortflux - meanflux  #flux[0]

    ### Propogate errors ###
    errmeanflux = np.sqrt(np.nansum(np.square(fluxerr))) / binlen
    flarefluxerr = np.sqrt(np.square(shortfluxerr) + np.square(errmeanflux))

    ### Convert to magnitudes ###
    if band == 'J':
        flaremag = 30 - 2.5 * np.log10(flareflux) + 0.91
    elif band == 'H':
        flaremag = 30 - 2.5 * np.log10(flareflux) + 1.39
    elif band == 'K':
        flaremag = 30 - 2.5 * np.log10(flareflux) + 1.85

    flaremagerr = 1.086 / (flareflux / flarefluxerr)

    return flareflux, flarefluxerr, flaremag, flaremagerr
def get_luminosity_and_flux(tbdata, xmm=False):
    #
    ### Extract magnitude table and error table ###
    flux = vari_funcs.flux5_stacks(tbdata)
    flux, tbdata = vari_funcs.noneg(flux, tbdata)
    tbdata = tbdata[np.nanmean(flux, axis=1) > 1e4]
    flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata)

    ### Normalise ###
    fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr)

    ### Get absolute magnitude ###
    L = tbdata['M_K_z_p']

    return tbdata, L, fluxnorm, fluxerrnorm
Esempio n. 6
0
from astropy.io import fits #for handling fits
#from astropy.table import Table #for handling tables
import numpy as np #for handling arrays
#import math
from astropy.stats import median_absolute_deviation
import vari_funcs #my module to help run code neatly
#from scipy.stats import chisquare
plt.close('all') #close any open plots


### Open the fits files and get data ###
tbdata = fits.open('mag_flux_tables/mag_flux_table_best_1519match.fits')[1].data
sdata = fits.open('mag_flux_tables/stars_mag_flux_table_1519match.fits')[1].data

### Get flux array and remove values that are negative ###
flux = vari_funcs.flux5_stacks(tbdata)
sflux = vari_funcs.flux5_stacks(sdata)
sflux, sdata = vari_funcs.noneg(sflux, sdata)
flux, tbdata = vari_funcs.noneg(flux, tbdata)

### Everything needs to be done on flux bins so create bin array ###
#bins = np.array([13, 15])
#bins = np.append(bins, np.arange(16,22.4,0.2))
bins = np.arange(13,22.4,0.2)
bins = np.append(bins, [24])
bins = 10**((30-bins)/2.5)
bins = np.flip(bins, axis=0)

### set up time variable ###
t = np.arange(8)
semesters = ['05B', '06B', '07B', '08B', '09B', '10B', '11B', '12B']
    colnames = colname + sem
    mag = sdata['MAG_APER_' + sem][:, 4]
    mask1 = mag > 15  #removes saturated
    mask2 = mag < 20  #removes very faint stars
    mask = mask1 * mask2
    tempsdata = sdata[mask]
    avgFWHM[n] = np.median(tempsdata[colnames])  #* 3600
    avgflux[n] = np.median(tempsdata['FLUX_APER_' + sem][:, 4])
    if sem == '10B':
        psf[sem] = fits.getdata('PSFs/small_' + sem + '_K_PSF.fits')
    else:
        psf[sem] = fits.getdata('PSFs/matched_' + sem + '_K_PSF.fits')
#    psf[sem] = fits.open('PSFs/small_'+sem+'_K_PSF.fits')[0].data
## get flux curve

flux = vari_funcs.flux5_stacks(tempsdata)
flux = vari_funcs.normalise_flux(flux)

### Find maximum FWHM as this is what all the others willl become ###
aimind = np.argmax(avgFWHM)
aimsem = semesters[aimind]
aimpsf = psf[aimsem]

### Convert FWHM into a sigma ###
sigmaold = np.array([FWHM2sigma(fwhm, const) for fwhm in avgFWHM])
sigmabroad = sigmaold[aimind]
plt.figure(4)
plt.imshow(np.log(psf['10B']))
#plt.imshow(psf['10B'])

phot = {}
Esempio n. 8
0
stars = fits.open('starsnotsatfwhm.fits')
sdata = stars[1].data
stars = fits.open('stars_mag_flux_table.fits')
sdata2 = stars[1].data

## Restrict objects to those in the Chandra field ###
tbdata = vari_funcs.chandra_only(tbdata)

## Create arrays of flux values ###
flux = vari_funcs.k_mag_flux.flux5_stacks(tbdata)
sfwhm = np.stack(([
    sdata['FWHM_05B'], sdata['FWHM_06B'], sdata['FWHM_07B'], sdata['FWHM_08B'],
    sdata['FWHM_09B'], sdata['FWHM_10B'], sdata['FWHM_11B'], sdata['FWHM_12B']
]),
                 axis=1)
sflux = vari_funcs.flux5_stacks(sdata2)

### Calculate the average flux for each year within each flux bin ###
avgflux = np.mean(flux, axis=0)
savgfwhm = np.mean(sfwhm, axis=0)
savgflux = np.mean(sflux, axis=0)

### Plot light curves ###
vari_funcs.lightcurve_funcs.avg_lightcurve(avgflux)
plt.title('Mean Lightcurve for All Objects')
vari_funcs.lightcurve_funcs.avg_lightcurve(savgflux)
plt.title('Mean Lightcurve for Stars')
ax = vari_funcs.lightcurve_funcs.avg_lightcurve(savgfwhm)
plt.title('Mean FWHM')
plt.ylabel('FWHM')
ax.invert_yaxis()
Esempio n. 9
0
#import math
from astropy.stats import median_absolute_deviation
import vari_funcs  #my module to help run code neatly
plt.close('all')  #close any open plots
#from numpy.lib.recfunctions import append_fields

### Open the fits files and get data ###
tbdata = fits.open(
    'mag_flux_tables/mag_flux_table_best_1519match.fits')[1].data
chandata = fits.open(
    'mag_flux_tables/xray_mag_flux_table_best_1519match.fits')[1].data
sdata = fits.open(
    'mag_flux_tables/stars_mag_flux_table_1519match.fits')[1].data

## Create arrays of flux values ###
fluxn = vari_funcs.flux5_stacks(tbdata)
fluxchann = vari_funcs.flux5_stacks(
    chandata)  # for chandra non-stellar objects
sfluxn = vari_funcs.flux5_stacks(sdata)

### remove values that are negative ###
fluxn, tbdata = vari_funcs.semfluxlim(fluxn, tbdata)
fluxchann, chandata = vari_funcs.semfluxlim(fluxchann, chandata)
sfluxn, sdata = vari_funcs.semfluxlim(sfluxn, sdata)
#fluxn, tbdata = vari_funcs.noneg(fluxn, tbdata)
#fluxchann, chandata = vari_funcs.noneg(fluxchann, chandata)
#sfluxn, sdata = vari_funcs.noneg(sfluxn, sdata)

### get error arrays and correct them ###
#fluxerrn = vari_funcs.fluxerr5_stacks_corr(tbdata)
#fluxerrchann = vari_funcs.fluxerr5_stacks_corr(chandata)
Esempio n. 10
0
    'variable_tables/no06_variables_chi30_xmmdata_DR11data_restframe.fits'
)[1].data
tbdata = fits.open(
    'variable_tables/no06_variables_chi30_DR11data_restframe.fits')[1].data
fullxray = fits.open(
    'mag_flux_tables/novarys_chanDR11data_restframe_mag_flux_table_best_extra_clean_no06.fits'
)[1].data
sigtb = Table.read('sigma_tables/quad_epoch_sigma_table_extra_clean_no06.fits')

#### Limit to Chandra region for simplicity ###
#tbdata = vari_funcs.chandra_only(tbdata)
#fullxray = vari_funcs.chandra_only(fullxray)
#chandata = vari_funcs.chandra_only(chandata)

# Extract magnitude table and error table
flux = vari_funcs.flux5_stacks(tbdata)
flux, tbdata = vari_funcs.noneg(flux, tbdata)
flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata)
chanflux = vari_funcs.flux5_stacks(chandata)
chanflux, chandata = vari_funcs.noneg(chanflux, chandata)
chanflux, chanerr, chandata = vari_funcs.create_quad_error_array(
    sigtb, chandata)
fullflux = vari_funcs.flux5_stacks(fullxray)
fullflux, fulldata = vari_funcs.noneg(fullflux, fullxray)
fullflux, fullerr, fullxray = vari_funcs.create_quad_error_array(
    sigtb, fullxray)
xmmflux = vari_funcs.flux5_stacks(xmmdata)
xmmflux, xmmdata = vari_funcs.noneg(xmmflux, xmmdata)
xmmflux, xmmerr, xmmdata = vari_funcs.create_quad_error_array(sigtb, xmmdata)

### Normalise ###
from astropy.io import fits #for handling fits
#from astropy.table import Table #for handling tables
import numpy as np #for handling arrays
#import math
from astropy.stats import median_absolute_deviation
import vari_funcs #my module to help run code neatly
#from scipy.stats import chisquare
plt.close('all') #close any open plots

### Open the fits files and get data ###
tbdata = fits.open('mag_flux_tables/mag_flux_table_best_1519match.fits')[1].data
chandata = fits.open('mag_flux_tables/xray_mag_flux_table_best_1519match.fits')[1].data
sdata = fits.open('mag_flux_tables/stars_mag_flux_table_1519match.fits')[1].data

## Create arrays of flux values ###
fluxn = vari_funcs.flux5_stacks(tbdata)
fluxchann = vari_funcs.flux5_stacks(chandata) 
sfluxn = vari_funcs.flux5_stacks(sdata)

### remove values that are negative ###
fluxn, tbdata = vari_funcs.noneg(fluxn, tbdata)
fluxchann, chandata = vari_funcs.noneg(fluxchann, chandata)
sfluxn, sdata = vari_funcs.noneg(sfluxn, sdata)

fluxerr = vari_funcs.fluxerr5_stacks(tbdata)
fluxerrchan = vari_funcs.fluxerr5_stacks(chandata)
sfluxerr = vari_funcs.fluxerr5_stacks(sdata)


vari_funcs.flux_variability_plot(fluxn, fluxchann, 'var', starflux=sfluxn, 
                                 stars=True, normalised=True, scale='symlog')
Esempio n. 12
0
from astropy.io import fits  #for handling fits
#from astropy.table import Table #for handling tables
import numpy as np  #for handling arrays
import matplotlib.gridspec as gridspec  # to nest subplots
#from astropy.stats import median_absolute_deviation
import vari_funcs  #my module to help run code neatly
plt.close('all')  #close any open plots

### Read in fits files ###
imdata = fits.getdata(
    'UDS-DR11-K.mef.fits')  ### SHOULD CHANGE TO THE DR11 IMAGE
varydata = fits.getdata(
    'variable_tables/no06_variables_chi30_DR11data_restframe.fits', 1)

### stick to those above 1e4 ###
flux = vari_funcs.flux5_stacks(varydata)
flux, varydata = vari_funcs.noneg(flux, varydata)
meanflux = np.nanmean(flux, axis=1)
varydata = varydata[meanflux >= 1e4]

#imthresh = 200 #fits.getheader('UDS_05B_K.fits')['SATURATE']
#imdata[imdata>imthresh] = imthresh

### Create mask array ###
maskx = np.zeros(imdata.shape[1]).astype(bool)
masky = np.zeros(imdata.shape[0]).astype(bool)

### Find coordinates of objects ###
x = varydata['X_IMAGE']
x = x.astype(int)
y = varydata['Y_IMAGE']
def get_avg_flux(tbdata):
    flux = vari_funcs.flux5_stacks(tbdata)
    flux = vari_funcs.normalise_flux(flux)
    return np.nanmedian(flux, axis=0)
Esempio n. 14
0
    mask1 = mag > 15  #removes saturated
    mask2 = mag < 19  #removes very faint stars
    mask = mask1 * mask2
    alldata = alldata[mask]
    avgfwhm[n] = np.median(alldata[colnames]) * 3600

    # remove stars in new table
    mag = alldataconv['MAG_APER_' + sem][:, 4]
    mask1 = mag > 15  #removes saturated
    mask2 = mag < 19  #removes very faint stars
    mask = mask1 * mask2
    alldataconv = alldataconv[mask]
    avgfwhmconv[n] = np.median(alldataconv[colnames]) * 3600

# Create flux stack
allflux = vari_funcs.flux5_stacks(alldata)
allfluxconv = vari_funcs.flux5_stacks(alldataconv)

#allflux, alldata = vari_funcs.semfluxlim(allflux, alldata)
#allfluxconv, alldataconv = vari_funcs.semfluxlim(allfluxconv, alldataconv)

allflux, alldata = vari_funcs.noneg(allflux, alldata)
allfluxconv, alldataconv = vari_funcs.noneg(allfluxconv, alldataconv)

allfluxerr = vari_funcs.fluxerr1_stacks(alldata)
allfluxconverr = vari_funcs.fluxerr1_stacks(alldataconv)

#depths = np.load('fluxdepths.npy')
#allfluxerr = np.zeros(np.shape(allflux)) + depths[None,:]
#depthsconv = np.load('fluxdepthsconv_PSF.npy')
#allfluxconverr = np.zeros(np.shape(allfluxconv)) + depthsconv[None,:]
Esempio n. 15
0
                sigma = testerrchange[n - 1]
            break  #quit loop as no point continuing after value is found
        allmed = np.append(allmed, med)  #keep value on array
        n = n + 1  #increase counter
    # calculate new error array with correct correction
    newmagerr = np.sqrt(np.square(magerr) + np.square(sigma))
    return sigma, newmagerr  #output the required err change and the new array


### Open the fits files and get data ###
tbdata = fits.open('mag_flux_tables/mag_flux_table_best.fits')[1].data
chandata = fits.open('mag_flux_tables/xray_mag_flux_table_best.fits')[1].data
sdata = fits.open('mag_flux_tables/stars_mag_flux_table.fits')[1].data

### extract magnitude arrays ###
allmag = vari_funcs.flux5_stacks(tbdata)
allchanmag = vari_funcs.flux5_stacks(
    chandata)  # for chandra non-stellar objects
allsmag = vari_funcs.flux5_stacks(sdata)

### remove 99s ###
allmag, tbdata = vari_funcs.noneg(allmag, tbdata)
allchanmag, chandata = vari_funcs.noneg(allchanmag, chandata)
allsmag, sdata = vari_funcs.noneg(allsmag, sdata)

# need to run on all fluxbins, like in find_outliers
#bins = np.array([13, 15])
#bins = np.append(bins, np.arange(16,24,0.2))
#bins = np.append(bins, [24, 25, 26])
bins = np.array([13, 15])
bins = np.append(bins, np.arange(16, 24, 0.2))