コード例 #1
0
def phot_sources(img, ota, fwhm):
    """
    Run IRAF phot on the the sources found.
    """
    iraf.ptools(_doprint=0)
    # values determined by ralf/daniel @ wiyn
    kg = 0.20
    kr = 0.12
    ki = 0.058

    image = odi.reprojpath+'reproj_'+ota+'.'+str(img[16:])
    coords = odi.sourcepath+'source_'+ota+'.'+str(img[16:-5])+'.xy'
    output = odi.sourcepath+img[0:-5]+'.'+ota+'.phot.1'
    phot_tbl = odi.sourcepath+img[0:-5]+'.'+ota+'.sourcephot'

    # alas, we must use IRAF apphot to do the measuring
    # first set common parameters (these shouldn't change if you're using ODI)
    iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive',"no")
    iraf.apphot.phot.setParam('verify',"no")
    iraf.datapars.setParam('datamax',50000.)
    iraf.datapars.setParam('gain',"gain")
    iraf.datapars.setParam('ccdread',"rdnoise")
    iraf.datapars.setParam('exposure',"exptime")

    iraf.datapars.setParam('filter',"filter")
    iraf.datapars.setParam('obstime',"time-obs")
    iraf.datapars.setParam('sigma',"INDEF")
    iraf.photpars.setParam('zmag',0.)
    iraf.centerpars.setParam('cbox',9.)
    iraf.centerpars.setParam('maxshift',3.)
    iraf.fitskypars.setParam('salgorithm',"median")
    iraf.fitskypars.setParam('dannulus',10.)

    iraf.datapars.setParam('airmass','airmass')
    iraf.datapars.setParam('fwhmpsf',fwhm)
    iraf.photpars.setParam('apertures',5.*fwhm) # use a big aperture for this
    iraf.fitskypars.setParam('annulus',6.*fwhm)

    if not os.path.isfile(output):
        iraf.apphot.phot(image=image, coords=coords, output=output)
    with open(phot_tbl,'w+') as txdump_out :
        iraf.ptools.txdump(textfiles=output, fields="id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,peak,flux,image", expr='yes', headers='no', Stdout=txdump_out)
    outputfile_clean = open(phot_tbl.replace('.sourcephot','_clean.sourcephot'),"w")
    for line in open(phot_tbl,"r"):
        if not 'INDEF' in line:
            outputfile_clean.write(line)
        if 'INDEF' in line:
            outputfile_clean.write(line.replace('INDEF','999'))
    outputfile_clean.close()
    os.rename(phot_tbl.replace('.sourcephot','_clean.sourcephot'),phot_tbl)
    return phot_tbl
コード例 #2
0
def doPhot():
	print 'Running doPhot'
	try:
		mapFile = open('map.dat')
	except:
		print 'map.dat not found. Exiting.'
		sys.exit()
	try:
		changeFile = open('change.dat')
	except:
		print 'change.dat not found. Exiting.'
		sys.exit()

	coordList = list()
	for line in mapFile:
		coords = map(float,line.split())
		coordList.append(coords)
	coordList = np.array(coordList)

	iraf.noao()
	iraf.digiphot()
	iraf.daophot()
	iraf.ptools()
	iraf.set(clobber='yes')
	
	photFile = open('phot.dat', 'w')
	for line in changeFile.readlines():
		elms = line.split()
		imageName = elms[0]
		changeCoords = np.array([float(elms[1]),float(elms[2])])
		newCoords = coordList + changeCoords
		print 'Image: '+imageName
		coordFile = makeCoordFile(newCoords)
		
		iraf.noao.digiphot.daophot.phot(image=imagesDir+imageName, coords=coordFile, output='.temp-phot', skyfile='', verify='no', fwhmpsf=fwhmpsf, sigma=sigma, readnoise=readnoise, epadu=epadu, exposure=exposureHeader, obstime=obstimeHeader, calgorithm=calgorithm, cbox=cbox, apertures=apertures, annulus=annulus, dannulus=dannulus)

		result = iraf.noao.digiphot.ptools.txdump(Stdout=1, textfiles='.temp-phot', fields='mag, merr, otime', expr='yes')
		writeString = result[0].split()[-1] +' '+ ' '.join([' '.join(x.split()[:2]) for x in result])
		photFile.write(writeString+"\n")
		
	photFile.close()
	raw_input('doPhot Done. Hit return key to continue.')
コード例 #3
0
ファイル: full_phot.py プロジェクト: sjanowiecki/odi-tools
def phot_sources_full(img,fwhm,airmass,apfactor):
    iraf.ptools(_doprint=0)
    coords = img[:-5]+'_sources.coo'
    output = img[:-5]+'.phot.1'
    phot_tbl = img[:-5]+'.srcphot'
    if not os.path.isfile(phot_tbl) :
        print 'phot-ing ', img, ' from daofind'
        iraf.unlearn(iraf.apphot.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
        iraf.apphot.phot.setParam('interactive',"no")
        iraf.apphot.phot.setParam('verify',"no")
        iraf.datapars.setParam('datamax',50000.)
        iraf.datapars.setParam('gain',"gain")
        iraf.datapars.setParam('ccdread','rdnoise')
        iraf.datapars.setParam('exposure',"exptime")
        iraf.datapars.setParam('xairmass',airmass)
        iraf.datapars.setParam('filter',"filter")
        iraf.datapars.setParam('obstime',"time-obs")
        iraf.datapars.setParam('sigma',"INDEF")
        iraf.photpars.setParam('zmag',0.)
        iraf.centerpars.setParam('cbox',9.)
        iraf.centerpars.setParam('maxshift',3.)
        iraf.fitskypars.setParam('salgorithm',"median")
        iraf.fitskypars.setParam('dannulus',10.)

        iraf.datapars.setParam('fwhmpsf',fwhm)
        iraf.photpars.setParam('apertures',apfactor*fwhm)
        iraf.fitskypars.setParam('annulus',6.5*fwhm)

        iraf.apphot.phot(image=img, coords=coords, output=output)

        with open(phot_tbl,'w+') as txdump_out:
            iraf.ptools.txdump(textfiles=output, fields="id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,image",expr='yes', headers='no', Stdout=txdump_out)

        outputfile_clean = open(phot_tbl.replace('.srcphot','_clean.srcphot'),"w")
        for line in open(phot_tbl,"r"):
            if not 'INDEF' in line:
                outputfile_clean.write(line)
            if 'INDEF' in line:
                outputfile_clean.write(line.replace('INDEF','999'))
        outputfile_clean.close()
        os.rename(phot_tbl.replace('.srcphot','_clean.srcphot'),phot_tbl)
コード例 #4
0
           12.139, 1.000, 0.537, 0.477, 1.014, 0.011, 0.012, 0.023, 0.013,
           0.012, 0.018
       ],
       [
           11.267, 1.076, 0.571, 0.508, 1.079, 0.011, 0.012, 0.028, 0.011,
           0.013, 0.017
       ]]

# ------------------------------------------------------------------------------------------------------------------- #

# ------------------------------------------------------------------------------------------------------------------- #
# Load Required IRAF Packages
# ------------------------------------------------------------------------------------------------------------------- #
iraf.noao(_doprint=0)
iraf.digiphot(_doprint=0)
iraf.ptools(_doprint=0)
# ------------------------------------------------------------------------------------------------------------------- #

# ------------------------------------------------------------------------------------------------------------------- #
# Functions For Handling Files & Lists
# ------------------------------------------------------------------------------------------------------------------- #


def remove_file(file_name):
    """
    Removes the file 'file_name' in the constituent directory.
    Args:
         file_name  : Name of the file to be removed from the current directory
    Returns:
        None
    """
