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
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
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
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
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 = {}
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()
#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)
'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')
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)
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,:]
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))