In [8]:
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = 12,8

In [9]:
from astropy.io import fits
import photutils
from bok.header_fix import header_fix
from common import *
from bok.constant import const

In [10]:
amp_fits = '/data/d7420.0130.04.fits'
amp_ldac = '/data/d7420.0130.04.ldac'

In [11]:
cata = fits.getdata(amp_ldac, 2)

In [12]:
cata.columns


Out[12]:
ColDefs(
    name = 'NUMBER'; format = '1J'; disp = 'I10'
    name = 'X_IMAGE'; format = '1E'; unit = 'pixel'; disp = 'F10.3'
    name = 'Y_IMAGE'; format = '1E'; unit = 'pixel'; disp = 'F10.3'
    name = 'ELONGATION'; format = '1E'; disp = 'F8.3'
    name = 'FWHM_IMAGE'; format = '1E'; unit = 'pixel'; disp = 'F8.2'
    name = 'MAG_AUTO'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAGERR_AUTO'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAG_BEST'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAGERR_BEST'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAG_PETRO'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAGERR_PETRO'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAG_APER'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'MAGERR_APER'; format = '1E'; unit = 'mag'; disp = 'F8.4'
    name = 'BACKGROUND'; format = '1E'; unit = 'count'; disp = 'G12.7'
    name = 'FLAGS'; format = '1I'; disp = 'I3'
)

In [13]:
c1 = fits.Column(name="MAG_CORR", format="1E")
c2 = fits.Column(name="MAGERR_CORR", format="1E")
cols = fits.ColDefs([ c1, c2 ])

In [63]:
cata.BACKGROUND


Out[63]:
array([ 32772.80859375,  32772.80078125,  32772.26171875,  32772.7890625 ,
        32772.77734375,  32772.765625  ,  32772.76953125,  32771.93359375,
        32772.73828125,  32772.71875   ,  32772.734375  ,  32772.73046875,
        32772.6953125 ,  32772.69921875,  32771.890625  ,  32772.40625   ,
        32772.00390625,  32772.66015625,  32772.66015625,  32772.66015625,
        32771.984375  ,  32771.98828125,  32771.94140625,  32772.421875  ,
        32772.6171875 ,  32771.95703125,  32772.1484375 ,  32771.875     ,
        32772.6171875 ,  32772.30859375,  32772.60546875,  32772.546875  ,
        32772.33203125,  32772.53125   ,  32772.4375    ,  32772.203125  ,
        32772.53125   ,  32772.53515625,  32771.9921875 ,  32772.16015625,
        32771.76171875,  32771.765625  ,  32772.4921875 ,  32772.23828125,
        32772.23828125,  32772.44140625,  32771.98828125,  32772.015625  ,
        32772.01953125,  32772.28125   ,  32771.765625  ,  32771.9453125 ,
        32772.12109375,  32772.55078125,  32772.5625    ,  32772.21875   ,
        32771.640625  ,  32771.79296875,  32772.62890625,  32771.87109375,
        32771.80078125,  32772.2578125 ,  32771.58984375,  32772.69921875,
        32771.75390625,  32771.82421875,  32772.7734375 ,  32772.234375  ,
        32772.82421875,  32771.9140625 ,  32771.8984375 ,  32772.16015625,
        32771.91015625,  32771.71875   ,  32772.21484375,  32771.85546875,
        32772.6796875 ,  32772.1953125 ,  32771.671875  ,  32772.68359375,
        32771.953125  ,  32771.51171875], dtype=float32)

In [17]:
newtab = fits.BinTableHDU.from_columns(cata.columns + cols)

In [20]:
newtab.data.MAG_CORR


Out[20]:
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.], dtype=float32)

In [14]:
image = fits.getdata(amp_fits) - 32768

In [15]:
plt.imshow(np.log10(image), clim=(0,1))
plt.plot(cata.X_IMAGE, cata.Y_IMAGE, "+")
plt.xlim(10,2000)
plt.ylim(10,2000)
plt.colorbar()


/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: divide by zero encountered in log10
  if __name__ == '__main__':
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in log10
  if __name__ == '__main__':
Out[15]:
<matplotlib.colorbar.Colorbar at 0x107421b70>

In [34]:
sum(( (10 < cata.X_IMAGE) & (cata.X_IMAGE < 2000) & (10 < cata.Y_IMAGE) & (cata.Y_IMAGE < 2000) ))


Out[34]:
58

In [38]:
def noborder(x, y, xlim, ylim) :
    return (xlim[0] < x) & (x < xlim[1]) & (ylim[0] < y) & (y < ylim[1])

In [16]:
from astropy.stats import sigma_clipped_stats
mean, median, std = sigma_clipped_stats(image, sigma=3.0, iters=5)
print (mean, median, std)


3.95168787124 3.93359375 0.335520028735