コード例 #5
0
def escut(image, pos_file, fwhm, peak):
    # input image file name, file name with matched source positions, **np.array of fwhm measurements for each source
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import stats
    from pyraf import iraf
    # import sewpy
    import os
    from matplotlib.path import Path

    iraf.images(_doprint=0)
    iraf.tv(_doprint=0)
    iraf.ptools(_doprint=0)
    iraf.noao(_doprint=0)
    iraf.digiphot(_doprint=0)
    iraf.photcal(_doprint=0)
    iraf.apphot(_doprint=0)
    iraf.imutil(_doprint=0)

    iraf.unlearn(iraf.phot, iraf.datapars, iraf.photpars, iraf.centerpars,
                 iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive', "no")
    iraf.apphot.phot.setParam('verify', "no")
    iraf.datapars.setParam('datamax', 50000.)
    iraf.datapars.setParam('gain', "gain")
    iraf.datapars.setParam('ccdread', "rdnoise")
    iraf.datapars.setParam('exposure', "exptime")
    iraf.datapars.setParam('airmass', "airmass")
    iraf.datapars.setParam('filter', "filter")
    iraf.datapars.setParam('obstime', "time-obs")
    # iraf.datapars.setParam('obstime',"date-obs")
    iraf.datapars.setParam('sigma', "INDEF")
    iraf.photpars.setParam('zmag', 0.)
    iraf.centerpars.setParam('cbox', 9.)
    iraf.centerpars.setParam('maxshift', 3.)
    iraf.fitskypars.setParam('salgorithm', "median")
    iraf.fitskypars.setParam('dannulus', 10.)

    # clean up the indefs so we can actually do stats, but reassign them to 99999 so we don't lose track of things
    # keep a separate list without them to do the median (we need floats)
    indefs = np.where(fwhm == 'INDEF')
    good = np.where(fwhm != 'INDEF')
    fwhm[indefs] = 99.999
    fwhm = fwhm.astype(float)
    fwhm_good = fwhm[good].astype(float)

    indefs = np.where(peak == 'INDEF')
    peak[indefs] = -999.999
    peak = peak.astype(float)
    peak_good = peak[good].astype(float)

    if not os.path.isfile(image[0:-5] + '.txdump'):
        # findavgfwhm = sewpy.SEW(
        #     params = ["X_IMAGE", "Y_IMAGE", "FWHM_IMAGE", "FLAGS"],
        #     config = {"DETECT_THRESH":200.0},
        #     sexpath = "sex"
        # )
        #
        # out = findavgfwhm(image)["table"]
        #
        # fwhms = out['FWHM_IMAGE'] # This is an astropy table.
        # flags = out['FLAGS']

        # get a really rough estimate of the stellar FWHM in the image to set apertures

        # use the input fwhm measurement
        # ap1x = fwhm_est

        # xpos = datatable['X_IMAGE']
        # ypos = datatable['Y_IMAGE']
        # fwhm = datatable['FWHM_IMAGE']
        # flags = datatable['FLAGS']
        # idno = datatable['NUMBER']
        ap1x = np.median(
            fwhm_good
        )  # only use isolated detections of stars, this is the 1x aperture
        # print ap1x
        ap2x = 2.0 * ap1x

        # these = [ i for i,id in enumerate(idno) if (flags[i] == 0)]

        # with open(image[0:-5]+'.escut.pos','w+') as f:
        #     for j in range(len(xpos)):
        #         print >> f, xpos[j], ypos[j], fwhm[j], idno[j]

        iraf.datapars.setParam('fwhmpsf', ap1x)
        iraf.photpars.setParam('apertures', repr(ap1x) + ', ' + repr(ap2x))
        iraf.fitskypars.setParam('annulus', 4. * ap1x)
        iraf.apphot.phot(image=image,
                         coords=pos_file,
                         output=image[0:-5] + '.phot')
        with open(image[0:-5] + '.txdump', 'w+') as txdump_out:
            iraf.ptools.txdump(
                textfiles=image[0:-5] + '.phot',
                fields=
                "id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,image",
                expr=
                'MAG[1] != INDEF && MERR[1] != INDEF && MAG[2] != INDEF && MERR[2] != INDEF',
                headers='no',
                Stdout=txdump_out)

    mag1x, mag2x = np.loadtxt(image[0:-5] + '.txdump',
                              usecols=(1, 2),
                              unpack=True)
    iraf_id = np.loadtxt(image[0:-5] + '.txdump',
                         usecols=(0, ),
                         dtype=int,
                         unpack=True)
    # idno = np.loadtxt(image[0:-5]+'.escut.pos', usecols=(3,), dtype=int, unpack=True)
    xpos, ypos = np.loadtxt(pos_file, usecols=(0, 1), unpack=True)

    keepIndex = iraf_id - 1

    xpos, ypos, fwhm, peak = xpos[keepIndex], ypos[keepIndex], fwhm[
        keepIndex], peak[keepIndex]

    # print idno.size, iraf_id.size, xpos.size

    diff = mag2x - mag1x

    diffCut = diff
    magCut = mag2x
    xCut = xpos  #[good]
    yCut = ypos  #[good]
    idCut = iraf_id
    fwhmCut = fwhm  #_good
    peakCut = peak

    print(peakCut.size, magCut.size, diffCut.size)

    print(diffCut.size, 0, np.median(diffCut), diffCut.std())
    nRemoved = 1

    # plt.clf()
    # plt.scatter(peakCut, magCut, edgecolor='none')
    # plt.savefig('peaktest.pdf')

    plt.clf()
    # plt.hlines(bin_edges, -2, 1, colors='red', linestyle='dashed')
    plt.scatter(diff, mag2x, edgecolor='none', facecolor='black', s=4)
    # plt.scatter(diffCut, magCut, edgecolor='none', facecolor='blue', s=4)
    magdiff = list(
        zip(magCut.tolist(), diffCut.tolist(), peakCut.tolist(),
            idCut.tolist()))
    dtype = [('mag', float), ('diff', float), ('peak', float), ('id', int)]
    magdiff = np.array(magdiff, dtype=dtype)

    magSort = np.sort(magdiff, order='peak')

    peakRange = (magSort['peak'] > 20000.0) & (magSort['peak'] < 40000.0)
    peakVal = np.median((magSort['diff'])[np.where(peakRange)])
    # peakVal = np.median(diffCut)
    print(peakVal)

    plt.scatter((magSort['diff'])[np.where(peakRange)],
                (magSort['mag'])[np.where(peakRange)],
                edgecolor='none',
                facecolor='blue',
                s=4)

    while nRemoved != 0:
        nBefore = diffCut.size
        diffCheck = np.where(
            abs(peakVal - diffCut) < 2.0 *
            diffCut.std())  #[i for i,d in enumerate(diff) if (-0.5 < d < 0.0)]

        #
        diffCut = diffCut[diffCheck]
        nRemoved = nBefore - diffCut.size
        magCut = magCut[diffCheck]
        xCut = xCut[diffCheck]
        yCut = yCut[diffCheck]
        idCut = idCut[diffCheck]
        fwhmCut = fwhmCut[diffCheck]
        print(diffCut.size, nRemoved, np.median(diffCut), diffCut.std())
        if 0.05 < diffCut.std() < 0.06:
            nRemoved = 0
        # plt.fill_betweenx(bin_centers, bin_meds+3.0*bin_stds, bin_meds-3.0*bin_stds, facecolor='red', edgecolor='none', alpha=0.4, label='2x RMS sigma clipping region')

    # with open('escutSTD_i.pos','w+') as f:
    #     for i,blah in enumerate(xCut):
    #         print >> f, xCut[i], yCut[i], diffCut[i]

    bin_meds, bin_edges, binnumber = stats.binned_statistic(magCut,
                                                            diffCut,
                                                            statistic='median',
                                                            bins=24,
                                                            range=(-12, 0))
    bin_stds, bin_edges, binnumber = stats.binned_statistic(magCut,
                                                            diffCut,
                                                            statistic=np.std,
                                                            bins=24,
                                                            range=(-12, 0))
    bin_width = (bin_edges[1] - bin_edges[0])
    bin_centers = bin_edges[1:] - bin_width / 2
    # print bin_meds, bin_stds
    bin_hw = np.zeros_like(bin_stds)
    for i, bin_std in enumerate(bin_stds):
        if bin_std > 0.025:
            bin_hw[i] = 3.0 * bin_std
        else:
            bin_hw[i] = 0.075

    # print len(binnumber)
    # for i,bin_hwi in enumerate(bin_hw):

    left_edge = np.array(list(zip(peakVal - bin_hw, bin_centers)))
    right_edge = np.flipud(np.array(list(zip(peakVal + bin_hw, bin_centers))))
    # print left_edge, right_edge
    verts = np.vstack((left_edge, right_edge))
    # print verts
    # verts = np.delete(verts, np.array([0,1,2,22,23,24,25,45,46,47]), axis=0)

    # DON'T USE A PATH BECAUSE APPARENTLY IT CAN SELECT THE INVERSE SET!! WTF
    # print verts
    esRegion = Path(verts)
    sources = esRegion.contains_points(list(zip(diff, mag2x)))
    # print sources

    with open('escutREG_i.pos', 'w+') as f:
        for i, blah in enumerate(xpos[sources]):
            print((xpos[sources])[i], (ypos[sources])[i], (diff[sources])[i],
                  file=f)

    magCut2 = mag2x[sources]
    magCut1 = mag1x[sources]
    fwhmCut = fwhm[sources]
    xCut = xpos[sources]
    yCut = ypos[sources]
    diffCut = diff[sources]

    # find the sources that are in the std method but not the region method
    # print idCut, idno[sources]
    # extrasSTD = np.setdiff1d(idno[sources], idCut)
    # print extrasSTD.size
    # print extrasSTD
    # with open('escutUNIQUE.pos','w+') as f:
    #     for i,blah in enumerate(extrasSTD):
    #         print >> f, xpos[blah-1], ypos[blah-1]

    # fwhmcheck = np.loadtxt('testfwhmREG.log', usecols=(10,), unpack=True)
    fwhmchk2 = np.where((magCut2 < -4) & (fwhmCut < 90.0))
    print(np.median(fwhmCut[fwhmchk2]), np.std(fwhmCut[fwhmchk2]))
    fwchk = np.where(
        np.abs(fwhmCut - np.median(fwhmCut[fwhmchk2])) > 10.0 *
        np.std(fwhmCut[fwhmchk2]))
    drop = np.abs(fwhmCut - np.median(fwhmCut[fwhmchk2])) > 10.0 * np.std(
        fwhmCut[fwhmchk2])
    keep = np.abs(fwhmCut - np.median(fwhmCut[fwhmchk2])) <= 10.0 * np.std(
        fwhmCut[fwhmchk2])

    with open('escutVBAD_i.pos', 'w+') as f:
        for i, blah in enumerate(xCut[fwchk]):
            print((xCut[fwchk])[i], (yCut[fwchk])[i], file=f)

    with open('escut_i.pos', 'w+') as f:
        for i, blah in enumerate(xCut):
            if not drop[i]:
                print(xCut[i],
                      yCut[i],
                      magCut2[i],
                      fwhmCut[i],
                      magCut1[i],
                      file=f)

    with open('escut_g.pos', 'w+') as f:
        for i, blah in enumerate(xCut):
            if not drop[i]:
                print(xCut[i],
                      yCut[i],
                      magCut2[i],
                      fwhmCut[i],
                      magCut1[i],
                      file=f)

    plt.fill_betweenx(bin_centers,
                      peakVal + bin_hw,
                      peakVal - bin_hw,
                      facecolor='red',
                      edgecolor='none',
                      alpha=0.4,
                      label='2x RMS sigma clipping region')

    plt.scatter(diffCut[fwchk],
                magCut2[fwchk],
                edgecolor='none',
                facecolor='red',
                s=4)
    plt.ylim(0, -12)
    plt.xlabel('$m_{2x} - m_{1x}$')
    plt.ylabel('$m_{2x}$')
    plt.xlim(-2, 1)
    plt.savefig('testmagiraf.pdf')

    plt.clf()
    plt.scatter(magCut2, fwhmCut, edgecolor='none', facecolor='black')
    plt.scatter(magCut2[fwchk],
                fwhmCut[fwchk],
                edgecolor='none',
                facecolor='red')
    plt.hlines([np.median(fwhmCut)], -12, 0, colors='red', linestyle='dashed')
    plt.hlines([
        np.median(fwhmCut) + fwhmCut.std(),
        np.median(fwhmCut) - fwhmCut.std()
    ],
               -12,
               0,
               colors='red',
               linestyle='dotted')
    plt.ylim(0, 20)
    plt.xlim(-12, 0)
    plt.ylabel('fwhm')
    plt.xlabel('$m_{2x}$')
    plt.savefig('fwhmcheck.pdf')

    return fwhmCut[keep]
コード例 #6
0
ファイル: zeropoint.py プロジェクト: sjanowiecki/odi-tools
def zeropoint_ota(img, ota, fwhm):
    iraf.ptools(_doprint=0)
    # otaext = {'33':1,'34':2,'44':3,'43':4,'42':5,'32':6,'22':7,'23':8,'24':9}
    # values determined by ralf/daniel @ wiyn
    kg = 0.20
    kr = 0.12
    ki = 0.058

    # first grab the header and hang on to it so we can use other values
    # hdulist = ast.io.fits.open(img)
    # hdr = hdulist[ota].header
    # hdulist.close()

    image = odi.reprojpath+'reproj_'+ota+'.'+str(img[16:])
    coords = odi.coordspath+'reproj_'+ota+'.'+str(img[16:-5])+'.sdssxy'
    output = odi.coordspath+img[0:-5]+'.'+ota+'.phot.1'
    phot_tbl = odi.coordspath+img[0:-5]+'.'+ota+'.sdssphot'

    # alas, we must use IRAF apphot to do the measuring
    # first set common parameters (these shouldn't change if you're using ODI)
    iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive',"no")
    iraf.apphot.phot.setParam('verify',"no")
    iraf.datapars.setParam('datamax',50000.)
    iraf.datapars.setParam('gain',"gain")
    iraf.datapars.setParam('ccdread',"rdnoise")
    iraf.datapars.setParam('exposure',"exptime")

    iraf.datapars.setParam('filter',"filter")
    iraf.datapars.setParam('obstime',"time-obs")
    iraf.datapars.setParam('sigma',"INDEF")
    iraf.photpars.setParam('zmag',0.)
    iraf.centerpars.setParam('cbox',9.)
    iraf.centerpars.setParam('maxshift',3.)
    iraf.fitskypars.setParam('salgorithm',"median")
    iraf.fitskypars.setParam('dannulus',10.)

    iraf.datapars.setParam('airmass','airmass')
    iraf.datapars.setParam('fwhmpsf',fwhm)
    iraf.photpars.setParam('apertures',3.*fwhm) # use a big aperture for this
    iraf.fitskypars.setParam('annulus',4.*fwhm)

    if not os.path.isfile(output):
        iraf.apphot.phot(image=image, coords=coords, output=output)
    with open(phot_tbl,'w+') as txdump_out :
        iraf.ptools.txdump(textfiles=output, fields="id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,peak,flux,image", expr='yes', headers='no', Stdout=txdump_out)
    
    outputfile_clean = open(phot_tbl.replace('.sdssphot','_clean.sdssphot'),"w")
    for line in open(phot_tbl,"r"):
        if not 'INDEF' in line:
            outputfile_clean.write(line)
        if 'INDEF' in line:
            outputfile_clean.write(line.replace('INDEF','999'))
    outputfile_clean.close()
    os.rename(phot_tbl.replace('.sdssphot','_clean.sdssphot'),phot_tbl)
    
    gMAG, gMERR, gSKY, gSERR, gRAPERT, gXPOS, gYPOS = np.loadtxt(phot_tbl, usecols=(1,2,3,4,5,6,7), dtype=float, unpack=True)
    gXAIRMASS = np.loadtxt(phot_tbl, usecols=(9,), dtype=float, unpack=True)
    gFILTER = np.loadtxt(phot_tbl, usecols=(8,), dtype=str, unpack=True)
    gID = np.loadtxt(phot_tbl, usecols=(0,), dtype=int, unpack=True)

    # keep the actual ID number to select from SDSS stars
    keep = gID - 1

    # read in the catalog values
    x, y, ra, dec, u, ue, g, ge, r, re, i, ie, z, ze = np.loadtxt(coords, usecols=(0,1,2,3,4,5,6,7,8,9,10,11,12,13), unpack=True)

    # pick out the ones that match the good phot stars
    g, ge, r, re, i, ie = np.array(g[keep]), np.array(ge[keep]), np.array(r[keep]), np.array(re[keep]), np.array(i[keep]), np.array(ie[keep])

    # and reduce the other vectors
    # gXPOS, gYPOS, gMAG, gMERR, gSKY, gSERR = np.array(gXPOS[keep]), np.array(gYPOS[keep]), np.array(gMAG[keep]), np.array(gMERR[keep]), np.array(gSKY[keep]), np.array(gSERR[keep])

    gXAIRMASS = gXAIRMASS[0]
    gRAPERT = gRAPERT[0]

    #podicut, sdsscut = 0.01, 0.03
    podicut, sdsscut = 0.01, 0.10
    # pick the right airmass extinction coefficient
    kdict = {'odi_g':kg, 'odi_r':kr, 'odi_i':ki}
    mdict = {'odi_g':g, 'odi_r':r, 'odi_i':i}
    k = kdict[gFILTER[0]]
    mag_cat = mdict[gFILTER[0]]
    g0 = gMAG - k*gXAIRMASS
    zp = mag_cat - g0
    color = g - r
    errcut = [j for j in range(len(gMERR)) if (gMERR[j] < podicut and ge[j] < sdsscut)]
    if len(g0[errcut]) < 5:
        print 'Too few stars for fit..'
        return 999.999, 999.999, phot_tbl
    else:
        print 'fitting wtih '+repr(len(g0[errcut]))+' stars...'
        
        # fit zero point
        # linear lsq with numpy.polyfit
        p, pcov = np.polyfit(color[errcut], zp[errcut], 1, cov=True)
        perr = np.sqrt(np.diag(pcov))
        eps_g, zp_g, std_eps_g, std_zp_g = p[0], p[1], perr[0], perr[1]
        
        print '--------------------------------------------------------------------------'
        print 'Here are the fit values:'
        print 'eps  '+'      std_eps  '+'  zp  '+'         std_zp'
        print '{0:10.7f} {1:10.7f} {2:10.7f} {3:10.7f}'.format(eps_g, std_eps_g, zp_g, std_zp_g)
        star_zp_g = zp - eps_g*color
        print 'std. dev. in ZP per star (not fit): {0:10.7f}'.format(np.std(star_zp_g[errcut]))
        # for i in range(len(zp)):
        #     print color[i], zp[i], gMERR[i], ge[i]
        
        print np.median(star_zp_g[errcut]), np.std(star_zp_g[errcut])
        return np.median(star_zp_g[errcut]), np.std(star_zp_g[errcut]), phot_tbl
コード例 #7
0
#/usr/bin/python/

#just like in IRAF, packages must be loaded

import sys, os, shutil, signal, math, types
from numpy import *
import pdb # python debugger

#numpy is the NUMber PYthon package that can do array math

from pyraf import iraf #,irafglobals
iraf.images()
iraf.imutil()
iraf.noao()
iraf.digiphot()
iraf.ptools()
iraf.daophot()

from easy_phot_params import *
#this loads all of the variables defined in easy_phot_params

def stringtohours(str):
    hrs,mins,secs = map(float,str.split(":"))
    return hrs+mins/60. + secs/3600.

def execute():

    #here we define the coords variable as a list
    coords=[]

    #indenting matters in python. Everything
コード例 #8
0
def main(argv):
	home_root = os.environ['HOME']
	iraf.images(_doprint=0)
	iraf.tv(_doprint=0)
	iraf.ptools(_doprint=0)
	iraf.noao(_doprint=0)
	iraf.digiphot(_doprint=0)
	iraf.photcal(_doprint=0)
	iraf.apphot(_doprint=0)  
	iraf.imutil(_doprint=0)

	for file_ in os.listdir("./"):
		if file_.endswith("_i.fits"):
			fits_file_i = file_
			title_string = file_[0:9]
		if file_.endswith("_g.fits"):
			fits_file_g = file_
				
	
	fits_h_i = fits.open(fits_file_i)
	fits_h_g = fits.open(fits_file_g)
	
	fwhm_i = fits_h_i[0].header['FWHMPSF']
	fwhm_g = fits_h_g[0].header['FWHMPSF']
	print 'Image FWHM :: g = {0:5.3f} : i = {1:5.3f}'.format(fwhm_g,fwhm_i)
	
	# if not os.path.isdir('psf'): # make a psf subfolder if it doesn't exist
	# 	os.mkdir('psf')
	
	# # and then copy in the data files if they don't already exist as files
	# if not os.path.isfile('psf/'+fits_file_i):
	# 	iraf.images.imcopy(fits_file_i,'psf/'+fits_file_i,verbose="yes")
	# 
	# if not os.path.isfile('psf/'+fits_file_g) :
	# 	iraf.images.imcopy(fits_file_g,'psf/'+fits_file_g,verbose="yes")
	# 
	# # also copy in the apcor star lists
	# if not (os.path.isfile('psf/apcor_stars_i.txt') or os.path.islink('psf/apcor_stars_i.txt')) :
	# 	shutil.copyfile('apcor_stars_i.txt','psf/apcor_stars_i.txt')	
	# 
	# if not (os.path.isfile('psf/apcor_stars_g.txt') or os.path.islink('psf/apcor_stars_g.txt')) :
	# 	shutil.copyfile('apcor_stars_g.txt','psf/apcor_stars_g.txt')	
	# 	
	# # and change to the psf folder
	# os.chdir('psf')

	iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
	
	iraf.apphot.phot.setParam('interactive',"no")
	iraf.apphot.phot.setParam('verify',"no")
	iraf.datapars.setParam('datamax',"INDEF")
	iraf.datapars.setParam('gain',"gain")
	iraf.datapars.setParam('ccdread',"rdnoise")
	iraf.datapars.setParam('exposure',"exptime")
	iraf.datapars.setParam('airmass',"airmass")
	iraf.datapars.setParam('filter',"filter")
	iraf.datapars.setParam('obstime',"time-obs")
	iraf.datapars.setParam('sigma',"INDEF")
	iraf.photpars.setParam('zmag',0.)
	iraf.centerpars.setParam('cbox',9.)
	iraf.centerpars.setParam('maxshift',3.)
	iraf.fitskypars.setParam('salgorithm',"median")
	iraf.fitskypars.setParam('dannulus',10.)
	
	iraf.datapars.setParam('fwhmpsf',fwhm_g)
	iraf.photpars.setParam('apertures',iraf.nint(4.*fwhm_g))
	iraf.fitskypars.setParam('annulus',(6.*fwhm_g))
	
	iraf.apphot.phot(image=fits_file_g, coords='apcor_stars_g.txt', output="g_psfstars.mag.1")
	
	iraf.datapars.setParam('fwhmpsf',fwhm_i)
	iraf.photpars.setParam('apertures',iraf.nint(4.*fwhm_i))
	iraf.fitskypars.setParam('annulus',(6.*fwhm_i))
	
	iraf.apphot.phot(image=fits_file_i, coords='apcor_stars_i.txt', output="i_psfstars.mag.1")
	
	with open("apcor_stars_i.txt") as foo:
		lines = len(foo.readlines())
	
	iraf.daophot(_doprint=0)
	iraf.pstselect.setParam('image',fits_file_i)
	iraf.pstselect.setParam('photfile',"i_psfstars.mag.1")
	iraf.pstselect.setParam('pstfile',"default")
	iraf.pstselect.setParam('maxnpsf',lines)
	iraf.pstselect.setParam('plottype',"mesh")
	
	iraf.daophot.pstselect(verify='no', mode='h')
	
	with open("apcor_stars_g.txt") as foo:
		lines = len(foo.readlines())
	
	iraf.pstselect.setParam('image',fits_file_g)
	iraf.pstselect.setParam('photfile',"g_psfstars.mag.1")
	iraf.pstselect.setParam('pstfile',"default")
	iraf.pstselect.setParam('maxnpsf',lines)
	iraf.pstselect.setParam('plottype',"mesh")
	
	iraf.daophot.pstselect()
	
	iraf.datapars.setParam('datamax',"INDEF")
	iraf.datapars.setParam('gain',"gain")
	iraf.datapars.setParam('ccdread',"rdnoise")
	iraf.datapars.setParam('exposure',"exptime")
	iraf.datapars.setParam('airmass',"airmass")
	iraf.datapars.setParam('filter',"filter")
	iraf.datapars.setParam('obstime',"time-obs")
	iraf.datapars.setParam('sigma',"INDEF")
	iraf.daopars.setParam('psfrad',iraf.nint(3.*fwhm_i))
	iraf.daopars.setParam('fitrad',fwhm_i)
	
	iraf.psf.setParam('image',fits_file_i)
	iraf.psf.setParam('photfile',"i_psfstars.mag.1")
	iraf.psf.setParam('pstfile',fits_file_i+".pst.1")
	iraf.psf.setParam('interactive', 'no')
	iraf.daophot.psf()
	
	iraf.psf.setParam('image',fits_file_g)
	iraf.psf.setParam('photfile',"g_psfstars.mag.1")
	iraf.psf.setParam('pstfile',fits_file_g+".pst.1")
	iraf.psf.setParam('interactive', 'no')
	iraf.daophot.psf()
コード例 #9
0
ファイル: pipeline_DEEP.py プロジェクト: vterron/repipy
# select the top 15 brightest stars and find the translation between images
for current_object in objects_need_aligning:    
    print "Current object", current_object
    # Open files to store data that imalign will need later on
    obj_list = open(current_object + ".lis", "w")
    shifts_list = open(current_object + ".shifts", "w")    
    coords_list = open(current_object + ".coords","w")
    output_list = open(current_object + ".out", "w")

    # All images of this object. Read fiirst as reference
    whr = np.where(list_images["objname"] == current_object)[0]
    ref_im = list_images["filename"][whr[0]]
    ref_catalog = utilities.replace_extension(ref_im, ".cat")
    
    # Txdump writes to a temporary file, then we read it
    iraf.ptools(_doprint=0)
    if os.path.isfile("temp.txt"):
        os.remove("temp.txt")
    iraf.txdump(ref_catalog, "xcenter, ycenter, mag", "yes", Stdout="temp.txt")
    x_ref=y_ref=mag_ref=np.array([],dtype=np.float16)
    with open("temp.txt") as f:
        for line in f:
            x_ref = np.append(x_ref,float(line.split()[0]))
            y_ref = np.append(y_ref,float(line.split()[1]))
            mag_ref = np.append(mag_ref, float(line.split()[2]))  
    brightest_stars = np.argsort(mag_ref)[:nstars] 
    x_ref = x_ref[brightest_stars] 
    y_ref = y_ref[brightest_stars]
    
    #Write to a file, which imalign will need later
    for ii,jj in zip(x_ref,y_ref):
コード例 #10
0
ファイル: escut_new.py プロジェクト: sjanowiecki/odi-tools
def escut(image, pos_file, fwhm, peak):
    # input image file name, file name with matched source positions, **np.array of fwhm measurements for each source
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import stats
    from pyraf import iraf
    # import sewpy
    import os
    from matplotlib.path import Path
    
    iraf.images(_doprint=0)
    iraf.tv(_doprint=0)
    iraf.ptools(_doprint=0)
    iraf.noao(_doprint=0)
    iraf.digiphot(_doprint=0)
    iraf.photcal(_doprint=0)
    iraf.apphot(_doprint=0)  
    iraf.imutil(_doprint=0)
    
    iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive',"no")
    iraf.apphot.phot.setParam('verify',"no")
    iraf.datapars.setParam('datamax',50000.)
    iraf.datapars.setParam('gain',"gain")
    iraf.datapars.setParam('ccdread',"rdnoise")
    iraf.datapars.setParam('exposure',"exptime")
    iraf.datapars.setParam('airmass',"airmass")
    iraf.datapars.setParam('filter',"filter")
    iraf.datapars.setParam('obstime',"time-obs")
    # iraf.datapars.setParam('obstime',"date-obs")
    iraf.datapars.setParam('sigma',"INDEF")
    iraf.photpars.setParam('zmag',0.)
    iraf.centerpars.setParam('cbox',9.)
    iraf.centerpars.setParam('maxshift',3.)
    iraf.fitskypars.setParam('salgorithm',"median")
    iraf.fitskypars.setParam('dannulus',10.)
    
    # clean up the indefs so we can actually do stats, but reassign them to 99999 so we don't lose track of things
    # keep a separate list without them to do the median (we need floats)
    indefs = np.where(fwhm=='INDEF')
    good = np.where(fwhm!='INDEF')
    fwhm[indefs] = 99.999
    fwhm = fwhm.astype(float)
    fwhm_good = fwhm[good].astype(float)

    indefs = np.where(peak=='INDEF')
    peak[indefs] = -999.999
    peak = peak.astype(float)
    peak_good = peak[good].astype(float)
    
    if not os.path.isfile(image[0:-5]+'.txdump'):
        # findavgfwhm = sewpy.SEW(
        #     params = ["X_IMAGE", "Y_IMAGE", "FWHM_IMAGE", "FLAGS"],
        #     config = {"DETECT_THRESH":200.0},
        #     sexpath = "sex"
        # )
        # 
        # out = findavgfwhm(image)["table"]
        # 
        # fwhms = out['FWHM_IMAGE'] # This is an astropy table.
        # flags = out['FLAGS']
        
        # get a really rough estimate of the stellar FWHM in the image to set apertures
        
        # use the input fwhm measurement
        # ap1x = fwhm_est

        
        # xpos = datatable['X_IMAGE']
        # ypos = datatable['Y_IMAGE']
        # fwhm = datatable['FWHM_IMAGE']
        # flags = datatable['FLAGS']
        # idno = datatable['NUMBER']
        ap1x = np.median(fwhm_good) # only use isolated detections of stars, this is the 1x aperture
        # print ap1x
        ap2x = 2.0*ap1x
        
        # these = [ i for i,id in enumerate(idno) if (flags[i] == 0)]
        
        # with open(image[0:-5]+'.escut.pos','w+') as f:
        #     for j in range(len(xpos)):
        #         print >> f, xpos[j], ypos[j], fwhm[j], idno[j]
        
        iraf.datapars.setParam('fwhmpsf',ap1x)
        iraf.photpars.setParam('apertures',repr(ap1x)+', '+repr(ap2x))
        iraf.fitskypars.setParam('annulus',4.*ap1x)
        iraf.apphot.phot(image=image, coords=pos_file, output=image[0:-5]+'.phot')
        with open(image[0:-5]+'.txdump','w+') as txdump_out :
            iraf.ptools.txdump(textfiles=image[0:-5]+'.phot', fields="id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,image", expr='MAG[1] != INDEF && MERR[1] != INDEF && MAG[2] != INDEF && MERR[2] != INDEF', headers='no', Stdout=txdump_out)
            
    mag1x, mag2x = np.loadtxt(image[0:-5]+'.txdump', usecols=(1,2), unpack=True)
    iraf_id = np.loadtxt(image[0:-5]+'.txdump', usecols=(0,), dtype=int, unpack=True)
    # idno = np.loadtxt(image[0:-5]+'.escut.pos', usecols=(3,), dtype=int, unpack=True)
    xpos, ypos = np.loadtxt(pos_file, usecols=(0,1), unpack=True)
    
    keepIndex = iraf_id - 1
    
    xpos, ypos, fwhm, peak = xpos[keepIndex], ypos[keepIndex], fwhm[keepIndex], peak[keepIndex]
    
    # print idno.size, iraf_id.size, xpos.size
    
    diff = mag2x - mag1x
    
    diffCut = diff
    magCut = mag2x
    xCut = xpos#[good]
    yCut = ypos#[good]
    idCut = iraf_id
    fwhmCut = fwhm#_good
    peakCut = peak
    
    print peakCut.size, magCut.size, diffCut.size
    
    print diffCut.size, 0, np.median(diffCut), diffCut.std()
    nRemoved = 1   
    
    # plt.clf()
    # plt.scatter(peakCut, magCut, edgecolor='none')
    # plt.savefig('peaktest.pdf')
    
    plt.clf()
    # plt.hlines(bin_edges, -2, 1, colors='red', linestyle='dashed')
    plt.scatter(diff, mag2x, edgecolor='none', facecolor='black', s=4)
    # plt.scatter(diffCut, magCut, edgecolor='none', facecolor='blue', s=4)
    magdiff = zip(magCut.tolist(), diffCut.tolist(), peakCut.tolist(), idCut.tolist())
    dtype = [('mag',float), ('diff', float), ('peak', float), ('id', int)]
    magdiff = np.array(magdiff, dtype=dtype)
    
    magSort = np.sort(magdiff, order='peak')

    peakRange = (magSort['peak'] > 20000.0) & (magSort['peak'] < 40000.0)
    peakVal = np.median((magSort['diff'])[np.where(peakRange)])
    # peakVal = np.median(diffCut)
    print peakVal
    
    plt.scatter((magSort['diff'])[np.where(peakRange)], (magSort['mag'])[np.where(peakRange)], edgecolor='none', facecolor='blue', s=4)
    
    while nRemoved != 0:
        nBefore = diffCut.size
        diffCheck = np.where(abs(peakVal-diffCut) < 2.5*diffCut.std())#[i for i,d in enumerate(diff) if (-0.5 < d < 0.0)]
        # 
        diffCut = diffCut[diffCheck]
        nRemoved = nBefore - diffCut.size
        magCut = magCut[diffCheck]
        xCut = xCut[diffCheck]
        yCut = yCut[diffCheck]
        idCut = idCut[diffCheck]
        fwhmCut = fwhmCut[diffCheck]
        print diffCut.size, nRemoved, np.median(diffCut), diffCut.std()
        if 0.05 < diffCut.std() <0.06:
           nRemoved=0 
        # plt.fill_betweenx(bin_centers, bin_meds+3.0*bin_stds, bin_meds-3.0*bin_stds, facecolor='red', edgecolor='none', alpha=0.4, label='2x RMS sigma clipping region')
        
    # with open('escutSTD_i.pos','w+') as f:
    #     for i,blah in enumerate(xCut):
    #         print >> f, xCut[i], yCut[i], diffCut[i]
            
    bin_meds, bin_edges, binnumber = stats.binned_statistic(magCut, diffCut, statistic='median', bins=24, range=(magCut.min(),magCut.max()))
    bin_stds, bin_edges, binnumber = stats.binned_statistic(magCut, diffCut, statistic=np.std, bins=24, range=(magCut.min(),magCut.max()))
    bin_width = (bin_edges[1] - bin_edges[0])
    bin_centers = bin_edges[1:] - bin_width/2
    # print bin_meds, bin_stds
    
    left_edge = np.array(zip(peakVal-2.5*bin_stds, bin_centers))
    right_edge = np.flipud(np.array(zip(peakVal+2.5*bin_stds, bin_centers)))
    # print left_edge, right_edge
    verts = np.vstack((left_edge, right_edge))
    # print verts
    # verts = np.delete(verts, np.array([0,1,2,22,23,24,25,45,46,47]), axis=0)
    
    # print verts
    esRegion = Path(verts)
    sources = esRegion.contains_points(zip(diff,mag2x))
    # print sources
    
    with open('escutREG_i.pos','w+') as f:
        for i,blah in enumerate(xpos[sources]):
            print >> f, (xpos[sources])[i], (ypos[sources])[i], (diff[sources])[i]
    
    magCut = mag2x[sources]
    fwhmCut = fwhm[sources]   
    xCut = xpos[sources]
    yCut = ypos[sources] 
    diffCut = diff[sources]    
    
    # find the sources that are in the std method but not the region method
    # print idCut, idno[sources]
    # extrasSTD = np.setdiff1d(idno[sources], idCut)
    # print extrasSTD.size
    # print extrasSTD
    # with open('escutUNIQUE.pos','w+') as f:
    #     for i,blah in enumerate(extrasSTD):
    #         print >> f, xpos[blah-1], ypos[blah-1]
            
    # fwhmcheck = np.loadtxt('testfwhmREG.log', usecols=(10,), unpack=True)
    fwhmchk2 = np.where((magCut<-4) & (fwhmCut<90.0))
    print np.median(fwhmCut[fwhmchk2]), np.std(fwhmCut[fwhmchk2])
    fwchk = np.where(np.abs(fwhmCut-np.median(fwhmCut[fwhmchk2])) > 10.0*np.std(fwhmCut[fwhmchk2]))
    drop = np.abs(fwhmCut-np.median(fwhmCut[fwhmchk2])) > 10.0*np.std(fwhmCut[fwhmchk2])
    # fwmag = mag2x[sources]
    
    with open('escutVBAD_i.pos','w+') as f:
        for i,blah in enumerate(xCut[fwchk]):
            print >> f, (xCut[fwchk])[i], (yCut[fwchk])[i]
            
    with open('escut_r.pos','w+') as f:
        for i,blah in enumerate(xCut):
            if not drop[i]:
                print >> f, xCut[i], yCut[i]
    
    with open('escut_g.pos','w+') as f:
        for i,blah in enumerate(xCut):
            if not drop[i]:
                print >> f, xCut[i], yCut[i]
    
    plt.fill_betweenx(bin_centers, peakVal+2.5*bin_stds, peakVal-2.5*bin_stds, facecolor='red', edgecolor='none', alpha=0.4, label='2x RMS sigma clipping region')
    plt.scatter(diffCut[fwchk], magCut[fwchk], edgecolor='none', facecolor='red', s=4)
    plt.ylim(0,-12)
    plt.xlabel('$m_{2x} - m_{1x}$')
    plt.ylabel('$m_{2x}$')
    plt.xlim(-2,1)
    plt.savefig('testmagiraf.pdf')
    
    plt.clf()
    plt.scatter(magCut, fwhmCut, edgecolor='none', facecolor='black')
    plt.scatter(magCut[fwchk], fwhmCut[fwchk], edgecolor='none', facecolor='red')
    plt.hlines([np.median(fwhmCut)], -12, 0, colors='red', linestyle='dashed')
    plt.hlines([np.median(fwhmCut)+fwhmCut.std(), np.median(fwhmCut)-fwhmCut.std()], -12, 0, colors='red', linestyle='dotted')
    plt.ylim(0,20)
    plt.xlim(-12,0)
    plt.ylabel('fwhm')
    plt.xlabel('$m_{2x}$')
    plt.savefig('fwhmcheck.pdf')
    
    
    return True
コード例 #11
0
ファイル: pipeline_DEEP.py プロジェクト: javierblasco/repipy
for current_object in objects_need_aligning:    
    print "Current object", current_object
    # Open files to store data that imalign will need later on
    obj_list = open(current_object + ".lis", "w")
    shifts_list = open(current_object + ".shifts", "w")    
    coords_list = open(current_object + ".coords","w")
    output_list = open(current_object + ".out", "w")

    # All images of this object. Read fiirst as reference
    whr = np.where(list_images["objname"] == current_object)[0]
    ref_im = list_images["filename"][whr[0]]
    ref_catalog = utilities.replace_extension(ref_im, ".cat")
    
    # Txdump writes to a temporary file, then we read it
    iraf.ptools(_doprint=0)
    if os.path.isfile("temp.txt"):
        os.remove("temp.txt")
    iraf.txdump(ref_catalog, "xcenter, ycenter, mag", "yes", Stdout="temp.txt")
    x_ref=y_ref=mag_ref=np.array([],dtype=np.float16)
    with open("temp.txt") as f:
        for line in f:
            x_ref = np.append(x_ref,float(line.split()[0]))
            y_ref = np.append(y_ref,float(line.split()[1]))
            mag_ref = np.append(mag_ref, float(line.split()[2]))  
    brightest_stars = np.argsort(mag_ref)[:nstars] 
    x_ref = x_ref[brightest_stars] 
    y_ref = y_ref[brightest_stars]
    
    #Write to a file, which imalign will need later
    for ii,jj in zip(x_ref,y_ref):
        coords_list.write( str(ii) + " " + str(jj) + "\n")
コード例 #12
0
def phot_sources(img, ota, fwhm, run_detect=True):
    """
    Run IRAF phot on the sources filtered by :py:func:`source_xy`. The ``fwhm``
    values used by phot is calculated by :py:func:`getfwhm_source`.

    Parameters
    ----------
    img : str
        Name of image
    ota : str
        Name of OTA

    fwhm : float
        Median value of the ``gfwhm`` measurements on the ``ota``.

    Note
    ----

    IRAF phot is run with the following parameters:

    - iraf.apphot.phot.setParam('interactive',"no")
    - iraf.apphot.phot.setParam('verify',"no")
    - iraf.datapars.setParam('datamax',50000.)
    - iraf.datapars.setParam('gain',"gain")
    - iraf.datapars.setParam('ccdread',"rdnoise")
    - iraf.datapars.setParam('exposure',"exptime")

    - iraf.datapars.setParam('filter',"filter")
    - iraf.datapars.setParam('obstime',"time-obs")
    - iraf.datapars.setParam('sigma',"INDEF")
    - iraf.photpars.setParam('zmag',0.)
    - iraf.centerpars.setParam('cbox',9.)
    - iraf.centerpars.setParam('maxshift',3.)
    - iraf.fitskypars.setParam('salgorithm',"median")
    - iraf.fitskypars.setParam('dannulus',10.)

    - iraf.datapars.setParam('airmass','airmass')
    - iraf.datapars.setParam('fwhmpsf',fwhm)
    - iraf.photpars.setParam('apertures',5.*fwhm)
    - iraf.fitskypars.setParam('annulus',6.*fwhm)

    """
    iraf.ptools(_doprint=0)
    # values determined by ralf/daniel @ wiyn
    kg = 0.20
    kr = 0.12
    ki = 0.058

    image = odi.reprojpath + 'reproj_' + ota + '.' + img.stem()
    if run_detect == True:
        coords = odi.sourcepath + 'source_' + ota + '.' + img.base() + '.xy'
    else:
        coords = odi.coordspath + 'reproj_' + ota + '.' + img.base(
        ) + '.gaiaxy'
    output = odi.sourcepath + img.nofits() + '.' + ota + '.phot.1'
    phot_tbl = odi.sourcepath + img.nofits() + '.' + ota + '.sourcephot'

    # alas, we must use IRAF apphot to do the measuring
    # first set common parameters (these shouldn't change if you're using ODI)
    iraf.unlearn(iraf.phot, iraf.datapars, iraf.photpars, iraf.centerpars,
                 iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive', "no")
    iraf.apphot.phot.setParam('verify', "no")
    iraf.datapars.setParam('datamax', 50000.)
    iraf.datapars.setParam('gain', "gain")
    iraf.datapars.setParam('ccdread', "rdnoise")
    iraf.datapars.setParam('exposure', "exptime")

    iraf.datapars.setParam('filter', "filter")
    iraf.datapars.setParam('obstime', "time-obs")
    iraf.datapars.setParam('sigma', "INDEF")
    iraf.photpars.setParam('zmag', 0.)
    iraf.centerpars.setParam('cbox', 9.)
    iraf.centerpars.setParam('maxshift', 3.)
    iraf.fitskypars.setParam('salgorithm', "median")
    iraf.fitskypars.setParam('dannulus', 10.)

    iraf.datapars.setParam('airmass', 'airmass')
    iraf.datapars.setParam('fwhmpsf', fwhm)
    iraf.photpars.setParam('apertures',
                           5. * fwhm)  # use a big aperture for this
    iraf.fitskypars.setParam('annulus', 6. * fwhm)

    if not os.path.isfile(output):
        iraf.apphot.phot(image=image, coords=coords, output=output)
    with open(phot_tbl, 'w+') as txdump_out:
        iraf.ptools.txdump(
            textfiles=output,
            fields=
            "id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,itime,flux,image",
            expr='yes',
            headers='no',
            Stdout=txdump_out)
    outputfile_clean = open(
        phot_tbl.replace('.sourcephot', '_clean.sourcephot'), "w")
    for line in open(phot_tbl, "r"):
        if not 'INDEF' in line:
            outputfile_clean.write(line)
        if 'INDEF' in line:
            outputfile_clean.write(line.replace('INDEF', '999'))
    outputfile_clean.close()
    os.rename(phot_tbl.replace('.sourcephot', '_clean.sourcephot'), phot_tbl)
    return phot_tbl
コード例 #13
0
def apcor_sdss(img, fwhm, inspect=False):
    """
    Determine the aperture correction based on the photometry of SDSS sources in
    the field. Each SDSS source is ``phot-ed`` with a range of apertures that
    are multiples of the mean ``fwhm`` of SDSS stars in the field. Specifically,
    ``phot`` is done using ``1 - 7*fwhm`` in steps of ``0.5``. This function
    calculates the difference in the instrumental magnitude in aperture 'n'
    with aperture ``n-1``. The aperture at which this difference levels off is
    where we determine what the aperture correction is. This is typically around
    ``4.5 to 5*fwhm``, but can vary depending on the data. This difference
    between this leveling off point, and the magnitude measured using ``1*fwhm``
    is the returned aperture correction. Sigma clipping is used to throw out
    values that would throw off the measurement.

    Parameters
    ----------
    img : str
        String containing name of the image currently in us
    fhwm : float
        average of median fwhm of SDSS sources in the field
    inspect : boolean
        if ``True`` each candidate aperture correction star will be
        displayed. This gives you the chance to throw out stars that
        have near neighbors or next to image artifacts.

    Returns
    -------
    apcor : float
        mean aperture correction of candidate starts remaining After
        sigma clipping

    apcor_std : float
        standard deviation of aperture corrections of candidate starts
        remaining After sigma clipping

    apcor_sem : float
        standard error on the mean of the aperture corrections of
        candidate starts remaining After sigma clipping


    """
    from pyraf import iraf
    import matplotlib.pyplot as plt
    from scipy import interpolate
    from matplotlib.colors import LogNorm
    from astropy.visualization import *
    from astropy.visualization.mpl_normalize import ImageNormalize
    iraf.ptools(_doprint=0)
    sdss_source_file = img.nofits() + '.match.sdssxy'

    sdss_phot_file = img.nofits() + '.sdssphot'

    sdss_MAG, sdss_MERR, sdss_SKY, sdss_SERR, sdss_RAPERT, sdss_XPOS, sdss_YPOS = np.loadtxt(
        img.nofits() + '.sdssphot',
        usecols=(1, 2, 3, 4, 5, 6, 7),
        dtype=float,
        unpack=True)

    x, y, ra, dec, g, g_err, r, r_err = np.loadtxt(sdss_source_file,
                                                   usecols=(0, 1, 2, 3, 6, 7,
                                                            8, 9),
                                                   unpack=True)
    peak, gfwhm = getfwhm_full_sdss(img)

    #odi.plt.figure()
    #odi.plt.hist(peak[np.where(g < 19)])
    #odi.plt.figure()
    #odi.plt.hist(gfwhm[np.where(g < 19)])
    #odi.plt.show()

    #plt.clf()
    #plt.hist(peak[np.where(peak > 12000.0)])
    #plt.show()

    aps = []
    for i in np.arange(1, 7.5, 0.5):
        aps.append(fwhm * i)
    #aps = np.ones(13)*5.0
    aps_str = str('"' + repr(aps[0]) + ',' + repr(aps[1]) + ',' +
                  repr(aps[2]) + ',' + repr(aps[3]) + ',' + repr(aps[4]) +
                  ',' + repr(aps[5]) + ',' + repr(aps[6]) + ',' +
                  repr(aps[7]) + ',' + repr(aps[8]) + ',' + repr(aps[9]) +
                  ',' + repr(aps[10]) + ',' + repr(aps[11]) + ',' +
                  repr(aps[12]) + '"')

    hdulist = odi.fits.open(img.f)
    hdr1 = hdulist[0].header
    data = hdulist[0].data
    filter = hdr1['filter']
    hdulist.close()

    iraf.unlearn(iraf.phot, iraf.datapars, iraf.photpars, iraf.centerpars,
                 iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive', "no")
    iraf.apphot.phot.setParam('verify', "no")
    iraf.datapars.setParam('datamax', 50000.)
    iraf.datapars.setParam('gain', "gain")
    iraf.datapars.setParam('ccdread', 'rdnoise')
    iraf.datapars.setParam('exposure', "exptime")
    #iraf.datapars.setParam('itime',2700.0)

    iraf.datapars.setParam('filter', "filter")
    iraf.datapars.setParam('obstime', "time-obs")
    iraf.datapars.setParam('sigma', "INDEF")
    iraf.photpars.setParam('zmag', 0.)
    iraf.centerpars.setParam('cbox', 9.)
    iraf.centerpars.setParam('maxshift', 3.)
    iraf.fitskypars.setParam('salgorithm', "median")
    iraf.fitskypars.setParam('dannulus', 10.)

    phot_tbl = img.nofits() + '.apcor'
    if not os.path.isfile(phot_tbl):
        print 'running phot over', aps_str
        iraf.datapars.setParam('fwhmpsf', fwhm)
        iraf.photpars.setParam('apertures', aps_str)
        iraf.fitskypars.setParam('annulus', 6. * float(fwhm))
        iraf.apphot.phot(image=img,
                         coords=sdss_source_file,
                         output=img.nofits() + '.apcor.1')
        with open(phot_tbl, 'w+') as txdump_out:
            iraf.ptools.txdump(textfiles=img.nofits() + '.apcor.1',
                               fields="ID,RAPERT,XCEN,YCEN,FLUX,MAG,MERR",
                               expr="yes",
                               headers='no',
                               Stdout=txdump_out)
        txdump_out.close()
        outputfile_clean = open(phot_tbl.replace('.apcor', '_clean.apcor'),
                                "w")
        for line in open(phot_tbl, "r"):
            if not 'INDEF' in line:
                outputfile_clean.write(line)
            if 'INDEF' in line:
                outputfile_clean.write(line.replace('INDEF', '999'))
        outputfile_clean.close()
        os.rename(phot_tbl.replace('.apcor', '_clean.apcor'), phot_tbl)

    peak_top1per = 49000.0
    star_flux = {}
    star_mag_diff = {}
    star_mag_diff1x = {}
    star_mag = {}
    star_positions = {}
    for i, line in enumerate(open(img.nofits() + '.apcor', "r")):
        flux = [float(x) for x in line.split()[16:29]]
        mag = [float(x) for x in line.split()[29:42]]
        err = [float(x) for x in line.split()[42:55]]
        position = [float(x) for x in line.split()[14:16]]
        #print i,peak[i],gfwhm[i],g[i]
        if (peak[i] > 2500.0 and peak[i] <= 55000.0 and
            (np.abs(gfwhm[i] - np.median(gfwhm[np.where(gfwhm < 20.0)])) <
             np.std(gfwhm[np.where(gfwhm < 20.0)])) and np.max(mag) != 999.0):
            if inspect == True:
                center = position
                x1 = center[0] - 75
                x2 = center[0] + 75
                y1 = center[1] - 75
                y2 = center[1] + 75
                box = data[y1:y2, x1:x2]
                plt.figure()
                norm = ImageNormalize(stretch=LogStretch())
                odi.plt.imshow(box, norm=norm)
                max_count = np.max(box)
                odi.plt.title('max counts =' + str(max_count))
                plt.show()
                star_check = raw_input('Use star for ap correction: (y/n) ')
                if star_check == 'y':
                    star_flux[i] = flux
                    star_mag[i] = mag
                    star_positions[i] = position
            else:
                star_positions[i] = position
                star_flux[i] = flux
                star_mag[i] = mag
    for key in star_mag:
        diffs = []
        diffs1x = []
        for m in range(len(star_mag[key]) - 1):
            diffs.append(star_mag[key][m + 1] - star_mag[key][m])
            diffs1x.append(star_mag[key][m] - star_mag[key][0])
        #print star_mag[key][8],star_mag[key][0]
        star_mag_diff[key] = diffs
        star_mag_diff1x[key] = diffs1x
    combine_mag_diffs = []
    combine_mag_diffs1x = []
    for key in star_mag_diff:
        x = np.arange(1, 7.0, 0.5)
        y = star_mag_diff[key]
        z = star_mag_diff1x[key]
        #plt.plot(x,y,'o')
        #plt.show()
        combine_mag_diffs.append(y)
        combine_mag_diffs1x.append(z)
        #tck = interpolate.splrep(x, y, s=0)
        #xnew = np.arange(1,6,0.25)
        #ynew = interpolate.splev(xnew,tck,der=1)
        #print len(np.arange(1,6.5,0.5)),len(star_mag_diff[key])
        #plt.plot(np.arange(1,6.5,0.5),star_mag_diff[key],'o')
        #plt.plot(xnew,ynew,'-')
        #plt.axhline(y=0)
        #plt.show()
    combine_mag_diffs = np.reshape(combine_mag_diffs,
                                   (len(star_mag_diff.keys()), len(x)))
    combine_mag_diffs_med = []
    combine_mag_diffs_std = []
    combine_mag_diffs1x = np.reshape(combine_mag_diffs1x,
                                     (len(star_mag_diff1x.keys()), len(x)))
    combine_mag_diffs1x_mean = []
    combine_mag_diffs1x_med = []
    combine_mag_diffs1x_std = []
    combine_mag_diffs1x_sem = []
    for j in range(len(x)):
        if j != 0:
            star_test = combine_mag_diffs1x[:, j]
            star_test = star_test[np.where(
                ((star_test >= -0.5) & (star_test <= 0)))]
            sig_test = np.std(combine_mag_diffs1x[:, j])
            #print sig_test,len(star_test)
            med_test = np.median(combine_mag_diffs1x[:, j])
            keep = star_test[np.where(np.abs(star_test - med_test) < 0.01)]
            #plt.hist(keep)
            #plt.show()
            combine_mag_diffs1x_mean.append(np.mean(keep))
            combine_mag_diffs1x_med.append(np.median(keep))
            combine_mag_diffs1x_std.append(np.std(keep))
            combine_mag_diffs1x_sem.append(np.std(keep) / np.sqrt(len(keep)))
            if j == 8:
                print 'using ', len(keep), 'stars in ap correction'
        else:
            combine_mag_diffs1x_mean.append(np.mean(combine_mag_diffs1x[:, j]))
            combine_mag_diffs1x_med.append(np.median(combine_mag_diffs1x[:,
                                                                         j]))
            combine_mag_diffs1x_std.append(np.std(combine_mag_diffs1x[:, j]))
            combine_mag_diffs1x_sem.append(
                np.std(combine_mag_diffs1x[:, j]) /
                np.sqrt(len(combine_mag_diffs1x[:, j])))

        combine_mag_diffs_med.append(np.median(combine_mag_diffs[:, j]))
        combine_mag_diffs_std.append(np.std(combine_mag_diffs[:, j]))

    tck = interpolate.splrep(x, combine_mag_diffs_med, s=0)
    xnew = np.arange(1, 7.0, 0.25)
    ynew = interpolate.splev(xnew, tck, der=0)
    ynew_der = interpolate.splev(xnew, tck, der=1)
    plt.figure(figsize=(14, 7))
    ax1 = plt.subplot(121)
    ax2 = plt.subplot(122)
    ax1.errorbar(x,
                 combine_mag_diffs_med,
                 yerr=combine_mag_diffs_std,
                 fmt='o',
                 label='Median mag. Diff.')
    ax1.plot(xnew, ynew, 'r-', label='Spline fit')
    ax1.set_ylabel('Mag(n+1) - Mag(n)')
    ax1.set_xlabel('n $ \cdot $ fwhm')
    ax2.plot(xnew, ynew_der, 'r-')
    ax2.axhline(y=0)
    ax2.set_ylabel('Value of Spline 1st Derivative')
    ax2.set_xlabel('n $ \cdot $ fwhm')
    ax1.legend(loc=4)
    plt.tight_layout()
    plt.show()

    # print combine_mag_diffs1x_mean
    # print combine_mag_diffs1x_std
    # print combine_mag_diffs1x_sem

    for i in range(len(x)):
        plt.errorbar(x[i],
                     combine_mag_diffs1x_mean[i],
                     yerr=combine_mag_diffs1x_std[i],
                     fmt='bo')
    plt.ylim(-0.45, 0.1)
    plt.xlim(-0.1, 7.5)
    plt.xlabel('n fwhm')
    plt.ylabel('ap correction')
    plt.show()

    #apcor = np.median(combine_mag_diffs1x_mean[5:10:1])
    apcor = combine_mag_diffs1x_mean[8]
    apcor_std = combine_mag_diffs1x_std[8]
    apcor_sem = combine_mag_diffs1x_sem[8]
    apcor_med = combine_mag_diffs1x_med[8]

    print 'aperture corr. = {0:6.3f}'.format(apcor)
    print 'aperture corr. med. = {0:6.3f}'.format(apcor_med)
    print 'aperture corr. std = {0:6.3f}'.format(apcor_std)
    print 'aperture corr. sem = {0:6.3f}'.format(apcor_sem)

    return apcor, apcor_std, apcor_sem
コード例 #14
0
def sdss_phot_full(img, fwhm, airmass):
    """
    Run ``pyraf phot`` on SDSS sources in the field. ``phot`` is given the
    following parameters ::

        iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
        iraf.apphot.phot.setParam('interactive',"no")
        iraf.apphot.phot.setParam('verify',"no")
        iraf.datapars.setParam('datamax',50000.)
        iraf.datapars.setParam('gain',"gain")
        iraf.datapars.setParam('ccdread','rdnoise')
        iraf.datapars.setParam('exposure',"exptime")

        iraf.datapars.setParam('filter',"filter")
        iraf.datapars.setParam('obstime',"time-obs")
        iraf.datapars.setParam('sigma',"INDEF")
        iraf.photpars.setParam('zmag',0.)
        iraf.centerpars.setParam('cbox',9.)
        iraf.centerpars.setParam('maxshift',3.)
        iraf.fitskypars.setParam('salgorithm',"median")
        iraf.fitskypars.setParam('dannulus',10.)
        iraf.datapars.setParam('xairmass',float(airmass))
        iraf.datapars.setParam('fwhmpsf',float(fwhm))
        iraf.photpars.setParam('apertures',5.*float(fwhm)) # use a big aperture for this
        iraf.fitskypars.setParam('annulus',6.*float(fwhm))

    Parameters
    ----------
    img : str
        String containing name of the image currently in use

    fwhm : float
        A measure of the fwhm of stars in the stacked image

    airmass : float
        Airmass assigned to the stacked image. Should match the image in the
        dither that was used as the reference scaling image.

    """
    from pyraf import iraf
    iraf.ptools(_doprint=0)
    # first grab the header and hang on to it so we can use other values
    hdulist = odi.fits.open(img.f)
    hdr1 = hdulist[0].header
    filter = hdr1['filter']
    hdulist.close()

    iraf.unlearn(iraf.phot, iraf.datapars, iraf.photpars, iraf.centerpars,
                 iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive', "no")
    iraf.apphot.phot.setParam('verify', "no")
    iraf.datapars.setParam('datamax', 50000.)
    iraf.datapars.setParam('gain', "gain")
    iraf.datapars.setParam('ccdread', 'rdnoise')
    iraf.datapars.setParam('exposure', "exptime")

    iraf.datapars.setParam('filter', "filter")
    iraf.datapars.setParam('obstime', "time-obs")
    iraf.datapars.setParam('sigma', "INDEF")
    iraf.photpars.setParam('zmag', 0.)
    iraf.centerpars.setParam('cbox', 9.)
    iraf.centerpars.setParam('maxshift', 3.)
    iraf.fitskypars.setParam('salgorithm', "median")
    iraf.fitskypars.setParam('dannulus', 10.)

    if not os.path.isfile(img.nofits() + '.sdssphot'):  # only do this once
        print 'phot-ing the sdss sources in ', filter
        iraf.datapars.setParam('xairmass', float(airmass))
        iraf.datapars.setParam('fwhmpsf', float(fwhm))
        iraf.photpars.setParam('apertures',
                               5. * float(fwhm))  # use a big aperture for this
        iraf.fitskypars.setParam('annulus', 6. * float(fwhm))
        iraf.apphot.phot(image=img,
                         coords=img.nofits() + '.match.sdssxy',
                         output=img.nofits() + '.phot.1')
        phot_tbl = img.nofits() + '.sdssphot'
        with open(phot_tbl, 'w+') as txdump_out:
            iraf.ptools.txdump(
                textfiles=img.nofits() + '.phot.1',
                fields=
                "id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,image",
                expr='yes',
                headers='no',
                Stdout=txdump_out)

        outputfile_clean = open(
            phot_tbl.replace('.sdssphot', '_clean.sdssphot'), "w")
        for line in open(phot_tbl, "r"):
            if not 'INDEF' in line:
                outputfile_clean.write(line)
            if 'INDEF' in line:
                outputfile_clean.write(line.replace('INDEF', '999'))
        outputfile_clean.close()
        os.rename(phot_tbl.replace('.sdssphot', '_clean.sdssphot'), phot_tbl)
コード例 #15
0
ファイル: full_calibrate.py プロジェクト: bjanesh/odi-tools
def apcor_sdss(img,fwhm,inspect=False):
    """
    Determine the aperture correction based on the photometry of SDSS sources in
    the field. Each SDSS source is ``phot-ed`` with a range of apertures that
    are multiples of the mean ``fwhm`` of SDSS stars in the field. Specifically,
    ``phot`` is done using ``1 - 7*fwhm`` in steps of ``0.5``. This function
    calculates the difference in the instrumental magnitude in aperture 'n'
    with aperture ``n-1``. The aperture at which this difference levels off is
    where we determine what the aperture correction is. This is typically around
    ``4.5 to 5*fwhm``, but can vary depending on the data. This difference
    between this leveling off point, and the magnitude measured using ``1*fwhm``
    is the returned aperture correction. Sigma clipping is used to throw out
    values that would throw off the measurement.

    Parameters
    ----------
    img : str
        String containing name of the image currently in us
    fhwm : float
        average of median fwhm of SDSS sources in the field
    inspect : boolean
        if ``True`` each candidate aperture correction star will be
        displayed. This gives you the chance to throw out stars that
        have near neighbors or next to image artifacts.

    Returns
    -------
    apcor : float
        mean aperture correction of candidate starts remaining After
        sigma clipping

    apcor_std : float
        standard deviation of aperture corrections of candidate starts
        remaining After sigma clipping

    apcor_sem : float
        standard error on the mean of the aperture corrections of
        candidate starts remaining After sigma clipping


    """
    from pyraf import iraf
    import matplotlib.pyplot as plt
    from scipy import interpolate
    from matplotlib.colors import LogNorm
    # from astropy.visualization import *
    from astropy.visualization.mpl_normalize import ImageNormalize, LogStretch
    iraf.ptools(_doprint=0)
    sdss_source_file = img.nofits()+'.match.sdssxy'

    sdss_phot_file = img.nofits()+'.sdssphot'

    sdss_MAG, sdss_MERR, sdss_SKY, sdss_SERR, sdss_RAPERT, sdss_XPOS, sdss_YPOS = np.loadtxt(img.nofits()+'.sdssphot',
                                                                                             usecols=(1,2,3,4,5,6,7),
                                                                                             dtype=float, unpack=True)

    x,y,ra,dec,g,g_err,r,r_err = np.loadtxt(sdss_source_file,usecols=(0,1,2,3,
                                                                      6,7,8,9),unpack=True)
    peak,gfwhm = getfwhm_full_sdss(img)

    #odi.plt.figure()
    #odi.plt.hist(peak[np.where(g < 19)])
    #odi.plt.figure()
    #odi.plt.hist(gfwhm[np.where(g < 19)])
    #odi.plt.show()

    #plt.clf()
    #plt.hist(peak[np.where(peak > 12000.0)])
    #plt.show()

    aps = []
    for i in np.arange(1,7.5,0.5):
        aps.append(fwhm*i)
    #aps = np.ones(13)*5.0
    aps_str = str('"'+repr(aps[0])+','+repr(aps[1])+','
                  +repr(aps[2])+','+repr(aps[3])+','
                  +repr(aps[4])+','+repr(aps[5])+','
                  +repr(aps[6])+','+repr(aps[7])+','
                  +repr(aps[8])+','+repr(aps[9])+','
                  +repr(aps[10])+','+repr(aps[11])+','
                  +repr(aps[12])+'"')

    hdulist = odi.fits.open(img.f)
    hdr1 = hdulist[0].header
    data = hdulist[0].data
    filter = hdr1['filter']
    hdulist.close()

    iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive',"no")
    iraf.apphot.phot.setParam('verify',"no")
    iraf.datapars.setParam('datamax',50000.)
    iraf.datapars.setParam('gain',"gain")
    iraf.datapars.setParam('ccdread','rdnoise')
    iraf.datapars.setParam('exposure',"exptime")
    #iraf.datapars.setParam('itime',2700.0)

    iraf.datapars.setParam('filter',"filter")
    iraf.datapars.setParam('obstime',"time-obs")
    iraf.datapars.setParam('sigma',"INDEF")
    iraf.photpars.setParam('zmag',0.)
    iraf.centerpars.setParam('cbox',9.)
    iraf.centerpars.setParam('maxshift',3.)
    iraf.fitskypars.setParam('salgorithm',"median")
    iraf.fitskypars.setParam('dannulus',10.)

    phot_tbl = img.nofits()+'.apcor'
    if not os.path.isfile(phot_tbl):
        print 'running phot over', aps_str
        iraf.datapars.setParam('fwhmpsf',fwhm)
        iraf.photpars.setParam('apertures',aps_str)
        iraf.fitskypars.setParam('annulus',6.*float(fwhm))
        iraf.apphot.phot(image=img, coords=sdss_source_file, output=img.nofits()+'.apcor.1')
        with open(phot_tbl,'w+') as txdump_out :
            iraf.ptools.txdump(textfiles=img.nofits()+'.apcor.1', fields="ID,RAPERT,XCEN,YCEN,FLUX,MAG,MERR", expr="yes", headers='no', Stdout=txdump_out)
        txdump_out.close()
        outputfile_clean = open(phot_tbl.replace('.apcor','_clean.apcor'),"w")
        for line in open(phot_tbl,"r"):
            if not 'INDEF' in line:
                outputfile_clean.write(line)
            if 'INDEF' in line:
                outputfile_clean.write(line.replace('INDEF','999'))
        outputfile_clean.close()
        os.rename(phot_tbl.replace('.apcor','_clean.apcor'),phot_tbl)

    peak_top1per = 49000.0
    star_flux = {}
    star_mag_diff = {}
    star_mag_diff1x = {}
    star_mag = {}
    star_positions = {}
    for i,line in enumerate(open(img.nofits()+'.apcor',"r")):
        flux = [float(x) for x in line.split()[16:29]]
        mag = [float(x) for x in line.split()[29:42]]
        err = [float(x) for x in line.split()[42:55]]
        position = [float(x) for x in line.split()[14:16]]
        #print i,peak[i],gfwhm[i],g[i]
        if (peak[i] > 2500.0 and peak[i] <= 55000.0  and
            (np.abs(gfwhm[i] - np.median(gfwhm[np.where(gfwhm < 20.0)])) < np.std(gfwhm[np.where(gfwhm < 20.0)]))
            and np.max(mag) != 999.0):
            if inspect == True:
                center = position
                x1 = center[0]-75
                x2 = center[0]+75
                y1 = center[1]-75
                y2 = center[1]+75
                box = data[y1:y2,x1:x2]
                plt.figure()
                norm = ImageNormalize(stretch=LogStretch())
                odi.plt.imshow(box,norm=norm)
                max_count = np.max(box)
                odi.plt.title('max counts ='+str(max_count))
                plt.show()
                star_check = raw_input('Use star for ap correction: (y/n) ')
                if star_check == 'y':
                    star_flux[i] = flux
                    star_mag[i] = mag
                    star_positions[i] = position
            else:
                star_positions[i] = position
                star_flux[i] = flux
                star_mag[i] = mag
    for key in star_mag:
        diffs = []
        diffs1x = []
        for m in range(len(star_mag[key])-1):
            diffs.append(star_mag[key][m+1] - star_mag[key][m])
            diffs1x.append(star_mag[key][m] - star_mag[key][0])
        #print star_mag[key][8],star_mag[key][0]
        star_mag_diff[key] = diffs
        star_mag_diff1x[key] = diffs1x
    combine_mag_diffs = []
    combine_mag_diffs1x = []
    for key in star_mag_diff:
        x = np.arange(1,7.0,0.5)
        y = star_mag_diff[key]
        z = star_mag_diff1x[key]
        #plt.plot(x,y,'o')
        #plt.show()
        combine_mag_diffs.append(y)
        combine_mag_diffs1x.append(z)
        #tck = interpolate.splrep(x, y, s=0)
        #xnew = np.arange(1,6,0.25)
        #ynew = interpolate.splev(xnew,tck,der=1)
        #print len(np.arange(1,6.5,0.5)),len(star_mag_diff[key])
        #plt.plot(np.arange(1,6.5,0.5),star_mag_diff[key],'o')
        #plt.plot(xnew,ynew,'-')
        #plt.axhline(y=0)
        #plt.show()
    combine_mag_diffs = np.reshape(combine_mag_diffs,(len(star_mag_diff.keys()),len(x)))
    combine_mag_diffs_med = []
    combine_mag_diffs_std = []
    combine_mag_diffs1x = np.reshape(combine_mag_diffs1x,(len(star_mag_diff1x.keys()),len(x)))
    combine_mag_diffs1x_mean = []
    combine_mag_diffs1x_med = []
    combine_mag_diffs1x_std = []
    combine_mag_diffs1x_sem = []
    for j in range(len(x)):
        if j !=0 :
            star_test = combine_mag_diffs1x[:,j]
            star_test = star_test[np.where(((star_test >= -0.5) & (star_test <= 0)))]
            sig_test = np.std(combine_mag_diffs1x[:,j])
            #print sig_test,len(star_test)
            med_test = np.median(combine_mag_diffs1x[:,j])
            keep = star_test[np.where(np.abs(star_test-med_test) < 0.01)]
            #plt.hist(keep)
            #plt.show()
            combine_mag_diffs1x_mean.append(np.mean(keep))
            combine_mag_diffs1x_med.append(np.median(keep))
            combine_mag_diffs1x_std.append(np.std(keep))
            combine_mag_diffs1x_sem.append(np.std(keep)/np.sqrt(len(keep)))
            if j == 8:
                print 'using ',len(keep), 'stars in ap correction'
        else:
            combine_mag_diffs1x_mean.append(np.mean(combine_mag_diffs1x[:,j]))
            combine_mag_diffs1x_med.append(np.median(combine_mag_diffs1x[:,j]))
            combine_mag_diffs1x_std.append(np.std(combine_mag_diffs1x[:,j]))
            combine_mag_diffs1x_sem.append(np.std(combine_mag_diffs1x[:,j])/np.sqrt(len(combine_mag_diffs1x[:,j])))

        combine_mag_diffs_med.append(np.median(combine_mag_diffs[:,j]))
        combine_mag_diffs_std.append(np.std(combine_mag_diffs[:,j]))

    tck = interpolate.splrep(x, combine_mag_diffs_med, s=0)
    xnew = np.arange(1,7.0,0.25)
    ynew = interpolate.splev(xnew,tck,der=0)
    ynew_der = interpolate.splev(xnew,tck,der=1)
    plt.figure(figsize=(14,7))
    ax1 = plt.subplot(121)
    ax2 = plt.subplot(122)
    ax1.errorbar(x,combine_mag_diffs_med,yerr=combine_mag_diffs_std,fmt='o',label='Median mag. Diff.')
    ax1.plot(xnew,ynew,'r-',label='Spline fit')
    ax1.set_ylabel('Mag(n+1) - Mag(n)')
    ax1.set_xlabel('n $ \cdot $ fwhm')
    ax2.plot(xnew,ynew_der,'r-')
    ax2.axhline(y=0)
    ax2.set_ylabel('Value of Spline 1st Derivative')
    ax2.set_xlabel('n $ \cdot $ fwhm')
    ax1.legend(loc=4)
    plt.tight_layout()
    plt.show()

    # print combine_mag_diffs1x_mean
    # print combine_mag_diffs1x_std
    # print combine_mag_diffs1x_sem

    for i in range(len(x)):
        plt.errorbar(x[i],combine_mag_diffs1x_mean[i],yerr=combine_mag_diffs1x_std[i],fmt='bo')
    plt.ylim(-0.45,0.1)
    plt.xlim(-0.1,7.5)
    plt.xlabel('n fwhm')
    plt.ylabel('ap correction')
    plt.show()

    #apcor = np.median(combine_mag_diffs1x_mean[5:10:1])
    apcor = combine_mag_diffs1x_mean[8]
    apcor_std = combine_mag_diffs1x_std[8]
    apcor_sem = combine_mag_diffs1x_sem[8]
    apcor_med = combine_mag_diffs1x_med[8]

    print 'aperture corr. = {0:6.3f}'.format(apcor)
    print 'aperture corr. med. = {0:6.3f}'.format(apcor_med)
    print 'aperture corr. std = {0:6.3f}'.format(apcor_std)
    print 'aperture corr. sem = {0:6.3f}'.format(apcor_sem)

    return apcor, apcor_std, apcor_sem
コード例 #16
0
ファイル: full_calibrate.py プロジェクト: bjanesh/odi-tools
def sdss_phot_full(img,fwhm,airmass):
    """
    Run ``pyraf phot`` on SDSS sources in the field. ``phot`` is given the
    following parameters ::

        iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
        iraf.apphot.phot.setParam('interactive',"no")
        iraf.apphot.phot.setParam('verify',"no")
        iraf.datapars.setParam('datamax',50000.)
        iraf.datapars.setParam('gain',"gain")
        iraf.datapars.setParam('ccdread','rdnoise')
        iraf.datapars.setParam('exposure',"exptime")

        iraf.datapars.setParam('filter',"filter")
        iraf.datapars.setParam('obstime',"time-obs")
        iraf.datapars.setParam('sigma',"INDEF")
        iraf.photpars.setParam('zmag',0.)
        iraf.centerpars.setParam('cbox',9.)
        iraf.centerpars.setParam('maxshift',3.)
        iraf.fitskypars.setParam('salgorithm',"median")
        iraf.fitskypars.setParam('dannulus',10.)
        iraf.datapars.setParam('xairmass',float(airmass))
        iraf.datapars.setParam('fwhmpsf',float(fwhm))
        iraf.photpars.setParam('apertures',5.*float(fwhm)) # use a big aperture for this
        iraf.fitskypars.setParam('annulus',6.*float(fwhm))

    Parameters
    ----------
    img : str
        String containing name of the image currently in use

    fwhm : float
        A measure of the fwhm of stars in the stacked image

    airmass : float
        Airmass assigned to the stacked image. Should match the image in the
        dither that was used as the reference scaling image.

    """
    from pyraf import iraf
    iraf.ptools(_doprint=0)
    # first grab the header and hang on to it so we can use other values
    hdulist = odi.fits.open(img.f)
    hdr1 = hdulist[0].header
    filter = hdr1['filter']
    hdulist.close()

    iraf.unlearn(iraf.phot,iraf.datapars,iraf.photpars,iraf.centerpars,iraf.fitskypars)
    iraf.apphot.phot.setParam('interactive',"no")
    iraf.apphot.phot.setParam('verify',"no")
    iraf.datapars.setParam('datamax',50000.)
    iraf.datapars.setParam('gain',"gain")
    iraf.datapars.setParam('ccdread','rdnoise')
    iraf.datapars.setParam('exposure',"exptime")

    iraf.datapars.setParam('filter',"filter")
    iraf.datapars.setParam('obstime',"time-obs")
    iraf.datapars.setParam('sigma',"INDEF")
    iraf.photpars.setParam('zmag',0.)
    iraf.centerpars.setParam('cbox',9.)
    iraf.centerpars.setParam('maxshift',3.)
    iraf.fitskypars.setParam('salgorithm',"median")
    iraf.fitskypars.setParam('dannulus',10.)

    if not os.path.isfile(img.nofits()+'.sdssphot'): # only do this once
        print 'phot-ing the sdss sources in ', filter
        iraf.datapars.setParam('xairmass',float(airmass))
        iraf.datapars.setParam('fwhmpsf',float(fwhm))
        iraf.photpars.setParam('apertures',5.*float(fwhm)) # use a big aperture for this
        iraf.fitskypars.setParam('annulus',6.*float(fwhm))
        iraf.apphot.phot(image=img, coords=img.nofits()+'.match.sdssxy', output=img.nofits()+'.phot.1')
        phot_tbl = img.nofits()+'.sdssphot'
        with open(phot_tbl,'w+') as txdump_out :
            iraf.ptools.txdump(textfiles=img.nofits()+'.phot.1', fields="id,mag,merr,msky,stdev,rapert,xcen,ycen,ifilter,xairmass,image",expr='yes', headers='no', Stdout=txdump_out)

        outputfile_clean = open(phot_tbl.replace('.sdssphot','_clean.sdssphot'),"w")
        for line in open(phot_tbl,"r"):
            if not 'INDEF' in line:
                outputfile_clean.write(line)
            if 'INDEF' in line:
                outputfile_clean.write(line.replace('INDEF','999'))
        outputfile_clean.close()
        os.rename(phot_tbl.replace('.sdssphot','_clean.sdssphot'),phot_tbl)