Skip to content

Instantly share code, notes, and snippets.

@larrybradley
Created October 20, 2017 19:57
Show Gist options
  • Save larrybradley/e23d905cd69ca44d032541f69c2b5433 to your computer and use it in GitHub Desktop.
Save larrybradley/e23d905cd69ca44d032541f69c2b5433 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x180ff8bb00>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAD8CAYAAABXXhlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJztnVuMXelV5/9r731uVeW62mWXXb62\nu5vuBBJQE2UEI6EAUgiI5CEjDYNGQYqUlxkpCEYQZqSRkOYBXoCXEahFEP2ACJcgJYoYRlEmATED\nnXSSJknHSezudrcv5Sq77pdz23t/8+DTXbX+67Or+nZcZq+fZNn7eF++s/f+zjnrv9f6LwkhwHGc\napE86AE4jjN8fOI7TgXxie84FcQnvuNUEJ/4jlNBfOI7TgXxie84FcQnvuNUEJ/4jlNBsmEerJ6N\nhFZt4vXlkEY+d4QWC51ZGBJa4YBI+cYzFMN+hxK7Ah+Hxyv9wu6H1jHbFGVkG33uysyey6Td0/ut\n68vN5xYAykaq99Gj8UbeM58n6fXpBTs2M5Y3cX1imLF06Rw06mabfY+dR65Zps8T38vSz++/TwBI\nU/saZ9LS+S4a9lym7d3xtfvr6BU7+06SoU78Vm0C/+bcr7y+XEyNmHX4BKZbXbVcNuyQzQdI5G3z\nfnjiILeTKzTpWHRRYmNJd/RNX9b1xc2W1u1xRpp6m1ZND3WjbbcZ1dv0ZlpmncZ3run9zh/T+93s\nmG0656bUcvP6hj5u5AMm1OjD4pVbalmaeqwA0D99VC2nOz2zTuxDRh/YTthA1zV5kc7Bo6fNNgkf\nmz8I1vQ5AAAc1ecpH9fvsXZ92W5DlDPj5jXhD+uavse2H7HbjF3aPdY/XX1m3+MC/lPfcSqJT3zH\nqSBD/amPAPXzLLuxYlc5on/+lw39s5fjYQDIVrb3XQcUJ4em3m85QscBkK7rn9ihpePDbJmOC6CY\n0D+5hX41hrb9eV3OHLHj3fv/Y/ZnfDGux1JfjoQDc/rnNCJSAdO4uXXf/985Y39qjn7tqlqWI2N6\nHDV7m2V0bouxhlkn5VCEdY2WvWZJW4daMq7PbcIhH6wmYcY7Ebk+pB1Ioa9HcUKHAoDVHzgMBIAw\nqUOGpKv1hbF/vmrHMr2rm8XC3Bj+je84FcQnvuNUEJ/4jlNBfOI7TgUZrriHANmTDJHPWQEk6dBz\n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\nEJ/4jlNB/j99ZBGDm2ed4QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x104dae198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# make a fake source\n",
"from astropy.modeling.models import Gaussian2D\n",
"from photutils.datasets import make_noise_image\n",
"\n",
"y, x = np.mgrid[0:50, 0:50]\n",
"g = Gaussian2D(100, 25, 25, 5, 5)\n",
"data = g(x, y)\n",
"data += make_noise_image(data.shape, mean=0., stddev=5)\n",
"plt.imshow(data)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from photutils import DAOStarFinder, DAOGroup, MMMBackground\n",
"from photutils import IntegratedGaussianPRF, BasicPSFPhotometry\n",
"from astropy.modeling.fitting import LevMarLSQFitter\n",
"from astropy.stats import gaussian_sigma_to_fwhm\n",
"\n",
"std = 5.\n",
"sigma_psf = 5\n",
"daofind = DAOStarFinder(threshold=5.0*std,\n",
" fwhm=sigma_psf*gaussian_sigma_to_fwhm)\n",
"daogroup = DAOGroup(1.5*sigma_psf*gaussian_sigma_to_fwhm)\n",
"mode_bkg = MMMBackground()\n",
"psf_model = IntegratedGaussianPRF(sigma=sigma_psf)\n",
"fitter = LevMarLSQFitter()\n",
"\n",
"basic_psf = BasicPSFPhotometry(finder=daofind,\n",
" group_maker=daogroup,\n",
" bkg_estimator=mode_bkg,\n",
" psf_model=psf_model,\n",
" fitter=fitter,\n",
" fitshape=(11, 11))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"&lt;Table length=1&gt;\n",
"<table id=\"table103347764416\" class=\"table-striped table-bordered table-condensed\">\n",
"<thead><tr><th>x_0</th><th>y_0</th><th>flux_0</th><th>id</th><th>group_id</th><th>x_fit</th><th>y_fit</th><th>flux_fit</th><th>flux_unc</th><th>x_0_unc</th><th>y_0_unc</th></tr></thead>\n",
"<thead><tr><th>float64</th><th>float64</th><th>float64</th><th>int64</th><th>int64</th><th>float64</th><th>float64</th><th>float64</th><th>float64</th><th>float64</th><th>float64</th></tr></thead>\n",
"<tr><td>24.9956051415</td><td>24.9261177539</td><td>14588.735965</td><td>1</td><td>1</td><td>25.0005907641</td><td>24.9252816991</td><td>15625.500838</td><td>100.343302923</td><td>0.0598240658485</td><td>0.05982705301</td></tr>\n",
"</table>"
],
"text/plain": [
"<Table length=1>\n",
" x_0 y_0 flux_0 ... x_0_unc y_0_unc \n",
" float64 float64 float64 ... float64 float64 \n",
"------------- ------------- ------------ ... --------------- -------------\n",
"24.9956051415 24.9261177539 14588.735965 ... 0.0598240658485 0.05982705301"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tbl = basic_psf(data)\n",
"tbl"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 100.34330292])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the uncertainties are in the columns ending in '_unc', e.g.\n",
"tbl['flux_unc'].data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:photutils-dev]",
"language": "python",
"name": "conda-env-photutils-dev-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment