示例#1
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
示例#2
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
示例#3
0
def metatron(data, center,  phi, dp, sp, pixelsize):
    '''
    Description:
        metatron uses the relevant physical parameters from the laser bench
        setup and computes a transform that goes from the detector plane
        (what we measure) to the screen plane (what we want to measure).
        It is a helper function only intended to be called by fat_angel.

    Inputs:
        data      - ndarray
                    The data to be transformed. This is only used to make 
                    sure the transform has the right dimensions.
        center    - Tuple
                    The center of the ring in pixels
        phi       - Float
                    The angle between the detector normal and the screen normal
                    in radians.
        dp        - Float
                    The distance from the center of the screen to the front 
                    glass of the camera lens, in millimeters.
        sp        - Float
                    The image distance given the object distance and lens focal
                    length, in millimeters.
        pixelsize - Float
                    The size of the detector pixels, in microns.

    Output:
        The output is a ndarray that contains the real physical distance of
        each pixel from the center of the ring at the SCREEN PLANE. In other 
        words, all the pixels of the same value correspond to a perfect 
        circle on the screen.
    '''

    '''first get the distances in the detector plane'''
    r = ADE.dist_gen(data,center)*pixelsize
    alpha = ADE.angle_gen(data,center)

    '''now transform. See my notebook pages 101-103 for an explanation'''
#    den = sp**2*(np.cos(2*alpha) - 2*np.cos(alpha)**2*np.cos(2*phi))\
#        + 4*r**2 - 3*sp**2
#    bignum = 2*dp*r*(\
#        (sp-r)*(sp+r)\
#            *(3 + np.cos(2*phi) - 2*np.cos(2*alpha)*np.sin(phi)**2)\
#            )**0.5
#    t_dist = (4*dp*r**2*np.cos(alpha)*np.sin(phi) - bignum)/den

    den = sp*(np.cos(alpha)**2*np.cos(phi)**2 + np.sin(alpha)**2)**0.5 \
        + r*np.cos(alpha)*np.sin(phi)

    t_dist = dp*r/den
    
    return t_dist
示例#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 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:]
示例#6
0
@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)