示例#1
0
def zion(findstr, catfile, outstr, EXTEN=0):
    
    file_list = glob.glob(findstr)
    catData = np.loadtxt(catfile, skiprows=1)

    sort_idx = np.argsort(catData[:,0])
    catData = catData[sort_idx]

    for i in range(len(file_list)):
        print(file_list[i])
        hdu = pyfits.open(file_list[i])
        image = hdu[EXTEN].data
        imAngle = hdu[EXTEN].header['ANGLE']

        idx = np.where(catData[:,0] == imAngle)[0]
        radius = np.average(catData[:,3][idx])
        width = np.average(catData[:,4][idx])

        cent = ADE.centroid(image)
        dims = image.shape

        imRad = radius + width

        cutIm = image[cent[0] - imRad:cent[0] + imRad,\
                          cent[1] - imRad:cent[1] + imRad]

        bigIm = pl.imresize(cutIm, (1028,1028))

        frameNumber = idx[0]
 
        name = str(frameNumber).zfill(3)+'_'+str(imAngle)+outstr+'.fits'

        if len(glob.glob(name)) == 0: pyfits.PrimaryHDU(bigIm).writeto(name)

    return
示例#2
0
def get_stats():

    level_list = [4,5,6,7,8,9,10,11,12]
    
    fits_vals = np.array([])
    fits_err = np.array([])
    
    for level in level_list:
        
        fits_list = glob.glob('PD_{}_*_ds.fits'.format(level))
        
        imarray = np.array([])
        
        for image in fits_list:
            print image
            data = pyfits.open(image)[0].data
            
            center = ADE.centroid(data)
            dist = ADE.dist_gen(data,center) * 0.024
            idx = np.where(dist < 6.75)
            fits_data = data[idx]

            imarray = np.append(imarray,np.mean(fits_data))
            
        fits_vals = np.append(fits_vals,np.mean(imarray))
        fits_err = np.append(fits_err,np.std(imarray))

    return fits_vals, fits_err
示例#3
0
def gen_resp():

#    level_list = [4,5,6,7,8,9,10,11,12]
    level_list = [1,2,3,4,5,6,7]
   
    PD_vals = np.array([])
    fits_vals = np.array([])

    PD_err = np.array([])
    fits_err = np.array([])

    for level in level_list:

        PD_signal = np.loadtxt('PD_{}.txt'.format(level),usecols=(1,),unpack=True)
        fits_raw = pyfits.open('PD_{}_FINAL.fits'.format(level))[0].data

        center = ADE.centroid(fits_raw)
        dist = ADE.dist_gen(fits_raw,center) * 0.024
        idx = np.where(dist < 6.75)
        fits_data = fits_raw[idx]

        PD_vals = np.append(PD_vals,np.mean(PD_signal))
        PD_err = np.append(PD_err,np.std(PD_signal))

        fits_vals = np.append(fits_vals,np.mean(fits_data))
        fits_err = np.append(fits_err,np.std(fits_data))

    level_vec = np.array(level_list)/12.
    fig = plt.figure()
    ax1 = fig.add_subplot(211)

    PD_plot = PD_vals/PD_vals[-1]
    PD_err_plot = PD_err/PD_vals[-1]

    fits_plot = fits_vals/fits_vals[-1]
    fits_err_plot = fits_err/fits_vals[-1]

#    ax1.errorbar(PD_vals,fits_vals,xerr=PD_err,yerr=fits_err,linestyle='x')
    ax1.plot(fits_vals,PD_vals,'.')
    # ax1.axhline(y=95693.7799/2,linestyle=':')
    # ax1.text(1.,95000,'Full Well')

    ax1.set_ylabel('PD Voltage')
    ax1.set_xlabel('CCD Mean Counts')
    # ax1.set_xscale('log')
    # ax1.set_yscale('log')

    ax2 = fig.add_subplot(212)
    ax2.plot(fits_vals,fits_vals/PD_vals,'.')
    ax2.set_xlabel('CCD Mean Counts')
    ax2.set_ylabel('CCD/PD')
    # ax2.set_xscale('log')
    # ax2.set_yscale('log')

    fig.show()

    return level_vec, fits_vals, fits_err, PD_vals, PD_err
