import galsim import sep import numpy as np from scipy.interpolate import interp1d import pylab as pl import os import sys class PSFModel(object): def __init__(self, sigSpin=0., psfRa=0.15): # TODO: what are the nesseary fields in PSFModel class? pass def PSFspin(self, psf, sigSpin, sigGauss, dx, dy): """ The PSF profile at a given image position relative to the axis center Parameters: theta : spin angles in a given exposure in unit of [arcsecond] dx, dy: relative position to the axis center in unit of [pixels] Return: Spinned PSF: g1, g2 and axis ratio 'a/b' """ a2Rad = np.pi/(60.0*60.0*180.0) ff = sigGauss * 0.107 * (1000.0/10.0) # in unit of [pixels] rc = np.sqrt(dx*dx + dy*dy) cpix = rc*(sigSpin*a2Rad) beta = (np.arctan2(dy, dx) + np.pi/2) ell = cpix**2/(2.0*ff**2+cpix**2) # ell *= 10.0 qr = np.sqrt((1.0+ell)/(1.0-ell)) # psfShape = galsim.Shear(e=ell, beta=beta) # g1, g2 = psfShape.g1, psfShape.g2 # qr = np.sqrt((1.0+ell)/(1.0-ell)) # return ell, beta, qr PSFshear = galsim.Shear(e=ell, beta=beta*galsim.radians) return psf.shear(PSFshear), PSFshear