def find_number(tb): ### Get flux ### flux = vari_funcs.flux4_stacks(tb) bins = np.array([13, 15]) bins = np.append(bins, np.arange(16, 24, 0.2)) bins = np.append(bins, [24]) bins = 10**((30 - bins) / 2.5) bins = np.flip(bins, axis=0) #bins = bins[16:44] #because of flux limit num = np.zeros(len(bins)) ### Bin data ### for n, binedge in enumerate(bins): # print(binedge) if n == np.size(bins) - 1: break mag, _ = vari_funcs.fluxbin(binedge, bins[n + 1], flux, tb) num[n] = len(mag) return num, bins
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'] lastind = len(bins)-1 sigsq = np.empty([lastind,8]) sigsqdict = {} sigdict = {} oldnum = 0 for n, binedge in enumerate(bins[0:lastind]): sbinflux, bindata = vari_funcs.fluxbin(binedge, bins[n+1], sflux, sdata) #bin data print(str(binedge) + ' '+ str(len(sbinflux))) ### find average flux of stars ### avgflux = np.nanmean(sbinflux, axis=1) ### Find sigma^2 ### diff = sbinflux - avgflux[:,None] top = diff**2 bot = len(avgflux) sigsq[n,:] = np.nansum(top/bot, axis=0) sigsqdict[binedge] = np.nansum(top/bot, axis=0) sigdict[binedge] = np.sqrt(sigsqdict[binedge]) # ### Plot average lightcurve for bin ### # plt.figure()
bins = np.array([13, 15]) bins = np.append(bins, np.arange(16, 24, 0.2)) bins = np.append(bins, [24]) bins = 10**((30 - bins) / 2.5) bins = np.flip(bins, axis=0) bins = bins[16:44] #because of flux limit ### Bin data ### allmedexcess = np.array([]) allmedexcesscorr = np.array([]) for n, binedge in enumerate(bins): # print(binedge) if n == np.size(bins) - 1: break mag, bindata = vari_funcs.fluxbin(binedge, bins[n + 1], flux, tbdata2) #bindata magcorr, bincorr = vari_funcs.fluxbin(binedge, bins[n + 1], fluxn, tbdata) #bindata # magerrcorr = vari_funcs.fluxerr5_stacks_corr(bincorr) #make error array magerrcorr = vari_funcs.fluxerr5_stacks(bincorr) #make error array # magerr = vari_funcs.fluxerr5_stacks_corr(bindata) #make error array magerr = vari_funcs.fluxerr5_stacks(bindata) #make error array nmag, nmagerr = vari_funcs.normalise_flux_and_errors(mag, magerr) nmagcorr, nmagerrcorr = vari_funcs.normalise_flux_and_errors( magcorr, magerrcorr) binexess = vari_funcs.normsigmasq(nmag, nmagerr) binexesscorr = vari_funcs.normsigmasq(nmagcorr, nmagerrcorr) medexcess = np.nanmedian(binexess) allmedexcess = np.append(allmedexcess, medexcess) medexcesscorr = np.nanmedian(binexesscorr) allmedexcesscorr = np.append(allmedexcesscorr, medexcesscorr)
chi = np.nansum(top/char_var, axis=1) return chi def my_chisquare_charanderr(flux, fluxerr, char_var): fluxn, fluxerrn = vari_funcs.normalise_flux_and_errors(flux, fluxerr) meanflux = np.nanmean(fluxn, axis=1) top = np.square(fluxn-meanflux[:,None]) bot = np.square(fluxerrn) + char_var chi = np.nansum(top/bot, axis=1) return chi ### Put characteristic variance into chisquare ### newmedvar = np.empty(np.shape(medvar)) finalmed = np.empty(np.shape(medvar)) for n, binedge in enumerate(bins[0:np.size(bins)-1]): flux, bindata = vari_funcs.fluxbin(binedge, bins[n+1], fluxn, tbdata) #bindata fluxchan, binchan = vari_funcs.fluxbin(binedge, bins[n+1], fluxchann, chandata) #bindata sflux, sbindata = vari_funcs.fluxbin(binedge, bins[n+1], sfluxn, sdata) #bindata # get errors fluxerr = vari_funcs.fluxerr5_stacks(bindata) fluxchanerr = vari_funcs.fluxerr5_stacks(binchan) sfluxerr = vari_funcs.fluxerr5_stacks(sbindata) meanflux = np.nanmean(flux, axis=1) meanchan = np.nanmean(fluxchan, axis=1) meansflux = np.nanmean(sflux, axis=1) chisq = my_chisquare(flux, medvar[n]) chisqchan = my_chisquare(fluxchan, medvar[n]) schisq = my_chisquare(sflux, medvar[n]) ### plot ###
bins = np.array(sigtb.colnames) binarr = np.empty(int(len(bins) / 4)) for k, bin in enumerate(bins): if bin[0] == '1': binarr[k] = int(bin[2:]) k += 1 binarr = binarr.astype(int) binsizes = np.empty(int(len(binarr))) binmean = np.empty(int(len(binarr))) for n, binedge in enumerate(binarr): if binedge == binarr[-1]: binupp = np.nanmax(flux) else: binupp = binarr[n + 1] binflux, bindata = vari_funcs.fluxbin(binedge, binupp, flux, tbdata) #bindata # binsflux, binsdata = vari_funcs.fluxbin(binedge, binupp, sflux, sdata) binsizes[n] = len(bindata) #+ len(binsdata) plt.vlines(binedge, 1e-2, 1e4, zorder=4) binmean[n] = np.nanmean(binflux) # if binsizes[n] < 9: # continue ### get chi values within bin ### # binflux, binfluxerr, bindata = vari_funcs.create_quad_error_array(sigtb, bindata) # binchisq = vari_funcs.my_chisquare_err(binflux, binfluxerr) # ### P value of 30 with dof=6 is 0.00003931 ### ### therefore false positives = binsize * P ### P = 0.00003931 #0.001 numfalpos = binsizes * P plt.figure(figsize=[8, 5])
bins = np.append(bins, np.arange(16, 24, 0.2)) bins = np.append(bins, [24, 25, 26]) ### Bin data ### allerrchange = np.array([]) newallmag = np.array([]) newallmagerr = np.array([]) newallchanmag = np.array([]) newallchanmagerr = np.array([]) newallsmag = np.array([]) newallsmagerr = np.array([]) for n, binedge in enumerate(bins): print(binedge) if n == np.size(bins) - 1: break mag, bindata = vari_funcs.fluxbin(binedge, bins[n + 1], allmag, tbdata) #bindata magerr = vari_funcs.magerr5_stacks(bindata) #make error array errchange, newmagerr = add_chi_err(mag, magerr) #find correction allerrchange = np.append(allerrchange, errchange) #create array of corrections ### Apply correction tp stars and X-ray ### chanmag, chanbin = vari_funcs.fluxbin(binedge, bins[n + 1], allchanmag, chandata) chanmagerr = vari_funcs.magerr5_stacks(chanbin) newchanmagerr = np.sqrt(np.square(chanmagerr) + np.square(errchange)) #change error smag, sbin = vari_funcs.fluxbin(binedge, bins[n + 1], allsmag, sdata) smagerr = vari_funcs.magerr5_stacks(sbin) newsmagerr = np.sqrt(np.square(smagerr) + np.square(errchange)) #change error