示例#4
0
def jump_test(inifile):
    ''' to be run in /d/monk/eigenbrot/MANGA/20121015 '''

    options = ConfigParser()
    options.read(inifile)

    finald = []
    
    for d in ['d1','d2','d3','d4']:
        nood = N(options)
        nood.get_darks()
        nood.fill_dict(d,nood.direct)
        nood.sub_darks(nood.direct)
        nood.ratios = {'direct': {'data': {'V':{}}}}
        nood.direct_to_ratios(nood.direct)
        nood.combine()
        finald.append(nood.ratios['direct']['data']['V']['direct']['final'])
        os.system('rm *_ds.fits')
    
    print "reduction finished"

    countarr = np.array([])
    voltarr = np.array([])

    pot = thePot(options)

    for image in finald:
        
        hdu = pyfits.open(image)[0]
        fits_raw = hdu.data

        center = ADE.centroid(fits_raw)
        dist = ADE.dist_gen(fits_raw,center) * 0.024
        idx = np.where(dist < 6.75)
        fits_data = fits_raw[idx]
        countarr = np.append(countarr,np.mean(fits_data))
        
        stime = hdu.header['STARTIME']
        etime = hdu.header['ENDTIME']
        voltage = pot.get_voltage(stime,etime,'V')
        voltarr = np.append(voltarr,voltage)

    print "\nImage  :{:>15}{:>15}{:>15}{:>15}\nCounts :{:15.3E}{:15.3E}{:15.3E}{:15.3E}\nVoltage:{:15.2f}{:15.2f}{:15.2f}{:15.2f}".format(*finald+countarr.tolist()+voltarr.tolist())
    print "-"*(4*15+8)
    print "Ratio  :{:15.3E}{:15.3E}{:15.3E}{:15.3E}\n".format(*(countarr/voltarr).tolist())

    return countarr, voltarr, countarr/voltarr
示例#5
0
def cent_test(data,phi,dp,sp,pixelsize):
    '''
    Description:
        cent_test really trys hard to find the center of a ring image that
        has been disorted because it is on a screen. It uses your favorite
        non-derivative minimization algorithm to find where the FWHM of the
        annulized ring is smallest. The logic here is that as we go off center
        the FWHM gets larger because each TRUE ring annulus is sampled at a
        few differet radii. The reason we can't use a trasform produced by 
        metatron is that the transform itself is heavily dependant on knowing 
        the correct center.

    Inputs:
        data - ndarray
               The ring data
        phi  - Float
               The angle between the detector normal and the screen normal,
               in radians.
        dp   - Float
               The distance from the screen center to the front glass of the
               camera lens, in millimeters.
        sp   - Float
               The image distance of the lense, in millimeters.

    Output:
        A tuple containing the x and y coordinates of the best fit center,
        in pixel units.
    '''
    
    'a centroid is still a good starting point'
    cent = ADE.centroid(data)

    if debug: print "initial center: "+str(cent[0])+','+str(cent[1])

    '''here is where the actual minimization happens, the values for xtol 
    and ftol were chosen with speed in mind (also, we don't really need 
    precision to better than 0.1 pixels).'''
    lstsq = spo.fmin_powell(func,np.array([cent[0],cent[1]])\
                                ,args=(data,phi,dp,sp,pixelsize)\
                                ,xtol=0.01,ftol=0.01)

    return lstsq
示例#6
0
def disc2rings(image,angles):

    HDU = pyfits.open(image)[0]
    data = np.float32(HDU.data)
    FL = HDU.header['FOCALLEN']
    print FL
    dims = data.shape

    cent = ADE.centroid(data)
    dist = ADE.dist_gen(data,cent)
    
    ring_stack = np.zeros((1,dims[0],dims[1]),dtype=np.float32)

    sangles = np.sort(angles)
    sangles *= np.pi/180

    for i in range(sangles.size):

        r_mid = FL*np.tan(sangles[i])/24e-3

        if i == 0: r0_mid = -1*FL*np.tan(sangles[i])/24e-3
        else: r0_mid = FL*np.tan(sangles[i-1])/24e-3

        try:r2_mid = FL*np.tan(sangles[i+1])/24e-3
        except IndexError:r2_mid = r_mid + (r_mid - r0_mid)
        
        r1 = (r_mid + r0_mid)/2
        r2 = (r_mid + r2_mid)/2

        print r1, r2, r2 - r1

        idx = np.where((dist > r1) & (dist <= r2))

        temp = np.zeros(dims,dtype=np.float32)
        temp[idx] = data[idx]
        ring_stack = np.vstack((ring_stack,np.array([temp])))

    return ring_stack[1:]
示例#7
0
    return np.array([rarr,outarr,stdarr])

@jit(argtypes=[int16],restype=float32[:])
def test(num):
    
    l = np.array([],dtype=np.float32)
    for i in range(num):
        l = np.append(l,i)
    
#    x = np.array(l,dtype=np.float32)
    return l

print 'Running test...'
data = pyfits.open('scratch/test.fits')['SB'].data
ddata = np.array(data,dtype=np.float32)
cent = ADE.centroid(ddata)
dist = ADE.dist_gen(ddata,cent)

at1 = time.time()
aderes = ADE.annulize(ddata,300)
at2 = time.time()

nt1 = time.time()
nres = numba_cent(ddata,dist,dist.max(),300)
nt2 = time.time()

print np.mean(nres - aderes,axis=1)
print np.std(nres - aderes,axis=1)

print 'ADE time was: {:4.5f} s\nNumba time was: {:4.5f} s'.format(at2 - at1, nt2-nt1)