In [50]:
sigma_clipped_stats(cata.FWHM_IMAGE)


Out[50]:
(4.845592659963688, 4.1341795921325684, 3.6407245261965655)

In [51]:
sdao = photutils.daofind(image, fwhm=4.0, threshold=3.*std)    
sdao


Out[51]:
<Table length=299>
idxcentroidycentroidsharpnessroundness1roundness2npixskypeakfluxmag
int64float64float64float64float64float64float64float64float64float64float64
12013.54912971.721515671730.2312652023810.5687652893480.20117961019125.00.03.792968754.11612440347-1.53622123041
2212.7732103285.757709255960.4917165862230.1945649175560.69747740577225.00.05.128906251.05342450574-0.0565085427488
37.080117433716.628446489540.5182113958610.3336530123520.67997429146425.00.06.42968751.12965049177-0.132360239299
418.25475087916.999866143470.245367320682-0.893150979291-0.8427379354225.00.05.35156251.17560257517-0.175651321824
51187.260530916.755072722120.5007324658670.0349631377903-0.020855822251525.00.04.785156251.02514973896-0.0269682636129
680.96218684619.98288111570.389624466239-0.129695430224-0.31667449115625.00.05.093751.0180204651-0.0193912715994
795.49600942089.873136652470.771956202857-0.705592376135-0.10615911633525.00.05.707031251.04639659244-0.0492407917925
8703.20068384210.16743058390.564232711415-0.952368295196-0.081986969851125.00.05.06251.08825101542-0.0918227026478
95.8977888131115.89560460610.4277348128530.564015591535-0.4379899925725.00.06.19531251.79820854346-0.637100141772
10184.01708245618.10610082530.8107553273810.00790070744620.17976418252225.00.05.5781251.09055341468-0.0941173548202
.................................
2907.138634165431727.155183980.413183977332-0.675738937509-0.529234709725.00.05.2343751.04416759713-0.0469255298725
291551.8886508321737.99871340.2217647857220.5958527850130.52928108263225.00.04.218751.01625984487-0.0175119144714
2921445.031783151745.512320750.414678154785-0.0826423180006-0.18578733537825.00.024.058593757.06608551678-2.12294722287
293830.2045081031840.644786490.391135823457-0.00359347757474-0.064535233025425.00.039.0507812511.8890295251-2.68786601395
29486.15740506761849.880004870.736515498701-0.847458798239-0.43399723615725.00.04.9531251.02623848773-0.0281207456713
2951047.731083591878.974809830.5999929471450.0411189893048-0.10608667320825.00.04.371093751.00230639863-0.00250125715774
2961033.049202091908.08898870.5857120684360.373827451713-0.26258535171225.00.04.4218751.00372608055-0.00403802222294
2978.664217173641946.306531460.4351121496740.464580831931-0.61637899803925.00.04.972656251.01334991316-0.0143985865366
2980.2488681377922007.218937450.6516797312110.8520896847260.96848771914425.00.026.29687526.2177226563-3.54648741244
2990.5707916796252045.715331610.9478930309920.624669670060.52536853386925.00.014.57812510.14534517-2.51566706851

In [52]:
si = photutils.irafstarfind(image, fwhm=4.0, threshold=3.*std)    
si


Out[52]:
<Table length=279>
idxcentroidycentroidfwhmsharpnessroundnesspanpixskypeakfluxmag
int64float64float64float64float64float64float64float64float64float64float64float64
127.00104936381.393817498142.7600551230.6900137807490.176082216299174.53268800418.02.30761718753.133789062544.669921875-4.12503798229
2136.9702602231.350681536562.742101570880.6855253927210.177706647620.9700010310618.02.519531252.710937537.828125-3.94453703864
3468.9957920671.272232770562.797036375880.699259093970.1877812156372.8921832389418.02.33886718753.122070312538.060546875-3.95118756045
4565.9577165141.329758000182.775271478980.6938178697450.1789779371842.9296814328118.02.058593753.0195312544.06640625-4.11026908478
5693.025833041.330049756242.778063722160.694515930540.179468916369179.34485531418.02.07910156252.655273437538.861328125-3.97379409742
6823.0429484081.335588124772.76123433460.6903085836490.199702598738176.05290173318.02.31933593752.563476562536.380859375-3.90218238397
7870.9559745221.320968152872.781723481080.695430870270.199895018208173.94368173818.02.18847656252.807617187538.330078125-3.9588492611
81132.029269841.315658306382.791862060530.6979655151310.1921060971586.3741447899718.02.17285156252.350585937536.833984375-3.91562174884
91152.994016161.333599281942.784630203950.6961575509880.191843428111.0014865407518.02.0449218752.76757812539.16796875-3.98232762407
101266.015319151.369456264782.782261067680.695565266920.1943585919611.1300249792318.01.93752.8476562541.30859375-4.04010102684
....................................
27016.01202774142045.635724332.77394480250.6934862006240.199813439743171.39433446518.02.07519531252.905273437540.271484375-4.01249409413
271122.9088435372045.65337522.768163219110.6920408047770.1931065308461.1136157343318.01.92968752.632812537.32421875-3.9299768152
272387.9727965182045.660718172.793793167140.6984482917850.1993403089122.8843213225418.01.910156252.51562535.8984375-3.88768886519
273853.9721817162045.66158162.798239240050.6995598100120.199010095712179.32608992718.01.8535156252.43945312534.82421875-3.8547034555
2741199.953185152045.70756242.800020586710.7000051466770.197618172362177.81752531218.01.9843752.45312531.45703125-3.74429433445
2751213.020425732045.65614782.768155013830.6920387534570.19637659495177.27267679718.01.74707031252.268554687534.041015625-3.83000627231
2761341.022443892045.653933352.78526868880.6963171721990.199687665122176.83791359118.01.82031252.4687534.4609375-3.84331772033
2771404.999728922045.67972352.788538137580.6971345343940.1921458641634.9876208142518.01.9863281251.90820312528.8203125-3.64924671395
2781644.007396072045.685029332.784102224920.6960255562290.192855144971176.44408181618.01.8906252.1835937530.6328125-3.71546718163
2792013.57397892045.585301062.523347731620.6308369329060.118437304577136.71823297715.00.84667968752.997070312539.3310546875-3.98683898113

