def get_luminosity_and_flux(tbdata, xmm=False): # ### Extract magnitude table and error table ### flux = vari_funcs.flux4_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, aper=4) ### 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 L = tbdata['M_K_z_p'] ### remove any that have val of 99 ### L[L == 99] = np.nan # remove those with null values # L[L > -5] = np.nan # remove faintest as seem spurious mask = ~np.isnan(L) # [mask] return tbdata[mask], L[mask], fluxnorm[mask], fluxerrnorm[mask]
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 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 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 get_and_normalise_flux(tbdata, sigtb, aper=5): # Extract magnitude table and error table flux = vari_funcs.flux_stacks(tbdata, aper) flux, tbdata = vari_funcs.noneg(flux, tbdata) flux, fluxerr, tbdata = vari_funcs.create_quad_error_array( sigtb, tbdata, aper) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) return fluxnorm, fluxerrnorm, tbdata
def get_ensemble_sig(tbdata, sigtb, binedge, posvar, aper=5): # Extract magnitude table and error table flux = vari_funcs.flux_stacks(tbdata,aper) flux, tbdata = vari_funcs.noneg(flux, tbdata) flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata,aper) ### 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 the luminosity ### xrayF = tbdata['Full_flux']#[chanmask] xrayL = xrayF*4*np.pi*(DL.value**2) ### Create dicts to save data into ### enflux = {} enfluxerr = {} enxrayL = {} sig = np.empty(size) sigerr = np.empty(size) meanxrayL = np.empty(size) for m, enmin in enumerate(binedge): ### Isolate data needed ### mask1 = xrayL >= enmin if m != size-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] ### Combine into one flux curve per bin ### enfluxcurve = np.ravel(enflux[m]) enfluxcurveerr = np.ravel(enfluxerr[m]) ### Find max likelihood sig of curve ### [sig[m],sigerr[m]] = vari_funcs.maximum_likelihood(enfluxcurve, enfluxcurveerr, 1, posvar) ### find mean z ### meanxrayL[m] = np.nanmean(enxrayL[m]) return fluxnorm, fluxerrnorm, sig, sigerr, xrayL, meanxrayL
def prep_data(tbdata): ### Remove edges ### tbdata = vari_funcs.remove_edges(tbdata) ## Create arrays of flux values ### flux = vari_funcs.flux4_stacks(tbdata) ### remove values that are negative ### flux, tbdata = vari_funcs.noneg(flux, tbdata) ### Get error arrays ### flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata, aper=4) return flux, fluxerr, tbdata
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
def get_ensemble_sig(tbdata, sigtb, binedge, posvar, aper=5): # Extract magnitude table and error table flux = vari_funcs.flux_stacks(tbdata, aper) flux, tbdata = vari_funcs.noneg(flux, tbdata) flux, fluxerr, tbdata = vari_funcs.create_quad_error_array( sigtb, tbdata, aper) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) ### Find z ### z = tbdata['z_spec'] #[mask] z[z == -1] = tbdata['z_p'][z == -1] ### Create dicts to save data into ### enflux = {} enfluxerr = {} enz = {} sig = np.empty(size) sigerr = np.empty(size) meanz = np.empty(size) for m, enmin in enumerate(binedge): ### Isolate data needed ### mask1 = z >= enmin if m != size - 1: mask2 = z < binedge[m + 1] else: mask2 = z < 4.5 #np.ones(len(mask1)) enmask = mask1 * mask2.astype(bool) enflux[m] = fluxnorm[enmask] enfluxerr[m] = fluxerrnorm[enmask] enz[m] = z[enmask] ### Combine into one flux curve per bin ### enfluxcurve = np.ravel(enflux[m]) enfluxcurveerr = np.ravel(enfluxerr[m]) ### Find max likelihood sig of curve ### [sig[m], sigerr[m]] = vari_funcs.maximum_likelihood(enfluxcurve, enfluxcurveerr, 1, posvar) ### find mean z ### meanz[m] = np.nanmean(enz[m]) return fluxnorm, fluxerrnorm, sig, sigerr, z, meanz
def get_luminosity_and_flux(tbdata, xmm=False): # ### Extract magnitude table and error table ### flux = vari_funcs.flux4_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, aper=4) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) L = tbdata['KFLUX_20'] ### remove any that have -ve val ### L[L < 0] = np.nan # remove those with null values # L[L > -5] = np.nan # remove faintest as seem spurious mask = ~np.isnan(L) # [mask] return tbdata[mask], L[mask], fluxnorm[mask], fluxerrnorm[mask]
def get_luminosity_and_flux(tbdata, xmm=False): ### Extract magnitude table and error table ### flux = vari_funcs.flux4_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, aper=4) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) ### Get Luminosity ### L = tbdata['M_K_z_p'] L[L == 99] = np.nan mask = ~np.isnan(L) tbdata = tbdata[mask] L = L[mask] fluxnorm = fluxnorm[mask] fluxerrnorm = fluxerrnorm[mask] return tbdata, L, fluxnorm, fluxerrnorm
def run_max_likely(tbdata): posvar = np.linspace(0,2,5000) ### Remove edges ### tbdata = vari_funcs.remove_edges(tbdata) sigtb = Table.read('sigma_tables/quad_epoch_sigma_table_extra_clean_no06_2arcsec.fits') ### Extract magnitude table and error table ### flux = vari_funcs.flux4_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, aper=4) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) ### Get sig values ### numobs = np.shape(fluxnorm)[0] meanflux = np.nanmean(fluxnorm, axis=1) out = np.array([vari_funcs.maximum_likelihood(fluxnorm[n,:], fluxerrnorm[n,:], meanflux[n], posvar, n=n, printn=100) for n in range(numobs)]) return out, tbdata
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 ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) chanfluxnorm, chanerrnorm = vari_funcs.normalise_flux_and_errors(
)[1].data chandata = fits.open( 'variable_tables/no06_variables_chi30_chandata_DR11data_restframe.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, aper=5) chanflux = vari_funcs.flux5_stacks(chandata) chanflux, chandata = vari_funcs.noneg(chanflux, chandata) chanflux, chanerr, chandata = vari_funcs.create_quad_error_array(sigtb, chandata, aper=5) fullflux = vari_funcs.flux5_stacks(fullxray) fullflux, fulldata = vari_funcs.noneg(fullflux, fullxray) fullflux, fullerr, fullxray = vari_funcs.create_quad_error_array(sigtb, fullxray, aper=5) ### Normalise ### fluxnorm, fluxerrnorm = vari_funcs.normalise_flux_and_errors(flux, fluxerr) chanfluxnorm, chanerrnorm = vari_funcs.normalise_flux_and_errors(
font = {'family' : 'DejaVu Sans', 'weight' : 'normal', 'size' : 14} plt.rc('font', **font) ### Open the fits files and get data ### #varys = fits.open('variable_tables/no06_variables_chi30_DR11data_restframe.fits')[1].data tbdata = fits.open('mag_flux_tables/mag_flux_table_best_extra_clean_no06.fits')[1].data sigtb = Table.read('sigma_tables/quad_epoch_sigma_table_extra_clean_no06.fits') #varys = vari_funcs.chandra_only(varys) flux = vari_funcs.flux5_stacks(tbdata) flux, tbdata = vari_funcs.noneg(flux, tbdata) flux, fluxerr, newtbdata = vari_funcs.create_quad_error_array(sigtb, tbdata) #flux,fluxerr = vari_funcs.normalise_flux_and_errors(flux, fluxerr) mag = 30 - 2.5*np.log10(flux) magerr = 1.086/(flux/fluxerr) # taken from http://faculty.virginia.edu/skrutskie/astr3130.s16/notes/astr3130_lec12.pdf?fbclid=IwAR0fe6lNYH8Azj1iVqusb5l-z3xeECx7JBv23ACDV0Xjdq04FHJPD3nPlxE #set up time variable for plot t = np.linspace(1, 8, num=8) years = ['05B', '06B', '07B', '08B', '09B', '10B', '11B', '12B'] x = [1,3,4,5,6,7,8] #### reduce to just single lightcurve ### #obnum = 94904 #mask = newvarys['NUMBER_05B'] == obnum #flux = flux[mask].reshape(len(x)) #fluxerr = fluxerr[mask].reshape(len(x))
font = {'family' : 'DejaVu Sans', 'weight' : 'normal', 'size' : 14} plt.rc('font', **font) ### Open the fits files and get data ### varys = fits.open('variable_tables/no06_variables_chi30_2arcsec.fits')[1].data sigtb = Table.read('sigma_tables/quad_epoch_sigma_table_extra_clean_no06_2arcsec.fits') #varys = vari_funcs.chandra_only(varys) flux = vari_funcs.flux4_stacks(varys) flux, varys = vari_funcs.noneg(flux, varys) flux, fluxerr, newvarys = vari_funcs.create_quad_error_array(sigtb, varys, aper=4) #flux,fluxerr = vari_funcs.normalise_flux_and_errors(flux, fluxerr) #set up time variable for plot t = np.linspace(1, 8, num=8) years = ['05B', '06B', '07B', '08B', '09B', '10B', '11B', '12B'] xcurve = [1,3,4,5,6,7,8] ### reduce to just single lightcurve ### obnum = 62243 mask = newvarys['NUMBER_05B'] == obnum flux = flux[mask].reshape(len(xcurve)) fluxerr = fluxerr[mask].reshape(len(xcurve)) obdata = newvarys[mask] #### Subtract non flare semester to get flare ###
#tbdata = vari_funcs.chandra_only(tbdata) #chandata = vari_funcs.chandra_only(chandata) #sdata = vari_funcs.chandra_only(sdata) ## Create arrays of flux values ### flux = vari_funcs.flux5_stacks(tbdata) fluxchan = vari_funcs.flux5_stacks(chandata) sflux = vari_funcs.flux5_stacks(sdata) ### remove values that are negative ### flux, tbdata = vari_funcs.noneg(flux, tbdata) fluxchan, chandata = vari_funcs.noneg(fluxchan, chandata) sflux, sdata = vari_funcs.noneg(sflux, sdata) ### Get error arrays ### flux, fluxerr, tbdata = vari_funcs.create_quad_error_array(sigtb, tbdata) fluxchan, chanerr, chandata = vari_funcs.create_quad_error_array( sigtb, chandata) sflux, serr, sdata = vari_funcs.create_quad_error_array(sigtb, sdata) ### reset X-ray column as messed up by stacking ### tbdata['X-ray'][tbdata['X-ray'] == 70] = False tbdata['X-ray'][tbdata['X-ray'] == 84] = True ### Check chisq plot looks correct ### fig, _ = vari_funcs.flux_variability_plot( flux, fluxchan, 'chisq', fluxerr=fluxerr, chanerr=chanerr,
sdata = fits.open( 'mag_flux_tables/stars_mag_flux_table_extra_clean.fits')[1].data sigtb = Table.read('quad_epoch_sigma_table_extra_clean.fits') ## Create arrays of flux values ### flux = vari_funcs.flux5_stacks(tbdata) fluxchan = vari_funcs.flux5_stacks(chandata) sflux = vari_funcs.flux5_stacks(sdata) ### remove values that are negative ### flux, tbdata = vari_funcs.noneg(flux, tbdata) fluxchan, chandata = vari_funcs.noneg(fluxchan, chandata) sflux, sdata = vari_funcs.noneg(sflux, sdata) ### Get error arrays ### quadflux, quaderr, quaddata = vari_funcs.create_quad_error_array( sigtb, tbdata, quadoutput=True) quadchanflux, quadchanerr, quadchandata = vari_funcs.create_quad_error_array( sigtb, chandata, quadoutput=True) quadsflux, quadserr, quadsdata = vari_funcs.create_quad_error_array( sigtb, sdata, quadoutput=True) ### get flux bounds ### bins = np.array(sigtb.colnames) binarr = np.empty(55) k = 0 ### Create binedge array ### for bin in bins: if bin[0] == '1': binarr[k] = int(bin[2:]) k += 1 plt.figure(figsize=[8, 8])