def get_all_bkg_txt(catalog_file, obsIDlist, inpath, ecf): ###------read catalog file, need modification---## (ra_list, dec_list, srcIDlist) = funcs.read_erosita_cat( '/Users/baotong/Desktop/period_Tuc/erosita_cat_coord.xlsx') ###-------------------------------------------## if len(ra_list) != len(srcIDlist) or len(dec_list) != len(srcIDlist): print('ERROR!') return None # for j in range(len(obsIDlist)): # bkgarea_all=[] # (psf_bettervalue, not_include_index) = get_psfradius(srcID=srcIDlist, ra=ra, dec=dec, obsid=obsIDlist[j], inpath=path, # outpath=path, ecf=0.9, if_SN_radius=False) # (psf_bettervalue_src, not_include_index_2) = get_psfradius(srcID=srcIDlist, ra=ra, dec=dec, obsid=obsIDlist[j], inpath=path, # outpath=path, ecf=0.5, if_SN_radius=False) # outpath = inpath + 'txt/txt_psf75_{0}/'.format(obsIDlist[j]) # evtfile = inpath + 'pm00_{0}_020_EventList_c001_bary.fits'.format(obsIDlist[j]) # imgfilename =inpath+ '{0}_05_5_img.fits'.format(obsIDlist[j]) # for i in range(len(ra_list)): # evtfile=inpath+'pm00_{0}_020_EventList_c001_bary.fits'.format(obsIDlist[j]) # bkgarea_temp=get_singlebkg_evt(evtfile=evtfile,imgname=imgfilename,obsid=obsIDlist[j],ra=ra_list[i],dec=dec_list[i], # emin=200,emax=5000,radius_src=psf_bettervalue[i],radius_list=psf_bettervalue_src, # ra_list=ra_list,dec_list=dec_list,outpath=outpath,outname=str(srcIDlist[i])) # bkgarea_all.append(bkgarea_temp) # np.savetxt(outpath+'bkg_area.txt',np.column_stack((srcIDlist,np.array(bkgarea_all)))) for i in range(len(ra_list)): merge_txt(obsIDlist=obsIDlist, inpath=inpath + 'txt/', outpath=inpath + 'txt/txt_merge_psf50_0.2_5/', outname=str(srcIDlist[i]), epoch_file='epoch_47Tuc.txt', ecf=ecf)
def get_all_src_txt(catalog_file, obsIDlist, inpath, ecf=0.50): ###------read catalog file, need modification---## (ra_list, dec_list, srcIDlist) = funcs.read_erosita_cat( '/Users/baotong/Desktop/period_Tuc/erosita_cat_coord.xlsx') # ###-------------------------------------------## if len(ra_list) != len(srcIDlist) or len(dec_list) != len(srcIDlist): print('ERROR!') return None for j in range(len(obsIDlist)): srcarea = [] (psf_bettervalue, not_include_index) = get_psfradius(srcID=srcIDlist, ra=ra, dec=dec, obsid=obsIDlist[j], inpath=path, outpath=path, ecf=ecf, if_SN_radius=False) outpath = inpath + 'txt/txt_psf{0}_{1}/'.format( int(ecf * 100), obsIDlist[j]) evtfile = inpath + 'pm00_{0}_020_EventList_c001_bary.fits'.format( obsIDlist[j]) imgfilename = inpath + '{0}_02_5_img.fits'.format(obsIDlist[j]) for i in range(len(ra_list)): get_singlesrc_evt(evtfile=evtfile, imgname=imgfilename, obsid=obsIDlist[j], ra=ra_list[i], dec=dec_list[i], radius=psf_bettervalue[i], emin=200, emax=5000, outpath=outpath, outname=str(srcIDlist[i])) srcarea.append(np.pi * psf_bettervalue[i]**2) np.savetxt(outpath + 'src_area.txt', np.column_stack((srcIDlist, np.array(srcarea)))) for i in range(len(ra_list)): merge_txt(inpath=inpath + 'txt/', outpath=inpath + 'txt/txt_merge_psf{0}_0.2_5/'.format(int(ecf * 100)), outname=str(srcIDlist[i]), epoch_file='epoch_47Tuc.txt', ecf=ecf)
def write_src_info(ecf=0.75): ##返回的radi是arcsec单位,with bkgimage path = '/Users/baotong/eSASS/data/raw_data/47_Tuc/' srcid = np.arange(1, 889, 1) obsIDlist = [700011, 700163, 700013, 700014, 700173, 700174, 700175] expT = [25808.86, 25268.79, 25208.83, 25208.82, 8809.16, 8389.71, 8330.68] for k in range(len(obsIDlist)): obsid = obsIDlist[k] srcarea = np.loadtxt( path + 'txt/txt_psf{0}_{1}/src_area.txt'.format(int(100 * ecf), obsid)) srcscale = srcarea[:, 1] radi = np.sqrt(srcscale / np.pi) / 20. bkgimgfile = 'bkg_map_02_5_{0}.fits'.format(obsid) bkgimg = fits.open(path + bkgimgfile)[0].data.T catalog_file = '/Users/baotong/Desktop/period_Tuc/erosita_cat_coord.xlsx' (ra, dec, srcIDlist) = funcs.read_erosita_cat(catalog_file) (phy_x, phy_y) = funcs.trans_radec2xy(path + bkgimgfile, ra, dec) img_x = (phy_x + 41000) / 80 img_y = (phy_y + 41000) / 80 img_x = img_x.astype('int') img_y = img_y.astype('int') img_x[np.where(img_x > 1024 - 1)] = 0 img_y[np.where(img_y > 1024 - 1)] = 0 median_bkgvalue = bkgimg[img_x, img_y] bkg_cts_est = median_bkgvalue * srcscale / 6400 src_cts = [] for i in range(len(srcid)): srctxtfile = path + 'txt/txt_psf{0}_{1}/{2}_{1}.txt'.format( int(100 * ecf), obsid, srcid[i]) time = np.loadtxt(srctxtfile) src_cts.append(len(time)) src_cts = np.array(src_cts) SNR = (src_cts - bkg_cts_est) / np.sqrt(src_cts) SNR[np.where(radi < 0.1)] = 0 ##出界的源,SNR自然应该是0,0.1是随便取的值,筛出出界的源即可 info = np.column_stack((srcid, src_cts, bkg_cts_est, radi, SNR)) np.savetxt( path + 'txt/txt_psf{0}_{1}/src_info.txt'.format(int(100 * ecf), obsid), info, fmt='%10d %10d %10.2f %10.5f %10.5f')
def get_all_src_txt_SNRpsf(catalog_file, obsIDlist, inpath): (ra_list, dec_list, srcIDlist) = funcs.read_erosita_cat(catalog_file) if len(ra_list) != len(srcIDlist) or len(dec_list) != len(srcIDlist): print('ERROR!') return None for j in range(len(obsIDlist)): print(obsIDlist[j]) evtfile = inpath + 'pm00_{0}_020_EventList_c001_bary.fits'.format( obsIDlist[j]) imgfilename = inpath + '{0}_02_5_img.fits'.format(obsIDlist[j]) src_info = np.loadtxt(inpath + 'region/reg_{0}/region_SNRpsf/src_info_{0}.txt'. format(obsIDlist[j])) radius_list = src_info[:, 3] not_include_index = src_info[:, 6] radius_list *= 20. outpath = inpath + 'txt/txt_SNR_{0}/'.format(obsIDlist[j]) for i in range(len(ra_list)): if not_include_index[i] == 1: get_singlesrc_evt(evtfile=evtfile, imgname=imgfilename, obsid=obsIDlist[j], ra=ra_list[i], dec=dec_list[i], radius=radius_list[i], emin=200, emax=5000, outpath=outpath, outname=str(srcIDlist[i])) for i in range(len(ra_list)): merge_txt(obsIDlist=obsIDlist[0:4], inpath=inpath + 'txt/', outpath=inpath + 'txt/txt_merge_psf75_0.2_5/', outname=str(srcIDlist[i]), epoch_file='epoch_47Tuc.txt')
if __name__ == '__main__': # path = '/Users/baotong/eSASS/data/47_Tuc/' path = '/Users/baotong/eSASS/data/raw_data/47_Tuc/' ID = [700011, 700013, 700014, 700163, 700173, 700174, 700175] catalog_file = '/Users/baotong/Desktop/period_Tuc/erosita_cat_coord.xlsx' # make_epochfile(path=path,ID=ID,outpath=path+'txt/') # for obsid in ID: # get_singlesrc_evt(path+'pm00_{0}_020_EventList_c001_bary.fits'.format(obsid),obsid=obsid, # ra=6.04485,dec=-72.07383,radius=20./3600,outpath='/Users/baotong/eSASS/data/47_Tuc/txt/', # outname='182') # # merge_txt(ID,outpath='/Users/baotong/eSASS/data/47_Tuc/txt/',outname='182') # get_psfradius(ra=np.array([6.0178,6.1078]),dec=np.array([-72.08281,-72.18281]),obsid=700011,inpath=path,outpath=path) (ra, dec, srcIDlist) = funcs.read_erosita_cat(catalog_file) # get_all_src_txt(catalog_file, obsIDlist=ID, inpath=path,ecf=0.90) # get_all_bkg_txt(catalog_file, obsIDlist=ID, inpath=path) # get_all_src_txt_SNRpsf(catalog_file, obsIDlist=ID, inpath=path) # merge_4reg_txt(srcIDlist,ecf=0.90) # for obsID in ID[0:]: # (psf_bestSNR_no_overlap,ECF_allsrc,SNR_allsrc,not_include_index)=get_psfradius(srcID=srcIDlist[0:],ra=ra[0:], dec=dec[0:], obsid=obsID, inpath=path, # outpath=path, ecf=0.9,if_SN_radius=True) # write_cat_psfinfo(srcID=srcIDlist[0:],ra=ra[0:],dec=dec[0:],radius=psf_bestSNR_no_overlap, # ecf=ECF_allsrc,SNR=SNR_allsrc,not_include_index=not_include_index,obsIDlist=[obsID],outpath=path) # make_region(srcID=srcIDlist[0:],ra=ra[0:],dec=dec[0:],ecf='SNR',radius=psf_bestSNR_no_overlap,obsIDlist=[obsID],outpath=path)
expmap = fits.open(path + expmap_file)[0].data.T path_txt = path + 'txt/txt_psf{0}_{1}/'.format(ecf, obsid) src_info = np.loadtxt(path_txt + 'src_info.txt') src_cts = src_info[:, 0] bkg_cts = src_info[:, 1] net_cts = src_cts - bkg_cts expvalue = expmap[src_x, src_y] return (net_cts, expvalue) if __name__ == '__main__': path = '/Users/baotong/eSASS/data/raw_data/47_Tuc/' (ra, dec, srcIDlist) = funcs.read_erosita_cat( filename='/Users/baotong/Desktop/period_Tuc/erosita_cat_coord.xlsx') obsIDlist = [700011, 700163, 700013, 700014, 700173, 700174, 700175] for i in range(len(obsIDlist)): (net_cts, expvalue) = get_net_info(obsIDlist[i], ra, dec, srcIDlist) net_CR = net_cts / expvalue / 1500 net_CR = net_CR[np.where(net_CR > 0)] net_CR = net_CR * 1e4 plt.hist(net_CR, bins=np.logspace(-2, 2, 30), histtype='step') plt.loglog() plt.title('obsID: {0}'.format(obsIDlist[i])) plt.xlabel('Net count rate') plt.ylabel('Number') plt.show() # net_cts_err = poisson_conf_interval(net_cts, interval='frequentist-confidence').T # print(net_cts_err)