Source code for pyvista.simulate

# routines for simulating images

import numpy as np
import pdb
from astropy.nddata import CCDData

sig2fwhm = 2*np.sqrt(2*np.log(2))

[docs]def gauss2d(data, coords,fwhm=1,back=0,noise=False,rn=0) : """ Add 2d gaussians to data given input coords, fwhm, noise """ # if we are only given one object, make it a list try : iter(coords[0]) except TypeError : coords=[coords] # set arrays of pixel index values ypix,xpix = np.mgrid[0:data.shape[0],0:data.shape[1]] sig2 = (fwhm/sig2fwhm)**2 # loop over input objects for coord in coords: amp = coord[0]/2./np.pi/sig2 x = coord[1] y = coord[2] dist2 = (xpix-x)**2 + (ypix-y)**2 # select points within 10*sigma ~ 4 FWHM gd = np.where(dist2 < 100*sig2) data[gd[0],gd[1]] += amp*np.exp(-dist2[gd[0],gd[1]]/(2.*sig2)) # add background data = data.astype(float) + back # add noise if noise or rn>0 : data = np.random.poisson(data) if rn>0 : data = data.astype(float) + \ rn*np.random.normal(size=data.shape) return CCDData(data,unit='photon')