示例#1
0
def exp_dead_new(file_num, name_file, imsz, wcs, flat_list, foc_list, asp_solution, dead, cut, flat_idx, step, out_path, return_dict):
    print imsz
    count = np.zeros(imsz)

    x_lim = imsz[0]
    y_lim = imsz[1]

    length = flat_list[0].shape[0]
    half_len = length/2.
    print half_len
    l = imsz[0]/10
    start = foc_list[0,1]-half_len
    print foc_list.shape
    print start.shape

    ox = np.repeat(np.arange(l)+start,length+1000)
    oy = np.tile(np.arange(length+1000)+foc_list[0,0]-half_len-500,l)
    omask = (ox>=0) & (ox<imsz[0]) & (oy>=0) & (oy<imsz[1])
    ox = ox[omask]
    oy = oy[omask]
    gl,gb = wcs.all_pix2world(oy,ox,0)
    c = SkyCoord(gl*u.degree, gb*u.degree, frame='galactic')
    rd = c.transform_to(FK5)
    for i in range(asp_solution.shape[0]):
        hrflat = flat_list[flat_idx[i]]
        foc = foc_list[i,:]#wcs.sip_pix2foc(wcs.wcs_world2pix(coo,1),1)
        if (foc[1]+half_len)>=(start+l):
            print 'update'
            start = foc[1]-half_len
            ox = np.repeat(np.arange(l)+start,length+1000)
            oy = np.tile(np.arange(length+1000)+foc[0]-half_len-500,l)
            omask = (ox>=0) & (ox<imsz[0]) & (oy>=0) & (oy<imsz[1])
            if np.sum(omask)==0:
                break
            ox = ox[omask]
            oy = oy[omask]
            gl,gb = wcs.all_pix2world(oy,ox,0)
            c = SkyCoord(gl*u.degree, gb*u.degree, frame='galactic')
            rd = c.transform_to(FK5)
        fmask = (ox>=(foc[1]-length/2)) & (ox<(foc[1]+length/2)) & (oy>=(foc[0]-length/2)) & (oy<(foc[0]+length/2))
        if np.sum(fmask)==0:
            continue
        x = ox[fmask]
        y = oy[fmask]
        xi, eta = gn.gnomfwd_simple(rd.ra.deg[fmask], rd.dec.deg[fmask], 
                                        asp_solution[i,1], asp_solution[i,2], -asp_solution[i,3],1/36000.,0.)
        px = ((xi/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*length
        py = ((eta/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*length
        pmask = (px>=0) & (px<length) & (py>=0) & (py<length)
        if np.sum(pmask)==0:
            continue
        count[x[pmask].astype(int),y[pmask].astype(int)] += \
            hrflat[px[pmask].astype(int),py[pmask].astype(int)]*step*(1-dead[i])*cut[i]
        if i%100==0:
            with open('/scratch/dw1519/galex/fits/scan_map/%s_gal_sec_exp_tmp%d.dat'%(name_file, file_num),'w') as f:
                f.write('%d'%i)
            print i
    print '%d done'%file_num
    #return_dict[file_num] = count
    np.save('%s/%s_gal_sec_exp_tmp%d.npy'%(out_path, name_file, file_num), count)
示例#2
0
def rrhr(band,skypos,tranges,skyrange,width=False,height=False,stepsz=1.,
		 verbose=0,calpath='../cal/',tscale=1000.,response=True,hdu=False,
		 retries=20):
	"""Generate a high resolution relative response (rrhr) map."""
	imsz = gxt.deg2pix(skypos,skyrange)
	# TODO the if width / height

	flat = get_fits_data(flat_filename(band,calpath),verbose=verbose)
	flatinfo = get_fits_header(flat_filename(band,calpath))
	npixx,npixy 	= flat.shape
	fltsz 		= flat.shape
	pixsz = flatinfo['CDELT2']
	detsize = 1.25

	# Rotate the flat into the correct orientation to start.
	flat   = np.flipud(np.rot90(flat))

	# NOTE: This upsample interpolation is done _last_ in the canonical
	#	pipeline as part of the poissonbg.c routine.
	# 	The interpolation function is "congrid" in the same file.
	# TODO: Should this be first order interpolation? (i.e. bilinear)
	hrflat = scipy.ndimage.interpolation.zoom(flat,4.,order=0,prefilter=False)
	img = np.zeros(hrflat.shape)[
				hrflat.shape[0]/2.-imsz[0]/2.:hrflat.shape[0]/2.+imsz[0]/2.,
				hrflat.shape[1]/2.-imsz[1]/2.:hrflat.shape[1]/2+imsz[1]/2.]

	for trange in tranges:
		t0,t1=trange
		entries = gQuery.getArray(gQuery.aspect(t0,t1),retries=retries)
		n = len(entries)

		asptime = np.float64(np.array(entries)[:,2])/tscale
		aspra   = np.float32(np.array(entries)[:,3])
		aspdec  = np.float32(np.array(entries)[:,4])
		asptwist= np.float32(np.array(entries)[:,5])
		aspflags= np.float32(np.array(entries)[:,6])
		asptwist= np.float32(np.array(entries)[:,9])
		aspra0  = np.zeros(n)+skypos[0]
		aspdec0 = np.zeros(n)+skypos[1]

		xi_vec, eta_vec = gnomonic.gnomfwd_simple(
							aspra,aspdec,aspra0,aspdec0,-asptwist,1.0/36000.,0.)

		col = 4.*( ((( xi_vec/36000.)/(detsize/2.)*(detsize/(fltsz[0]*pixsz)) + 1.)/2. * fltsz[0]) - (fltsz[0]/2.) )
		row = 4.*( (((eta_vec/36000.)/(detsize/2.)*(detsize/(fltsz[1]*pixsz)) + 1.)/2. * fltsz[1]) - (fltsz[1]/2.) )

		vectors = rotvec(np.array([col,row]),-asptwist)

		for i in range(n):
			if verbose>1:
				print_inline('Stamping '+str(asptime[i]))
				# FIXME: Clean this mess up a little just for clarity.
	        	img += scipy.ndimage.interpolation.shift(scipy.ndimage.interpolation.rotate(hrflat,-asptwist[i],reshape=False,order=0,prefilter=False),[vectors[1,i],vectors[0,i]],order=0,prefilter=False)[hrflat.shape[0]/2.-imsz[0]/2.:hrflat.shape[0]/2.+imsz[0]/2.,hrflat.shape[1]/2.-imsz[1]/2.:hrflat.shape[1]/2+imsz[1]/2.]*dbt.compute_exptime(band,[asptime[i],asptime[i]+1],verbose=verbose,retries=retries)*gxt.compute_flat_scale(asptime[i]+0.5,band,verbose=0)

	return img
def run_one_r_sec(pid, scan_name, step, resolution, duration, asp_cal, start, end, dis_map, return_dict):
      
    skypos = [0.0, 0.0]
    skyrange = [0.02, 0.02]
    if step == 1:
      skyrange = [0.04, 0.04]#[0.3, 0.3]
    elif step == 0.5:
      skyrange = [0.02, 0.02]
    
    data = np.loadtxt()


    for asp in asp_cal:
      time = asp[0]
      print time
      center = asp[1:3]
      aperture = 0.69
      stars = catalog_fits.get_catalog_tycho(center, aperture)
      xi, eta = gn.gnomfwd_simple (stars[:,0], stars[:,1], center[0], center[1], -asp[3], 1/36000., 0)
      photons = data[data[:,0]==int(time*1000)]
      co = 

        arg = np.argmin(np.absolute(asp_cal[:,0]-time_c[sec]))
        center = asp_cal[arg, 1:3]

        data_sec = dis_correct(np.array(data[sec], dtype='float64'), dis_map, asp_cal)

        coo1 = np.array(data_sec, dtype='float64')
        aperture = 0.69
        #coo1 = np.array(data[sec], dtype='float64')[:,-3:-1]

        coo1, mask = angle_filter(coo1, center, 0.6)
        time_sec = np.array(data[sec], dtype='float64')[mask,0]/1000.
        weights = gaussian(time_sec-time_c[sec], 0, np.std(time_sec-time_c[sec]))

        coo2, mask = angle_filter(coo2, center, 0.6)

        #xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], center[0], center[1], -rot, 1/36000., 0.0)

        max_now = -1000
        cent_now = []
        for angle in angle_list:
          centroid, max_value, flux = get_corr_map(coo2, coo1, skypos, skyrange, sec, 0.0002, initial_sec, '1', weights)
          if max_value>max_now:
            max_now = max_value
            cent_now = np.append(centroid, angle) #centroid.append(angle)

        centroids.append(cent_now)
      print centroids
      np.save('../data/%s/cata/time_rot%d.npy'%(scan_name, initial_sec), center_time)
      np.save('../data/%s/cata/centroids_rot%d.npy'%(scan_name, initial_sec), centroids)
def exp_dead_new(file_num, name_file, imsz, wcs, hrflat, asp_solution, dead,
                 cut, step, return_dict):
    count = np.zeros(imsz)
    rotate = scipy.ndimage.interpolation.rotate

    x_lim = imsz[0]
    y_lim = imsz[1]

    length = hrflat.shape[0]
    half_len = length / 2.
    print half_len
    coo = asp_solution[:, 1:3]
    foc_list = wcs.sip_pix2foc(wcs.wcs_world2pix(coo, 0), 0)
    print asp_solution.shape[0]
    ox = np.repeat(np.arange(length), length)
    oy = np.tile(np.arange(length), length)
    ocx = length / 2
    ocy = length / 2
    for i in range(asp_solution.shape[0]):
        foc = foc_list[i, :]  #wcs.sip_pix2foc(wcs.wcs_world2pix(coo,1),1)
        x = ox + (foc[1] - ocx)
        y = oy + (foc[0] - ocy)
        fmask = (x >= 0) & (x < imsz[0]) & (y >= 0) & (y < imsz[1])
        x = x[fmask]
        y = y[fmask]
        gl, gb = wcs.all_pix2world(y, x, 0)
        c = SkyCoord(gl * u.degree, gb * u.degree, frame='galactic')
        rd = c.transform_to(FK5)
        xi, eta = gn.gnomfwd_simple(rd.ra.deg, rd.dec.deg, asp_solution[i, 1],
                                    asp_solution[i, 2], -asp_solution[i, 3],
                                    1 / 36000., 0.)

        px = ((xi / 36000.) / (1.25 / 2.) *
              (1.25 / (800 * 0.001666)) + 1.) / 2. * length
        py = ((eta / 36000.) / (1.25 / 2.) *
              (1.25 / (800 * 0.001666)) + 1.) / 2. * length
        pmask = (px >= 0) & (px < length) & (py >= 0) & (py < length)

        count[x[pmask].astype(int),y[pmask].astype(int)] = \
            hrflat[px[pmask].astype(int),py[pmask].astype(int)]*step*(1-dead[i])*cut[i]
        if i % 2000 == 0:
            with open(
                    '/scratch/dw1519/galex/fits/scan_map/%s_gal_sec_exp_tmp%d.dat'
                    % (name_file, file_num), 'w') as f:
                f.write('%d' % i)
            print i
    print '%d done' % file_num
    return_dict[file_num] = count
def exp_dead_new(file_num, name_file, imsz, wcs, hrflat, asp_solution, dead, cut, step, return_dict):
    count = np.zeros(imsz)
    rotate = scipy.ndimage.interpolation.rotate

    x_lim = imsz[0]
    y_lim = imsz[1]

    length = hrflat.shape[0]
    half_len = length/2.
    print half_len
    coo = asp_solution[:,1:3]
    foc_list = wcs.sip_pix2foc(wcs.wcs_world2pix(coo,0),0)
    print asp_solution.shape[0]
    ox = np.repeat(np.arange(length),length)
    oy = np.tile(np.arange(length),length)
    ocx = length/2
    ocy = length/2
    for i in range(asp_solution.shape[0]):
        foc = foc_list[i,:]#wcs.sip_pix2foc(wcs.wcs_world2pix(coo,1),1)
        x = ox+(foc[1]-ocx)
        y = oy+(foc[0]-ocy)
        fmask = (x>=0) & (x<imsz[0]) & (y>=0) & (y<imsz[1])
        x = x[fmask]
        y = y[fmask]
        gl,gb = wcs.all_pix2world(y,x,0)
        c = SkyCoord(gl*u.degree, gb*u.degree, frame='galactic')
        rd = c.transform_to(FK5)
        xi, eta = gn.gnomfwd_simple(rd.ra.deg, rd.dec.deg, 
                                        asp_solution[i,1], asp_solution[i,2], -asp_solution[i,3],1/36000.,0.)

        px = ((xi/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*length
        py = ((eta/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*length
        pmask = (px>=0) & (px<length) & (py>=0) & (py<length)

        count[x[pmask].astype(int),y[pmask].astype(int)] = \
            hrflat[px[pmask].astype(int),py[pmask].astype(int)]*step*(1-dead[i])*cut[i]
        if i%2000==0:
            with open('/scratch/dw1519/galex/fits/scan_map/%s_gal_sec_exp_tmp%d.dat'%(name_file, file_num),'w') as f:
                f.write('%d'%i)
            print i
    print '%d done'%file_num
    return_dict[file_num] = count
示例#6
0
def run_one_r_sec(pid, scan_name, step, start, end, return_dict):

    pixsz = 0.000416666666666667
    skypos_count = [5.,-9.5]
    skyrange_count = [2., 3.]
    tranges_count = [[0,0]]
    imsz_count = imsz = imagetools.deg2pix_g(skypos_count, skyrange_count, pixsz)
    wcs_count = imagetools.define_wcs_g(skypos_count,skyrange_count,width=False,height=False,verbose=0,pixsz=pixsz)
    count = np.zeros(imsz_count)

    num_co = int(1/step)

    hdulist = pyfits.open('../AIS_GAL_SCAN/asprta/%s-asprta.fits'%scan_name)
    co_data = hdulist[1].data
    length = co_data.shape[0]

    cal_initial = int((co_data[1][0]-0.5)*1000)
    offsets = np.load('../data/%s/cata/offsets_inter_half_sec.npy'%scan_name)

    angle_list = [-0.035, -0.03, -0.025, -0.02, -0.015, -0.01, -0.005, 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035]

    print length
    for initial_sec in range(start, end):
      print 'time:%d'%initial_sec
      file_path = '../data/%s/cata/centroids_sec%d.npy'%(scan_name, initial_sec)
      '''
      if os.path.exists(file_path):
        print 'skip:%d'%initial_sec
        continue
      '''
      intitial_asp = co_data[initial_sec]
      rot = intitial_asp[3]
      center = np.array([intitial_asp[1], intitial_asp[2]])
      #use the first order calibrated asp instead of the original one
      center = cal_asp_r(offsets, cal_initial, intitial_asp[0]*1000, intitial_asp[1:3], 200) 

      #print(intitial_asp)

      skypos = [0.0, 0.0]
      skyrange = [0.02, 0.02]

      wcs = imagetools.define_wcs(skypos,skyrange,width=False,height=False,verbose=0,pixsz=0.0001)

      initial_time = intitial_asp[0]-0.5

      tranges = []

      for sec in range(num_co):
        tranges.append([initial_time+step*sec, initial_time+step*(sec+1)])
      print tranges

      data = get_data_cal(tranges, scan_name, cal_initial, offsets)
      print len(data)

      output = "../data/%s/cata/%s.csv"%(scan_name, scan_name)
      dir = os.path.dirname(output)
      if not os.path.exists(dir):
          os.makedirs(dir)
      centroids = []
      for sec in range(num_co):
        if len(data[sec]) ==0:
          centroid = np.array([0.0, 0.0])
          centroids.append(centroid)
          print centroid
          continue
        coo1 = np.array(data[sec], dtype='float64')[:,-3:-1]
        coo2 = catalog_fits.get_catalog(center, 0.69)

        coo1 = angle_filter(coo1, center, 1.)
        coo2 = angle_filter(coo2, center, 1.)


        xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], center[0], center[1], -rot, 1/36000., 0.0)

        max_now = -1000
        cent_now = []
        for angle in angle_list:
          coo1[:,0], coo1[:,1] = gn.gnomrev_simple(xi,eta,center[0],center[1],-(rot+angle),1/36000.,0.)
          centroid, max_value = get_corr_map(coo2, coo1, skypos, skyrange, sec, 0.02, 0.004)
          if max_value>max_now:
            max_now = max_value
            cent_now = np.append(centroid, angle) #centroid.append(angle)
        

        coo1[:,0], coo1[:,1] = gn.gnomrev_simple(xi,eta,center[0]-cent_now[0],center[1]-cent_now[1],-(rot+cent_now[2]),1/36000.,0.)
        
        sky_data = SkyCoord(coo1, unit='deg', frame=FK5, equinox='J2000.0')
        gal = sky_data.transform_to(Galactic)
        data_count = np.concatenate((np.array([gal.l.deg]).T, np.array([gal.b.deg]).T), axis=1) 
        H = hist_g(data_count, wcs_count, imsz_count)
        count += H
        sky_data=gal=data_count=H = None
        gc.collect()

        #xi2, eta2 = gn.gnomfwd_simple(coo2[:,0], coo2[:,1], center[0], center[1], -rot, 1/36000., 0.0)

        #r, phi = cart2pol(xi, eta)
        #r2, phi2 = cart2pol(xi2, eta2)

        #coo1 = np.array([r,phi]).T
        #coo2 = np.array([r2,phi2]).T

        #get_corr_map(coo2, coo1, skypos, skyrange, sec, 0.05, 0.0015)  

        centroids.append(cent_now)
        print cent_now
      print centroids
      #np.save('../data/%s/cata/centroids_rot%d.npy'%(scan_name, initial_sec), centroids)
    hdu = pyfits.PrimaryHDU(count)
    hdu = imagetools.fits_header('NUV', skypos_count, tranges_count, skyrange_count, hdu=hdu, wcs=wcs_count)
    hdulist = pyfits.HDUList([hdu])
    hdulist.writeto('../fits/count_map_%s_gal_sec_rot_count.fits'%(scan_name), clobber=False)
示例#7
0
        photon_list = photon_list[qmask]

        star_list = np.load('/scratch/dw1519/galex/data/star_photon/back/' +
                            scan + '_bstar.npy')
        print star_list.shape
        stars, ct = np.unique(photon_list[:, 0], return_counts=True)
        print stars.shape
        star_mask = (ct > 10)
        print np.sum(star_mask)
        stars = stars[star_mask]
        for star in stars:
            star_mask = (photon_list[:, 0] == star)
            p = photon_list[star_mask]
            ix = np.digitize(p[:, 1] / 1000., asp[:, 0]) - 1
            xi, eta = gn.gnomfwd_simple(c_radec[star].ra.deg,
                                        c_radec[star].dec.deg, asp[ix, 1],
                                        asp[ix,
                                            2], -asp[ix, 3], 1 / 36000., 0.)
            pos = np.array([xi, eta]).T
            pos = ((pos / 36000.) / (1.25 / 2.) *
                   (1.25 / (800 * 0.001666)) + 1.) / 2. * size

            Hc, xedge, yedge = np.histogram2d(pos[:, 0],
                                              pos[:, 1],
                                              bins=[size, size],
                                              range=([[0, size], [0, size]]))

            xi, eta = gn.gnomfwd_simple(c_radec[star].ra.deg,
                                        c_radec[star].dec.deg, asp[:, 1],
                                        asp[:, 2], -asp[:, 3], 1 / 36000., 0.)
            pos = np.array([xi, eta]).T
            pos = ((pos / 36000.) / (1.25 / 2.) *
def main_res():

	name = 'AIS_GAL_SCAN_00032_0001'

	asp = np.load('../data/photon_list/AIS_GAL_SCAN_00032_0001_asp_cal.npy')
	asp_uni, uni_index=np.unique(asp[:,0], True)
	asp_uni = asp[uni_index]
	ix_tmp = (np.round(asp_uni[:,0]-asp_uni[0,0])+1).astype(int)
	dead_tmp = np.zeros(ix_tmp.shape[0])
	scst_tmp = pyfits.open('../AIS_GAL_SCAN/scst/%s-scst.fits'%name)[1].data
	limit = scst_tmp['t_dead_nuv'].shape[0]-1
	ix_tmp[ix_tmp>limit] = limit
	dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

	cata = spi.load_obj('../data/%s_starset_extra_full'%name)
	cata_a = np.array(list(cata))
	cata_len = len(cata)
	cata_list = np.insert(cata_a, 0, np.arange(cata_len), axis=1)
	star_list = load_obj("../data/%s/star/extra/list_new/star_detector"%name)
	star_list = sorted(star_list, key=getKey)
	#print star_list
	plot_list = []
	stars = []
	istar = star_list[0]
	stars.append(istar[0])
	for i in range(1,len(star_list)):
		if star_list[i][2] - istar[2]<=100:
			stars.append(star_list[i][0])
		else:
			plot_list.append(stars)
			istar = star_list[i]
			stars = []
			stars.append(istar[0])

	group_num = 0
	flux_stat = []
	for plot in plot_list:
		#f, axes = plt.subplots(len(plot), 1, squeeze=False)
		print('group_num:%d'%group_num)
		plot_num = 0
		xlim = [0,60] 
		if len(plot) == 1:
			group_num += 1
			continue
		flux_list = []
		for i in plot:
	#for i in range(397):
			star_count = []
			time_list = []
			bkg_time_list = []
			bkg_count = []
			star_num = '%d'%i
			csv_file = "../data/%s/star/extra/list_new/star_%s-0.csv"%(name, star_num)
			bkg_csv_file = "../data/%s/star/extra/bkg/star_bkg_%s-0.csv"%(name, star_num)
			star_co = cata_a[i, 0:2]

			star_data = np.genfromtxt(csv_file, delimiter=',')
			bkg_data = np.genfromtxt(bkg_csv_file, delimiter=',')

			star_count, edges = np.histogram(star_data[:,0]-star_data[0,0], bins=np.arange(62)*1000)

			bkg_count, edges = np.histogram(bkg_data[:,0]-star_data[0,0], bins=np.arange(62)*1000)

			index_0 = (star_data[0,0]-asp_uni[0,0]*1000)/5
			index_1 = (star_data[-1,0]-asp_uni[0,0]*1000)/5

			#print i, cata_list[i, 0]
			#print star_co
			#print np.median(star_data[:,-3:-1], axis=0)

			if index_1-index_0>12400:
				continue

			star_track = asp_uni[index_0:index_1+1,:]
			dead_t = dead_tmp[index_0:index_1+1]
			ra = np.ones(star_track.shape[0])*star_co[0]
			dec = np.ones(star_track.shape[0])*star_co[1]
			xi, eta = gn.gnomfwd_simple(ra, dec, star_track[:,1], star_track[:,2], -star_track[:,3], 1/36000., 0.0)
			res_list = res_star.get_res_new(xi, eta, '../fits/flat/NUV_flat.fits')
			if res_list == None:
				continue
			res_list_d = res_list*(1-dead_t)

			res_flux = running_sum(res_list_d, 200, 61)
			res_len = cut_tail(res_flux)

			star_flux = np.array(star_count) - np.array(bkg_count)*64./40.
			star_flux[star_flux<0] = 0
			star_len = cut_tail(star_flux)

			delta = star_len-res_len
			if delta>0 and delta<3:
				star_flux = star_flux[:star_len]
				res_flux = res_flux[:star_len]
			elif delta >= 3 or delta<=-3:
				continue
			else:
				star_flux = star_flux[:res_len]
				res_flux = res_flux[:res_len]

			if np.mean(star_flux)<5:
				continue

			res_flux = res_flux/np.mean(res_flux)
			star_flux = star_flux/np.mean(star_flux)
			time_array = np.arange(res_flux.shape[0])

			var, likeli = likelihood(star_flux, res_flux)

			mag = cata_list[i, 5]
			flux_stat.append((mag, likeli, var, star_flux, res_flux))
			print '%.3f  %.3f  %.3f'%(mag, var, likeli)
			'''
			plt.plot(time_array, star_flux)
			plt.xlabel('t/s')
			plt.ylabel('Number of Photons')
			plt.savefig('../plots/%s/star/star_flux/%s-0.png'%(name, star_num), dpi=190)
			plt.clf()
			'''
			flux_list.append((time_array, star_flux, i, cata_list[i, 5], res_flux))
		if len(flux_list)>1:
			flux_list = sorted(flux_list, key=getMag)
			f, axes = plt.subplots(len(flux_list), 1, squeeze=False)
			for plot_num in range(len(flux_list)):
				star_flux = flux_list[plot_num][1]
				time_array = flux_list[plot_num][0]
				res_flux = flux_list[plot_num][-1]
				axes[plot_num,0].plot(time_array, star_flux, '-o')
				axes[plot_num,0].plot(time_array, res_flux, '-o')
				axes[plot_num,0].text(0.95, 0.8, 'NUV: %.3f'%flux_list[plot_num][3], verticalalignment='bottom', horizontalalignment='right', transform=axes[plot_num,0].transAxes, color='green', fontsize=10)
				#axes[plot_num,0].set_ylabel('Num of Photons')
				ylim = axes[plot_num,0].get_ylim()
				if plot_num == 0:
					xlim = axes[plot_num,0].get_xlim()
				axes[plot_num,0].set_xlim([0, 61])
				axes[plot_num,0].set_ylim([ylim[0]+np.absolute(ylim[1]-ylim[0])*0.01, ylim[1]])
				if plot_num<len(flux_list)-1:
					plt.setp( axes[plot_num,0].get_xticklabels(), visible=False)
				else:
					axes[plot_num,0].set_xlabel('time/s')
				plt.setp( axes[plot_num,0].get_yticklabels(), visible=False)
			plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
			            wspace=0, hspace=0)
			plt.legend()
			plt.savefig('../plots/%s/star/extra/cons_res_flat/cons%d_track.png'%(name, group_num),dpi=190)  
			plt.clf()
		group_num += 1
		save_obj(flux_stat, '../plots/%s/star/extra/cons_res_flat/flux_stat'%(name))
def res_star_new(pid, scan_name, start, end, return_dict):
    cata = spi.load_obj('../data/%s_starset_new' % scan_name)
    cata_a = np.array(list(cata))
    cata_len = len(cata)
    cata_list = np.insert(cata_a, 0, np.arange(cata_len), axis=1)

    asp = np.load('../data/photon_list/AIS_GAL_SCAN_00014_0001_asp_cal.npy')
    asp_uni, uni_index = np.unique(asp[:, 0], True)
    asp_uni = asp[uni_index]
    ix_tmp = (np.round(asp_uni[:, 0] - asp_uni[0, 0]) + 1).astype(int)
    dead_tmp = np.zeros(ix_tmp.shape[0])
    scst_tmp = pyfits.open('../AIS_GAL_SCAN/scst/%s-scst.fits' %
                           scan_name)[1].data
    limit = scst_tmp['t_dead_nuv'].shape[0] - 1
    ix_tmp[ix_tmp > limit] = limit
    dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

    for star_num in range(start, end + 1):
        star_co = cata_a[star_num, 0:2]

        order = 1
        star = 'star_%d-%d' % (star_num, order)

        if not os.path.exists('../data/%s/star/list/%s.csv' %
                              (scan_name, star)):
            print 'skip:%s' % star
            continue

        csv_file = '../data/%s/star/list/%s.csv' % (scan_name, star)
        count = []
        time_list = []
        with open(csv_file, 'rb') as file:
            reader = csv.reader(file)
            first = float(reader.next()[0])
            final = 0
            last = 0
            reader = csv.reader(file)
            for row in reader:
                time = float(row[0])  #time = int(float(row[0])/1000.)
                if time - last > 200:
                    count.append(1)
                    last = time
                    time_list.append(last)
                else:
                    count[-1] += 1
                final = time

        time_list = np.array(time_list) / 1000.
        index_0 = (first - asp_uni[0, 0] * 1000) / 5
        index_1 = (final - asp_uni[0, 0] * 1000) / 5

        star_track = asp_uni[index_0:index_1 + 1, :]
        dead_t = dead_tmp[index_0:index_1 + 1]
        ra = np.ones(star_track.shape[0]) * star_co[0]
        dec = np.ones(star_track.shape[0]) * star_co[1]

        xi, eta = gn.gnomfwd_simple(ra, dec, star_track[:, 1], star_track[:,
                                                                          2],
                                    -star_track[:, 3], 1 / 36000., 0.0)

        output = "../plots/%s/star/res/%s.csv" % (scan_name, scan_name)
        dir = os.path.dirname(output)
        if not os.path.exists(dir):
            os.makedirs(dir)
        print dead_t
        res_list = get_res_new(xi, eta)
        res_list_d = res_list * (1 - dead_t)
        '''
		plt.plot(star_track[:,0], res_list_d)
		plt.xlabel('t/s')
		plt.ylabel('response')
		plt.savefig('../plots/%s/star/res/res%d-%d_track_d.png'%(scan_name, star_num, order), dpi=190)
		plt.clf()

		plt.plot(star_track[:,0], res_list)
		plt.xlabel('t/s')
		plt.ylabel('response')
		plt.savefig('../plots/%s/star/res/res%d-%d_track.png'%(scan_name, star_num, order), dpi=190)
		plt.clf()
		'''

        f, axes = plt.subplots(2, 1)
        axes[0].plot(time_list, count)
        axes[0].set_ylabel('Num of Photons')
        ylim = axes[0].get_ylim()
        axes[0].set_ylim(ylim + np.absolute(ylim) * 0.01)
        plt.setp(axes[0].get_xticklabels(), visible=False)
        #plt.setp( axes[0].get_yticklabels(), visible=False)

        axes[1].plot(star_track[:, 0], res_list_d)
        axes[1].set_ylabel('Response')
        axes[1].set_xlabel('time/s')

        plt.subplots_adjust(left=None,
                            bottom=None,
                            right=None,
                            top=None,
                            wspace=0,
                            hspace=0)
        plt.savefig('../plots/%s/star/res/2p/res%d-%d_track.png' %
                    (scan_name, star_num, order),
                    dpi=190)
        plt.clf()
示例#10
0
def run_model_chunk(pid, scan_name, chunk, cata_target, cata_lists, size_list,
                    cata_target_len, dead_tmp, asp_uni, return_dict):
    count_list = []
    exp_list = []
    chunk_num = 0
    for trange in chunk:
        output = '../fits/%s/extra/new_black/exposure_chunk%d.fits' % (
            scan_name, chunk_num)
        if os.path.exists(output):
            print 'exists %d' % (chunk_num)
            chunk_num += 1
            continue
        t_mask = np.zeros(asp_uni.shape[0])
        begin = np.where((asp_uni[:, 0] * 1000).astype(int) -
                         trange[0] == 0)[0]
        end = np.where((asp_uni[:, 0] * 1000).astype(int) - trange[1] == 0)[0]
        t_mask[begin:end + 1] = 1

        t_asp = asp_uni[t_mask > 0]
        t_dead = dead_tmp[t_mask > 0]

        t_length = end + 1 - begin
        print('time length:%d, %f, %f' % (t_length, trange[0], trange[1]))
        count = np.zeros([t_length, 800, 800])
        exp_count = np.zeros([t_length, 800, 800])
        for star_num in range(cata_target_len):
            #print star_num
            star_co = cata_target[star_num, 0:2]
            star_flux = cata_target[star_num, 3]
            #print star_flux

            ra = np.ones(t_asp.shape[0]) * star_co[0]
            dec = np.ones(t_asp.shape[0]) * star_co[1]

            xi, eta = gn.gnomfwd_simple(ra, dec, t_asp[:, 1], t_asp[:, 2],
                                        -t_asp[:, 3], 1 / 36000., 0.0)

            coo = np.array([xi, eta]).T
            coo = ((coo / 36000.) / (1.25 / 2.) *
                   (1.25 / (800 * 0.001666)) + 1.) / 2. * 800

            for i in [-1, 0, 1]:
                for j in [-1, 0, 1]:
                    coo_tmp = np.zeros([t_length, 3])
                    coo_tmp[:, 0] = np.arange(t_length)
                    coo_tmp[:, 1] = coo[:, 0] + i
                    coo_tmp[:, 2] = coo[:, 1] + j

                    mask_0 = np.logical_and(coo_tmp[:, 1] >= 0,
                                            coo_tmp[:, 1] < 800)
                    mask_1 = np.logical_and(coo_tmp[:, 2] >= 0,
                                            coo_tmp[:, 2] < 800)
                    mask = np.logical_and(mask_0, mask_1)

                    total = 1 + 4 * 0.0625 + 4 * 0.00390625
                    coo_tmp = coo_tmp[mask]
                    t_dead_tmp = t_dead[mask]
                    coo_tmp = np.array(coo_tmp, dtype=int)
                    factor = 1.
                    if (i, j) in set([(-1, 0), (1, 0), (0, -1), (0, 1)]):
                        factor = 0.0625
                    elif (i, j) in set([(-1, -1), (1, -1), (1, 1), (-1, 1)]):
                        factor = 0.00390625
                    else:
                        factor = 1.
                    #count[coo_tmp[:,0], coo_tmp[:,1]] += 0.005*factor*star_flux/total
                    count[coo_tmp[:, 0], coo_tmp[:, 1],
                          coo_tmp[:, 2]] += factor * star_flux / total

        for mask_num in range(3):
            mask_cata = cata_lists[mask_num]
            size = size_list[mask_num]
            radius = size[-1] + 0.5
            for star_num in range(mask_cata.shape[0]):
                #print star_num
                star_co = mask_cata[star_num, 0:2]
                #print star_flux

                ra = np.ones(t_asp.shape[0]) * star_co[0]
                dec = np.ones(t_asp.shape[0]) * star_co[1]

                xi, eta = gn.gnomfwd_simple(ra, dec, t_asp[:, 1], t_asp[:, 2],
                                            -t_asp[:, 3], 1 / 36000., 0.0)

                coo = np.array([xi, eta]).T
                coo = ((coo / 36000.) / (1.25 / 2.) *
                       (1.25 / (800 * 0.001666)) + 1.) / 2. * 800

                for i in size:
                    for j in size:
                        if i**2 + j**2 > radius**2:
                            continue
                        coo_tmp = np.zeros([t_length, 3])
                        coo_tmp[:, 0] = np.arange(t_length)
                        coo_tmp[:, 1] = coo[:, 0] + i
                        coo_tmp[:, 2] = coo[:, 1] + j

                        mask_0 = np.logical_and(coo_tmp[:, 1] >= 0,
                                                coo_tmp[:, 1] < 800)
                        mask_1 = np.logical_and(coo_tmp[:, 2] >= 0,
                                                coo_tmp[:, 2] < 800)
                        mask = np.logical_and(mask_0, mask_1)
                        coo_tmp = coo_tmp[mask]

                        coo_tmp = np.array(coo_tmp, dtype=int)

                        exp_count[coo_tmp[:, 0], coo_tmp[:, 1],
                                  coo_tmp[:, 2]] -= 1
        for t_step in range(t_length):
            exp_count[t_step][
                exp_count[t_step] >= 0] = 0.005 * (1 - t_dead[t_step])
        exp_count[exp_count < 0] = 0.
        count *= exp_count

        exp_count_sum = np.sum(exp_count, axis=0)
        count_sum = np.sum(count, axis=0)
        exp_list.append(exp_count_sum)
        count_list.append(count_sum)
        exp_count = count = None
        gc.collect()
        chunk_num += 1
    return_dict[pid] = (count_list, exp_list)
def main_res():

    name = 'AIS_GAL_SCAN_00032_0001'

    asp = np.load('../data/photon_list/AIS_GAL_SCAN_00032_0001_asp_cal.npy')
    asp_uni, uni_index = np.unique(asp[:, 0], True)
    asp_uni = asp[uni_index]
    ix_tmp = (np.round(asp_uni[:, 0] - asp_uni[0, 0]) + 1).astype(int)
    dead_tmp = np.zeros(ix_tmp.shape[0])
    scst_tmp = pyfits.open('../AIS_GAL_SCAN/scst/%s-scst.fits' % name)[1].data
    limit = scst_tmp['t_dead_nuv'].shape[0] - 1
    ix_tmp[ix_tmp > limit] = limit
    dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

    cata = spi.load_obj('../data/%s_starset_extra_full' % name)
    cata_a = np.array(list(cata))
    cata_len = len(cata)
    cata_list = np.insert(cata_a, 0, np.arange(cata_len), axis=1)
    star_list = load_obj("../data/%s/star/extra/list_new/star_detector" % name)
    star_list = sorted(star_list, key=getKey)
    #print star_list
    plot_list = []
    stars = []
    istar = star_list[0]
    stars.append(istar[0])
    for i in range(1, len(star_list)):
        if star_list[i][2] - istar[2] <= 100:
            stars.append(star_list[i][0])
        else:
            plot_list.append(stars)
            istar = star_list[i]
            stars = []
            stars.append(istar[0])

    group_num = 0
    flux_stat = []
    for plot in plot_list:
        #f, axes = plt.subplots(len(plot), 1, squeeze=False)
        print('group_num:%d' % group_num)
        plot_num = 0
        xlim = [0, 60]
        if len(plot) == 1:
            group_num += 1
            continue
        flux_list = []
        for i in plot:
            #for i in range(397):
            star_count = []
            time_list = []
            bkg_time_list = []
            bkg_count = []
            star_num = '%d' % i
            csv_file = "../data/%s/star/extra/list_new/star_%s-0.csv" % (
                name, star_num)
            bkg_csv_file = "../data/%s/star/extra/bkg/star_bkg_%s-0.csv" % (
                name, star_num)
            star_co = cata_a[i, 0:2]

            star_data = np.genfromtxt(csv_file, delimiter=',')
            bkg_data = np.genfromtxt(bkg_csv_file, delimiter=',')

            star_count, edges = np.histogram(star_data[:, 0] - star_data[0, 0],
                                             bins=np.arange(62) * 1000)

            bkg_count, edges = np.histogram(bkg_data[:, 0] - star_data[0, 0],
                                            bins=np.arange(62) * 1000)

            index_0 = (star_data[0, 0] - asp_uni[0, 0] * 1000) / 5
            index_1 = (star_data[-1, 0] - asp_uni[0, 0] * 1000) / 5

            #print i, cata_list[i, 0]
            #print star_co
            #print np.median(star_data[:,-3:-1], axis=0)

            if index_1 - index_0 > 12400:
                continue

            star_track = asp_uni[index_0:index_1 + 1, :]
            dead_t = dead_tmp[index_0:index_1 + 1]
            ra = np.ones(star_track.shape[0]) * star_co[0]
            dec = np.ones(star_track.shape[0]) * star_co[1]
            xi, eta = gn.gnomfwd_simple(ra, dec, star_track[:, 1],
                                        star_track[:, 2], -star_track[:, 3],
                                        1 / 36000., 0.0)
            res_list = res_star.get_res_new(xi, eta,
                                            '../fits/flat/NUV_flat.fits')
            if res_list == None:
                continue
            res_list_d = res_list * (1 - dead_t)

            res_flux = running_sum(res_list_d, 200, 61)
            res_len = cut_tail(res_flux)

            star_flux = np.array(star_count) - np.array(bkg_count) * 64. / 40.
            star_flux[star_flux < 0] = 0
            star_len = cut_tail(star_flux)

            delta = star_len - res_len
            if delta > 0 and delta < 3:
                star_flux = star_flux[:star_len]
                res_flux = res_flux[:star_len]
            elif delta >= 3 or delta <= -3:
                continue
            else:
                star_flux = star_flux[:res_len]
                res_flux = res_flux[:res_len]

            if np.mean(star_flux) < 5:
                continue

            res_flux = res_flux / np.mean(res_flux)
            star_flux = star_flux / np.mean(star_flux)
            time_array = np.arange(res_flux.shape[0])

            var, likeli = likelihood(star_flux, res_flux)

            mag = cata_list[i, 5]
            flux_stat.append((mag, likeli, var, star_flux, res_flux))
            print '%.3f  %.3f  %.3f' % (mag, var, likeli)
            '''
			plt.plot(time_array, star_flux)
			plt.xlabel('t/s')
			plt.ylabel('Number of Photons')
			plt.savefig('../plots/%s/star/star_flux/%s-0.png'%(name, star_num), dpi=190)
			plt.clf()
			'''
            flux_list.append(
                (time_array, star_flux, i, cata_list[i, 5], res_flux))
        if len(flux_list) > 1:
            flux_list = sorted(flux_list, key=getMag)
            f, axes = plt.subplots(len(flux_list), 1, squeeze=False)
            for plot_num in range(len(flux_list)):
                star_flux = flux_list[plot_num][1]
                time_array = flux_list[plot_num][0]
                res_flux = flux_list[plot_num][-1]
                axes[plot_num, 0].plot(time_array, star_flux, '-o')
                axes[plot_num, 0].plot(time_array, res_flux, '-o')
                axes[plot_num, 0].text(0.95,
                                       0.8,
                                       'NUV: %.3f' % flux_list[plot_num][3],
                                       verticalalignment='bottom',
                                       horizontalalignment='right',
                                       transform=axes[plot_num, 0].transAxes,
                                       color='green',
                                       fontsize=10)
                #axes[plot_num,0].set_ylabel('Num of Photons')
                ylim = axes[plot_num, 0].get_ylim()
                if plot_num == 0:
                    xlim = axes[plot_num, 0].get_xlim()
                axes[plot_num, 0].set_xlim([0, 61])
                axes[plot_num, 0].set_ylim(
                    [ylim[0] + np.absolute(ylim[1] - ylim[0]) * 0.01, ylim[1]])
                if plot_num < len(flux_list) - 1:
                    plt.setp(axes[plot_num, 0].get_xticklabels(),
                             visible=False)
                else:
                    axes[plot_num, 0].set_xlabel('time/s')
                plt.setp(axes[plot_num, 0].get_yticklabels(), visible=False)
            plt.subplots_adjust(left=None,
                                bottom=None,
                                right=None,
                                top=None,
                                wspace=0,
                                hspace=0)
            plt.legend()
            plt.savefig(
                '../plots/%s/star/extra/cons_res_flat/cons%d_track.png' %
                (name, group_num),
                dpi=190)
            plt.clf()
        group_num += 1
        save_obj(flux_stat,
                 '../plots/%s/star/extra/cons_res_flat/flux_stat' % (name))
示例#12
0
        limit = scst_tmp['t_dead_nuv'].shape[0] - 1
        ix_tmp[ix_tmp > limit] = limit
        dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

        count = np.zeros([800, 800])
        #for star_num in xrange(1,10):
        for star_num in range(cata_len):
            print star_num
            star_co = cata_a[star_num, 0:2]
            star_flux = cata_a[star_num, 3]
            print star_flux

            ra = np.ones(asp_uni.shape[0]) * star_co[0]
            dec = np.ones(asp_uni.shape[0]) * star_co[1]

            xi, eta = gn.gnomfwd_simple(ra, dec, asp_uni[:, 1], asp_uni[:, 2],
                                        -asp_uni[:, 3], 1 / 36000., 0.0)

            coo = np.array([xi, eta]).T
            #print coo.shape
            #print coo
            coo = ((coo / 36000.) / (1.25 / 2.) *
                   (1.25 / (800 * 0.001666)) + 1.) / 2. * 800
            '''
			mask_0 = np.logical_and(coo[:,0]>=0, coo[:,0]<800)
			mask_1 = np.logical_and(coo[:,1]>=0, coo[:,1]<800)

			mask = np.logical_and(mask_0, mask_1)

			coo = coo[mask]
			dead_t = dead_tmp[mask]
def get_corr_map(coo1, coo2, skypos, skyrange, sec, pixsz, idx, suffix, info_list, d3, outdir):
  imsz = imagetools.deg2pix(skypos, skyrange, pixsz).astype(int)
  count = np.zeros(imsz)
  #print(imsz)
  bound = skyrange[0]
  co_rel = np.array([[0,0]])
  infos = np.array([[0,0,0]])
  rot = np.array([0])
  len1 = coo1.shape[0]
  len2 = coo2.shape[0]
  print(len1,len2)
  wcs = imagetools.define_wcs(skypos,skyrange,width=False,height=False,verbose=0,pixsz=pixsz)
  #with open('../data/try2_%d.csv'%sec, 'wb') as csvfile:
    #writer = csv.writer(csvfile)
  if len2>len1:
    for i in range(len1):
      #print(i)
      tmp_co = coo2-coo1[i,:]
      mask = (np.absolute(tmp_co[:,0])<=bound) & (np.absolute(tmp_co[:,1])<=bound)
      tmp_co = tmp_co[np.absolute(tmp_co[:,0])<=bound,:]
      tmp_co = tmp_co[np.absolute(tmp_co[:,1])<=bound,:]
      co_rel = np.concatenate((co_rel, tmp_co), axis = 0)
      infos = np.concatenate((infos,info_list[mask]), axis=0)
      rot = np.concatenate((rot, d3[mask]), axis=0)
  else:
    for i in range(len2):
      #print(i)
      tmp_co = coo2[i,:]-coo1
      tmp_co = tmp_co[np.absolute(tmp_co[:,0])<=bound,:]
      tmp_co = tmp_co[np.absolute(tmp_co[:,1])<=bound,:]
      co_rel = np.concatenate((co_rel, tmp_co), axis = 0)
      infos = np.concatenate((infos,np.repeat(info_list[i], tmp_co.shape[0])), axis=0)
      rot = np.concatenate((rot, np.repeat(d3[i], tmp_co.shape[0])), axis=0)

  foc = wcs.sip_pix2foc(wcs.wcs_world2pix(co_rel[1:],1),1)
  H,xedges,yedges=np.histogram2d(foc[:,1]-0.5, foc[:,0]-0.5,\
                             bins=imsz, range=([ [0,imsz[0]],[0,imsz[1]] ]))

  t = np.percentile(H, 90)
  t = 500
  print 'threshold:{0}'.format(t) 
  hp = H.copy()

  #plt.colorbar()
  
  #plt.plot(co_rel[:,0],co_rel[:,1], 'o', alpha=0.05)
  #plt.xlim(-0.005,0.005)
  #plt.ylim(-0.005,0.005)

  data = H.byteswap(True).newbyteorder()
  data = data.copy(order='C')
  data = data.byteswap(True).newbyteorder()
  c_data = c3.find_centroid(data, t)
  if c_data is not None:
    cy, cx, max_value, flux = c_data
    cy+=0.5
    cx+=0.5
    centroid = wcs.wcs_pix2world(wcs.sip_foc2pix([[cx, cy]],1),1)[0]
  else:
    centroid = [0.,0.]
    max_value = 0
    flux = 500
  if centroid[0]>1:
    centroid[0] = centroid[0]-360.
  #print 'max:{0}'.format(max_value)
  print hp.shape

  #plt.imshow(np.log2(hp+10**-10),interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal', extent=[0.02*3600, -0.02*3600, 0.02*3600, -0.02*3600], origin='upper', vmin=0)
  '''
  plt.imshow(hp+10**-10,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal', extent=[0.02*3600, -0.02*3600, 0.02*3600, -0.02*3600], origin='upper', norm=LogNorm(10**0,np.max(hp)))  
  plt.colorbar()
  plt.xlim(-0.01*3600, 0.01*3600)
  plt.ylim(-0.01*3600, 0.01*3600)
  plt.ylabel('gb')
  plt.xlabel('gl')
  plt.axhline(y=0, color='b', linestyle='dashed', linewidth=1)
  plt.axvline(x=0, color='b', linestyle='dashed', linewidth=1)
  plt.plot(centroid[0]*3600,centroid[1]*3600,'+r', markersize=8)
  #plt.show()
  rot = np.mean(d3)/180.*np.pi

  l = np.linspace(0, 8., 5)
  x_y = np.sin(-rot)*l
  x_x = np.cos(-rot)*l
  y_y = np.sin(-rot+np.pi/2.)*l
  y_x = np.cos(-rot+np.pi/2.)*l

  plt.plot(x_x, x_y, '--g')
  plt.plot(y_x, y_y, '--g')


  co_rel = co_rel*3600
  mask = (co_rel[1:,0]**2+co_rel[1:,1]**2) <= (2.5**2)
  num = np.sum(mask)
  plt.title('t={0}-{1}s, photons within d=5\" circle:{2}'.format(idx/2-50, idx/2, num))

  plt.savefig('{0}/{1}.pdf'.format(outdir,idx))
  plt.clf()
  np.save('{0}/{1}.npy'.format(outdir,idx), co_rel)
  '''
  #co_rel = co_rel*3600
  xi, eta = gn.gnomfwd_simple(co_rel[1:,0], co_rel[1:,1], 0, 0, -rot[1:], 1/36000., 0)
  #co_radec = np.array([xi,eta]).T
  path = os.path.dirname('{0}/radec/test'.format(outdir))
  if not os.path.exists(path):
    os.makedirs(path)
  np.save('{0}/{1}.npy'.format(outdir, idx), co_rel*3600)
  #np.save('{0}/radec/{1}.npy'.format(outdir, idx), co_radec)
  #np.save('{0}/info_{1}.npy'.format(outdir, idx), infos)
  '''
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,0], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('xa')
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/xa_{1}.png'.format(outdir, idx))
  plt.clf()
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,1], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('ya')
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/ya_{1}.png'.format(outdir, idx))
  plt.clf()
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,2], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('q')  
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/q_{1}.png'.format(outdir, idx), dpi=190)
  plt.clf()
  '''

  '''
  n, bins, patches = plt.hist(infos[1:,1], 30, normed=1, facecolor='green', alpha=0.5)
  plt.savefig('/home/dw1519/dw1519/galex/plots/co239_s/yahist_{0}.pdf'.format(idx), dpi=190)
  plt.clf()

  mask = (co_rel[:,0]<-25) & (co_rel[:,0]>-45) & (co_rel[:,1]>42) & (co_rel[:,1]<66)
  n, bins, patches = plt.hist(infos[mask,1], 30, normed=1, facecolor='green', alpha=0.5)
  plt.savefig('/home/dw1519/dw1519/galex/plots/co239_s/yahist_gh_{0}.pdf'.format(idx), dpi=190)
  plt.clf()
  '''

  return centroid, max_value, flux
示例#14
0
def correct(name):
    #name = sys.argv[1]
    print name
    scan = '{0:04d}'.format(int(re.split('_', name)[3])) #'3191'
    print scan
    #name = 'AIS_GAL_SCAN_0'+scan+'_0002'
    out = '/scratch/dw1519/galex/data/'+name
    date = '08-21-2017_1'
    cfile = '/scratch/dw1519/galex/fits/scan_map/catalog/'+date+'/starcat_'+scan+'mapweight_fec_fwhm.txt'
    asprta = '/scratch/dw1519/galex/AIS_GAL_SCAN/asprta/'+name+'-cal-sec-dis-cut-asprta.fits'
    scst = '/scratch/dw1519/galex/AIS_GAL_SCAN/scst/'+name+'-scst.fits'
    num = int(scan)
    if num>=5 and num<=185:
        dis_l = '/scratch/dw1519/galex/data/distortion/5-185-xa_low-centroids.npy'
        dis_h = '/scratch/dw1519/galex/data/distortion/5-185-xa_high-centroids.npy'
    elif num>=194 and num<=437:
        dis_l = '/scratch/dw1519/galex/data/distortion/194-437-xa_low-centroids.npy'
        dis_h = '/scratch/dw1519/galex/data/distortion/194-437-xa_high-centroids.npy'
    elif num>=446 and num<=887:
        dis_l = '/scratch/dw1519/galex/data/distortion/446-887-xa_low-centroids.npy'
        dis_h = '/scratch/dw1519/galex/data/distortion/446-887-xa_high-centroids.npy'
    #elif num>=896 and num<=1157:
    #    dis_l = '/scratch/dw1519/galex/data/distortion/896-1157-xa_low-centroids.npy'
    #    dis_h = '/scratch/dw1519/galex/data/distortion/896-1157-xa_high-centroids.npy'
    elif num>=1166 and num<=1373:
        dis_l = '/scratch/dw1519/galex/data/distortion/1166-1373-xa_low-centroids.npy'
        dis_h = '/scratch/dw1519/galex/data/distortion/1166-1373-xa_high-centroids.npy'
    else:
        dis_l = '/scratch/dw1519/galex/data/distortion/194-437-xa_low-centroids.npy'
        dis_h = '/scratch/dw1519/galex/data/distortion/194-437-xa_high-centroids.npy'
    print dis_l
    print dis_h
    data = np.load('/scratch/dw1519/galex/data/photons/'+name+'.npy')
    print('data:{0}'.format(data.shape))
    tycho2 = pyfits.open('/scratch/dw1519/galex/data/tycho2.fits')[1].data
    df = ld.load_catalog(cfile)
    c = SkyCoord(df['gl']*u.degree, df['gb']*u.degree, frame='galactic')
    catalog = SkyCoord(tycho2['Glon']*u.degree, tycho2['Glat']*u.degree, frame='galactic')
    idx, d2d, d3d = c.match_to_catalog_sky(catalog)
    mask=d2d<0.001*u.degree

    '''
    dtype = np.dtype([('tycho_num', int), ('Glon', '>f4'), ('Glat', '>f4'), ('RAJ2000', '>f4'), ('DEJ2000', '>f4'),
             ('flux', float), ('nuv', float), ('gl', float), ('gb', float)])
    matched_tycho = tycho2[idx[mask]]
    matched_df = df[mask]
    matched_catalog = np.core.records.fromarrays(np.array([idx[mask], matched_tycho['Glon'], matched_tycho['Glat'],
            matched_tycho['RAJ2000'], matched_tycho['DEJ2000'], np.array(matched_df['FLUX_AUTO']),
            np.array(matched_df['nuv']), np.array(matched_df['gl']),
            np.array(matched_df['gb'])]), dtype=dtype)
    '''

    resolution = 0.5
    hdulist = pyfits.open(asprta)
    co_data = hdulist[1].data
    n=resolution/0.005 #100
    T = co_data['T']
    ra = co_data['ra']
    dec = co_data['dec']
    roll = co_data['roll']
    t_new = np.arange((T.shape[0]-1)*n)*0.005+T[0]
    spl_ra = splrep(T, ra)
    spl_dec = splrep(T, dec)
    spl_roll = splrep(T, roll)
    ra_new = splev(t_new, spl_ra)
    dec_new = splev(t_new, spl_dec)
    roll_new = splev(t_new, spl_roll)

    asp = np.array([t_new, ra_new, dec_new, roll_new]).T
    #np.save('../data/photon_list/%s_asp_fix.npy'%name, asp_cal)
    hdulist.close()
    
    #asp = np.load('../data/photon_list/{0}{1}-correct_asp_new.npy'.format(name, suffix))
    scst_file = pyfits.open(scst)
    scst_data = scst_file[1].data
    scst_time = scst_data['pktime'].copy()
    hv = scst_data['hvnom_nuv'].copy()
    scst_file.close()

    dis_map = ld.load_dis(dis_l, dis_h)

    scst_ix = np.digitize(data[:,0]/1000., scst_time)
    ix_mask = scst_ix<scst_time.shape[0]
    scst_ix = scst_ix[ix_mask]
    data = data[ix_mask]
    data = data[hv[scst_ix]>0]
    
    dx_list = []
    dy_list = []
    ya_list = []
    q_list = []
    n = 50
    step = int(data.shape[0]/n)
    print step
    for i in range(n-1):
        print i
        data_tmp = ld.dis_correct(data[i*step:(i+1)*step], dis_map, asp, None, None)
        sky_data = SkyCoord(data_tmp[:,0:2], unit='deg', frame='fk5', equinox='J2000.0')
        print 'sky_data: {0}'.format(sky_data.shape)
        idxc, idxcatalog, d2d_p, d3d_p = sky_data.search_around_sky(catalog[idx[mask]], 0.0045*u.deg)
        print 'idxc: {0}'.format(idxc.shape)
        xi, eta = gn.gnomfwd_simple(tycho2['RAJ2000'][idx[mask][idxc]], tycho2['DEJ2000'][idx[mask][idxc]],
                 data_tmp[idxcatalog,-3], data_tmp[idxcatalog,-2], -data_tmp[idxcatalog,-1], 1/36000., 0)

        dx = (data_tmp[idxcatalog,6]-xi)/36000./800/0.001666*2400
        dy = (data_tmp[idxcatalog,7]-eta)/36000./800/0.001666*2400
        ya = data_tmp[idxcatalog,4]
        q = data_tmp[idxcatalog,5]

        dx_list.append(dx)
        dy_list.append(dy)
        ya_list.append(ya)
        q_list.append(q)
        data_tmp=sky_data=xi=eta=None
        gc.collect()
    
    print n-1
    data_tmp = ld.dis_correct(data[(n-1)*step:], dis_map, asp, None, None)
    sky_data = SkyCoord(data_tmp[:,0:2], unit='deg', frame='fk5', equinox='J2000.0')
    print 'sky_data: {0}'.format(sky_data.shape)
    idxc, idxcatalog, d2d_p, d3d_p = sky_data.search_around_sky(catalog[idx[mask]], 0.0045*u.deg)
    print 'idxc: {0}'.format(idxc.shape)
    xi, eta = gn.gnomfwd_simple(tycho2['RAJ2000'][idx[mask][idxc]], tycho2['DEJ2000'][idx[mask][idxc]],
             data_tmp[idxcatalog,-3], data_tmp[idxcatalog,-2], -data_tmp[idxcatalog,-1], 1/36000., 0)

    dx = (data_tmp[idxcatalog,6]-xi)/36000./800/0.001666*2400
    dy = (data_tmp[idxcatalog,7]-eta)/36000./800/0.001666*2400
    ya = data_tmp[idxcatalog,4]
    q = data_tmp[idxcatalog,5]

    dx_list.append(dx)
    dy_list.append(dy)
    ya_list.append(ya)
    q_list.append(q)
    data_tmp=sky_data=xi=eta=None
    gc.collect()

    dx = np.concatenate(dx_list, axis=0)
    dy = np.concatenate(dy_list, axis=0)
    ya = np.concatenate(ya_list, axis=0)
    q = np.concatenate(q_list, axis=0)

    data=scst_ix=ix_mask=None
    gc.collect()
    print dx.shape
    print 'max dy: {0}'.format(np.max(dy))
    print 'max dx: {0}'.format(np.max(dx))
    mask = (dy>=-8) & (dy<=8) & (q<24)
    imsz = [24, 64]
    H,xedges,yedges=np.histogram2d(q[mask], dy[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 0, 24], origin='lower', norm=LogNorm())

    dy_q = []
    for i in range(24):
        q_mask = (q[mask] == i)
        dy_c = np.median(dy[mask][q_mask])
        dy_q.append(dy_c)
    plt.plot(dy_q, np.arange(24), '.r')
    print('dy_q:')
    print dy_q

    plt.xlim(-8,8)
    plt.ylim(0,24)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta y$ [pixel]')
    plt.ylabel('q')
    plt.savefig(out+'/q-y_tot.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(24), dy_q, '.r')
    plt.savefig(out+'/q-y_c.pdf', dpi=190)
    plt.clf()

    mask = (dx>=-8) & (dx<=8) & (q<24)
    imsz = [24, 64]
    H,xedges,yedges=np.histogram2d(q[mask], dx[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 0, 24], origin='lower', norm=LogNorm())


    dx_q = []
    for i in range(24):
        q_mask = (q[mask] == i)
        dx_c = np.median(dx[mask][q_mask])
        dx_q.append(dx_c)
    print('dx_q:')
    print dx_q
    plt.plot(dx_q, np.arange(24), '.r')

    plt.xlim(-8,8)
    plt.ylim(0,24)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta x$ [pixel]')
    plt.ylabel('q')
    plt.savefig(out+'/q-x_tot.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(24), dx_q, '.r')
    plt.savefig(out+'/q-x_c.pdf', dpi=190)
    plt.clf()

    q_corr = np.array([np.arange(24), np.array(dx_q), np.array(dy_q)]).T
    np.save(out+'/q_corr.npy', q_corr)
    q_mask = q<24
    dy[q_mask] = dy[q_mask]-q_corr[q[q_mask].astype(int),-1]
    dx[q_mask] = dx[q_mask]-q_corr[q[q_mask].astype(int),-2]

    mask = (dy>=-8) & (dy<=8)
    imsz = [30, 64]
    H,xedges,yedges=np.histogram2d(ya[mask], dy[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 2, 32], origin='lower', norm=LogNorm())

    dy_ya = []
    for i in range(2,32):
        ya_mask = (ya[mask] == i)
        dy_c = np.median(dy[mask][ya_mask])
        dy_ya.append(dy_c)
    print('dy_ya:')
    print dy_ya
    plt.plot(dy_ya, np.arange(30)+2, '.r')

    plt.xlim(-8,8)
    plt.ylim(2,32)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta y$ [pixel]')
    plt.ylabel('ya')
    plt.savefig(out+'/ya-y_tot.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(30)+2, dy_ya, '.k')
    plt.savefig(out+'/ya-y_c.pdf', dpi=190)
    plt.clf()

    mask = (dx>=-8) & (dx<=8)
    imsz = [30, 64]
    H,xedges,yedges=np.histogram2d(ya[mask], dx[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 2, 32], origin='lower', norm=LogNorm())

    dx_ya = []
    for i in range(2,32):
        ya_mask = (ya[mask] == i)
        dx_c = np.median(dx[mask][ya_mask])
        dx_ya.append(dx_c)
    print('dx_ya:')
    print dx_ya
    plt.plot(dx_ya, np.arange(30)+2, '.r')

    plt.xlim(-8,8)
    plt.ylim(2,32)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta x$ [pixel]')
    plt.ylabel('ya')
    plt.savefig(out+'/ya-x_tot.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(30)+2, np.array(dx_ya), '.k')
    plt.savefig(out+'/ya-x_c.pdf', dpi=190)
    plt.clf()

    ya_corr = np.array([np.arange(30)+2, np.array(dx_ya), np.array(dy_ya)]).T
    np.save(out+'/ya_corr.npy', ya_corr)
    ya_mask = q<24
    dy = dy-ya_corr[ya.astype(int)-2,-1]
    dx = dx-ya_corr[ya.astype(int)-2,-2]

    #plot corrected
    mask = (dy>=-8) & (dy<=8) & (q<24)
    imsz = [24, 64]
    H,xedges,yedges=np.histogram2d(q[mask], dy[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 0, 24], origin='lower', norm=LogNorm())

    dy_cs = []
    for i in range(24):
        q_mask = q[mask] == i
        dy_c = np.median(dy[mask][q_mask])
        dy_cs.append(dy_c)
    print('dy_q:')
    print dy_cs
    plt.plot(dy_cs, np.arange(24), '.r')

    plt.xlim(-8,8)
    plt.ylim(0,24)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta y$ [pixel]')
    plt.ylabel('q')
    plt.savefig(out+'/q-y_tot_new.pdf', dpi=190)
    plt.clf()
    #np.save(out+'/q-y.npy', np.array([np.arange(24),dy_cs]).T)

    plt.plot(np.arange(24), dy_cs, '.r')
    plt.savefig(out+'/q-y_c_new.pdf', dpi=190)
    plt.clf()

    mask = (dx>=-8) & (dx<=8) & (q<24)
    imsz = [24, 64]
    H,xedges,yedges=np.histogram2d(q[mask], dx[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 0, 24], origin='lower', norm=LogNorm())


    dy_cs = []
    for i in range(24):
        q_mask = q[mask] == i
        dy_c = np.median(dx[mask][q_mask])
        dy_cs.append(dy_c)
    print('dx_q:')
    print dy_cs
    plt.plot(dy_cs, np.arange(24), '.r')

    plt.xlim(-8,8)
    plt.ylim(0,24)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta x$ [pixel]')
    plt.ylabel('q')
    plt.savefig(out+'/q-x_tot_new.pdf', dpi=190)
    plt.clf()
    #np.save(out+'/q-x.npy', np.array([np.arange(24),dy_cs]).T)

    plt.plot(np.arange(24), dy_cs, '.r')
    plt.savefig(out+'/q-x_c_new.pdf', dpi=190)
    plt.clf()


    mask = (dy>=-8) & (dy<=8)
    imsz = [30, 64]
    H,xedges,yedges=np.histogram2d(ya[mask], dy[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 2, 32], origin='lower', norm=LogNorm())

    dy_cs = []
    for i in range(2,32):
        ya_mask = ya[mask] == i
        dy_c = np.median(dy[mask][ya_mask])
        dy_cs.append(dy_c)
    print('dy_ya:')
    print dy_cs
    plt.plot(dy_cs, np.arange(30)+2, '.r')

    plt.xlim(-8,8)
    plt.ylim(2,32)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta y$ [pixel]')
    plt.ylabel('ya')
    plt.savefig(out+'/ya-y_tot_new.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(30)+2, dy_cs, '.k')
    plt.savefig(out+'/ya-y_c_new.pdf', dpi=190)
    plt.clf()
    #np.save(out+'/ya-y.npy', np.array([np.arange(30)+2,dy_cs]).T)

    mask = (dx>=-8) & (dx<=8)
    imsz = [30, 64]
    H,xedges,yedges=np.histogram2d(ya[mask], dx[mask],\
                             bins=imsz)

    plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal',\
                 extent=[-8, 8, 2, 32], origin='lower', norm=LogNorm())

    dy_cs = []
    for i in range(2,32):
        ya_mask = ya[mask] == i
        dy_c = np.median(dx[mask][ya_mask])
        dy_cs.append(dy_c)
    print('dx_ya:')
    print dy_cs
    plt.plot(dy_cs, np.arange(30)+2, '.r')

    plt.xlim(-8,8)
    plt.ylim(2,32)
    plt.title('scan{0:>5}'.format(scan)) 
    plt.xlabel(r'$\Delta x$ [pixel]')
    plt.ylabel('ya')
    plt.savefig(out+'/ya-x_tot_new.pdf', dpi=190)
    plt.clf()

    plt.plot(np.arange(30)+2, dy_cs, '.k')
    plt.savefig(out+'/ya-x_c_new.pdf', dpi=190)
    plt.clf()
def run_one_r_sec(pid, scan_name, step, start, end, return_dict):

    print('run one r sec')
    pixsz = 0.000416666666666667
    #skypos_count = [5.,-9.5]
    #skyrange_count = [2., 3.]
    #tranges_count = [[0,0]]
    #imsz_count = imsz = imagetools.deg2pix_g(skypos_count, skyrange_count, pixsz)
    #wcs_count = imagetools.define_wcs_g(skypos_count,skyrange_count,width=False,height=False,verbose=0,pixsz=pixsz)
    #count = np.zeros(imsz_count)

    num_co = int(1/step)

    hdulist = pyfits.open('../AIS_GAL_SCAN/asprta/%s-asprta.fits'%scan_name)
    co_data = hdulist[1].data
    length = co_data.shape[0]

    #cal_initial = int((co_data[1][0]-0.5)*1000)
    #offsets = np.load('../data/%s/cata/offsets_inter_half_sec.npy'%scan_name)

    angle_list = [0.]

    print length
    for initial_sec in range(start, end):
      print 'time:%d'%initial_sec
      file_path = '../data/%s/cata/centroids_sec%d.npy'%(scan_name, initial_sec)
      '''
      if os.path.exists(file_path):
        print 'skip:%d'%initial_sec
        continue
      '''
      intitial_asp = co_data[initial_sec]
      rot = intitial_asp[3]
      center = np.array([intitial_asp[1], intitial_asp[2]])
      #use the first order calibrated asp instead of the original one
      #center = cal_asp_r(offsets, cal_initial, intitial_asp[0]*1000, intitial_asp[1:3], 200) 

      #print(intitial_asp)

      skypos = [0.0, 0.0]
      skyrange = [0.2, 0.2]

      wcs = imagetools.define_wcs(skypos,skyrange,width=False,height=False,verbose=0,pixsz=0.0001)

      initial_time = intitial_asp[0]-0.5

      tranges = []

      for sec in range(num_co):
        tranges.append([initial_time+step*sec, initial_time+step*(sec+1)])
      print tranges

      #data = get_data_cal(tranges, scan_name, cal_initial, offsets)
      data = get_data(tranges, scan_name)
      print len(data)

      output = "../data/%s/cata/%s.csv"%(scan_name, scan_name)
      dir = os.path.dirname(output)
      if not os.path.exists(dir):
          os.makedirs(dir)
      centroids = []
      for sec in range(num_co):
        if len(data[sec]) ==0:
          centroid = np.array([0.0, 0.0])
          centroids.append(centroid)
          print centroid
          continue
        coo1 = np.array(data[sec], dtype='float64')[:,-3:-1]
        coo2 = catalog_fits.get_catalog(center, 0.69)

        coo1 = angle_filter(coo1, center, 0.5)
        coo2 = angle_filter(coo2, center, 0.5)


        xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], center[0], center[1], -rot, 1/36000., 0.0)

        max_now = -1000
        cent_now = []
        for angle in angle_list:
          coo1[:,0], coo1[:,1] = gn.gnomrev_simple(xi,eta,center[0],center[1],-(rot+angle),1/36000.,0.)
          centroid, max_value = get_corr_map(coo2, coo1, skypos, skyrange, sec, 0.2, 0.004)
          if max_value>max_now:
            max_now = max_value
            cent_now = np.append(centroid, angle) #centroid.append(angle)

        centroids.append(cent_now)
      print centroids
      np.save('../data/%s/cata/centroids_rot%d.npy'%(scan_name, initial_sec), centroids)
示例#16
0
		limit = scst_tmp['t_dead_nuv'].shape[0]-1
		ix_tmp[ix_tmp>limit] = limit
		dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

		count = np.zeros([800,800])
		#for star_num in xrange(1,10):
		for star_num in range(cata_len):
			print star_num
			star_co = cata_a[star_num, 0:2]
			star_flux = cata_a[star_num, 3]
			print star_flux

			ra = np.ones(asp_uni.shape[0])*star_co[0]
			dec = np.ones(asp_uni.shape[0])*star_co[1]

			xi, eta = gn.gnomfwd_simple(ra, dec, asp_uni[:,1], asp_uni[:,2], -asp_uni[:,3], 1/36000., 0.0)

			coo = np.array([xi, eta]).T
			#print coo.shape
			#print coo
			coo = ((coo/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*800

			'''
			mask_0 = np.logical_and(coo[:,0]>=0, coo[:,0]<800)
			mask_1 = np.logical_and(coo[:,1]>=0, coo[:,1]<800)

			mask = np.logical_and(mask_0, mask_1)

			coo = coo[mask]
			dead_t = dead_tmp[mask]
示例#17
0
        qmask = photon_list[:,-1]>5
        photon_list = photon_list[qmask]

        star_list = np.load('/scratch/dw1519/galex/data/star_photon/'+in_dir+'/'+name+'_star.npy')
        print star_list.shape
        stars, ct = np.unique(photon_list[:,0], return_counts=True)
        nuv = star_list[stars.astype(int),-1]
        print stars.shape
        star_mask = (ct>10) & (nuv<17.5) & (nuv>15.5)
        print np.sum(star_mask)
        stars = stars[star_mask]
        for star in stars:
            star_mask = (photon_list[:,0]==star)
            p = photon_list[star_mask]
            ix = np.digitize(p[:,1]/1000., asp[:,0])-1
            xi, eta = gn.gnomfwd_simple(c_radec[star].ra.deg, c_radec[star].dec.deg, 
                                            asp[ix,1], asp[ix,2], -asp[ix,3],1/36000.,0.)
            pos = np.array([xi,eta]).T
            pos=((pos/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*size

            Hc, xedge, yedge = np.histogram2d(pos[:,0], pos[:,1], 
                                bins=[size,size], range=([ [0,size],[0,size] ]))


            xi, eta = gn.gnomfwd_simple(c_radec[star].ra.deg, c_radec[star].dec.deg, 
                                            asp[:,1], asp[:,2], -asp[:,3],1/36000.,0.)
            pos = np.array([xi,eta]).T
            pos=((pos/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*size

            H, xedge, yedge = np.histogram2d(pos[:,0], pos[:,1],
                                bins=[size,size], range=([ [0,size],[0,size] ]), weights=step*(1-dead)*cut)
示例#18
0
def res_star_new(pid, scan_name, start, end, return_dict):
	cata = spi.load_obj('../data/%s_starset_new'%scan_name)
	cata_a = np.array(list(cata))
	cata_len = len(cata)
	cata_list = np.insert(cata_a, 0, np.arange(cata_len), axis=1)

	asp = np.load('../data/photon_list/AIS_GAL_SCAN_00014_0001_asp_cal.npy')
	asp_uni, uni_index=np.unique(asp[:,0], True)
	asp_uni = asp[uni_index]
	ix_tmp = (np.round(asp_uni[:,0]-asp_uni[0,0])+1).astype(int)
	dead_tmp = np.zeros(ix_tmp.shape[0])
	scst_tmp = pyfits.open('../AIS_GAL_SCAN/scst/%s-scst.fits'%scan_name)[1].data
	limit = scst_tmp['t_dead_nuv'].shape[0]-1
	ix_tmp[ix_tmp>limit] = limit
	dead_tmp = scst_tmp['t_dead_nuv'][ix_tmp]

	for star_num in range(start, end+1): 
		star_co = cata_a[star_num, 0:2]


		order = 1
		star = 'star_%d-%d'%(star_num, order)
		
		if not os.path.exists('../data/%s/star/list/%s.csv'%(scan_name, star)):
			print 'skip:%s'%star
			continue
	  
		csv_file = '../data/%s/star/list/%s.csv'%(scan_name, star)
		count = []
		time_list = []
		with open(csv_file, 'rb') as file:
			reader = csv.reader(file)
			first = float(reader.next()[0])
			final = 0
			last = 0
			reader = csv.reader(file)
			for row in reader:
				time = float(row[0])#time = int(float(row[0])/1000.)
				if time - last > 200:
					count.append(1)
					last = time
					time_list.append(last)
				else:
					count[-1] += 1
				final = time

		time_list = np.array(time_list)/1000.
		index_0 = (first-asp_uni[0,0]*1000)/5
		index_1 = (final-asp_uni[0,0]*1000)/5

		star_track = asp_uni[index_0:index_1+1,:]
		dead_t = dead_tmp[index_0:index_1+1]
		ra = np.ones(star_track.shape[0])*star_co[0]
		dec = np.ones(star_track.shape[0])*star_co[1]

		xi, eta = gn.gnomfwd_simple(ra, dec, star_track[:,1], star_track[:,2], -star_track[:,3], 1/36000., 0.0)

		output = "../plots/%s/star/res/%s.csv"%(scan_name, scan_name)
		dir = os.path.dirname(output)
		if not os.path.exists(dir):
			os.makedirs(dir)
		print dead_t
		res_list = get_res_new(xi, eta)
		res_list_d = res_list*(1-dead_t)

		'''
		plt.plot(star_track[:,0], res_list_d)
		plt.xlabel('t/s')
		plt.ylabel('response')
		plt.savefig('../plots/%s/star/res/res%d-%d_track_d.png'%(scan_name, star_num, order), dpi=190)
		plt.clf()

		plt.plot(star_track[:,0], res_list)
		plt.xlabel('t/s')
		plt.ylabel('response')
		plt.savefig('../plots/%s/star/res/res%d-%d_track.png'%(scan_name, star_num, order), dpi=190)
		plt.clf()
		'''

		f, axes = plt.subplots(2, 1)
		axes[0].plot(time_list, count)
		axes[0].set_ylabel('Num of Photons')
		ylim = axes[0].get_ylim()
		axes[0].set_ylim(ylim+np.absolute(ylim)*0.01)
		plt.setp( axes[0].get_xticklabels(), visible=False)
		#plt.setp( axes[0].get_yticklabels(), visible=False)

		axes[1].plot(star_track[:,0], res_list_d)
		axes[1].set_ylabel('Response')
		axes[1].set_xlabel('time/s')

		plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
		            wspace=0, hspace=0)
		plt.savefig('../plots/%s/star/res/2p/res%d-%d_track.png'%(scan_name,star_num,order),dpi=190)  
		plt.clf()
def get_corr_map(coo1, coo2, skypos, skyrange, sec, pixsz, idx, suffix,
                 info_list, d3, outdir):
    imsz = imagetools.deg2pix(skypos, skyrange, pixsz).astype(int)
    count = np.zeros(imsz)
    #print(imsz)
    bound = skyrange[0] / 0.000554 / 2400. * 36000. * 800 * 0.001666
    co_rel = np.array([[0, 0]])
    infos = np.array([[0, 0, 0]])
    rot = np.array([0])
    len1 = coo1.shape[0]
    len2 = coo2.shape[0]
    print(len1, len2)
    wcs = imagetools.define_wcs(skypos,
                                skyrange,
                                width=False,
                                height=False,
                                verbose=0,
                                pixsz=pixsz)
    #with open('../data/try2_%d.csv'%sec, 'wb') as csvfile:
    #writer = csv.writer(csvfile)
    '''
  photon_len = coo2.shape[0]
  star_len = coo1.shape[0]
  print 'repeat coo1'
  coo1 = np.repeat(coo1, photon_len, axis=0)
  print coo1.shape
  print 'repeat d3'
  d3 = np.tile(d3, (star_len,1))
  print d3.shape
  print 'convert coo1'
  xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], d3[:,1], d3[:,2], -d3[:,3], 1/36000., 0)
  print 'tile coo2'
  co_rel = np.tile(coo2, (star_len,1)) - np.array([xi,eta]).T
  mask = (np.absolute(co_rel[:,0])<=bound) & (np.absolute(co_rel[:,1])<=bound)
  co_rel = co_rel[mask]
  print 'tile infos'
  infos = np.tile(info_list, (star_len,1))[mask]
  print infos.shape
  '''

    if len2 > len1:
        for i in range(len1):
            ones = np.ones(d3.shape[0])
            xi, eta = gn.gnomfwd_simple(coo1[i, 0] * ones, coo1[i, 1] * ones,
                                        d3[:, 1], d3[:, 2], -d3[:, 3],
                                        1 / 36000., 0)
            tmp_co = coo2 - np.array([xi, eta]).T
            mask = (np.absolute(tmp_co[:, 0]) <= bound) & (np.absolute(
                tmp_co[:, 1]) <= bound)
            tmp_co = tmp_co[np.absolute(tmp_co[:, 0]) <= bound, :]
            tmp_co = tmp_co[np.absolute(tmp_co[:, 1]) <= bound, :]
            co_rel = np.concatenate((co_rel, tmp_co), axis=0)
            infos = np.concatenate((infos, info_list[mask]), axis=0)
            #rot = np.concatenate((rot, d3[mask]), axis=0)
    else:
        for i in range(len2):
            #print(i)
            tmp_co = coo2[i, :] - coo1
            tmp_co = tmp_co[np.absolute(tmp_co[:, 0]) <= bound, :]
            tmp_co = tmp_co[np.absolute(tmp_co[:, 1]) <= bound, :]
            co_rel = np.concatenate((co_rel, tmp_co), axis=0)
            infos = np.concatenate(
                (infos, np.repeat(info_list[i], tmp_co.shape[0])), axis=0)
            rot = np.concatenate((rot, np.repeat(d3[i], tmp_co.shape[0])),
                                 axis=0)

    path = os.path.dirname('{0}/test/test'.format(outdir))
    if not os.path.exists(path):
        os.makedirs(path)
    np.save('{0}/test/{1}.npy'.format(outdir, idx), co_rel)
    #np.save('{0}/radec/{1}.npy'.format(outdir, idx), co_radec)
    np.save('{0}/test/info_{1}.npy'.format(outdir, idx), infos)

    return [0, 0], 0, 0
def run_one_r_sec(pid, scan_name, step, start, end, return_dict):

    print('run one r sec')
    pixsz = 0.000416666666666667
    #skypos_count = [5.,-9.5]
    #skyrange_count = [2., 3.]
    #tranges_count = [[0,0]]
    #imsz_count = imsz = imagetools.deg2pix_g(skypos_count, skyrange_count, pixsz)
    #wcs_count = imagetools.define_wcs_g(skypos_count,skyrange_count,width=False,height=False,verbose=0,pixsz=pixsz)
    #count = np.zeros(imsz_count)

    num_co = int(1 / step)

    hdulist = pyfits.open('../AIS_GAL_SCAN/asprta/%s-asprta.fits' % scan_name)
    co_data = hdulist[1].data
    length = co_data.shape[0]

    #cal_initial = int((co_data[1][0]-0.5)*1000)
    #offsets = np.load('../data/%s/cata/offsets_inter_half_sec.npy'%scan_name)

    angle_list = [0.]

    print length
    for initial_sec in range(start, end):
        print 'time:%d' % initial_sec
        file_path = '../data/%s/cata/centroids_sec%d.npy' % (scan_name,
                                                             initial_sec)
        '''
      if os.path.exists(file_path):
        print 'skip:%d'%initial_sec
        continue
      '''
        intitial_asp = co_data[initial_sec]
        rot = intitial_asp[3]
        center = np.array([intitial_asp[1], intitial_asp[2]])
        #use the first order calibrated asp instead of the original one
        #center = cal_asp_r(offsets, cal_initial, intitial_asp[0]*1000, intitial_asp[1:3], 200)

        #print(intitial_asp)

        skypos = [0.0, 0.0]
        skyrange = [0.2, 0.2]

        wcs = imagetools.define_wcs(skypos,
                                    skyrange,
                                    width=False,
                                    height=False,
                                    verbose=0,
                                    pixsz=0.0001)

        initial_time = intitial_asp[0] - 0.5

        tranges = []

        for sec in range(num_co):
            tranges.append(
                [initial_time + step * sec, initial_time + step * (sec + 1)])
        print tranges

        #data = get_data_cal(tranges, scan_name, cal_initial, offsets)
        data = get_data(tranges, scan_name)
        print len(data)

        output = "../data/%s/cata/%s.csv" % (scan_name, scan_name)
        dir = os.path.dirname(output)
        if not os.path.exists(dir):
            os.makedirs(dir)
        centroids = []
        for sec in range(num_co):
            if len(data[sec]) == 0:
                centroid = np.array([0.0, 0.0])
                centroids.append(centroid)
                print centroid
                continue
            coo1 = np.array(data[sec], dtype='float64')[:, -3:-1]
            coo2 = catalog_fits.get_catalog(center, 0.69)

            coo1 = angle_filter(coo1, center, 0.5)
            coo2 = angle_filter(coo2, center, 0.5)

            xi, eta = gn.gnomfwd_simple(coo1[:, 0], coo1[:, 1], center[0],
                                        center[1], -rot, 1 / 36000., 0.0)

            max_now = -1000
            cent_now = []
            for angle in angle_list:
                coo1[:,
                     0], coo1[:,
                              1] = gn.gnomrev_simple(xi, eta, center[0],
                                                     center[1], -(rot + angle),
                                                     1 / 36000., 0.)
                centroid, max_value = get_corr_map(coo2, coo1, skypos,
                                                   skyrange, sec, 0.2, 0.004)
                if max_value > max_now:
                    max_now = max_value
                    cent_now = np.append(centroid,
                                         angle)  #centroid.append(angle)

            centroids.append(cent_now)
        print centroids
        np.save(
            '../data/%s/cata/centroids_rot%d.npy' % (scan_name, initial_sec),
            centroids)
示例#21
0
def run_model_chunk(pid, scan_name, chunk, cata_target, cata_lists, size_list, cata_target_len, dead_tmp, asp_uni, return_dict):
	count_list=[]
	exp_list=[]
	chunk_num = 0
	for trange in chunk:
		output = '../fits/%s/extra/new_black/exposure_chunk%d.fits'%(scan_name, chunk_num)
		if  os.path.exists(output):
			print 'exists %d'%(chunk_num)
			chunk_num+=1
			continue
		t_mask = np.zeros(asp_uni.shape[0])
		begin = np.where((asp_uni[:,0]*1000).astype(int) - trange[0] == 0)[0] 
		end = np.where((asp_uni[:,0]*1000).astype(int) - trange[1] == 0)[0]
		t_mask[begin:end+1] = 1

		t_asp = asp_uni[t_mask>0]
		t_dead = dead_tmp[t_mask>0]

		t_length = end+1-begin
		print('time length:%d, %f, %f'%(t_length, trange[0], trange[1]))
		count = np.zeros([t_length,800,800])
		exp_count = np.zeros([t_length,800,800])
		for star_num in range(cata_target_len):
			#print star_num
			star_co = cata_target[star_num, 0:2]
			star_flux = cata_target[star_num, 3]
			#print star_flux

			ra = np.ones(t_asp.shape[0])*star_co[0]
			dec = np.ones(t_asp.shape[0])*star_co[1]

			xi, eta = gn.gnomfwd_simple(ra, dec, t_asp[:,1], t_asp[:,2], -t_asp[:,3], 1/36000., 0.0)

			coo = np.array([xi, eta]).T
			coo = ((coo/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*800

			for i in [-1,0,1]:
				for j in [-1,0,1]:
					coo_tmp = np.zeros([t_length, 3])
					coo_tmp[:,0] = np.arange(t_length)
					coo_tmp[:,1] = coo[:,0]+i
					coo_tmp[:,2] = coo[:,1]+j
					
					mask_0 = np.logical_and(coo_tmp[:,1]>=0, coo_tmp[:,1]<800)
					mask_1 = np.logical_and(coo_tmp[:,2]>=0, coo_tmp[:,2]<800)
					mask = np.logical_and(mask_0, mask_1)
					
					total = 1+4*0.0625+4*0.00390625
					coo_tmp = coo_tmp[mask]
					t_dead_tmp = t_dead[mask]
					coo_tmp = np.array(coo_tmp, dtype=int)
					factor = 1.
					if (i,j) in set([(-1,0),(1,0),(0,-1),(0,1)]):
						factor = 0.0625
					elif (i,j) in set([(-1,-1),(1,-1),(1,1),(-1,1)]):
						factor = 0.00390625
					else:
						factor = 1.
					#count[coo_tmp[:,0], coo_tmp[:,1]] += 0.005*factor*star_flux/total
					count[coo_tmp[:,0], coo_tmp[:,1], coo_tmp[:,2]] += factor*star_flux/total

		for mask_num in range(3):
			mask_cata = cata_lists[mask_num]
			size = size_list[mask_num]
			radius = size[-1]+0.5
			for star_num in range(mask_cata.shape[0]):
				#print star_num
				star_co = mask_cata[star_num, 0:2]
				#print star_flux

				ra = np.ones(t_asp.shape[0])*star_co[0]
				dec = np.ones(t_asp.shape[0])*star_co[1]

				xi, eta = gn.gnomfwd_simple(ra, dec, t_asp[:,1], t_asp[:,2], -t_asp[:,3], 1/36000., 0.0)

				coo = np.array([xi, eta]).T
				coo = ((coo/36000.)/(1.25/2.)*(1.25/(800* 0.001666))+1.)/2.*800

				for i in size:
					for j in size:
						if i**2+j**2>radius**2:
							continue
						coo_tmp = np.zeros([t_length, 3])
						coo_tmp[:,0] = np.arange(t_length)
						coo_tmp[:,1] = coo[:,0]+i
						coo_tmp[:,2] = coo[:,1]+j
						
						mask_0 = np.logical_and(coo_tmp[:,1]>=0, coo_tmp[:,1]<800)
						mask_1 = np.logical_and(coo_tmp[:,2]>=0, coo_tmp[:,2]<800)
						mask = np.logical_and(mask_0, mask_1)
						coo_tmp = coo_tmp[mask]

						coo_tmp = np.array(coo_tmp, dtype=int)

						exp_count[coo_tmp[:,0], coo_tmp[:,1], coo_tmp[:,2]] -= 1
		for t_step in range(t_length): 
			exp_count[t_step][exp_count[t_step]>=0] = 0.005*(1-t_dead[t_step])
		exp_count[exp_count<0] = 0.
		count *= exp_count

		exp_count_sum = np.sum(exp_count, axis=0)
		count_sum = np.sum(count, axis=0)
		exp_list.append(exp_count_sum)
		count_list.append(count_sum)
		exp_count=count=None
		gc.collect()
		chunk_num += 1
	return_dict[pid] = (count_list, exp_list)
def run_one_r_sec(pid, scan_name, step, resolution, asp_cal, start, end, dis_map, return_dict):

    print('run one r sec')

    num_co = int(resolution/step)
    
    #load asp file
    hdulist = pyfits.open('../AIS_GAL_SCAN/asprta/%s-asprta.fits'%scan_name)
    co_data = hdulist[1].data
    length = co_data.shape[0]

    '''
    try:
      asp_cal = np.load('../data/photon_list/%s_asp_new.npy'%scan_name)
    except IOError:
      T = co_data['T']
      ra = co_data['ra']
      dec = co_data['dec']
      roll = co_data['roll']
      t_new = np.arange((T.shape[0]-1)*200)*0.005+T[0]
      ra_new = np.interp(t_new, T, ra)
      dec_new = np.interp(t_new, T, dec)
      roll_new = np.interp(t_new, T, roll)
      asp_cal = np.array([t_new, ra_new, dec_new, roll_new]).T
      np.save('../data/photon_list/%s_asp_new.npy'%scan_name, asp_cal)
    '''

    #cal_initial = int((co_data[1][0]-0.5)*1000)
    #offsets = np.load('../data/%s/cata/offsets_inter_half_sec.npy'%scan_name)

    angle_list = [0.]
    start =600#1000
    print length
    for initial_sec in range(start, end):
      print 'time:%d'%initial_sec
      file_path = '../data/%s/cata/centroids_rot%d.npy'%(scan_name, initial_sec)

      intitial_asp = co_data[initial_sec]
      rot = intitial_asp[3]
      #center = np.array([intitial_asp[1], intitial_asp[2]])
      #use the first order calibrated asp instead of the original one
      #center = cal_asp_r(offsets, cal_initial, intitial_asp[0]*1000, intitial_asp[1:3], 200) 
      #print(intitial_asp)

      skypos = [0.0, 0.0]
      skyrange = [0.02, 0.02]
      if step == 1:
        skyrange = [0.04, 0.04]#[0.3, 0.3]
      elif step == 0.5:
        skyrange = [0.02, 0.02]

      initial_time = intitial_asp[0]-step/2.

      tranges = []

      for sec in range(num_co):
        tranges.append([initial_time+step*sec, initial_time+step*(sec+1)])
      print tranges
      time_c = np.mean(tranges, axis=1)
      print 'center time:'
      print time_c

      #data = get_data_cal(tranges, scan_name, cal_initial, offsets)
      data = get_data(tranges, scan_name)
      print 'number of the photons:'
      print len(data)

      centroids = []
      center_time = []
      for sec in range(num_co):
        center_time.append(time_c[sec])
        if len(data[sec]) == 0:
          centroid = np.array([0.0, 0.0, 0.0])
          centroids.append(centroid)
          print centroid
          continue
        arg = np.argmin(np.absolute(asp_cal[:,0]-time_c[sec]))
        center = asp_cal[arg, 1:3]

        data_sec = dis_correct(np.array(data[sec], dtype='float64'), dis_map, asp_cal)
        coo1 = np.array(data_sec, dtype='float64')
        aperture = 0.69
        #coo1 = np.array(data[sec], dtype='float64')[:,-3:-1]
        coo3 = catalog_fits.get_catalog_tycho(center, aperture)
        coo2 = catalog_fits.get_catalog(center, aperture)
        #coo2[:,0] -= 0.0052 #- 0.01005915
        #coo2[:,1] -= -0.006 #- 0.00804992
        #data_sec = dis_correct(np.array(data[sec+1], dtype='float64'), dis_map, asp_cal)
        #coo4 = np.array(data_sec, dtype='float64')

        #coo2 = catalog_fits.get_catalog(center, 2.)
        #coo2 = np.concatenate([coo2,coo3], axis=0)

        coo1 = angle_filter(coo1, center, 0.6)
        coo2 = angle_filter(coo2, center, 0.6)
        coo3 = angle_filter(coo3, center, 0.6)
        #coo4 = angle_filter(coo4, center, 0.6)

        fig = plt.gcf()
        fig.set_size_inches(8,8)
        plt.plot(coo1[:,0], coo1[:,1], '.k', markersize=0.1)
        plt.plot(coo3[:,0], coo3[:,1], '+r', markersize=12)
        plt.plot(coo2[:,0], coo2[:,1], '+b', markersize=8)
        #plt.show()
        plt.ylabel('Dec')
        plt.xlabel('RA')
        plt.xlim(center[0]-0.65, center[0]+0.65)
        plt.ylim(center[1]-0.65, center[1]+0.65)
        plt.tight_layout()
        plt.savefig('/home/dw1519/galex/plots/photons.png', dpi=190)
        plt.clf()
        plt.close()
        '''
        #plot field
        #plt.plot(asp_cal[:,1],'.b')
        #plt.show()
        print center
        print coo1.shape
        print np.min(coo1[:,0]), np.max(coo1[:,0])
        print np.min(coo1[:,1]), np.max(coo1[:,1])
        wcs = imagetools.define_wcs(center,[1.5,1.5],width=False,height=False,verbose=0,pixsz=0.002)
        imsz = imagetools.deg2pix(center, [1.5,1.5], 0.002)
        foc = wcs.sip_pix2foc(wcs.wcs_world2pix(coo1,1),1)
        H,xedges,yedges=np.histogram2d(foc[:,1]-0.5, foc[:,0]-0.5,\
                                   bins=imsz, range=([ [0,imsz[0]],[0,imsz[1]] ]))

        H_new = H.copy()
        data = H_new.byteswap(True).newbyteorder()
        data = data.copy(order='C')
        data = data.byteswap(True).newbyteorder()
        c_data = c3.find_source(data, 1)
        if c_data is not None:
          cx, cy, max_value = c_data
          print cy, cx
          centroid = wcs.wcs_pix2world(wcs.sip_foc2pix([[cx, cy]],1),1)[0]


        coo1 = angle_filter_out(coo1, centroid, 0.01)
        foc = wcs.sip_pix2foc(wcs.wcs_world2pix(coo1,1),1)
        H,xedges,yedges=np.histogram2d(foc[:,1]-0.5, foc[:,0]-0.5,\
                                   bins=imsz, range=([ [0,imsz[0]],[0,imsz[1]] ]))

        plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'), vmax=10)
        plt.colorbar()
        plt.show()


        foc = wcs.sip_pix2foc(wcs.wcs_world2pix(coo2,1),1)
        H,xedges,yedges=np.histogram2d(foc[:,1]-0.5, foc[:,0]-0.5,\
                                   bins=imsz, range=([ [0,imsz[0]],[0,imsz[1]] ]))
        plt.imshow(H,interpolation='None', cmap=plt.get_cmap('Greys'))
        plt.show()
        '''

        xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], center[0], center[1], -rot, 1/36000., 0.0)

        max_now = -1000
        cent_now = []
        for angle in angle_list:
          #coo1[:,0], coo1[:,1] = gn.gnomrev_simple(xi,eta,center[0],center[1],-(rot+angle),1/36000.,0.)
          centroid, max_value, flux = get_corr_map(coo3, coo1, skypos, skyrange, sec, 0.0002, initial_sec, '2')
          print centroid
          centroid, max_value, flux = get_corr_map(coo2, coo1, skypos, skyrange, sec, 0.0002, initial_sec, '1')
          print centroid
          #centroid, max_value, flux = get_corr_map(coo4, coo1, skypos, skyrange, sec, 0.0002, initial_sec, '3')
          #print centroid
          if max_value>max_now:
            max_now = max_value
            cent_now = np.append(centroid, angle) #centroid.append(angle)

        centroids.append(cent_now)
      print centroids
      sys.exit(0)
示例#23
0
def load_data(name, dis_l, dis_h, ya, c_file, asprta, resolution):
    #name = 'AIS_GAL_SCAN_00023_0001'
    suffix = '-cal-sec'
    #dis_l = '/scratch/dw1519/galex/data/distortion/5-185-xa_low-centroids.npy'
    #dis_h = '/scratch/dw1519/galex/data/distortion/5-185-xa_high-centroids.npy'
    #ya = '/scratch/dw1519/galex/co/co23_1-10/test/ya_fit.npy'

    hdulist = pyfits.open(asprta)
    co_data = hdulist[1].data
    n=resolution/0.005 #100
    T = co_data['T']
    ra = co_data['ra']
    dec = co_data['dec']
    roll = co_data['roll']
    t_new = np.arange((T.shape[0]-1)*n)*0.005+T[0]
    ra_new = np.interp(t_new, T, ra)
    dec_new = np.interp(t_new, T, dec)
    roll_new = np.interp(t_new, T, roll)
    asp = np.array([t_new, ra_new, dec_new, roll_new]).T
    #np.save('../data/photon_list/%s_asp_fix.npy'%name, asp_cal)
    hdulist.close()
    
    #asp = np.load('../data/photon_list/{0}{1}-correct_asp_new.npy'.format(name, suffix))
    scst_file = pyfits.open('../AIS_GAL_SCAN/scst/{0}-scst.fits'.format(name))
    scst_data = scst_file[1].data
    scst_time = scst_data['pktime'].copy()
    hv = scst_data['hvnom_nuv'].copy()
    scst_file.close()

    dis_map = load_dis(dis_l, dis_h)
    if ya is not None:
        ya_info = load_ya(ya)
    else:
        ya_info = [None, None]


    tycho2 = pyfits.open('../data/tycho2.fits')[1].data
    df = load_catalog(c_file)
    c = SkyCoord(df['gl']*u.degree, df['gb']*u.degree, frame='galactic')
    catalog = SkyCoord(tycho2['Glon']*u.degree, tycho2['Glat']*u.degree, frame='galactic')
    idx, d2d, d3d = c.match_to_catalog_sky(catalog)  
    mask=d2d<0.001*u.degree
    photon_list =  sorted(glob.glob("../data/"+name+suffix+"/split/*.csv"), key=get_key)
    data_list = []
    for f in photon_list:
        print(f)
        data = np.loadtxt(f,delimiter=',', usecols=[0,3,4,5,6,7])
        if len(data.shape)<2:
            continue
        scst_ix = np.digitize(data[:,0]/1000., scst_time)
        ix_mask = scst_ix<scst_time.shape[0]
        scst_ix = scst_ix[ix_mask]
        data = data[ix_mask]
        print(data[-1,0]/1000.)
        print(scst_time[scst_ix[-1]])
        print(hv[scst_ix[-1]])
        data = data[hv[scst_ix]>0]
        if len(data)==0:
            print('skip')
            continue
        data = dis_correct(data, dis_map, asp, ya_info[0], ya_info[1])
        sky_data = SkyCoord(data[:,0:2], unit='deg', frame='fk5', equinox='J2000.0')
        gal = sky_data.transform_to('galactic')
        idxc, idxcatalog, d2d_p, d3d_p = gal.search_around_sky(catalog[idx[mask]], 0.0045*u.deg)
        catalog_id = np.zeros((gal.shape[0], 3))-1
        #catalog_id[idxcatalog,0] = 
        if len(idxc)>0:
            xi, eta = gn.gnomfwd_simple(tycho2['RAJ2000'][idx[mask][idxc]], tycho2['DEJ2000'][idx[mask][idxc]],
                     data[idxcatalog,-3], data[idxcatalog,-2], -data[idxcatalog,-1], 1/36000., 0)
            #print xi.shape
            #print eta.shape
            #print data[idxcatalog,6].shape
            #print (data[idxcatalog,7]-eta).shape        
            catalog_id[idxcatalog] = np.column_stack([idx[mask][idxc], (data[idxcatalog,6]-xi),\
                                    (data[idxcatalog,7]-eta)])
        else:
            print 'no star'
        #catalog_id = np.array([catalog_id]).T
        data = np.concatenate([np.array([gal.l.deg]).T, np.array([gal.b.deg]).T, data[:,2:8],catalog_id], axis=1)
        data_list.append(data)
    gc.collect()

    return np.concatenate(data_list, axis=0)
def get_corr_map(coo1, coo2, skypos, skyrange, sec, pixsz, idx, suffix, info_list, d3, outdir):
  imsz = imagetools.deg2pix(skypos, skyrange, pixsz).astype(int)
  count = np.zeros(imsz)
  #print(imsz)
  bound = skyrange[0]/0.000554/2400.*36000.*800*0.001666
  co_rel = np.array([[0,0]])
  infos = np.array([[0,0,0]])
  rot = np.array([0])
  len1 = coo1.shape[0]
  len2 = coo2.shape[0]
  print(len1,len2)
  wcs = imagetools.define_wcs(skypos,skyrange,width=False,height=False,verbose=0,pixsz=pixsz)
  #with open('../data/try2_%d.csv'%sec, 'wb') as csvfile:
    #writer = csv.writer(csvfile)
  '''
  photon_len = coo2.shape[0]
  star_len = coo1.shape[0]
  print 'repeat coo1'
  coo1 = np.repeat(coo1, photon_len, axis=0)
  print coo1.shape
  print 'repeat d3'
  d3 = np.tile(d3, (star_len,1))
  print d3.shape
  print 'convert coo1'
  xi, eta = gn.gnomfwd_simple(coo1[:,0], coo1[:,1], d3[:,1], d3[:,2], -d3[:,3], 1/36000., 0)
  print 'tile coo2'
  co_rel = np.tile(coo2, (star_len,1)) - np.array([xi,eta]).T
  mask = (np.absolute(co_rel[:,0])<=bound) & (np.absolute(co_rel[:,1])<=bound)
  co_rel = co_rel[mask]
  print 'tile infos'
  infos = np.tile(info_list, (star_len,1))[mask]
  print infos.shape
  '''

  if len2>len1:
    for i in range(len1):
      ones = np.ones(d3.shape[0])
      xi, eta = gn.gnomfwd_simple(coo1[i,0]*ones, coo1[i,1]*ones, d3[:,1], d3[:,2], -d3[:,3], 1/36000., 0)
      tmp_co = coo2-np.array([xi,eta]).T
      mask = (np.absolute(tmp_co[:,0])<=bound) & (np.absolute(tmp_co[:,1])<=bound)
      tmp_co = tmp_co[np.absolute(tmp_co[:,0])<=bound,:]
      tmp_co = tmp_co[np.absolute(tmp_co[:,1])<=bound,:]
      co_rel = np.concatenate((co_rel, tmp_co), axis = 0)
      infos = np.concatenate((infos,info_list[mask]), axis=0)
      #rot = np.concatenate((rot, d3[mask]), axis=0)
  else:
    for i in range(len2):
      #print(i)
      tmp_co = coo2[i,:]-coo1
      tmp_co = tmp_co[np.absolute(tmp_co[:,0])<=bound,:]
      tmp_co = tmp_co[np.absolute(tmp_co[:,1])<=bound,:]
      co_rel = np.concatenate((co_rel, tmp_co), axis = 0)
      infos = np.concatenate((infos,np.repeat(info_list[i], tmp_co.shape[0])), axis=0)
      rot = np.concatenate((rot, np.repeat(d3[i], tmp_co.shape[0])), axis=0)


  path = os.path.dirname('{0}/test/test'.format(outdir))
  if not os.path.exists(path):
    os.makedirs(path)
  np.save('{0}/test/{1}.npy'.format(outdir, idx), co_rel)
  #np.save('{0}/radec/{1}.npy'.format(outdir, idx), co_radec)
  np.save('{0}/test/info_{1}.npy'.format(outdir, idx), infos)


  return [0,0], 0, 0
def get_corr_map(coo1, coo2, skypos, skyrange, sec, pixsz, idx, suffix,
                 info_list, d3, outdir):
    imsz = imagetools.deg2pix(skypos, skyrange, pixsz).astype(int)
    count = np.zeros(imsz)
    #print(imsz)
    bound = skyrange[0]
    co_rel = np.array([[0, 0]])
    infos = np.array([[0, 0, 0]])
    rot = np.array([0])
    len1 = coo1.shape[0]
    len2 = coo2.shape[0]
    print(len1, len2)
    wcs = imagetools.define_wcs(skypos,
                                skyrange,
                                width=False,
                                height=False,
                                verbose=0,
                                pixsz=pixsz)
    #with open('../data/try2_%d.csv'%sec, 'wb') as csvfile:
    #writer = csv.writer(csvfile)
    if len2 > len1:
        for i in range(len1):
            #print(i)
            tmp_co = coo2 - coo1[i, :]
            mask = (np.absolute(tmp_co[:, 0]) <= bound) & (np.absolute(
                tmp_co[:, 1]) <= bound)
            tmp_co = tmp_co[np.absolute(tmp_co[:, 0]) <= bound, :]
            tmp_co = tmp_co[np.absolute(tmp_co[:, 1]) <= bound, :]
            co_rel = np.concatenate((co_rel, tmp_co), axis=0)
            infos = np.concatenate((infos, info_list[mask]), axis=0)
            rot = np.concatenate((rot, d3[mask]), axis=0)
    else:
        for i in range(len2):
            #print(i)
            tmp_co = coo2[i, :] - coo1
            tmp_co = tmp_co[np.absolute(tmp_co[:, 0]) <= bound, :]
            tmp_co = tmp_co[np.absolute(tmp_co[:, 1]) <= bound, :]
            co_rel = np.concatenate((co_rel, tmp_co), axis=0)
            infos = np.concatenate(
                (infos, np.repeat(info_list[i], tmp_co.shape[0])), axis=0)
            rot = np.concatenate((rot, np.repeat(d3[i], tmp_co.shape[0])),
                                 axis=0)

    foc = wcs.sip_pix2foc(wcs.wcs_world2pix(co_rel[1:], 1), 1)
    H,xedges,yedges=np.histogram2d(foc[:,1]-0.5, foc[:,0]-0.5,\
                               bins=imsz, range=([ [0,imsz[0]],[0,imsz[1]] ]))

    t = np.percentile(H, 90)
    t = 500
    print 'threshold:{0}'.format(t)
    hp = H.copy()

    #plt.colorbar()

    #plt.plot(co_rel[:,0],co_rel[:,1], 'o', alpha=0.05)
    #plt.xlim(-0.005,0.005)
    #plt.ylim(-0.005,0.005)

    data = H.byteswap(True).newbyteorder()
    data = data.copy(order='C')
    data = data.byteswap(True).newbyteorder()
    c_data = c3.find_centroid(data, t)
    if c_data is not None:
        cy, cx, max_value, flux = c_data
        cy += 0.5
        cx += 0.5
        centroid = wcs.wcs_pix2world(wcs.sip_foc2pix([[cx, cy]], 1), 1)[0]
    else:
        centroid = [0., 0.]
        max_value = 0
        flux = 500
    if centroid[0] > 1:
        centroid[0] = centroid[0] - 360.
    #print 'max:{0}'.format(max_value)
    print hp.shape

    #plt.imshow(np.log2(hp+10**-10),interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal', extent=[0.02*3600, -0.02*3600, 0.02*3600, -0.02*3600], origin='upper', vmin=0)
    '''
  plt.imshow(hp+10**-10,interpolation='None', cmap=plt.get_cmap('Greys'), aspect='equal', extent=[0.02*3600, -0.02*3600, 0.02*3600, -0.02*3600], origin='upper', norm=LogNorm(10**0,np.max(hp)))  
  plt.colorbar()
  plt.xlim(-0.01*3600, 0.01*3600)
  plt.ylim(-0.01*3600, 0.01*3600)
  plt.ylabel('gb')
  plt.xlabel('gl')
  plt.axhline(y=0, color='b', linestyle='dashed', linewidth=1)
  plt.axvline(x=0, color='b', linestyle='dashed', linewidth=1)
  plt.plot(centroid[0]*3600,centroid[1]*3600,'+r', markersize=8)
  #plt.show()
  rot = np.mean(d3)/180.*np.pi

  l = np.linspace(0, 8., 5)
  x_y = np.sin(-rot)*l
  x_x = np.cos(-rot)*l
  y_y = np.sin(-rot+np.pi/2.)*l
  y_x = np.cos(-rot+np.pi/2.)*l

  plt.plot(x_x, x_y, '--g')
  plt.plot(y_x, y_y, '--g')


  co_rel = co_rel*3600
  mask = (co_rel[1:,0]**2+co_rel[1:,1]**2) <= (2.5**2)
  num = np.sum(mask)
  plt.title('t={0}-{1}s, photons within d=5\" circle:{2}'.format(idx/2-50, idx/2, num))

  plt.savefig('{0}/{1}.pdf'.format(outdir,idx))
  plt.clf()
  np.save('{0}/{1}.npy'.format(outdir,idx), co_rel)
  '''
    #co_rel = co_rel*3600
    xi, eta = gn.gnomfwd_simple(co_rel[1:, 0], co_rel[1:, 1], 0, 0, -rot[1:],
                                1 / 36000., 0)
    #co_radec = np.array([xi,eta]).T
    path = os.path.dirname('{0}/radec/test'.format(outdir))
    if not os.path.exists(path):
        os.makedirs(path)
    np.save('{0}/{1}.npy'.format(outdir, idx), co_rel * 3600)
    #np.save('{0}/radec/{1}.npy'.format(outdir, idx), co_radec)
    #np.save('{0}/info_{1}.npy'.format(outdir, idx), infos)
    '''
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,0], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('xa')
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/xa_{1}.png'.format(outdir, idx))
  plt.clf()
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,1], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('ya')
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/ya_{1}.png'.format(outdir, idx))
  plt.clf()
  plt.scatter(co_rel[1:,0], co_rel[1:,1], c=infos[1:,2], s=.5, alpha=0.3, cmap=plt.get_cmap('jet'), marker='o',edgecolors='face')
  cb1 = plt.colorbar()
  cb1.set_label('q')  
  plt.xlim(-0.02*3600, 0.02*3600)
  plt.ylim(-0.02*3600, 0.02*3600)
  plt.savefig('{0}/q_{1}.png'.format(outdir, idx), dpi=190)
  plt.clf()
  '''
    '''
  n, bins, patches = plt.hist(infos[1:,1], 30, normed=1, facecolor='green', alpha=0.5)
  plt.savefig('/home/dw1519/dw1519/galex/plots/co239_s/yahist_{0}.pdf'.format(idx), dpi=190)
  plt.clf()

  mask = (co_rel[:,0]<-25) & (co_rel[:,0]>-45) & (co_rel[:,1]>42) & (co_rel[:,1]<66)
  n, bins, patches = plt.hist(infos[mask,1], 30, normed=1, facecolor='green', alpha=0.5)
  plt.savefig('/home/dw1519/dw1519/galex/plots/co239_s/yahist_gh_{0}.pdf'.format(idx), dpi=190)
  plt.clf()
  '''

    return centroid, max_value, flux