In [53]:
ixdao = np.where(noborder(sdao["xcentroid"], sdao["ycentroid"], (10, 2000), (10, 2000)))
#ixsou = np.where(noborder(sources["xcentroid"], sources["ycentroid"], (10, 2000), (10, 2000)))
ixi = np.where(noborder(si["xcentroid"], si["ycentroid"], (10, 2000), (10, 2000)))
plt.plot(cata.X_IMAGE, cata.Y_IMAGE, 's')
plt.plot(sdao[ixdao]["xcentroid"], sdao[ixdao]["ycentroid"], '+')
#plt.plot(sources[ixsou]["xcentroid"], sources[ixsou]["ycentroid"], 's')
plt.plot(si[ixi]["xcentroid"], si[ixi]["ycentroid"], 'x')
print (len(ixdao[0]), len(ixi[0]))


230 231

In [54]:
from photutils import CircularAperture

In [55]:
pos = list(zip(cata.X_IMAGE, cata.Y_IMAGE))

In [56]:
apertures = CircularAperture(pos, r=3.)

In [58]:
phot_aper_3 = photutils.aperture_photometry(image, apertures)
phot_aper_3


Out[58]:
<Table length=82>
aperture_sumxcenterycenter
pixpix
float64float32float32
157.7433919858.9652840.5508
153.8246824718.2055163.8452
142.799279948783.79792.0179
155.6867610248.2709396.8971
154.9349580899.49722115.495
156.93822521610.5285135.746
154.593386647.55164145.246
254.4114167781817.26184.059
156.1439407399.23894187.75
.........
121.184780959899.5061211.01
114.1065404071343.051530.02
143.740464782135.8221162.55
144.266764299819.7131549.51
3325.218678571.46689351.808
144.62982318204.8371124.36
219.5108715621900.051115.46
5620.22347141.55311312.285
120.872129862848.811084.62
122.3287995681797.542029.32

In [75]:
aper_flux = phot_aper_3["aperture_sum"] - 3*3*np.pi*(cata.BACKGROUND-32768.0)
aper_mag = 25.0 - 2.5 * np.log10(aper_flux)

In [67]:
sigma_clipped_stats(cata.BACKGROUND-32768)


Out[67]:
(4.264672256097561, 4.23828125, 0.37205655872489085)

In [69]:
sigma_clipped_stats(image)


Out[69]:
(3.9516878712434571, 3.93359375, 0.33552002873469028)

In [76]:
mag_d = aper_mag - cata.MAG_AUTO

In [83]:
plt.hist(mag_d, range=(-0.5,2.5), bins=30)


Out[83]:
(array([  0.,   0.,   0.,   2.,  11.,  15.,   2.,   1.,   1.,   0.,   0.,
          1.,   1.,   2.,   0.,   2.,   5.,   4.,   2.,  13.,   2.,   1.,
          0.,   0.,   0.,   0.,   0.,   1.,   1.,   0.]),
 array([-0.5, -0.4, -0.3, -0.2, -0.1,  0. ,  0.1,  0.2,  0.3,  0.4,  0.5,
         0.6,  0.7,  0.8,  0.9,  1. ,  1.1,  1.2,  1.3,  1.4,  1.5,  1.6,
         1.7,  1.8,  1.9,  2. ,  2.1,  2.2,  2.3,  2.4,  2.5]),
 <a list of 30 Patch objects>)

In [ ]: